git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* [ANNOUNCE] Git v2.45.0
@ 2024-04-29 17:12  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2024-04-29 17:12 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

The latest feature release Git v2.45.0 is now available at the
usual places.  It is comprised of 540 non-merge commits since
v2.44.0, contributed by 96 people, 38 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.45.0'
tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.44.0 are as follows.
Welcome to the Git development community!

  Ahelenia Ziemiańska, Angelo Dureghello, Aryan Gupta, Benjamin
  Flesch, Bo Anderson, Brian C Tracy, Brian Lyles, Bruno Haible,
  Chuck Lever, Dario Gjorgjevski, Dirk Gouders, Eugenio Gigante,
  Florian Schmidt, Haritha D, Harmen Stoppels, Jean-Rémy
  Falleri, Jiamu Sun, Jonas Wunderlich, Jonathan Davies, Julio
  Bacellari, Kipras Melnikovas, Kisaragi Hiu, Marcel Röthke,
  Matthew Rollings, Max Gautier, mirth hickford, Paweł Dominiak,
  Pi Fisher, Ralph Seichter, Richard Macklin, shejialuo, Steven
  Jeuris, Thalia Archibald, Tiago Pascoal, Vincenzo Mezzela,
  Vũ Tiến Hưng, Xing Xin, and Yehezkel Bernat.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alexander Shopov, Arkadii Yakovets, Bagas Sanjaya, Beat Bolli,
  brian m. carlson, Chandra Pratap, Christian Couder, Derrick
  Stolee, Đoàn Trần Công Danh, Dragan Simic, Elijah Newren,
  Emir SARI, Eric Sunshine, Eric W. Biederman, Ghanshyam Thakkar,
  Han Young, Jakub Wilk, Jean-Noël Avila, Jeff Hostetler, Jeff
  King, Jiang Xin, Johannes Schindelin, Johannes Sixt, John Cai,
  Josh Steadmon, Josh Triplett, Junio C Hamano, Justin Tobler,
  Karthik Nayak, Kate Golovanova, Kristoffer Haugsbakk, Kyle
  Lippincott, Kyle Meyer, Linus Arver, Lumynous, Manlio Perillo,
  Matthias Aßhauer, Matthias Rüster, M Hickford, Michael Lohmann,
  Michael Osipov, Mike Hommey, Orgad Shaneh, Patrick Steinhardt,
  Peter Hutterer, Peter Krefting, Philippe Blain, Phillip Wood,
  Ralf Thielow, René Scharfe, Rubén Justo, Sergey Organov,
  SZEDER Gábor, Taylor Blau, Teng Long, Ville Skyttä, Yasushi
  SHOJI, and Yi-Jyun Pan.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.45 Release Notes
=======================

Backward Compatibility Notes

UI, Workflows & Features

 * Integrate the reftable code into the refs framework as a backend.
   With "git init --ref-format=reftable", hopefully it would be a lot
   more efficient to manage a repository with many references.

 * "git checkout -p" and friends learned that that "@" is a synonym
   for "HEAD".

 * Variants of vimdiff learned to honor mergetool.<variant>.layout
   settings.

 * "git reflog" learned a "list" subcommand that enumerates known reflogs.

 * When a merge conflicted at a submodule, merge-ort backend used to
   unconditionally give a lengthy message to suggest how to resolve
   it.  Now the message can be squelched as an advice message.

 * "git for-each-ref" learned "--include-root-refs" option to show
   even the stuff outside the 'refs/' hierarchy.

 * "git rev-list --missing=print" has learned to optionally take
   "--allow-missing-tips", which allows the objects at the starting
   points to be missing.

 * "git merge-tree" has learned that the three trees involved in the
   3-way merge only need to be trees, not necessarily commits.

 * "git log --merge" learned to pay attention to CHERRY_PICK_HEAD and
   other kinds of *_HEAD pseudorefs.

 * Platform specific tweaks for OS/390 has been added to
   config.mak.uname.

 * Users with safe.bareRepository=explicit can still work from within
   $GIT_DIR of a seconary worktree (which resides at .git/worktrees/$name/)
   of the primary worktree without explicitly specifying the $GIT_DIR
   environment variable or the --git-dir=<path> option.

 * The output format for dates "iso-strict" has been tweaked to show
   a time in the Zulu timezone with "Z" suffix, instead of "+00:00".

 * "git diff" and friends learned two extra configuration variables,
   diff.srcPrefix and diff.dstPrefix.

 * The status.showUntrackedFiles configuration variable had a name
   that tempts users to set a Boolean value expressed in our usual
   "false", "off", and "0", but it only took "no".  This has been
   corrected so "true" and its synonyms are taken as "normal", while
   "false" and its synonyms are taken as "no".

 * Remove an ancient and not well maintained Hg-to-git migration
   script from contrib/.

 * Hints that suggest what to do after resolving conflicts can now be
   squelched by disabling advice.mergeConflict.

 * Allow git-cherry-pick(1) to automatically drop redundant commits via
   a new `--empty` option, similar to the `--empty` options for
   git-rebase(1) and git-am(1). Includes a soft deprecation of
   `--keep-redundant-commits` as well as some related docs changes and
   sequencer code cleanup.

 * "git config" learned "--comment=<message>" option to leave a
   comment immediately after the "variable = value" on the same line
   in the configuration file.

 * core.commentChar used to be limited to a single byte, but has been
   updated to allow an arbitrary multi-byte sequence.

 * "git add -p" and other "interactive hunk selection" UI has learned to
   skip showing the hunk immediately after it has already been shown, and
   an additional action to explicitly ask to reshow the current hunk.

 * "git pack-refs" learned the "--auto" option, which defers the decision of
   whether and how to pack to the ref backend. This is used by the reftable
   backend to avoid repacking of an already-optimal ref database. The new mode
   is triggered from "git gc --auto".

 * "git add -u <pathspec>" and "git commit [-i] <pathspec>" did not
   diagnose a pathspec element that did not match any files in certain
   situations, unlike "git add <pathspec>" did.

 * The userdiff patterns for C# has been updated.

 * Git writes a "waiting for your editor" message on an incomplete
   line after launching an editor, and then append another error
   message on the same line if the editor errors out.  It now clears
   the "waiting for..." line before giving the error message.

 * The filename used for rejected hunks "git apply --reject" creates
   was limited to PATH_MAX, which has been lifted.

 * When "git bisect" reports the commit it determined to be the
   culprit, we used to show it in a format that does not honor common
   UI tweaks, like log.date and log.decorate.  The code has been
   taught to use "git show" to follow more customizations.


Performance, Internal Implementation, Development Support etc.

 * The code to iterate over refs with the reftable backend has seen
   some optimization.

 * More tests that are marked as "ref-files only" have been updated to
   improve test coverage of reftable backend.

 * Some parts of command line completion script (in contrib/) have
   been micro-optimized.

 * The way placeholders are to be marked-up in documentation have been
   specified; use "_<placeholder>_" to typeset the word inside a pair
   of <angle-brackets> emphasized.

 * "git --no-lazy-fetch cmd" allows to run "cmd" while disabling lazy
   fetching of objects from the promisor remote, which may be handy
   for debugging.

 * The implementation in "git clean" that makes "-n" and "-i" ignore
   clean.requireForce has been simplified, together with the
   documentation.

 * Uses of xwrite() helper have been audited and updated for better
   error checking and simpler code.

 * Some trace2 events that lacked def_param have learned to show it,
   enriching the output.

 * The parse-options code that deals with abbreviated long option
   names have been cleaned up.

 * The code in reftable backend that creates new table files works
   better with the tempfile framework to avoid leaving cruft after a
   failure.

 * The reftable code has its own custom binary search function whose
   comparison callback has an unusual interface, which caused the
   binary search to degenerate into a linear search, which has been
   corrected.

 * The code to iterate over reflogs in the reftable has been optimized
   to reduce memory allocation and deallocation.

 * Work to support a repository that work with both SHA-1 and SHA-256
   hash algorithms has started.

 * A new fuzz target that exercises config parsing code has been
   added.

 * Fix the way recently added tests interpolate variables defined
   outside them, and document the best practice to help future
   developers.

 * Introduce an experimental protocol for contributors to propose the
   topic description to be used in the "What's cooking" report, the
   merge commit message for the topic, and in the release notes and
   document it in the SubmittingPatches document.

 * The t/README file now gives a hint on running individual tests in
   the "t/" directory with "make t<num>-*.sh t<num>-*.sh".
   (merge 8d383806fc pb/test-scripts-are-build-targets later to maint).

 * The "hint:" messages given by the advice mechanism, when given a
   message with a blank line, left a line with trailing whitespace,
   which has been cleansed.

 * Documentation rules has been explicitly described how to mark-up
   literal parts and a few manual pages have been updated as examples.

 * The .editorconfig file has been taught that a Makefile uses HT
   indentation.

 * t-prio-queue test has been cleaned up by using C99 compound
   literals; this is meant to also serve as a weather-balloon to smoke
   out folks with compilers who have trouble compiling code that uses
   the feature.

 * Windows binary used to decide the use of unix-domain socket at
   build time, but it learned to make the decision at runtime instead.

 * The "shared repository" test in the t0610 reftable test failed
   under restrictive umask setting (e.g. 007), which has been
   corrected.

 * Document and apply workaround for a buggy version of dash that
   mishandles "local var=val" construct.

 * The codepaths that reach date_mode_from_type() have been updated to
   pass "struct date_mode" by value to make them thread safe.

 * The strategy to compact multiple tables of reftables after many
   operations accumulate many entries has been improved to avoid
   accumulating too many tables uncollected.

 * The code to iterate over reftable blocks has seen some optimization
   to reduce memory allocation and deallocation.

 * The way "git fast-import" handles paths described in its input has
   been tightened up and more clearly documented.

 * The cvsimport tests required that the platform understands
   traditional timezone notations like CST6CDT, which has been
   updated to work on those systems as long as they understand
   POSIX notation with explicit tz transition dates.

 * The code to format trailers have been cleaned up.


Fixes since v2.44
-----------------

 * "git apply" on a filesystem without filemode support have learned
   to take a hint from what is in the index for the path, even when
   not working with the "--index" or "--cached" option, when checking
   the executable bit match what is required by the preimage in the
   patch.
   (merge 45b625142d cp/apply-core-filemode later to maint).

 * "git column" has been taught to reject negative padding value, as
   it would lead to nonsense behaviour including division by zero.
   (merge 76fb807faa kh/column-reject-negative-padding later to maint).

 * "git am --help" now tells readers what actions are available in
   "git am --whitespace=<action>", in addition to saying that the
   option is passed through to the underlying "git apply".
   (merge a171dac734 jc/am-whitespace-doc later to maint).

 * "git tag --column" failed to check the exit status of its "git
   column" invocation, which has been corrected.
   (merge 92e66478fc rj/tag-column-fix later to maint).

 * Credential helper based on libsecret (in contrib/) has been updated
   to handle an empty password correctly.
   (merge 8f1f2023b7 mh/libsecret-empty-password-fix later to maint).

 * "git difftool --dir-diff" learned to honor the "--trust-exit-code"
   option; it used to always exit with 0 and signalled success.
   (merge eb84c8b6ce ps/difftool-dir-diff-exit-code later to maint).

 * The code incorrectly attempted to use textconv cache when asked,
   even when we are not running in a repository, which has been
   corrected.
   (merge affe355fe7 jk/textconv-cache-outside-repo-fix later to maint).

 * Remove an empty file that shouldn't have been added in the first
   place.
   (merge 4f66942215 js/remove-cruft-files later to maint).

 * The logic to access reflog entries by date and number had ugly
   corner cases at the boundaries, which have been cleaned up.
   (merge 5edd126720 jk/reflog-special-cases-fix later to maint).

 * An error message from "git upload-pack", which responds to "git
   fetch" requests, had a trailing NUL in it, which has been
   corrected.
   (merge 3f4c7a0805 sg/upload-pack-error-message-fix later to maint).

 * Clarify wording in the CodingGuidelines that requires <git-compat-util.h>
   to be the first header file.
   (merge 4e89f0e07c jc/doc-compat-util later to maint).

 * "git commit -v --cleanup=scissors" used to add the scissors line
   twice in the log message buffer, which has been corrected.
   (merge e90cc075cc jt/commit-redundant-scissors-fix later to maint).

 * A custom remote helper no longer cannot access the newly created
   repository during "git clone", which is a regression in Git 2.44.
   This has been corrected.
   (merge 199f44cb2e ps/remote-helper-repo-initialization-fix later to maint).

 * Various parts of upload-pack have been updated to bound the resource
   consumption relative to the size of the repository to protect from
   abusive clients.
   (merge 6cd05e768b jk/upload-pack-bounded-resources later to maint).

 * The upload-pack program, when talking over v2, accepted the
   packfile-uris protocol extension from the client, even if it did
   not advertise the capability, which has been corrected.
   (merge a922bfa3b5 jk/upload-pack-v2-capability-cleanup later to maint).

 * Make sure failure return from merge_bases_many() is properly caught.
   (merge 25fd20eb44 js/merge-base-with-missing-commit later to maint).

 * FSMonitor client code was confused when FSEvents were given in a
   different case on a case-insensitive filesystem, which has been
   corrected.
   (merge 29c139ce78 jh/fsmonitor-icase-corner-case-fix later to maint).

 * The "core.commentChar" configuration variable only allows an ASCII
   character, which was not clearly documented, which has been
   corrected.
   (merge fb7c556f58 kh/doc-commentchar-is-a-byte later to maint).

 * With release 2.44 we got rid of all uses of test_i18ngrep and there
   is no in-flight topic that adds a new use of it.  Make a call to
   test_i18ngrep a hard failure, so that we can remove it at the end
   of this release cycle.
   (merge 381a83dfa3 jc/test-i18ngrep later to maint).

 * The command line completion script (in contrib/) learned to
   complete "git reflog" better.
   (merge 1284f9cc11 rj/complete-reflog later to maint).

 * The logic to complete the command line arguments to "git worktree"
   subcommand (in contrib/) has been updated to correctly honor things
   like "git -C dir" etc.
   (merge 3574816d98 rj/complete-worktree-paths-fix later to maint).

 * When git refuses to create a branch because the proposed branch
   name is not a valid refname, an advice message is given to refer
   the user to exact naming rules.
   (merge 8fbd903e58 kh/branch-ref-syntax-advice later to maint).

 * Code simplification by getting rid of code that sets an environment
   variable that is no longer used.
   (merge 72a8d3f027 pw/rebase-i-ignore-cherry-pick-help-environment later to maint).

 * The code to find the effective end of log messages can fall into an
   endless loop, which has been corrected.
   (merge 2541cba2d6 fs/find-end-of-log-message-fix later to maint).

 * Mark-up used in the documentation has been improved for
   consistency.
   (merge 45d5ed3e50 ja/doc-markup-fixes later to maint).

 * The status.showUntrackedFiles configuration variable was
   incorrectly documented to accept "false", which has been corrected.

 * Leaks from "git restore" have been plugged.
   (merge 2f64da0790 rj/restore-plug-leaks later to maint).

 * "git bugreport --no-suffix" was not supported and instead
   segfaulted, which has been corrected.
   (merge b3b57c69da js/bugreport-no-suffix-fix later to maint).

 * The documentation for "%(trailers[:options])" placeholder in the
   "--pretty" option of commands in the "git log" family has been
   updated.
   (merge bff85a338c bl/doc-key-val-sep-fix later to maint).

 * "git checkout --conflict=bad" reported a bad conflictStyle as if it
   were given to a configuration variable; it has been corrected to
   report that the command line option is bad.
   (merge 5a99c1ac1a pw/checkout-conflict-errorfix later to maint).

 * Code clean-up in the "git log" machinery that implements custom log
   message formatting.
   (merge 1c10b8e5b0 jk/pretty-subject-cleanup later to maint).

 * "git config" corrupted literal HT characters written in the
   configuration file as part of a value, which has been corrected.
   (merge e6895c3f97 ds/config-internal-whitespace-fix later to maint).

 * A unit test for reftable code tried to enumerate all files in a
   directory after reftable operations and expected to see nothing but
   the files it wanted to leave there, but was fooled by .nfs* cruft
   files left, which has been corrected.
   (merge 0068aa7946 ps/reftable-unit-test-nfs-workaround later to maint).

 * The implementation and documentation of "object-format" option
   exchange between the Git itself and its remote helpers did not
   quite match, which has been corrected.

 * The "--pretty=<shortHand>" option of the commands in the "git log"
   family, defined as "[pretty] shortHand = <expansion>" should have
   been looked up case insensitively, but was not, which has been
   corrected.
   (merge f999d5188b bl/pretty-shorthand-config-fix later to maint).

 * "git apply" failed to extract the filename the patch applied to,
   when the change was about an empty file created in or deleted from
   a directory whose name ends with a SP, which has been corrected.
   (merge 776ffd1a30 jc/apply-parse-diff-git-header-names-fix later to maint).

 * Update a more recent tutorial doc.
   (merge 95ab557b4b dg/myfirstobjectwalk-updates later to maint).

 * The test script had an incomplete and ineffective attempt to avoid
   clobbering the testing user's real crontab (and its equivalents),
   which has been completed.
   (merge 73cb87773b es/test-cron-safety later to maint).

 * Use advice_if_enabled() API to rewrite a simple pattern to
   call advise() after checking advice_enabled().
   (merge 6412d01527 rj/use-adv-if-enabled later to maint).

 * Another "set -u" fix for the bash prompt (in contrib/) script.
   (merge d7805bc743 vs/complete-with-set-u-fix later to maint).

 * "git checkout/switch --detach foo", after switching to the detached
   HEAD state, gave the tracking information for the 'foo' branch,
   which was pointless.

 * "git apply" has been updated to lift the hardcoded pathname length
   limit, which in turn allowed a mksnpath() function that is no
   longer used.
   (merge 708f7e0590 rs/apply-lift-path-length-limit later to maint).

 * A file descriptor leak in an error codepath, used when "git apply
   --reject" fails to create the *.rej file, has been corrected.
   (merge 2b1f456adf rs/apply-reject-fd-leakfix later to maint).

 * A config parser callback function fell through instead of returning
   after recognising and processing a variable, wasting cycles, which
   has been corrected.
   (merge a816ccd642 ds/fetch-config-parse-microfix later to maint).

 * Fix was added to work around a regression in libcURL 8.7.0 (which has
   already been fixed in their tip of the tree).
   (merge 92a209bf24 jk/libcurl-8.7-regression-workaround later to maint).

 * The variable that holds the value read from the core.excludefile
   configuration variable used to leak, which has been corrected.
   (merge 0e0fefb29f jc/unleak-core-excludesfile later to maint).

 * vreportf(), which is used by error() and friends, has been taught
   to give the error message printf-format string when its vsnprintf()
   call fails, instead of showing nothing useful to identify the
   nature of the error.
   (merge c63adab961 rs/usage-fallback-to-show-message-format later to maint).

 * Adjust to an upcoming changes to GNU make that breaks our Makefiles.
   (merge 227b8fd902 tb/make-indent-conditional-with-non-spaces later to maint).

 * Git 2.44 introduced a regression that makes the updated code to
   barf in repositories with multi-pack index written by older
   versions of Git, which has been corrected.

 * When .git/rr-cache/ rerere database gets corrupted or rerere is fed to
   work on a file with conflicted hunks resolved incompletely, the rerere
   machinery got confused and segfaulted, which has been corrected.
   (merge 167395bb47 mr/rerere-crash-fix later to maint).

 * The "receive-pack" program (which responds to "git push") was not
   converted to run "git maintenance --auto" when other codepaths that
   used to run "git gc --auto" were updated, which has been corrected.
   (merge 7bf3057d9c ps/run-auto-maintenance-in-receive-pack later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge f0e578c69c rs/use-xstrncmpz later to maint).
   (merge 83e6eb7d7a ba/credential-test-clean-fix later to maint).
   (merge 64562d784d jb/doc-interactive-singlekey-do-not-need-perl later to maint).
   (merge c431a235e2 cp/t9146-use-test-path-helpers later to maint).
   (merge 82d75402d5 ds/doc-send-email-capitalization later to maint).
   (merge 41bff66e35 jc/doc-add-placeholder-fix later to maint).
   (merge 6835f0efe9 jw/remote-doc-typofix later to maint).
   (merge 244001aa20 hs/rebase-not-in-progress later to maint).
   (merge 2ca6c07db2 jc/no-include-of-compat-util-from-headers later to maint).
   (merge 87bd7fbb9c rs/fetch-simplify-with-starts-with later to maint).
   (merge f39addd0d9 rs/name-rev-with-mempool later to maint).
   (merge 9a97b43e03 rs/submodule-prefix-simplify later to maint).
   (merge 40b8076462 ak/rebase-autosquash later to maint).
   (merge 3223204456 eg/add-uflags later to maint).
   (merge 5f78d52dce es/config-doc-sort-sections later to maint).
   (merge 781fb7b4c2 as/option-names-in-messages later to maint).
   (merge 51d41dc243 jk/doc-remote-helpers-markup-fix later to maint).
   (merge e1aaf309db pb/ci-win-artifact-names-fix later to maint).
   (merge ad538c61da jc/index-pack-fsck-levels later to maint).
   (merge 67471bc704 ja/doc-formatting-fix later to maint).
   (merge 86f9ce7dd6 bl/doc-config-fixes later to maint).
   (merge 0d527842b7 az/grep-group-error-message-update later to maint).
   (merge 7c43bdf07b rs/strbuf-expand-bad-format later to maint).
   (merge 8b68b48d5c ds/typofix-core-config-doc later to maint).
   (merge 39bb692152 rs/imap-send-use-xsnprintf later to maint).
   (merge 8d320cec60 jc/t2104-style-fixes later to maint).
   (merge b4454d5a7b pw/t3428-cleanup later to maint).
   (merge 84a7c33a4b pf/commitish-committish later to maint).
   (merge 8882ee9d68 la/mailmap-entry later to maint).
   (merge 44bdba2fa6 rs/no-openssl-compilation-fix-on-macos later to maint).
   (merge f412d72c19 yb/replay-doc-linkfix later to maint).
   (merge 5da40be8d7 xx/rfc2822-date-format-in-doc later to maint).

----------------------------------------------------------------

Changes since v2.44.0 are as follows:

Ahelenia Ziemiańska (1):
      grep: improve errors for unmatched ( and )

Alexander Shopov (5):
      transport-helper.c: trivial fix of error message
      builtin/remote.c: trivial fix of error message
      builtin/clone.c: trivial fix of message
      revision.c: trivial fix to message
      l10n: bg.po: Updated Bulgarian translation (5652t)

Arkadii Yakovets (1):
      l10n: uk: v2.45 update

Aryan Gupta (1):
      tests: modernize the test script t0010-racy-git.sh

Bagas Sanjaya (1):
      l10n: po-id for 2.45

Beat Bolli (25):
      completion: use awk for filtering the config entries
      date: make "iso-strict" conforming for the UTC timezone
      t0006: add more tests with a negative TZ offset
      doc: avoid redundant use of cat
      contrib/subtree/t: avoid redundant use of cat
      t/lib-cvs.sh: avoid redundant use of cat
      t/annotate-tests.sh: avoid redundant use of cat
      t/perf: avoid redundant use of cat
      t/t0*: avoid redundant uses of cat
      t/t1*: avoid redundant uses of cat
      t/t3*: avoid redundant uses of cat
      t/t4*: avoid redundant uses of cat
      t/t5*: avoid redundant uses of cat
      t/t6*: avoid redundant uses of cat
      t/t7*: avoid redundant use of cat
      t/t8*: avoid redundant use of cat
      t/t9*: avoid redundant uses of cat
      t/t1*: merge a "grep | sed" pipeline
      t/t3*: merge a "grep | awk" pipeline
      t/t4*: merge a "grep | sed" pipeline
      t/t5*: merge a "grep | sed" pipeline
      t/t8*: merge "grep | sed" pipelines
      t/t9*: merge "grep | sed" pipelines
      contrib/coverage-diff: avoid redundant pipelines
      git-quiltimport: avoid an unnecessary subshell

Bo Anderson (5):
      t/lib-credential: clean additional credential
      osxkeychain: replace deprecated SecKeychain API
      osxkeychain: erase all matching credentials
      osxkeychain: erase matching passwords only
      osxkeychain: store new attributes

Brian C Tracy (1):
      fuzz: add fuzzer for config parsing

Brian Lyles (13):
      docs: clarify file options in git-config `--edit`
      docs: fix typo in git-config `--default`
      docs: correct trailer `key_value_separator` description
      docs: adjust trailer `separator` and `key_value_separator` language
      pretty: update tests to use `test_config`
      pretty: find pretty formats case-insensitively
      docs: address inaccurate `--empty` default with `--exec`
      docs: clean up `--empty` formatting in git-rebase(1) and git-am(1)
      rebase: update `--empty=ask` to `--empty=stop`
      sequencer: handle unborn branch with `--allow-empty`
      sequencer: do not require `allow_empty` for redundant commit options
      cherry-pick: enforce `--keep-redundant-commits` incompatibility
      cherry-pick: add `--empty` for more robust redundant commit handling

Chandra Pratap (2):
      apply: ignore working tree filemode when !core.filemode
      t9146: replace test -d/-e/-f with appropriate test_path_is_* function

Christian Couder (5):
      revision: clarify a 'return NULL' in get_reference()
      oidset: refactor oidset_insert_from_set()
      t6022: fix 'test' style and 'even though' typo
      rev-list: allow missing tips with --missing=[print|allow*]
      revision: fix --missing=[print|allow*] for annotated tags

Derrick Stolee (1):
      fetch: return when parsing submodule.recurse

Dirk Gouders (6):
      Documentation/user-manual.txt: example for generating object hashes
      MyFirstObjectWalk: use additional arg in config_fn_t
      MyFirstObjectWalk: fix misspelled "builtins/"
      MyFirstObjectWalk: fix filtered object walk
      MyFirstObjectWalk: fix description for counting omitted objects
      MyFirstObjectWalk: add stderr to pipe processing

Dragan Simic (8):
      documentation: send-email: use camel case consistently
      config: minor addition of whitespace
      config: really keep value-internal whitespace verbatim
      t1300: add more tests for whitespace and inline comments
      config.txt: describe handling of whitespace further
      grep docs: describe --recurse-submodules further and improve formatting a bit
      grep docs: describe --no-index further and improve formatting a bit
      config: fix some small capitalization issues, as spotted

Emir SARI (1):
      l10n: tr: Update Turkish translations

Eric Sunshine (2):
      docs: sort configuration variable groupings alphabetically
      test-lib: fix non-functioning GIT_TEST_MAINT_SCHEDULER fallback

Eric W. Biederman (23):
      object-file-convert: stubs for converting from one object format to another
      oid-array: teach oid-array to handle multiple kinds of oids
      object-names: support input of oids in any supported hash
      repository: add a compatibility hash algorithm
      loose: compatibilty short name support
      object-file: update the loose object map when writing loose objects
      object-file: add a compat_oid_in parameter to write_object_file_flags
      commit: convert mergetag before computing the signature of a commit
      commit: export add_header_signature to support handling signatures on tags
      tag: sign both hashes
      object: factor out parse_mode out of fast-import and tree-walk into in object.h
      object-file-convert: don't leak when converting tag objects
      object-file-convert: convert commits that embed signed tags
      object-file: update object_info_extended to reencode objects
      rev-parse: add an --output-object-format parameter
      builtin/cat-file: let the oid determine the output algorithm
      tree-walk: init_tree_desc take an oid to get the hash algorithm
      object-file: handle compat objects in check_object_signature
      builtin/ls-tree: let the oid determine the output algorithm
      test-lib: compute the compatibility hash so tests may use it
      t1006: rename sha1 to oid
      t1006: test oid compatibility with cat-file
      t1016-compatObjectFormat: add tests to verify the conversion between objects

Eugenio Gigante (1):
      add: use unsigned type for collection of bits

Florian Schmidt (1):
      wt-status: don't find scissors line beyond buf len

Ghanshyam Thakkar (5):
      add-patch: classify '@' as a synonym for 'HEAD'
      add -p tests: remove PERL prerequisites
      setup: remove unnecessary variable
      builtin/commit: error out when passing untracked path with -i
      builtin/add: error out when passing untracked path with -u

Haritha D (1):
      build: support z/OS (OS/390).

Harmen Stoppels (1):
      rebase: make warning less passive aggressive

Jakub Wilk (1):
      git-remote.txt: fix typo

Jean-Noël Avila (18):
      doc: git-rev-parse: enforce command-line description syntax
      doc: close unclosed angle-bracket of a placeholder in git-clone doc
      doc: end sentences with full-stop
      doc: clarify the format of placeholders
      doc: git-init: format verbatim parts
      doc: git-init: format placeholders
      doc: git-init: rework definition lists
      doc: git-init: rework config item init.templateDir
      doc: git-clone: format verbatim words
      doc: git-clone: format placeholders
      doc: format alternatives in synopsis
      doc: fix some placeholders formating
      doc: rework CodingGuidelines with new formatting rules
      doc: allow literal and emphasis format in doc vs help tests
      doc: git-init: apply new documentation formatting guidelines
      doc: git-clone: apply new documentation formatting guidelines
      doc: git-clone: do not autoreference the manpage in itself
      l10n: fr: v2.45.0

Jeff Hostetler (17):
      name-hash: add index_dir_find()
      t7527: add case-insensitve test for FSMonitor
      fsmonitor: refactor refresh callback on directory events
      fsmonitor: clarify handling of directory events in callback helper
      fsmonitor: refactor refresh callback for non-directory events
      dir: create untracked_cache_invalidate_trimmed_path()
      fsmonitor: refactor untracked-cache invalidation
      fsmonitor: move untracked-cache invalidation into helper functions
      fsmonitor: return invalidated cache-entry count on directory event
      fsmonitor: remove custom loop from non-directory path handler
      fsmonitor: return invalidated cache-entry count on non-directory event
      fsmonitor: trace the new invalidated cache-entry count
      fsmonitor: refactor bit invalidation in refresh callback
      fsmonitor: support case-insensitive events
      t0211: demonstrate missing 'def_param' events for certain commands
      trace2: avoid emitting 'def_param' set more than once
      trace2: emit 'def_param' set with 'cmd_name' event

Jeff King (51):
      t0303: check that helper_test_clean removes all credentials
      userdiff: skip textconv caching when not in a repository
      Revert "refs: allow @{n} to work with n-sized reflog"
      get_oid_basic(): special-case ref@{n} for oldest reflog entry
      read_ref_at(): special-case ref@{0} for an empty reflog
      upload-pack: drop separate v2 "haves" array
      upload-pack: switch deepen-not list to an oid_array
      upload-pack: use oidset for deepen_not list
      upload-pack: use a strmap for want-ref lines
      upload-pack: accept only a single packfile-uri line
      upload-pack: always turn off save_commit_buffer
      upload-pack: use PARSE_OBJECT_SKIP_HASH_CHECK in more places
      upload-pack: free tree buffers after parsing
      upload-pack: use repository struct to get config
      upload-pack: centralize setup of sideband-all config
      upload-pack: use existing config mechanism for advertisement
      upload-pack: only accept packfile-uris if we advertised it
      doc/gitremote-helpers: fix missing single-quote
      config: forbid newline as core.commentChar
      strbuf: simplify comment-handling in add_lines() helper
      strbuf: avoid static variables in strbuf_add_commented_lines()
      commit: refactor base-case of adjust_comment_line_char()
      strbuf: avoid shadowing global comment_line_char name
      environment: store comment_line_char as a string
      strbuf: accept a comment string for strbuf_stripspace()
      strbuf: accept a comment string for strbuf_commented_addf()
      strbuf: accept a comment string for strbuf_add_commented_lines()
      prefer comment_line_str to comment_line_char for printing
      find multi-byte comment chars in NUL-terminated strings
      find multi-byte comment chars in unterminated buffers
      sequencer: handle multi-byte comment characters when writing todo list
      wt-status: drop custom comment-char stringification
      environment: drop comment_line_char compatibility macro
      config: allow multi-byte core.commentChar
      shortlog: stop setting pp.print_email_subject
      pretty: split oneline and email subject printing
      pretty: drop print_email_subject flag
      log: do not set up extra_headers for non-email formats
      format-patch: return an allocated string from log_write_email_headers()
      format-patch: simplify after-subject MIME header handling
      doc/gitremote-helpers: fix more missing single-quotes
      transport-helper: use write helpers more consistently
      transport-helper: drop "object-format <algo>" option
      transport-helper: send "true" value for object-format option
      contrib: drop hg-to-git script
      format-patch: fix leak of empty header string
      rebase: use child_process_clear() to clean
      config: add core.commentString
      http: reset POSTFIELDSIZE when clearing curl handle
      INSTALL: bump libcurl version to 7.21.3
      remote-curl: add Transfer-Encoding header only for older curl

Jiamu Sun (1):
      bugreport.c: fix a crash in `git bugreport` with `--no-suffix` option

Jiang Xin (1):
      l10n: TEAMS: retire l10n teams no update in 1 year

Johannes Schindelin (22):
      merge-tree: accept 3 trees as arguments
      merge-tree: fail with a non-zero exit code on missing tree objects
      merge-ort: do check `parse_tree()`'s return value
      t4301: verify that merge-tree fails on missing blob objects
      Always check `parse_tree*()`'s return value
      cache-tree: avoid an unnecessary check
      fill_tree_descriptor(): mark error message for translation
      neue: remove a bogus empty file
      commit-reach(paint_down_to_common): plug two memory leaks
      commit-reach(repo_in_merge_bases_many): optionally expect missing commits
      commit-reach(repo_in_merge_bases_many): report missing commits
      commit-reach(paint_down_to_common): prepare for handling shallow commits
      commit-reach(paint_down_to_common): start reporting errors
      commit-reach(merge_bases_many): pass on "missing commits" errors
      commit-reach(get_merge_bases_many_0): pass on "missing commits" errors
      commit-reach(repo_get_merge_bases): pass on "missing commits" errors
      commit-reach(get_octopus_merge_bases): pass on "missing commits" errors
      commit-reach(repo_get_merge_bases_many): pass on "missing commits" errors
      commit-reach(repo_get_merge_bases_many_dirty): pass on errors
      merge-recursive: prepare for `merge_submodule()` to report errors
      merge-ort/merge-recursive: do report errors in `merge_submodule()`
      merge-tree: fix argument type of the `--merge-base` option

John Cai (1):
      t5300: fix test_with_bad_commit()

Jonas Wunderlich (1):
      doc: status.showUntrackedFiles does not take "false"

Josh Triplett (2):
      commit: avoid redundant scissor line with --cleanup=scissors -v
      commit: unify logic to avoid multiple scissors lines when merging

Julio Bacellari (1):
      doc: remove outdated information about interactive.singleKey

Junio C Hamano (64):
      apply: correctly reverse patch's pre- and post-image mode bits
      apply: code simplification
      t9210: do not rely on lazy fetching to fail
      git: --no-lazy-fetch option
      doc: add shortcut to "am --whitespace=<action>"
      doc: apply the new placeholder rules to git-add documentation
      compat: drop inclusion of <git-compat-util.h>
      Start the 2.45 cycle
      git: document GIT_NO_REPLACE_OBJECTS environment variable
      doc: clarify the wording on <git-compat-util.h> requirement
      git: extend --no-lazy-fetch to work across subprocesses
      The second batch
      The third batch
      test_i18ngrep: hard deprecate and forbid its use
      unpack: replace xwrite() loop with write_in_full()
      sideband: avoid short write(2)
      repack: check error writing to pack-objects subprocess
      clean: further clean-up of implementation around "--force"
      The fourth batch
      The fifth batch
      setup: notice more types of implicit bare repositories
      The sixth batch
      status: unify parsing of --untracked= and status.showUntrackedFiles
      status: allow --untracked=false and friends
      The seventh batch
      The eighth batch
      config: fix --comment formatting
      config: allow tweaking whitespace between value and comment
      diff.*Prefix: use camelCase in the doc and test titles
      The ninth batch
      apply: parse names out of "diff --git" more carefully
      The tenth batch
      The eleventh batch
      SubmittingPatches: release-notes entry experiment
      The twelfth batch
      t4126: make sure a directory with SP at the end is usable
      t4126: fix "funny directory name" test on Windows (again)
      advice: omit trailing whitespace
      checkout: omit "tracking" information on a detached HEAD
      The thirteenth batch
      t2104: style fixes
      The fourteenth batch
      revision: optionally record matches with pathspec elements
      The fifteenth batch
      CodingGuidelines: describe "export VAR=VAL" rule
      CodingGuidelines: quote assigned value in 'local var=$val'
      t: local VAR="VAL" (quote positional parameters)
      t: local VAR="VAL" (quote command substitution)
      t: local VAR="VAL" (quote ${magic-reference})
      t: teach lint that RHS of 'local VAR=VAL' needs to be quoted
      t0610: local VAR="VAL" fix
      t1016: local VAR="VAL" fix
      config: do not leak excludes_file
      Makefile(s): do not enforce "all indents must be done with tab"
      The sixteenth batch
      t2104: style fixes
      The seventeenth batch
      The eighteenth batch
      The ninteenth batch
      The twentieth batch
      Git 2.45-rc0
      A bit more topics before -rc1
      Git 2.45-rc1
      Git 2.45

Justin Tobler (3):
      reftable/stack: expose option to disable auto-compaction
      reftable/stack: add env to disable autocompaction
      reftable/stack: use geometric table compaction

Karthik Nayak (7):
      refs: introduce `is_pseudoref()` and `is_headref()`
      refs: extract out `loose_fill_ref_dir_regular_file()`
      refs: introduce `refs_for_each_include_root_refs()`
      ref-filter: rename 'FILTER_REFS_ALL' to 'FILTER_REFS_REGULAR'
      for-each-ref: add new option to include root refs
      update-ref: use {old,new}-oid instead of {old,new}value
      githooks: use {old,new}-oid instead of {old,new}-value

Kipras Melnikovas (1):
      mergetools: vimdiff: use correct tool's name when reading mergetool config

Kristoffer Haugsbakk (9):
      column: disallow negative padding
      column: guard against negative padding
      gitcli: drop mention of “non-dashed form”
      config: document `core.commentChar` as ASCII-only
      t3200: improve test style
      advice: make all entries stylistically consistent
      advice: use backticks for verbatim
      advice: use double quotes for regular quoting
      branch: advise about ref syntax rules

Linus Arver (15):
      trailer: free trailer_info _after_ all related usage
      shortlog: add test for de-duplicating folded trailers
      trailer: rename functions to use 'trailer'
      trailer: reorder format_trailers_from_commit() parameters
      trailer: move interpret_trailers() to interpret-trailers.c
      trailer_info_get(): reorder parameters
      format_trailers(): use strbuf instead of FILE
      format_trailer_info(): move "fast path" to caller
      format_trailers_from_commit(): indirectly call trailer_info_get()
      format_trailer_info(): use trailer_item objects
      format_trailer_info(): drop redundant unfold_value()
      format_trailer_info(): append newline for non-trailer lines
      trailer: begin formatting unification
      trailer: finish formatting unification
      mailmap: change primary address for Linus Arver

M Hickford (1):
      libsecret: retrieve empty password

Marcel Röthke (1):
      rerere: fix crashes due to unmatched opening conflict markers

Matthias Aßhauer (1):
      Win32: detect unix socket support at runtime

Max Gautier (1):
      editorconfig: add Makefiles to "text files"

Michael Lohmann (2):
      revision: ensure MERGE_HEAD is a ref in prepare_show_merge
      revision: implement `git log --merge` also for rebase/cherry-pick/revert

Orgad Shaneh (1):
      docs: remove duplicate entry and fix typo in 2.45 changelog

Patrick Steinhardt (99):
      refs: introduce reftable backend
      ci: add jobs to test with the reftable backend
      refs/reftable: fix leak when copying reflog fails
      reftable/record: introduce function to compare records by key
      reftable/merged: allocation-less dropping of shadowed records
      reftable/merged: skip comparison for records of the same subiter
      reftable/pq: allocation-less comparison of entry keys
      reftable/block: swap buffers instead of copying
      reftable/record: don't try to reallocate ref record name
      reftable/reader: add comments to `table_iter_next()`
      t: move tests exercising the "files" backend
      t0410: convert tests to use DEFAULT_REPO_FORMAT prereq
      t1400: exercise reflog with gaps with reftable backend
      t1404: make D/F conflict tests compatible with reftable backend
      t1405: remove unneeded cleanup step
      t2011: exercise D/F conflicts with HEAD with the reftable backend
      t7003: ensure filter-branch prunes reflogs with the reftable backend
      git-difftool--helper: honor `--trust-exit-code` with `--dir-diff`
      dir-iterator: pass name to `prepare_next_entry_data()` directly
      dir-iterator: support iteration in sorted order
      refs/files: sort reflogs returned by the reflog iterator
      refs/files: sort merged worktree and common reflogs
      refs: always treat iterators as ordered
      refs: drop unused params from the reflog iterator callback
      refs: stop resolving ref corresponding to reflogs
      builtin/reflog: introduce subcommand to list reflogs
      builtin/clone: allow remote helpers to detect repo
      refs/reftable: don't fail empty transactions in repo without HEAD
      reftable/pq: use `size_t` to track iterator index
      reftable/merged: make `merged_iter` structure private
      reftable/merged: advance subiter on subsequent iteration
      reftable/merged: make subiters own their records
      reftable/merged: remove unnecessary null check for subiters
      reftable/merged: handle subiter cleanup on close only
      reftable/merged: circumvent pqueue with single subiter
      reftable/merged: avoid duplicate pqueue emptiness check
      reftable/record: reuse refname when decoding
      reftable/record: reuse refname when copying
      reftable/record: decode keys in place
      reftable: allow inlining of a few functions
      refs/reftable: precompute prefix length
      refs/reftable: reload correct stack when creating reflog iter
      reftable/record: convert old and new object IDs to arrays
      reftable/record: avoid copying author info
      reftable/record: reuse refnames when decoding log records
      reftable/record: reuse message when decoding log records
      reftable/record: use scratch buffer when decoding records
      refs/reftable: track last log record name via strbuf
      t0610: remove unused variable assignment
      lockfile: report when rollback fails
      reftable/stack: register new tables as tempfiles
      reftable/stack: register lockfiles during compaction
      reftable/stack: register compacted tables as tempfiles
      reftable/record: fix memory leak when decoding object records
      reftable/block: fix binary search over restart counter
      t5601: exercise clones with "includeIf.*.onbranch"
      reftable: fix tests being broken by NFS' delete-after-close semantics
      t7800: improve test descriptions with empty arguments
      t7800: use single quotes for test bodies
      t/README: document how to loop around test cases
      reftable/stack: fix error handling in `reftable_stack_init_addition()`
      reftable/error: discern locked/outdated errors
      reftable/stack: use error codes when locking fails during compaction
      reftable/stack: gracefully handle failed auto-compaction due to locks
      refs/reftable: print errors on compaction failure
      t/helper: drop pack-refs wrapper
      refs: move `struct pack_refs_opts` to where it's used
      refs: remove `PACK_REFS_ALL` flag
      refs/reftable: expose auto compaction via new flag
      builtin/pack-refs: release allocated memory
      builtin/pack-refs: introduce new "--auto" flag
      builtin/gc: move `struct maintenance_run_opts`
      t6500: extract objects with "17" prefix
      builtin/gc: forward git-gc(1)'s `--auto` flag when packing refs
      builtin/gc: pack refs when using `git maintenance run --auto`
      reftable/basics: fix return type of `binsearch()` to be `size_t`
      reftable/basics: improve `binsearch()` test
      reftable/refname: refactor binary search over refnames
      reftable/block: refactor binary search over restart points
      reftable/block: fix error handling when searching restart points
      reftable/record: extract function to decode key lengths
      reftable/block: avoid decoding keys when searching restart points
      t0610: make `--shared=` tests reusable
      t0610: execute git-pack-refs(1) with specified umask
      reftable/block: rename `block_reader_start()`
      reftable/block: merge `block_iter_seek()` and `block_reader_seek()`
      reftable/block: better grouping of functions
      reftable/block: introduce `block_reader_release()`
      reftable/block: move ownership of block reader into `struct table_iter`
      reftable/reader: iterate to next block in place
      reftable/block: reuse uncompressed blocks
      reftable/block: open-code call to `uncompress2()`
      reftable/block: reuse `zstream` state on inflation
      reftable/block: avoid copying block iterators on seek
      pack-bitmap: gracefully handle missing BTMP chunks
      run-command: introduce function to prepare auto-maintenance process
      builtin/receive-pack: convert to use git-maintenance(1)
      docs: improve changelog entry for `git pack-refs --auto`
      docs: address typos in Git v2.45 changelog

Peter Hutterer (1):
      diff: add diff.srcPrefix and diff.dstPrefix configuration variables

Peter Krefting (2):
      bisect: report the found commit with "show"
      l10n: sv.po: Update Swedish translation

Philippe Blain (5):
      merge-ort: turn submodule conflict suggestions into an advice
      ci(github): make Windows test artifacts name unique
      sequencer: allow disabling conflict advice
      builtin/am: allow disabling conflict advice
      t/README: mention test files are make targets

Phillip Wood (9):
      rebase -i: stop setting GIT_CHERRY_PICK_HELP
      xdiff-interface: refactor parsing of merge.conflictstyle
      merge-ll: introduce LL_MERGE_OPTIONS_INIT
      merge options: add a conflict style member
      checkout: cleanup --conflict=<style> parsing
      checkout: fix interaction between --conflict and --merge
      t3428: modernize test setup
      t3428: use test_commit_message
      t3428: restore coverage for "apply" backend

Pi Fisher (1):
      typo: replace 'commitish' with 'committish'

Ralf Thielow (1):
      l10n: Update German translation

Ralph Seichter (1):
      config: add --comment option to add a comment

René Scharfe (32):
      use xstrncmpz()
      fetch: convert strncmp() with strlen() to starts_with()
      mem-pool: add mem_pool_strfmt()
      name-rev: use mem_pool_strfmt()
      submodule: use strvec_pushf() for --submodule-prefix
      t-ctype: allow NUL anywhere in the specification string
      t-ctype: simplify EOF check
      t-ctype: align output of i
      t-ctype: avoid duplicating class names
      parse-options: recognize abbreviated negated option with arg
      parse-options: set arg of abbreviated option lazily
      parse-options: factor out register_abbrev() and struct parsed_option
      parse-options: detect ambiguous self-negation
      parse-options: normalize arg and long_name before comparison
      parse-options: rearrange long_name matching code
      t-prio-queue: shorten array index message
      t-prio-queue: check result array bounds
      factor out strbuf_expand_bad_format()
      cat-file: use strbuf_expand_bad_format()
      midx: use strvec_pushf() for pack-objects base name
      mem-pool: use st_add() in mem_pool_strvfmt()
      imap-send: use xsnprintf to format command
      t-prio-queue: simplify using compound literals
      apply: avoid fixed-size buffer in create_one_file()
      path: remove mksnpath()
      apply: don't leak fd on fdopen() error
      usage: report vsnprintf(3) failure
      date: make DATE_MODE thread-safe
      git-compat-util: fix NO_OPENSSL on current macOS
      imap-send: increase command size limit
      apply: avoid using fixed-size buffer in write_out_one_reject()
      don't report vsnprintf(3) error as bug

Richard Macklin (1):
      rebase: fix typo in autosquash documentation

Rubén Justo (18):
      tag: error when git-column fails
      completion: fix __git_complete_worktree_paths
      completion: reflog with implicit "show"
      completion: reflog show <log-options>
      completion: introduce __git_find_subcommand
      completion: factor out __git_resolve_builtins
      completion: reflog subcommands and options
      checkout: plug some leaks in git-restore
      add-patch: introduce 'p' in interactive-patch
      add-patch: do not print hunks repeatedly
      add: use advise_if_enabled for ADVICE_ADD_IGNORED_FILE
      add: use advise_if_enabled for ADVICE_ADD_EMPTY_PATHSPEC
      add: use advise_if_enabled for ADVICE_ADD_EMBEDDED_REPO
      launch_editor: waiting message on error
      apply: plug a leak in apply_data
      add-interactive: plug a leak in get_untracked_files
      add-patch: plug a leak handling the '/' command
      add: plug a leak on interactive_add

SZEDER Gábor (1):
      upload-pack: don't send null character in abort message to the client

Sergey Organov (1):
      clean: improve -n and -f implementation and documentation

Steven Jeuris (1):
      userdiff: better method/property matching for C#

Taylor Blau (9):
      Documentation/config/pack.txt: fix broken AsciiDoc mark-up
      upload-pack: disallow object-info capability by default
      midx-write: move writing-related functions from midx.c
      midx-write.c: factor out common want_included_pack() routine
      midx-write.c: check count of packs to repack after grouping
      midx-write.c: use `--stdin-packs` when repacking
      t/t7700-repack.sh: fix test breakages with `GIT_TEST_MULTI_PACK_INDEX=1 `
      Makefile(s): avoid recipe prefix in conditional statements
      Documentation/RelNotes/2.45.0.txt: fix typo

Teng Long (1):
      l10n: zh_CN: for git 2.45 rounds

Thalia Archibald (8):
      fast-import: tighten path unquoting
      fast-import: directly use strbufs for paths
      fast-import: allow unquoted empty path for root
      fast-import: remove dead strbuf
      fast-import: improve documentation for path quoting
      fast-import: document C-style escapes for paths
      fast-import: forbid escaped NUL in paths
      fast-import: make comments more precise

Ville Skyttä (2):
      completion: fix prompt with unset SHOWCONFLICTSTATE in nounset mode
      completion: protect prompt against unset SHOWUPSTREAM in nounset mode

Vincenzo Mezzela (1):
      t7301: use test_path_is_(missing|file)

Vũ Tiến Hưng (2):
      l10n: Update Vietnamese team contact
      l10n: vi: Updated translation for 2.45

Xing Xin (1):
      Documentation: fix typos describing date format

Yehezkel Bernat (1):
      Documentation: fix linkgit reference

Yi-Jyun Pan (1):
      l10n: zh-TW: Git 2.45

brian m. carlson (7):
      loose: add a mapping between SHA-1 and SHA-256 for loose objects
      commit: write commits for both hashes
      cache: add a function to read an OID of a specific algorithm
      object-file-convert: add a function to convert trees between algorithms
      object-file-convert: convert tag objects when writing
      object-file-convert: convert commit objects when writing
      repository: implement extensions.compatObjectFormat

shejialuo (1):
      t9117: prefer test_path_* helper functions

Đoàn Trần Công Danh (1):
      t9604: Fix test for musl libc and new Debian



^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.45.0-rc1
@ 2024-04-24 17:07  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2024-04-24 17:07 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.45.0-rc1 is now available for testing at
the usual places.  It is comprised of 521 non-merge commits since
v2.44.0, contributed by 84 people, 36 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.45.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.44.0 are as follows.
Welcome to the Git development community!

  Ahelenia Ziemiańska, Angelo Dureghello, Aryan Gupta, Benjamin
  Flesch, Bo Anderson, Brian C Tracy, Brian Lyles, Bruno Haible,
  Chuck Lever, Dario Gjorgjevski, Dirk Gouders, Eugenio Gigante,
  Florian Schmidt, Haritha D, Harmen Stoppels, Jean-Rémy Falleri,
  Jiamu Sun, Jonas Wunderlich, Jonathan Davies, Julio Bacellari,
  Kipras Melnikovas, Marcel Röthke, Matthew Rollings, Max Gautier,
  mirth hickford, Paweł Dominiak, Pi Fisher, Ralph Seichter,
  Richard Macklin, shejialuo, Steven Jeuris, Thalia Archibald,
  Tiago Pascoal, Vincenzo Mezzela, Xing Xin, and Yehezkel Bernat.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alexander Shopov, Beat Bolli, brian m. carlson, Chandra Pratap,
  Christian Couder, Derrick Stolee, Đoàn Trần Công Danh,
  Dragan Simic, Elijah Newren, Eric Sunshine, Eric W. Biederman,
  Ghanshyam Thakkar, Han Young, Jakub Wilk, Jean-Noël Avila,
  Jeff Hostetler, Jeff King, Johannes Schindelin, Johannes Sixt,
  John Cai, Josh Steadmon, Josh Triplett, Junio C Hamano, Justin
  Tobler, Karthik Nayak, Kristoffer Haugsbakk, Kyle Lippincott,
  Kyle Meyer, Linus Arver, Manlio Perillo, Matthias Aßhauer, M
  Hickford, Michael Lohmann, Michael Osipov, Mike Hommey, Orgad
  Shaneh, Patrick Steinhardt, Peter Hutterer, Peter Krefting,
  Philippe Blain, Phillip Wood, René Scharfe, Rubén Justo,
  Sergey Organov, SZEDER Gábor, Taylor Blau, Ville Skyttä,
  and Yasushi SHOJI.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.45 Release Notes (draft)
===============================

Backward Compatibility Notes

UI, Workflows & Features

 * Integrate the reftable code into the refs framework as a backend.
   With "git init --ref-format=reftable", hopefully it would be a lot
   more efficient to manage a repository with many references.

 * "git checkout -p" and friends learned that that "@" is a synonym
   for "HEAD".

 * Variants of vimdiff learned to honor mergetool.<variant>.layout
   settings.

 * "git reflog" learned a "list" subcommand that enumerates known reflogs.

 * When a merge conflicted at a submodule, merge-ort backend used to
   unconditionally give a lengthy message to suggest how to resolve
   it.  Now the message can be squelched as an advice message.

 * "git for-each-ref" learned "--include-root-refs" option to show
   even the stuff outside the 'refs/' hierarchy.

 * "git rev-list --missing=print" has learned to optionally take
   "--allow-missing-tips", which allows the objects at the starting
   points to be missing.

 * "git merge-tree" has learned that the three trees involved in the
   3-way merge only need to be trees, not necessarily commits.

 * "git log --merge" learned to pay attention to CHERRY_PICK_HEAD and
   other kinds of *_HEAD pseudorefs.

 * Platform specific tweaks for OS/390 has been added to
   config.mak.uname.

 * Users with safe.bareRepository=explicit can still work from within
   $GIT_DIR of a seconary worktree (which resides at .git/worktrees/$name/)
   of the primary worktree without explicitly specifying the $GIT_DIR
   environment variable or the --git-dir=<path> option.

 * The output format for dates "iso-strict" has been tweaked to show
   a time in the Zulu timezone with "Z" suffix, instead of "+00:00".

 * "git diff" and friends learned two extra configuration variables,
   diff.srcPrefix and diff.dstPrefix.

 * The status.showUntrackedFiles configuration variable had a name
   that tempts users to set a Boolean value expressed in our usual
   "false", "off", and "0", but it only took "no".  This has been
   corrected so "true" and its synonyms are taken as "normal", while
   "false" and its synonyms are taken as "no".

 * Remove an ancient and not well maintained Hg-to-git migration
   script from contrib/.

 * Hints that suggest what to do after resolving conflicts can now be
   squelched by disabling advice.mergeConflict.

 * Allow git-cherry-pick(1) to automatically drop redundant commits via
   a new `--empty` option, similar to the `--empty` options for
   git-rebase(1) and git-am(1). Includes a soft deprecation of
   `--keep-redundant-commits` as well as some related docs changes and
   sequencer code cleanup.

 * "git config" learned "--comment=<message>" option to leave a
   comment immediately after the "variable = value" on the same line
   in the configuration file.

 * core.commentChar used to be limited to a single byte, but has been
   updated to allow an arbitrary multi-byte sequence.

 * "git add -p" and other "interactive hunk selection" UI has learned to
   skip showing the hunk immediately after it has already been shown, and
   an additional action to explicitly ask to reshow the current hunk.

 * "git pack-refs" learned the "--auto" option, which defers the decision of
   whether and how to pack to the ref backend. This is used by the reftable
   backend to avoid repacking of an already-optimal ref database. The new mode
   is triggered from "git gc --auto".

 * "git add -u <pathspec>" and "git commit [-i] <pathspec>" did not
   diagnose a pathspec element that did not match any files in certain
   situations, unlike "git add <pathspec>" did.

 * The userdiff patterns for C# has been updated.

 * Git writes a "waiting for your editor" message on an incomplete
   line after launching an editor, and then append another error
   message on the same line if the editor errors out.  It now clears
   the "waiting for..." line before giving the error message.

 * The filename used for rejected hunks "git apply --reject" creates
   was limited to PATH_MAX, which has been lifted.

 * When "git bisect" reports the commit it determined to be the
   culprit, we used to show it in a format that does not honor common
   UI tweaks, like log.date and log.decorate.  The code has been
   taught to use "git show" to follow more customizations.


Performance, Internal Implementation, Development Support etc.

 * The code to iterate over refs with the reftable backend has seen
   some optimization.

 * More tests that are marked as "ref-files only" have been updated to
   improve test coverage of reftable backend.

 * Some parts of command line completion script (in contrib/) have
   been micro-optimized.

 * The way placeholders are to be marked-up in documentation have been
   specified; use "_<placeholder>_" to typeset the word inside a pair
   of <angle-brackets> emphasized.

 * "git --no-lazy-fetch cmd" allows to run "cmd" while disabling lazy
   fetching of objects from the promisor remote, which may be handy
   for debugging.

 * The implementation in "git clean" that makes "-n" and "-i" ignore
   clean.requireForce has been simplified, together with the
   documentation.

 * Uses of xwrite() helper have been audited and updated for better
   error checking and simpler code.

 * Some trace2 events that lacked def_param have learned to show it,
   enriching the output.

 * The parse-options code that deals with abbreviated long option
   names have been cleaned up.

 * The code in reftable backend that creates new table files works
   better with the tempfile framework to avoid leaving cruft after a
   failure.

 * The reftable code has its own custom binary search function whose
   comparison callback has an unusual interface, which caused the
   binary search to degenerate into a linear search, which has been
   corrected.

 * The code to iterate over reflogs in the reftable has been optimized
   to reduce memory allocation and deallocation.

 * Work to support a repository that work with both SHA-1 and SHA-256
   hash algorithms has started.

 * A new fuzz target that exercises config parsing code has been
   added.

 * Fix the way recently added tests interpolate variables defined
   outside them, and document the best practice to help future
   developers.

 * Introduce an experimental protocol for contributors to propose the
   topic description to be used in the "What's cooking" report, the
   merge commit message for the topic, and in the release notes and
   document it in the SubmittingPatches document.

 * The t/README file now gives a hint on running individual tests in
   the "t/" directory with "make t<num>-*.sh t<num>-*.sh".
   (merge 8d383806fc pb/test-scripts-are-build-targets later to maint).

 * The "hint:" messages given by the advice mechanism, when given a
   message with a blank line, left a line with trailing whitespace,
   which has been cleansed.

 * Documentation rules has been explicitly described how to mark-up
   literal parts and a few manual pages have been updated as examples.

 * The .editorconfig file has been taught that a Makefile uses HT
   indentation.

 * t-prio-queue test has been cleaned up by using C99 compound
   literals; this is meant to also serve as a weather-balloon to smoke
   out folks with compilers who have trouble compiling code that uses
   the feature.

 * Windows binary used to decide the use of unix-domain socket at
   build time, but it learned to make the decision at runtime instead.

 * The "shared repository" test in the t0610 reftable test failed
   under restrictive umask setting (e.g. 007), which has been
   corrected.

 * Document and apply workaround for a buggy version of dash that
   mishandles "local var=val" construct.

 * The codepaths that reach date_mode_from_type() have been updated to
   pass "struct date_mode" by value to make them thread safe.

 * The strategy to compact multiple tables of reftables after many
   operations accumulate many entries has been improved to avoid
   accumulating too many tables uncollected.

 * The code to iterate over reftable blocks has seen some optimization
   to reduce memory allocation and deallocation.

 * The way "git fast-import" handles paths described in its input has
   been tightened up and more clearly documented.

 * The cvsimport tests required that the platform understands
   traditional timezone notations like CST6CDT, which has been
   updated to work on those systems as long as they understand
   POSIX notation with explicit tz transition dates.

 * The code to format trailers have been cleaned up.


Fixes since v2.44
-----------------

 * "git apply" on a filesystem without filemode support have learned
   to take a hint from what is in the index for the path, even when
   not working with the "--index" or "--cached" option, when checking
   the executable bit match what is required by the preimage in the
   patch.
   (merge 45b625142d cp/apply-core-filemode later to maint).

 * "git column" has been taught to reject negative padding value, as
   it would lead to nonsense behaviour including division by zero.
   (merge 76fb807faa kh/column-reject-negative-padding later to maint).

 * "git am --help" now tells readers what actions are available in
   "git am --whitespace=<action>", in addition to saying that the
   option is passed through to the underlying "git apply".
   (merge a171dac734 jc/am-whitespace-doc later to maint).

 * "git tag --column" failed to check the exit status of its "git
   column" invocation, which has been corrected.
   (merge 92e66478fc rj/tag-column-fix later to maint).

 * Credential helper based on libsecret (in contrib/) has been updated
   to handle an empty password correctly.
   (merge 8f1f2023b7 mh/libsecret-empty-password-fix later to maint).

 * "git difftool --dir-diff" learned to honor the "--trust-exit-code"
   option; it used to always exit with 0 and signalled success.
   (merge eb84c8b6ce ps/difftool-dir-diff-exit-code later to maint).

 * The code incorrectly attempted to use textconv cache when asked,
   even when we are not running in a repository, which has been
   corrected.
   (merge affe355fe7 jk/textconv-cache-outside-repo-fix later to maint).

 * Remove an empty file that shouldn't have been added in the first
   place.
   (merge 4f66942215 js/remove-cruft-files later to maint).

 * The logic to access reflog entries by date and number had ugly
   corner cases at the boundaries, which have been cleaned up.
   (merge 5edd126720 jk/reflog-special-cases-fix later to maint).

 * An error message from "git upload-pack", which responds to "git
   fetch" requests, had a trialing NUL in it, which has been
   corrected.
   (merge 3f4c7a0805 sg/upload-pack-error-message-fix later to maint).

 * Clarify wording in the CodingGuidelines that requires <git-compat-util.h>
   to be the first header file.
   (merge 4e89f0e07c jc/doc-compat-util later to maint).

 * "git commit -v --cleanup=scissors" used to add the scissors line
   twice in the log message buffer, which has been corrected.
   (merge e90cc075cc jt/commit-redundant-scissors-fix later to maint).

 * A custom remote helper no longer cannot access the newly created
   repository during "git clone", which is a regression in Git 2.44.
   This has been corrected.
   (merge 199f44cb2e ps/remote-helper-repo-initialization-fix later to maint).

 * Various parts of upload-pack have been updated to bound the resource
   consumption relative to the size of the repository to protect from
   abusive clients.
   (merge 6cd05e768b jk/upload-pack-bounded-resources later to maint).

 * The upload-pack program, when talking over v2, accepted the
   packfile-uris protocol extension from the client, even if it did
   not advertise the capability, which has been corrected.
   (merge a922bfa3b5 jk/upload-pack-v2-capability-cleanup later to maint).

 * Make sure failure return from merge_bases_many() is properly caught.
   (merge 25fd20eb44 js/merge-base-with-missing-commit later to maint).

 * FSMonitor client code was confused when FSEvents were given in a
   different case on a case-insensitive filesystem, which has been
   corrected.
   (merge 29c139ce78 jh/fsmonitor-icase-corner-case-fix later to maint).

 * The "core.commentChar" configuration variable only allows an ASCII
   character, which was not clearly documented, which has been
   corrected.
   (merge fb7c556f58 kh/doc-commentchar-is-a-byte later to maint).

 * With release 2.44 we got rid of all uses of test_i18ngrep and there
   is no in-flight topic that adds a new use of it.  Make a call to
   test_i18ngrep a hard failure, so that we can remove it at the end
   of this release cycle.
   (merge 381a83dfa3 jc/test-i18ngrep later to maint).

 * The command line completion script (in contrib/) learned to
   complete "git reflog" better.
   (merge 1284f9cc11 rj/complete-reflog later to maint).

 * The logic to complete the command line arguments to "git worktree"
   subcommand (in contrib/) has been updated to correctly honor things
   like "git -C dir" etc.
   (merge 3574816d98 rj/complete-worktree-paths-fix later to maint).

 * When git refuses to create a branch because the proposed branch
   name is not a valid refname, an advice message is given to refer
   the user to exact naming rules.
   (merge 8fbd903e58 kh/branch-ref-syntax-advice later to maint).

 * Code simplification by getting rid of code that sets an environment
   variable that is no longer used.
   (merge 72a8d3f027 pw/rebase-i-ignore-cherry-pick-help-environment later to maint).

 * The code to find the effective end of log messages can fall into an
   endless loop, which has been corrected.
   (merge 2541cba2d6 fs/find-end-of-log-message-fix later to maint).

 * Mark-up used in the documentation has been improved for
   consistency.
   (merge 45d5ed3e50 ja/doc-markup-fixes later to maint).

 * The status.showUntrackedFiles configuration variable was
   incorrectly documented to accept "false", which has been corrected.

 * Leaks from "git restore" have been plugged.
   (merge 2f64da0790 rj/restore-plug-leaks later to maint).

 * "git bugreport --no-suffix" was not supported and instead
   segfaulted, which has been corrected.
   (merge b3b57c69da js/bugreport-no-suffix-fix later to maint).

 * The documentation for "%(trailers[:options])" placeholder in the
   "--pretty" option of commands in the "git log" family has been
   updated.
   (merge bff85a338c bl/doc-key-val-sep-fix later to maint).

 * "git checkout --conflict=bad" reported a bad conflictStyle as if it
   were given to a configuration variable; it has been corrected to
   report that the command line option is bad.
   (merge 5a99c1ac1a pw/checkout-conflict-errorfix later to maint).

 * Code clean-up in the "git log" machinery that implements custom log
   message formatting.
   (merge 1c10b8e5b0 jk/pretty-subject-cleanup later to maint).

 * "git config" corrupted literal HT characters written in the
   configuration file as part of a value, which has been corrected.
   (merge e6895c3f97 ds/config-internal-whitespace-fix later to maint).

 * A unit test for reftable code tried to enumerate all files in a
   directory after reftable operations and expected to see nothing but
   the files it wanted to leave there, but was fooled by .nfs* cruft
   files left, which has been corrected.
   (merge 0068aa7946 ps/reftable-unit-test-nfs-workaround later to maint).

 * The implementation and documentation of "object-format" option
   exchange between the Git itself and its remote helpers did not
   quite match, which has been corrected.

 * The "--pretty=<shortHand>" option of the commands in the "git log"
   family, defined as "[pretty] shortHand = <expansion>" should have
   been looked up case insensitively, but was not, which has been
   corrected.
   (merge f999d5188b bl/pretty-shorthand-config-fix later to maint).

 * "git apply" failed to extract the filename the patch applied to,
   when the change was about an empty file created in or deleted from
   a directory whose name ends with a SP, which has been corrected.
   (merge 776ffd1a30 jc/apply-parse-diff-git-header-names-fix later to maint).

 * Update a more recent tutorial doc.
   (merge 95ab557b4b dg/myfirstobjectwalk-updates later to maint).

 * The test script had an incomplete and ineffective attempt to avoid
   clobbering the testing user's real crontab (and its equivalents),
   which has been completed.
   (merge 73cb87773b es/test-cron-safety later to maint).

 * Use advice_if_enabled() API to rewrite a simple pattern to
   call advise() after checking advice_enabled().
   (merge 6412d01527 rj/use-adv-if-enabled later to maint).

 * Another "set -u" fix for the bash prompt (in contrib/) script.
   (merge d7805bc743 vs/complete-with-set-u-fix later to maint).

 * "git checkout/switch --detach foo", after switching to the detached
   HEAD state, gave the tracking information for the 'foo' branch,
   which was pointless.

 * "git apply" has been updated to lift the hardcoded pathname length
   limit, which in turn allowed a mksnpath() function that is no
   longer used.
   (merge 708f7e0590 rs/apply-lift-path-length-limit later to maint).

 * A file descriptor leak in an error codepath, used when "git apply
   --reject" fails to create the *.rej file, has been corrected.
   (merge 2b1f456adf rs/apply-reject-fd-leakfix later to maint).

 * A config parser callback function fell through instead of returning
   after recognising and processing a variable, wasting cycles, which
   has been corrected.
   (merge a816ccd642 ds/fetch-config-parse-microfix later to maint).

 * Fix was added to work around a regression in libcURL 8.7.0 (which has
   already been fixed in their tip of the tree).
   (merge 92a209bf24 jk/libcurl-8.7-regression-workaround later to maint).

 * The variable that holds the value read from the core.excludefile
   configuration variable used to leak, which has been corrected.
   (merge 0e0fefb29f jc/unleak-core-excludesfile later to maint).

 * vreportf(), which is used by error() and friends, has been taught
   to give the error message printf-format string when its vsnprintf()
   call fails, instead of showing nothing useful to identify the
   nature of the error.
   (merge c63adab961 rs/usage-fallback-to-show-message-format later to maint).

 * Adjust to an upcoming changes to GNU make that breaks our Makefiles.
   (merge 227b8fd902 tb/make-indent-conditional-with-non-spaces later to maint).

 * Git 2.44 introduced a regression that makes the updated code to
   barf in repositories with multi-pack index written by older
   versions of Git, which has been corrected.

 * When .git/rr-cache/ rerere database gets corrupted or rerere is fed to
   work on a file with conflicted hunks resolved incompletely, the rerere
   machinery got confused and segfaulted, which has been corrected.
   (merge 167395bb47 mr/rerere-crash-fix later to maint).

 * The "receive-pack" program (which responds to "git push") was not
   converted to run "git maintenance --auto" when other codepaths that
   used to run "git gc --auto" were updated, which has been corrected.
   (merge 7bf3057d9c ps/run-auto-maintenance-in-receive-pack later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge f0e578c69c rs/use-xstrncmpz later to maint).
   (merge 83e6eb7d7a ba/credential-test-clean-fix later to maint).
   (merge 64562d784d jb/doc-interactive-singlekey-do-not-need-perl later to maint).
   (merge c431a235e2 cp/t9146-use-test-path-helpers later to maint).
   (merge 82d75402d5 ds/doc-send-email-capitalization later to maint).
   (merge 41bff66e35 jc/doc-add-placeholder-fix later to maint).
   (merge 6835f0efe9 jw/remote-doc-typofix later to maint).
   (merge 244001aa20 hs/rebase-not-in-progress later to maint).
   (merge 2ca6c07db2 jc/no-include-of-compat-util-from-headers later to maint).
   (merge 87bd7fbb9c rs/fetch-simplify-with-starts-with later to maint).
   (merge f39addd0d9 rs/name-rev-with-mempool later to maint).
   (merge 9a97b43e03 rs/submodule-prefix-simplify later to maint).
   (merge 40b8076462 ak/rebase-autosquash later to maint).
   (merge 3223204456 eg/add-uflags later to maint).
   (merge 5f78d52dce es/config-doc-sort-sections later to maint).
   (merge 781fb7b4c2 as/option-names-in-messages later to maint).
   (merge 51d41dc243 jk/doc-remote-helpers-markup-fix later to maint).
   (merge e1aaf309db pb/ci-win-artifact-names-fix later to maint).
   (merge ad538c61da jc/index-pack-fsck-levels later to maint).
   (merge 67471bc704 ja/doc-formatting-fix later to maint).
   (merge 86f9ce7dd6 bl/doc-config-fixes later to maint).
   (merge 0d527842b7 az/grep-group-error-message-update later to maint).
   (merge 7c43bdf07b rs/strbuf-expand-bad-format later to maint).
   (merge 8b68b48d5c ds/typofix-core-config-doc later to maint).
   (merge 39bb692152 rs/imap-send-use-xsnprintf later to maint).
   (merge 8d320cec60 jc/t2104-style-fixes later to maint).
   (merge b4454d5a7b pw/t3428-cleanup later to maint).
   (merge 84a7c33a4b pf/commitish-committish later to maint).
   (merge 8882ee9d68 la/mailmap-entry later to maint).
   (merge 44bdba2fa6 rs/no-openssl-compilation-fix-on-macos later to maint).
   (merge f412d72c19 yb/replay-doc-linkfix later to maint).
   (merge 5da40be8d7 xx/rfc2822-date-format-in-doc later to maint).

----------------------------------------------------------------

Changes since v2.44.0 are as follows:

Ahelenia Ziemiańska (1):
      grep: improve errors for unmatched ( and )

Alexander Shopov (4):
      transport-helper.c: trivial fix of error message
      builtin/remote.c: trivial fix of error message
      builtin/clone.c: trivial fix of message
      revision.c: trivial fix to message

Aryan Gupta (1):
      tests: modernize the test script t0010-racy-git.sh

Beat Bolli (25):
      completion: use awk for filtering the config entries
      date: make "iso-strict" conforming for the UTC timezone
      t0006: add more tests with a negative TZ offset
      doc: avoid redundant use of cat
      contrib/subtree/t: avoid redundant use of cat
      t/lib-cvs.sh: avoid redundant use of cat
      t/annotate-tests.sh: avoid redundant use of cat
      t/perf: avoid redundant use of cat
      t/t0*: avoid redundant uses of cat
      t/t1*: avoid redundant uses of cat
      t/t3*: avoid redundant uses of cat
      t/t4*: avoid redundant uses of cat
      t/t5*: avoid redundant uses of cat
      t/t6*: avoid redundant uses of cat
      t/t7*: avoid redundant use of cat
      t/t8*: avoid redundant use of cat
      t/t9*: avoid redundant uses of cat
      t/t1*: merge a "grep | sed" pipeline
      t/t3*: merge a "grep | awk" pipeline
      t/t4*: merge a "grep | sed" pipeline
      t/t5*: merge a "grep | sed" pipeline
      t/t8*: merge "grep | sed" pipelines
      t/t9*: merge "grep | sed" pipelines
      contrib/coverage-diff: avoid redundant pipelines
      git-quiltimport: avoid an unnecessary subshell

Bo Anderson (5):
      t/lib-credential: clean additional credential
      osxkeychain: replace deprecated SecKeychain API
      osxkeychain: erase all matching credentials
      osxkeychain: erase matching passwords only
      osxkeychain: store new attributes

Brian C Tracy (1):
      fuzz: add fuzzer for config parsing

Brian Lyles (13):
      docs: clarify file options in git-config `--edit`
      docs: fix typo in git-config `--default`
      docs: correct trailer `key_value_separator` description
      docs: adjust trailer `separator` and `key_value_separator` language
      pretty: update tests to use `test_config`
      pretty: find pretty formats case-insensitively
      docs: address inaccurate `--empty` default with `--exec`
      docs: clean up `--empty` formatting in git-rebase(1) and git-am(1)
      rebase: update `--empty=ask` to `--empty=stop`
      sequencer: handle unborn branch with `--allow-empty`
      sequencer: do not require `allow_empty` for redundant commit options
      cherry-pick: enforce `--keep-redundant-commits` incompatibility
      cherry-pick: add `--empty` for more robust redundant commit handling

Chandra Pratap (2):
      apply: ignore working tree filemode when !core.filemode
      t9146: replace test -d/-e/-f with appropriate test_path_is_* function

Christian Couder (5):
      revision: clarify a 'return NULL' in get_reference()
      oidset: refactor oidset_insert_from_set()
      t6022: fix 'test' style and 'even though' typo
      rev-list: allow missing tips with --missing=[print|allow*]
      revision: fix --missing=[print|allow*] for annotated tags

Derrick Stolee (1):
      fetch: return when parsing submodule.recurse

Dirk Gouders (6):
      Documentation/user-manual.txt: example for generating object hashes
      MyFirstObjectWalk: use additional arg in config_fn_t
      MyFirstObjectWalk: fix misspelled "builtins/"
      MyFirstObjectWalk: fix filtered object walk
      MyFirstObjectWalk: fix description for counting omitted objects
      MyFirstObjectWalk: add stderr to pipe processing

Dragan Simic (8):
      documentation: send-email: use camel case consistently
      config: minor addition of whitespace
      config: really keep value-internal whitespace verbatim
      t1300: add more tests for whitespace and inline comments
      config.txt: describe handling of whitespace further
      grep docs: describe --recurse-submodules further and improve formatting a bit
      grep docs: describe --no-index further and improve formatting a bit
      config: fix some small capitalization issues, as spotted

Eric Sunshine (2):
      docs: sort configuration variable groupings alphabetically
      test-lib: fix non-functioning GIT_TEST_MAINT_SCHEDULER fallback

Eric W. Biederman (23):
      object-file-convert: stubs for converting from one object format to another
      oid-array: teach oid-array to handle multiple kinds of oids
      object-names: support input of oids in any supported hash
      repository: add a compatibility hash algorithm
      loose: compatibilty short name support
      object-file: update the loose object map when writing loose objects
      object-file: add a compat_oid_in parameter to write_object_file_flags
      commit: convert mergetag before computing the signature of a commit
      commit: export add_header_signature to support handling signatures on tags
      tag: sign both hashes
      object: factor out parse_mode out of fast-import and tree-walk into in object.h
      object-file-convert: don't leak when converting tag objects
      object-file-convert: convert commits that embed signed tags
      object-file: update object_info_extended to reencode objects
      rev-parse: add an --output-object-format parameter
      builtin/cat-file: let the oid determine the output algorithm
      tree-walk: init_tree_desc take an oid to get the hash algorithm
      object-file: handle compat objects in check_object_signature
      builtin/ls-tree: let the oid determine the output algorithm
      test-lib: compute the compatibility hash so tests may use it
      t1006: rename sha1 to oid
      t1006: test oid compatibility with cat-file
      t1016-compatObjectFormat: add tests to verify the conversion between objects

Eugenio Gigante (1):
      add: use unsigned type for collection of bits

Florian Schmidt (1):
      wt-status: don't find scissors line beyond buf len

Ghanshyam Thakkar (5):
      add-patch: classify '@' as a synonym for 'HEAD'
      add -p tests: remove PERL prerequisites
      setup: remove unnecessary variable
      builtin/commit: error out when passing untracked path with -i
      builtin/add: error out when passing untracked path with -u

Haritha D (1):
      build: support z/OS (OS/390).

Harmen Stoppels (1):
      rebase: make warning less passive aggressive

Jakub Wilk (1):
      git-remote.txt: fix typo

Jean-Noël Avila (17):
      doc: git-rev-parse: enforce command-line description syntax
      doc: close unclosed angle-bracket of a placeholder in git-clone doc
      doc: end sentences with full-stop
      doc: clarify the format of placeholders
      doc: git-init: format verbatim parts
      doc: git-init: format placeholders
      doc: git-init: rework definition lists
      doc: git-init: rework config item init.templateDir
      doc: git-clone: format verbatim words
      doc: git-clone: format placeholders
      doc: format alternatives in synopsis
      doc: fix some placeholders formating
      doc: rework CodingGuidelines with new formatting rules
      doc: allow literal and emphasis format in doc vs help tests
      doc: git-init: apply new documentation formatting guidelines
      doc: git-clone: apply new documentation formatting guidelines
      doc: git-clone: do not autoreference the manpage in itself

Jeff Hostetler (17):
      name-hash: add index_dir_find()
      t7527: add case-insensitve test for FSMonitor
      fsmonitor: refactor refresh callback on directory events
      fsmonitor: clarify handling of directory events in callback helper
      fsmonitor: refactor refresh callback for non-directory events
      dir: create untracked_cache_invalidate_trimmed_path()
      fsmonitor: refactor untracked-cache invalidation
      fsmonitor: move untracked-cache invalidation into helper functions
      fsmonitor: return invalidated cache-entry count on directory event
      fsmonitor: remove custom loop from non-directory path handler
      fsmonitor: return invalidated cache-entry count on non-directory event
      fsmonitor: trace the new invalidated cache-entry count
      fsmonitor: refactor bit invalidation in refresh callback
      fsmonitor: support case-insensitive events
      t0211: demonstrate missing 'def_param' events for certain commands
      trace2: avoid emitting 'def_param' set more than once
      trace2: emit 'def_param' set with 'cmd_name' event

Jeff King (51):
      t0303: check that helper_test_clean removes all credentials
      userdiff: skip textconv caching when not in a repository
      Revert "refs: allow @{n} to work with n-sized reflog"
      get_oid_basic(): special-case ref@{n} for oldest reflog entry
      read_ref_at(): special-case ref@{0} for an empty reflog
      upload-pack: drop separate v2 "haves" array
      upload-pack: switch deepen-not list to an oid_array
      upload-pack: use oidset for deepen_not list
      upload-pack: use a strmap for want-ref lines
      upload-pack: accept only a single packfile-uri line
      upload-pack: always turn off save_commit_buffer
      upload-pack: use PARSE_OBJECT_SKIP_HASH_CHECK in more places
      upload-pack: free tree buffers after parsing
      upload-pack: use repository struct to get config
      upload-pack: centralize setup of sideband-all config
      upload-pack: use existing config mechanism for advertisement
      upload-pack: only accept packfile-uris if we advertised it
      doc/gitremote-helpers: fix missing single-quote
      config: forbid newline as core.commentChar
      strbuf: simplify comment-handling in add_lines() helper
      strbuf: avoid static variables in strbuf_add_commented_lines()
      commit: refactor base-case of adjust_comment_line_char()
      strbuf: avoid shadowing global comment_line_char name
      environment: store comment_line_char as a string
      strbuf: accept a comment string for strbuf_stripspace()
      strbuf: accept a comment string for strbuf_commented_addf()
      strbuf: accept a comment string for strbuf_add_commented_lines()
      prefer comment_line_str to comment_line_char for printing
      find multi-byte comment chars in NUL-terminated strings
      find multi-byte comment chars in unterminated buffers
      sequencer: handle multi-byte comment characters when writing todo list
      wt-status: drop custom comment-char stringification
      environment: drop comment_line_char compatibility macro
      config: allow multi-byte core.commentChar
      shortlog: stop setting pp.print_email_subject
      pretty: split oneline and email subject printing
      pretty: drop print_email_subject flag
      log: do not set up extra_headers for non-email formats
      format-patch: return an allocated string from log_write_email_headers()
      format-patch: simplify after-subject MIME header handling
      doc/gitremote-helpers: fix more missing single-quotes
      transport-helper: use write helpers more consistently
      transport-helper: drop "object-format <algo>" option
      transport-helper: send "true" value for object-format option
      contrib: drop hg-to-git script
      format-patch: fix leak of empty header string
      rebase: use child_process_clear() to clean
      config: add core.commentString
      http: reset POSTFIELDSIZE when clearing curl handle
      INSTALL: bump libcurl version to 7.21.3
      remote-curl: add Transfer-Encoding header only for older curl

Jiamu Sun (1):
      bugreport.c: fix a crash in `git bugreport` with `--no-suffix` option

Johannes Schindelin (22):
      merge-tree: accept 3 trees as arguments
      merge-tree: fail with a non-zero exit code on missing tree objects
      merge-ort: do check `parse_tree()`'s return value
      t4301: verify that merge-tree fails on missing blob objects
      Always check `parse_tree*()`'s return value
      cache-tree: avoid an unnecessary check
      fill_tree_descriptor(): mark error message for translation
      neue: remove a bogus empty file
      commit-reach(paint_down_to_common): plug two memory leaks
      commit-reach(repo_in_merge_bases_many): optionally expect missing commits
      commit-reach(repo_in_merge_bases_many): report missing commits
      commit-reach(paint_down_to_common): prepare for handling shallow commits
      commit-reach(paint_down_to_common): start reporting errors
      commit-reach(merge_bases_many): pass on "missing commits" errors
      commit-reach(get_merge_bases_many_0): pass on "missing commits" errors
      commit-reach(repo_get_merge_bases): pass on "missing commits" errors
      commit-reach(get_octopus_merge_bases): pass on "missing commits" errors
      commit-reach(repo_get_merge_bases_many): pass on "missing commits" errors
      commit-reach(repo_get_merge_bases_many_dirty): pass on errors
      merge-recursive: prepare for `merge_submodule()` to report errors
      merge-ort/merge-recursive: do report errors in `merge_submodule()`
      merge-tree: fix argument type of the `--merge-base` option

John Cai (1):
      t5300: fix test_with_bad_commit()

Jonas Wunderlich (1):
      doc: status.showUntrackedFiles does not take "false"

Josh Triplett (2):
      commit: avoid redundant scissor line with --cleanup=scissors -v
      commit: unify logic to avoid multiple scissors lines when merging

Julio Bacellari (1):
      doc: remove outdated information about interactive.singleKey

Junio C Hamano (63):
      apply: correctly reverse patch's pre- and post-image mode bits
      apply: code simplification
      t9210: do not rely on lazy fetching to fail
      git: --no-lazy-fetch option
      doc: add shortcut to "am --whitespace=<action>"
      doc: apply the new placeholder rules to git-add documentation
      compat: drop inclusion of <git-compat-util.h>
      Start the 2.45 cycle
      git: document GIT_NO_REPLACE_OBJECTS environment variable
      doc: clarify the wording on <git-compat-util.h> requirement
      git: extend --no-lazy-fetch to work across subprocesses
      The second batch
      The third batch
      test_i18ngrep: hard deprecate and forbid its use
      unpack: replace xwrite() loop with write_in_full()
      sideband: avoid short write(2)
      repack: check error writing to pack-objects subprocess
      clean: further clean-up of implementation around "--force"
      The fourth batch
      The fifth batch
      setup: notice more types of implicit bare repositories
      The sixth batch
      status: unify parsing of --untracked= and status.showUntrackedFiles
      status: allow --untracked=false and friends
      The seventh batch
      The eighth batch
      config: fix --comment formatting
      config: allow tweaking whitespace between value and comment
      diff.*Prefix: use camelCase in the doc and test titles
      The ninth batch
      apply: parse names out of "diff --git" more carefully
      The tenth batch
      The eleventh batch
      SubmittingPatches: release-notes entry experiment
      The twelfth batch
      t4126: make sure a directory with SP at the end is usable
      t4126: fix "funny directory name" test on Windows (again)
      advice: omit trailing whitespace
      checkout: omit "tracking" information on a detached HEAD
      The thirteenth batch
      t2104: style fixes
      The fourteenth batch
      revision: optionally record matches with pathspec elements
      The fifteenth batch
      CodingGuidelines: describe "export VAR=VAL" rule
      CodingGuidelines: quote assigned value in 'local var=$val'
      t: local VAR="VAL" (quote positional parameters)
      t: local VAR="VAL" (quote command substitution)
      t: local VAR="VAL" (quote ${magic-reference})
      t: teach lint that RHS of 'local VAR=VAL' needs to be quoted
      t0610: local VAR="VAL" fix
      t1016: local VAR="VAL" fix
      config: do not leak excludes_file
      Makefile(s): do not enforce "all indents must be done with tab"
      The sixteenth batch
      t2104: style fixes
      The seventeenth batch
      The eighteenth batch
      The ninteenth batch
      The twentieth batch
      Git 2.45-rc0
      A bit more topics before -rc1
      Git 2.45-rc1

Justin Tobler (3):
      reftable/stack: expose option to disable auto-compaction
      reftable/stack: add env to disable autocompaction
      reftable/stack: use geometric table compaction

Karthik Nayak (7):
      refs: introduce `is_pseudoref()` and `is_headref()`
      refs: extract out `loose_fill_ref_dir_regular_file()`
      refs: introduce `refs_for_each_include_root_refs()`
      ref-filter: rename 'FILTER_REFS_ALL' to 'FILTER_REFS_REGULAR'
      for-each-ref: add new option to include root refs
      update-ref: use {old,new}-oid instead of {old,new}value
      githooks: use {old,new}-oid instead of {old,new}-value

Kipras Melnikovas (1):
      mergetools: vimdiff: use correct tool's name when reading mergetool config

Kristoffer Haugsbakk (9):
      column: disallow negative padding
      column: guard against negative padding
      gitcli: drop mention of “non-dashed form”
      config: document `core.commentChar` as ASCII-only
      t3200: improve test style
      advice: make all entries stylistically consistent
      advice: use backticks for verbatim
      advice: use double quotes for regular quoting
      branch: advise about ref syntax rules

Linus Arver (15):
      trailer: free trailer_info _after_ all related usage
      shortlog: add test for de-duplicating folded trailers
      trailer: rename functions to use 'trailer'
      trailer: reorder format_trailers_from_commit() parameters
      trailer: move interpret_trailers() to interpret-trailers.c
      trailer_info_get(): reorder parameters
      format_trailers(): use strbuf instead of FILE
      format_trailer_info(): move "fast path" to caller
      format_trailers_from_commit(): indirectly call trailer_info_get()
      format_trailer_info(): use trailer_item objects
      format_trailer_info(): drop redundant unfold_value()
      format_trailer_info(): append newline for non-trailer lines
      trailer: begin formatting unification
      trailer: finish formatting unification
      mailmap: change primary address for Linus Arver

M Hickford (1):
      libsecret: retrieve empty password

Marcel Röthke (1):
      rerere: fix crashes due to unmatched opening conflict markers

Matthias Aßhauer (1):
      Win32: detect unix socket support at runtime

Max Gautier (1):
      editorconfig: add Makefiles to "text files"

Michael Lohmann (2):
      revision: ensure MERGE_HEAD is a ref in prepare_show_merge
      revision: implement `git log --merge` also for rebase/cherry-pick/revert

Orgad Shaneh (1):
      docs: remove duplicate entry and fix typo in 2.45 changelog

Patrick Steinhardt (99):
      refs: introduce reftable backend
      ci: add jobs to test with the reftable backend
      refs/reftable: fix leak when copying reflog fails
      reftable/record: introduce function to compare records by key
      reftable/merged: allocation-less dropping of shadowed records
      reftable/merged: skip comparison for records of the same subiter
      reftable/pq: allocation-less comparison of entry keys
      reftable/block: swap buffers instead of copying
      reftable/record: don't try to reallocate ref record name
      reftable/reader: add comments to `table_iter_next()`
      t: move tests exercising the "files" backend
      t0410: convert tests to use DEFAULT_REPO_FORMAT prereq
      t1400: exercise reflog with gaps with reftable backend
      t1404: make D/F conflict tests compatible with reftable backend
      t1405: remove unneeded cleanup step
      t2011: exercise D/F conflicts with HEAD with the reftable backend
      t7003: ensure filter-branch prunes reflogs with the reftable backend
      git-difftool--helper: honor `--trust-exit-code` with `--dir-diff`
      dir-iterator: pass name to `prepare_next_entry_data()` directly
      dir-iterator: support iteration in sorted order
      refs/files: sort reflogs returned by the reflog iterator
      refs/files: sort merged worktree and common reflogs
      refs: always treat iterators as ordered
      refs: drop unused params from the reflog iterator callback
      refs: stop resolving ref corresponding to reflogs
      builtin/reflog: introduce subcommand to list reflogs
      builtin/clone: allow remote helpers to detect repo
      refs/reftable: don't fail empty transactions in repo without HEAD
      reftable/pq: use `size_t` to track iterator index
      reftable/merged: make `merged_iter` structure private
      reftable/merged: advance subiter on subsequent iteration
      reftable/merged: make subiters own their records
      reftable/merged: remove unnecessary null check for subiters
      reftable/merged: handle subiter cleanup on close only
      reftable/merged: circumvent pqueue with single subiter
      reftable/merged: avoid duplicate pqueue emptiness check
      reftable/record: reuse refname when decoding
      reftable/record: reuse refname when copying
      reftable/record: decode keys in place
      reftable: allow inlining of a few functions
      refs/reftable: precompute prefix length
      refs/reftable: reload correct stack when creating reflog iter
      reftable/record: convert old and new object IDs to arrays
      reftable/record: avoid copying author info
      reftable/record: reuse refnames when decoding log records
      reftable/record: reuse message when decoding log records
      reftable/record: use scratch buffer when decoding records
      refs/reftable: track last log record name via strbuf
      t0610: remove unused variable assignment
      lockfile: report when rollback fails
      reftable/stack: register new tables as tempfiles
      reftable/stack: register lockfiles during compaction
      reftable/stack: register compacted tables as tempfiles
      reftable/record: fix memory leak when decoding object records
      reftable/block: fix binary search over restart counter
      t5601: exercise clones with "includeIf.*.onbranch"
      reftable: fix tests being broken by NFS' delete-after-close semantics
      t7800: improve test descriptions with empty arguments
      t7800: use single quotes for test bodies
      t/README: document how to loop around test cases
      reftable/stack: fix error handling in `reftable_stack_init_addition()`
      reftable/error: discern locked/outdated errors
      reftable/stack: use error codes when locking fails during compaction
      reftable/stack: gracefully handle failed auto-compaction due to locks
      refs/reftable: print errors on compaction failure
      t/helper: drop pack-refs wrapper
      refs: move `struct pack_refs_opts` to where it's used
      refs: remove `PACK_REFS_ALL` flag
      refs/reftable: expose auto compaction via new flag
      builtin/pack-refs: release allocated memory
      builtin/pack-refs: introduce new "--auto" flag
      builtin/gc: move `struct maintenance_run_opts`
      t6500: extract objects with "17" prefix
      builtin/gc: forward git-gc(1)'s `--auto` flag when packing refs
      builtin/gc: pack refs when using `git maintenance run --auto`
      reftable/basics: fix return type of `binsearch()` to be `size_t`
      reftable/basics: improve `binsearch()` test
      reftable/refname: refactor binary search over refnames
      reftable/block: refactor binary search over restart points
      reftable/block: fix error handling when searching restart points
      reftable/record: extract function to decode key lengths
      reftable/block: avoid decoding keys when searching restart points
      t0610: make `--shared=` tests reusable
      t0610: execute git-pack-refs(1) with specified umask
      reftable/block: rename `block_reader_start()`
      reftable/block: merge `block_iter_seek()` and `block_reader_seek()`
      reftable/block: better grouping of functions
      reftable/block: introduce `block_reader_release()`
      reftable/block: move ownership of block reader into `struct table_iter`
      reftable/reader: iterate to next block in place
      reftable/block: reuse uncompressed blocks
      reftable/block: open-code call to `uncompress2()`
      reftable/block: reuse `zstream` state on inflation
      reftable/block: avoid copying block iterators on seek
      pack-bitmap: gracefully handle missing BTMP chunks
      run-command: introduce function to prepare auto-maintenance process
      builtin/receive-pack: convert to use git-maintenance(1)
      docs: improve changelog entry for `git pack-refs --auto`
      docs: address typos in Git v2.45 changelog

Peter Hutterer (1):
      diff: add diff.srcPrefix and diff.dstPrefix configuration variables

Peter Krefting (1):
      bisect: report the found commit with "show"

Philippe Blain (5):
      merge-ort: turn submodule conflict suggestions into an advice
      ci(github): make Windows test artifacts name unique
      sequencer: allow disabling conflict advice
      builtin/am: allow disabling conflict advice
      t/README: mention test files are make targets

Phillip Wood (9):
      rebase -i: stop setting GIT_CHERRY_PICK_HELP
      xdiff-interface: refactor parsing of merge.conflictstyle
      merge-ll: introduce LL_MERGE_OPTIONS_INIT
      merge options: add a conflict style member
      checkout: cleanup --conflict=<style> parsing
      checkout: fix interaction between --conflict and --merge
      t3428: modernize test setup
      t3428: use test_commit_message
      t3428: restore coverage for "apply" backend

Pi Fisher (1):
      typo: replace 'commitish' with 'committish'

Ralph Seichter (1):
      config: add --comment option to add a comment

René Scharfe (31):
      use xstrncmpz()
      fetch: convert strncmp() with strlen() to starts_with()
      mem-pool: add mem_pool_strfmt()
      name-rev: use mem_pool_strfmt()
      submodule: use strvec_pushf() for --submodule-prefix
      t-ctype: allow NUL anywhere in the specification string
      t-ctype: simplify EOF check
      t-ctype: align output of i
      t-ctype: avoid duplicating class names
      parse-options: recognize abbreviated negated option with arg
      parse-options: set arg of abbreviated option lazily
      parse-options: factor out register_abbrev() and struct parsed_option
      parse-options: detect ambiguous self-negation
      parse-options: normalize arg and long_name before comparison
      parse-options: rearrange long_name matching code
      t-prio-queue: shorten array index message
      t-prio-queue: check result array bounds
      factor out strbuf_expand_bad_format()
      cat-file: use strbuf_expand_bad_format()
      midx: use strvec_pushf() for pack-objects base name
      mem-pool: use st_add() in mem_pool_strvfmt()
      imap-send: use xsnprintf to format command
      t-prio-queue: simplify using compound literals
      apply: avoid fixed-size buffer in create_one_file()
      path: remove mksnpath()
      apply: don't leak fd on fdopen() error
      usage: report vsnprintf(3) failure
      date: make DATE_MODE thread-safe
      git-compat-util: fix NO_OPENSSL on current macOS
      imap-send: increase command size limit
      apply: avoid using fixed-size buffer in write_out_one_reject()

Richard Macklin (1):
      rebase: fix typo in autosquash documentation

Rubén Justo (14):
      tag: error when git-column fails
      completion: fix __git_complete_worktree_paths
      completion: reflog with implicit "show"
      completion: reflog show <log-options>
      completion: introduce __git_find_subcommand
      completion: factor out __git_resolve_builtins
      completion: reflog subcommands and options
      checkout: plug some leaks in git-restore
      add-patch: introduce 'p' in interactive-patch
      add-patch: do not print hunks repeatedly
      add: use advise_if_enabled for ADVICE_ADD_IGNORED_FILE
      add: use advise_if_enabled for ADVICE_ADD_EMPTY_PATHSPEC
      add: use advise_if_enabled for ADVICE_ADD_EMBEDDED_REPO
      launch_editor: waiting message on error

SZEDER Gábor (1):
      upload-pack: don't send null character in abort message to the client

Sergey Organov (1):
      clean: improve -n and -f implementation and documentation

Steven Jeuris (1):
      userdiff: better method/property matching for C#

Taylor Blau (8):
      Documentation/config/pack.txt: fix broken AsciiDoc mark-up
      upload-pack: disallow object-info capability by default
      midx-write: move writing-related functions from midx.c
      midx-write.c: factor out common want_included_pack() routine
      midx-write.c: check count of packs to repack after grouping
      midx-write.c: use `--stdin-packs` when repacking
      t/t7700-repack.sh: fix test breakages with `GIT_TEST_MULTI_PACK_INDEX=1 `
      Makefile(s): avoid recipe prefix in conditional statements

Thalia Archibald (8):
      fast-import: tighten path unquoting
      fast-import: directly use strbufs for paths
      fast-import: allow unquoted empty path for root
      fast-import: remove dead strbuf
      fast-import: improve documentation for path quoting
      fast-import: document C-style escapes for paths
      fast-import: forbid escaped NUL in paths
      fast-import: make comments more precise

Ville Skyttä (2):
      completion: fix prompt with unset SHOWCONFLICTSTATE in nounset mode
      completion: protect prompt against unset SHOWUPSTREAM in nounset mode

Vincenzo Mezzela (1):
      t7301: use test_path_is_(missing|file)

Xing Xin (1):
      Documentation: fix typos describing date format

Yehezkel Bernat (1):
      Documentation: fix linkgit reference

brian m. carlson (7):
      loose: add a mapping between SHA-1 and SHA-256 for loose objects
      commit: write commits for both hashes
      cache: add a function to read an OID of a specific algorithm
      object-file-convert: add a function to convert trees between algorithms
      object-file-convert: convert tag objects when writing
      object-file-convert: convert commit objects when writing
      repository: implement extensions.compatObjectFormat

shejialuo (1):
      t9117: prefer test_path_* helper functions

Đoàn Trần Công Danh (1):
      t9604: Fix test for musl libc and new Debian



^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.45.0-rc0
@ 2024-04-19 17:14  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2024-04-19 17:14 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

An early preview release Git v2.45.0-rc0 is now available for
testing at the usual places.  It is comprised of 481 non-merge
commits since v2.44.0, contributed by 77 people, 32 of which are
new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.45.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.44.0 are as follows.
Welcome to the Git development community!

  Ahelenia Ziemiańska, Angelo Dureghello, Aryan Gupta, Benjamin
  Flesch, Bo Anderson, Brian C Tracy, Brian Lyles, Bruno Haible,
  Chuck Lever, Dario Gjorgjevski, Dirk Gouders, Eugenio Gigante,
  Florian Schmidt, Haritha D, Harmen Stoppels, Jean-Rémy Falleri,
  Jiamu Sun, Jonas Wunderlich, Jonathan Davies, Julio Bacellari,
  Kipras Melnikovas, Matthew Rollings, Max Gautier, mirth hickford,
  Paweł Dominiak, Pi Fisher, Ralph Seichter, Richard Macklin,
  shejialuo, Steven Jeuris, Tiago Pascoal, and Vincenzo Mezzela.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alexander Shopov, Beat Bolli, brian m. carlson, Chandra Pratap,
  Christian Couder, Derrick Stolee, Dragan Simic, Elijah Newren,
  Eric Sunshine, Eric W. Biederman, Ghanshyam Thakkar, Han Young,
  Jakub Wilk, Jean-Noël Avila, Jeff Hostetler, Jeff King,
  Johannes Schindelin, Johannes Sixt, John Cai, Josh Steadmon,
  Josh Triplett, Junio C Hamano, Justin Tobler, Karthik Nayak,
  Kristoffer Haugsbakk, Kyle Lippincott, Kyle Meyer, Linus Arver,
  Manlio Perillo, Matthias Aßhauer, M Hickford, Michael Lohmann,
  Michael Osipov, Mike Hommey, Patrick Steinhardt, Peter Hutterer,
  Philippe Blain, Phillip Wood, René Scharfe, Rubén Justo,
  Sergey Organov, SZEDER Gábor, Taylor Blau, Ville Skyttä,
  and Yasushi SHOJI.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.45 Release Notes (draft)
===============================

Backward Compatibility Notes

UI, Workflows & Features

 * Integrate the reftable code into the refs framework as a backend.
   With "git init --ref-format=reftable", hopefully it would be a lot
   more efficient to manage a repository with many references.

 * "git checkout -p" and friends learned that that "@" is a synonym
   for "HEAD".

 * Variants of vimdiff learned to honor mergetool.<variant>.layout
   settings.

 * "git reflog" learned a "list" subcommand that enumerates known reflogs.

 * When a merge conflicted at a submodule, merge-ort backend used to
   unconditionally give a lengthy message to suggest how to resolve
   it.  Now the message can be squelched as an advice message.

 * "git for-each-ref" learned "--include-root-refs" option to show
   even the stuff outside the 'refs/' hierarchy.

 * "git rev-list --missing=print" has learned to optionally take
   "--allow-missing-tips", which allows the objects at the starting
   points to be missing.

 * "git merge-tree" has learned that the three trees involved in the
   3-way merge only need to be trees, not necessarily commits.

 * "git log --merge" learned to pay attention to CHERRY_PICK_HEAD and
   other kinds of *_HEAD pseudorefs.

 * Platform specific tweaks for OS/390 has been added to
   config.mak.uname.

 * Users with safe.bareRepository=explicit can still work from within
   $GIT_DIR of a seconary worktree (which resides at .git/worktrees/$name/)
   of the primary worktree without explicitly specifying the $GIT_DIR
   environment variable or the --git-dir=<path> option.

 * The output format for dates "iso-strict" has been tweaked to show
   a time in the Zulu timezone with "Z" suffix, instead of "+00:00".

 * "git diff" and friends learned two extra configuration variables,
   diff.srcPrefix and diff.dstPrefix.

 * The status.showUntrackedFiles configuration variable had a name
   that tempts users to set a Boolean value expressed in our usual
   "false", "off", and "0", but it only took "no".  This has been
   corrected so "true" and its synonyms are taken as "normal", while
   "false" and its synonyms are taken as "no".

 * Remove an ancient and not well maintained Hg-to-git migration
   script from contrib/.

 * Hints that suggest what to do after resolving conflicts can now be
   squelched by disabling advice.mergeConflict.

 * Allow git-cherry-pick(1) to automatically drop redundant commits via
   a new `--empty` option, similar to the `--empty` options for
   git-rebase(1) and git-am(1). Includes a soft deprecation of
   `--keep-redundant-commits` as well as some related docs changes and
   sequencer code cleanup.

 * "git config" learned "--comment=<message>" option to leave a
   comment immediately after the "variable = value" on the same line
   in the configuration file.

 * core.commentChar used to be limited to a single byte, but has been
   updated to allow an arbitrary multi-byte sequence.

 * "git add -p" and other "interactive hunk selection" UI has learned to
   skip showing the hunk immediately after it has already been shown, and
   an additional action to explicitly ask to reshow the current hunk.

 * "git pack-refs" learned the "--auto" option, which is a useful
   addition to be triggered from "git gc --auto".

 * "git add -u <pathspec>" and "git commit [-i] <pathspec>" did not
   diagnose a pathspec element that did not match any files in certain
   situations, unlike "git add <pathspec>" did.

 * The userdiff patterns for C# has been updated.


Performance, Internal Implementation, Development Support etc.

 * The code to iterate over refs with the reftable backend has seen
   some optimization.

 * More tests that are marked as "ref-files only" have been updated to
   improve test coverage of reftable backend.

 * Some parts of command line completion script (in contrib/) have
   been micro-optimized.

 * The way placeholders are to be marked-up in documentation have been
   specified; use "_<placeholder>_" to typeset the word inside a pair
   of <angle-brakets> emphasized.

 * "git --no-lazy-fetch cmd" allows to run "cmd" while disabling lazy
   fetching of objects from the promisor remote, which may be handy
   for debugging.

 * The implementation in "git clean" that makes "-n" and "-i" ignore
   clean.requireForce has been simplified, together with the
   documentation.

 * The code to iterate over refs with the reftable backend has seen
   some optimization.

 * Uses of xwrite() helper have been audited and updated for better
   error checking and simpler code.

 * Some trace2 events that lacked def_param have learned to show it,
   enriching the output.

 * The parse-options code that deals with abbreviated long option
   names have been cleaned up.

 * The code in reftable backend that creates new table files works
   better with the tempfile framework to avoid leaving cruft after a
   failure.

 * The reftable code has its own custom binary search function whose
   comparison callback has an unusual interface, which caused the
   binary search to degenerate into a linear search, which has been
   corrected.

 * The code to iterate over reflogs in the reftable has been optimized
   to reduce memory allocation and deallocation.

 * Work to support a repository that work with both SHA-1 and SHA-256
   hash algorithms has started.

 * A new fuzz target that exercises config parsing code has been
   added.

 * Fix the way recently added tests interpolate variables defined
   outside them, and document the best practice to help future
   developers.

 * Introduce an experimental protocol for contributors to propose the
   topic description to be used in the "What's cooking" report, the
   merge commit message for the topic, and in the release notes and
   document it in the SubmittingPatches document.

 * The t/README file now gives a hint on running individual tests in
   the "t/" directory with "make t<num>-*.sh t<num>-*.sh".
   (merge 8d383806fc pb/test-scripts-are-build-targets later to maint).

 * The "hint:" messages given by the advice mechanism, when given a
   message with a blank line, left a line with trailing whitespace,
   which has been cleansed.

 * Documentation rules has been explicitly described how to mark-up
   literal parts and a few manual pages have been updated as examples.

 * The .editorconfig file has been taught that a Makefile uses HT
   indentation.

 * t-prio-queue test has been cleaned up by using C99 compound
   literals; this is meant to also serve as a weather-balloon to smoke
   out folks with compilers who have trouble compiling code that uses
   the feature.

 * Windows binary used to decide the use of unix-domain socket at
   build time, but it learned to make the decision at runtime instead.

 * The "shared repository" test in the t0610 reftable test failed
   under restrictive umask setting (e.g. 007), which has been
   corrected.

 * Document and apply workaround for a buggy version of dash that
   mishandles "local var=val" construct.

 * The codepaths that reach date_mode_from_type() have been updated to
   pass "struct date_mode" by value to make them thread safe.

 * The strategy to compact multiple tables of reftables after many
   operations accumulate many entries has been improved to avoid
   accumulating too many tables uncollected.


Fixes since v2.44
-----------------

 * "git apply" on a filesystem without filemode support have learned
   to take a hint from what is in the index for the path, even when
   not working with the "--index" or "--cached" option, when checking
   the executable bit match what is required by the preimage in the
   patch.
   (merge 45b625142d cp/apply-core-filemode later to maint).

 * "git column" has been taught to reject negative padding value, as
   it would lead to nonsense behaviour including division by zero.
   (merge 76fb807faa kh/column-reject-negative-padding later to maint).

 * "git am --help" now tells readers what actions are available in
   "git am --whitespace=<action>", in addition to saying that the
   option is passed through to the underlying "git apply".
   (merge a171dac734 jc/am-whitespace-doc later to maint).

 * "git tag --column" failed to check the exit status of its "git
   column" invocation, which has been corrected.
   (merge 92e66478fc rj/tag-column-fix later to maint).

 * Credential helper based on libsecret (in contrib/) has been updated
   to handle an empty password correctly.
   (merge 8f1f2023b7 mh/libsecret-empty-password-fix later to maint).

 * "git difftool --dir-diff" learned to honor the "--trust-exit-code"
   option; it used to always exit with 0 and signalled success.
   (merge eb84c8b6ce ps/difftool-dir-diff-exit-code later to maint).

 * The code incorrectly attempted to use textconv cache when asked,
   even when we are not running in a repository, which has been
   corrected.
   (merge affe355fe7 jk/textconv-cache-outside-repo-fix later to maint).

 * Remove an empty file that shouldn't have been added in the first
   place.
   (merge 4f66942215 js/remove-cruft-files later to maint).

 * The logic to access reflog entries by date and number had ugly
   corner cases at the boundaries, which have been cleaned up.
   (merge 5edd126720 jk/reflog-special-cases-fix later to maint).

 * An error message from "git upload-pack", which responds to "git
   fetch" requests, had a trialing NUL in it, which has been
   corrected.
   (merge 3f4c7a0805 sg/upload-pack-error-message-fix later to maint).

 * Clarify wording in the CodingGuidelines that requires <git-compat-util.h>
   to be the first header file.
   (merge 4e89f0e07c jc/doc-compat-util later to maint).

 * "git commit -v --cleanup=scissors" used to add the scissors line
   twice in the log message buffer, which has been corrected.
   (merge e90cc075cc jt/commit-redundant-scissors-fix later to maint).

 * A custom remote helper no longer cannot access the newly created
   repository during "git clone", which is a regression in Git 2.44.
   This has been corrected.
   (merge 199f44cb2e ps/remote-helper-repo-initialization-fix later to maint).

 * Various parts of upload-pack has been updated to bound the resource
   consumption relative to the size of the repository to protect from
   abusive clients.
   (merge 6cd05e768b jk/upload-pack-bounded-resources later to maint).

 * The upload-pack program, when talking over v2, accepted the
   packfile-uris protocol extension from the client, even if it did
   not advertise the capability, which has been corrected.
   (merge a922bfa3b5 jk/upload-pack-v2-capability-cleanup later to maint).

 * Make sure failure return from merge_bases_many() is properly caught.
   (merge 25fd20eb44 js/merge-base-with-missing-commit later to maint).

 * FSMonitor client code was confused when FSEvents were given in a
   different case on a case-insensitive filesystem, which has been
   corrected.
   (merge 29c139ce78 jh/fsmonitor-icase-corner-case-fix later to maint).

 * The "core.commentChar" configuration variable only allows an ASCII
   character, which was not clearly documented, which has been
   corrected.
   (merge fb7c556f58 kh/doc-commentchar-is-a-byte later to maint).

 * With release 2.44 we got rid of all uses of test_i18ngrep and there
   is no in-flight topic that adds a new use of it.  Make a call to
   test_i18ngrep a hard failure, so that we can remove it at the end
   of this release cycle.
   (merge 381a83dfa3 jc/test-i18ngrep later to maint).

 * The command line completion script (in contrib/) learned to
   complete "git reflog" better.
   (merge 1284f9cc11 rj/complete-reflog later to maint).

 * The logic to complete the command line arguments to "git worktree"
   subcommand (in contrib/) has been updated to correctly honor things
   like "git -C dir" etc.
   (merge 3574816d98 rj/complete-worktree-paths-fix later to maint).

 * When git refuses to create a branch because the proposed branch
   name is not a valid refname, an advice message is given to refer
   the user to exact naming rules.
   (merge 8fbd903e58 kh/branch-ref-syntax-advice later to maint).

 * Code simplification by getting rid of code that sets an environment
   variable that is no longer used.
   (merge 72a8d3f027 pw/rebase-i-ignore-cherry-pick-help-environment later to maint).

 * The code to find the effective end of log message can fall into an
   endless loop, which has been corrected.
   (merge 2541cba2d6 fs/find-end-of-log-message-fix later to maint).

 * Mark-ups used in the documentation has been improved for
   consistency.
   (merge 45d5ed3e50 ja/doc-markup-fixes later to maint).

 * The status.showUntrackedFiles configuration variable was
   incorrectly documented to accept "false", which has been corrected.

 * Leaks from "git restore" have been plugged.
   (merge 2f64da0790 rj/restore-plug-leaks later to maint).

 * "git bugreport --no-suffix" was not supported and instead
   segfaulted, which has been corrected.
   (merge b3b57c69da js/bugreport-no-suffix-fix later to maint).

 * The documentation for "%(trailers[:options])" placeholder in the
   "--pretty" option of commands in the "git log" family has been
   updated.
   (merge bff85a338c bl/doc-key-val-sep-fix later to maint).

 * "git checkout --conflict=bad" reported a bad conflictStyle as if it
   were given to a configuration variable; it has been corrected to
   report that the command line option is bad.
   (merge 5a99c1ac1a pw/checkout-conflict-errorfix later to maint).

 * Code clean-up in the "git log" machinery that implements custom log
   message formatting.
   (merge 1c10b8e5b0 jk/pretty-subject-cleanup later to maint).

 * "git config" corrupted literal HT characters written in the
   configuration file as part of a value, which has been corrected.
   (merge e6895c3f97 ds/config-internal-whitespace-fix later to maint).

 * A unit test for reftable code tried to enumerate all files in a
   directory after reftable operations and expected to see nothing but
   the files it wanted to leave there, but was fooled by .nfs* cruft
   files left, which has been corrected.
   (merge 0068aa7946 ps/reftable-unit-test-nfs-workaround later to maint).

 * The implementation and documentation of "object-format" option
   exchange between the Git itself and its remote helpers did not
   quite match, which has been corrected.

 * The "--pretty=<shortHand>" option of the commands in the "git log"
   family, defined as "[pretty] shortHand = <expansion>" should have
   been looked up case insensitively, but was not, which has been
   corrected.
   (merge f999d5188b bl/pretty-shorthand-config-fix later to maint).

 * "git apply" failed to extract the filename the patch applied to,
   when the change was about an empty file created in or deleted from
   a directory whose name ends with a SP, which has been corrected.
   (merge 776ffd1a30 jc/apply-parse-diff-git-header-names-fix later to maint).

 * Update a more recent tutorial doc.
   (merge 95ab557b4b dg/myfirstobjectwalk-updates later to maint).

 * The test script had an incomplete and ineffective attempt to avoid
   clobbering the testing user's real crontab (and its equivalents),
   which has been completed.
   (merge 73cb87773b es/test-cron-safety later to maint).

 * Use advice_if_enabled() API to rewrite a simple pattern to
   call advise() after checking advice_enabled().
   (merge 6412d01527 rj/use-adv-if-enabled later to maint).

 * Another "set -u" fix for the bash prompt (in contrib/) script.
   (merge d7805bc743 vs/complete-with-set-u-fix later to maint).

 * "git checkout/switch --detach foo", after switching to the detached
   HEAD state, gave the tracking information for the 'foo' branch,
   which was pointless.

 * "git apply" has been updated to lift the hardcoded pathname length
   limit, which in turn allowed a mksnpath() function that is no
   longer used.
   (merge 708f7e0590 rs/apply-lift-path-length-limit later to maint).

 * A file descriptor leak in an error codepath, used when "git apply
   --reject" fails to create the *.rej file, has been corrected.
   (merge 2b1f456adf rs/apply-reject-fd-leakfix later to maint).

 * A config parser callback function fell through instead of returning
   after recognising and processing a variable, wasting cycles, which
   has been corrected.
   (merge a816ccd642 ds/fetch-config-parse-microfix later to maint).

 * Fix was added to work around a regression in libcURL 8.7.0 (which has
   already been fixed in their tip of the tree).
   (merge 92a209bf24 jk/libcurl-8.7-regression-workaround later to maint).

 * The variable that holds the value read from the core.excludefile
   configuration variable used to leak, which has been corrected.
   (merge 0e0fefb29f jc/unleak-core-excludesfile later to maint).

 * vreportf(), which is usede by error() and friends, has been taught
   to give the error message printf-format string when its vsnprintf()
   call fails, instead of showing nothing useful to identify the
   nature of the error.
   (merge c63adab961 rs/usage-fallback-to-show-message-format later to maint).

 * Adjust to an upcoming changes to GNU make that breaks our Makefiles.
   (merge 227b8fd902 tb/make-indent-conditional-with-non-spaces later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge f0e578c69c rs/use-xstrncmpz later to maint).
   (merge 83e6eb7d7a ba/credential-test-clean-fix later to maint).
   (merge 64562d784d jb/doc-interactive-singlekey-do-not-need-perl later to maint).
   (merge c431a235e2 cp/t9146-use-test-path-helpers later to maint).
   (merge 82d75402d5 ds/doc-send-email-capitalization later to maint).
   (merge 41bff66e35 jc/doc-add-placeholder-fix later to maint).
   (merge 6835f0efe9 jw/remote-doc-typofix later to maint).
   (merge 244001aa20 hs/rebase-not-in-progress later to maint).
   (merge 2ca6c07db2 jc/no-include-of-compat-util-from-headers later to maint).
   (merge 87bd7fbb9c rs/fetch-simplify-with-starts-with later to maint).
   (merge f39addd0d9 rs/name-rev-with-mempool later to maint).
   (merge 9a97b43e03 rs/submodule-prefix-simplify later to maint).
   (merge 40b8076462 ak/rebase-autosquash later to maint).
   (merge 3223204456 eg/add-uflags later to maint).
   (merge 5f78d52dce es/config-doc-sort-sections later to maint).
   (merge 781fb7b4c2 as/option-names-in-messages later to maint).
   (merge 51d41dc243 jk/doc-remote-helpers-markup-fix later to maint).
   (merge e1aaf309db pb/ci-win-artifact-names-fix later to maint).
   (merge ad538c61da jc/index-pack-fsck-levels later to maint).
   (merge 67471bc704 ja/doc-formatting-fix later to maint).
   (merge 86f9ce7dd6 bl/doc-config-fixes later to maint).
   (merge 0d527842b7 az/grep-group-error-message-update later to maint).
   (merge 7c43bdf07b rs/strbuf-expand-bad-format later to maint).
   (merge 8b68b48d5c ds/typofix-core-config-doc later to maint).
   (merge 39bb692152 rs/imap-send-use-xsnprintf later to maint).
   (merge 8d320cec60 jc/t2104-style-fixes later to maint).
   (merge b4454d5a7b pw/t3428-cleanup later to maint).
   (merge 84a7c33a4b pf/commitish-committish later to maint).
   (merge 8882ee9d68 la/mailmap-entry later to maint).

----------------------------------------------------------------

Changes since v2.44.0 are as follows:

Ahelenia Ziemiańska (1):
      grep: improve errors for unmatched ( and )

Alexander Shopov (4):
      transport-helper.c: trivial fix of error message
      builtin/remote.c: trivial fix of error message
      builtin/clone.c: trivial fix of message
      revision.c: trivial fix to message

Aryan Gupta (1):
      tests: modernize the test script t0010-racy-git.sh

Beat Bolli (25):
      completion: use awk for filtering the config entries
      date: make "iso-strict" conforming for the UTC timezone
      t0006: add more tests with a negative TZ offset
      doc: avoid redundant use of cat
      contrib/subtree/t: avoid redundant use of cat
      t/lib-cvs.sh: avoid redundant use of cat
      t/annotate-tests.sh: avoid redundant use of cat
      t/perf: avoid redundant use of cat
      t/t0*: avoid redundant uses of cat
      t/t1*: avoid redundant uses of cat
      t/t3*: avoid redundant uses of cat
      t/t4*: avoid redundant uses of cat
      t/t5*: avoid redundant uses of cat
      t/t6*: avoid redundant uses of cat
      t/t7*: avoid redundant use of cat
      t/t8*: avoid redundant use of cat
      t/t9*: avoid redundant uses of cat
      t/t1*: merge a "grep | sed" pipeline
      t/t3*: merge a "grep | awk" pipeline
      t/t4*: merge a "grep | sed" pipeline
      t/t5*: merge a "grep | sed" pipeline
      t/t8*: merge "grep | sed" pipelines
      t/t9*: merge "grep | sed" pipelines
      contrib/coverage-diff: avoid redundant pipelines
      git-quiltimport: avoid an unnecessary subshell

Bo Anderson (5):
      t/lib-credential: clean additional credential
      osxkeychain: replace deprecated SecKeychain API
      osxkeychain: erase all matching credentials
      osxkeychain: erase matching passwords only
      osxkeychain: store new attributes

Brian C Tracy (1):
      fuzz: add fuzzer for config parsing

Brian Lyles (13):
      docs: clarify file options in git-config `--edit`
      docs: fix typo in git-config `--default`
      docs: correct trailer `key_value_separator` description
      docs: adjust trailer `separator` and `key_value_separator` language
      pretty: update tests to use `test_config`
      pretty: find pretty formats case-insensitively
      docs: address inaccurate `--empty` default with `--exec`
      docs: clean up `--empty` formatting in git-rebase(1) and git-am(1)
      rebase: update `--empty=ask` to `--empty=stop`
      sequencer: handle unborn branch with `--allow-empty`
      sequencer: do not require `allow_empty` for redundant commit options
      cherry-pick: enforce `--keep-redundant-commits` incompatibility
      cherry-pick: add `--empty` for more robust redundant commit handling

Chandra Pratap (2):
      apply: ignore working tree filemode when !core.filemode
      t9146: replace test -d/-e/-f with appropriate test_path_is_* function

Christian Couder (5):
      revision: clarify a 'return NULL' in get_reference()
      oidset: refactor oidset_insert_from_set()
      t6022: fix 'test' style and 'even though' typo
      rev-list: allow missing tips with --missing=[print|allow*]
      revision: fix --missing=[print|allow*] for annotated tags

Derrick Stolee (1):
      fetch: return when parsing submodule.recurse

Dirk Gouders (6):
      Documentation/user-manual.txt: example for generating object hashes
      MyFirstObjectWalk: use additional arg in config_fn_t
      MyFirstObjectWalk: fix misspelled "builtins/"
      MyFirstObjectWalk: fix filtered object walk
      MyFirstObjectWalk: fix description for counting omitted objects
      MyFirstObjectWalk: add stderr to pipe processing

Dragan Simic (8):
      documentation: send-email: use camel case consistently
      config: minor addition of whitespace
      config: really keep value-internal whitespace verbatim
      t1300: add more tests for whitespace and inline comments
      config.txt: describe handling of whitespace further
      grep docs: describe --recurse-submodules further and improve formatting a bit
      grep docs: describe --no-index further and improve formatting a bit
      config: fix some small capitalization issues, as spotted

Eric Sunshine (2):
      docs: sort configuration variable groupings alphabetically
      test-lib: fix non-functioning GIT_TEST_MAINT_SCHEDULER fallback

Eric W. Biederman (23):
      object-file-convert: stubs for converting from one object format to another
      oid-array: teach oid-array to handle multiple kinds of oids
      object-names: support input of oids in any supported hash
      repository: add a compatibility hash algorithm
      loose: compatibilty short name support
      object-file: update the loose object map when writing loose objects
      object-file: add a compat_oid_in parameter to write_object_file_flags
      commit: convert mergetag before computing the signature of a commit
      commit: export add_header_signature to support handling signatures on tags
      tag: sign both hashes
      object: factor out parse_mode out of fast-import and tree-walk into in object.h
      object-file-convert: don't leak when converting tag objects
      object-file-convert: convert commits that embed signed tags
      object-file: update object_info_extended to reencode objects
      rev-parse: add an --output-object-format parameter
      builtin/cat-file: let the oid determine the output algorithm
      tree-walk: init_tree_desc take an oid to get the hash algorithm
      object-file: handle compat objects in check_object_signature
      builtin/ls-tree: let the oid determine the output algorithm
      test-lib: compute the compatibility hash so tests may use it
      t1006: rename sha1 to oid
      t1006: test oid compatibility with cat-file
      t1016-compatObjectFormat: add tests to verify the conversion between objects

Eugenio Gigante (1):
      add: use unsigned type for collection of bits

Florian Schmidt (1):
      wt-status: don't find scissors line beyond buf len

Ghanshyam Thakkar (5):
      add-patch: classify '@' as a synonym for 'HEAD'
      add -p tests: remove PERL prerequisites
      setup: remove unnecessary variable
      builtin/commit: error out when passing untracked path with -i
      builtin/add: error out when passing untracked path with -u

Haritha D (1):
      build: support z/OS (OS/390).

Harmen Stoppels (1):
      rebase: make warning less passive aggressive

Jakub Wilk (1):
      git-remote.txt: fix typo

Jean-Noël Avila (17):
      doc: git-rev-parse: enforce command-line description syntax
      doc: close unclosed angle-bracket of a placeholder in git-clone doc
      doc: end sentences with full-stop
      doc: clarify the format of placeholders
      doc: git-init: format verbatim parts
      doc: git-init: format placeholders
      doc: git-init: rework definition lists
      doc: git-init: rework config item init.templateDir
      doc: git-clone: format verbatim words
      doc: git-clone: format placeholders
      doc: format alternatives in synopsis
      doc: fix some placeholders formating
      doc: rework CodingGuidelines with new formatting rules
      doc: allow literal and emphasis format in doc vs help tests
      doc: git-init: apply new documentation formatting guidelines
      doc: git-clone: apply new documentation formatting guidelines
      doc: git-clone: do not autoreference the manpage in itself

Jeff Hostetler (17):
      name-hash: add index_dir_find()
      t7527: add case-insensitve test for FSMonitor
      fsmonitor: refactor refresh callback on directory events
      fsmonitor: clarify handling of directory events in callback helper
      fsmonitor: refactor refresh callback for non-directory events
      dir: create untracked_cache_invalidate_trimmed_path()
      fsmonitor: refactor untracked-cache invalidation
      fsmonitor: move untracked-cache invalidation into helper functions
      fsmonitor: return invalidated cache-entry count on directory event
      fsmonitor: remove custom loop from non-directory path handler
      fsmonitor: return invalidated cache-entry count on non-directory event
      fsmonitor: trace the new invalidated cache-entry count
      fsmonitor: refactor bit invalidation in refresh callback
      fsmonitor: support case-insensitive events
      t0211: demonstrate missing 'def_param' events for certain commands
      trace2: avoid emitting 'def_param' set more than once
      trace2: emit 'def_param' set with 'cmd_name' event

Jeff King (51):
      t0303: check that helper_test_clean removes all credentials
      userdiff: skip textconv caching when not in a repository
      Revert "refs: allow @{n} to work with n-sized reflog"
      get_oid_basic(): special-case ref@{n} for oldest reflog entry
      read_ref_at(): special-case ref@{0} for an empty reflog
      upload-pack: drop separate v2 "haves" array
      upload-pack: switch deepen-not list to an oid_array
      upload-pack: use oidset for deepen_not list
      upload-pack: use a strmap for want-ref lines
      upload-pack: accept only a single packfile-uri line
      upload-pack: always turn off save_commit_buffer
      upload-pack: use PARSE_OBJECT_SKIP_HASH_CHECK in more places
      upload-pack: free tree buffers after parsing
      upload-pack: use repository struct to get config
      upload-pack: centralize setup of sideband-all config
      upload-pack: use existing config mechanism for advertisement
      upload-pack: only accept packfile-uris if we advertised it
      doc/gitremote-helpers: fix missing single-quote
      config: forbid newline as core.commentChar
      strbuf: simplify comment-handling in add_lines() helper
      strbuf: avoid static variables in strbuf_add_commented_lines()
      commit: refactor base-case of adjust_comment_line_char()
      strbuf: avoid shadowing global comment_line_char name
      environment: store comment_line_char as a string
      strbuf: accept a comment string for strbuf_stripspace()
      strbuf: accept a comment string for strbuf_commented_addf()
      strbuf: accept a comment string for strbuf_add_commented_lines()
      prefer comment_line_str to comment_line_char for printing
      find multi-byte comment chars in NUL-terminated strings
      find multi-byte comment chars in unterminated buffers
      sequencer: handle multi-byte comment characters when writing todo list
      wt-status: drop custom comment-char stringification
      environment: drop comment_line_char compatibility macro
      config: allow multi-byte core.commentChar
      shortlog: stop setting pp.print_email_subject
      pretty: split oneline and email subject printing
      pretty: drop print_email_subject flag
      log: do not set up extra_headers for non-email formats
      format-patch: return an allocated string from log_write_email_headers()
      format-patch: simplify after-subject MIME header handling
      doc/gitremote-helpers: fix more missing single-quotes
      transport-helper: use write helpers more consistently
      transport-helper: drop "object-format <algo>" option
      transport-helper: send "true" value for object-format option
      contrib: drop hg-to-git script
      format-patch: fix leak of empty header string
      rebase: use child_process_clear() to clean
      config: add core.commentString
      http: reset POSTFIELDSIZE when clearing curl handle
      INSTALL: bump libcurl version to 7.21.3
      remote-curl: add Transfer-Encoding header only for older curl

Jiamu Sun (1):
      bugreport.c: fix a crash in `git bugreport` with `--no-suffix` option

Johannes Schindelin (22):
      merge-tree: accept 3 trees as arguments
      merge-tree: fail with a non-zero exit code on missing tree objects
      merge-ort: do check `parse_tree()`'s return value
      t4301: verify that merge-tree fails on missing blob objects
      Always check `parse_tree*()`'s return value
      cache-tree: avoid an unnecessary check
      fill_tree_descriptor(): mark error message for translation
      neue: remove a bogus empty file
      commit-reach(paint_down_to_common): plug two memory leaks
      commit-reach(repo_in_merge_bases_many): optionally expect missing commits
      commit-reach(repo_in_merge_bases_many): report missing commits
      commit-reach(paint_down_to_common): prepare for handling shallow commits
      commit-reach(paint_down_to_common): start reporting errors
      commit-reach(merge_bases_many): pass on "missing commits" errors
      commit-reach(get_merge_bases_many_0): pass on "missing commits" errors
      commit-reach(repo_get_merge_bases): pass on "missing commits" errors
      commit-reach(get_octopus_merge_bases): pass on "missing commits" errors
      commit-reach(repo_get_merge_bases_many): pass on "missing commits" errors
      commit-reach(repo_get_merge_bases_many_dirty): pass on errors
      merge-recursive: prepare for `merge_submodule()` to report errors
      merge-ort/merge-recursive: do report errors in `merge_submodule()`
      merge-tree: fix argument type of the `--merge-base` option

John Cai (1):
      t5300: fix test_with_bad_commit()

Jonas Wunderlich (1):
      doc: status.showUntrackedFiles does not take "false"

Josh Triplett (2):
      commit: avoid redundant scissor line with --cleanup=scissors -v
      commit: unify logic to avoid multiple scissors lines when merging

Julio Bacellari (1):
      doc: remove outdated information about interactive.singleKey

Junio C Hamano (61):
      apply: correctly reverse patch's pre- and post-image mode bits
      apply: code simplification
      t9210: do not rely on lazy fetching to fail
      git: --no-lazy-fetch option
      doc: add shortcut to "am --whitespace=<action>"
      doc: apply the new placeholder rules to git-add documentation
      compat: drop inclusion of <git-compat-util.h>
      Start the 2.45 cycle
      git: document GIT_NO_REPLACE_OBJECTS environment variable
      doc: clarify the wording on <git-compat-util.h> requirement
      git: extend --no-lazy-fetch to work across subprocesses
      The second batch
      The third batch
      test_i18ngrep: hard deprecate and forbid its use
      unpack: replace xwrite() loop with write_in_full()
      sideband: avoid short write(2)
      repack: check error writing to pack-objects subprocess
      clean: further clean-up of implementation around "--force"
      The fourth batch
      The fifth batch
      setup: notice more types of implicit bare repositories
      The sixth batch
      status: unify parsing of --untracked= and status.showUntrackedFiles
      status: allow --untracked=false and friends
      The seventh batch
      The eighth batch
      config: fix --comment formatting
      config: allow tweaking whitespace between value and comment
      diff.*Prefix: use camelCase in the doc and test titles
      The ninth batch
      apply: parse names out of "diff --git" more carefully
      The tenth batch
      The eleventh batch
      SubmittingPatches: release-notes entry experiment
      The twelfth batch
      t4126: make sure a directory with SP at the end is usable
      t4126: fix "funny directory name" test on Windows (again)
      advice: omit trailing whitespace
      checkout: omit "tracking" information on a detached HEAD
      The thirteenth batch
      t2104: style fixes
      The fourteenth batch
      revision: optionally record matches with pathspec elements
      The fifteenth batch
      CodingGuidelines: describe "export VAR=VAL" rule
      CodingGuidelines: quote assigned value in 'local var=$val'
      t: local VAR="VAL" (quote positional parameters)
      t: local VAR="VAL" (quote command substitution)
      t: local VAR="VAL" (quote ${magic-reference})
      t: teach lint that RHS of 'local VAR=VAL' needs to be quoted
      t0610: local VAR="VAL" fix
      t1016: local VAR="VAL" fix
      config: do not leak excludes_file
      Makefile(s): do not enforce "all indents must be done with tab"
      The sixteenth batch
      t2104: style fixes
      The seventeenth batch
      The eighteenth batch
      The ninteenth batch
      The twentieth batch
      Git 2.45-rc0

Justin Tobler (3):
      reftable/stack: expose option to disable auto-compaction
      reftable/stack: add env to disable autocompaction
      reftable/stack: use geometric table compaction

Karthik Nayak (7):
      refs: introduce `is_pseudoref()` and `is_headref()`
      refs: extract out `loose_fill_ref_dir_regular_file()`
      refs: introduce `refs_for_each_include_root_refs()`
      ref-filter: rename 'FILTER_REFS_ALL' to 'FILTER_REFS_REGULAR'
      for-each-ref: add new option to include root refs
      update-ref: use {old,new}-oid instead of {old,new}value
      githooks: use {old,new}-oid instead of {old,new}-value

Kipras Melnikovas (1):
      mergetools: vimdiff: use correct tool's name when reading mergetool config

Kristoffer Haugsbakk (9):
      column: disallow negative padding
      column: guard against negative padding
      gitcli: drop mention of “non-dashed form”
      config: document `core.commentChar` as ASCII-only
      t3200: improve test style
      advice: make all entries stylistically consistent
      advice: use backticks for verbatim
      advice: use double quotes for regular quoting
      branch: advise about ref syntax rules

Linus Arver (10):
      trailer: free trailer_info _after_ all related usage
      shortlog: add test for de-duplicating folded trailers
      trailer: rename functions to use 'trailer'
      trailer: reorder format_trailers_from_commit() parameters
      trailer: move interpret_trailers() to interpret-trailers.c
      trailer_info_get(): reorder parameters
      format_trailers(): use strbuf instead of FILE
      format_trailer_info(): move "fast path" to caller
      format_trailers_from_commit(): indirectly call trailer_info_get()
      mailmap: change primary address for Linus Arver

M Hickford (1):
      libsecret: retrieve empty password

Matthias Aßhauer (1):
      Win32: detect unix socket support at runtime

Max Gautier (1):
      editorconfig: add Makefiles to "text files"

Michael Lohmann (2):
      revision: ensure MERGE_HEAD is a ref in prepare_show_merge
      revision: implement `git log --merge` also for rebase/cherry-pick/revert

Patrick Steinhardt (84):
      refs: introduce reftable backend
      ci: add jobs to test with the reftable backend
      refs/reftable: fix leak when copying reflog fails
      reftable/record: introduce function to compare records by key
      reftable/merged: allocation-less dropping of shadowed records
      reftable/merged: skip comparison for records of the same subiter
      reftable/pq: allocation-less comparison of entry keys
      reftable/block: swap buffers instead of copying
      reftable/record: don't try to reallocate ref record name
      reftable/reader: add comments to `table_iter_next()`
      t: move tests exercising the "files" backend
      t0410: convert tests to use DEFAULT_REPO_FORMAT prereq
      t1400: exercise reflog with gaps with reftable backend
      t1404: make D/F conflict tests compatible with reftable backend
      t1405: remove unneeded cleanup step
      t2011: exercise D/F conflicts with HEAD with the reftable backend
      t7003: ensure filter-branch prunes reflogs with the reftable backend
      git-difftool--helper: honor `--trust-exit-code` with `--dir-diff`
      dir-iterator: pass name to `prepare_next_entry_data()` directly
      dir-iterator: support iteration in sorted order
      refs/files: sort reflogs returned by the reflog iterator
      refs/files: sort merged worktree and common reflogs
      refs: always treat iterators as ordered
      refs: drop unused params from the reflog iterator callback
      refs: stop resolving ref corresponding to reflogs
      builtin/reflog: introduce subcommand to list reflogs
      builtin/clone: allow remote helpers to detect repo
      refs/reftable: don't fail empty transactions in repo without HEAD
      reftable/pq: use `size_t` to track iterator index
      reftable/merged: make `merged_iter` structure private
      reftable/merged: advance subiter on subsequent iteration
      reftable/merged: make subiters own their records
      reftable/merged: remove unnecessary null check for subiters
      reftable/merged: handle subiter cleanup on close only
      reftable/merged: circumvent pqueue with single subiter
      reftable/merged: avoid duplicate pqueue emptiness check
      reftable/record: reuse refname when decoding
      reftable/record: reuse refname when copying
      reftable/record: decode keys in place
      reftable: allow inlining of a few functions
      refs/reftable: precompute prefix length
      refs/reftable: reload correct stack when creating reflog iter
      reftable/record: convert old and new object IDs to arrays
      reftable/record: avoid copying author info
      reftable/record: reuse refnames when decoding log records
      reftable/record: reuse message when decoding log records
      reftable/record: use scratch buffer when decoding records
      refs/reftable: track last log record name via strbuf
      t0610: remove unused variable assignment
      lockfile: report when rollback fails
      reftable/stack: register new tables as tempfiles
      reftable/stack: register lockfiles during compaction
      reftable/stack: register compacted tables as tempfiles
      reftable/record: fix memory leak when decoding object records
      reftable/block: fix binary search over restart counter
      t5601: exercise clones with "includeIf.*.onbranch"
      reftable: fix tests being broken by NFS' delete-after-close semantics
      t7800: improve test descriptions with empty arguments
      t7800: use single quotes for test bodies
      t/README: document how to loop around test cases
      reftable/stack: fix error handling in `reftable_stack_init_addition()`
      reftable/error: discern locked/outdated errors
      reftable/stack: use error codes when locking fails during compaction
      reftable/stack: gracefully handle failed auto-compaction due to locks
      refs/reftable: print errors on compaction failure
      t/helper: drop pack-refs wrapper
      refs: move `struct pack_refs_opts` to where it's used
      refs: remove `PACK_REFS_ALL` flag
      refs/reftable: expose auto compaction via new flag
      builtin/pack-refs: release allocated memory
      builtin/pack-refs: introduce new "--auto" flag
      builtin/gc: move `struct maintenance_run_opts`
      t6500: extract objects with "17" prefix
      builtin/gc: forward git-gc(1)'s `--auto` flag when packing refs
      builtin/gc: pack refs when using `git maintenance run --auto`
      reftable/basics: fix return type of `binsearch()` to be `size_t`
      reftable/basics: improve `binsearch()` test
      reftable/refname: refactor binary search over refnames
      reftable/block: refactor binary search over restart points
      reftable/block: fix error handling when searching restart points
      reftable/record: extract function to decode key lengths
      reftable/block: avoid decoding keys when searching restart points
      t0610: make `--shared=` tests reusable
      t0610: execute git-pack-refs(1) with specified umask

Peter Hutterer (1):
      diff: add diff.srcPrefix and diff.dstPrefix configuration variables

Philippe Blain (5):
      merge-ort: turn submodule conflict suggestions into an advice
      ci(github): make Windows test artifacts name unique
      sequencer: allow disabling conflict advice
      builtin/am: allow disabling conflict advice
      t/README: mention test files are make targets

Phillip Wood (9):
      rebase -i: stop setting GIT_CHERRY_PICK_HELP
      xdiff-interface: refactor parsing of merge.conflictstyle
      merge-ll: introduce LL_MERGE_OPTIONS_INIT
      merge options: add a conflict style member
      checkout: cleanup --conflict=<style> parsing
      checkout: fix interaction between --conflict and --merge
      t3428: modernize test setup
      t3428: use test_commit_message
      t3428: restore coverage for "apply" backend

Pi Fisher (1):
      typo: replace 'commitish' with 'committish'

Ralph Seichter (1):
      config: add --comment option to add a comment

René Scharfe (28):
      use xstrncmpz()
      fetch: convert strncmp() with strlen() to starts_with()
      mem-pool: add mem_pool_strfmt()
      name-rev: use mem_pool_strfmt()
      submodule: use strvec_pushf() for --submodule-prefix
      t-ctype: allow NUL anywhere in the specification string
      t-ctype: simplify EOF check
      t-ctype: align output of i
      t-ctype: avoid duplicating class names
      parse-options: recognize abbreviated negated option with arg
      parse-options: set arg of abbreviated option lazily
      parse-options: factor out register_abbrev() and struct parsed_option
      parse-options: detect ambiguous self-negation
      parse-options: normalize arg and long_name before comparison
      parse-options: rearrange long_name matching code
      t-prio-queue: shorten array index message
      t-prio-queue: check result array bounds
      factor out strbuf_expand_bad_format()
      cat-file: use strbuf_expand_bad_format()
      midx: use strvec_pushf() for pack-objects base name
      mem-pool: use st_add() in mem_pool_strvfmt()
      imap-send: use xsnprintf to format command
      t-prio-queue: simplify using compound literals
      apply: avoid fixed-size buffer in create_one_file()
      path: remove mksnpath()
      apply: don't leak fd on fdopen() error
      usage: report vsnprintf(3) failure
      date: make DATE_MODE thread-safe

Richard Macklin (1):
      rebase: fix typo in autosquash documentation

Rubén Justo (13):
      tag: error when git-column fails
      completion: fix __git_complete_worktree_paths
      completion: reflog with implicit "show"
      completion: reflog show <log-options>
      completion: introduce __git_find_subcommand
      completion: factor out __git_resolve_builtins
      completion: reflog subcommands and options
      checkout: plug some leaks in git-restore
      add-patch: introduce 'p' in interactive-patch
      add-patch: do not print hunks repeatedly
      add: use advise_if_enabled for ADVICE_ADD_IGNORED_FILE
      add: use advise_if_enabled for ADVICE_ADD_EMPTY_PATHSPEC
      add: use advise_if_enabled for ADVICE_ADD_EMBEDDED_REPO

SZEDER Gábor (1):
      upload-pack: don't send null character in abort message to the client

Sergey Organov (1):
      clean: improve -n and -f implementation and documentation

Steven Jeuris (1):
      userdiff: better method/property matching for C#

Taylor Blau (8):
      Documentation/config/pack.txt: fix broken AsciiDoc mark-up
      upload-pack: disallow object-info capability by default
      midx-write: move writing-related functions from midx.c
      midx-write.c: factor out common want_included_pack() routine
      midx-write.c: check count of packs to repack after grouping
      midx-write.c: use `--stdin-packs` when repacking
      t/t7700-repack.sh: fix test breakages with `GIT_TEST_MULTI_PACK_INDEX=1 `
      Makefile(s): avoid recipe prefix in conditional statements

Ville Skyttä (2):
      completion: fix prompt with unset SHOWCONFLICTSTATE in nounset mode
      completion: protect prompt against unset SHOWUPSTREAM in nounset mode

Vincenzo Mezzela (1):
      t7301: use test_path_is_(missing|file)

brian m. carlson (7):
      loose: add a mapping between SHA-1 and SHA-256 for loose objects
      commit: write commits for both hashes
      cache: add a function to read an OID of a specific algorithm
      object-file-convert: add a function to convert trees between algorithms
      object-file-convert: convert tag objects when writing
      object-file-convert: convert commit objects when writing
      repository: implement extensions.compatObjectFormat

shejialuo (1):
      t9117: prefer test_path_* helper functions



^ permalink raw reply	[relevance 3%]

* Re: [PATCH v3 0/2] Allow disabling advice shown after merge conflicts
  2024-03-25 10:48  0%   ` Phillip Wood
@ 2024-03-25 16:57  0%     ` Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2024-03-25 16:57 UTC (permalink / raw)
  To: Phillip Wood
  Cc: Philippe Blain via GitGitGadget, git, Elijah Newren, Phillip Wood,
	Johannes Schindelin, ZheNing Hu, Kristoffer Haugsbakk,
	Rubén Justo, Philippe Blain

Phillip Wood <phillip.wood123@gmail.com> writes:

> Hi Philippe
>
> On 16/03/2024 21:16, Philippe Blain via GitGitGadget wrote:
>> Changes since v2:
>>   * expanded the commit messages to explain why the tests for 'git
>> rebase' do
>>     not need to be adjusted
>>   * adjusted the wording of the new 'advice.mergeConflict' in the doc, as
>>     suggested by Kristoffer for uniformity with his series which is already
>>     merged to 'master' (b09a8839a4 (Merge branch
>>     'kh/branch-ref-syntax-advice', 2024-03-15)).
>>   * checked all new output manually and consequently adjusted the code in 1/2
>>     to avoid a lonely 'hint: ' line.
>>   * adjusted the addition in advice.h in 1/2 to put the new enum
>>     alphabetically, as noticed by Rubén.
>>   * added misssing newlines in 2/2 as noticed by Phillip and tweaked by
>>     Junio.
>>   * rebased on master (2953d95d40 (The eighth batch, 2024-03-15)), to avoid
>>     conflicts in 'Documentation/config/advice.txt' due to Kristoffer's merged >     series
>> [...] Note that the code path where 'git rebase --apply' stops
>> because of
>> conflicts is not covered by the tests but I tested it manually using this
>> diff:
>> diff --git a/t/t5520-pull.sh b/t/t5520-pull.sh
>> index 47534f1062..34eac2e6f4 100755
>> --- a/t/t5520-pull.sh
>> +++ b/t/t5520-pull.sh
>> @@ -374,7 +374,7 @@ test_pull_autostash_fail ()
>>       echo conflicting >>seq.txt &&
>>       test_tick &&
>>       git commit -m "Create conflict" seq.txt &&
>> -	test_must_fail git pull --rebase . seq 2>err >out &&
>> +	test_must_fail git -c rebase.backend=apply pull --rebase . seq 2>err >out &&
>>       test_grep "Resolve all conflicts manually" err
>>   '
>
> Thanks for being so thorough, this version looks good to me

Yup, these look good.  Let's mark the topic for 'next'.

Thanks, both.


^ permalink raw reply	[relevance 0%]

* Re: [PATCH v3 0/2] Allow disabling advice shown after merge conflicts
  2024-03-16 21:16  3% ` [PATCH v3 " Philippe Blain via GitGitGadget
  2024-03-18 16:31  0%   ` Junio C Hamano
@ 2024-03-25 10:48  0%   ` Phillip Wood
  2024-03-25 16:57  0%     ` Junio C Hamano
  1 sibling, 1 reply; 162+ results
From: Phillip Wood @ 2024-03-25 10:48 UTC (permalink / raw)
  To: Philippe Blain via GitGitGadget, git
  Cc: Elijah Newren, Phillip Wood, Johannes Schindelin, ZheNing Hu,
	Kristoffer Haugsbakk, Rubén Justo, Philippe Blain

Hi Philippe

On 16/03/2024 21:16, Philippe Blain via GitGitGadget wrote:
> Changes since v2:
> 
>   * expanded the commit messages to explain why the tests for 'git rebase' do
>     not need to be adjusted
>   * adjusted the wording of the new 'advice.mergeConflict' in the doc, as
>     suggested by Kristoffer for uniformity with his series which is already
>     merged to 'master' (b09a8839a4 (Merge branch
>     'kh/branch-ref-syntax-advice', 2024-03-15)).
>   * checked all new output manually and consequently adjusted the code in 1/2
>     to avoid a lonely 'hint: ' line.
>   * adjusted the addition in advice.h in 1/2 to put the new enum
>     alphabetically, as noticed by Rubén.
>   * added misssing newlines in 2/2 as noticed by Phillip and tweaked by
>     Junio.
>   * rebased on master (2953d95d40 (The eighth batch, 2024-03-15)), to avoid
>     conflicts in 'Documentation/config/advice.txt' due to Kristoffer's merged >     series
> [...] 
> Note that the code path where 'git rebase --apply' stops because of
> conflicts is not covered by the tests but I tested it manually using this
> diff:
> 
> diff --git a/t/t5520-pull.sh b/t/t5520-pull.sh
> index 47534f1062..34eac2e6f4 100755
> --- a/t/t5520-pull.sh
> +++ b/t/t5520-pull.sh
> @@ -374,7 +374,7 @@ test_pull_autostash_fail ()
>       echo conflicting >>seq.txt &&
>       test_tick &&
>       git commit -m "Create conflict" seq.txt &&
> -	test_must_fail git pull --rebase . seq 2>err >out &&
> +	test_must_fail git -c rebase.backend=apply pull --rebase . seq 2>err >out &&
>       test_grep "Resolve all conflicts manually" err
>   '

Thanks for being so thorough, this version looks good to me

Best Wishes

Phillip

> 
> Philippe Blain (2):
>    sequencer: allow disabling conflict advice
>    builtin/am: allow disabling conflict advice
> 
>   Documentation/config/advice.txt |  2 ++
>   advice.c                        |  1 +
>   advice.h                        |  1 +
>   builtin/am.c                    | 14 +++++++++-----
>   sequencer.c                     | 33 ++++++++++++++++++---------------
>   t/t3501-revert-cherry-pick.sh   |  1 +
>   t/t3507-cherry-pick-conflict.sh |  2 ++
>   t/t4150-am.sh                   |  8 ++++----
>   t/t4254-am-corrupt.sh           |  2 +-
>   9 files changed, 39 insertions(+), 25 deletions(-)
> 
> 
> base-commit: 2953d95d402b6bff1a59c4712f4d46f1b9ea137f
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1682%2Fphil-blain%2Fsequencer-conflict-advice-v3
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1682/phil-blain/sequencer-conflict-advice-v3
> Pull-Request: https://github.com/gitgitgadget/git/pull/1682
> 
> Range-diff vs v2:
> 
>   1:  a2ce6fd24c2 ! 1:  6005c1e9890 sequencer: allow disabling conflict advice
>       @@ Commit message
>            merge conflict through a new config 'advice.mergeConflict', which is
>            named generically such that it can be used by other commands eventually.
>        
>       +    Remove that final '\n' in the first hunk in sequencer.c to avoid an
>       +    otherwise empty 'hint: ' line before the line 'hint: Disable this
>       +    message with "git config advice.mergeConflict false"' which is
>       +    automatically added by 'advise_if_enabled'.
>       +
>            Note that we use 'advise_if_enabled' for each message in the second hunk
>            in sequencer.c, instead of using 'if (show_hints &&
>            advice_enabled(...)', because the former instructs the user how to
>       @@ Commit message
>        
>            Update the tests accordingly. Note that the body of the second test in
>            t3507-cherry-pick-conflict.sh is enclosed in double quotes, so we must
>       -    escape them in the added line.
>       +    escape them in the added line. Note that t5520-pull.sh, which checks
>       +    that we display the advice for 'git rebase' (via 'git pull --rebase')
>       +    does not have to be updated because it only greps for a specific line in
>       +    the advice message.
>        
>            Signed-off-by: Philippe Blain <levraiphilippeblain@gmail.com>
>        
>         ## Documentation/config/advice.txt ##
>        @@ Documentation/config/advice.txt: advice.*::
>       - 		Advice on how to set your identity configuration when
>       - 		your information is guessed from the system username and
>       - 		domain name.
>       + 		Shown when the user's information is guessed from the
>       + 		system username and domain name, to tell the user how to
>       + 		set their identity configuration.
>        +	mergeConflict::
>       -+		Advice shown when various commands stop because of conflicts.
>       ++		Shown when various commands stop because of conflicts.
>         	nestedTag::
>       - 		Advice shown if a user attempts to recursively tag a tag object.
>       + 		Shown when a user attempts to recursively tag a tag object.
>         	pushAlreadyExists::
>        
>         ## advice.c ##
>       @@ advice.c: static struct {
>        
>         ## advice.h ##
>        @@ advice.h: enum advice_type {
>       + 	ADVICE_GRAFT_FILE_DEPRECATED,
>         	ADVICE_IGNORED_HOOK,
>         	ADVICE_IMPLICIT_IDENTITY,
>       - 	ADVICE_NESTED_TAG,
>        +	ADVICE_MERGE_CONFLICT,
>       + 	ADVICE_NESTED_TAG,
>         	ADVICE_OBJECT_NAME_WARNING,
>         	ADVICE_PUSH_ALREADY_EXISTS,
>       - 	ADVICE_PUSH_FETCH_FIRST,
>        
>         ## sequencer.c ##
>        @@ sequencer.c: static void print_advice(struct repository *r, int show_hint,
>       @@ sequencer.c: static void print_advice(struct repository *r, int show_hint,
>         
>         	if (msg) {
>        -		advise("%s\n", msg);
>       -+		advise_if_enabled(ADVICE_MERGE_CONFLICT, "%s\n", msg);
>       ++		advise_if_enabled(ADVICE_MERGE_CONFLICT, "%s", msg);
>         		/*
>         		 * A conflict has occurred but the porcelain
>         		 * (typically rebase --interactive) wants to take care
>   2:  3235542cc6f ! 2:  73d07c8b6a7 builtin/am: allow disabling conflict advice
>       @@ Commit message
>            on stderr instead of stdout. In t4150, redirect stdout to 'out' and
>            stderr to 'err', since this is less confusing. In t4254, as we are
>            testing a specific failure mode of 'git am', simply disable the advice.
>       +    Note that we are not testing that this advice is shown in 'git rebase'
>       +    for the apply backend since 2ac0d6273f (rebase: change the default
>       +    backend from "am" to "merge", 2020-02-15).
>        
>       +    Helped-by: Phillip Wood <phillip.wood@dunelm.org.uk>
>       +    Helped-by: Junio C Hamano <gitster@pobox.com>
>            Signed-off-by: Philippe Blain <levraiphilippeblain@gmail.com>
>        
>         ## builtin/am.c ##
>       @@ builtin/am.c: static const char *msgnum(const struct am_state *state)
>         
>        -		printf_ln(_("When you have resolved this problem, run \"%s --continue\"."), cmdline);
>        -		printf_ln(_("If you prefer to skip this patch, run \"%s --skip\" instead."), cmdline);
>       -+		strbuf_addf(&sb, _("When you have resolved this problem, run \"%s --continue\"."), cmdline);
>       -+		strbuf_addf(&sb, _("If you prefer to skip this patch, run \"%s --skip\" instead."), cmdline);
>       ++		strbuf_addf(&sb, _("When you have resolved this problem, run \"%s --continue\".\n"), cmdline);
>       ++		strbuf_addf(&sb, _("If you prefer to skip this patch, run \"%s --skip\" instead.\n"), cmdline);
>         
>         		if (advice_enabled(ADVICE_AM_WORK_DIR) &&
>         		    is_empty_or_missing_file(am_path(state, "patch")) &&
>         		    !repo_index_has_changes(the_repository, NULL, NULL))
>        -			printf_ln(_("To record the empty patch as an empty commit, run \"%s --allow-empty\"."), cmdline);
>       -+			strbuf_addf(&sb, _("To record the empty patch as an empty commit, run \"%s --allow-empty\"."), cmdline);
>       ++			strbuf_addf(&sb, _("To record the empty patch as an empty commit, run \"%s --allow-empty\".\n"), cmdline);
>         
>        -		printf_ln(_("To restore the original branch and stop patching, run \"%s --abort\"."), cmdline);
>        +		strbuf_addf(&sb, _("To restore the original branch and stop patching, run \"%s --abort\"."), cmdline);
> 



^ permalink raw reply	[relevance 0%]

* Re: [PATCH v3 0/2] Allow disabling advice shown after merge conflicts
  2024-03-16 21:16  3% ` [PATCH v3 " Philippe Blain via GitGitGadget
@ 2024-03-18 16:31  0%   ` Junio C Hamano
  2024-03-25 10:48  0%   ` Phillip Wood
  1 sibling, 0 replies; 162+ results
From: Junio C Hamano @ 2024-03-18 16:31 UTC (permalink / raw)
  To: Philippe Blain via GitGitGadget
  Cc: git, Elijah Newren, Phillip Wood, Johannes Schindelin, ZheNing Hu,
	Kristoffer Haugsbakk, Rubén Justo, Philippe Blain

"Philippe Blain via GitGitGadget" <gitgitgadget@gmail.com> writes:

> This series introduces a new config 'advice.mergeConflict' and uses it to
> allow disabling the advice shown when 'git rebase', 'git cherry-pick', 'git
> revert', 'git rebase --apply' and 'git am' stop because of conflicts.
>
> Thanks everyone for the reviews!
>
> Changes since v2:
>
>  * expanded the commit messages to explain why the tests for 'git rebase' do
>    not need to be adjusted
>  * adjusted the wording of the new 'advice.mergeConflict' in the doc, as
>    suggested by Kristoffer for uniformity with his series which is already
>    merged to 'master' (b09a8839a4 (Merge branch
>    'kh/branch-ref-syntax-advice', 2024-03-15)).
>  * checked all new output manually and consequently adjusted the code in 1/2
>    to avoid a lonely 'hint: ' line.
>  * adjusted the addition in advice.h in 1/2 to put the new enum
>    alphabetically, as noticed by Rubén.
>  * added misssing newlines in 2/2 as noticed by Phillip and tweaked by
>    Junio.
>  * rebased on master (2953d95d40 (The eighth batch, 2024-03-15)), to avoid
>    conflicts in 'Documentation/config/advice.txt' due to Kristoffer's merged
>    series

Looking good; will queue.  Thanks.


^ permalink raw reply	[relevance 0%]

* [PATCH 00/15] refs: introduce `--auto` to pack refs as needed
@ 2024-03-18 10:52  4% Patrick Steinhardt
  0 siblings, 0 replies; 162+ results
From: Patrick Steinhardt @ 2024-03-18 10:52 UTC (permalink / raw)
  To: git; +Cc: Derrick Stolee

[-- Attachment #1: Type: text/plain, Size: 4220 bytes --]

Hi,

right now, it is left to the caller of `refs_pack_refs()` to decide
whether or not to repack refs and how exactly to do it. This is
inefficient at times given that the caller typically has no idea whether
or not the refdb is close to optimal already. So even if the refdb is
already in a close-to-optimal state we would end up repacking all of it.

This patch series aims to address this shortcoming. It introduces a new
flag `PACK_REFS_AUTO` that tells the ref backend to repack refs as
needed. For the "files" backend we don't honor this flag yet and thus
end up behaving the exact same as if that flag wasn't set. But for the
"reftable" backend we will use the same auto-compaction algorithm that
is already used during writes to the refdb. Thus, in most of the cases
it wouldn't actually do anything except when the refdb is suboptimally
packed.

Eventually we'll probably also want to wire up heuristics for the
"files" backend to honor the `PACK_REFS_AUTO` flag. Using something like
a ratio of packed-refs size/number of loose refs might be viable. I
punted on that though as I feared that it might lead to bikeshedding and
thus distract from the main goal of this topic, which is to prepare the
ref code and relevant commands to perform optimizations as required. I'm
happy to add such a patch to this series though in case anybody feels
strongly about this.

The `PACK_REFS_AUTO` flag is exposed via a new `git pack-refs --auto`
flag. It is wired up in both `git gc --auto` and `git maintenance run
--auto`.

The series is structured as follows:

    - Patches 1 - 5: Bugfixes and improvements for the reftable-specific
      compaction code. These are issues that I've found while working on
      this series.

    - Patches 6 - 8: Refactorings to drop the `PACK_REFS_ALL` flag,
      which isn't actually used by the ref backends anymore and confused
      me multiple times.

    - Patches 9 - 15: Handling of `PACK_REFS_ALL` in git-pack-refs(1),
      git-gc(1) and git-maintenance(1).

The patch series is built on top of 2953d95d40 (The eighth batch,
2024-03-15) with "ps/reftable-stack-tempfile" at 60c4c42515
(reftable/stack: register compacted tables as tempfiles, 2024-03-07)
merged into it due to a merge conflict in "reftable/stack.c".

Patrick

PS: I polished this patch series while traveling and am still out of
    office until Thursday. I'll thus only get to respond to threads that
    are waiting for my input at the end of this week.

Patrick Steinhardt (15):
  reftable/stack: fix error handling in `reftable_stack_init_addition()`
  reftable/error: discern locked/outdated errors
  reftable/stack: use error codes when locking fails during compaction
  reftable/stack: gracefully handle failed auto-compaction due to locks
  refs/reftable: print errors on compaction failure
  t/helper: drop pack-refs wrapper
  refs: move `struct pack_refs_opts` to where it's used
  refs: remove `PACK_REFS_ALL` flag
  refs/reftable: expose auto compaction via new flag
  builtin/pack-refs: release allocated memory
  builtin/pack-refs: introduce new "--auto" flag
  builtin/gc: move `struct maintenance_run_opts`
  t6500: extract objects with "17" prefix
  builtin/gc: forward git-gc(1)'s `--auto` flag when packing refs
  builtin/gc: pack refs when using `git maintenance run --auto`

 Documentation/git-pack-refs.txt | 15 +++++-
 builtin/gc.c                    | 86 +++++++++++++++++++--------------
 builtin/pack-refs.c             | 31 +++++++-----
 refs.h                          | 20 ++++----
 refs/reftable-backend.c         | 11 ++++-
 reftable/error.c                |  4 +-
 reftable/reftable-error.h       |  5 +-
 reftable/stack.c                | 34 +++++++------
 reftable/stack_test.c           |  2 +-
 t/helper/test-ref-store.c       | 20 --------
 t/oid-info/hash-info            | 12 +++++
 t/t0601-reffiles-pack-refs.sh   | 30 ++++++++++--
 t/t0610-reftable-basics.sh      | 79 ++++++++++++++++++++++++++++++
 t/t6500-gc.sh                   | 30 +++---------
 14 files changed, 255 insertions(+), 124 deletions(-)


base-commit: f94fee98b456ef39a5f85fff5802f4e538a4dc7b
-- 
2.44.0


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[relevance 4%]

* [PATCH v3 0/2] Allow disabling advice shown after merge conflicts
  @ 2024-03-16 21:16  3% ` Philippe Blain via GitGitGadget
  2024-03-18 16:31  0%   ` Junio C Hamano
  2024-03-25 10:48  0%   ` Phillip Wood
  0 siblings, 2 replies; 162+ results
From: Philippe Blain via GitGitGadget @ 2024-03-16 21:16 UTC (permalink / raw)
  To: git
  Cc: Elijah Newren, Phillip Wood, Johannes Schindelin, ZheNing Hu,
	Kristoffer Haugsbakk, Rubén Justo, Philippe Blain

This series introduces a new config 'advice.mergeConflict' and uses it to
allow disabling the advice shown when 'git rebase', 'git cherry-pick', 'git
revert', 'git rebase --apply' and 'git am' stop because of conflicts.

Thanks everyone for the reviews!

Changes since v2:

 * expanded the commit messages to explain why the tests for 'git rebase' do
   not need to be adjusted
 * adjusted the wording of the new 'advice.mergeConflict' in the doc, as
   suggested by Kristoffer for uniformity with his series which is already
   merged to 'master' (b09a8839a4 (Merge branch
   'kh/branch-ref-syntax-advice', 2024-03-15)).
 * checked all new output manually and consequently adjusted the code in 1/2
   to avoid a lonely 'hint: ' line.
 * adjusted the addition in advice.h in 1/2 to put the new enum
   alphabetically, as noticed by Rubén.
 * added misssing newlines in 2/2 as noticed by Phillip and tweaked by
   Junio.
 * rebased on master (2953d95d40 (The eighth batch, 2024-03-15)), to avoid
   conflicts in 'Documentation/config/advice.txt' due to Kristoffer's merged
   series

Changes since v1:

 * renamed the new advice to 'advice.mergeConflict' to make it non-sequencer
   specific
 * added 2/2 which uses the advice in builtin/am, which covers 'git rebase
   --apply' and 'git am'

Note that the code path where 'git rebase --apply' stops because of
conflicts is not covered by the tests but I tested it manually using this
diff:

diff --git a/t/t5520-pull.sh b/t/t5520-pull.sh
index 47534f1062..34eac2e6f4 100755
--- a/t/t5520-pull.sh
+++ b/t/t5520-pull.sh
@@ -374,7 +374,7 @@ test_pull_autostash_fail ()
     echo conflicting >>seq.txt &&
     test_tick &&
     git commit -m "Create conflict" seq.txt &&
-	test_must_fail git pull --rebase . seq 2>err >out &&
+	test_must_fail git -c rebase.backend=apply pull --rebase . seq 2>err >out &&
     test_grep "Resolve all conflicts manually" err
 '


Philippe Blain (2):
  sequencer: allow disabling conflict advice
  builtin/am: allow disabling conflict advice

 Documentation/config/advice.txt |  2 ++
 advice.c                        |  1 +
 advice.h                        |  1 +
 builtin/am.c                    | 14 +++++++++-----
 sequencer.c                     | 33 ++++++++++++++++++---------------
 t/t3501-revert-cherry-pick.sh   |  1 +
 t/t3507-cherry-pick-conflict.sh |  2 ++
 t/t4150-am.sh                   |  8 ++++----
 t/t4254-am-corrupt.sh           |  2 +-
 9 files changed, 39 insertions(+), 25 deletions(-)


base-commit: 2953d95d402b6bff1a59c4712f4d46f1b9ea137f
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1682%2Fphil-blain%2Fsequencer-conflict-advice-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1682/phil-blain/sequencer-conflict-advice-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/1682

Range-diff vs v2:

 1:  a2ce6fd24c2 ! 1:  6005c1e9890 sequencer: allow disabling conflict advice
     @@ Commit message
          merge conflict through a new config 'advice.mergeConflict', which is
          named generically such that it can be used by other commands eventually.
      
     +    Remove that final '\n' in the first hunk in sequencer.c to avoid an
     +    otherwise empty 'hint: ' line before the line 'hint: Disable this
     +    message with "git config advice.mergeConflict false"' which is
     +    automatically added by 'advise_if_enabled'.
     +
          Note that we use 'advise_if_enabled' for each message in the second hunk
          in sequencer.c, instead of using 'if (show_hints &&
          advice_enabled(...)', because the former instructs the user how to
     @@ Commit message
      
          Update the tests accordingly. Note that the body of the second test in
          t3507-cherry-pick-conflict.sh is enclosed in double quotes, so we must
     -    escape them in the added line.
     +    escape them in the added line. Note that t5520-pull.sh, which checks
     +    that we display the advice for 'git rebase' (via 'git pull --rebase')
     +    does not have to be updated because it only greps for a specific line in
     +    the advice message.
      
          Signed-off-by: Philippe Blain <levraiphilippeblain@gmail.com>
      
       ## Documentation/config/advice.txt ##
      @@ Documentation/config/advice.txt: advice.*::
     - 		Advice on how to set your identity configuration when
     - 		your information is guessed from the system username and
     - 		domain name.
     + 		Shown when the user's information is guessed from the
     + 		system username and domain name, to tell the user how to
     + 		set their identity configuration.
      +	mergeConflict::
     -+		Advice shown when various commands stop because of conflicts.
     ++		Shown when various commands stop because of conflicts.
       	nestedTag::
     - 		Advice shown if a user attempts to recursively tag a tag object.
     + 		Shown when a user attempts to recursively tag a tag object.
       	pushAlreadyExists::
      
       ## advice.c ##
     @@ advice.c: static struct {
      
       ## advice.h ##
      @@ advice.h: enum advice_type {
     + 	ADVICE_GRAFT_FILE_DEPRECATED,
       	ADVICE_IGNORED_HOOK,
       	ADVICE_IMPLICIT_IDENTITY,
     - 	ADVICE_NESTED_TAG,
      +	ADVICE_MERGE_CONFLICT,
     + 	ADVICE_NESTED_TAG,
       	ADVICE_OBJECT_NAME_WARNING,
       	ADVICE_PUSH_ALREADY_EXISTS,
     - 	ADVICE_PUSH_FETCH_FIRST,
      
       ## sequencer.c ##
      @@ sequencer.c: static void print_advice(struct repository *r, int show_hint,
     @@ sequencer.c: static void print_advice(struct repository *r, int show_hint,
       
       	if (msg) {
      -		advise("%s\n", msg);
     -+		advise_if_enabled(ADVICE_MERGE_CONFLICT, "%s\n", msg);
     ++		advise_if_enabled(ADVICE_MERGE_CONFLICT, "%s", msg);
       		/*
       		 * A conflict has occurred but the porcelain
       		 * (typically rebase --interactive) wants to take care
 2:  3235542cc6f ! 2:  73d07c8b6a7 builtin/am: allow disabling conflict advice
     @@ Commit message
          on stderr instead of stdout. In t4150, redirect stdout to 'out' and
          stderr to 'err', since this is less confusing. In t4254, as we are
          testing a specific failure mode of 'git am', simply disable the advice.
     +    Note that we are not testing that this advice is shown in 'git rebase'
     +    for the apply backend since 2ac0d6273f (rebase: change the default
     +    backend from "am" to "merge", 2020-02-15).
      
     +    Helped-by: Phillip Wood <phillip.wood@dunelm.org.uk>
     +    Helped-by: Junio C Hamano <gitster@pobox.com>
          Signed-off-by: Philippe Blain <levraiphilippeblain@gmail.com>
      
       ## builtin/am.c ##
     @@ builtin/am.c: static const char *msgnum(const struct am_state *state)
       
      -		printf_ln(_("When you have resolved this problem, run \"%s --continue\"."), cmdline);
      -		printf_ln(_("If you prefer to skip this patch, run \"%s --skip\" instead."), cmdline);
     -+		strbuf_addf(&sb, _("When you have resolved this problem, run \"%s --continue\"."), cmdline);
     -+		strbuf_addf(&sb, _("If you prefer to skip this patch, run \"%s --skip\" instead."), cmdline);
     ++		strbuf_addf(&sb, _("When you have resolved this problem, run \"%s --continue\".\n"), cmdline);
     ++		strbuf_addf(&sb, _("If you prefer to skip this patch, run \"%s --skip\" instead.\n"), cmdline);
       
       		if (advice_enabled(ADVICE_AM_WORK_DIR) &&
       		    is_empty_or_missing_file(am_path(state, "patch")) &&
       		    !repo_index_has_changes(the_repository, NULL, NULL))
      -			printf_ln(_("To record the empty patch as an empty commit, run \"%s --allow-empty\"."), cmdline);
     -+			strbuf_addf(&sb, _("To record the empty patch as an empty commit, run \"%s --allow-empty\"."), cmdline);
     ++			strbuf_addf(&sb, _("To record the empty patch as an empty commit, run \"%s --allow-empty\".\n"), cmdline);
       
      -		printf_ln(_("To restore the original branch and stop patching, run \"%s --abort\"."), cmdline);
      +		strbuf_addf(&sb, _("To restore the original branch and stop patching, run \"%s --abort\"."), cmdline);

-- 
gitgitgadget


^ permalink raw reply related	[relevance 3%]

* [ANNOUNCE] Git v2.44.0
@ 2024-02-23 17:17  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2024-02-23 17:17 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

The latest feature release Git v2.44.0 is now available at the
usual places.  It is comprised of 503 non-merge commits since
v2.43.0, contributed by 85 people, 34 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.44.0'
tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.43.0 are as follows.
Welcome to the Git development community!

  Achu Luma, Antonin Delpeuch, Benjamin Lehmann, Britton Leo Kerin,
  Carlos Andrés Ramírez Cataño, Chandra Pratap, Ghanshyam
  Thakkar, Illia Bobyr, James Touton, Janik Haag, Joanna Wang,
  Josh Brobst, Julian Prein, Justin Tobler, Kyle Lippincott,
  lumynou5, Maarten van der Schrieck, Marcel Krause, Marcelo
  Roberto Jimenez, Michael Lohmann, moti sd, Nikolay Borisov,
  Nikolay Edigaryev, Ondrej Pohorelsky, Sam Delmerico, Sergey
  Kosukhin, Shreyansh Paliwal, Sören Krecker, Stan Hu, Tamino
  Bauknecht, Wilfred Hughes, Willem Verstraeten, Xiaoguang WANG,
  and Zach FettersMoore.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alexander Shopov, Andy Koppe, Arkadii Yakovets, Arthur Chan,
  Bagas Sanjaya, Calvin Wan, Carlo Marcelo Arenas Belón, Christian
  Couder, Dragan Simic, Elijah Newren, Emir SARI, Eric Sunshine,
  Glen Choo, Han-Wen Nienhuys, Jean-Noël Avila, Jeff Hostetler,
  Jeff King, Jiang Xin, Johannes Schindelin, John Cai, Jonathan
  Tan, Jordi Mas, Josh Soref, Josh Steadmon, Josip Sokcevic, Junio
  C Hamano, Kate Golovanova, Konstantin Ryabitsev, Kristoffer
  Haugsbakk, Linus Arver, Matthias Aßhauer, M Hickford, Orgad
  Shaneh, Oswald Buddenhagen, Patrick Steinhardt, Peter Krefting,
  Philippe Blain, Phillip Wood, Ralf Thielow, Randall S. Becker,
  René Scharfe, Rubén Justo, Simon Ser, SZEDER Gábor, Taylor
  Blau, Teng Long, Todd Zullinger, Toon Claes, Vegard Nossum,
  Victoria Dye, and Yi-Jyun Pan.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.44 Release Notes
=======================

Backward Compatibility Notes

 * "git checkout -B <branch>" used to allow switching to a branch that
   is in use on another worktree, but this was by mistake.  The users
   need to use "--ignore-other-worktrees" option.


UI, Workflows & Features

 * "git add" and "git stash" learned to support the ":(attr:...)"
   magic pathspec.

 * "git rebase --autosquash" is now enabled for non-interactive rebase,
   but it is still incompatible with the apply backend.

 * Introduce "git replay", a tool meant on the server side without
   working tree to recreate a history.

 * "git merge-file" learned to take the "--diff-algorithm" option to
   use algorithm different from the default "myers" diff.

 * Command line completion (in contrib/) learned to complete path
   arguments to the "add/set" subcommands of "git sparse-checkout"
   better.

 * "git checkout -B <branch> [<start-point>]" allowed a branch that is
   in use in another worktree to be updated and checked out, which
   might be a bit unexpected.  The rule has been tightened, which is a
   breaking change.  "--ignore-other-worktrees" option is required to
   unbreak you, if you are used to the current behaviour that "-B"
   overrides the safety.

 * The builtin_objectmode attribute is populated for each path
   without adding anything in .gitattributes files, which would be
   useful in magic pathspec, e.g., ":(attr:builtin_objectmode=100755)"
   to limit to executables.

 * "git fetch" learned to pay attention to "fetch.all" configuration
   variable, which pretends as if "--all" was passed from the command
   line when no remote parameter was given.

 * In addition to (rather cryptic) Security Identifiers, show username
   and domain in the error message when we barf on mismatch between
   the Git directory and the current user on Windows.

 * The error message given when "git branch -d branch" fails due to
   commits unique to the branch has been split into an error and a new
   conditional advice message.

 * When given an existing but unreadable file as a configuration file,
   gitweb behaved as if the file did not exist at all, but now it
   errors out.  This is a change that may break backward compatibility.

 * When $HOME/.gitconfig is missing but XDG config file is available, we
   should write into the latter, not former.  "git gc" and "git
   maintenance" wrote into a wrong "global config" file, which have
   been corrected.

 * Define "special ref" as a very narrow set that consists of
   FETCH_HEAD and MERGE_HEAD, and clarify everything else that used to
   be classified as such are actually just pseudorefs.

 * All conditional "advice" messages show how to turn them off, which
   becomes repetitive.  Setting advice.* configuration explicitly on
   now omits the instruction part.

 * The "disable repository discovery of a bare repository" check,
   triggered by setting safe.bareRepository configuration variable to
   'explicit', has been loosened to exclude the ".git/" directory inside
   a non-bare repository from the check.  So you can do "cd .git &&
   git cmd" to run a Git command that works on a bare repository without
   explicitly specifying $GIT_DIR now.

 * The completion script (in contrib/) learned more options that can
   be used with "git log".

 * The labels on conflict markers for the common ancestor, our version,
   and the other version are available to custom 3-way merge driver
   via %S, %X, and %Y placeholders.

 * The write codepath for the reftable data learned to honor
   core.fsync configuration.

 * The "--fsck-objects" option of "git index-pack" now can take the
   optional parameter to tweak severity of different fsck errors.

 * The wincred credential backend has been taught to support oauth
   refresh token the same way as credential-cache and
   credential-libsecret backends.

 * Command line completion support (in contrib/) has been
   updated for "git bisect".

 * "git branch" and friends learned to use the formatted text as
   sorting key, not the underlying timestamp value, when the --sort
   option is used with author or committer timestamp with a format
   specifier (e.g., "--sort=creatordate:format:%H:%M:%S").

 * The command line completion script (in contrib/) learned to
   complete configuration variable names better.


Performance, Internal Implementation, Development Support etc.

 * Process to add some form of low-level unit tests has started.

 * Add support for GitLab CI.

 * "git for-each-ref --no-sort" still sorted the refs alphabetically
   which paid non-trivial cost.  It has been redefined to show output
   in an unspecified order, to allow certain optimizations to take
   advantage of.

 * Simplify API implementation to delete references by eliminating
   duplication.

 * Subject approxidate() and show_date() machinery to OSS-Fuzz.

 * A new helper to let us pretend that we called lstat() when we know
   our cache_entry is up-to-date via fsmonitor.

 * The optimization based on fsmonitor in the "diff --cached"
   codepath is resurrected with the "fake-lstat" introduced earlier.

 * Test balloon to use C99 "bool" type from <stdbool.h> has been
   added.

 * "git clone" has been prepared to allow cloning a repository with
   non-default hash function into a repository that uses the reftable
   backend.

 * Streaming spans of packfile data used to be done only from a
   single, primary, pack in a repository with multiple packfiles.  It
   has been extended to allow reuse from other packfiles, too.

 * Comment updates to help developers not to attempt to modify
   messages from plumbing commands that must stay constant.

   It might make sense to reassess the plumbing needs every few years,
   but that should be done as a separate effort.

 * Move test-ctype helper to the unit-test framework.

 * Instead of manually creating refs/ hierarchy on disk upon a
   creation of a secondary worktree, which is only usable via the
   files backend, use the refs API to populate it.

 * CI for GitLab learned to drive macOS jobs.

 * A few tests to "git commit -o <pathspec>" and "git commit -i
   <pathspec>" has been added.

 * Tests on ref API are moved around to prepare for reftable.

 * The Makefile often had to say "-L$(path) -R$(path)" that repeats
   the path to the same library directory for link time and runtime.
   A Makefile template is used to reduce such repetition.

 * The priority queue test has been migrated to the unit testing
   framework.

 * Setting `feature.experimental` opts the user into multi-pack reuse
   experiment

 * Squelch node.js 16 deprecation warnings from GitHub Actions CI
   by updating actions/github-script and actions/checkout that use
   node.js 20.

 * The mechanism to report the filename in the source code, used by
   the unit-test machinery, assumed that the compiler expanded __FILE__
   to the path to the source given to the $(CC), but some compilers
   give full path, breaking the output.  This has been corrected.


Fixes since v2.43
-----------------

 * The way CI testing used "prove" could lead to running the test
   suite twice needlessly, which has been corrected.

 * Update ref-related tests.

 * "git format-patch --encode-email-headers" ignored the option when
   preparing the cover letter, which has been corrected.

 * Newer versions of Getopt::Long started giving warnings against our
   (ab)use of it in "git send-email".  Bump the minimum version
   requirement for Perl to 5.8.1 (from September 2002) to allow
   simplifying our implementation.

 * Earlier we stopped relying on commit-graph that (still) records
   information about commits that are lost from the object store,
   which has negative performance implications.  The default has been
   flipped to disable this pessimization.

 * Stale URLs have been updated to their current counterparts (or
   archive.org) and HTTP links are replaced with working HTTPS links.

 * trace2 streams used to record the URLs that potentially embed
   authentication material, which has been corrected.

 * The sample pre-commit hook that tries to catch introduction of new
   paths that use potentially non-portable characters did not notice
   an existing path getting renamed to such a problematic path, when
   rename detection was enabled.

 * The command line parser for the "log" family of commands was too
   loose when parsing certain numbers, e.g., silently ignoring the
   extra 'q' in "git log -n 1q" without complaining, which has been
   tightened up.

 * "git $cmd --end-of-options --rev -- --path" for some $cmd failed
   to interpret "--rev" as a rev, and "--path" as a path.  This was
   fixed for many programs like "reset" and "checkout".

 * "git bisect reset" has been taught to clean up state files and refs
   even when BISECT_START file is gone.

 * Some codepaths did not correctly parse configuration variables
   specified with valueless "true", which has been corrected.

 * Code clean-up for sanity checking of command line options for "git
   show-ref".

 * The code to parse the From e-mail header has been updated to avoid
   recursion.

 * "git fetch --atomic" issued an unnecessary empty error message,
   which has been corrected.

 * Command line completion script (in contrib/) learned to work better
   with the reftable backend.

 * "git status" is taught to show both the branch being bisected and
   being rebased when both are in effect at the same time.

 * "git archive --list extra garbage" silently ignored excess command
   line parameters, which has been corrected.

 * "git sparse-checkout set" added default patterns even when the
   patterns are being fed from the standard input, which has been
   corrected.

 * "git sparse-checkout (add|set) --[no-]cone --end-of-options" did
   not handle "--end-of-options" correctly after a recent update.

 * Unlike other environment variables that took the usual
   true/false/yes/no as well as 0/1, GIT_FLUSH only understood 0/1,
   which has been corrected.

 * Clearing in-core repository (happens during e.g., "git fetch
   --recurse-submodules" with commit graph enabled) made in-core
   commit object in an inconsistent state by discarding the necessary
   data from commit-graph too early, which has been corrected.

 * Update to a new feature recently added, "git show-ref --exists".

 * oss-fuzz tests are built and run in CI.
   (merge c4a9cf1df3 js/oss-fuzz-build-in-ci later to maint).

 * Rename detection logic ignored the final line of a file if it is an
   incomplete line.

 * GitHub CI update.
   (merge 0188b2c8e0 pb/ci-github-skip-logs-for-broken-tests later to maint).

 * "git diff --no-rename A B" did not disable rename detection but did
   not trigger an error from the command line parser.

 * "git archive --remote=<remote>" learned to talk over the smart
   http (aka stateless) transport.
   (merge 176cd68634 jx/remote-archive-over-smart-http later to maint).

 * Fetching via protocol v0 over Smart HTTP transport sometimes failed
   to correctly auto-follow tags.
   (merge fba732c462 jk/fetch-auto-tag-following-fix later to maint).

 * The documentation for the --exclude-per-directory option marked it
   as deprecated, which confused readers into thinking there may be a
   plan to remove it in the future, which was not our intention.
   (merge 0009542cab jc/ls-files-doc-update later to maint).

 * "git diff --no-index file1 file2" segfaulted while invoking the
   external diff driver, which has been corrected.

 * Rewrite //-comments to /* comments */ in files whose comments
   prevalently use the latter.

 * Cirrus CI jobs started breaking because we specified version of
   FreeBSD that is no longer available, which has been corrected.
   (merge 81fffb66d3 cb/use-freebsd-13-2-at-cirrus-ci later to maint).

 * A caller called index_file_exists() that takes a string expressed
   as <ptr, length> with a wrong length, which has been corrected.
   (merge 156e28b36d jh/sparse-index-expand-to-path-fix later to maint).

 * A failed "git tag -s" did not necessarily result in an error
   depending on the crypto backend, which has been corrected.

 * "git stash" sometimes was silent even when it failed due to
   unwritable index file, which has been corrected.

 * "git show-ref --verify" did not show things like "CHERRY_PICK_HEAD",
   which has been corrected.

 * Recent conversion to allow more than 0/1 in GIT_FLUSH broke the
   mechanism by flipping what yes/no means by mistake, which has been
   corrected.

 * The sequencer machinery does not use the ref API and instead
   records names of certain objects it needs for its correct operation
   in temporary files, which makes these objects susceptible to loss
   by garbage collection.  These temporary files have been added as
   starting points for reachability analysis to fix this.
   (merge bc7f5db896 pw/gc-during-rebase later to maint).

 * "git cherry-pick" invoked during "git rebase -i" session lost
   the authorship information, which has been corrected.
   (merge e4301f73ff vn/rebase-with-cherry-pick-authorship later to maint).

 * The code paths that call repo_read_object_file() have been
   tightened to react to errors.
   (merge 568459bf5e js/check-null-from-read-object-file later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 5aea3955bc rj/clarify-branch-doc-m later to maint).
   (merge 9cce3be2df bk/bisect-doc-fix later to maint).
   (merge 8430b438f6 vd/fsck-submodule-url-test later to maint).
   (merge 3cb4384683 jc/t0091-with-unknown-git later to maint).
   (merge 020456cb74 rs/receive-pack-remove-find-header later to maint).
   (merge bc47139f4f la/trailer-cleanups later to maint).

----------------------------------------------------------------

Changes since v2.43.0 are as follows:

Achu Luma (2):
      unit-tests: rewrite t/helper/test-ctype.c as a unit test
      t2400: avoid losing exit status to pipes

Alexander Shopov (1):
      l10n: bg.po: Updated Bulgarian translation (5610t)

Andy Koppe (3):
      rebase: fully ignore rebase.autoSquash without -i
      rebase: support --autosquash without -i
      rebase: rewrite --(no-)autosquash documentation

Antonin Delpeuch (2):
      merge-file: add --diff-algorithm option
      merge-ll: expose revision names to custom drivers

Arkadii Yakovets (3):
      l10n: uk: v2.44 localization update
      l10n: uk: v2.44 update (round 2)
      l10n: uk: v2.44 update (round 3)

Arthur Chan (1):
      fuzz: add new oss-fuzz fuzzer for date.c / date.h

Bagas Sanjaya (1):
      l10n: po-id for 2.44 (round 1)

Britton Leo Kerin (9):
      doc: use singular form of repeatable path arg
      doc: refer to pathspec instead of path
      completion: tests: always use 'master' for default initial branch name
      completion: bisect: complete bad, new, old, and help subcommands
      completion: bisect: complete custom terms and related options
      completion: bisect: complete missing --first-parent and - -no-checkout options
      completion: new function __git_complete_log_opts
      completion: bisect: complete log opts for visualize subcommand
      completion: bisect: recognize but do not complete view subcommand

Carlo Marcelo Arenas Belón (1):
      ci: update FreeBSD cirrus job

Chandra Pratap (4):
      sideband.c: remove redundant 'NEEDSWORK' tag
      write-or-die: make GIT_FLUSH a Boolean environment variable
      t4129: prevent loss of exit code due to the use of pipes
      tests: move t0009-prio-queue.sh to the new unit testing framework

Elijah Newren (32):
      t6429: remove switching aspects of fast-rebase
      replay: introduce new builtin
      replay: start using parse_options API
      replay: die() instead of failing assert()
      replay: introduce pick_regular_commit()
      replay: change rev walking options
      replay: add an important FIXME comment about gpg signing
      replay: remove progress and info output
      replay: remove HEAD related sanity check
      replay: make it a minimal server side command
      replay: use standard revision ranges
      replay: add --advance or 'cherry-pick' mode
      replay: add --contained to rebase contained branches
      replay: stop assuming replayed branches do not diverge
      completion: squelch stray errors in sparse-checkout completion
      completion: fix logic for determining whether cone mode is active
      completion: avoid misleading completions in cone mode
      completion: avoid user confusion in non-cone mode
      treewide: remove unnecessary includes from header files
      treewide: remove unnecessary includes in source files
      archive.h: remove unnecessary include
      blame.h: remove unnecessary includes
      fsmonitor--daemon.h: remove unnecessary includes
      http.h: remove unnecessary include
      line-log.h: remove unnecessary include
      pkt-line.h: remove unnecessary include
      submodule-config.h: remove unnecessary include
      trace2/tr2_tls.h: remove unnecessary include
      treewide: add direct includes currently only pulled in transitively
      treewide: remove unnecessary includes in source files
      sparse-checkout: be consistent with end of options markers
      diffcore-delta: avoid ignoring final 'line' of file

Emir SARI (1):
      l10n: tr: Update Turkish translations for 2.44

Eric Sunshine (1):
      git-add.txt: add missing short option -A to synopsis

Ghanshyam Thakkar (4):
      t7501: add tests for --include and --only
      t7501: add tests for --amend --signoff
      t0024: avoid losing exit status to pipes
      t0024: style fix

Illia Bobyr (1):
      rebase: clarify --reschedule-failed-exec default

James Touton (1):
      git-p4: use raw string literals for regular expressions

Jean-Noël Avila (3):
      doc: enforce dashes in placeholders
      doc: enforce placeholders in documentation
      l10n: fr.po: v2.44.0 round 3

Jeff Hostetler (4):
      trace2: fix signature of trace2_def_param() macro
      t0211: test URL redacting in PERF format
      t0212: test URL redacting in EVENT format
      sparse-index: pass string length to index_file_exists()

Jeff King (39):
      commit-graph: handle overflow in chunk_size checks
      midx: check consistency of fanout table
      commit-graph: drop redundant call to "lite" verification
      commit-graph: clarify missing-chunk error messages
      commit-graph: abort as soon as we see a bogus chunk
      commit-graph: use fanout value for graph size
      commit-graph: check order while reading fanout chunk
      commit-graph: drop verify_commit_graph_lite()
      commit-graph: mark chunk error messages for translation
      parse-options: decouple "--end-of-options" and "--"
      bisect: always clean on reset
      config: handle NULL value when parsing non-bools
      setup: handle NULL value when parsing extensions
      trace2: handle NULL values in tr2_sysenv config callback
      help: handle NULL value for alias.* config
      submodule: handle NULL value when parsing submodule.*.branch
      trailer: handle NULL value when parsing trailer-specific config
      fsck: handle NULL value when parsing message config
      config: reject bogus values for core.checkstat
      git_xmerge_config(): prefer error() to die()
      imap-send: don't use git_die_config() inside callback
      config: use config_error_nonbool() instead of custom messages
      diff: give more detailed messages for bogus diff.* config
      config: use git_config_string() for core.checkRoundTripEncoding
      push: drop confusing configset/callback redundancy
      gpg-interface: drop pointless config_error_nonbool() checks
      sequencer: simplify away extra git_config_string() call
      mailinfo: fix out-of-bounds memory reads in unquote_quoted_pair()
      t5100: make rfc822 comment test more careful
      mailinfo: avoid recursion when unquoting From headers
      t1006: add tests for %(objectsize:disk)
      commit-graph: retain commit slab when closing NULL commit_graph
      index-pack: spawn threads atomically
      transport-helper: re-examine object dir after fetching
      diff: handle NULL meta-info when spawning external diff
      Makefile: use mkdir_p_parent_template for UNIT_TEST_BIN
      Makefile: remove UNIT_TEST_BIN directory with "make clean"
      t/Makefile: get UNIT_TESTS list from C sources
      trailer: fix comment/cut-line regression with opts->no_divider

Jiang Xin (14):
      t5574: test porcelain output of atomic fetch
      fetch: no redundant error message for atomic fetch
      test-pkt-line: add option parser for unpack-sideband
      pkt-line: memorize sideband fragment in reader
      pkt-line: do not chomp newlines for sideband messages
      transport-helper: no connection restriction in connect_helper
      remote-curl: supports git-upload-archive service
      transport-helper: protocol v2 supports upload-archive
      http-backend: new rpc-service for git-upload-archive
      transport-helper: call do_take_over() in connect_helper
      transport-helper: call do_take_over() in process_connect
      diff: mark param1 and param2 as placeholders
      l10n: ci: remove unused param for add-pr-comment@v2
      l10n: ci: disable cache for setup-go to suppress warnings

Joanna Wang (2):
      attr: enable attr pathspec magic for git-add and git-stash
      attr: add builtin objectmode values support

Johannes Schindelin (15):
      artifacts-tar: when including `.dll` files, don't forget the unit-tests
      cmake: fix typo in variable name
      cmake: also build unit tests
      cmake: use test names instead of full paths
      unit-tests: do not mistake `.pdb` files for being executable
      cmake: handle also unit tests
      unit-tests: do show relative file paths
      ci: avoid running the test suite _twice_
      packfile.c: fix a typo in `each_file_in_pack_dir_fn()`'s declaration
      trace2: redact passwords from https:// URLs by default
      win32: special-case `ENOSPC` when writing to a pipe
      Always check the return value of `repo_read_object_file()`
      l10n: bump Actions versions in l10n.yml
      ci: bump remaining outdated Actions versions
      ci(linux32): add a note about Actions that must not be updated

John Cai (15):
      t3210: move to t0601
      remove REFFILES prerequisite for some tests in t1405 and t2017
      t1414: convert test to use Git commands instead of writing refs manually
      t1404: move reffiles specific tests to t0600
      t1405: move reffiles specific tests to t0601
      t1406: move reffiles specific tests to t0600
      t1410: move reffiles specific tests to t0600
      t1415: move reffiles specific tests to t0601
      t1503: move reffiles specific tests to t0600
      t3903: make drop stash test ref backend agnostic
      t4202: move reffiles specific tests to t0600
      t5312: move reffiles specific tests to t0601
      reftable: honor core.fsync
      index-pack: test and document --strict=<msg-id>=<severity>...
      index-pack: --fsck-objects to take an optional argument for fsck msgs

Jordi Mas (1):
      l10n: Update Catalan translation

Josh Brobst (1):
      builtin/reflog.c: fix dry-run option short name

Josh Soref (13):
      doc: update links to current pages
      doc: switch links to https
      doc: update links for andre-simon.de
      doc: refer to internet archive
      CodingGuidelines: move period inside parentheses
      CodingGuidelines: write punctuation marks
      SubmittingPatches: drop ref to "What's in git.git"
      SubmittingPatches: discourage new trailers
      SubmittingPatches: update extra tags list
      SubmittingPatches: provide tag naming advice
      SubmittingPatches: clarify GitHub visual
      SubmittingPatches: clarify GitHub artifact format
      SubmittingPatches: hyphenate non-ASCII

Josh Steadmon (4):
      unit tests: add a project plan document
      ci: run unit tests in CI
      fuzz: fix fuzz test build rules
      ci: build and run minimal fuzzers in GitHub CI

Julian Prein (1):
      hooks--pre-commit: detect non-ASCII when renaming

Junio C Hamano (58):
      cache: add fake_lstat()
      diff-lib: fix check_removed() when fsmonitor is active
      checkout: refactor die_if_checked_out() caller
      orphan/unborn: add to the glossary and use them consistently
      orphan/unborn: fix use of 'orphan' in end-user facing messages
      revision: parse integer arguments to --max-count, --skip, etc., more carefully
      Start the 2.44 cycle
      checkout: forbid "-B <branch>" from touching a branch used elsewhere
      git.txt: HEAD is not that special
      git-bisect.txt: BISECT_HEAD is not that special
      refs.h: HEAD is not that special
      docs: AUTO_MERGE is not that special
      docs: MERGE_AUTOSTASH is not that special
      doc: format.notes specify a ref under refs/notes/ hierarchy
      The second batch
      remote.h: retire CAS_OPT_NAME
      The third batch
      archive: "--list" does not take further options
      sparse-checkout: use default patterns for 'set' only !stdin
      The fourth batch
      The fifth batch
      The sixth batch
      messages: mark some strings with "up-to-date" not to touch
      The seventh batch
      The eighth batch
      The ninth batch
      Docs: majordomo@vger.kernel.org has been decomissioned
      CoC: whitespace fix
      ls-files: avoid the verb "deprecate" for individual options
      The tenth batch
      builtin/worktree: comment style fixes
      merge-ort.c: comment style fix
      reftable/pq_test: comment style fix
      The eleventh batch
      t0091: allow test in a repository without tags
      The twelfth batch
      Makefile: reduce repetitive library paths
      Makefile: simplify output of the libpath_template
      The thirteenth batch
      GitHub Actions: update to checkout@v4
      GitHub Actions: update to github-script@v7
      t/Makefile: say the default target upfront
      The fourteenth batch
      tag: fix sign_buffer() call to create a signed tag
      bisect: document "terms" subcommand more fully
      bisect: document command line arguments for "bisect start"
      ssh signing: signal an error with a negative return value
      The fifteenth batch
      Git 2.43.1
      Git 2.44-rc0
      unit-tests: do show relative file paths on non-Windows, too
      A few more topics before -rc1
      write-or-die: fix the polarity of GIT_FLUSH environment variable
      A few more fixes before -rc1
      Git 2.43.2
      Hopefully the last batch of fixes before 2.44 final
      Git 2.44-rc2
      Git 2.43.3

Justin Tobler (2):
      t1401: remove lockfile creation
      t5541: remove lockfile creation

Kristoffer Haugsbakk (5):
      config: format newlines
      config: rename global config function
      config: factor out global config file retrieval
      maintenance: use XDG config if it exists
      config: add back code comment

Kyle Lippincott (1):
      setup: allow cwd=.git w/ bareRepository=explicit

Linus Arver (4):
      commit: ignore_non_trailer computes number of bytes to ignore
      trailer: find the end of the log message
      trailer: use offsets for trailer_start/trailer_end
      strvec: use correct member name in comments

M Hickford (1):
      credential/wincred: store oauth_refresh_token

Maarten van der Schrieck (1):
      Documentation: fix statement about rebase.instructionFormat

Marcel Krause (1):
      doc: make the gitfile syntax easier to discover

Marcelo Roberto Jimenez (1):
      gitweb: die when a configuration file cannot be read

Michael Lohmann (2):
      Documentation/git-merge.txt: fix reference to synopsis
      Documentation/git-merge.txt: use backticks for command wrapping

Nikolay Borisov (1):
      rebase: fix documentation about used shell in -x

Nikolay Edigaryev (1):
      rev-list-options: fix off-by-one in '--filter=blob:limit=<n>' explainer

Patrick Steinhardt (139):
      t: allow skipping expected object ID in `ref-store update-ref`
      t: convert tests to not write references via the filesystem
      t: convert tests to not access symrefs via the filesystem
      t: convert tests to not access reflog via the filesystem
      t1450: convert tests to remove worktrees via git-worktree(1)
      t4207: delete replace references via git-update-ref(1)
      t7300: assert exact states of repo
      t7900: assert the absence of refs via git-for-each-ref(1)
      t: mark several tests that assume the files backend with REFFILES
      ci: reorder definitions for grouping functions
      ci: make grouping setup more generic
      ci: group installation of Docker dependencies
      ci: split out logic to set up failed test artifacts
      ci: unify setup of some environment variables
      ci: squelch warnings when testing with unusable Git repo
      ci: install test dependencies for linux-musl
      ci: add support for GitLab CI
      t/lib-httpd: dynamically detect httpd and modules path
      t/lib-httpd: stop using legacy crypt(3) for authentication
      t9164: fix inability to find basename(1) in Subversion hooks
      global: convert trivial usages of `test <expr> -a/-o <expr>`
      contrib/subtree: stop using `-o` to test for number of args
      contrib/subtree: convert subtree type check to use case statement
      Makefile: stop using `test -o` when unlinking duplicate executables
      t5510: ensure that the packed-refs file needs locking
      refs/files: use transactions to delete references
      refs: deduplicate code to delete references
      refs: remove `delete_refs` callback from backends
      commit-graph: disable GIT_COMMIT_GRAPH_PARANOIA by default
      t0410: mark tests to require the reffiles backend
      t1400: split up generic reflog tests from the reffile-specific ones
      t1401: stop treating FETCH_HEAD as real reference
      t1410: use test-tool to create empty reflog
      t1417: make `reflog --updateref` tests backend agnostic
      t3310: stop checking for reference existence via `test -f`
      t4013: simplify magic parsing and drop "failure"
      t5401: speed up creation of many branches
      t5551: stop writing packed-refs directly
      t6301: write invalid object ID via `test-tool ref-store`
      reftable: wrap EXPECT macros in do/while
      reftable: handle interrupted reads
      reftable: handle interrupted writes
      reftable/stack: verify that `reftable_stack_add()` uses auto-compaction
      reftable/stack: perform auto-compaction with transactional interface
      reftable/stack: reuse buffers when reloading stack
      reftable/stack: fix stale lock when dying
      reftable/stack: fix use of unseeded randomness
      reftable/merged: reuse buffer to compute record keys
      reftable/block: introduce macro to initialize `struct block_iter`
      reftable/block: reuse buffer to compute record keys
      setup: extract function to create the refdb
      setup: allow skipping creation of the refdb
      remote-curl: rediscover repository when fetching refs
      builtin/clone: fix bundle URIs with mismatching object formats
      builtin/clone: set up sparse checkout later
      builtin/clone: skip reading HEAD when retrieving remote
      builtin/clone: create the refdb with the correct object format
      wt-status: read HEAD and ORIG_HEAD via the refdb
      refs: propagate errno when reading special refs fails
      refs: complete list of special refs
      bisect: consistently write BISECT_EXPECTED_REV via the refdb
      tests: adjust whitespace in chainlint expectations
      t: introduce DEFAULT_REPO_FORMAT prereq
      worktree: skip reading HEAD when repairing worktrees
      refs: refactor logic to look up storage backends
      setup: start tracking ref storage format
      setup: set repository's formats on init
      setup: introduce "extensions.refStorage" extension
      setup: introduce GIT_DEFAULT_REF_FORMAT envvar
      t: introduce GIT_TEST_DEFAULT_REF_FORMAT envvar
      builtin/rev-parse: introduce `--show-ref-format` flag
      builtin/init: introduce `--ref-format=` value flag
      builtin/clone: introduce `--ref-format=` value flag
      t9500: write "extensions.refstorage" into config
      reftable/stack: do not overwrite errors when compacting
      reftable/stack: do not auto-compact twice in `reftable_stack_add()`
      reftable/writer: fix index corruption when writing multiple indices
      reftable/record: constify some parts of the interface
      reftable/record: store "val1" hashes as static arrays
      reftable/record: store "val2" hashes as static arrays
      reftable/merged: really reuse buffers to compute record keys
      reftable/merged: transfer ownership of records when iterating
      git-prompt: stop manually parsing HEAD with unknown ref formats
      ci: add job performing static analysis on GitLab CI
      refs: prepare `refs_init_db()` for initializing worktree refs
      setup: move creation of "refs/" into the files backend
      refs/files: skip creation of "refs/{heads,tags}" for worktrees
      builtin/worktree: move setup of commondir file earlier
      worktree: expose interface to look up worktree by name
      builtin/worktree: create refdb via ref backend
      reftable/stack: refactor stack reloading to have common exit path
      reftable/stack: refactor reloading to use file descriptor
      reftable/stack: use stat info to avoid re-reading stack list
      reftable/blocksource: refactor code to match our coding style
      reftable/blocksource: use mmap to read tables
      git-p4: stop reaching into the refdb
      commit-graph: fix memory leak when not writing graph
      completion: discover repo path in `__git_pseudoref_exists ()`
      t9902: verify that completion does not print anything
      completion: improve existence check for pseudo-refs
      completion: silence pseudoref existence check
      completion: treat dangling symrefs as existing pseudorefs
      t7527: decrease likelihood of racing with fsmonitor daemon
      Makefile: detect new Homebrew location for ARM-based Macs
      ci: handle TEST_OUTPUT_DIRECTORY when printing test failures
      ci: make p4 setup on macOS more robust
      ci: add macOS jobs to GitLab CI
      reftable/stack: unconditionally reload stack after commit
      reftable/stack: fix race in up-to-date check
      sequencer: clean up pseudo refs with REF_NO_DEREF
      sequencer: delete REBASE_HEAD in correct repo when picking commits
      refs: convert AUTO_MERGE to become a normal pseudo-ref
      sequencer: introduce functions to handle autostashes via refs
      refs: convert MERGE_AUTOSTASH to become a normal pseudo-ref
      refs: redefine special refs
      Documentation: add "special refs" to the glossary
      reftable/stack: adjust permissions of compacted tables
      t1300: make tests more robust with non-default ref backends
      t1301: mark test for `core.sharedRepository` as reffiles specific
      t1302: make tests more robust with new extensions
      t1419: mark test suite as files-backend specific
      t5526: break test submodule differently
      t: mark tests regarding git-pack-refs(1) to be backend specific
      reftable/stack: fsync "tables.list" during compaction
      reftable/reader: be more careful about errors in indexed seeks
      reftable/writer: use correct type to iterate through index entries
      reftable/writer: simplify writing index records
      reftable/writer: fix writing multi-level indices
      reftable: document reading and writing indices
      builtin/stash: report failure to write to index
      reftable: introduce macros to grow arrays
      reftable: introduce macros to allocate arrays
      reftable/stack: fix parameter validation when compacting range
      reftable/stack: index segments with `size_t`
      reftable/stack: use `size_t` to track stack slices during compaction
      reftable/stack: use `size_t` to track stack length
      reftable/merged: refactor seeking of records
      reftable/merged: refactor initialization of iterators
      reftable/record: improve semantics when initializing records

Peter Krefting (1):
      l10n: sv.po: Update Swedish translation

Philippe Blain (11):
      completion: complete missing rev-list options
      completion: complete --patch-with-raw
      completion: complete --encoding
      completion: complete missing 'git log' options
      ci(github): also skip logs of broken test cases
      imap-send: add missing "strbuf.h" include under NO_CURL
      .github/PULL_REQUEST_TEMPLATE.md: add a note about single-commit PRs
      completion: add space after config variable names also in Bash 3
      completion: complete 'submodule.*' config variables
      completion: add and use __git_compute_first_level_config_vars_for_section
      completion: add and use __git_compute_second_level_config_vars_for_section

Phillip Wood (4):
      unit tests: add TAP unit test framework
      show-ref --verify: accept pseudorefs
      t1400: use show-ref to check pseudorefs
      prune: mark rebase autostash and orig-head as reachable

Ralf Thielow (1):
      l10n: Update German translation

René Scharfe (21):
      column: release strbuf and string_list after use
      i18n: factorize even more 'incompatible options' messages
      push: use die_for_incompatible_opt4() for - -delete/--tags/--all/--mirror
      repack: use die_for_incompatible_opt3() for -A/-k/--cruft
      revision: use die_for_incompatible_opt3() for - -graph/--reverse/--walk-reflogs
      revision, rev-parse: factorize incompatibility messages about - -exclude-hidden
      clean: factorize incompatibility message
      worktree: standardize incompatibility messages
      worktree: simplify incompatibility message for --orphan and commit-ish
      show-ref: use die_for_incompatible_opt3()
      t6300: avoid hard-coding object sizes
      git-compat-util: convert skip_{prefix,suffix}{,_mem} to bool
      rebase: use strvec_pushf() for format-patch revisions
      fast-import: use mem_pool_calloc()
      mem-pool: fix big allocations
      mem-pool: simplify alignment calculation
      t1006: prefer shell loop to awk for packed object sizes
      parse-options: fully disable option abbreviation with PARSE_OPT_KEEP_UNKNOWN
      parse-options: simplify positivation handling
      receive-pack: use find_commit_header() in check_cert_push_options()
      receive-pack: use find_commit_header() in check_nonce()

Rubén Justo (10):
      status: fix branch shown when not only bisecting
      branch: clarify <oldbranch> term
      advice: sort the advice related lists
      advice: fix an unexpected leading space
      branch: make the advice to force-deleting a conditional one
      advice: allow disabling the automatic hint in advise_if_enabled()
      t5332: mark as leak-free
      t6113: mark as leak-free
      test-lib: check for TEST_PASSES_SANITIZE_LEAK
      t0080: mark as leak-free

Sam Delmerico (1):
      push: region_leave trace for negotiate_using_fetch

Shreyansh Paliwal (1):
      test-lib-functions.sh: fix test_grep fail message wording

Simon Ser (1):
      format-patch: fix ignored encode_email_headers for cover letter

Stan Hu (2):
      completion: refactor existence checks for pseudorefs
      completion: support pseudoref existence checks for reftables

Sören Krecker (1):
      mingw: give more details about unsafe directory's ownership

Tamino Bauknecht (1):
      fetch: add new config option fetch.all

Taylor Blau (29):
      pack-objects: free packing_data in more places
      pack-bitmap-write: deep-clear the `bb_commit` slab
      pack-bitmap: plug leak in find_objects()
      midx: factor out `fill_pack_info()`
      midx: implement `BTMP` chunk
      midx: implement `midx_locate_pack()`
      pack-bitmap: pass `bitmapped_pack` struct to pack-reuse functions
      ewah: implement `bitmap_is_empty()`
      pack-bitmap: simplify `reuse_partial_packfile_from_bitmap()` signature
      pack-bitmap: return multiple packs via `reuse_partial_packfile_from_bitmap()`
      pack-objects: parameterize pack-reuse routines over a single pack
      pack-objects: keep track of `pack_start` for each reuse pack
      pack-objects: pass `bitmapped_pack`'s to pack-reuse functions
      pack-objects: prepare `write_reused_pack()` for multi-pack reuse
      pack-objects: prepare `write_reused_pack_verbatim()` for multi-pack reuse
      pack-objects: include number of packs reused in output
      git-compat-util.h: implement checked size_t to uint32_t conversion
      midx: implement `midx_preferred_pack()`
      pack-revindex: factor out `midx_key_to_pack_pos()` helper
      pack-revindex: implement `midx_pair_to_pack_pos()`
      pack-bitmap: prepare to mark objects from multiple packs for reuse
      pack-objects: add tracing for various packfile metrics
      t/test-lib-functions.sh: implement `test_trace2_data` helper
      pack-objects: allow setting `pack.allowPackReuse` to "single"
      pack-bitmap: enable reuse from all bitmapped packs
      t/perf: add performance tests for multi-pack reuse
      pack-bitmap: drop unused `reuse_objects`
      t5332-multi-pack-reuse.sh: extract pack-objects helper functions
      pack-objects: enable multi-pack reuse via `feature.experimental`

Teng Long (1):
      l10n: zh_CN: for git 2.44 rounds

Todd Zullinger (3):
      perl: bump the required Perl version to 5.8.1 from 5.8.0
      send-email: avoid duplicate specification warnings
      RelNotes: minor typo fixes in 2.44.0 draft

Toon Claes (1):
      builtin/show-ref: treat directory as non-existing in --exists

Vegard Nossum (1):
      sequencer: unset GIT_CHERRY_PICK_HELP for 'exec' commands

Victoria Dye (15):
      ref-filter.c: really don't sort when using --no-sort
      ref-filter.h: add max_count and omit_empty to ref_format
      ref-filter.h: move contains caches into filter
      ref-filter.h: add functions for filter/format & format-only
      ref-filter.c: rename 'ref_filter_handler()' to 'filter_one()'
      ref-filter.c: refactor to create common helper functions
      ref-filter.c: filter & format refs in the same callback
      for-each-ref: clean up documentation of --format
      ref-filter.c: use peeled tag for '*' format fields
      t/perf: add perf tests for for-each-ref
      submodule-config.h: move check_submodule_url
      test-submodule: remove command line handling for check-name
      t7450: test submodule urls
      submodule-config.c: strengthen URL fsck check
      ref-filter.c: sort formatted dates by byte value

Yi-Jyun Pan (1):
      l10n: zh_TW: Git 2.44

Zach FettersMoore (1):
      subtree: fix split processing with multiple subtrees present



^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.44.0-rc2
@ 2024-02-20 17:09  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2024-02-20 17:09 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.44.0-rc2 is now available for testing at
the usual places.  It is comprised of 502 non-merge commits since
v2.43.0, contributed by 85 people, 34 of which are new faces [*].

I was planning to do without -rc2 and directly go to the final
release, but there was a last-minute regression discovered, whose
fix is included in this (hopefully) final release candidate.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.44.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.43.0 are as follows.
Welcome to the Git development community!

  Achu Luma, Antonin Delpeuch, Benjamin Lehmann, Britton Leo Kerin,
  Carlos Andrés Ramírez Cataño, Chandra Pratap, Ghanshyam
  Thakkar, Illia Bobyr, James Touton, Janik Haag, Joanna Wang,
  Josh Brobst, Julian Prein, Justin Tobler, Kyle Lippincott,
  lumynou5, Maarten van der Schrieck, Marcel Krause, Marcelo
  Roberto Jimenez, Michael Lohmann, moti sd, Nikolay Borisov,
  Nikolay Edigaryev, Ondrej Pohorelsky, Sam Delmerico, Sergey
  Kosukhin, Shreyansh Paliwal, Sören Krecker, Stan Hu, Tamino
  Bauknecht, Wilfred Hughes, Willem Verstraeten, Xiaoguang WANG,
  and Zach FettersMoore.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alexander Shopov, Andy Koppe, Arkadii Yakovets, Arthur Chan,
  Bagas Sanjaya, Calvin Wan, Carlo Marcelo Arenas Belón, Christian
  Couder, Dragan Simic, Elijah Newren, Emir SARI, Eric Sunshine,
  Glen Choo, Han-Wen Nienhuys, Jean-Noël Avila, Jeff Hostetler,
  Jeff King, Jiang Xin, Johannes Schindelin, John Cai, Jonathan
  Tan, Jordi Mas, Josh Soref, Josh Steadmon, Josip Sokcevic, Junio
  C Hamano, Kate Golovanova, Konstantin Ryabitsev, Kristoffer
  Haugsbakk, Linus Arver, Matthias Aßhauer, M Hickford, Orgad
  Shaneh, Oswald Buddenhagen, Patrick Steinhardt, Peter Krefting,
  Philippe Blain, Phillip Wood, Ralf Thielow, Randall S. Becker,
  René Scharfe, Rubén Justo, Simon Ser, SZEDER Gábor, Taylor
  Blau, Teng Long, Todd Zullinger, Toon Claes, Vegard Nossum,
  Victoria Dye, and Yi-Jyun Pan.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.44 Release Notes (draft)
===============================

Backward Compatibility Notes

 * "git checkout -B <branch>" used to allow switching to a branch that
   is in use on another worktree, but this was by mistake.  The users
   need to use "--ignore-other-worktrees" option.


UI, Workflows & Features

 * "git add" and "git stash" learned to support the ":(attr:...)"
   magic pathspec.

 * "git rebase --autosquash" is now enabled for non-interactive rebase,
   but it is still incompatible with the apply backend.

 * Introduce "git replay", a tool meant on the server side without
   working tree to recreate a history.

 * "git merge-file" learned to take the "--diff-algorithm" option to
   use algorithm different from the default "myers" diff.

 * Command line completion (in contrib/) learned to complete path
   arguments to the "add/set" subcommands of "git sparse-checkout"
   better.

 * "git checkout -B <branch> [<start-point>]" allowed a branch that is
   in use in another worktree to be updated and checked out, which
   might be a bit unexpected.  The rule has been tightened, which is a
   breaking change.  "--ignore-other-worktrees" option is required to
   unbreak you, if you are used to the current behaviour that "-B"
   overrides the safety.

 * The builtin_objectmode attribute is populated for each path
   without adding anything in .gitattributes files, which would be
   useful in magic pathspec, e.g., ":(attr:builtin_objectmode=100755)"
   to limit to executables.

 * "git fetch" learned to pay attention to "fetch.all" configuration
   variable, which pretends as if "--all" was passed from the command
   line when no remote parameter was given.

 * In addition to (rather cryptic) Security Identifiers, show username
   and domain in the error message when we barf on mismatch between
   the Git directory and the current user on Windows.

 * The error message given when "git branch -d branch" fails due to
   commits unique to the branch has been split into an error and a new
   conditional advice message.

 * When given an existing but unreadable file as a configuration file,
   gitweb behaved as if the file did not exist at all, but now it
   errors out.  This is a change that may break backward compatibility.

 * When $HOME/.gitconfig is missing but XDG config file is available, we
   should write into the latter, not former.  "git gc" and "git
   maintenance" wrote into a wrong "global config" file, which have
   been corrected.

 * Define "special ref" as a very narrow set that consists of
   FETCH_HEAD and MERGE_HEAD, and clarify everything else that used to
   be classified as such are actually just pseudorefs.

 * All conditional "advice" messages show how to turn them off, which
   becomes repetitive.  Setting advice.* configuration explicitly on
   now omits the instruction part.

 * The "disable repository discovery of a bare repository" check,
   triggered by setting safe.bareRepository configuration variable to
   'explicit', has been loosened to exclude the ".git/" directory inside
   a non-bare repository from the check.  So you can do "cd .git &&
   git cmd" to run a Git command that works on a bare repository without
   explicitly specifying $GIT_DIR now.

 * The completion script (in contrib/) learned more options that can
   be used with "git log".

 * The labels on conflict markers for the common ancestor, our version,
   and the other version are available to custom 3-way merge driver
   via %S, %X, and %Y placeholders.

 * The write codepath for the reftable data learned to honor
   core.fsync configuration.

 * The "--fsck-objects" option of "git index-pack" now can take the
   optional parameter to tweak severity of different fsck errors.

 * The wincred credential backend has been taught to support oauth
   refresh token the same way as credential-cache and
   credential-libsecret backends.

 * Command line completion support (in contrib/) has been
   updated for "git bisect".

 * "git branch" and friends learned to use the formatted text as
   sorting key, not the underlying timestamp value, when the --sort
   option is used with author or committer timestamp with a format
   specifier (e.g., "--sort=creatordate:format:%H:%M:%S").

 * The command line completion script (in contrib/) learned to
   complete configuration variable names better.


Performance, Internal Implementation, Development Support etc.

 * Process to add some form of low-level unit tests has started.

 * Add support for GitLab CI.

 * "git for-each-ref --no-sort" still sorted the refs alphabetically
   which paid non-trivial cost.  It has been redefined to show output
   in an unspecified order, to allow certain optimizations to take
   advantage of.

 * Simplify API implementation to delete references by eliminating
   duplication.

 * Subject approxidate() and show_date() machinery to OSS-Fuzz.

 * A new helper to let us pretend that we called lstat() when we know
   our cache_entry is up-to-date via fsmonitor.

 * The optimization based on fsmonitor in the "diff --cached"
   codepath is resurrected with the "fake-lstat" introduced earlier.

 * Test balloon to use C99 "bool" type from <stdbool.h> has been
   added.

 * "git clone" has been prepared to allow cloning a repository with
   non-default hash function into a repository that uses the reftable
   backend.

 * Streaming spans of packfile data used to be done only from a
   single, primary, pack in a repository with multiple packfiles.  It
   has been extended to allow reuse from other packfiles, too.

 * Comment updates to help developers not to attempt to modify
   messages from plumbing commands that must stay constant.

   It might make sense to reassess the plumbing needs every few years,
   but that should be done as a separate effort.

 * Move test-ctype helper to the unit-test framework.

 * Instead of manually creating refs/ hierarchy on disk upon a
   creation of a secondary worktree, which is only usable via the
   files backend, use the refs API to populate it.

 * CI for GitLab learned to drive macOS jobs.

 * A few tests to "git commit -o <pathspec>" and "git commit -i
   <pathspec>" has been added.

 * Tests on ref API are moved around to prepare for reftable.

 * The Makefile often had to say "-L$(path) -R$(path)" that repeats
   the path to the same library directory for link time and runtime.
   A Makefile template is used to reduce such repetition.

 * The priority queue test has been migrated to the unit testing
   framework.

 * Setting `feature.experimental` opts the user into multi-pack reuse
   experiment

 * Squelch node.js 16 deprecation warnings from GitHub Actions CI
   by updating actions/github-script and actions/checkout that use
   node.js 20.

 * The mechanism to report the filename in the source code, used by
   the unit-test machinery, assumed that the compiler expanded __FILE__
   to the path to the source given to the $(CC), but some compilers
   give full path, breaking the output.  This has been corrected.


Fixes since v2.43
-----------------

 * The way CI testing used "prove" could lead to running the test
   suite twice needlessly, which has been corrected.

 * Update ref-related tests.

 * "git format-patch --encode-email-headers" ignored the option when
   preparing the cover letter, which has been corrected.

 * Newer versions of Getopt::Long started giving warnings against our
   (ab)use of it in "git send-email".  Bump the minimum version
   requirement for Perl to 5.8.1 (from September 2002) to allow
   simplifying our implementation.

 * Earlier we stopped relying on commit-graph that (still) records
   information about commits that are lost from the object store,
   which has negative performance implications.  The default has been
   flipped to disable this pessimization.

 * Stale URLs have been updated to their current counterparts (or
   archive.org) and HTTP links are replaced with working HTTPS links.

 * trace2 streams used to record the URLs that potentially embed
   authentication material, which has been corrected.

 * The sample pre-commit hook that tries to catch introduction of new
   paths that use potentially non-portable characters did not notice
   an existing path getting renamed to such a problematic path, when
   rename detection was enabled.

 * The command line parser for the "log" family of commands was too
   loose when parsing certain numbers, e.g., silently ignoring the
   extra 'q' in "git log -n 1q" without complaining, which has been
   tightened up.

 * "git $cmd --end-of-options --rev -- --path" for some $cmd failed
   to interpret "--rev" as a rev, and "--path" as a path.  This was
   fixed for many programs like "reset" and "checkout".

 * "git bisect reset" has been taught to clean up state files and refs
   even when BISECT_START file is gone.

 * Some codepaths did not correctly parse configuration variables
   specified with valueless "true", which has been corrected.

 * Code clean-up for sanity checking of command line options for "git
   show-ref".

 * The code to parse the From e-mail header has been updated to avoid
   recursion.

 * "git fetch --atomic" issued an unnecessary empty error message,
   which has been corrected.

 * Command line completion script (in contrib/) learned to work better
   with the reftable backend.

 * "git status" is taught to show both the branch being bisected and
   being rebased when both are in effect at the same time.

 * "git archive --list extra garbage" silently ignored excess command
   line parameters, which has been corrected.

 * "git sparse-checkout set" added default patterns even when the
   patterns are being fed from the standard input, which has been
   corrected.

 * "git sparse-checkout (add|set) --[no-]cone --end-of-options" did
   not handle "--end-of-options" correctly after a recent update.

 * Unlike other environment variables that took the usual
   true/false/yes/no as well as 0/1, GIT_FLUSH only understood 0/1,
   which has been corrected.

 * Clearing in-core repository (happens during e.g., "git fetch
   --recurse-submodules" with commit graph enabled) made in-core
   commit object in an inconsistent state by discarding the necessary
   data from commit-graph too early, which has been corrected.

 * Update to a new feature recently added, "git show-ref --exists".

 * oss-fuzz tests are built and run in CI.
   (merge c4a9cf1df3 js/oss-fuzz-build-in-ci later to maint).

 * Rename detection logic ignored the final line of a file if it is an
   incomplete line.

 * GitHub CI update.
   (merge 0188b2c8e0 pb/ci-github-skip-logs-for-broken-tests later to maint).

 * "git diff --no-rename A B" did not disable rename detection but did
   not trigger an error from the command line parser.

 * "git archive --remote=<remote>" learned to talk over the smart
   http (aka stateless) transport.
   (merge 176cd68634 jx/remote-archive-over-smart-http later to maint).

 * Fetching via protocol v0 over Smart HTTP transport sometimes failed
   to correctly auto-follow tags.
   (merge fba732c462 jk/fetch-auto-tag-following-fix later to maint).

 * The documentation for the --exclude-per-directory option marked it
   as deprecated, which confused readers into thinking there may be a
   plan to remove it in the future, which was not our intention.
   (merge 0009542cab jc/ls-files-doc-update later to maint).

 * "git diff --no-index file1 file2" segfaulted while invoking the
   external diff driver, which has been corrected.

 * Rewrite //-comments to /* comments */ in files whose comments
   prevalently use the latter.

 * Cirrus CI jobs started breaking because we specified version of
   FreeBSD that is no longer available, which has been corrected.
   (merge 81fffb66d3 cb/use-freebsd-13-2-at-cirrus-ci later to maint).

 * A caller called index_file_exists() that takes a string expressed
   as <ptr, length> with a wrong length, which has been corrected.
   (merge 156e28b36d jh/sparse-index-expand-to-path-fix later to maint).

 * A failed "git tag -s" did not necessarily result in an error
   depending on the crypto backend, which has been corrected.

 * "git stash" sometimes was silent even when it failed due to
   unwritable index file, which has been corrected.

 * "git show-ref --verify" did not show things like "CHERRY_PICK_HEAD",
   which has been corrected.

 * Recent conversion to allow more than 0/1 in GIT_FLUSH broke the
   mechanism by flipping what yes/no means by mistake, which has been
   corrected.

 * The sequencer machinery does not use the ref API and instead
   records names of certain objects it needs for its correct operation
   in temporary files, which makes these objects susceptible to loss
   by garbage collection.  These temporary files have been added as
   starting points for reachability analysis to fix this.
   (merge bc7f5db896 pw/gc-during-rebase later to maint).

 * "git cherry-pick" invoked during "git rebase -i" session lost
   the authorship information, which has been corrected.
   (merge e4301f73ff vn/rebase-with-cherry-pick-authorship later to maint).

 * The code paths that call repo_read_object_file() have been
   tightened to react to errors.
   (merge 568459bf5e js/check-null-from-read-object-file later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 5aea3955bc rj/clarify-branch-doc-m later to maint).
   (merge 9cce3be2df bk/bisect-doc-fix later to maint).
   (merge 8430b438f6 vd/fsck-submodule-url-test later to maint).
   (merge 3cb4384683 jc/t0091-with-unknown-git later to maint).
   (merge 020456cb74 rs/receive-pack-remove-find-header later to maint).
   (merge bc47139f4f la/trailer-cleanups later to maint).

----------------------------------------------------------------

Changes since v2.43.0 are as follows:

Achu Luma (2):
      unit-tests: rewrite t/helper/test-ctype.c as a unit test
      t2400: avoid losing exit status to pipes

Alexander Shopov (1):
      l10n: bg.po: Updated Bulgarian translation (5610t)

Andy Koppe (3):
      rebase: fully ignore rebase.autoSquash without -i
      rebase: support --autosquash without -i
      rebase: rewrite --(no-)autosquash documentation

Antonin Delpeuch (2):
      merge-file: add --diff-algorithm option
      merge-ll: expose revision names to custom drivers

Arkadii Yakovets (3):
      l10n: uk: v2.44 localization update
      l10n: uk: v2.44 update (round 2)
      l10n: uk: v2.44 update (round 3)

Arthur Chan (1):
      fuzz: add new oss-fuzz fuzzer for date.c / date.h

Bagas Sanjaya (1):
      l10n: po-id for 2.44 (round 1)

Britton Leo Kerin (9):
      doc: use singular form of repeatable path arg
      doc: refer to pathspec instead of path
      completion: tests: always use 'master' for default initial branch name
      completion: bisect: complete bad, new, old, and help subcommands
      completion: bisect: complete custom terms and related options
      completion: bisect: complete missing --first-parent and - -no-checkout options
      completion: new function __git_complete_log_opts
      completion: bisect: complete log opts for visualize subcommand
      completion: bisect: recognize but do not complete view subcommand

Carlo Marcelo Arenas Belón (1):
      ci: update FreeBSD cirrus job

Chandra Pratap (4):
      sideband.c: remove redundant 'NEEDSWORK' tag
      write-or-die: make GIT_FLUSH a Boolean environment variable
      t4129: prevent loss of exit code due to the use of pipes
      tests: move t0009-prio-queue.sh to the new unit testing framework

Elijah Newren (32):
      t6429: remove switching aspects of fast-rebase
      replay: introduce new builtin
      replay: start using parse_options API
      replay: die() instead of failing assert()
      replay: introduce pick_regular_commit()
      replay: change rev walking options
      replay: add an important FIXME comment about gpg signing
      replay: remove progress and info output
      replay: remove HEAD related sanity check
      replay: make it a minimal server side command
      replay: use standard revision ranges
      replay: add --advance or 'cherry-pick' mode
      replay: add --contained to rebase contained branches
      replay: stop assuming replayed branches do not diverge
      completion: squelch stray errors in sparse-checkout completion
      completion: fix logic for determining whether cone mode is active
      completion: avoid misleading completions in cone mode
      completion: avoid user confusion in non-cone mode
      treewide: remove unnecessary includes from header files
      treewide: remove unnecessary includes in source files
      archive.h: remove unnecessary include
      blame.h: remove unnecessary includes
      fsmonitor--daemon.h: remove unnecessary includes
      http.h: remove unnecessary include
      line-log.h: remove unnecessary include
      pkt-line.h: remove unnecessary include
      submodule-config.h: remove unnecessary include
      trace2/tr2_tls.h: remove unnecessary include
      treewide: add direct includes currently only pulled in transitively
      treewide: remove unnecessary includes in source files
      sparse-checkout: be consistent with end of options markers
      diffcore-delta: avoid ignoring final 'line' of file

Emir SARI (1):
      l10n: tr: Update Turkish translations for 2.44

Eric Sunshine (1):
      git-add.txt: add missing short option -A to synopsis

Ghanshyam Thakkar (4):
      t7501: add tests for --include and --only
      t7501: add tests for --amend --signoff
      t0024: avoid losing exit status to pipes
      t0024: style fix

Illia Bobyr (1):
      rebase: clarify --reschedule-failed-exec default

James Touton (1):
      git-p4: use raw string literals for regular expressions

Jean-Noël Avila (3):
      doc: enforce dashes in placeholders
      doc: enforce placeholders in documentation
      l10n: fr.po: v2.44.0 round 3

Jeff Hostetler (4):
      trace2: fix signature of trace2_def_param() macro
      t0211: test URL redacting in PERF format
      t0212: test URL redacting in EVENT format
      sparse-index: pass string length to index_file_exists()

Jeff King (39):
      commit-graph: handle overflow in chunk_size checks
      midx: check consistency of fanout table
      commit-graph: drop redundant call to "lite" verification
      commit-graph: clarify missing-chunk error messages
      commit-graph: abort as soon as we see a bogus chunk
      commit-graph: use fanout value for graph size
      commit-graph: check order while reading fanout chunk
      commit-graph: drop verify_commit_graph_lite()
      commit-graph: mark chunk error messages for translation
      parse-options: decouple "--end-of-options" and "--"
      bisect: always clean on reset
      config: handle NULL value when parsing non-bools
      setup: handle NULL value when parsing extensions
      trace2: handle NULL values in tr2_sysenv config callback
      help: handle NULL value for alias.* config
      submodule: handle NULL value when parsing submodule.*.branch
      trailer: handle NULL value when parsing trailer-specific config
      fsck: handle NULL value when parsing message config
      config: reject bogus values for core.checkstat
      git_xmerge_config(): prefer error() to die()
      imap-send: don't use git_die_config() inside callback
      config: use config_error_nonbool() instead of custom messages
      diff: give more detailed messages for bogus diff.* config
      config: use git_config_string() for core.checkRoundTripEncoding
      push: drop confusing configset/callback redundancy
      gpg-interface: drop pointless config_error_nonbool() checks
      sequencer: simplify away extra git_config_string() call
      mailinfo: fix out-of-bounds memory reads in unquote_quoted_pair()
      t5100: make rfc822 comment test more careful
      mailinfo: avoid recursion when unquoting From headers
      t1006: add tests for %(objectsize:disk)
      commit-graph: retain commit slab when closing NULL commit_graph
      index-pack: spawn threads atomically
      transport-helper: re-examine object dir after fetching
      diff: handle NULL meta-info when spawning external diff
      Makefile: use mkdir_p_parent_template for UNIT_TEST_BIN
      Makefile: remove UNIT_TEST_BIN directory with "make clean"
      t/Makefile: get UNIT_TESTS list from C sources
      trailer: fix comment/cut-line regression with opts->no_divider

Jiang Xin (14):
      t5574: test porcelain output of atomic fetch
      fetch: no redundant error message for atomic fetch
      test-pkt-line: add option parser for unpack-sideband
      pkt-line: memorize sideband fragment in reader
      pkt-line: do not chomp newlines for sideband messages
      transport-helper: no connection restriction in connect_helper
      remote-curl: supports git-upload-archive service
      transport-helper: protocol v2 supports upload-archive
      http-backend: new rpc-service for git-upload-archive
      transport-helper: call do_take_over() in connect_helper
      transport-helper: call do_take_over() in process_connect
      diff: mark param1 and param2 as placeholders
      l10n: ci: remove unused param for add-pr-comment@v2
      l10n: ci: disable cache for setup-go to suppress warnings

Joanna Wang (2):
      attr: enable attr pathspec magic for git-add and git-stash
      attr: add builtin objectmode values support

Johannes Schindelin (15):
      artifacts-tar: when including `.dll` files, don't forget the unit-tests
      cmake: fix typo in variable name
      cmake: also build unit tests
      cmake: use test names instead of full paths
      unit-tests: do not mistake `.pdb` files for being executable
      cmake: handle also unit tests
      unit-tests: do show relative file paths
      ci: avoid running the test suite _twice_
      packfile.c: fix a typo in `each_file_in_pack_dir_fn()`'s declaration
      trace2: redact passwords from https:// URLs by default
      win32: special-case `ENOSPC` when writing to a pipe
      Always check the return value of `repo_read_object_file()`
      l10n: bump Actions versions in l10n.yml
      ci: bump remaining outdated Actions versions
      ci(linux32): add a note about Actions that must not be updated

John Cai (15):
      t3210: move to t0601
      remove REFFILES prerequisite for some tests in t1405 and t2017
      t1414: convert test to use Git commands instead of writing refs manually
      t1404: move reffiles specific tests to t0600
      t1405: move reffiles specific tests to t0601
      t1406: move reffiles specific tests to t0600
      t1410: move reffiles specific tests to t0600
      t1415: move reffiles specific tests to t0601
      t1503: move reffiles specific tests to t0600
      t3903: make drop stash test ref backend agnostic
      t4202: move reffiles specific tests to t0600
      t5312: move reffiles specific tests to t0601
      reftable: honor core.fsync
      index-pack: test and document --strict=<msg-id>=<severity>...
      index-pack: --fsck-objects to take an optional argument for fsck msgs

Jordi Mas (1):
      l10n: Update Catalan translation

Josh Brobst (1):
      builtin/reflog.c: fix dry-run option short name

Josh Soref (13):
      doc: update links to current pages
      doc: switch links to https
      doc: update links for andre-simon.de
      doc: refer to internet archive
      CodingGuidelines: move period inside parentheses
      CodingGuidelines: write punctuation marks
      SubmittingPatches: drop ref to "What's in git.git"
      SubmittingPatches: discourage new trailers
      SubmittingPatches: update extra tags list
      SubmittingPatches: provide tag naming advice
      SubmittingPatches: clarify GitHub visual
      SubmittingPatches: clarify GitHub artifact format
      SubmittingPatches: hyphenate non-ASCII

Josh Steadmon (4):
      unit tests: add a project plan document
      ci: run unit tests in CI
      fuzz: fix fuzz test build rules
      ci: build and run minimal fuzzers in GitHub CI

Julian Prein (1):
      hooks--pre-commit: detect non-ASCII when renaming

Junio C Hamano (57):
      cache: add fake_lstat()
      diff-lib: fix check_removed() when fsmonitor is active
      checkout: refactor die_if_checked_out() caller
      orphan/unborn: add to the glossary and use them consistently
      orphan/unborn: fix use of 'orphan' in end-user facing messages
      revision: parse integer arguments to --max-count, --skip, etc., more carefully
      Start the 2.44 cycle
      checkout: forbid "-B <branch>" from touching a branch used elsewhere
      git.txt: HEAD is not that special
      git-bisect.txt: BISECT_HEAD is not that special
      refs.h: HEAD is not that special
      docs: AUTO_MERGE is not that special
      docs: MERGE_AUTOSTASH is not that special
      doc: format.notes specify a ref under refs/notes/ hierarchy
      The second batch
      remote.h: retire CAS_OPT_NAME
      The third batch
      archive: "--list" does not take further options
      sparse-checkout: use default patterns for 'set' only !stdin
      The fourth batch
      The fifth batch
      The sixth batch
      messages: mark some strings with "up-to-date" not to touch
      The seventh batch
      The eighth batch
      The ninth batch
      Docs: majordomo@vger.kernel.org has been decomissioned
      CoC: whitespace fix
      ls-files: avoid the verb "deprecate" for individual options
      The tenth batch
      builtin/worktree: comment style fixes
      merge-ort.c: comment style fix
      reftable/pq_test: comment style fix
      The eleventh batch
      t0091: allow test in a repository without tags
      The twelfth batch
      Makefile: reduce repetitive library paths
      Makefile: simplify output of the libpath_template
      The thirteenth batch
      GitHub Actions: update to checkout@v4
      GitHub Actions: update to github-script@v7
      t/Makefile: say the default target upfront
      The fourteenth batch
      tag: fix sign_buffer() call to create a signed tag
      bisect: document "terms" subcommand more fully
      bisect: document command line arguments for "bisect start"
      ssh signing: signal an error with a negative return value
      The fifteenth batch
      Git 2.43.1
      Git 2.44-rc0
      unit-tests: do show relative file paths on non-Windows, too
      A few more topics before -rc1
      write-or-die: fix the polarity of GIT_FLUSH environment variable
      A few more fixes before -rc1
      Git 2.43.2
      Hopefully the last batch of fixes before 2.44 final
      Git 2.44-rc2

Justin Tobler (2):
      t1401: remove lockfile creation
      t5541: remove lockfile creation

Kristoffer Haugsbakk (5):
      config: format newlines
      config: rename global config function
      config: factor out global config file retrieval
      maintenance: use XDG config if it exists
      config: add back code comment

Kyle Lippincott (1):
      setup: allow cwd=.git w/ bareRepository=explicit

Linus Arver (4):
      commit: ignore_non_trailer computes number of bytes to ignore
      trailer: find the end of the log message
      trailer: use offsets for trailer_start/trailer_end
      strvec: use correct member name in comments

M Hickford (1):
      credential/wincred: store oauth_refresh_token

Maarten van der Schrieck (1):
      Documentation: fix statement about rebase.instructionFormat

Marcel Krause (1):
      doc: make the gitfile syntax easier to discover

Marcelo Roberto Jimenez (1):
      gitweb: die when a configuration file cannot be read

Michael Lohmann (2):
      Documentation/git-merge.txt: fix reference to synopsis
      Documentation/git-merge.txt: use backticks for command wrapping

Nikolay Borisov (1):
      rebase: fix documentation about used shell in -x

Nikolay Edigaryev (1):
      rev-list-options: fix off-by-one in '--filter=blob:limit=<n>' explainer

Patrick Steinhardt (139):
      t: allow skipping expected object ID in `ref-store update-ref`
      t: convert tests to not write references via the filesystem
      t: convert tests to not access symrefs via the filesystem
      t: convert tests to not access reflog via the filesystem
      t1450: convert tests to remove worktrees via git-worktree(1)
      t4207: delete replace references via git-update-ref(1)
      t7300: assert exact states of repo
      t7900: assert the absence of refs via git-for-each-ref(1)
      t: mark several tests that assume the files backend with REFFILES
      ci: reorder definitions for grouping functions
      ci: make grouping setup more generic
      ci: group installation of Docker dependencies
      ci: split out logic to set up failed test artifacts
      ci: unify setup of some environment variables
      ci: squelch warnings when testing with unusable Git repo
      ci: install test dependencies for linux-musl
      ci: add support for GitLab CI
      t/lib-httpd: dynamically detect httpd and modules path
      t/lib-httpd: stop using legacy crypt(3) for authentication
      t9164: fix inability to find basename(1) in Subversion hooks
      global: convert trivial usages of `test <expr> -a/-o <expr>`
      contrib/subtree: stop using `-o` to test for number of args
      contrib/subtree: convert subtree type check to use case statement
      Makefile: stop using `test -o` when unlinking duplicate executables
      t5510: ensure that the packed-refs file needs locking
      refs/files: use transactions to delete references
      refs: deduplicate code to delete references
      refs: remove `delete_refs` callback from backends
      commit-graph: disable GIT_COMMIT_GRAPH_PARANOIA by default
      t0410: mark tests to require the reffiles backend
      t1400: split up generic reflog tests from the reffile-specific ones
      t1401: stop treating FETCH_HEAD as real reference
      t1410: use test-tool to create empty reflog
      t1417: make `reflog --updateref` tests backend agnostic
      t3310: stop checking for reference existence via `test -f`
      t4013: simplify magic parsing and drop "failure"
      t5401: speed up creation of many branches
      t5551: stop writing packed-refs directly
      t6301: write invalid object ID via `test-tool ref-store`
      reftable: wrap EXPECT macros in do/while
      reftable: handle interrupted reads
      reftable: handle interrupted writes
      reftable/stack: verify that `reftable_stack_add()` uses auto-compaction
      reftable/stack: perform auto-compaction with transactional interface
      reftable/stack: reuse buffers when reloading stack
      reftable/stack: fix stale lock when dying
      reftable/stack: fix use of unseeded randomness
      reftable/merged: reuse buffer to compute record keys
      reftable/block: introduce macro to initialize `struct block_iter`
      reftable/block: reuse buffer to compute record keys
      setup: extract function to create the refdb
      setup: allow skipping creation of the refdb
      remote-curl: rediscover repository when fetching refs
      builtin/clone: fix bundle URIs with mismatching object formats
      builtin/clone: set up sparse checkout later
      builtin/clone: skip reading HEAD when retrieving remote
      builtin/clone: create the refdb with the correct object format
      wt-status: read HEAD and ORIG_HEAD via the refdb
      refs: propagate errno when reading special refs fails
      refs: complete list of special refs
      bisect: consistently write BISECT_EXPECTED_REV via the refdb
      tests: adjust whitespace in chainlint expectations
      t: introduce DEFAULT_REPO_FORMAT prereq
      worktree: skip reading HEAD when repairing worktrees
      refs: refactor logic to look up storage backends
      setup: start tracking ref storage format
      setup: set repository's formats on init
      setup: introduce "extensions.refStorage" extension
      setup: introduce GIT_DEFAULT_REF_FORMAT envvar
      t: introduce GIT_TEST_DEFAULT_REF_FORMAT envvar
      builtin/rev-parse: introduce `--show-ref-format` flag
      builtin/init: introduce `--ref-format=` value flag
      builtin/clone: introduce `--ref-format=` value flag
      t9500: write "extensions.refstorage" into config
      reftable/stack: do not overwrite errors when compacting
      reftable/stack: do not auto-compact twice in `reftable_stack_add()`
      reftable/writer: fix index corruption when writing multiple indices
      reftable/record: constify some parts of the interface
      reftable/record: store "val1" hashes as static arrays
      reftable/record: store "val2" hashes as static arrays
      reftable/merged: really reuse buffers to compute record keys
      reftable/merged: transfer ownership of records when iterating
      git-prompt: stop manually parsing HEAD with unknown ref formats
      ci: add job performing static analysis on GitLab CI
      refs: prepare `refs_init_db()` for initializing worktree refs
      setup: move creation of "refs/" into the files backend
      refs/files: skip creation of "refs/{heads,tags}" for worktrees
      builtin/worktree: move setup of commondir file earlier
      worktree: expose interface to look up worktree by name
      builtin/worktree: create refdb via ref backend
      reftable/stack: refactor stack reloading to have common exit path
      reftable/stack: refactor reloading to use file descriptor
      reftable/stack: use stat info to avoid re-reading stack list
      reftable/blocksource: refactor code to match our coding style
      reftable/blocksource: use mmap to read tables
      git-p4: stop reaching into the refdb
      commit-graph: fix memory leak when not writing graph
      completion: discover repo path in `__git_pseudoref_exists ()`
      t9902: verify that completion does not print anything
      completion: improve existence check for pseudo-refs
      completion: silence pseudoref existence check
      completion: treat dangling symrefs as existing pseudorefs
      t7527: decrease likelihood of racing with fsmonitor daemon
      Makefile: detect new Homebrew location for ARM-based Macs
      ci: handle TEST_OUTPUT_DIRECTORY when printing test failures
      ci: make p4 setup on macOS more robust
      ci: add macOS jobs to GitLab CI
      reftable/stack: unconditionally reload stack after commit
      reftable/stack: fix race in up-to-date check
      sequencer: clean up pseudo refs with REF_NO_DEREF
      sequencer: delete REBASE_HEAD in correct repo when picking commits
      refs: convert AUTO_MERGE to become a normal pseudo-ref
      sequencer: introduce functions to handle autostashes via refs
      refs: convert MERGE_AUTOSTASH to become a normal pseudo-ref
      refs: redefine special refs
      Documentation: add "special refs" to the glossary
      reftable/stack: adjust permissions of compacted tables
      t1300: make tests more robust with non-default ref backends
      t1301: mark test for `core.sharedRepository` as reffiles specific
      t1302: make tests more robust with new extensions
      t1419: mark test suite as files-backend specific
      t5526: break test submodule differently
      t: mark tests regarding git-pack-refs(1) to be backend specific
      reftable/stack: fsync "tables.list" during compaction
      reftable/reader: be more careful about errors in indexed seeks
      reftable/writer: use correct type to iterate through index entries
      reftable/writer: simplify writing index records
      reftable/writer: fix writing multi-level indices
      reftable: document reading and writing indices
      builtin/stash: report failure to write to index
      reftable: introduce macros to grow arrays
      reftable: introduce macros to allocate arrays
      reftable/stack: fix parameter validation when compacting range
      reftable/stack: index segments with `size_t`
      reftable/stack: use `size_t` to track stack slices during compaction
      reftable/stack: use `size_t` to track stack length
      reftable/merged: refactor seeking of records
      reftable/merged: refactor initialization of iterators
      reftable/record: improve semantics when initializing records

Peter Krefting (1):
      l10n: sv.po: Update Swedish translation

Philippe Blain (11):
      completion: complete missing rev-list options
      completion: complete --patch-with-raw
      completion: complete --encoding
      completion: complete missing 'git log' options
      ci(github): also skip logs of broken test cases
      imap-send: add missing "strbuf.h" include under NO_CURL
      .github/PULL_REQUEST_TEMPLATE.md: add a note about single-commit PRs
      completion: add space after config variable names also in Bash 3
      completion: complete 'submodule.*' config variables
      completion: add and use __git_compute_first_level_config_vars_for_section
      completion: add and use __git_compute_second_level_config_vars_for_section

Phillip Wood (4):
      unit tests: add TAP unit test framework
      show-ref --verify: accept pseudorefs
      t1400: use show-ref to check pseudorefs
      prune: mark rebase autostash and orig-head as reachable

Ralf Thielow (1):
      l10n: Update German translation

René Scharfe (21):
      column: release strbuf and string_list after use
      i18n: factorize even more 'incompatible options' messages
      push: use die_for_incompatible_opt4() for - -delete/--tags/--all/--mirror
      repack: use die_for_incompatible_opt3() for -A/-k/--cruft
      revision: use die_for_incompatible_opt3() for - -graph/--reverse/--walk-reflogs
      revision, rev-parse: factorize incompatibility messages about - -exclude-hidden
      clean: factorize incompatibility message
      worktree: standardize incompatibility messages
      worktree: simplify incompatibility message for --orphan and commit-ish
      show-ref: use die_for_incompatible_opt3()
      t6300: avoid hard-coding object sizes
      git-compat-util: convert skip_{prefix,suffix}{,_mem} to bool
      rebase: use strvec_pushf() for format-patch revisions
      fast-import: use mem_pool_calloc()
      mem-pool: fix big allocations
      mem-pool: simplify alignment calculation
      t1006: prefer shell loop to awk for packed object sizes
      parse-options: fully disable option abbreviation with PARSE_OPT_KEEP_UNKNOWN
      parse-options: simplify positivation handling
      receive-pack: use find_commit_header() in check_cert_push_options()
      receive-pack: use find_commit_header() in check_nonce()

Rubén Justo (10):
      status: fix branch shown when not only bisecting
      branch: clarify <oldbranch> term
      advice: sort the advice related lists
      advice: fix an unexpected leading space
      branch: make the advice to force-deleting a conditional one
      advice: allow disabling the automatic hint in advise_if_enabled()
      t5332: mark as leak-free
      t6113: mark as leak-free
      test-lib: check for TEST_PASSES_SANITIZE_LEAK
      t0080: mark as leak-free

Sam Delmerico (1):
      push: region_leave trace for negotiate_using_fetch

Shreyansh Paliwal (1):
      test-lib-functions.sh: fix test_grep fail message wording

Simon Ser (1):
      format-patch: fix ignored encode_email_headers for cover letter

Stan Hu (2):
      completion: refactor existence checks for pseudorefs
      completion: support pseudoref existence checks for reftables

Sören Krecker (1):
      mingw: give more details about unsafe directory's ownership

Tamino Bauknecht (1):
      fetch: add new config option fetch.all

Taylor Blau (29):
      pack-objects: free packing_data in more places
      pack-bitmap-write: deep-clear the `bb_commit` slab
      pack-bitmap: plug leak in find_objects()
      midx: factor out `fill_pack_info()`
      midx: implement `BTMP` chunk
      midx: implement `midx_locate_pack()`
      pack-bitmap: pass `bitmapped_pack` struct to pack-reuse functions
      ewah: implement `bitmap_is_empty()`
      pack-bitmap: simplify `reuse_partial_packfile_from_bitmap()` signature
      pack-bitmap: return multiple packs via `reuse_partial_packfile_from_bitmap()`
      pack-objects: parameterize pack-reuse routines over a single pack
      pack-objects: keep track of `pack_start` for each reuse pack
      pack-objects: pass `bitmapped_pack`'s to pack-reuse functions
      pack-objects: prepare `write_reused_pack()` for multi-pack reuse
      pack-objects: prepare `write_reused_pack_verbatim()` for multi-pack reuse
      pack-objects: include number of packs reused in output
      git-compat-util.h: implement checked size_t to uint32_t conversion
      midx: implement `midx_preferred_pack()`
      pack-revindex: factor out `midx_key_to_pack_pos()` helper
      pack-revindex: implement `midx_pair_to_pack_pos()`
      pack-bitmap: prepare to mark objects from multiple packs for reuse
      pack-objects: add tracing for various packfile metrics
      t/test-lib-functions.sh: implement `test_trace2_data` helper
      pack-objects: allow setting `pack.allowPackReuse` to "single"
      pack-bitmap: enable reuse from all bitmapped packs
      t/perf: add performance tests for multi-pack reuse
      pack-bitmap: drop unused `reuse_objects`
      t5332-multi-pack-reuse.sh: extract pack-objects helper functions
      pack-objects: enable multi-pack reuse via `feature.experimental`

Teng Long (1):
      l10n: zh_CN: for git 2.44 rounds

Todd Zullinger (3):
      perl: bump the required Perl version to 5.8.1 from 5.8.0
      send-email: avoid duplicate specification warnings
      RelNotes: minor typo fixes in 2.44.0 draft

Toon Claes (1):
      builtin/show-ref: treat directory as non-existing in --exists

Vegard Nossum (1):
      sequencer: unset GIT_CHERRY_PICK_HELP for 'exec' commands

Victoria Dye (15):
      ref-filter.c: really don't sort when using --no-sort
      ref-filter.h: add max_count and omit_empty to ref_format
      ref-filter.h: move contains caches into filter
      ref-filter.h: add functions for filter/format & format-only
      ref-filter.c: rename 'ref_filter_handler()' to 'filter_one()'
      ref-filter.c: refactor to create common helper functions
      ref-filter.c: filter & format refs in the same callback
      for-each-ref: clean up documentation of --format
      ref-filter.c: use peeled tag for '*' format fields
      t/perf: add perf tests for for-each-ref
      submodule-config.h: move check_submodule_url
      test-submodule: remove command line handling for check-name
      t7450: test submodule urls
      submodule-config.c: strengthen URL fsck check
      ref-filter.c: sort formatted dates by byte value

Yi-Jyun Pan (1):
      l10n: zh_TW: Git 2.44

Zach FettersMoore (1):
      subtree: fix split processing with multiple subtrees present



^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.44.0-rc1
@ 2024-02-14 17:04  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2024-02-14 17:04 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.44.0-rc1 is now available for testing at
the usual places.  It is comprised of 473 non-merge commits since
v2.43.0, contributed by 72 people, 33 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.44.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.43.0 are as follows.
Welcome to the Git development community!

  Achu Luma, Antonin Delpeuch, Benjamin Lehmann, Britton Leo
  Kerin, Carlos Andrés Ramírez Cataño, Chandra Pratap, Ghanshyam
  Thakkar, Illia Bobyr, James Touton, Janik Haag, Joanna Wang, Josh
  Brobst, Julian Prein, Justin Tobler, Kyle Lippincott, Maarten van
  der Schrieck, Marcel Krause, Marcelo Roberto Jimenez, Michael
  Lohmann, moti sd, Nikolay Borisov, Nikolay Edigaryev, Ondrej
  Pohorelsky, Sam Delmerico, Sergey Kosukhin, Shreyansh Paliwal,
  Sören Krecker, Stan Hu, Tamino Bauknecht, Wilfred Hughes,
  Willem Verstraeten, Xiaoguang WANG, and Zach FettersMoore.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Andy Koppe, Arthur Chan, Calvin Wan, Carlo Marcelo Arenas Belón,
  Christian Couder, Dragan Simic, Elijah Newren, Eric Sunshine,
  Glen Choo, Han-Wen Nienhuys, Jean-Noël Avila, Jeff Hostetler,
  Jeff King, Jiang Xin, Johannes Schindelin, John Cai, Jonathan
  Tan, Josh Soref, Josh Steadmon, Josip Sokcevic, Junio C Hamano,
  Konstantin Ryabitsev, Kristoffer Haugsbakk, Linus Arver,
  Matthias Aßhauer, M Hickford, Oswald Buddenhagen, Patrick
  Steinhardt, Philippe Blain, Phillip Wood, Randall S. Becker,
  René Scharfe, Rubén Justo, Simon Ser, SZEDER Gábor, Taylor
  Blau, Todd Zullinger, Toon Claes, and Victoria Dye.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.44 Release Notes (draft)
===============================

Backward Compatibility Notes

 * "git chekcout -B <branch>" used to allow switching to a branch that
   is in use on another worktree, but this was by mistake.  The users
   need to use "--ignore-other-worktrees" option.


UI, Workflows & Features

 * "git add" and "git stash" learned to support the ":(attr:...)"
   magic pathspec.

 * "git rebase --autosquash" is now enabled for non-interactive rebase,
   but it is still incompatible with the apply backend.

 * Introduce "git replay", a tool meant on the server side without
   working tree to recreate a history.

 * "git merge-file" learned to take the "--diff-algorithm" option to
   use algorithm different from the default "myers" diff.

 * Command line completion (in contrib/) learned to complete path
   arguments to the "add/set" subcommands of "git sparse-checkout"
   better.

 * "git checkout -B <branch> [<start-point>]" allowed a branch that is
   in use in another worktree to be updated and checked out, which
   might be a bit unexpected.  The rule has been tightened, which is a
   breaking change.  "--ignore-other-worktrees" option is required to
   unbreak you, if you are used to the current behaviour that "-B"
   overrides the safety.

 * The builtin_objectmode attribute is populated for each path
   without adding anything in .gitattributes files, which would be
   useful in magic pathspec, e.g., ":(attr:builtin_objectmode=100755)"
   to limit to executables.

 * "git fetch" learned to pay attention to "fetch.all" configuration
   variable, which pretends as if "--all" was passed from the command
   line when no remote parameter was given.

 * In addition to (rather cryptic) Security Identifiers, show username
   and domain in the error message when we barf on mismatch between
   the Git directory and the current user on Windows.

 * The error message given when "git branch -d branch" fails due to
   commits unique to the branch has been split into an error and a new
   conditional advice message.

 * When given an existing but unreadable file as a configuration file,
   gitweb behaved as if the file did not exist at all, but now it
   errors out.  This is a change that may break backward compatibility.

 * When $HOME/.gitignore is missing but XDG config file available, we
   should write into the latter, not former.  "git gc" and "git
   maintenance" wrote into a wrong "global config" file, which have
   been corrected.

 * Define "special ref" as a very narrow set that consists of
   FETCH_HEAD and MERGE_HEAD, and clarify everything else that used to
   be classified as such are actually just pseudorefs.

 * All conditional "advice" messages show how to turn them off, which
   becomes repetitive.  Setting advice.* configuration explicitly on
   now omits the instruction part.

 * The "disable repository discovery of a bare repository" check,
   triggered by setting safe.bareRepository configuration variable to
   'explicit', has been loosened to exclude the ".git/" directory inside
   a non-bare repository from the check.  So you can do "cd .git &&
   git cmd" to run a Git command that works on a bare repository without
   explicitly specifying $GIT_DIR now.

 * The completion script (in contrib/) learned more options that can
   be used with "git log".

 * The labels on conflict markers for the common ancestor, our version,
   and the other version are available to custom 3-way merge driver
   via %S, %X, and %Y placeholders.

 * The write codepath for the reftable data learned to honor
   core.fsync configuration.

 * The "--fsck-objects" option of "git index-pack" now can take the
   optional parameter to tweak severity of different fsck errors.

 * The wincred credential backend has been taught to support oauth
   refresh token the same way as credential-cache and
   credential-libsecret backends.

 * Command line completion support (in contrib/) has been
   updated for "git bisect".

 * "git branch" and friends learned to use the formatted text as
   sorting key, not the underlying timestamp value, when the --sort
   option is used with author or committer timestamp with a format
   specifier (e.g., "--sort=creatordate:format:%H:%M:%S").


Performance, Internal Implementation, Development Support etc.

 * Process to add some form of low-level unit tests has started.

 * Add support for GitLab CI.

 * "git for-each-ref --no-sort" still sorted the refs alphabetically
   which paid non-trivial cost.  It has been redefined to show output
   in an unspecified order, to allow certain optimizations to take
   advantage of.

 * Simplify API implementation to delete references by eliminating
   duplication.

 * Subject approxidate() and show_date() machinery to OSS-Fuzz.

 * A new helper to let us pretend that we called lstat() when we know
   our cache_entry is up-to-date via fsmonitor.

 * The optimization based on fsmonitor in the "diff --cached"
   codepath is resurrected with the "fake-lstat" introduced earlier.

 * Test balloon to use C99 "bool" type from <stdbool.h> has been
   added.

 * "git clone" has been prepared to allow cloning a repository with
   non-default hash function into a repository that uses the reftable
   backend.

 * Streaming spans of packfile data used to be done only from a
   single, primary, pack in a repository with multiple packfiles.  It
   has been extended to allow reuse from other packfiles, too.

 * Comment updates to help developers not to attempt to modify
   messages from plumbing commands that must stay constant.

   It might make sense to reassess the plumbing needs every few years,
   but that should be done as a separate effort.

 * Move test-ctype helper to the unit-test framework.

 * Instead of manually creating refs/ hierarchy on disk upon a
   creation of a secondary worktree, which is only usable via the
   files backend, use the refs API to populate it.

 * CI for GitLab learned to drive macOS jobs.

 * A few tests to "git commit -o <pathspec>" and "git commit -i
   <pathspec>" has been added.

 * Tests on ref API are moved around to prepare for reftable.

 * The Makefile often had to say "-L$(path) -R$(path)" that repeats
   the path to the same library directory for link time and runtime.
   A Makefile template is used to reduce such repetition.

 * The priority queue test has been migrated to the unit testing
   framework.

 * Setting `feature.experimental` opts the user into multi-pack reuse
   experiment

 * Squelch node.js 16 deprecation warnings from GitHub Actions CI
   by updating actions/github-script and actions/checkout that use
   node.js 20.

 * The mechanism to report the filename in the source code, used by
   the unit-test machinery, assumed that the compiler expanded __FILE__
   to the path to the source given to the $(CC), but some compilers
   give full path, breaking the output.  This has been corrected.


Fixes since v2.43
-----------------

 * The way CI testing used "prove" could lead to running the test
   suite twice needlessly, which has been corrected.

 * Update ref-related tests.

 * "git format-patch --encode-email-headers" ignored the option when
   preparing the cover letter, which has been corrected.

 * Newer versions of Getopt::Long started giving warnings against our
   (ab)use of it in "git send-email".  Bump the minimum version
   requirement for Perl to 5.8.1 (from September 2002) to allow
   simplifying our implementation.

 * Earlier we stopped relying on commit-graph that (still) records
   information about commits that are lost from the object store,
   which has negative performance implications.  The default has been
   flipped to disable this pessimization.

 * Stale URLs have been updated to their current counterparts (or
   archive.org) and HTTP links are replaced with working HTTPS links.

 * trace2 streams used to record the URLs that potentially embed
   authentication material, which has been corrected.

 * The sample pre-commit hook that tries to catch introduction of new
   paths that use potentially non-portable characters did not notice
   an existing path getting renamed to such a problematic path, when
   rename detection was enabled.

 * The command line parser for the "log" family of commands was too
   loose when parsing certain numbers, e.g., silently ignoring the
   extra 'q' in "git log -n 1q" without complaining, which has been
   tightened up.

 * "git $cmd --end-of-options --rev -- --path" for some $cmd failed
   to interpret "--rev" as a rev, and "--path" as a path.  This was
   fixed for many programs like "reset" and "checkout".

 * "git bisect reset" has been taught to clean up state files and refs
   even when BISECT_START file is gone.

 * Some codepaths did not correctly parse configuration variables
   specified with valueless "true", which has been corrected.

 * Code clean-up for sanity checking of command line options for "git
   show-ref".

 * The code to parse the From e-mail header has been updated to avoid
   recursion.

 * "git fetch --atomic" issued an unnecessary empty error message,
   which has been corrected.

 * Command line completion script (in contrib/) learned to work better
   with the reftable backend.

 * "git status" is taught to show both the branch being bisected and
   being rebased when both are in effect at the same time.

 * "git archive --list extra garbage" silently ignored excess command
   line parameters, which has been corrected.

 * "git sparse-checkout set" added default patterns even when the
   patterns are being fed from the standard input, which has been
   corrected.

 * "git sparse-checkout (add|set) --[no-]cone --end-of-options" did
   not handle "--end-of-options" correctly after a recent update.

 * Unlike other environment variables that took the usual
   true/false/yes/no as well as 0/1, GIT_FLUSH only understood 0/1,
   which has been corrected.

 * Clearing in-core repository (happens during e.g., "git fetch
   --recurse-submodules" with commit graph enabled) made in-core
   commit object in an inconsistent state by discarding the necessary
   data from commit-graph too early, which has been corrected.

 * Update to a new feature recently added, "git show-ref --exists".

 * oss-fuzz tests are built and run in CI.
   (merge c4a9cf1df3 js/oss-fuzz-build-in-ci later to maint).

 * Rename detection logic ignored the final line of a file if it is an
   incomplete line.

 * GitHub CI update.
   (merge 0188b2c8e0 pb/ci-github-skip-logs-for-broken-tests later to maint).

 * "git diff --no-rename A B" did not disable rename detection but did
   not trigger an error from the command line parser.

 * "git archive --remote=<remote>" learned to talk over the smart
   http (aka stateless) transport.
   (merge 176cd68634 jx/remote-archive-over-smart-http later to maint).

 * Fetching via protocol v0 over Smart HTTP transport sometimes failed
   to correctly auto-follow tags.
   (merge fba732c462 jk/fetch-auto-tag-following-fix later to maint).

 * The documentation for the --exclude-per-directory option marked it
   as deprecated, which confused readers into thinking there may be a
   plan to remove it in the future, which was not our intention.
   (merge 0009542cab jc/ls-files-doc-update later to maint).

 * "git diff --no-index file1 file2" segfaulted while invoking the
   external diff driver, which has been corrected.

 * Rewrite //-comments to /* comments */ in files whose comments
   prevalently use the latter.

 * Cirrus CI jobs started breaking because we specified version of
   FreeBSD that is no longer available, which has been corrected.
   (merge 81fffb66d3 cb/use-freebsd-13-2-at-cirrus-ci later to maint).

 * A caller called index_file_exists() that takes a string expressed
   as <ptr, length> with a wrong length, which has been corrected.
   (merge 156e28b36d jh/sparse-index-expand-to-path-fix later to maint).

 * A failed "git tag -s" did not necessarily result in an error
   depending on the crypto backend, which has been corrected.

 * "git stash" sometimes was silent even when it failed due to
   unwritable index file, which has been corrected.

 * "git show-ref --verify" did not show things like "CHERRY_PICK_HEAD",
   which has been corrected.

 * Recent conversion to allow more than 0/1 in GIT_FLUSH broke the
   mechanism by flipping what yes/no means by mistake, which has been
   corrected.

 * Other code cleanup, docfix, build fix, etc.
   (merge 5aea3955bc rj/clarify-branch-doc-m later to maint).
   (merge 9cce3be2df bk/bisect-doc-fix later to maint).
   (merge 8430b438f6 vd/fsck-submodule-url-test later to maint).
   (merge 3cb4384683 jc/t0091-with-unknown-git later to maint).

----------------------------------------------------------------

Changes since v2.43.0 are as follows:

Achu Luma (2):
      unit-tests: rewrite t/helper/test-ctype.c as a unit test
      t2400: avoid losing exit status to pipes

Andy Koppe (3):
      rebase: fully ignore rebase.autoSquash without -i
      rebase: support --autosquash without -i
      rebase: rewrite --(no-)autosquash documentation

Antonin Delpeuch (2):
      merge-file: add --diff-algorithm option
      merge-ll: expose revision names to custom drivers

Arthur Chan (1):
      fuzz: add new oss-fuzz fuzzer for date.c / date.h

Britton Leo Kerin (9):
      doc: use singular form of repeatable path arg
      doc: refer to pathspec instead of path
      completion: tests: always use 'master' for default initial branch name
      completion: bisect: complete bad, new, old, and help subcommands
      completion: bisect: complete custom terms and related options
      completion: bisect: complete missing --first-parent and - -no-checkout options
      completion: new function __git_complete_log_opts
      completion: bisect: complete log opts for visualize subcommand
      completion: bisect: recognize but do not complete view subcommand

Carlo Marcelo Arenas Belón (1):
      ci: update FreeBSD cirrus job

Chandra Pratap (4):
      sideband.c: remove redundant 'NEEDSWORK' tag
      write-or-die: make GIT_FLUSH a Boolean environment variable
      t4129: prevent loss of exit code due to the use of pipes
      tests: move t0009-prio-queue.sh to the new unit testing framework

Elijah Newren (32):
      t6429: remove switching aspects of fast-rebase
      replay: introduce new builtin
      replay: start using parse_options API
      replay: die() instead of failing assert()
      replay: introduce pick_regular_commit()
      replay: change rev walking options
      replay: add an important FIXME comment about gpg signing
      replay: remove progress and info output
      replay: remove HEAD related sanity check
      replay: make it a minimal server side command
      replay: use standard revision ranges
      replay: add --advance or 'cherry-pick' mode
      replay: add --contained to rebase contained branches
      replay: stop assuming replayed branches do not diverge
      completion: squelch stray errors in sparse-checkout completion
      completion: fix logic for determining whether cone mode is active
      completion: avoid misleading completions in cone mode
      completion: avoid user confusion in non-cone mode
      treewide: remove unnecessary includes from header files
      treewide: remove unnecessary includes in source files
      archive.h: remove unnecessary include
      blame.h: remove unnecessary includes
      fsmonitor--daemon.h: remove unnecessary includes
      http.h: remove unnecessary include
      line-log.h: remove unnecessary include
      pkt-line.h: remove unnecessary include
      submodule-config.h: remove unnecessary include
      trace2/tr2_tls.h: remove unnecessary include
      treewide: add direct includes currently only pulled in transitively
      treewide: remove unnecessary includes in source files
      sparse-checkout: be consistent with end of options markers
      diffcore-delta: avoid ignoring final 'line' of file

Eric Sunshine (1):
      git-add.txt: add missing short option -A to synopsis

Ghanshyam Thakkar (4):
      t7501: add tests for --include and --only
      t7501: add tests for --amend --signoff
      t0024: avoid losing exit status to pipes
      t0024: style fix

Illia Bobyr (1):
      rebase: clarify --reschedule-failed-exec default

James Touton (1):
      git-p4: use raw string literals for regular expressions

Jean-Noël Avila (2):
      doc: enforce dashes in placeholders
      doc: enforce placeholders in documentation

Jeff Hostetler (4):
      trace2: fix signature of trace2_def_param() macro
      t0211: test URL redacting in PERF format
      t0212: test URL redacting in EVENT format
      sparse-index: pass string length to index_file_exists()

Jeff King (38):
      commit-graph: handle overflow in chunk_size checks
      midx: check consistency of fanout table
      commit-graph: drop redundant call to "lite" verification
      commit-graph: clarify missing-chunk error messages
      commit-graph: abort as soon as we see a bogus chunk
      commit-graph: use fanout value for graph size
      commit-graph: check order while reading fanout chunk
      commit-graph: drop verify_commit_graph_lite()
      commit-graph: mark chunk error messages for translation
      parse-options: decouple "--end-of-options" and "--"
      bisect: always clean on reset
      config: handle NULL value when parsing non-bools
      setup: handle NULL value when parsing extensions
      trace2: handle NULL values in tr2_sysenv config callback
      help: handle NULL value for alias.* config
      submodule: handle NULL value when parsing submodule.*.branch
      trailer: handle NULL value when parsing trailer-specific config
      fsck: handle NULL value when parsing message config
      config: reject bogus values for core.checkstat
      git_xmerge_config(): prefer error() to die()
      imap-send: don't use git_die_config() inside callback
      config: use config_error_nonbool() instead of custom messages
      diff: give more detailed messages for bogus diff.* config
      config: use git_config_string() for core.checkRoundTripEncoding
      push: drop confusing configset/callback redundancy
      gpg-interface: drop pointless config_error_nonbool() checks
      sequencer: simplify away extra git_config_string() call
      mailinfo: fix out-of-bounds memory reads in unquote_quoted_pair()
      t5100: make rfc822 comment test more careful
      mailinfo: avoid recursion when unquoting From headers
      t1006: add tests for %(objectsize:disk)
      commit-graph: retain commit slab when closing NULL commit_graph
      index-pack: spawn threads atomically
      transport-helper: re-examine object dir after fetching
      diff: handle NULL meta-info when spawning external diff
      Makefile: use mkdir_p_parent_template for UNIT_TEST_BIN
      Makefile: remove UNIT_TEST_BIN directory with "make clean"
      t/Makefile: get UNIT_TESTS list from C sources

Jiang Xin (11):
      t5574: test porcelain output of atomic fetch
      fetch: no redundant error message for atomic fetch
      test-pkt-line: add option parser for unpack-sideband
      pkt-line: memorize sideband fragment in reader
      pkt-line: do not chomp newlines for sideband messages
      transport-helper: no connection restriction in connect_helper
      remote-curl: supports git-upload-archive service
      transport-helper: protocol v2 supports upload-archive
      http-backend: new rpc-service for git-upload-archive
      transport-helper: call do_take_over() in connect_helper
      transport-helper: call do_take_over() in process_connect

Joanna Wang (2):
      attr: enable attr pathspec magic for git-add and git-stash
      attr: add builtin objectmode values support

Johannes Schindelin (13):
      artifacts-tar: when including `.dll` files, don't forget the unit-tests
      cmake: fix typo in variable name
      cmake: also build unit tests
      cmake: use test names instead of full paths
      unit-tests: do not mistake `.pdb` files for being executable
      cmake: handle also unit tests
      unit-tests: do show relative file paths
      ci: avoid running the test suite _twice_
      packfile.c: fix a typo in `each_file_in_pack_dir_fn()`'s declaration
      trace2: redact passwords from https:// URLs by default
      win32: special-case `ENOSPC` when writing to a pipe
      ci: bump remaining outdated Actions versions
      ci(linux32): add a note about Actions that must not be updated

John Cai (15):
      t3210: move to t0601
      remove REFFILES prerequisite for some tests in t1405 and t2017
      t1414: convert test to use Git commands instead of writing refs manually
      t1404: move reffiles specific tests to t0600
      t1405: move reffiles specific tests to t0601
      t1406: move reffiles specific tests to t0600
      t1410: move reffiles specific tests to t0600
      t1415: move reffiles specific tests to t0601
      t1503: move reffiles specific tests to t0600
      t3903: make drop stash test ref backend agnostic
      t4202: move reffiles specific tests to t0600
      t5312: move reffiles specific tests to t0601
      reftable: honor core.fsync
      index-pack: test and document --strict=<msg-id>=<severity>...
      index-pack: --fsck-objects to take an optional argument for fsck msgs

Josh Brobst (1):
      builtin/reflog.c: fix dry-run option short name

Josh Soref (13):
      doc: update links to current pages
      doc: switch links to https
      doc: update links for andre-simon.de
      doc: refer to internet archive
      CodingGuidelines: move period inside parentheses
      CodingGuidelines: write punctuation marks
      SubmittingPatches: drop ref to "What's in git.git"
      SubmittingPatches: discourage new trailers
      SubmittingPatches: update extra tags list
      SubmittingPatches: provide tag naming advice
      SubmittingPatches: clarify GitHub visual
      SubmittingPatches: clarify GitHub artifact format
      SubmittingPatches: hyphenate non-ASCII

Josh Steadmon (4):
      unit tests: add a project plan document
      ci: run unit tests in CI
      fuzz: fix fuzz test build rules
      ci: build and run minimal fuzzers in GitHub CI

Julian Prein (1):
      hooks--pre-commit: detect non-ASCII when renaming

Junio C Hamano (55):
      cache: add fake_lstat()
      diff-lib: fix check_removed() when fsmonitor is active
      checkout: refactor die_if_checked_out() caller
      orphan/unborn: add to the glossary and use them consistently
      orphan/unborn: fix use of 'orphan' in end-user facing messages
      revision: parse integer arguments to --max-count, --skip, etc., more carefully
      Start the 2.44 cycle
      checkout: forbid "-B <branch>" from touching a branch used elsewhere
      git.txt: HEAD is not that special
      git-bisect.txt: BISECT_HEAD is not that special
      refs.h: HEAD is not that special
      docs: AUTO_MERGE is not that special
      docs: MERGE_AUTOSTASH is not that special
      doc: format.notes specify a ref under refs/notes/ hierarchy
      The second batch
      remote.h: retire CAS_OPT_NAME
      The third batch
      archive: "--list" does not take further options
      sparse-checkout: use default patterns for 'set' only !stdin
      The fourth batch
      The fifth batch
      The sixth batch
      messages: mark some strings with "up-to-date" not to touch
      The seventh batch
      The eighth batch
      The ninth batch
      Docs: majordomo@vger.kernel.org has been decomissioned
      CoC: whitespace fix
      ls-files: avoid the verb "deprecate" for individual options
      The tenth batch
      builtin/worktree: comment style fixes
      merge-ort.c: comment style fix
      reftable/pq_test: comment style fix
      The eleventh batch
      t0091: allow test in a repository without tags
      The twelfth batch
      Makefile: reduce repetitive library paths
      Makefile: simplify output of the libpath_template
      The thirteenth batch
      GitHub Actions: update to checkout@v4
      GitHub Actions: update to github-script@v7
      t/Makefile: say the default target upfront
      The fourteenth batch
      tag: fix sign_buffer() call to create a signed tag
      bisect: document "terms" subcommand more fully
      bisect: document command line arguments for "bisect start"
      ssh signing: signal an error with a negative return value
      The fifteenth batch
      Git 2.43.1
      Git 2.44-rc0
      unit-tests: do show relative file paths on non-Windows, too
      A few more topics before -rc1
      write-or-die: fix the polarity of GIT_FLUSH environment variable
      A few more fixes before -rc1
      Git 2.43.2

Justin Tobler (2):
      t1401: remove lockfile creation
      t5541: remove lockfile creation

Kristoffer Haugsbakk (5):
      config: format newlines
      config: rename global config function
      config: factor out global config file retrieval
      maintenance: use XDG config if it exists
      config: add back code comment

Kyle Lippincott (1):
      setup: allow cwd=.git w/ bareRepository=explicit

Linus Arver (4):
      commit: ignore_non_trailer computes number of bytes to ignore
      trailer: find the end of the log message
      trailer: use offsets for trailer_start/trailer_end
      strvec: use correct member name in comments

M Hickford (1):
      credential/wincred: store oauth_refresh_token

Maarten van der Schrieck (1):
      Documentation: fix statement about rebase.instructionFormat

Marcel Krause (1):
      doc: make the gitfile syntax easier to discover

Marcelo Roberto Jimenez (1):
      gitweb: die when a configuration file cannot be read

Michael Lohmann (2):
      Documentation/git-merge.txt: fix reference to synopsis
      Documentation/git-merge.txt: use backticks for command wrapping

Nikolay Borisov (1):
      rebase: fix documentation about used shell in -x

Nikolay Edigaryev (1):
      rev-list-options: fix off-by-one in '--filter=blob:limit=<n>' explainer

Patrick Steinhardt (139):
      t: allow skipping expected object ID in `ref-store update-ref`
      t: convert tests to not write references via the filesystem
      t: convert tests to not access symrefs via the filesystem
      t: convert tests to not access reflog via the filesystem
      t1450: convert tests to remove worktrees via git-worktree(1)
      t4207: delete replace references via git-update-ref(1)
      t7300: assert exact states of repo
      t7900: assert the absence of refs via git-for-each-ref(1)
      t: mark several tests that assume the files backend with REFFILES
      ci: reorder definitions for grouping functions
      ci: make grouping setup more generic
      ci: group installation of Docker dependencies
      ci: split out logic to set up failed test artifacts
      ci: unify setup of some environment variables
      ci: squelch warnings when testing with unusable Git repo
      ci: install test dependencies for linux-musl
      ci: add support for GitLab CI
      t/lib-httpd: dynamically detect httpd and modules path
      t/lib-httpd: stop using legacy crypt(3) for authentication
      t9164: fix inability to find basename(1) in Subversion hooks
      global: convert trivial usages of `test <expr> -a/-o <expr>`
      contrib/subtree: stop using `-o` to test for number of args
      contrib/subtree: convert subtree type check to use case statement
      Makefile: stop using `test -o` when unlinking duplicate executables
      t5510: ensure that the packed-refs file needs locking
      refs/files: use transactions to delete references
      refs: deduplicate code to delete references
      refs: remove `delete_refs` callback from backends
      commit-graph: disable GIT_COMMIT_GRAPH_PARANOIA by default
      t0410: mark tests to require the reffiles backend
      t1400: split up generic reflog tests from the reffile-specific ones
      t1401: stop treating FETCH_HEAD as real reference
      t1410: use test-tool to create empty reflog
      t1417: make `reflog --updateref` tests backend agnostic
      t3310: stop checking for reference existence via `test -f`
      t4013: simplify magic parsing and drop "failure"
      t5401: speed up creation of many branches
      t5551: stop writing packed-refs directly
      t6301: write invalid object ID via `test-tool ref-store`
      reftable: wrap EXPECT macros in do/while
      reftable: handle interrupted reads
      reftable: handle interrupted writes
      reftable/stack: verify that `reftable_stack_add()` uses auto-compaction
      reftable/stack: perform auto-compaction with transactional interface
      reftable/stack: reuse buffers when reloading stack
      reftable/stack: fix stale lock when dying
      reftable/stack: fix use of unseeded randomness
      reftable/merged: reuse buffer to compute record keys
      reftable/block: introduce macro to initialize `struct block_iter`
      reftable/block: reuse buffer to compute record keys
      setup: extract function to create the refdb
      setup: allow skipping creation of the refdb
      remote-curl: rediscover repository when fetching refs
      builtin/clone: fix bundle URIs with mismatching object formats
      builtin/clone: set up sparse checkout later
      builtin/clone: skip reading HEAD when retrieving remote
      builtin/clone: create the refdb with the correct object format
      wt-status: read HEAD and ORIG_HEAD via the refdb
      refs: propagate errno when reading special refs fails
      refs: complete list of special refs
      bisect: consistently write BISECT_EXPECTED_REV via the refdb
      tests: adjust whitespace in chainlint expectations
      t: introduce DEFAULT_REPO_FORMAT prereq
      worktree: skip reading HEAD when repairing worktrees
      refs: refactor logic to look up storage backends
      setup: start tracking ref storage format
      setup: set repository's formats on init
      setup: introduce "extensions.refStorage" extension
      setup: introduce GIT_DEFAULT_REF_FORMAT envvar
      t: introduce GIT_TEST_DEFAULT_REF_FORMAT envvar
      builtin/rev-parse: introduce `--show-ref-format` flag
      builtin/init: introduce `--ref-format=` value flag
      builtin/clone: introduce `--ref-format=` value flag
      t9500: write "extensions.refstorage" into config
      reftable/stack: do not overwrite errors when compacting
      reftable/stack: do not auto-compact twice in `reftable_stack_add()`
      reftable/writer: fix index corruption when writing multiple indices
      reftable/record: constify some parts of the interface
      reftable/record: store "val1" hashes as static arrays
      reftable/record: store "val2" hashes as static arrays
      reftable/merged: really reuse buffers to compute record keys
      reftable/merged: transfer ownership of records when iterating
      git-prompt: stop manually parsing HEAD with unknown ref formats
      ci: add job performing static analysis on GitLab CI
      refs: prepare `refs_init_db()` for initializing worktree refs
      setup: move creation of "refs/" into the files backend
      refs/files: skip creation of "refs/{heads,tags}" for worktrees
      builtin/worktree: move setup of commondir file earlier
      worktree: expose interface to look up worktree by name
      builtin/worktree: create refdb via ref backend
      reftable/stack: refactor stack reloading to have common exit path
      reftable/stack: refactor reloading to use file descriptor
      reftable/stack: use stat info to avoid re-reading stack list
      reftable/blocksource: refactor code to match our coding style
      reftable/blocksource: use mmap to read tables
      git-p4: stop reaching into the refdb
      commit-graph: fix memory leak when not writing graph
      completion: discover repo path in `__git_pseudoref_exists ()`
      t9902: verify that completion does not print anything
      completion: improve existence check for pseudo-refs
      completion: silence pseudoref existence check
      completion: treat dangling symrefs as existing pseudorefs
      t7527: decrease likelihood of racing with fsmonitor daemon
      Makefile: detect new Homebrew location for ARM-based Macs
      ci: handle TEST_OUTPUT_DIRECTORY when printing test failures
      ci: make p4 setup on macOS more robust
      ci: add macOS jobs to GitLab CI
      reftable/stack: unconditionally reload stack after commit
      reftable/stack: fix race in up-to-date check
      sequencer: clean up pseudo refs with REF_NO_DEREF
      sequencer: delete REBASE_HEAD in correct repo when picking commits
      refs: convert AUTO_MERGE to become a normal pseudo-ref
      sequencer: introduce functions to handle autostashes via refs
      refs: convert MERGE_AUTOSTASH to become a normal pseudo-ref
      refs: redefine special refs
      Documentation: add "special refs" to the glossary
      reftable/stack: adjust permissions of compacted tables
      t1300: make tests more robust with non-default ref backends
      t1301: mark test for `core.sharedRepository` as reffiles specific
      t1302: make tests more robust with new extensions
      t1419: mark test suite as files-backend specific
      t5526: break test submodule differently
      t: mark tests regarding git-pack-refs(1) to be backend specific
      reftable/stack: fsync "tables.list" during compaction
      reftable/reader: be more careful about errors in indexed seeks
      reftable/writer: use correct type to iterate through index entries
      reftable/writer: simplify writing index records
      reftable/writer: fix writing multi-level indices
      reftable: document reading and writing indices
      builtin/stash: report failure to write to index
      reftable: introduce macros to grow arrays
      reftable: introduce macros to allocate arrays
      reftable/stack: fix parameter validation when compacting range
      reftable/stack: index segments with `size_t`
      reftable/stack: use `size_t` to track stack slices during compaction
      reftable/stack: use `size_t` to track stack length
      reftable/merged: refactor seeking of records
      reftable/merged: refactor initialization of iterators
      reftable/record: improve semantics when initializing records

Philippe Blain (7):
      completion: complete missing rev-list options
      completion: complete --patch-with-raw
      completion: complete --encoding
      completion: complete missing 'git log' options
      ci(github): also skip logs of broken test cases
      imap-send: add missing "strbuf.h" include under NO_CURL
      .github/PULL_REQUEST_TEMPLATE.md: add a note about single-commit PRs

Phillip Wood (3):
      unit tests: add TAP unit test framework
      show-ref --verify: accept pseudorefs
      t1400: use show-ref to check pseudorefs

René Scharfe (19):
      column: release strbuf and string_list after use
      i18n: factorize even more 'incompatible options' messages
      push: use die_for_incompatible_opt4() for - -delete/--tags/--all/--mirror
      repack: use die_for_incompatible_opt3() for -A/-k/--cruft
      revision: use die_for_incompatible_opt3() for - -graph/--reverse/--walk-reflogs
      revision, rev-parse: factorize incompatibility messages about - -exclude-hidden
      clean: factorize incompatibility message
      worktree: standardize incompatibility messages
      worktree: simplify incompatibility message for --orphan and commit-ish
      show-ref: use die_for_incompatible_opt3()
      t6300: avoid hard-coding object sizes
      git-compat-util: convert skip_{prefix,suffix}{,_mem} to bool
      rebase: use strvec_pushf() for format-patch revisions
      fast-import: use mem_pool_calloc()
      mem-pool: fix big allocations
      mem-pool: simplify alignment calculation
      t1006: prefer shell loop to awk for packed object sizes
      parse-options: fully disable option abbreviation with PARSE_OPT_KEEP_UNKNOWN
      parse-options: simplify positivation handling

Rubén Justo (10):
      status: fix branch shown when not only bisecting
      branch: clarify <oldbranch> term
      advice: sort the advice related lists
      advice: fix an unexpected leading space
      branch: make the advice to force-deleting a conditional one
      advice: allow disabling the automatic hint in advise_if_enabled()
      t5332: mark as leak-free
      t6113: mark as leak-free
      test-lib: check for TEST_PASSES_SANITIZE_LEAK
      t0080: mark as leak-free

Sam Delmerico (1):
      push: region_leave trace for negotiate_using_fetch

Shreyansh Paliwal (1):
      test-lib-functions.sh: fix test_grep fail message wording

Simon Ser (1):
      format-patch: fix ignored encode_email_headers for cover letter

Stan Hu (2):
      completion: refactor existence checks for pseudorefs
      completion: support pseudoref existence checks for reftables

Sören Krecker (1):
      mingw: give more details about unsafe directory's ownership

Tamino Bauknecht (1):
      fetch: add new config option fetch.all

Taylor Blau (29):
      pack-objects: free packing_data in more places
      pack-bitmap-write: deep-clear the `bb_commit` slab
      pack-bitmap: plug leak in find_objects()
      midx: factor out `fill_pack_info()`
      midx: implement `BTMP` chunk
      midx: implement `midx_locate_pack()`
      pack-bitmap: pass `bitmapped_pack` struct to pack-reuse functions
      ewah: implement `bitmap_is_empty()`
      pack-bitmap: simplify `reuse_partial_packfile_from_bitmap()` signature
      pack-bitmap: return multiple packs via `reuse_partial_packfile_from_bitmap()`
      pack-objects: parameterize pack-reuse routines over a single pack
      pack-objects: keep track of `pack_start` for each reuse pack
      pack-objects: pass `bitmapped_pack`'s to pack-reuse functions
      pack-objects: prepare `write_reused_pack()` for multi-pack reuse
      pack-objects: prepare `write_reused_pack_verbatim()` for multi-pack reuse
      pack-objects: include number of packs reused in output
      git-compat-util.h: implement checked size_t to uint32_t conversion
      midx: implement `midx_preferred_pack()`
      pack-revindex: factor out `midx_key_to_pack_pos()` helper
      pack-revindex: implement `midx_pair_to_pack_pos()`
      pack-bitmap: prepare to mark objects from multiple packs for reuse
      pack-objects: add tracing for various packfile metrics
      t/test-lib-functions.sh: implement `test_trace2_data` helper
      pack-objects: allow setting `pack.allowPackReuse` to "single"
      pack-bitmap: enable reuse from all bitmapped packs
      t/perf: add performance tests for multi-pack reuse
      pack-bitmap: drop unused `reuse_objects`
      t5332-multi-pack-reuse.sh: extract pack-objects helper functions
      pack-objects: enable multi-pack reuse via `feature.experimental`

Todd Zullinger (2):
      perl: bump the required Perl version to 5.8.1 from 5.8.0
      send-email: avoid duplicate specification warnings

Toon Claes (1):
      builtin/show-ref: treat directory as non-existing in --exists

Victoria Dye (15):
      ref-filter.c: really don't sort when using --no-sort
      ref-filter.h: add max_count and omit_empty to ref_format
      ref-filter.h: move contains caches into filter
      ref-filter.h: add functions for filter/format & format-only
      ref-filter.c: rename 'ref_filter_handler()' to 'filter_one()'
      ref-filter.c: refactor to create common helper functions
      ref-filter.c: filter & format refs in the same callback
      for-each-ref: clean up documentation of --format
      ref-filter.c: use peeled tag for '*' format fields
      t/perf: add perf tests for for-each-ref
      submodule-config.h: move check_submodule_url
      test-submodule: remove command line handling for check-name
      t7450: test submodule urls
      submodule-config.c: strengthen URL fsck check
      ref-filter.c: sort formatted dates by byte value

Zach FettersMoore (1):
      subtree: fix split processing with multiple subtrees present



^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.44.0-rc0
@ 2024-02-09 17:24  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2024-02-09 17:24 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

An early preview release Git v2.44.0-rc0 is now available for
testing at the usual places.  It is comprised of 432 non-merge
commits since v2.43.0, contributed by 67 people, 30 of which are new
faces [*].  Unlike previous cycles, I plan only for one release
candidate in the middle of next week until the final release around
the 20th.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.44.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.43.0 are as follows.
Welcome to the Git development community!

  Achu Luma, Antonin Delpeuch, Benjamin Lehmann, Britton Leo Kerin,
  Carlos Andrés Ramírez Cataño, Chandra Pratap, Ghanshyam
  Thakkar, Illia Bobyr, James Touton, Janik Haag, Joanna Wang,
  Josh Brobst, Julian Prein, Justin Tobler, Kyle Lippincott,
  Maarten van der Schrieck, Marcel Krause, Marcelo Roberto Jimenez,
  Michael Lohmann, Nikolay Borisov, Nikolay Edigaryev, Ondrej
  Pohorelsky, Sam Delmerico, Shreyansh Paliwal, Sören Krecker,
  Stan Hu, Tamino Bauknecht, Wilfred Hughes, Willem Verstraeten,
  and Zach FettersMoore.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Andy Koppe, Arthur Chan, Calvin Wan, Carlo Marcelo Arenas Belón,
  Christian Couder, Dragan Simic, Elijah Newren, Eric Sunshine,
  Glen Choo, Han-Wen Nienhuys, Jean-Noël Avila, Jeff Hostetler,
  Jeff King, Jiang Xin, Johannes Schindelin, John Cai, Jonathan
  Tan, Josh Soref, Josh Steadmon, Josip Sokcevic, Junio C Hamano,
  Konstantin Ryabitsev, Kristoffer Haugsbakk, Linus Arver,
  M Hickford, Oswald Buddenhagen, Patrick Steinhardt, Philippe
  Blain, Phillip Wood, René Scharfe, Rubén Justo, Simon Ser,
  SZEDER Gábor, Taylor Blau, Todd Zullinger, Toon Claes, and
  Victoria Dye.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.44 Release Notes (draft)
===============================

Backward Compatibility Notes

 * "git chekcout -B <branch>" used to allow switching to a branch that
   is in use on another worktree, but this was by mistake.  The users
   need to use "--ignore-other-worktrees" option.


UI, Workflows & Features

 * "git add" and "git stash" learned to support the ":(attr:...)"
   magic pathspec.

 * "git rebase --autosquash" is now enabled for non-interactive rebase,
   but it is still incompatible with the apply backend.

 * Introduce "git replay", a tool meant on the server side without
   working tree to recreate a history.

 * "git merge-file" learned to take the "--diff-algorithm" option to
   use algorithm different from the default "myers" diff.

 * Command line completion (in contrib/) learned to complete path
   arguments to the "add/set" subcommands of "git sparse-checkout"
   better.

 * "git checkout -B <branch> [<start-point>]" allowed a branch that is
   in use in another worktree to be updated and checked out, which
   might be a bit unexpected.  The rule has been tightened, which is a
   breaking change.  "--ignore-other-worktrees" option is required to
   unbreak you, if you are used to the current behaviour that "-B"
   overrides the safety.

 * The builtin_objectmode attribute is populated for each path
   without adding anything in .gitattributes files, which would be
   useful in magic pathspec, e.g., ":(attr:builtin_objectmode=100755)"
   to limit to executables.

 * "git fetch" learned to pay attention to "fetch.all" configuration
   variable, which pretends as if "--all" was passed from the command
   line when no remote parameter was given.

 * In addition to (rather cryptic) Security Identifiers, show username
   and domain in the error message when we barf on mismatch between
   the Git directory and the current user on Windows.

 * The error message given when "git branch -d branch" fails due to
   commits unique to the branch has been split into an error and a new
   conditional advice message.

 * When given an existing but unreadable file as a configuration file,
   gitweb behaved as if the file did not exist at all, but now it
   errors out.  This is a change that may break backward compatibility.

 * When $HOME/.gitignore is missing but XDG config file available, we
   should write into the latter, not former.  "git gc" and "git
   maintenance" wrote into a wrong "global config" file, which have
   been corrected.

 * Define "special ref" as a very narrow set that consists of
   FETCH_HEAD and MERGE_HEAD, and clarify everything else that used to
   be classified as such are actually just pseudorefs.

 * All conditional "advice" messages show how to turn them off, which
   becomes repetitive.  Setting advice.* configuration explicitly on
   now omits the instruction part.

 * The "disable repository discovery of a bare repository" check,
   triggered by setting safe.bareRepository configuration variable to
   'explicit', has been loosened to exclude the ".git/" directory inside
   a non-bare repository from the check.  So you can do "cd .git &&
   git cmd" to run a Git command that works on a bare repository without
   explicitly specifying $GIT_DIR now.

 * The completion script (in contrib/) learned more options that can
   be used with "git log".

 * The labels on conflict markers for the common ancestor, our version,
   and the other version are available to custom 3-way merge driver
   via %S, %X, and %Y placeholders.

 * The write codepath for the reftable data learned to honor
   core.fsync configuration.

 * The "--fsck-objects" option of "git index-pack" now can take the
   optional parameter to tweak severity of different fsck errors.

 * The wincred credential backend has been taught to support oauth
   refresh token the same way as credential-cache and
   credential-libsecret backends.


Performance, Internal Implementation, Development Support etc.

 * Process to add some form of low-level unit tests has started.

 * Add support for GitLab CI.

 * "git for-each-ref --no-sort" still sorted the refs alphabetically
   which paid non-trivial cost.  It has been redefined to show output
   in an unspecified order, to allow certain optimizations to take
   advantage of.

 * Simplify API implementation to delete references by eliminating
   duplication.

 * Subject approxidate() and show_date() machinery to OSS-Fuzz.

 * A new helper to let us pretend that we called lstat() when we know
   our cache_entry is up-to-date via fsmonitor.

 * The optimization based on fsmonitor in the "diff --cached"
   codepath is resurrected with the "fake-lstat" introduced earlier.

 * Test balloon to use C99 "bool" type from <stdbool.h> has been
   added.

 * "git clone" has been prepared to allow cloning a repository with
   non-default hash function into a repository that uses the reftable
   backend.

 * Streaming spans of packfile data used to be done only from a
   single, primary, pack in a repository with multiple packfiles.  It
   has been extended to allow reuse from other packfiles, too.

 * Comment updates to help developers not to attempt to modify
   messages from plumbing commands that must stay constant.

   It might make sense to reassess the plumbing needs every few years,
   but that should be done as a separate effort.

 * Move test-ctype helper to the unit-test framework.

 * Instead of manually creating refs/ hierarchy on disk upon a
   creation of a secondary worktree, which is only usable via the
   files backend, use the refs API to populate it.

 * CI for GitLab learned to drive macOS jobs.

 * A few tests to "git commit -o <pathspec>" and "git commit -i
   <pathspec>" has been added.

 * Tests on ref API are moved around to prepare for reftable.

 * The Makefile often had to say "-L$(path) -R$(path)" that repeats
   the path to the same library directory for link time and runtime.
   A Makefile template is used to reduce such repetition.

 * The priority queue test has been migrated to the unit testing
   framework.


Fixes since v2.43
-----------------

 * The way CI testing used "prove" could lead to running the test
   suite twice needlessly, which has been corrected.

 * Update ref-related tests.

 * "git format-patch --encode-email-headers" ignored the option when
   preparing the cover letter, which has been corrected.

 * Newer versions of Getopt::Long started giving warnings against our
   (ab)use of it in "git send-email".  Bump the minimum version
   requirement for Perl to 5.8.1 (from September 2002) to allow
   simplifying our implementation.

 * Earlier we stopped relying on commit-graph that (still) records
   information about commits that are lost from the object store,
   which has negative performance implications.  The default has been
   flipped to disable this pessimization.

 * Stale URLs have been updated to their current counterparts (or
   archive.org) and HTTP links are replaced with working HTTPS links.

 * trace2 streams used to record the URLs that potentially embed
   authentication material, which has been corrected.

 * The sample pre-commit hook that tries to catch introduction of new
   paths that use potentially non-portable characters did not notice
   an existing path getting renamed to such a problematic path, when
   rename detection was enabled.

 * The command line parser for the "log" family of commands was too
   loose when parsing certain numbers, e.g., silently ignoring the
   extra 'q' in "git log -n 1q" without complaining, which has been
   tightened up.

 * "git $cmd --end-of-options --rev -- --path" for some $cmd failed
   to interpret "--rev" as a rev, and "--path" as a path.  This was
   fixed for many programs like "reset" and "checkout".

 * "git bisect reset" has been taught to clean up state files and refs
   even when BISECT_START file is gone.

 * Some codepaths did not correctly parse configuration variables
   specified with valueless "true", which has been corrected.

 * Code clean-up for sanity checking of command line options for "git
   show-ref".

 * The code to parse the From e-mail header has been updated to avoid
   recursion.

 * "git fetch --atomic" issued an unnecessary empty error message,
   which has been corrected.

 * Command line completion script (in contrib/) learned to work better
   with the reftable backend.

 * "git status" is taught to show both the branch being bisected and
   being rebased when both are in effect at the same time.

 * "git archive --list extra garbage" silently ignored excess command
   line parameters, which has been corrected.

 * "git sparse-checkout set" added default patterns even when the
   patterns are being fed from the standard input, which has been
   corrected.

 * "git sparse-checkout (add|set) --[no-]cone --end-of-options" did
   not handle "--end-of-options" correctly after a recent update.

 * Unlike other environment variables that took the usual
   true/false/yes/no as well as 0/1, GIT_FLUSH only understood 0/1,
   which has been corrected.

 * Clearing in-core repository (happens during e.g., "git fetch
   --recurse-submodules" with commit graph enabled) made in-core
   commit object in an inconsistent state by discarding the necessary
   data from commit-graph too early, which has been corrected.

 * Update to a new feature recently added, "git show-ref --exists".
   (merge 0aabeaa562 tc/show-ref-exists-fix later to maint).

 * oss-fuzz tests are built and run in CI.
   (merge c4a9cf1df3 js/oss-fuzz-build-in-ci later to maint).

 * Rename detection logic ignored the final line of a file if it is an
   incomplete line.
   (merge 1c5bc6971e en/diffcore-delta-final-line-fix later to maint).

 * GitHub CI update.
   (merge 0188b2c8e0 pb/ci-github-skip-logs-for-broken-tests later to maint).

 * "git diff --no-rename A B" did not disable rename detection but did
   not trigger an error from the command line parser.
   (merge 457f96252f rs/parse-options-with-keep-unknown-abbrev-fix later to maint).

 * "git archive --remote=<remote>" learned to talk over the smart
   http (aka stateless) transport.
   (merge 176cd68634 jx/remote-archive-over-smart-http later to maint).

 * Fetching via protocol v0 over Smart HTTP transport sometimes failed
   to correctly auto-follow tags.
   (merge fba732c462 jk/fetch-auto-tag-following-fix later to maint).

 * The documentation for the --exclude-per-directory option marked it
   as deprecated, which confused readers into thinking there may be a
   plan to remove it in the future, which was not our intention.
   (merge 0009542cab jc/ls-files-doc-update later to maint).

 * "git diff --no-index file1 file2" segfaulted while invoking the
   external diff driver, which has been corrected.
   (merge 85a9a63c92 jk/diff-external-with-no-index later to maint).

 * Rewrite //-comments to /* comments */ in files whose comments
   prevalently use the latter.
   (merge de65079d7b jc/comment-style-fixes later to maint).

 * Cirrus CI jobs started breaking because we specified version of
   FreeBSD that is no longer available, which has been corrected.
   (merge 81fffb66d3 cb/use-freebsd-13-2-at-cirrus-ci later to maint).

 * A caller called index_file_exists() that takes a string expressed
   as <ptr, length> with a wrong length, which has been corrected.
   (merge 156e28b36d jh/sparse-index-expand-to-path-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 5aea3955bc rj/clarify-branch-doc-m later to maint).
   (merge 9cce3be2df bk/bisect-doc-fix later to maint).
   (merge 8f50984cf4 ne/doc-filter-blob-limit-fix later to maint).
   (merge f10b0989b8 la/strvec-comment-fix later to maint).
   (merge 8430b438f6 vd/fsck-submodule-url-test later to maint).
   (merge f10031fadd nb/rebase-x-shell-docfix later to maint).
   (merge af3d2c160f jc/majordomo-to-subspace later to maint).
   (merge ee9895b0ff sd/negotiate-trace-fix later to maint).
   (merge 976d0251ce jc/coc-whitespace-fix later to maint).
   (merge 9023198280 jt/p4-spell-re-with-raw-string later to maint).
   (merge 36c9c44fa4 tb/pack-bitmap-drop-unused-struct-member later to maint).
   (merge 19ed0dff8f js/win32-retry-pipe-write-on-enospc later to maint).
   (merge 3cb4384683 jc/t0091-with-unknown-git later to maint).

----------------------------------------------------------------

Changes since v2.43.0 are as follows:

Achu Luma (2):
      unit-tests: rewrite t/helper/test-ctype.c as a unit test
      t2400: avoid losing exit status to pipes

Andy Koppe (3):
      rebase: fully ignore rebase.autoSquash without -i
      rebase: support --autosquash without -i
      rebase: rewrite --(no-)autosquash documentation

Antonin Delpeuch (2):
      merge-file: add --diff-algorithm option
      merge-ll: expose revision names to custom drivers

Arthur Chan (1):
      fuzz: add new oss-fuzz fuzzer for date.c / date.h

Britton Leo Kerin (2):
      doc: use singular form of repeatable path arg
      doc: refer to pathspec instead of path

Carlo Marcelo Arenas Belón (1):
      ci: update FreeBSD cirrus job

Chandra Pratap (4):
      sideband.c: remove redundant 'NEEDSWORK' tag
      write-or-die: make GIT_FLUSH a Boolean environment variable
      t4129: prevent loss of exit code due to the use of pipes
      tests: move t0009-prio-queue.sh to the new unit testing framework

Elijah Newren (32):
      t6429: remove switching aspects of fast-rebase
      replay: introduce new builtin
      replay: start using parse_options API
      replay: die() instead of failing assert()
      replay: introduce pick_regular_commit()
      replay: change rev walking options
      replay: add an important FIXME comment about gpg signing
      replay: remove progress and info output
      replay: remove HEAD related sanity check
      replay: make it a minimal server side command
      replay: use standard revision ranges
      replay: add --advance or 'cherry-pick' mode
      replay: add --contained to rebase contained branches
      replay: stop assuming replayed branches do not diverge
      completion: squelch stray errors in sparse-checkout completion
      completion: fix logic for determining whether cone mode is active
      completion: avoid misleading completions in cone mode
      completion: avoid user confusion in non-cone mode
      treewide: remove unnecessary includes from header files
      treewide: remove unnecessary includes in source files
      archive.h: remove unnecessary include
      blame.h: remove unnecessary includes
      fsmonitor--daemon.h: remove unnecessary includes
      http.h: remove unnecessary include
      line-log.h: remove unnecessary include
      pkt-line.h: remove unnecessary include
      submodule-config.h: remove unnecessary include
      trace2/tr2_tls.h: remove unnecessary include
      treewide: add direct includes currently only pulled in transitively
      treewide: remove unnecessary includes in source files
      sparse-checkout: be consistent with end of options markers
      diffcore-delta: avoid ignoring final 'line' of file

Eric Sunshine (1):
      git-add.txt: add missing short option -A to synopsis

Ghanshyam Thakkar (4):
      t7501: add tests for --include and --only
      t7501: add tests for --amend --signoff
      t0024: avoid losing exit status to pipes
      t0024: style fix

Illia Bobyr (1):
      rebase: clarify --reschedule-failed-exec default

James Touton (1):
      git-p4: use raw string literals for regular expressions

Jean-Noël Avila (2):
      doc: enforce dashes in placeholders
      doc: enforce placeholders in documentation

Jeff Hostetler (4):
      trace2: fix signature of trace2_def_param() macro
      t0211: test URL redacting in PERF format
      t0212: test URL redacting in EVENT format
      sparse-index: pass string length to index_file_exists()

Jeff King (38):
      commit-graph: handle overflow in chunk_size checks
      midx: check consistency of fanout table
      commit-graph: drop redundant call to "lite" verification
      commit-graph: clarify missing-chunk error messages
      commit-graph: abort as soon as we see a bogus chunk
      commit-graph: use fanout value for graph size
      commit-graph: check order while reading fanout chunk
      commit-graph: drop verify_commit_graph_lite()
      commit-graph: mark chunk error messages for translation
      parse-options: decouple "--end-of-options" and "--"
      bisect: always clean on reset
      config: handle NULL value when parsing non-bools
      setup: handle NULL value when parsing extensions
      trace2: handle NULL values in tr2_sysenv config callback
      help: handle NULL value for alias.* config
      submodule: handle NULL value when parsing submodule.*.branch
      trailer: handle NULL value when parsing trailer-specific config
      fsck: handle NULL value when parsing message config
      config: reject bogus values for core.checkstat
      git_xmerge_config(): prefer error() to die()
      imap-send: don't use git_die_config() inside callback
      config: use config_error_nonbool() instead of custom messages
      diff: give more detailed messages for bogus diff.* config
      config: use git_config_string() for core.checkRoundTripEncoding
      push: drop confusing configset/callback redundancy
      gpg-interface: drop pointless config_error_nonbool() checks
      sequencer: simplify away extra git_config_string() call
      mailinfo: fix out-of-bounds memory reads in unquote_quoted_pair()
      t5100: make rfc822 comment test more careful
      mailinfo: avoid recursion when unquoting From headers
      t1006: add tests for %(objectsize:disk)
      commit-graph: retain commit slab when closing NULL commit_graph
      index-pack: spawn threads atomically
      transport-helper: re-examine object dir after fetching
      diff: handle NULL meta-info when spawning external diff
      Makefile: use mkdir_p_parent_template for UNIT_TEST_BIN
      Makefile: remove UNIT_TEST_BIN directory with "make clean"
      t/Makefile: get UNIT_TESTS list from C sources

Jiang Xin (11):
      t5574: test porcelain output of atomic fetch
      fetch: no redundant error message for atomic fetch
      test-pkt-line: add option parser for unpack-sideband
      pkt-line: memorize sideband fragment in reader
      pkt-line: do not chomp newlines for sideband messages
      transport-helper: no connection restriction in connect_helper
      remote-curl: supports git-upload-archive service
      transport-helper: protocol v2 supports upload-archive
      http-backend: new rpc-service for git-upload-archive
      transport-helper: call do_take_over() in connect_helper
      transport-helper: call do_take_over() in process_connect

Joanna Wang (2):
      attr: enable attr pathspec magic for git-add and git-stash
      attr: add builtin objectmode values support

Johannes Schindelin (11):
      cmake: also build unit tests
      unit-tests: do not mistake `.pdb` files for being executable
      unit-tests: do show relative file paths
      artifacts-tar: when including `.dll` files, don't forget the unit-tests
      cmake: fix typo in variable name
      cmake: use test names instead of full paths
      cmake: handle also unit tests
      ci: avoid running the test suite _twice_
      packfile.c: fix a typo in `each_file_in_pack_dir_fn()`'s declaration
      trace2: redact passwords from https:// URLs by default
      win32: special-case `ENOSPC` when writing to a pipe

John Cai (15):
      t3210: move to t0601
      remove REFFILES prerequisite for some tests in t1405 and t2017
      t1414: convert test to use Git commands instead of writing refs manually
      t1404: move reffiles specific tests to t0600
      t1405: move reffiles specific tests to t0601
      t1406: move reffiles specific tests to t0600
      t1410: move reffiles specific tests to t0600
      t1415: move reffiles specific tests to t0601
      t1503: move reffiles specific tests to t0600
      t3903: make drop stash test ref backend agnostic
      t4202: move reffiles specific tests to t0600
      t5312: move reffiles specific tests to t0601
      reftable: honor core.fsync
      index-pack: test and document --strict=<msg-id>=<severity>...
      index-pack: --fsck-objects to take an optional argument for fsck msgs

Josh Brobst (1):
      builtin/reflog.c: fix dry-run option short name

Josh Soref (13):
      doc: update links to current pages
      doc: switch links to https
      doc: update links for andre-simon.de
      doc: refer to internet archive
      CodingGuidelines: move period inside parentheses
      CodingGuidelines: write punctuation marks
      SubmittingPatches: drop ref to "What's in git.git"
      SubmittingPatches: discourage new trailers
      SubmittingPatches: update extra tags list
      SubmittingPatches: provide tag naming advice
      SubmittingPatches: clarify GitHub visual
      SubmittingPatches: clarify GitHub artifact format
      SubmittingPatches: hyphenate non-ASCII

Josh Steadmon (4):
      unit tests: add a project plan document
      ci: run unit tests in CI
      fuzz: fix fuzz test build rules
      ci: build and run minimal fuzzers in GitHub CI

Julian Prein (1):
      hooks--pre-commit: detect non-ASCII when renaming

Junio C Hamano (44):
      cache: add fake_lstat()
      diff-lib: fix check_removed() when fsmonitor is active
      checkout: refactor die_if_checked_out() caller
      orphan/unborn: add to the glossary and use them consistently
      orphan/unborn: fix use of 'orphan' in end-user facing messages
      revision: parse integer arguments to --max-count, --skip, etc., more carefully
      Start the 2.44 cycle
      checkout: forbid "-B <branch>" from touching a branch used elsewhere
      git.txt: HEAD is not that special
      git-bisect.txt: BISECT_HEAD is not that special
      refs.h: HEAD is not that special
      docs: AUTO_MERGE is not that special
      docs: MERGE_AUTOSTASH is not that special
      doc: format.notes specify a ref under refs/notes/ hierarchy
      The second batch
      remote.h: retire CAS_OPT_NAME
      The third batch
      archive: "--list" does not take further options
      sparse-checkout: use default patterns for 'set' only !stdin
      The fourth batch
      The fifth batch
      The sixth batch
      messages: mark some strings with "up-to-date" not to touch
      The seventh batch
      The eighth batch
      The ninth batch
      Docs: majordomo@vger.kernel.org has been decomissioned
      CoC: whitespace fix
      ls-files: avoid the verb "deprecate" for individual options
      The tenth batch
      builtin/worktree: comment style fixes
      merge-ort.c: comment style fix
      reftable/pq_test: comment style fix
      The eleventh batch
      t0091: allow test in a repository without tags
      The twelfth batch
      Makefile: reduce repetitive library paths
      Makefile: simplify output of the libpath_template
      The thirteenth batch
      t/Makefile: say the default target upfront
      The fourteenth batch
      The fifteenth batch
      Git 2.43.1
      Git 2.44-rc0

Justin Tobler (2):
      t1401: remove lockfile creation
      t5541: remove lockfile creation

Kristoffer Haugsbakk (5):
      config: format newlines
      config: rename global config function
      config: factor out global config file retrieval
      maintenance: use XDG config if it exists
      config: add back code comment

Kyle Lippincott (1):
      setup: allow cwd=.git w/ bareRepository=explicit

Linus Arver (4):
      commit: ignore_non_trailer computes number of bytes to ignore
      trailer: find the end of the log message
      trailer: use offsets for trailer_start/trailer_end
      strvec: use correct member name in comments

M Hickford (1):
      credential/wincred: store oauth_refresh_token

Maarten van der Schrieck (1):
      Documentation: fix statement about rebase.instructionFormat

Marcel Krause (1):
      doc: make the gitfile syntax easier to discover

Marcelo Roberto Jimenez (1):
      gitweb: die when a configuration file cannot be read

Michael Lohmann (2):
      Documentation/git-merge.txt: fix reference to synopsis
      Documentation/git-merge.txt: use backticks for command wrapping

Nikolay Borisov (1):
      rebase: fix documentation about used shell in -x

Nikolay Edigaryev (1):
      rev-list-options: fix off-by-one in '--filter=blob:limit=<n>' explainer

Patrick Steinhardt (124):
      t: allow skipping expected object ID in `ref-store update-ref`
      t: convert tests to not write references via the filesystem
      t: convert tests to not access symrefs via the filesystem
      t: convert tests to not access reflog via the filesystem
      t1450: convert tests to remove worktrees via git-worktree(1)
      t4207: delete replace references via git-update-ref(1)
      t7300: assert exact states of repo
      t7900: assert the absence of refs via git-for-each-ref(1)
      t: mark several tests that assume the files backend with REFFILES
      ci: reorder definitions for grouping functions
      ci: make grouping setup more generic
      ci: group installation of Docker dependencies
      ci: split out logic to set up failed test artifacts
      ci: unify setup of some environment variables
      ci: squelch warnings when testing with unusable Git repo
      ci: install test dependencies for linux-musl
      ci: add support for GitLab CI
      t/lib-httpd: dynamically detect httpd and modules path
      t/lib-httpd: stop using legacy crypt(3) for authentication
      t9164: fix inability to find basename(1) in Subversion hooks
      global: convert trivial usages of `test <expr> -a/-o <expr>`
      contrib/subtree: stop using `-o` to test for number of args
      contrib/subtree: convert subtree type check to use case statement
      Makefile: stop using `test -o` when unlinking duplicate executables
      t5510: ensure that the packed-refs file needs locking
      refs/files: use transactions to delete references
      refs: deduplicate code to delete references
      refs: remove `delete_refs` callback from backends
      commit-graph: disable GIT_COMMIT_GRAPH_PARANOIA by default
      t0410: mark tests to require the reffiles backend
      t1400: split up generic reflog tests from the reffile-specific ones
      t1401: stop treating FETCH_HEAD as real reference
      t1410: use test-tool to create empty reflog
      t1417: make `reflog --updateref` tests backend agnostic
      t3310: stop checking for reference existence via `test -f`
      t4013: simplify magic parsing and drop "failure"
      t5401: speed up creation of many branches
      t5551: stop writing packed-refs directly
      t6301: write invalid object ID via `test-tool ref-store`
      reftable: wrap EXPECT macros in do/while
      reftable: handle interrupted reads
      reftable: handle interrupted writes
      reftable/stack: verify that `reftable_stack_add()` uses auto-compaction
      reftable/stack: perform auto-compaction with transactional interface
      reftable/stack: reuse buffers when reloading stack
      reftable/stack: fix stale lock when dying
      reftable/stack: fix use of unseeded randomness
      reftable/merged: reuse buffer to compute record keys
      reftable/block: introduce macro to initialize `struct block_iter`
      reftable/block: reuse buffer to compute record keys
      setup: extract function to create the refdb
      setup: allow skipping creation of the refdb
      remote-curl: rediscover repository when fetching refs
      builtin/clone: fix bundle URIs with mismatching object formats
      builtin/clone: set up sparse checkout later
      builtin/clone: skip reading HEAD when retrieving remote
      builtin/clone: create the refdb with the correct object format
      wt-status: read HEAD and ORIG_HEAD via the refdb
      refs: propagate errno when reading special refs fails
      refs: complete list of special refs
      bisect: consistently write BISECT_EXPECTED_REV via the refdb
      tests: adjust whitespace in chainlint expectations
      t: introduce DEFAULT_REPO_FORMAT prereq
      worktree: skip reading HEAD when repairing worktrees
      refs: refactor logic to look up storage backends
      setup: start tracking ref storage format
      setup: set repository's formats on init
      setup: introduce "extensions.refStorage" extension
      setup: introduce GIT_DEFAULT_REF_FORMAT envvar
      t: introduce GIT_TEST_DEFAULT_REF_FORMAT envvar
      builtin/rev-parse: introduce `--show-ref-format` flag
      builtin/init: introduce `--ref-format=` value flag
      builtin/clone: introduce `--ref-format=` value flag
      t9500: write "extensions.refstorage" into config
      reftable/stack: do not overwrite errors when compacting
      reftable/stack: do not auto-compact twice in `reftable_stack_add()`
      reftable/writer: fix index corruption when writing multiple indices
      reftable/record: constify some parts of the interface
      reftable/record: store "val1" hashes as static arrays
      reftable/record: store "val2" hashes as static arrays
      reftable/merged: really reuse buffers to compute record keys
      reftable/merged: transfer ownership of records when iterating
      git-prompt: stop manually parsing HEAD with unknown ref formats
      ci: add job performing static analysis on GitLab CI
      refs: prepare `refs_init_db()` for initializing worktree refs
      setup: move creation of "refs/" into the files backend
      refs/files: skip creation of "refs/{heads,tags}" for worktrees
      builtin/worktree: move setup of commondir file earlier
      worktree: expose interface to look up worktree by name
      builtin/worktree: create refdb via ref backend
      reftable/stack: refactor stack reloading to have common exit path
      reftable/stack: refactor reloading to use file descriptor
      reftable/stack: use stat info to avoid re-reading stack list
      reftable/blocksource: refactor code to match our coding style
      reftable/blocksource: use mmap to read tables
      git-p4: stop reaching into the refdb
      commit-graph: fix memory leak when not writing graph
      completion: discover repo path in `__git_pseudoref_exists ()`
      t9902: verify that completion does not print anything
      completion: improve existence check for pseudo-refs
      completion: silence pseudoref existence check
      completion: treat dangling symrefs as existing pseudorefs
      t7527: decrease likelihood of racing with fsmonitor daemon
      Makefile: detect new Homebrew location for ARM-based Macs
      ci: handle TEST_OUTPUT_DIRECTORY when printing test failures
      ci: make p4 setup on macOS more robust
      ci: add macOS jobs to GitLab CI
      reftable/stack: unconditionally reload stack after commit
      reftable/stack: fix race in up-to-date check
      sequencer: clean up pseudo refs with REF_NO_DEREF
      sequencer: delete REBASE_HEAD in correct repo when picking commits
      refs: convert AUTO_MERGE to become a normal pseudo-ref
      sequencer: introduce functions to handle autostashes via refs
      refs: convert MERGE_AUTOSTASH to become a normal pseudo-ref
      refs: redefine special refs
      Documentation: add "special refs" to the glossary
      reftable/stack: adjust permissions of compacted tables
      t1300: make tests more robust with non-default ref backends
      t1301: mark test for `core.sharedRepository` as reffiles specific
      t1302: make tests more robust with new extensions
      t1419: mark test suite as files-backend specific
      t5526: break test submodule differently
      t: mark tests regarding git-pack-refs(1) to be backend specific
      reftable/stack: fsync "tables.list" during compaction

Philippe Blain (6):
      completion: complete missing rev-list options
      completion: complete --patch-with-raw
      completion: complete --encoding
      completion: complete missing 'git log' options
      ci(github): also skip logs of broken test cases
      imap-send: add missing "strbuf.h" include under NO_CURL

Phillip Wood (1):
      unit tests: add TAP unit test framework

René Scharfe (19):
      column: release strbuf and string_list after use
      i18n: factorize even more 'incompatible options' messages
      push: use die_for_incompatible_opt4() for - -delete/--tags/--all/--mirror
      repack: use die_for_incompatible_opt3() for -A/-k/--cruft
      revision: use die_for_incompatible_opt3() for - -graph/--reverse/--walk-reflogs
      revision, rev-parse: factorize incompatibility messages about - -exclude-hidden
      clean: factorize incompatibility message
      worktree: standardize incompatibility messages
      worktree: simplify incompatibility message for --orphan and commit-ish
      show-ref: use die_for_incompatible_opt3()
      t6300: avoid hard-coding object sizes
      git-compat-util: convert skip_{prefix,suffix}{,_mem} to bool
      rebase: use strvec_pushf() for format-patch revisions
      fast-import: use mem_pool_calloc()
      mem-pool: fix big allocations
      mem-pool: simplify alignment calculation
      t1006: prefer shell loop to awk for packed object sizes
      parse-options: fully disable option abbreviation with PARSE_OPT_KEEP_UNKNOWN
      parse-options: simplify positivation handling

Rubén Justo (10):
      status: fix branch shown when not only bisecting
      branch: clarify <oldbranch> term
      advice: sort the advice related lists
      advice: fix an unexpected leading space
      branch: make the advice to force-deleting a conditional one
      advice: allow disabling the automatic hint in advise_if_enabled()
      t5332: mark as leak-free
      t6113: mark as leak-free
      test-lib: check for TEST_PASSES_SANITIZE_LEAK
      t0080: mark as leak-free

Sam Delmerico (1):
      push: region_leave trace for negotiate_using_fetch

Shreyansh Paliwal (1):
      test-lib-functions.sh: fix test_grep fail message wording

Simon Ser (1):
      format-patch: fix ignored encode_email_headers for cover letter

Stan Hu (2):
      completion: refactor existence checks for pseudorefs
      completion: support pseudoref existence checks for reftables

Sören Krecker (1):
      mingw: give more details about unsafe directory's ownership

Tamino Bauknecht (1):
      fetch: add new config option fetch.all

Taylor Blau (27):
      pack-objects: free packing_data in more places
      pack-bitmap-write: deep-clear the `bb_commit` slab
      pack-bitmap: plug leak in find_objects()
      midx: factor out `fill_pack_info()`
      midx: implement `BTMP` chunk
      midx: implement `midx_locate_pack()`
      pack-bitmap: pass `bitmapped_pack` struct to pack-reuse functions
      ewah: implement `bitmap_is_empty()`
      pack-bitmap: simplify `reuse_partial_packfile_from_bitmap()` signature
      pack-bitmap: return multiple packs via `reuse_partial_packfile_from_bitmap()`
      pack-objects: parameterize pack-reuse routines over a single pack
      pack-objects: keep track of `pack_start` for each reuse pack
      pack-objects: pass `bitmapped_pack`'s to pack-reuse functions
      pack-objects: prepare `write_reused_pack()` for multi-pack reuse
      pack-objects: prepare `write_reused_pack_verbatim()` for multi-pack reuse
      pack-objects: include number of packs reused in output
      git-compat-util.h: implement checked size_t to uint32_t conversion
      midx: implement `midx_preferred_pack()`
      pack-revindex: factor out `midx_key_to_pack_pos()` helper
      pack-revindex: implement `midx_pair_to_pack_pos()`
      pack-bitmap: prepare to mark objects from multiple packs for reuse
      pack-objects: add tracing for various packfile metrics
      t/test-lib-functions.sh: implement `test_trace2_data` helper
      pack-objects: allow setting `pack.allowPackReuse` to "single"
      pack-bitmap: enable reuse from all bitmapped packs
      t/perf: add performance tests for multi-pack reuse
      pack-bitmap: drop unused `reuse_objects`

Todd Zullinger (2):
      perl: bump the required Perl version to 5.8.1 from 5.8.0
      send-email: avoid duplicate specification warnings

Toon Claes (1):
      builtin/show-ref: treat directory as non-existing in --exists

Victoria Dye (14):
      ref-filter.c: really don't sort when using --no-sort
      ref-filter.h: add max_count and omit_empty to ref_format
      ref-filter.h: move contains caches into filter
      ref-filter.h: add functions for filter/format & format-only
      ref-filter.c: rename 'ref_filter_handler()' to 'filter_one()'
      ref-filter.c: refactor to create common helper functions
      ref-filter.c: filter & format refs in the same callback
      for-each-ref: clean up documentation of --format
      ref-filter.c: use peeled tag for '*' format fields
      t/perf: add perf tests for for-each-ref
      submodule-config.h: move check_submodule_url
      test-submodule: remove command line handling for check-name
      t7450: test submodule urls
      submodule-config.c: strengthen URL fsck check

Zach FettersMoore (1):
      subtree: fix split processing with multiple subtrees present



^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.43.0
@ 2023-11-20 17:01  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2023-11-20 17:01 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

The latest feature release Git v2.43.0 is now available at the
usual places.  It is comprised of 464 non-merge commits since
v2.42.0, contributed by 80 people, 17 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.43.0'
tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.42.0 are as follows.
Welcome to the Git development community!

  Aditya Neelamraju, Alyssa Ross, Caleb Hill, Dorcas AnonoLitunya,
  Dragan Simic, Isoken June Ibizugbe, Jan Alexander Steffens
  (heftig), Javier Mora, ks1322 ks1322, Mark Ruvald Pedersen,
  Matthew McClain, Naomi Ibe, Romain Chossart, Tang Yuyi, Vipul
  Kumar, 王常新, and 谢致邦 (XIE Zhibang).

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alexander Shopov, Andrei Rybak,
  Andy Koppe, Arkadii Yakovets, Bagas Sanjaya, Beat Bolli, brian
  m. carlson, Calvin Wan, Christian Couder, Christian Hesse,
  Derrick Stolee, Drew DeVault, Elijah Newren, Emily Shaffer,
  Emir SARI, Eric W. Biederman, Eric Wong, Evan Gates, Han Young,
  Hariom Verma, Jacob Abel, Jacob Stopak, Jason Hatton, Jean-Noël
  Avila, Jeff King, Johannes Schindelin, John Cai, Jordi Mas,
  Josh Soref, Josip Sokcevic, Junio C Hamano, Karthik Nayak,
  Kate Golovanova, Kousik Sanagavarapu, Kristoffer Haugsbakk,
  Linus Arver, Mark Levedahl, Martin Ågren, Martin Storsjö,
  M Hickford, Michael Strawbridge, Michal Suchanek, Oswald
  Buddenhagen, Patrick Steinhardt, Peter Krefting, Philippe Blain,
  Phillip Wood, Ralf Thielow, Randall S. Becker, René Scharfe,
  Robert Coup, Rubén Justo, Sergey Organov, Shuqi Liang, Stefan
  Haller, Štěpán Němec, Taylor Blau, Teng Long, Todd Zullinger,
  Victoria Dye, Wesley Schwengle, and Yi-Jyun Pan.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.43 Release Notes
=======================

Backward Compatibility Notes

 * The "--rfc" option of "git format-patch" used to be a valid way to
   override an earlier "--subject-prefix=<something>" on the command
   line and replace it with "[RFC PATCH]", but from this release, it
   merely prefixes the string "RFC " in front of the given subject
   prefix.  If you are negatively affected by this change, please use
   "--subject-prefix=PATCH --rfc" as a replacement.

 * In Git 2.42, "git rev-list --stdin" learned to take non-revisions
   (like "--not") from the standard input, but the way such a "--not" was
   handled was quite confusing, which has been rethought.  The updated
   rule is that "--not" given from the command line only affects revs
   given from the command line that comes but not revs read from the
   standard input, and "--not" read from the standard input affects
   revs given from the standard input and not revs given from the
   command line.

UI, Workflows & Features

 * A message written in olden time prevented a branch from getting
   checked out, saying it is already checked out elsewhere. But these
   days, we treat a branch that is being bisected or rebased just like
   a branch that is checked out and protect it from getting modified
   with the same codepath.  The message has been rephrased to say that
   the branch is "in use" to avoid confusion.

 * Hourly and other schedules of "git maintenance" jobs are randomly
   distributed now.

 * "git cmd -h" learned to signal which options can be negated by
   listing such options like "--[no-]opt".

 * The way authentication related data other than passwords (e.g.,
   oauth token and password expiration data) are stored in libsecret
   keyrings has been rethought.

 * Update the libsecret and wincred credential helpers to correctly
   match which credential to erase; they erased the wrong entry in
   some cases.

 * Git GUI updates.

 * "git format-patch" learned a new "--description-file" option that
   lets cover letter description to be fed; this can be used on
   detached HEAD where there is no branch description available, and
   also can override the branch description if there is one.

 * Use of the "--max-pack-size" option to allow multiple packfiles to
   be created is now supported even when we are sending unreachable
   objects to cruft packs.

 * "git format-patch --rfc --subject-prefix=<foo>" used to ignore the
   "--subject-prefix" option and used "[RFC PATCH]"; now we will add
   "RFC" prefix to whatever subject prefix is specified.

 * "git log --format" has been taught the %(decorate) placeholder for
   further customization over what the "--decorate" option offers.

 * The default log message created by "git revert", when reverting a
   commit that records a revert, has been tweaked, to encourage people
   to describe complex "revert of revert of revert" situations better in
   their own words.

 * The command-line completion support (in contrib/) learned to
   complete "git commit --trailer=" for possible trailer keys.

 * "git update-index" learned the "--show-index-version" option to
   inspect the index format version used by the on-disk index file.

 * "git diff" learned the "diff.statNameWidth" configuration variable,
   to give the default width for the name part in the "--stat" output.

 * "git range-diff --notes=foo" compared "log --notes=foo --notes" of
   the two ranges, instead of using just the specified notes tree,
   which has been corrected to use only the specified notes tree.

 * The command line completion script (in contrib/) can be told to
   complete aliases by including ": git <cmd> ;" in the alias to tell
   it that the alias should be completed in a similar way to how "git
   <cmd>" is completed.  The parsing code for the alias has been
   loosened to allow ';' without an extra space before it.

 * "git for-each-ref" and friends learned to apply mailmap to
   authorname and other fields in a more flexible way than using
   separate placeholder letters like %a[eElL] every time we want to
   come up with small variants.

 * "git repack" machinery learned to pay attention to the "--filter="
   option.

 * "git repack" learned the "--max-cruft-size" option to prevent cruft
   packs from growing without bounds.

 * "git merge-tree" learned to take strategy backend specific options
   via the "-X" option, like "git merge" does.

 * "git log" and friends learned the "--dd" option that is a
   short-hand for "--diff-merges=first-parent -p".

 * The attribute subsystem learned to honor the "attr.tree"
   configuration variable that specifies which tree to read the
   .gitattributes files from.

 * "git merge-file" learns a mode to read three variants of the
   contents to be merged from blob objects.


Performance, Internal Implementation, Development Support etc.

 * "git check-attr" has been taught to work better with sparse-index.

 * It may be tempting to leave the help text NULL for a command line
   option that is either hidden or too obvious, but "git subcmd -h"
   and "git subcmd --help-all" would have segfaulted if done so.  Now
   the help text is truly optional.

 * Tests that are known to pass with LSan are now marked as such.

 * Flaky "git p4" tests, as well as "git svn" tests, are now skipped
   in the (rather expensive) sanitizer CI job.

 * Tests with LSan from time to time seem to emit harmless messages
   that make our tests unnecessarily flaky; we work around it by
   filtering the uninteresting output.

 * Unused parameters to functions are marked as such, and/or removed,
   in order to bring us closer to "-Wunused-parameter" clean.

 * The code to keep track of existing packs in the repository while
   repacking has been refactored.

 * The "streaming" interface used for bulk-checkin codepath has been
   narrowed to take only blob objects for now, with no real loss of
   functionality.

 * GitHub CI workflow has learned to trigger Coverity check.

 * Test coverage for trailers has been improved.

 * The code to iterate over loose references has been optimized to
   reduce the number of lstat() system calls.

 * The codepaths that read "chunk" formatted files have been corrected
   to pay attention to the chunk size and notice broken files.

 * Replace macos-12 used at GitHub CI with macos-13.
   (merge 682a868f67 js/ci-use-macos-13 later to maint).


Fixes since v2.42
-----------------

 * Overly long label names used in the sequencer machinery are now
   chopped to fit under filesystem limitation.

 * Scalar updates.

 * Tweak GitHub Actions CI so that pushing the same commit to multiple
   branch tips at the same time will not waste building and testing
   the same thing twice.

 * The commit-graph verification code that detects a mixture of zero and
   non-zero generation numbers has been updated.

 * "git diff -w --exit-code" with various options did not work
   correctly, which has been corrected.

 * The "transfer.unpackLimit" configuration variable ought to be used
   as a fallback, but overrode the more specific "fetch.unpackLimit"
   and "receive.unpackLimit" configuration variables by mistake, which
   has been corrected.

 * The use of API between two calls to require_clean_work_tree() from
   the sequencer code has been cleaned up for consistency.

 * "git diff --no-such-option" and other corner cases around the exit
   status of the "diff" command have been corrected.

 * "git for-each-ref --sort='contents:size'" sorted the refs according
   to size numerically, giving a ref that points at a blob twelve-byte
   (12) long before showing a blob hundred-byte (100) long, which has
   been corrected.

 * We now limit the depth of the tree objects and maximum length of
   pathnames recorded in tree objects.
   (merge 4d5693ba05 jk/tree-name-and-depth-limit later to maint).

 * Various fixes to the behavior of "rebase -i", when the command got
   interrupted by conflicting changes, have been made.

 * References from a description of the `--patch` option in various
   manual pages have been simplified and improved.

 * "git grep -e A --no-or -e B" is accepted, even though the negation
   of the "--or" option did not mean anything, which has been tightened.

 * The completion script (in contrib/) has been taught to treat the
   "-t" option to "git checkout" and "git switch" just like the
   "--track" option, to complete remote-tracking branches.

 * "git diff --no-index -R <(one) <(two)" did not work correctly,
   which has been corrected.

 * "git maintenance" timers' implementation has been updated, based on
   systemd timers, to work with WSL.

 * "git diff --cached" codepath did not fill the necessary stat
   information for a file when fsmonitor knows it is clean and ended
   up behaving as if it were not clean, which has been corrected.

 * How "alias.foo = : git cmd ; aliased-command-string" should be
   spelled with necessary whitespace around punctuation marks to work
   has been more clearly documented (but this will be moot with newer
   versions of Git where the parsing rules have been improved).

 * HTTP Header redaction code has been adjusted for a newer version of
   cURL library that shows its traces differently from earlier
   versions.

 * An error message given by "git send-email", when given a malformed
   address, did not show the offending address, which has been corrected.

 * UBSan options were not propagated through the test framework to git
   run via the httpd, unlike ASan options, which has been corrected.

 * "checkout --merge -- path" and "update-index --unresolve path" did
   not resurrect conflicted state that was resolved to remove path,
   but now they do.
   (merge 5bdedac3c7 jc/unresolve-removal later to maint).

 * The display width table for unicode characters has been updated for
   Unicode 15.1
   (merge 872976c37e bb/unicode-width-table-15 later to maint).

 * Update mailmap entry for Derrick.
   (merge 6e5457d8c7 ds/mailmap-entry-update later to maint).

 * In the ".gitmodules" files, submodules are keyed by their names,
   and the path to the submodule whose name is $name is specified by
   the submodule.$name.path variable.  There were a few codepaths that
   mixed the name and path up when consulting the submodule database,
   which have been corrected.  It took long for these bugs to be found
   as the name of a submodule initially is the same as its path, and
   the problem does not surface until it is moved to a different path,
   which apparently happens very rarely.

 * "git diff --merge-base X other args..." insisted that X must be a
   commit and errored out when given an annotated tag that peels to a
   commit, but we only need it to be a committish.  This has been
   corrected.
   (merge 4adceb5a29 ar/diff-index-merge-base-fix later to maint).

 * "git merge-tree" used to segfault when the "--attr-source"
   option is used, which has been corrected.
   (merge e95bafc52f jc/merge-ort-attr-index-fix later to maint).

 * Unlike "git log --pretty=%D", "git log --pretty="%(decorate)" did
   not auto-initialize the decoration subsystem, which has been
   corrected.

 * Feeding "git stash store" with a random commit that was not created
   by "git stash create" now errors out.
   (merge d9b6634589 jc/fail-stash-to-store-non-stash later to maint).

 * The index file has room only for the lower 32-bit of the file size in
   the cached stat information, which means cached stat information
   will have 0 in its sd_size member for a file whose size is a multiple
   of 4GiB.  This is mistaken for a racily clean path.  Avoid it by
   storing a bogus sd_size value instead for such files.
   (merge 5143ac07b1 bc/racy-4gb-files later to maint).

 * "git p4" tried to store symlinks to LFS when told, but has been
   fixed not to do so, because it does not make sense.
   (merge 10c89a02b0 mm/p4-symlink-with-lfs later to maint).

 * The codepath to handle recipient addresses `git send-email
   --compose` learns from the user was completely broken, which has
   been corrected.
   (merge 3ec6167567 jk/send-email-fix-addresses-from-composed-messages later to maint).

 * "cd sub && git grep -f patterns" tried to read "patterns" file at
   the top level of the working tree; it has been corrected to read
   "sub/patterns" instead.

 * "git reflog expire --single-worktree" has been broken for the past
   20 months or so, which has been corrected.

 * "git send-email" did not have certain pieces of data computed yet
   when it tried to validate the outgoing messages and its recipient
   addresses, which has been sorted out.

 * "git bugreport" learned to complain when it received a command line
   argument that it will not use.

 * The codepath to traverse the commit-graph learned to notice that a
   commit is missing (e.g., corrupt repository lost an object), even
   though it knows something about the commit (like its parents) from
   what is in commit-graph.
   (merge 7a5d604443 ps/do-not-trust-commit-graph-blindly-for-existence later to maint).

 * "git rev-list --missing" did not work for missing commit objects,
   which has been corrected.

 * "git rev-list --unpacked --objects" failed to exclude packed
   non-commit objects, which has been corrected.
   (merge 7b3c8e9f38 tb/rev-list-unpacked-fix later to maint).

 * "To dereference" and "to peel" were sometimes used in in-code
   comments and documentation but without description in the glossary.
   (merge 893dce2ffb vd/glossary-dereference-peel later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge c2c349a15c xz/commit-title-soft-limit-doc later to maint).
   (merge 1bd809938a tb/format-pack-doc-update later to maint).
   (merge 8f81532599 an/clang-format-typofix later to maint).
   (merge 3ca86adc2d la/strvec-header-fix later to maint).
   (merge 6789275d37 jc/test-i18ngrep later to maint).
   (merge 9972cd6004 ps/leakfixes later to maint).
   (merge 46edab516b tz/send-email-helpfix later to maint).

----------------------------------------------------------------

Changes since v2.42.0 are as follows:

Aditya Neelamraju (1):
      clang-format: fix typo in comment

Alexander Shopov (1):
      l10n: bg.po: Updated Bulgarian translation (5579t)

Alyssa Ross (1):
      diff: fix --merge-base with annotated tags

Andrei Rybak (1):
      SubmittingPatches: call gitk's command "Copy commit reference"

Andy Koppe (8):
      pretty-formats: enclose options in angle brackets
      decorate: refactor format_decorations()
      decorate: avoid some unnecessary color overhead
      decorate: color each token separately
      pretty: add %(decorate[:<options>]) format
      pretty: add pointer and tag options to %(decorate)
      decorate: use commit color for HEAD arrow
      pretty: fix ref filtering for %(decorate) formats

Arkadii Yakovets (1):
      l10n: update uk localization for v2.43

Bagas Sanjaya (1):
      l10n: po-id for 2.43 (round 1)

Beat Bolli (1):
      unicode: update the width tables to Unicode 15.1

Caleb Hill (1):
      git-clean doc: fix "without do cleaning" typo

Calvin Wan (4):
      hex-ll: separate out non-hash-algo functions
      wrapper: reduce scope of remove_or_warn()
      config: correct bad boolean env value error message
      parse: separate out parsing functions from config.h

Christian Couder (9):
      pack-objects: allow `--filter` without `--stdout`
      t/helper: add 'find-pack' test-tool
      repack: refactor finishing pack-objects command
      repack: refactor finding pack prefix
      pack-bitmap-write: rebuild using new bitmap when remapping
      repack: add `--filter=<filter-spec>` option
      gc: add `gc.repackFilter` config option
      repack: implement `--filter-to` for storing filtered out objects
      gc: add `gc.repackFilterTo` config option

Christian Hesse (2):
      t/lib-gpg: forcibly run a trustdb update
      t/t6300: drop magic filtering

Derrick Stolee (13):
      upload-pack: fix race condition in error messages
      maintenance: add get_random_minute()
      maintenance: use random minute in launchctl scheduler
      maintenance: use random minute in Windows scheduler
      maintenance: use random minute in cron scheduler
      maintenance: swap method locations
      maintenance: use random minute in systemd scheduler
      maintenance: fix systemd schedule overlaps
      maintenance: update schedule before config
      scalar: add --[no-]src option
      setup: add discover_git_directory_reason()
      scalar reconfigure: help users remove buggy repos
      mailmap: change primary address for Derrick Stolee

Dorcas AnonoLitunya (1):
      t7601: use "test_path_is_file" etc. instead of "test -f"

Dragan Simic (2):
      diff --stat: add config option to limit filename width
      diff --stat: set the width defaults in a helper function

Drew DeVault (1):
      format-patch: --rfc honors what --subject-prefix sets

Elijah Newren (26):
      documentation: wording improvements
      documentation: fix small error
      documentation: fix typos
      documentation: fix apostrophe usage
      documentation: add missing words
      documentation: remove extraneous words
      documentation: fix subject/verb agreement
      documentation: employ consistent verb tense for a list
      documentation: fix verb tense
      documentation: fix adjective vs. noun
      documentation: fix verb vs. noun
      documentation: fix singular vs. plural
      documentation: whitespace is already generally plural
      documentation: fix choice of article
      documentation: add missing article
      documentation: remove unnecessary hyphens
      documentation: add missing hyphens
      documentation: use clearer prepositions
      documentation: fix punctuation
      documentation: fix capitalization
      documentation: fix whitespace issues
      documentation: add some commas where they are helpful
      documentation: add missing fullstops
      documentation: add missing quotes
      documentation: add missing parenthesis
      RelNotes: minor wording fixes in 2.43.0 release notes

Emily Shaffer (2):
      t0091-bugreport: stop using i18ngrep
      bugreport: reject positional arguments

Emir SARI (1):
      l10n: tr: v2.43.0

Eric W. Biederman (1):
      bulk-checkin: only support blobs in index_bulk_checkin

Eric Wong (1):
      treewide: fix various bugs w/ OpenSSL 3+ EVP API

Evan Gates (1):
      git-config: fix misworded --type=path explanation

Han Young (1):
      show doc: redirect user to git log manual instead of git diff-tree

Isoken June Ibizugbe (1):
      builtin/branch.c: adjust error messages to coding guidelines

Jacob Abel (1):
      builtin/worktree.c: fix typo in "forgot fetch" msg

Jacob Stopak (1):
      Include gettext.h in MyFirstContribution tutorial

Jan Alexander Steffens (heftig) (6):
      submodule--helper: use submodule_from_path in set-{url,branch}
      submodule--helper: return error from set-url when modifying failed
      t7419: actually test the branch switching
      t7419, t7420: use test_cmp_config instead of grepping .gitmodules
      t7419: test that we correctly handle renamed submodules
      t7420: test that we correctly handle renamed submodules

Jason Hatton (1):
      Prevent git from rehashing 4GiB files

Javier Mora (2):
      git-status.txt: fix minor asciidoc format issue
      doc/git-bisect: clarify `git bisect run` syntax

Jean-Noël Avila (1):
      l10n: fr: v2.43.0 rnd 2

Jeff King (114):
      hashmap: use expected signatures for comparison functions
      diff-files: avoid negative exit value
      diff: show usage for unknown builtin_diff_files() options
      diff: die when failing to read index in git-diff builtin
      diff: drop useless return from run_diff_{files,index} functions
      diff: drop useless return values in git-diff helpers
      diff: drop useless "status" parameter from diff_result_code()
      commit-graph: verify swapped zero/non-zero generation cases
      test-lib: ignore uninteresting LSan output
      sequencer: use repository parameter in short_commit_name()
      sequencer: mark repository argument as unused
      ref-filter: mark unused parameters in parser callbacks
      pack-bitmap: mark unused parameters in show_object callback
      worktree: mark unused parameters in each_ref_fn callback
      commit-graph: mark unused data parameters in generation callbacks
      ls-tree: mark unused parameter in callback
      stash: mark unused parameter in diff callback
      trace2: mark unused us_elapsed_absolute parameters
      trace2: mark unused config callback parameter
      test-trace2: mark unused argv/argc parameters
      grep: mark unused parameter in output function
      add-interactive: mark unused callback parameters
      negotiator/noop: mark unused callback parameters
      worktree: mark unused parameters in noop repair callback
      imap-send: mark unused parameters with NO_OPENSSL
      grep: mark unused parmaeters in pcre fallbacks
      credential: mark unused parameter in urlmatch callback
      fetch: mark unused parameter in ref_transaction callback
      bundle-uri: mark unused parameters in callbacks
      gc: mark unused descriptors in scheduler callbacks
      update-ref: mark unused parameter in parser callbacks
      ci: allow branch selection through "vars"
      ci: deprecate ci/config/allow-ref script
      merge: make xopts a strvec
      merge: simplify parsing of "-n" option
      format-patch: use OPT_STRING_LIST for to/cc options
      tree-walk: reduce stack size for recursive functions
      tree-walk: drop MAX_TRAVERSE_TREES macro
      tree-walk: rename "error" variable
      fsck: detect very large tree pathnames
      add core.maxTreeDepth config
      traverse_trees(): respect max_allowed_tree_depth
      read_tree(): respect max_allowed_tree_depth
      list-objects: respect max_allowed_tree_depth
      tree-diff: respect max_allowed_tree_depth
      lower core.maxTreeDepth default to 2048
      checkout-index: delay automatic setting of to_tempfile
      parse-options: prefer opt->value to globals in callbacks
      parse-options: mark unused "opt" parameter in callbacks
      merge: do not pass unused opt->value parameter
      parse-options: add more BUG_ON() annotations
      interpret-trailers: mark unused "unset" parameters in option callbacks
      parse-options: mark unused parameters in noop callback
      merge-ort: drop custom err() function
      merge-ort: stop passing "opt" to read_oid_strbuf()
      merge-ort: drop unused parameters from detect_and_process_renames()
      merge-ort: drop unused "opt" parameter from merge_check_renames_reusable()
      http: factor out matching of curl http/2 trace lines
      http: update curl http/2 info matching for curl 8.3.0
      merge-ort: lowercase a few error messages
      fsmonitor: prefer repo_git_path() to git_pathdup()
      fsmonitor/win32: drop unused parameters
      fsmonitor: mark some maybe-unused parameters
      fsmonitor/win32: mark unused parameter in fsm_os__incompatible()
      fsmonitor: mark unused parameters in stub functions
      fsmonitor/darwin: mark unused parameters in system callback
      fsmonitor: mark unused hashmap callback parameters
      run-command: mark unused parameters in start_bg_wait callbacks
      test-lib: set UBSAN_OPTIONS to match ASan
      commit-graph: factor out chain opening function
      commit-graph: check mixed generation validation when loading chain file
      t5324: harmonize sha1/sha256 graph chain corruption
      commit-graph: detect read errors when verifying graph chain
      commit-graph: tighten chain size check
      commit-graph: report incomplete chains during verification
      t6700: mark test as leak-free
      commit-reach: free temporary list in get_octopus_merge_bases()
      merge: free result of repo_get_merge_bases()
      commit-graph: move slab-clearing to close_commit_graph()
      commit-graph: free all elements of graph chain
      commit-graph: delay base_graph assignment in add_graph_to_chain()
      commit-graph: free graph struct that was not added to chain
      commit-graph: free write-context entries before overwriting
      commit-graph: free write-context base_graph_name during cleanup
      commit-graph: clear oidset after finishing write
      decorate: add clear_decoration() function
      revision: clear decoration structs during release_revisions()
      daemon: free listen_addr before returning
      repack: free existing_cruft array after use
      chunk-format: note that pair_chunk() is unsafe
      t: add library for munging chunk-format files
      midx: stop ignoring malformed oid fanout chunk
      commit-graph: check size of oid fanout chunk
      midx: check size of oid lookup chunk
      commit-graph: check consistency of fanout table
      midx: check size of pack names chunk
      midx: enforce chunk alignment on reading
      midx: check size of object offset chunk
      midx: bounds-check large offset chunk
      midx: check size of revindex chunk
      commit-graph: check size of commit data chunk
      commit-graph: detect out-of-bounds extra-edges pointers
      commit-graph: bounds-check base graphs chunk
      commit-graph: check size of generations chunk
      commit-graph: bounds-check generation overflow chunk
      commit-graph: check bounds when accessing BDAT chunk
      commit-graph: check bounds when accessing BIDX chunk
      commit-graph: detect out-of-order BIDX offsets
      chunk-format: drop pair_chunk_unsafe()
      t5319: make corrupted large-offset test more robust
      doc/send-email: mention handling of "reply-to" with --compose
      Revert "send-email: extract email-parsing code into a subroutine"
      send-email: handle to/cc/bcc from --compose message
      t: avoid perl's pack/unpack "Q" specifier

Johannes Schindelin (19):
      windows: ignore empty `PATH` elements
      is_Cygwin: avoid `exec`ing anything
      Move is_<platform> functions to the beginning
      Move the `_which` function (almost) to the top
      Work around Tcl's default `PATH` lookup
      rebase: allow overriding the maximal length of the generated labels
      ci: avoid building from the same commit in parallel
      ci(linux-asan-ubsan): let's save some time
      var: avoid a segmentation fault when `HOME` is unset
      completion(switch/checkout): treat --track and -t the same
      maintenance(systemd): support the Windows Subsystem for Linux
      ci: add a GitHub workflow to submit Coverity scans
      coverity: cache the Coverity Build Tool
      coverity: allow overriding the Coverity project
      coverity: support building on Windows
      coverity: allow running on macOS
      coverity: detect and report when the token or project is incorrect
      max_tree_depth: lower it for MSVC to avoid stack overflows
      ci: upgrade to using macos-13

John Cai (3):
      merge-ort: initialize repo in index state
      attr: read attributes from HEAD when bare repo
      attr: add attr.tree for setting the treeish to read attributes from

Jordi Mas (1):
      l10n: Update Catalan translation

Josh Soref (1):
      Documentation/git-status: add missing line breaks

Josip Sokcevic (1):
      diff-lib: fix check_removed when fsmonitor is on

Junio C Hamano (57):
      update-index: do not read HEAD and MERGE_HEAD unconditionally
      resolve-undo: allow resurrecting conflicted state that resolved to deletion
      update-index: use unmerge_index_entry() to support removal
      update-index: remove stale fallback code for "--unresolve"
      checkout/restore: refuse unmerging paths unless checking out of the index
      checkout/restore: add basic tests for --merge
      checkout: allow "checkout -m path" to unmerge removed paths
      mv: fix error for moving directory to another
      diff: move the fallback "--exit-code" code down
      diff: mode-only change should be noticed by "--patch -w --exit-code"
      diff: teach "--stat -w --exit-code" to notice differences
      t4040: remove test that succeeded for a wrong reason
      pretty-formats: define "literal formatting code"
      diff: spell DIFF_INDEX_CACHED out when calling run_diff_index()
      diff: the -w option breaks --exit-code for --raw and other output modes
      transfer.unpackLimit: fetch/receive.unpackLimit takes precedence
      Start the 2.43 cycle
      The second batch for 2.43
      The extra batch to update credenthal helpers
      The third batch
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      update-index doc: v4 is OK with JGit and libgit2
      update-index: add --show-index-version
      test-tool: retire "index-version"
      The eighth batch
      The ninth batch
      The tenth batch
      The eleventh batch
      completion: loosen and document the requirement around completing alias
      The twelfth batch
      The thirteenth batch
      The fourteenth batch
      The fifteenth batch
      doc: update list archive reference to use lore.kernel.org
      The sixteenth batch
      merge: introduce {copy|clear}_merge_options()
      stash: be careful what we store
      grep: -f <path> is relative to $cwd
      The seventeenth batch
      The eighteenth batch
      commit: do not use cryptic "new_index" in end-user facing messages
      The nineteenth batch
      am: align placeholder for --whitespace option with apply
      The twentieth batch
      The twenty-first batch
      The twenty-second batch
      test framework: further deprecate test_i18ngrep
      Git 2.42.1
      tests: teach callers of test_i18ngrep to use test_grep
      A bit more before -rc1
      Prepare for -rc1
      Git 2.43-rc1
      Git 2.43-rc2
      Git 2.43

Karthik Nayak (3):
      revision: rename bit to `do_not_die_on_missing_objects`
      rev-list: move `show_commit()` to the bottom
      rev-list: add commit object support in `--missing` option

Kousik Sanagavarapu (4):
      ref-filter: sort numerically when ":size" is used
      t/t6300: cleanup test_atom
      t/t6300: introduce test_bad_atom
      ref-filter: add mailmap support

Kristoffer Haugsbakk (2):
      range-diff: treat notes like `log`
      grep: die gracefully when outside repository

Linus Arver (17):
      trailer tests: make test cases self-contained
      trailer test description: this tests --where=after, not --where=before
      trailer: add tests to check defaulting behavior with --no-* flags
      trailer doc: narrow down scope of --where and related flags
      trailer: trailer location is a place, not an action
      trailer --no-divider help: describe usual "---" meaning
      trailer --parse help: expose aliased options
      trailer --only-input: prefer "configuration variables" over "rules"
      trailer --parse docs: add explanation for its usefulness
      trailer --unfold help: prefer "reformat" over "join"
      trailer doc: emphasize the effect of configuration variables
      trailer doc: separator within key suppresses default separator
      trailer doc: <token> is a <key> or <keyAlias>, not both
      trailer: separate public from internal portion of trailer_iterator
      trailer: split process_input_file into separate pieces
      trailer: split process_command_line_args into separate functions
      strvec: drop unnecessary include of hex.h

M Hickford (3):
      credential/libsecret: store new attributes
      credential/libsecret: erase matching creds only
      credential/wincred: erase matching creds only

Mark Levedahl (6):
      git gui Makefile - remove Cygwin modifications
      git-gui - remove obsolete Cygwin specific code
      git-gui - use cygstart to browse on Cygwin
      git-gui - use mkshortcut on Cygwin
      git-gui - re-enable use of hook scripts
      git-gui - use git-hook, honor core.hooksPath

Mark Ruvald Pedersen (1):
      sequencer: truncate labels to accommodate loose refs

Martin Ågren (1):
      git-merge-file doc: drop "-file" from argument placeholders

Matthew McClain (1):
      git-p4 shouldn't attempt to store symlinks in LFS

Michael Strawbridge (1):
      send-email: move validation code below process_address_list

Michal Suchanek (1):
      git-push doc: more visibility for -q option

Naomi Ibe (1):
      builtin/add.c: clean up die() messages

Oswald Buddenhagen (16):
      t/lib-rebase: set_fake_editor(): fix recognition of reset's short command
      t/lib-rebase: set_fake_editor(): handle FAKE_LINES more consistently
      sequencer: simplify allocation of result array in todo_list_rearrange_squash()
      t/lib-rebase: improve documentation of set_fake_editor()
      t9001: fix indentation in test_no_confirm()
      format-patch: add --description-file option
      sequencer: rectify empty hint in call of require_clean_work_tree()
      sequencer: beautify subject of reverts of reverts
      git-revert.txt: add discussion
      sequencer: fix error message on failure to copy SQUASH_MSG
      t3404-rebase-interactive.sh: fix typos in title of a rewording test
      sequencer: remove unreachable exit condition in pick_commits()
      am: fix error message in parse_opt_show_current_patch()
      rebase: simplify code related to imply_merge()
      rebase: handle --strategy via imply_merge() as well
      rebase: move parse_opt_keep_empty() down

Patrick Steinhardt (23):
      upload-pack: fix exit code when denying fetch of unreachable object ID
      revision: make pseudo-opt flags read via stdin behave consistently
      doc/git-worktree: mention "refs/rewritten" as per-worktree refs
      doc/git-repack: fix syntax for `-g` shorthand option
      doc/git-repack: don't mention nonexistent "--unpacked" option
      commit-graph: introduce envvar to disable commit existence checks
      commit: detect commits that exist in commit-graph but not in the ODB
      builtin/show-ref: convert pattern to a local variable
      builtin/show-ref: split up different subcommands
      builtin/show-ref: fix leaking string buffer
      builtin/show-ref: fix dead code when passing patterns
      builtin/show-ref: refactor `--exclude-existing` options
      builtin/show-ref: stop using global variable to count matches
      builtin/show-ref: stop using global vars for `show_one()`
      builtin/show-ref: refactor options for patterns subcommand
      builtin/show-ref: ensure mutual exclusiveness of subcommands
      builtin/show-ref: explicitly spell out different modes in synopsis
      builtin/show-ref: add new mode to check for reference existence
      t: use git-show-ref(1) to check for ref existence
      test-bloom: stop setting up Git directory twice
      shallow: fix memory leak when registering shallow roots
      setup: refactor `upgrade_repository_format()` to have common exit
      setup: fix leaking repository format

Peter Krefting (1):
      l10n: sv.po: Update Swedish translation (5579t)

Philippe Blain (3):
      completion: commit: complete configured trailer tokens
      completion: commit: complete trailers tokens more robustly
      completion: improve doc for complex aliases

Phillip Wood (7):
      rebase -i: move unlink() calls
      rebase -i: remove patch file after conflict resolution
      sequencer: use rebase_path_message()
      sequencer: factor out part of pick_commits()
      rebase: fix rewritten list for failed pick
      rebase --continue: refuse to commit after failed command
      rebase -i: fix adding failed command to the todo list

Ralf Thielow (1):
      l10n: Update German translation

René Scharfe (18):
      subtree: disallow --no-{help,quiet,debug,branch,message}
      t1502, docs: disallow --no-help
      t1502: move optionspec help output to a file
      t1502: test option negation
      parse-options: show negatability of options in short help
      parse-options: factor out usage_indent() and usage_padding()
      parse-options: no --[no-]no-...
      parse-options: simplify usage_padding()
      parse-options: allow omitting option help text
      name-rev: use OPT_HIDDEN_BOOL for --peel-tag
      grep: use OPT_INTEGER_F for --max-depth
      grep: reject --no-or
      diff --no-index: fix -R with stdin
      parse-options: drop unused parse_opt_ctx_t member
      parse-options: make CMDMODE errors more precise
      am: simplify --show-current-patch handling
      am, rebase: fix arghelp syntax of --empty
      reflog: fix expire --single-worktree

Robert Coup (1):
      upload-pack: add tracing for fetches

Rubén Justo (2):
      branch: error message deleting a branch in use
      branch: error message checking out a branch in use

Sergey Organov (4):
      doc/diff-options: fix link to generating patch section
      diff-merges: improve --diff-merges documentation
      diff-merges: introduce '--dd' option
      completion: complete '--dd'

Shuqi Liang (3):
      t1092: add tests for 'git check-attr'
      attr.c: read attributes in a sparse directory
      check-attr: integrate with sparse-index

Tang Yuyi (1):
      merge-tree: add -X strategy option

Taylor Blau (28):
      repack: move `pack_geometry` struct to the stack
      commit-graph: introduce `commit_graph_generation_from_graph()`
      t/t5318-commit-graph.sh: test generation zero transitions during fsck
      commit-graph: avoid repeated mixed generation number warnings
      leak tests: mark a handful of tests as leak-free
      leak tests: mark t3321-notes-stripspace.sh as leak-free
      leak tests: mark t5583-push-branches.sh as leak-free
      builtin/pack-objects.c: remove unnecessary strbuf_reset()
      builtin/pack-objects.c: support `--max-pack-size` with `--cruft`
      Documentation/gitformat-pack.txt: remove multi-cruft packs alternative
      Documentation/gitformat-pack.txt: drop mixed version section
      builtin/repack.c: extract structure to store existing packs
      builtin/repack.c: extract marking packs for deletion
      builtin/repack.c: extract redundant pack cleanup for --geometric
      builtin/repack.c: extract redundant pack cleanup for existing packs
      builtin/repack.c: extract `has_existing_non_kept_packs()`
      builtin/repack.c: store existing cruft packs separately
      builtin/repack.c: avoid directly inspecting "util"
      builtin/repack.c: extract common cruft pack loop
      git-send-email.perl: avoid printing undef when validating addresses
      t7700: split cruft-related tests to t7704
      builtin/repack.c: parse `--max-pack-size` with OPT_MAGNITUDE
      builtin/repack.c: implement support for `--max-cruft-size`
      builtin/repack.c: avoid making cruft packs preferred
      Documentation/gitformat-pack.txt: fix typo
      Documentation/gitformat-pack.txt: fix incorrect MIDX documentation
      list-objects: drop --unpacked non-commit objects from results
      pack-bitmap: drop --unpacked non-commit objects from results

Teng Long (1):
      l10n: zh_CN: for git 2.43.0-rc1

Todd Zullinger (3):
      RelNotes: minor typo fixes in 2.43.0 draft
      RelNotes: improve wording of credential helper notes
      send-email: remove stray characters from usage

Victoria Dye (5):
      ref-cache.c: fix prefix matching in ref iteration
      dir.[ch]: expose 'get_dtype'
      dir.[ch]: add 'follow_symlink' arg to 'get_dtype'
      files-backend.c: avoid stat in 'loose_fill_ref_dir'
      glossary: add definitions for dereference & peel

Vipul Kumar (1):
      git-gui: Fix a typo in README

Wesley Schwengle (2):
      git-push.txt: fix grammar
      git-svn: drop FakeTerm hack

Yi-Jyun Pan (1):
      l10n: zh-TW: Git 2.43.0-rc1

brian m. carlson (2):
      t: add a test helper to truncate files
      merge-file: add an option to process object IDs

Ævar Arnfjörð Bjarmason (1):
      Makefiles: change search through $(MAKEFLAGS) for GNU make 4.4

Štěpán Němec (6):
      doc: fix some typos, grammar and wording issues
      doc/diff-options: improve wording of the log.diffMerges mention
      git-jump: admit to passing merge mode args to ls-files
      doc/gitk: s/sticked/stuck/
      t/README: fix multi-prerequisite example
      doc/cat-file: make synopsis and description less confusing

王常新 (1):
      merge-ort.c: fix typo 'neeed' to 'needed'

谢致邦 (XIE Zhibang) (2):
      doc: correct the 50 characters soft limit
      doc: correct the 50 characters soft limit (+)



^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.43.0-rc2
@ 2023-11-14 17:25  4% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2023-11-14 17:25 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.43.0-rc2 is now available for testing at
the usual places.  It is comprised of 451 non-merge commits since
v2.42.0, contributed by 71 people, 17 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.43.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.42.0 are as follows.
Welcome to the Git development community!

  Aditya Neelamraju, Alyssa Ross, Caleb Hill, Dorcas AnonoLitunya,
  Dragan Simic, Isoken June Ibizugbe, Jan Alexander Steffens
  (heftig), Javier Mora, ks1322 ks1322, Mark Ruvald Pedersen,
  Matthew McClain, Naomi Ibe, Romain Chossart, Tang Yuyi, Vipul
  Kumar, 王常新, and 谢致邦 (XIE Zhibang).

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Andrei Rybak, Andy Koppe, Bagas
  Sanjaya, Beat Bolli, brian m. carlson, Calvin Wan, Christian
  Couder, Christian Hesse, Derrick Stolee, Drew DeVault, Elijah
  Newren, Emily Shaffer, Eric W. Biederman, Eric Wong, Evan
  Gates, Han Young, Hariom Verma, Jacob Abel, Jacob Stopak,
  Jason Hatton, Jeff King, Johannes Schindelin, John Cai,
  Josh Soref, Josip Sokcevic, Junio C Hamano, Karthik Nayak,
  Kousik Sanagavarapu, Kristoffer Haugsbakk, Linus Arver, Mark
  Levedahl, Martin Ågren, Martin Storsjö, M Hickford, Michael
  Strawbridge, Michal Suchanek, Oswald Buddenhagen, Patrick
  Steinhardt, Philippe Blain, Phillip Wood, Randall S. Becker,
  René Scharfe, Robert Coup, Rubén Justo, Sergey Organov, Shuqi
  Liang, Stefan Haller, Štěpán Němec, Taylor Blau, Teng Long,
  Todd Zullinger, Victoria Dye, and Wesley Schwengle.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.43 Release Notes (draft)
===============================

Backward Compatibility Notes

 * The "--rfc" option of "git format-patch" used to be a valid way to
   override an earlier "--subject-prefix=<something>" on the command
   line and replace it with "[RFC PATCH]", but from this release, it
   merely prefixes the string "RFC " in front of the given subject
   prefix.  If you are negatively affected by this change, please use
   "--subject-prefix=PATCH --rfc" as a replacement.

 * "git rev-list --stdin" learned to take non-revisions (like "--not")
   recently from the standard input, but the way such a "--not" was
   handled was quite confusing, which has been rethought.  The updated
   rule is that "--not" given from the command line only affects revs
   given from the command line that comes but not revs read from the
   standard input, and "--not" read from the standard input affects
   revs given from the standard input and not revs given from the
   command line.

UI, Workflows & Features

 * A message written in olden time prevented a branch from getting
   checked out saying it is already checked out elsewhere, but these
   days, we treat a branch that is being bisected or rebased just like
   a branch that is checked out and protect it.  Rephrase the message
   to say that the branch is in use.

 * Hourly and other schedules of "git maintenance" jobs are randomly
   distributed now.

 * "git cmd -h" learned to signal which options can be negated by
   listing such options like "--[no-]opt".

 * The way authentication related data other than passwords (e.g.,
   oauth token and password expiration data) are stored in libsecret
   keyrings has been rethought.

 * Update the libsecret and wincred credential helpers to correctly
   match which credential to erase; they erased the wrong entry in
   some cases.

 * Git GUI updates.

 * "git format-patch" learns a way to feed cover letter description,
   that (1) can be used on detached HEAD where there is no branch
   description available, and (2) also can override the branch
   description if there is one.

 * Use of --max-pack-size to allow multiple packfiles to be created is
   now supported even when we are sending unreachable objects to cruft
   packs.

 * "git format-patch --rfc --subject-prefix=<foo>" used to ignore the
   "--subject-prefix" option and used "[RFC PATCH]"; now we will add
   "RFC" prefix to whatever subject prefix is specified.

 * "git log --format" has been taught the %(decorate) placeholder.

 * The default log message created by "git revert", when reverting a
   commit that records a revert, has been tweaked, to encourage people
   to describe complex "revert of revert of revert" situations better in
   their own words.

 * The command-line completion support (in contrib/) learned to
   complete "git commit --trailer=" for possible trailer keys.

 * "git update-index" learns "--show-index-version" to inspect
   the index format version used by the on-disk index file.

 * "git diff" learned diff.statNameWidth configuration variable, to
   give the default width for the name part in the "--stat" output.

 * "git range-diff --notes=foo" compared "log --notes=foo --notes" of
   the two ranges, instead of using just the specified notes tree.

 * The command line completion script (in contrib/) can be told to
   complete aliases by including ": git <cmd> ;" in the alias to tell
   it that the alias should be completed in a similar way to how "git <cmd>" is
   completed.  The parsing code for the alias has been loosened to
   allow ';' without an extra space before it.

 * "git for-each-ref" and friends learned to apply mailmap to
   authorname and other fields.

 * "git repack" machinery learns to pay attention to the "--filter="
   option.

 * "git repack" learned "--max-cruft-size" to prevent cruft packs from
   growing without bounds.

 * "git merge-tree" learned to take strategy backend specific options
   via the "-X" option, like "git merge" does.

 * "git log" and friends learned "--dd" that is a short-hand for
   "--diff-merges=first-parent -p".

 * The attribute subsystem learned to honor `attr.tree` configuration
   that specifies which tree to read the .gitattributes files from.

 * "git merge-file" learns a mode to read three contents to be merged
   from blob objects.


Performance, Internal Implementation, Development Support etc.

 * "git check-attr" has been taught to work better with sparse-index.

 * It may be tempting to leave the help text NULL for a command line
   option that is either hidden or too obvious, but "git subcmd -h"
   and "git subcmd --help-all" would have segfaulted if done so.  Now
   the help text is optional.

 * Tests that are known to pass with LSan are now marked as such.

 * Flaky "git p4" tests, as well as "git svn" tests, are now skipped
   in the (rather expensive) sanitizer CI job.

 * Tests with LSan from time to time seem to emit harmless messages
   that make our tests unnecessarily flaky; we work around it by
   filtering the uninteresting output.

 * Unused parameters to functions are marked as such, and/or removed,
   in order to bring us closer to -Wunused-parameter clean.

 * The code to keep track of existing packs in the repository while
   repacking has been refactored.

 * The "streaming" interface used for bulk-checkin codepath has been
   narrowed to take only blob objects for now, with no real loss of
   functionality.

 * GitHub CI workflow has learned to trigger Coverity check.

 * Test coverage for trailers has been improved.

 * The code to iterate over loose references has been optimized to
   reduce the number of lstat() system calls.

 * The codepaths that read "chunk" formatted files have been corrected
   to pay attention to the chunk size and notice broken files.

 * Replace macos-12 used at GitHub CI with macos-13.
   (merge 682a868f67 js/ci-use-macos-13 later to maint).


Fixes since v2.42
-----------------

 * Overly long label names used in the sequencer machinery are now
   chopped to fit under filesystem limitation.

 * Scalar updates.

 * Tweak GitHub Actions CI so that pushing the same commit to multiple
   branch tips at the same time will not waste building and testing
   the same thing twice.

 * The commit-graph verification code that detects a mixture of zero and
   non-zero generation numbers has been updated.

 * "git diff -w --exit-code" with various options did not work
   correctly, which is being addressed.

 * transfer.unpackLimit ought to be used as a fallback, but overrode
   fetch.unpackLimit and receive.unpackLimit instead.

 * The use of API between two calls to require_clean_work_tree() from
   the sequencer code has been cleaned up for consistency.

 * "git diff --no-such-option" and other corner cases around the exit
   status of the "diff" command have been corrected.

 * "git for-each-ref --sort='contents:size'" sorts the refs according
   to size numerically, giving a ref that points at a blob twelve-byte
   (12) long before showing a blob hundred-byte (100) long.

 * We now limit the depth of the tree objects and maximum length of
   pathnames recorded in tree objects.
   (merge 4d5693ba05 jk/tree-name-and-depth-limit later to maint).

 * Various fixes to the behavior of "rebase -i" when the command got
   interrupted by conflicting changes.

 * References from a description of the `--patch` option in various
   manual pages have been simplified and improved.

 * "git grep -e A --no-or -e B" is accepted, even though the negation
   of "or" did not mean anything, which has been tightened.

 * The completion script (in contrib/) has been taught to treat the
   "-t" option to "git checkout" and "git switch" just like the
   "--track" option, to complete remote-tracking branches.

 * "git diff --no-index -R <(one) <(two)" did not work correctly,
   which has been corrected.

 * Update "git maintenance" timers' implementation based on systemd
   timers to work with WSL.

 * "git diff --cached" codepath did not fill the necessary stat
   information for a file when fsmonitor knows it is clean and ended
   up behaving as if it is not clean, which has been corrected.

 * Clarify how "alias.foo = : git cmd ; aliased-command-string" should be
   spelled with necessary whitespace around punctuation marks to
   work.

 * HTTP Header redaction code has been adjusted for a newer version of
   cURL library that shows its traces differently from earlier
   versions.

 * An error message given by "git send-email" when given a malformed
   address did not give correct information, which has been corrected.

 * UBSan options were not propagated through the test framework to git
   run via the httpd, unlike ASan options, which has been corrected.

 * "checkout --merge -- path" and "update-index --unresolve path" did
   not resurrect conflicted state that was resolved to remove path,
   but now they do.
   (merge 5bdedac3c7 jc/unresolve-removal later to maint).

 * The display width table for unicode characters has been updated for
   Unicode 15.1
   (merge 872976c37e bb/unicode-width-table-15 later to maint).

 * Update mailmap entry for Derrick.
   (merge 6e5457d8c7 ds/mailmap-entry-update later to maint).

 * In .gitmodules files, submodules are keyed by their names, and the
   path to the submodule whose name is $name is specified by the
   submodule.$name.path variable.  There were a few codepaths that
   mixed the name and path up when consulting the submodule database,
   which have been corrected.  It took long for these bugs to be found
   as the name of a submodule initially is the same as its path, and
   the problem does not surface until it is moved to a different path,
   which apparently happens very rarely.

 * "git diff --merge-base X other args..." insisted that X must be a
   commit and errored out when given an annotated tag that peels to a
   commit, but we only need it to be a committish.  This has been
   corrected.
   (merge 4adceb5a29 ar/diff-index-merge-base-fix later to maint).

 * Fix "git merge-tree" to stop segfaulting when the --attr-source
   option is used.
   (merge e95bafc52f jc/merge-ort-attr-index-fix later to maint).

 * Unlike "git log --pretty=%D", "git log --pretty="%(decorate)" did
   not auto-initialize the decoration subsystem, which has been
   corrected.

 * Feeding "git stash store" with a random commit that was not created
   by "git stash create" now errors out.
   (merge d9b6634589 jc/fail-stash-to-store-non-stash later to maint).

 * The index file has room only for the lower 32-bit of the file size in
   the cached stat information, which means cached stat information
   will have 0 in its sd_size member for a file whose size is a multiple
   of 4GiB.  This is mistaken for a racily clean path.  Avoid it by
   storing a bogus sd_size value instead for such files.
   (merge 5143ac07b1 bc/racy-4gb-files later to maint).

 * "git p4" tried to store symlinks to LFS when told, but has been
   fixed not to do so, because it does not make sense.
   (merge 10c89a02b0 mm/p4-symlink-with-lfs later to maint).

 * The codepath to handle recipient addresses `git send-email
   --compose` learns from the user was completely broken, which has
   been corrected.
   (merge 3ec6167567 jk/send-email-fix-addresses-from-composed-messages later to maint).

 * "cd sub && git grep -f patterns" tried to read "patterns" file at
   the top level of the working tree; it has been corrected to read
   "sub/patterns" instead.


 * "git reflog expire --single-worktree" has been broken for the past
   20 months or so, which has been corrected.

 * "git send-email" did not have certain pieces of data computed yet
   when it tried to validate the outgoing messages and its recipient
   addresses, which has been sorted out.

 * "git bugreport" learned to complain when it received a command line
   argument that it will not use.

 * The codepath to traverse the commit-graph learned to notice that a
   commit is missing (e.g., corrupt repository lost an object), even
   though it knows something about the commit (like its parents) from
   what is in commit-graph.
   (merge 7a5d604443 ps/do-not-trust-commit-graph-blindly-for-existence later to maint).

 * "git rev-list --missing" did not work for missing commit objects,
   which has been corrected.

 * "git rev-list --unpacked --objects" failed to exclude packed
   non-commit objects, which has been corrected.
   (merge 7b3c8e9f38 tb/rev-list-unpacked-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge c2c349a15c xz/commit-title-soft-limit-doc later to maint).
   (merge 1bd809938a tb/format-pack-doc-update later to maint).
   (merge 8f81532599 an/clang-format-typofix later to maint).
   (merge 3ca86adc2d la/strvec-header-fix later to maint).
   (merge 6789275d37 jc/test-i18ngrep later to maint).
   (merge 9972cd6004 ps/leakfixes later to maint).

----------------------------------------------------------------

Changes since v2.42.0 are as follows:

Aditya Neelamraju (1):
      clang-format: fix typo in comment

Alyssa Ross (1):
      diff: fix --merge-base with annotated tags

Andrei Rybak (1):
      SubmittingPatches: call gitk's command "Copy commit reference"

Andy Koppe (8):
      pretty-formats: enclose options in angle brackets
      decorate: refactor format_decorations()
      decorate: avoid some unnecessary color overhead
      decorate: color each token separately
      pretty: add %(decorate[:<options>]) format
      pretty: add pointer and tag options to %(decorate)
      decorate: use commit color for HEAD arrow
      pretty: fix ref filtering for %(decorate) formats

Beat Bolli (1):
      unicode: update the width tables to Unicode 15.1

Caleb Hill (1):
      git-clean doc: fix "without do cleaning" typo

Calvin Wan (4):
      hex-ll: separate out non-hash-algo functions
      wrapper: reduce scope of remove_or_warn()
      config: correct bad boolean env value error message
      parse: separate out parsing functions from config.h

Christian Couder (9):
      pack-objects: allow `--filter` without `--stdout`
      t/helper: add 'find-pack' test-tool
      repack: refactor finishing pack-objects command
      repack: refactor finding pack prefix
      pack-bitmap-write: rebuild using new bitmap when remapping
      repack: add `--filter=<filter-spec>` option
      gc: add `gc.repackFilter` config option
      repack: implement `--filter-to` for storing filtered out objects
      gc: add `gc.repackFilterTo` config option

Christian Hesse (2):
      t/lib-gpg: forcibly run a trustdb update
      t/t6300: drop magic filtering

Derrick Stolee (13):
      upload-pack: fix race condition in error messages
      maintenance: add get_random_minute()
      maintenance: use random minute in launchctl scheduler
      maintenance: use random minute in Windows scheduler
      maintenance: use random minute in cron scheduler
      maintenance: swap method locations
      maintenance: use random minute in systemd scheduler
      maintenance: fix systemd schedule overlaps
      maintenance: update schedule before config
      scalar: add --[no-]src option
      setup: add discover_git_directory_reason()
      scalar reconfigure: help users remove buggy repos
      mailmap: change primary address for Derrick Stolee

Dorcas AnonoLitunya (1):
      t7601: use "test_path_is_file" etc. instead of "test -f"

Dragan Simic (2):
      diff --stat: add config option to limit filename width
      diff --stat: set the width defaults in a helper function

Drew DeVault (1):
      format-patch: --rfc honors what --subject-prefix sets

Elijah Newren (26):
      documentation: wording improvements
      documentation: fix small error
      documentation: fix typos
      documentation: fix apostrophe usage
      documentation: add missing words
      documentation: remove extraneous words
      documentation: fix subject/verb agreement
      documentation: employ consistent verb tense for a list
      documentation: fix verb tense
      documentation: fix adjective vs. noun
      documentation: fix verb vs. noun
      documentation: fix singular vs. plural
      documentation: whitespace is already generally plural
      documentation: fix choice of article
      documentation: add missing article
      documentation: remove unnecessary hyphens
      documentation: add missing hyphens
      documentation: use clearer prepositions
      documentation: fix punctuation
      documentation: fix capitalization
      documentation: fix whitespace issues
      documentation: add some commas where they are helpful
      documentation: add missing fullstops
      documentation: add missing quotes
      documentation: add missing parenthesis
      RelNotes: minor wording fixes in 2.43.0 release notes

Emily Shaffer (2):
      t0091-bugreport: stop using i18ngrep
      bugreport: reject positional arguments

Eric W. Biederman (1):
      bulk-checkin: only support blobs in index_bulk_checkin

Eric Wong (1):
      treewide: fix various bugs w/ OpenSSL 3+ EVP API

Evan Gates (1):
      git-config: fix misworded --type=path explanation

Han Young (1):
      show doc: redirect user to git log manual instead of git diff-tree

Isoken June Ibizugbe (1):
      builtin/branch.c: adjust error messages to coding guidelines

Jacob Abel (1):
      builtin/worktree.c: fix typo in "forgot fetch" msg

Jacob Stopak (1):
      Include gettext.h in MyFirstContribution tutorial

Jan Alexander Steffens (heftig) (6):
      submodule--helper: use submodule_from_path in set-{url,branch}
      submodule--helper: return error from set-url when modifying failed
      t7419: actually test the branch switching
      t7419, t7420: use test_cmp_config instead of grepping .gitmodules
      t7419: test that we correctly handle renamed submodules
      t7420: test that we correctly handle renamed submodules

Jason Hatton (1):
      Prevent git from rehashing 4GiB files

Javier Mora (2):
      git-status.txt: fix minor asciidoc format issue
      doc/git-bisect: clarify `git bisect run` syntax

Jeff King (114):
      hashmap: use expected signatures for comparison functions
      diff-files: avoid negative exit value
      diff: show usage for unknown builtin_diff_files() options
      diff: die when failing to read index in git-diff builtin
      diff: drop useless return from run_diff_{files,index} functions
      diff: drop useless return values in git-diff helpers
      diff: drop useless "status" parameter from diff_result_code()
      commit-graph: verify swapped zero/non-zero generation cases
      test-lib: ignore uninteresting LSan output
      sequencer: use repository parameter in short_commit_name()
      sequencer: mark repository argument as unused
      ref-filter: mark unused parameters in parser callbacks
      pack-bitmap: mark unused parameters in show_object callback
      worktree: mark unused parameters in each_ref_fn callback
      commit-graph: mark unused data parameters in generation callbacks
      ls-tree: mark unused parameter in callback
      stash: mark unused parameter in diff callback
      trace2: mark unused us_elapsed_absolute parameters
      trace2: mark unused config callback parameter
      test-trace2: mark unused argv/argc parameters
      grep: mark unused parameter in output function
      add-interactive: mark unused callback parameters
      negotiator/noop: mark unused callback parameters
      worktree: mark unused parameters in noop repair callback
      imap-send: mark unused parameters with NO_OPENSSL
      grep: mark unused parmaeters in pcre fallbacks
      credential: mark unused parameter in urlmatch callback
      fetch: mark unused parameter in ref_transaction callback
      bundle-uri: mark unused parameters in callbacks
      gc: mark unused descriptors in scheduler callbacks
      update-ref: mark unused parameter in parser callbacks
      ci: allow branch selection through "vars"
      ci: deprecate ci/config/allow-ref script
      merge: make xopts a strvec
      merge: simplify parsing of "-n" option
      format-patch: use OPT_STRING_LIST for to/cc options
      tree-walk: reduce stack size for recursive functions
      tree-walk: drop MAX_TRAVERSE_TREES macro
      tree-walk: rename "error" variable
      fsck: detect very large tree pathnames
      add core.maxTreeDepth config
      traverse_trees(): respect max_allowed_tree_depth
      read_tree(): respect max_allowed_tree_depth
      list-objects: respect max_allowed_tree_depth
      tree-diff: respect max_allowed_tree_depth
      lower core.maxTreeDepth default to 2048
      checkout-index: delay automatic setting of to_tempfile
      parse-options: prefer opt->value to globals in callbacks
      parse-options: mark unused "opt" parameter in callbacks
      merge: do not pass unused opt->value parameter
      parse-options: add more BUG_ON() annotations
      interpret-trailers: mark unused "unset" parameters in option callbacks
      parse-options: mark unused parameters in noop callback
      merge-ort: drop custom err() function
      merge-ort: stop passing "opt" to read_oid_strbuf()
      merge-ort: drop unused parameters from detect_and_process_renames()
      merge-ort: drop unused "opt" parameter from merge_check_renames_reusable()
      http: factor out matching of curl http/2 trace lines
      http: update curl http/2 info matching for curl 8.3.0
      merge-ort: lowercase a few error messages
      fsmonitor: prefer repo_git_path() to git_pathdup()
      fsmonitor/win32: drop unused parameters
      fsmonitor: mark some maybe-unused parameters
      fsmonitor/win32: mark unused parameter in fsm_os__incompatible()
      fsmonitor: mark unused parameters in stub functions
      fsmonitor/darwin: mark unused parameters in system callback
      fsmonitor: mark unused hashmap callback parameters
      run-command: mark unused parameters in start_bg_wait callbacks
      test-lib: set UBSAN_OPTIONS to match ASan
      commit-graph: factor out chain opening function
      commit-graph: check mixed generation validation when loading chain file
      t5324: harmonize sha1/sha256 graph chain corruption
      commit-graph: detect read errors when verifying graph chain
      commit-graph: tighten chain size check
      commit-graph: report incomplete chains during verification
      t6700: mark test as leak-free
      commit-reach: free temporary list in get_octopus_merge_bases()
      merge: free result of repo_get_merge_bases()
      commit-graph: move slab-clearing to close_commit_graph()
      commit-graph: free all elements of graph chain
      commit-graph: delay base_graph assignment in add_graph_to_chain()
      commit-graph: free graph struct that was not added to chain
      commit-graph: free write-context entries before overwriting
      commit-graph: free write-context base_graph_name during cleanup
      commit-graph: clear oidset after finishing write
      decorate: add clear_decoration() function
      revision: clear decoration structs during release_revisions()
      daemon: free listen_addr before returning
      repack: free existing_cruft array after use
      chunk-format: note that pair_chunk() is unsafe
      t: add library for munging chunk-format files
      midx: stop ignoring malformed oid fanout chunk
      commit-graph: check size of oid fanout chunk
      midx: check size of oid lookup chunk
      commit-graph: check consistency of fanout table
      midx: check size of pack names chunk
      midx: enforce chunk alignment on reading
      midx: check size of object offset chunk
      midx: bounds-check large offset chunk
      midx: check size of revindex chunk
      commit-graph: check size of commit data chunk
      commit-graph: detect out-of-bounds extra-edges pointers
      commit-graph: bounds-check base graphs chunk
      commit-graph: check size of generations chunk
      commit-graph: bounds-check generation overflow chunk
      commit-graph: check bounds when accessing BDAT chunk
      commit-graph: check bounds when accessing BIDX chunk
      commit-graph: detect out-of-order BIDX offsets
      chunk-format: drop pair_chunk_unsafe()
      t5319: make corrupted large-offset test more robust
      doc/send-email: mention handling of "reply-to" with --compose
      Revert "send-email: extract email-parsing code into a subroutine"
      send-email: handle to/cc/bcc from --compose message
      t: avoid perl's pack/unpack "Q" specifier

Johannes Schindelin (19):
      windows: ignore empty `PATH` elements
      is_Cygwin: avoid `exec`ing anything
      Move is_<platform> functions to the beginning
      Move the `_which` function (almost) to the top
      Work around Tcl's default `PATH` lookup
      rebase: allow overriding the maximal length of the generated labels
      ci: avoid building from the same commit in parallel
      ci(linux-asan-ubsan): let's save some time
      var: avoid a segmentation fault when `HOME` is unset
      completion(switch/checkout): treat --track and -t the same
      maintenance(systemd): support the Windows Subsystem for Linux
      ci: add a GitHub workflow to submit Coverity scans
      coverity: cache the Coverity Build Tool
      coverity: allow overriding the Coverity project
      coverity: support building on Windows
      coverity: allow running on macOS
      coverity: detect and report when the token or project is incorrect
      max_tree_depth: lower it for MSVC to avoid stack overflows
      ci: upgrade to using macos-13

John Cai (3):
      merge-ort: initialize repo in index state
      attr: read attributes from HEAD when bare repo
      attr: add attr.tree for setting the treeish to read attributes from

Josh Soref (1):
      Documentation/git-status: add missing line breaks

Josip Sokcevic (1):
      diff-lib: fix check_removed when fsmonitor is on

Junio C Hamano (56):
      update-index: do not read HEAD and MERGE_HEAD unconditionally
      resolve-undo: allow resurrecting conflicted state that resolved to deletion
      update-index: use unmerge_index_entry() to support removal
      update-index: remove stale fallback code for "--unresolve"
      checkout/restore: refuse unmerging paths unless checking out of the index
      checkout/restore: add basic tests for --merge
      checkout: allow "checkout -m path" to unmerge removed paths
      mv: fix error for moving directory to another
      diff: move the fallback "--exit-code" code down
      diff: mode-only change should be noticed by "--patch -w --exit-code"
      diff: teach "--stat -w --exit-code" to notice differences
      t4040: remove test that succeeded for a wrong reason
      pretty-formats: define "literal formatting code"
      diff: spell DIFF_INDEX_CACHED out when calling run_diff_index()
      diff: the -w option breaks --exit-code for --raw and other output modes
      transfer.unpackLimit: fetch/receive.unpackLimit takes precedence
      Start the 2.43 cycle
      The second batch for 2.43
      The extra batch to update credenthal helpers
      The third batch
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      update-index doc: v4 is OK with JGit and libgit2
      update-index: add --show-index-version
      test-tool: retire "index-version"
      The eighth batch
      The ninth batch
      The tenth batch
      The eleventh batch
      completion: loosen and document the requirement around completing alias
      The twelfth batch
      The thirteenth batch
      The fourteenth batch
      The fifteenth batch
      doc: update list archive reference to use lore.kernel.org
      The sixteenth batch
      merge: introduce {copy|clear}_merge_options()
      stash: be careful what we store
      grep: -f <path> is relative to $cwd
      The seventeenth batch
      The eighteenth batch
      commit: do not use cryptic "new_index" in end-user facing messages
      The nineteenth batch
      am: align placeholder for --whitespace option with apply
      The twentieth batch
      The twenty-first batch
      The twenty-second batch
      test framework: further deprecate test_i18ngrep
      Git 2.42.1
      tests: teach callers of test_i18ngrep to use test_grep
      A bit more before -rc1
      Prepare for -rc1
      Git 2.43-rc1
      Git 2.43-rc2

Karthik Nayak (3):
      revision: rename bit to `do_not_die_on_missing_objects`
      rev-list: move `show_commit()` to the bottom
      rev-list: add commit object support in `--missing` option

Kousik Sanagavarapu (4):
      ref-filter: sort numerically when ":size" is used
      t/t6300: cleanup test_atom
      t/t6300: introduce test_bad_atom
      ref-filter: add mailmap support

Kristoffer Haugsbakk (2):
      range-diff: treat notes like `log`
      grep: die gracefully when outside repository

Linus Arver (17):
      trailer tests: make test cases self-contained
      trailer test description: this tests --where=after, not --where=before
      trailer: add tests to check defaulting behavior with --no-* flags
      trailer doc: narrow down scope of --where and related flags
      trailer: trailer location is a place, not an action
      trailer --no-divider help: describe usual "---" meaning
      trailer --parse help: expose aliased options
      trailer --only-input: prefer "configuration variables" over "rules"
      trailer --parse docs: add explanation for its usefulness
      trailer --unfold help: prefer "reformat" over "join"
      trailer doc: emphasize the effect of configuration variables
      trailer doc: separator within key suppresses default separator
      trailer doc: <token> is a <key> or <keyAlias>, not both
      trailer: separate public from internal portion of trailer_iterator
      trailer: split process_input_file into separate pieces
      trailer: split process_command_line_args into separate functions
      strvec: drop unnecessary include of hex.h

M Hickford (3):
      credential/libsecret: store new attributes
      credential/libsecret: erase matching creds only
      credential/wincred: erase matching creds only

Mark Levedahl (6):
      git gui Makefile - remove Cygwin modifications
      git-gui - remove obsolete Cygwin specific code
      git-gui - use cygstart to browse on Cygwin
      git-gui - use mkshortcut on Cygwin
      git-gui - re-enable use of hook scripts
      git-gui - use git-hook, honor core.hooksPath

Mark Ruvald Pedersen (1):
      sequencer: truncate labels to accommodate loose refs

Martin Ågren (1):
      git-merge-file doc: drop "-file" from argument placeholders

Matthew McClain (1):
      git-p4 shouldn't attempt to store symlinks in LFS

Michael Strawbridge (1):
      send-email: move validation code below process_address_list

Michal Suchanek (1):
      git-push doc: more visibility for -q option

Naomi Ibe (1):
      builtin/add.c: clean up die() messages

Oswald Buddenhagen (16):
      t/lib-rebase: set_fake_editor(): fix recognition of reset's short command
      t/lib-rebase: set_fake_editor(): handle FAKE_LINES more consistently
      sequencer: simplify allocation of result array in todo_list_rearrange_squash()
      t/lib-rebase: improve documentation of set_fake_editor()
      t9001: fix indentation in test_no_confirm()
      format-patch: add --description-file option
      sequencer: rectify empty hint in call of require_clean_work_tree()
      sequencer: beautify subject of reverts of reverts
      git-revert.txt: add discussion
      sequencer: fix error message on failure to copy SQUASH_MSG
      t3404-rebase-interactive.sh: fix typos in title of a rewording test
      sequencer: remove unreachable exit condition in pick_commits()
      am: fix error message in parse_opt_show_current_patch()
      rebase: simplify code related to imply_merge()
      rebase: handle --strategy via imply_merge() as well
      rebase: move parse_opt_keep_empty() down

Patrick Steinhardt (23):
      upload-pack: fix exit code when denying fetch of unreachable object ID
      revision: make pseudo-opt flags read via stdin behave consistently
      doc/git-worktree: mention "refs/rewritten" as per-worktree refs
      doc/git-repack: fix syntax for `-g` shorthand option
      doc/git-repack: don't mention nonexistent "--unpacked" option
      commit-graph: introduce envvar to disable commit existence checks
      commit: detect commits that exist in commit-graph but not in the ODB
      builtin/show-ref: convert pattern to a local variable
      builtin/show-ref: split up different subcommands
      builtin/show-ref: fix leaking string buffer
      builtin/show-ref: fix dead code when passing patterns
      builtin/show-ref: refactor `--exclude-existing` options
      builtin/show-ref: stop using global variable to count matches
      builtin/show-ref: stop using global vars for `show_one()`
      builtin/show-ref: refactor options for patterns subcommand
      builtin/show-ref: ensure mutual exclusiveness of subcommands
      builtin/show-ref: explicitly spell out different modes in synopsis
      builtin/show-ref: add new mode to check for reference existence
      t: use git-show-ref(1) to check for ref existence
      test-bloom: stop setting up Git directory twice
      shallow: fix memory leak when registering shallow roots
      setup: refactor `upgrade_repository_format()` to have common exit
      setup: fix leaking repository format

Philippe Blain (3):
      completion: commit: complete configured trailer tokens
      completion: commit: complete trailers tokens more robustly
      completion: improve doc for complex aliases

Phillip Wood (7):
      rebase -i: move unlink() calls
      rebase -i: remove patch file after conflict resolution
      sequencer: use rebase_path_message()
      sequencer: factor out part of pick_commits()
      rebase: fix rewritten list for failed pick
      rebase --continue: refuse to commit after failed command
      rebase -i: fix adding failed command to the todo list

René Scharfe (18):
      subtree: disallow --no-{help,quiet,debug,branch,message}
      t1502, docs: disallow --no-help
      t1502: move optionspec help output to a file
      t1502: test option negation
      parse-options: show negatability of options in short help
      parse-options: factor out usage_indent() and usage_padding()
      parse-options: no --[no-]no-...
      parse-options: simplify usage_padding()
      parse-options: allow omitting option help text
      name-rev: use OPT_HIDDEN_BOOL for --peel-tag
      grep: use OPT_INTEGER_F for --max-depth
      grep: reject --no-or
      diff --no-index: fix -R with stdin
      parse-options: drop unused parse_opt_ctx_t member
      parse-options: make CMDMODE errors more precise
      am: simplify --show-current-patch handling
      am, rebase: fix arghelp syntax of --empty
      reflog: fix expire --single-worktree

Robert Coup (1):
      upload-pack: add tracing for fetches

Rubén Justo (2):
      branch: error message deleting a branch in use
      branch: error message checking out a branch in use

Sergey Organov (4):
      doc/diff-options: fix link to generating patch section
      diff-merges: improve --diff-merges documentation
      diff-merges: introduce '--dd' option
      completion: complete '--dd'

Shuqi Liang (3):
      t1092: add tests for 'git check-attr'
      attr.c: read attributes in a sparse directory
      check-attr: integrate with sparse-index

Tang Yuyi (1):
      merge-tree: add -X strategy option

Taylor Blau (28):
      repack: move `pack_geometry` struct to the stack
      commit-graph: introduce `commit_graph_generation_from_graph()`
      t/t5318-commit-graph.sh: test generation zero transitions during fsck
      commit-graph: avoid repeated mixed generation number warnings
      leak tests: mark a handful of tests as leak-free
      leak tests: mark t3321-notes-stripspace.sh as leak-free
      leak tests: mark t5583-push-branches.sh as leak-free
      builtin/pack-objects.c: remove unnecessary strbuf_reset()
      builtin/pack-objects.c: support `--max-pack-size` with `--cruft`
      Documentation/gitformat-pack.txt: remove multi-cruft packs alternative
      Documentation/gitformat-pack.txt: drop mixed version section
      builtin/repack.c: extract structure to store existing packs
      builtin/repack.c: extract marking packs for deletion
      builtin/repack.c: extract redundant pack cleanup for --geometric
      builtin/repack.c: extract redundant pack cleanup for existing packs
      builtin/repack.c: extract `has_existing_non_kept_packs()`
      builtin/repack.c: store existing cruft packs separately
      builtin/repack.c: avoid directly inspecting "util"
      builtin/repack.c: extract common cruft pack loop
      git-send-email.perl: avoid printing undef when validating addresses
      t7700: split cruft-related tests to t7704
      builtin/repack.c: parse `--max-pack-size` with OPT_MAGNITUDE
      builtin/repack.c: implement support for `--max-cruft-size`
      builtin/repack.c: avoid making cruft packs preferred
      Documentation/gitformat-pack.txt: fix typo
      Documentation/gitformat-pack.txt: fix incorrect MIDX documentation
      list-objects: drop --unpacked non-commit objects from results
      pack-bitmap: drop --unpacked non-commit objects from results

Todd Zullinger (2):
      RelNotes: minor typo fixes in 2.43.0 draft
      RelNotes: improve wording of credential helper notes

Victoria Dye (4):
      ref-cache.c: fix prefix matching in ref iteration
      dir.[ch]: expose 'get_dtype'
      dir.[ch]: add 'follow_symlink' arg to 'get_dtype'
      files-backend.c: avoid stat in 'loose_fill_ref_dir'

Vipul Kumar (1):
      git-gui: Fix a typo in README

Wesley Schwengle (2):
      git-push.txt: fix grammar
      git-svn: drop FakeTerm hack

brian m. carlson (2):
      t: add a test helper to truncate files
      merge-file: add an option to process object IDs

Ævar Arnfjörð Bjarmason (1):
      Makefiles: change search through $(MAKEFLAGS) for GNU make 4.4

Štěpán Němec (6):
      doc: fix some typos, grammar and wording issues
      doc/diff-options: improve wording of the log.diffMerges mention
      git-jump: admit to passing merge mode args to ls-files
      doc/gitk: s/sticked/stuck/
      t/README: fix multi-prerequisite example
      doc/cat-file: make synopsis and description less confusing

王常新 (1):
      merge-ort.c: fix typo 'neeed' to 'needed'

谢致邦 (XIE Zhibang) (2):
      doc: correct the 50 characters soft limit
      doc: correct the 50 characters soft limit (+)



^ permalink raw reply	[relevance 4%]

* [ANNOUNCE] Git v2.43.0-rc1
@ 2023-11-08 17:33  4% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2023-11-08 17:33 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.43.0-rc1 is now available for testing at
the usual places.  It is comprised of 449 non-merge commits since
v2.42.0, contributed by 71 people, 17 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.43.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.42.0 are as follows.
Welcome to the Git development community!

  Aditya Neelamraju, Alyssa Ross, Caleb Hill, Dorcas AnonoLitunya,
  Dragan Simic, Isoken June Ibizugbe, Jan Alexander Steffens
  (heftig), Javier Mora, ks1322 ks1322, Mark Ruvald Pedersen,
  Matthew McClain, Naomi Ibe, Romain Chossart, Tang Yuyi, Vipul
  Kumar, 王常新, and 谢致邦 (XIE Zhibang).

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Andrei Rybak, Andy Koppe, Bagas
  Sanjaya, Beat Bolli, brian m. carlson, Calvin Wan, Christian
  Couder, Christian Hesse, Derrick Stolee, Drew DeVault, Elijah
  Newren, Emily Shaffer, Eric W. Biederman, Eric Wong, Evan
  Gates, Han Young, Hariom Verma, Jacob Abel, Jacob Stopak,
  Jason Hatton, Jeff King, Johannes Schindelin, John Cai,
  Josh Soref, Josip Sokcevic, Junio C Hamano, Karthik Nayak,
  Kousik Sanagavarapu, Kristoffer Haugsbakk, Linus Arver, Mark
  Levedahl, Martin Ågren, Martin Storsjö, M Hickford, Michael
  Strawbridge, Michal Suchanek, Oswald Buddenhagen, Patrick
  Steinhardt, Philippe Blain, Phillip Wood, Randall S. Becker,
  René Scharfe, Robert Coup, Rubén Justo, Sergey Organov, Shuqi
  Liang, Stefan Haller, Štěpán Němec, Taylor Blau, Teng Long,
  Todd Zullinger, Victoria Dye, and Wesley Schwengle.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.43 Release Notes (draft)
===============================

Backward Compatibility Notes

 * The "--rfc" option of "git format-patch" used to be a valid way to
   override an earlier "--subject-prefix=<something>" on the command
   line and replace it with "[RFC PATCH]", but from this release, it
   merely prefixes the string "RFC " in front of the given subject
   prefix.  If you are negatively affected by this change, please use
   "--subject-prefix=PATCH --rfc" as a replacement.

 * "git rev-list --stdin" learned to take non-revisions (like "--not")
   recently from the standard input, but the way such a "--not" was
   handled was quite confusing, which has been rethought.  The updated
   rule is that "--not" given from the command line only affects revs
   given from the command line that comes but not revs read from the
   standard input, and "--not" read from the standard input affects
   revs given from the standard input and not revs given from the
   command line.

UI, Workflows & Features

 * A message written in olden time prevented a branch from getting
   checked out saying it is already checked out elsewhere, but these
   days, we treat a branch that is being bisected or rebased just like
   a branch that is checked out and protect it.  Rephrase the message
   to say that the branch is in use.

 * Hourly and other schedule of "git maintenance" jobs are randomly
   distributed now.

 * "git cmd -h" learned to signal which options can be negated by
   listing such options like "--[no-]opt".

 * The way authentication related data other than passwords (e.g.
   oath token and password expiration data) are stored in libsecret
   keyrings has been rethought.

 * Update the libsecret and wincred credential helpers to correctly
   match which credential to erase; they erased the wrong entry in
   some cases.

 * Git GUI updates.

 * "git format-patch" learns a way to feed cover letter description,
   that (1) can be used on detached HEAD where there is no branch
   description available, and (2) also can override the branch
   description if there is one.

 * Use of --max-pack-size to allow multiple packfiles to be created is
   now supported even when we are sending unreachable objects to cruft
   packs.

 * "git format-patch --rfc --subject-prefix=<foo>" used to ignore the
   "--subject-prefix" option and used "[RFC PATCH]"; now we will add
   "RFC" prefix to whatever subject prefix is specified.

 * "git log --format" has been taught the %(decorate) placeholder.

 * The default log message created by "git revert", when reverting a
   commit that records a revert, has been tweaked, to encourage people
   describe complex "revert of revert of revert" situation better in
   their own words.

 * The command-line completion support (in contrib/) learned to
   complete "git commit --trailer=" for possible trailer keys.

 * "git update-index" learns "--show-index-version" to inspect
   the index format version used by the on-disk index file.

 * "git diff" learned diff.statNameWidth configuration variable, to
   give the default width for the name part in the "--stat" output.

 * "git range-diff --notes=foo" compared "log --notes=foo --notes" of
   the two ranges, instead of using just the specified notes tree.

 * The command line completion script (in contrib/) can be told to
   complete aliases by including ": git <cmd> ;" in the alias to tell
   it that the alias should be completed similar to how "git <cmd>" is
   completed.  The parsing code for the alias as been loosened to
   allow ';' without an extra space before it.

 * "git for-each-ref" and friends learned to apply mailmap to
   authorname and other fields.

 * "git repack" machinery learns to pay attention to the "--filter="
   option.

 * "git repack" learned "--max-cruft-size" to prevent cruft packs from
   growing without bounds.

 * "git merge-tree" learned to take strategy backend specific options
   via the "-X" option, like "git merge" does.

 * "git log" and friends learned "--dd" that is a short-hand for
   "--diff-merges=first-parent -p".

 * The attribute subsystem learned to honor `attr.tree` configuration
   that specifies which tree to read the .gitattributes files from.

 * "git merge-file" learns a mode to read three contents to be merged
   from blob objects.


Performance, Internal Implementation, Development Support etc.

 * "git check-attr" has been taught to work better with sparse-index.

 * It may be tempting to leave the help text NULL for a command line
   option that is either hidden or too obvious, but "git subcmd -h"
   and "git subcmd --help-all" would have segfaulted if done so.  Now
   the help text is optional.

 * Tests that are known to pass with LSan are now marked as such.

 * Flaky "git p4" tests, as well as "git svn" tests, are now skipped
   in the (rather expensive) sanitizer CI job.

 * Tests with LSan from time to time seem to emit harmless message
   that makes our tests unnecessarily flaky; we work it around by
   filtering the uninteresting output.

 * Unused parameters to functions are marked as such, and/or removed,
   in order to bring us closer to -Wunused-parameter clean.

 * The code to keep track of existing packs in the repository while
   repacking has been refactored.

 * The "streaming" interface used for bulk-checkin codepath has been
   narrowed to take only blob objects for now, with no real loss of
   functionality.

 * GitHub CI workflow has learned to trigger Coverity check.

 * Test coverage for trailers has been improved.

 * The code to iterate over loose references have been optimized to
   reduce the number of lstat() system calls.

 * The codepaths that read "chunk" formatted files have been corrected
   to pay attention to the chunk size and notice broken files.

 * Replace macos-12 used at GitHub CI with macos-13.
   (merge 682a868f67 js/ci-use-macos-13 later to maint).


Fixes since v2.42
-----------------

 * Overly long label names used in the sequencer machinery are now
   chopped to fit under filesystem limitation.

 * Scalar updates.

 * Tweak GitHub Actions CI so that pushing the same commit to multiple
   branch tips at the same time will not waste building and testing
   the same thing twice.

 * The commit-graph verification code that detects mixture of zero and
   non-zero generation numbers has been updated.

 * "git diff -w --exit-code" with various options did not work
   correctly, which is being addressed.

 * transfer.unpackLimit ought to be used as a fallback, but overrode
   fetch.unpackLimit and receive.unpackLimit instead.

 * The use of API between two calls to require_clean_work_tree() from
   the sequencer code has been cleaned up for consistency.

 * "git diff --no-such-option" and other corner cases around the exit
   status of the "diff" command has been corrected.

 * "git for-each-ref --sort='contents:size'" sorts the refs according
   to size numerically, giving a ref that points at a blob twelve-byte
   (12) long before showing a blob hundred-byte (100) long.

 * We now limit depth of the tree objects and maximum length of
   pathnames recorded in tree objects.
   (merge 4d5693ba05 jk/tree-name-and-depth-limit later to maint).

 * Various fixes to the behavior of "rebase -i" when the command got
   interrupted by conflicting changes.

 * References from description of the `--patch` option in various
   manual pages have been simplified and improved.

 * "git grep -e A --no-or -e B" is accepted, even though the negation
   of "or" did not mean anything, which has been tightened.

 * The completion script (in contrib/) has been taught to treat the
   "-t" option to "git checkout" and "git switch" just like the
   "--track" option, to complete remote-tracking branches.

 * "git diff --no-index -R <(one) <(two)" did not work correctly,
   which has been corrected.

 * Update "git maintenance" timers' implementation based on systemd
   timers to work with WSL.

 * "git diff --cached" codepath did not fill the necessary stat
   information for a file when fsmonitor knows it is clean and ended
   up behaving as if it is not clean, which has been corrected.

 * Clarify how "alias.foo = : git cmd ; aliased-command-string" should
   be spelled with necessary whitespaces around punctuation marks to
   work.

 * HTTP Header redaction code has been adjusted for a newer version of
   cURL library that shows its traces differently from earlier
   versions.

 * An error message given by "git send-email" when given a malformed
   address did not give correct information, which has been corrected.

 * UBSan options were not propagated through the test framework to git
   run via the httpd, unlike ASan options, which has been corrected.

 * "checkout --merge -- path" and "update-index --unresolve path" did
   not resurrect conflicted state that was resolved to remove path,
   but now they do.
   (merge 5bdedac3c7 jc/unresolve-removal later to maint).

 * The display width table for unicode characters has been updated for
   Unicode 15.1
   (merge 872976c37e bb/unicode-width-table-15 later to maint).

 * Update mailmap entry for Derrick.
   (merge 6e5457d8c7 ds/mailmap-entry-update later to maint).

 * In .gitmodules files, submodules are keyed by their names, and the
   path to the submodule whose name is $name is specified by the
   submodule.$name.path variable.  There were a few codepaths that
   mixed the name and path up when consulting the submodule database,
   which have been corrected.  It took long for these bugs to be found
   as the name of a submodule initially is the same as its path, and
   the problem does not surface until it is moved to a different path,
   which apparently happens very rarely.

 * "git diff --merge-base X other args..." insisted that X must be a
   commit and errored out when given an annotated tag that peels to a
   commit, but we only need it to be a committish.  This has been
   corrected.
   (merge 4adceb5a29 ar/diff-index-merge-base-fix later to maint).

 * Fix "git merge-tree" to stop segfaulting when the --attr-source
   option is used.
   (merge e95bafc52f jc/merge-ort-attr-index-fix later to maint).

 * Unlike "git log --pretty=%D", "git log --pretty="%(decorate)" did
   not auto-initialize the decoration subsystem, which has been
   corrected.

 * Feeding "git stash store" with a random commit that was not created
   by "git stash create" now errors out.
   (merge d9b6634589 jc/fail-stash-to-store-non-stash later to maint).

 * The index file has room only for lower 32-bit of the file size in
   the cached stat information, which means cached stat information
   will have 0 in its sd_size member for a file whose size is multiple
   of 4GiB.  This is mistaken for a racily clean path.  Avoid it by
   storing a bogus sd_size value instead for such files.
   (merge 5143ac07b1 bc/racy-4gb-files later to maint).

 * "git p4" tried to store symlinks to LFS when told, but has been
   fixed not to do so, because it does not make sense.
   (merge 10c89a02b0 mm/p4-symlink-with-lfs later to maint).

 * The codepath to handle recipient addresses `git send-email
   --compose` learns from the user was completely broken, which has
   been corrected.
   (merge 3ec6167567 jk/send-email-fix-addresses-from-composed-messages later to maint).

 * "cd sub && git grep -f patterns" tried to read "patterns" file at
   the top level of the working tree; it has been corrected to read
   "sub/patterns" instead.


 * "git reflog expire --single-worktree" has been broken for the past
   20 months or so, which has been corrected.

 * "git send-email" did not have certain pieces of data computed yet
   when it tried to validate the outging messages and its recipient
   addresses, which has been sorted out.

 * "git bugreport" learned to complain when it received a command line
   argument that it will not use.

 * The codepath to traverse the commit-graph learned to notice that a
   commit is missing (e.g., corrupt repository lost an object), even
   though it knows something about the commit (like its parents) from
   what is in commit-graph.
   (merge 7a5d604443 ps/do-not-trust-commit-graph-blindly-for-existence later to maint).

 * "git rev-list --missing" did not work for missing commit objects,
   which has been corrected.

 * "git rev-list --unpacked --objects" failed to exclude packed
   non-commit objects, which has been corrected.
   (merge 7b3c8e9f38 tb/rev-list-unpacked-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge c2c349a15c xz/commit-title-soft-limit-doc later to maint).
   (merge 1bd809938a tb/format-pack-doc-update later to maint).
   (merge 8f81532599 an/clang-format-typofix later to maint).
   (merge 3ca86adc2d la/strvec-header-fix later to maint).
   (merge 6789275d37 jc/test-i18ngrep later to maint).
   (merge 9972cd6004 ps/leakfixes later to maint).

----------------------------------------------------------------

Changes since v2.42.0 are as follows:

Aditya Neelamraju (1):
      clang-format: fix typo in comment

Alyssa Ross (1):
      diff: fix --merge-base with annotated tags

Andrei Rybak (1):
      SubmittingPatches: call gitk's command "Copy commit reference"

Andy Koppe (8):
      pretty-formats: enclose options in angle brackets
      decorate: refactor format_decorations()
      decorate: avoid some unnecessary color overhead
      decorate: color each token separately
      pretty: add %(decorate[:<options>]) format
      pretty: add pointer and tag options to %(decorate)
      decorate: use commit color for HEAD arrow
      pretty: fix ref filtering for %(decorate) formats

Beat Bolli (1):
      unicode: update the width tables to Unicode 15.1

Caleb Hill (1):
      git-clean doc: fix "without do cleaning" typo

Calvin Wan (4):
      hex-ll: separate out non-hash-algo functions
      wrapper: reduce scope of remove_or_warn()
      config: correct bad boolean env value error message
      parse: separate out parsing functions from config.h

Christian Couder (9):
      pack-objects: allow `--filter` without `--stdout`
      t/helper: add 'find-pack' test-tool
      repack: refactor finishing pack-objects command
      repack: refactor finding pack prefix
      pack-bitmap-write: rebuild using new bitmap when remapping
      repack: add `--filter=<filter-spec>` option
      gc: add `gc.repackFilter` config option
      repack: implement `--filter-to` for storing filtered out objects
      gc: add `gc.repackFilterTo` config option

Christian Hesse (2):
      t/lib-gpg: forcibly run a trustdb update
      t/t6300: drop magic filtering

Derrick Stolee (13):
      upload-pack: fix race condition in error messages
      maintenance: add get_random_minute()
      maintenance: use random minute in launchctl scheduler
      maintenance: use random minute in Windows scheduler
      maintenance: use random minute in cron scheduler
      maintenance: swap method locations
      maintenance: use random minute in systemd scheduler
      maintenance: fix systemd schedule overlaps
      maintenance: update schedule before config
      scalar: add --[no-]src option
      setup: add discover_git_directory_reason()
      scalar reconfigure: help users remove buggy repos
      mailmap: change primary address for Derrick Stolee

Dorcas AnonoLitunya (1):
      t7601: use "test_path_is_file" etc. instead of "test -f"

Dragan Simic (2):
      diff --stat: add config option to limit filename width
      diff --stat: set the width defaults in a helper function

Drew DeVault (1):
      format-patch: --rfc honors what --subject-prefix sets

Elijah Newren (25):
      documentation: wording improvements
      documentation: fix small error
      documentation: fix typos
      documentation: fix apostrophe usage
      documentation: add missing words
      documentation: remove extraneous words
      documentation: fix subject/verb agreement
      documentation: employ consistent verb tense for a list
      documentation: fix verb tense
      documentation: fix adjective vs. noun
      documentation: fix verb vs. noun
      documentation: fix singular vs. plural
      documentation: whitespace is already generally plural
      documentation: fix choice of article
      documentation: add missing article
      documentation: remove unnecessary hyphens
      documentation: add missing hyphens
      documentation: use clearer prepositions
      documentation: fix punctuation
      documentation: fix capitalization
      documentation: fix whitespace issues
      documentation: add some commas where they are helpful
      documentation: add missing fullstops
      documentation: add missing quotes
      documentation: add missing parenthesis

Emily Shaffer (2):
      t0091-bugreport: stop using i18ngrep
      bugreport: reject positional arguments

Eric W. Biederman (1):
      bulk-checkin: only support blobs in index_bulk_checkin

Eric Wong (1):
      treewide: fix various bugs w/ OpenSSL 3+ EVP API

Evan Gates (1):
      git-config: fix misworded --type=path explanation

Han Young (1):
      show doc: redirect user to git log manual instead of git diff-tree

Isoken June Ibizugbe (1):
      builtin/branch.c: adjust error messages to coding guidelines

Jacob Abel (1):
      builtin/worktree.c: fix typo in "forgot fetch" msg

Jacob Stopak (1):
      Include gettext.h in MyFirstContribution tutorial

Jan Alexander Steffens (heftig) (6):
      submodule--helper: use submodule_from_path in set-{url,branch}
      submodule--helper: return error from set-url when modifying failed
      t7419: actually test the branch switching
      t7419, t7420: use test_cmp_config instead of grepping .gitmodules
      t7419: test that we correctly handle renamed submodules
      t7420: test that we correctly handle renamed submodules

Jason Hatton (1):
      Prevent git from rehashing 4GiB files

Javier Mora (2):
      git-status.txt: fix minor asciidoc format issue
      doc/git-bisect: clarify `git bisect run` syntax

Jeff King (114):
      hashmap: use expected signatures for comparison functions
      diff-files: avoid negative exit value
      diff: show usage for unknown builtin_diff_files() options
      diff: die when failing to read index in git-diff builtin
      diff: drop useless return from run_diff_{files,index} functions
      diff: drop useless return values in git-diff helpers
      diff: drop useless "status" parameter from diff_result_code()
      commit-graph: verify swapped zero/non-zero generation cases
      test-lib: ignore uninteresting LSan output
      sequencer: use repository parameter in short_commit_name()
      sequencer: mark repository argument as unused
      ref-filter: mark unused parameters in parser callbacks
      pack-bitmap: mark unused parameters in show_object callback
      worktree: mark unused parameters in each_ref_fn callback
      commit-graph: mark unused data parameters in generation callbacks
      ls-tree: mark unused parameter in callback
      stash: mark unused parameter in diff callback
      trace2: mark unused us_elapsed_absolute parameters
      trace2: mark unused config callback parameter
      test-trace2: mark unused argv/argc parameters
      grep: mark unused parameter in output function
      add-interactive: mark unused callback parameters
      negotiator/noop: mark unused callback parameters
      worktree: mark unused parameters in noop repair callback
      imap-send: mark unused parameters with NO_OPENSSL
      grep: mark unused parmaeters in pcre fallbacks
      credential: mark unused parameter in urlmatch callback
      fetch: mark unused parameter in ref_transaction callback
      bundle-uri: mark unused parameters in callbacks
      gc: mark unused descriptors in scheduler callbacks
      update-ref: mark unused parameter in parser callbacks
      ci: allow branch selection through "vars"
      ci: deprecate ci/config/allow-ref script
      merge: make xopts a strvec
      merge: simplify parsing of "-n" option
      format-patch: use OPT_STRING_LIST for to/cc options
      tree-walk: reduce stack size for recursive functions
      tree-walk: drop MAX_TRAVERSE_TREES macro
      tree-walk: rename "error" variable
      fsck: detect very large tree pathnames
      add core.maxTreeDepth config
      traverse_trees(): respect max_allowed_tree_depth
      read_tree(): respect max_allowed_tree_depth
      list-objects: respect max_allowed_tree_depth
      tree-diff: respect max_allowed_tree_depth
      lower core.maxTreeDepth default to 2048
      checkout-index: delay automatic setting of to_tempfile
      parse-options: prefer opt->value to globals in callbacks
      parse-options: mark unused "opt" parameter in callbacks
      merge: do not pass unused opt->value parameter
      parse-options: add more BUG_ON() annotations
      interpret-trailers: mark unused "unset" parameters in option callbacks
      parse-options: mark unused parameters in noop callback
      merge-ort: drop custom err() function
      merge-ort: stop passing "opt" to read_oid_strbuf()
      merge-ort: drop unused parameters from detect_and_process_renames()
      merge-ort: drop unused "opt" parameter from merge_check_renames_reusable()
      http: factor out matching of curl http/2 trace lines
      http: update curl http/2 info matching for curl 8.3.0
      merge-ort: lowercase a few error messages
      fsmonitor: prefer repo_git_path() to git_pathdup()
      fsmonitor/win32: drop unused parameters
      fsmonitor: mark some maybe-unused parameters
      fsmonitor/win32: mark unused parameter in fsm_os__incompatible()
      fsmonitor: mark unused parameters in stub functions
      fsmonitor/darwin: mark unused parameters in system callback
      fsmonitor: mark unused hashmap callback parameters
      run-command: mark unused parameters in start_bg_wait callbacks
      test-lib: set UBSAN_OPTIONS to match ASan
      commit-graph: factor out chain opening function
      commit-graph: check mixed generation validation when loading chain file
      t5324: harmonize sha1/sha256 graph chain corruption
      commit-graph: detect read errors when verifying graph chain
      commit-graph: tighten chain size check
      commit-graph: report incomplete chains during verification
      t6700: mark test as leak-free
      commit-reach: free temporary list in get_octopus_merge_bases()
      merge: free result of repo_get_merge_bases()
      commit-graph: move slab-clearing to close_commit_graph()
      commit-graph: free all elements of graph chain
      commit-graph: delay base_graph assignment in add_graph_to_chain()
      commit-graph: free graph struct that was not added to chain
      commit-graph: free write-context entries before overwriting
      commit-graph: free write-context base_graph_name during cleanup
      commit-graph: clear oidset after finishing write
      decorate: add clear_decoration() function
      revision: clear decoration structs during release_revisions()
      daemon: free listen_addr before returning
      repack: free existing_cruft array after use
      chunk-format: note that pair_chunk() is unsafe
      t: add library for munging chunk-format files
      midx: stop ignoring malformed oid fanout chunk
      commit-graph: check size of oid fanout chunk
      midx: check size of oid lookup chunk
      commit-graph: check consistency of fanout table
      midx: check size of pack names chunk
      midx: enforce chunk alignment on reading
      midx: check size of object offset chunk
      midx: bounds-check large offset chunk
      midx: check size of revindex chunk
      commit-graph: check size of commit data chunk
      commit-graph: detect out-of-bounds extra-edges pointers
      commit-graph: bounds-check base graphs chunk
      commit-graph: check size of generations chunk
      commit-graph: bounds-check generation overflow chunk
      commit-graph: check bounds when accessing BDAT chunk
      commit-graph: check bounds when accessing BIDX chunk
      commit-graph: detect out-of-order BIDX offsets
      chunk-format: drop pair_chunk_unsafe()
      t5319: make corrupted large-offset test more robust
      doc/send-email: mention handling of "reply-to" with --compose
      Revert "send-email: extract email-parsing code into a subroutine"
      send-email: handle to/cc/bcc from --compose message
      t: avoid perl's pack/unpack "Q" specifier

Johannes Schindelin (19):
      windows: ignore empty `PATH` elements
      is_Cygwin: avoid `exec`ing anything
      Move is_<platform> functions to the beginning
      Move the `_which` function (almost) to the top
      Work around Tcl's default `PATH` lookup
      rebase: allow overriding the maximal length of the generated labels
      ci: avoid building from the same commit in parallel
      ci(linux-asan-ubsan): let's save some time
      var: avoid a segmentation fault when `HOME` is unset
      completion(switch/checkout): treat --track and -t the same
      maintenance(systemd): support the Windows Subsystem for Linux
      ci: add a GitHub workflow to submit Coverity scans
      coverity: cache the Coverity Build Tool
      coverity: allow overriding the Coverity project
      coverity: support building on Windows
      coverity: allow running on macOS
      coverity: detect and report when the token or project is incorrect
      max_tree_depth: lower it for MSVC to avoid stack overflows
      ci: upgrade to using macos-13

John Cai (3):
      merge-ort: initialize repo in index state
      attr: read attributes from HEAD when bare repo
      attr: add attr.tree for setting the treeish to read attributes from

Josh Soref (1):
      Documentation/git-status: add missing line breaks

Josip Sokcevic (1):
      diff-lib: fix check_removed when fsmonitor is on

Junio C Hamano (55):
      update-index: do not read HEAD and MERGE_HEAD unconditionally
      resolve-undo: allow resurrecting conflicted state that resolved to deletion
      update-index: use unmerge_index_entry() to support removal
      update-index: remove stale fallback code for "--unresolve"
      checkout/restore: refuse unmerging paths unless checking out of the index
      checkout/restore: add basic tests for --merge
      checkout: allow "checkout -m path" to unmerge removed paths
      mv: fix error for moving directory to another
      diff: move the fallback "--exit-code" code down
      diff: mode-only change should be noticed by "--patch -w --exit-code"
      diff: teach "--stat -w --exit-code" to notice differences
      t4040: remove test that succeeded for a wrong reason
      pretty-formats: define "literal formatting code"
      diff: spell DIFF_INDEX_CACHED out when calling run_diff_index()
      diff: the -w option breaks --exit-code for --raw and other output modes
      transfer.unpackLimit: fetch/receive.unpackLimit takes precedence
      Start the 2.43 cycle
      The second batch for 2.43
      The extra batch to update credenthal helpers
      The third batch
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      update-index doc: v4 is OK with JGit and libgit2
      update-index: add --show-index-version
      test-tool: retire "index-version"
      The eighth batch
      The ninth batch
      The tenth batch
      The eleventh batch
      completion: loosen and document the requirement around completing alias
      The twelfth batch
      The thirteenth batch
      The fourteenth batch
      The fifteenth batch
      doc: update list archive reference to use lore.kernel.org
      The sixteenth batch
      merge: introduce {copy|clear}_merge_options()
      stash: be careful what we store
      grep: -f <path> is relative to $cwd
      The seventeenth batch
      The eighteenth batch
      commit: do not use cryptic "new_index" in end-user facing messages
      The nineteenth batch
      am: align placeholder for --whitespace option with apply
      The twentieth batch
      The twenty-first batch
      The twenty-second batch
      test framework: further deprecate test_i18ngrep
      Git 2.42.1
      tests: teach callers of test_i18ngrep to use test_grep
      A bit more before -rc1
      Prepare for -rc1
      Git 2.43-rc1

Karthik Nayak (3):
      revision: rename bit to `do_not_die_on_missing_objects`
      rev-list: move `show_commit()` to the bottom
      rev-list: add commit object support in `--missing` option

Kousik Sanagavarapu (4):
      ref-filter: sort numerically when ":size" is used
      t/t6300: cleanup test_atom
      t/t6300: introduce test_bad_atom
      ref-filter: add mailmap support

Kristoffer Haugsbakk (2):
      range-diff: treat notes like `log`
      grep: die gracefully when outside repository

Linus Arver (17):
      trailer tests: make test cases self-contained
      trailer test description: this tests --where=after, not --where=before
      trailer: add tests to check defaulting behavior with --no-* flags
      trailer doc: narrow down scope of --where and related flags
      trailer: trailer location is a place, not an action
      trailer --no-divider help: describe usual "---" meaning
      trailer --parse help: expose aliased options
      trailer --only-input: prefer "configuration variables" over "rules"
      trailer --parse docs: add explanation for its usefulness
      trailer --unfold help: prefer "reformat" over "join"
      trailer doc: emphasize the effect of configuration variables
      trailer doc: separator within key suppresses default separator
      trailer doc: <token> is a <key> or <keyAlias>, not both
      trailer: separate public from internal portion of trailer_iterator
      trailer: split process_input_file into separate pieces
      trailer: split process_command_line_args into separate functions
      strvec: drop unnecessary include of hex.h

M Hickford (3):
      credential/libsecret: store new attributes
      credential/libsecret: erase matching creds only
      credential/wincred: erase matching creds only

Mark Levedahl (6):
      git gui Makefile - remove Cygwin modifications
      git-gui - remove obsolete Cygwin specific code
      git-gui - use cygstart to browse on Cygwin
      git-gui - use mkshortcut on Cygwin
      git-gui - re-enable use of hook scripts
      git-gui - use git-hook, honor core.hooksPath

Mark Ruvald Pedersen (1):
      sequencer: truncate labels to accommodate loose refs

Martin Ågren (1):
      git-merge-file doc: drop "-file" from argument placeholders

Matthew McClain (1):
      git-p4 shouldn't attempt to store symlinks in LFS

Michael Strawbridge (1):
      send-email: move validation code below process_address_list

Michal Suchanek (1):
      git-push doc: more visibility for -q option

Naomi Ibe (1):
      builtin/add.c: clean up die() messages

Oswald Buddenhagen (16):
      t/lib-rebase: set_fake_editor(): fix recognition of reset's short command
      t/lib-rebase: set_fake_editor(): handle FAKE_LINES more consistently
      sequencer: simplify allocation of result array in todo_list_rearrange_squash()
      t/lib-rebase: improve documentation of set_fake_editor()
      t9001: fix indentation in test_no_confirm()
      format-patch: add --description-file option
      sequencer: rectify empty hint in call of require_clean_work_tree()
      sequencer: beautify subject of reverts of reverts
      git-revert.txt: add discussion
      sequencer: fix error message on failure to copy SQUASH_MSG
      t3404-rebase-interactive.sh: fix typos in title of a rewording test
      sequencer: remove unreachable exit condition in pick_commits()
      am: fix error message in parse_opt_show_current_patch()
      rebase: simplify code related to imply_merge()
      rebase: handle --strategy via imply_merge() as well
      rebase: move parse_opt_keep_empty() down

Patrick Steinhardt (23):
      upload-pack: fix exit code when denying fetch of unreachable object ID
      revision: make pseudo-opt flags read via stdin behave consistently
      doc/git-worktree: mention "refs/rewritten" as per-worktree refs
      doc/git-repack: fix syntax for `-g` shorthand option
      doc/git-repack: don't mention nonexistent "--unpacked" option
      commit-graph: introduce envvar to disable commit existence checks
      commit: detect commits that exist in commit-graph but not in the ODB
      builtin/show-ref: convert pattern to a local variable
      builtin/show-ref: split up different subcommands
      builtin/show-ref: fix leaking string buffer
      builtin/show-ref: fix dead code when passing patterns
      builtin/show-ref: refactor `--exclude-existing` options
      builtin/show-ref: stop using global variable to count matches
      builtin/show-ref: stop using global vars for `show_one()`
      builtin/show-ref: refactor options for patterns subcommand
      builtin/show-ref: ensure mutual exclusiveness of subcommands
      builtin/show-ref: explicitly spell out different modes in synopsis
      builtin/show-ref: add new mode to check for reference existence
      t: use git-show-ref(1) to check for ref existence
      test-bloom: stop setting up Git directory twice
      shallow: fix memory leak when registering shallow roots
      setup: refactor `upgrade_repository_format()` to have common exit
      setup: fix leaking repository format

Philippe Blain (3):
      completion: commit: complete configured trailer tokens
      completion: commit: complete trailers tokens more robustly
      completion: improve doc for complex aliases

Phillip Wood (7):
      rebase -i: move unlink() calls
      rebase -i: remove patch file after conflict resolution
      sequencer: use rebase_path_message()
      sequencer: factor out part of pick_commits()
      rebase: fix rewritten list for failed pick
      rebase --continue: refuse to commit after failed command
      rebase -i: fix adding failed command to the todo list

René Scharfe (18):
      subtree: disallow --no-{help,quiet,debug,branch,message}
      t1502, docs: disallow --no-help
      t1502: move optionspec help output to a file
      t1502: test option negation
      parse-options: show negatability of options in short help
      parse-options: factor out usage_indent() and usage_padding()
      parse-options: no --[no-]no-...
      parse-options: simplify usage_padding()
      parse-options: allow omitting option help text
      name-rev: use OPT_HIDDEN_BOOL for --peel-tag
      grep: use OPT_INTEGER_F for --max-depth
      grep: reject --no-or
      diff --no-index: fix -R with stdin
      parse-options: drop unused parse_opt_ctx_t member
      parse-options: make CMDMODE errors more precise
      am: simplify --show-current-patch handling
      am, rebase: fix arghelp syntax of --empty
      reflog: fix expire --single-worktree

Robert Coup (1):
      upload-pack: add tracing for fetches

Rubén Justo (2):
      branch: error message deleting a branch in use
      branch: error message checking out a branch in use

Sergey Organov (4):
      doc/diff-options: fix link to generating patch section
      diff-merges: improve --diff-merges documentation
      diff-merges: introduce '--dd' option
      completion: complete '--dd'

Shuqi Liang (3):
      t1092: add tests for 'git check-attr'
      attr.c: read attributes in a sparse directory
      check-attr: integrate with sparse-index

Tang Yuyi (1):
      merge-tree: add -X strategy option

Taylor Blau (28):
      repack: move `pack_geometry` struct to the stack
      commit-graph: introduce `commit_graph_generation_from_graph()`
      t/t5318-commit-graph.sh: test generation zero transitions during fsck
      commit-graph: avoid repeated mixed generation number warnings
      leak tests: mark a handful of tests as leak-free
      leak tests: mark t3321-notes-stripspace.sh as leak-free
      leak tests: mark t5583-push-branches.sh as leak-free
      builtin/pack-objects.c: remove unnecessary strbuf_reset()
      builtin/pack-objects.c: support `--max-pack-size` with `--cruft`
      Documentation/gitformat-pack.txt: remove multi-cruft packs alternative
      Documentation/gitformat-pack.txt: drop mixed version section
      builtin/repack.c: extract structure to store existing packs
      builtin/repack.c: extract marking packs for deletion
      builtin/repack.c: extract redundant pack cleanup for --geometric
      builtin/repack.c: extract redundant pack cleanup for existing packs
      builtin/repack.c: extract `has_existing_non_kept_packs()`
      builtin/repack.c: store existing cruft packs separately
      builtin/repack.c: avoid directly inspecting "util"
      builtin/repack.c: extract common cruft pack loop
      git-send-email.perl: avoid printing undef when validating addresses
      t7700: split cruft-related tests to t7704
      builtin/repack.c: parse `--max-pack-size` with OPT_MAGNITUDE
      builtin/repack.c: implement support for `--max-cruft-size`
      builtin/repack.c: avoid making cruft packs preferred
      Documentation/gitformat-pack.txt: fix typo
      Documentation/gitformat-pack.txt: fix incorrect MIDX documentation
      list-objects: drop --unpacked non-commit objects from results
      pack-bitmap: drop --unpacked non-commit objects from results

Todd Zullinger (2):
      RelNotes: minor typo fixes in 2.43.0 draft
      RelNotes: improve wording of credential helper notes

Victoria Dye (4):
      ref-cache.c: fix prefix matching in ref iteration
      dir.[ch]: expose 'get_dtype'
      dir.[ch]: add 'follow_symlink' arg to 'get_dtype'
      files-backend.c: avoid stat in 'loose_fill_ref_dir'

Vipul Kumar (1):
      git-gui: Fix a typo in README

Wesley Schwengle (2):
      git-push.txt: fix grammar
      git-svn: drop FakeTerm hack

brian m. carlson (2):
      t: add a test helper to truncate files
      merge-file: add an option to process object IDs

Ævar Arnfjörð Bjarmason (1):
      Makefiles: change search through $(MAKEFLAGS) for GNU make 4.4

Štěpán Němec (6):
      doc: fix some typos, grammar and wording issues
      doc/diff-options: improve wording of the log.diffMerges mention
      git-jump: admit to passing merge mode args to ls-files
      doc/gitk: s/sticked/stuck/
      t/README: fix multi-prerequisite example
      doc/cat-file: make synopsis and description less confusing

王常新 (1):
      merge-ort.c: fix typo 'neeed' to 'needed'

谢致邦 (XIE Zhibang) (2):
      doc: correct the 50 characters soft limit
      doc: correct the 50 characters soft limit (+)



^ permalink raw reply	[relevance 4%]

* [ANNOUNCE] Git v2.43.0-rc0
@ 2023-11-02 17:36  4% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2023-11-02 17:36 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

An early preview release Git v2.43.0-rc0 is now available for
testing at the usual places.  It is comprised of 399 non-merge
commits since v2.42.0, contributed by 61 people, 16 of which are
new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.43.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.42.0 are as follows.
Welcome to the Git development community!

  Alyssa Ross, Caleb Hill, Dorcas AnonoLitunya, Dragan Simic,
  Isoken June Ibizugbe, Jan Alexander Steffens (heftig), Javier
  Mora, ks1322 ks1322, Mark Ruvald Pedersen, Matthew McClain,
  Naomi Ibe, Romain Chossart, Tang Yuyi, Vipul Kumar, 王常新,
  and 谢致邦 (XIE Zhibang).

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Andy Koppe, Bagas Sanjaya,
  Beat Bolli, brian m. carlson, Calvin Wan, Christian Couder,
  Christian Hesse, Derrick Stolee, Drew DeVault, Elijah Newren,
  Eric W. Biederman, Eric Wong, Evan Gates, Han Young, Hariom
  Verma, Jacob Abel, Jason Hatton, Jeff King, Johannes Schindelin,
  John Cai, Josh Soref, Josip Sokcevic, Junio C Hamano, Kousik
  Sanagavarapu, Kristoffer Haugsbakk, Linus Arver, Mark Levedahl,
  Martin Storsjö, M Hickford, Michal Suchanek, Oswald Buddenhagen,
  Patrick Steinhardt, Philippe Blain, Phillip Wood, René Scharfe,
  Rubén Justo, Sergey Organov, Shuqi Liang, Stefan Haller,
  Štěpán Němec, Taylor Blau, Teng Long, Victoria Dye, and
  Wesley Schwengle.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.43 Release Notes (draft)
===============================

Backward Compatibility Notes

 * The "--rfc" option of "git format-patch" used to be a valid way to
   override an earlier "--subject-prefix=<something>" on the command
   line and replace it with "[RFC PATCH]", but from this release, it
   merely prefixes the string "RFC " in front of the given subject
   prefix.  If you are negatively affected by this change, please use
   "--subject-prefix=PATCH --rfc" as a replacement.

 * "git rev-list --stdin" learned to take non-revisions (like "--not")
   recently from the standard input, but the way such a "--not" was
   handled was quite confusing, which has been rethought.  The updated
   rule is that "--not" given from the command line only affects revs
   given from the command line that comes but not revs read from the
   standard input, and "--not" read from the standard input affects
   revs given from the stanrdard input and not revs given from the
   command line.

UI, Workflows & Features

 * A message written in olden time prevented a branch from getting
   checked out saying it is already checked out elsewhere, but these
   days, we treat a branch that is being bisected or rebased just like
   a branch that is checked out and protect it.  Rephrase the message
   to say that the branch is in use.

 * Hourly and other schedule of "git maintenance" jobs are randomly
   distributed now.

 * "git cmd -h" learned to signal which options can be negated by
   listing such options like "--[no-]opt".

 * The way authentication related data other than passwords (e.g.
   oath token and password expiration data) are stored in libsecret
   keyrings has been rethought.

 * Update two credential helpers to correctly match which credential
   to erase; they dropped not the ones with stale password.

 * Git GUI updates.

 * "git format-patch" learns a way to feed cover letter description,
   that (1) can be used on detached HEAD where there is no branch
   description available, and (2) also can override the branch
   description if there is one.

 * Use of --max-pack-size to allow multiple packfiles to be created is
   now supported even when we are sending unreachable objects to cruft
   packs.

 * "git format-patch --rfc --subject-prefix=<foo>" used to ignore the
   "--subject-prefix" option and used "[RFC PATCH]"; now we will add
   "RFC" prefix to whatever subject prefix is specified.

 * "git log --format" has been taught the %(decorate) placeholder.

 * The default log message created by "git revert", when reverting a
   commit that records a revert, has been tweaked, to encourage people
   describe complex "revert of revert of revert" situation better in
   their own words.

 * The command-line complation support (in contrib/) learned to
   complete "git commit --trailer=" for possible trailer keys.

 * "git update-index" learns "--show-index-version" to inspect
   the index format version used by the on-disk index file.

 * "git diff" learned diff.statNameWidth configuration variable, to
   give the default width for the name part in the "--stat" output.

 * "git range-diff --notes=foo" compared "log --notes=foo --notes" of
   the two ranges, instead of using just the specified notes tree.

 * The command line completion script (in contrib/) can be told to
   complete aliases by including ": git <cmd> ;" in the alias to tell
   it that the alias should be completed similar to how "git <cmd>" is
   completed.  The parsing code for the alias as been loosened to
   allow ';' without an extra space before it.

 * "git for-each-ref" and friends learned to apply mailmap to
   authorname and other fields.

 * "git repack" machinery learns to pay attention to the "--filter="
   option.

 * "git repack" learned "--max-cruft-size" to prevent cruft packs from
   growing without bounds.

 * "git merge-tree" learned to take strategy backend specific options
   via the "-X" option, like "git merge" does.

 * "git log" and friends learned "--dd" that is a short-hand for
   "--diff-merges=first-parent -p".

 * The attribute subsystem learned to honor `attr.tree` configuration
   that specifies which tree to read the .gitattributes files from.


Performance, Internal Implementation, Development Support etc.

 * "git check-attr" has been taught to work better with sparse-index.

 * It may be tempting to leave the help text NULL for a command line
   option that is either hidden or too obvious, but "git subcmd -h"
   and "git subcmd --help-all" would have segfaulted if done so.  Now
   the help text is optional.

 * Tests that are known to pass with LSan are now marked as such.
   (merge 5fafe8c95f tb/mark-more-tests-as-leak-free later to maint).

 * Flaky "git p4" tests, as well as "git svn" tests, are now skipped
   in the (rather expensive) sanitizer CI job.
   (merge 6ba913629f js/ci-san-skip-p4-and-svn-tests later to maint).

 * Tests with LSan from time to time seem to emit harmless message
   that makes our tests unnecessarily flaky; we work it around by
   filtering the uninteresting output.
   (merge 370ef7e40d jk/test-lsan-denoise-output later to maint).

 * Unused parameters to functions are marked as such, and/or removed,
   in order to bring us closer to -Wunused-parameter clean.

 * The code to keep track of existing packs in the repository while
   repacking has been refactored.

 * The "streaming" interface used for bulk-checkin codepath has been
   narrowed to take only blob objects for now, with no real loss of
   functionality.

 * GitHub CI workflow has learned to trigger Coverity check.
   (merge 3349520e1a js/ci-coverity later to maint).

 * Test coverage for trailers has been improved.

 * The code to iterate over loose references have been optimized to
   reduce the number of lstat() system calls.
   (merge 2cdb796101 vd/loose-ref-iteration-optimization later to maint).

 * The codepaths that read "chunk" formatted files have been corrected
   to pay attention to the chunk size and notice broken files.


Fixes since v2.42
-----------------

 * Overly long label names used in the sequencer machinery are now
   chopped to fit under filesystem limitation.
   (merge ac300bda10 mp/rebase-label-length-limit later to maint).

 * Scalar updates.
   (merge f9a547d3a7 ds/scalar-updates later to maint).

 * Tweak GitHub Actions CI so that pushing the same commit to multiple
   branch tips at the same time will not waste building and testing
   the same thing twice.
   (merge 99fe06cbfd jc/ci-skip-same-commit later to maint).

 * The commit-graph verification code that detects mixture of zero and
   non-zero generation numbers has been updated.
   (merge db6044d762 tb/commit-graph-verify-fix later to maint).

 * "git diff -w --exit-code" with various options did not work
   correctly, which is being addressed.
   (merge a64f8b2595 jc/diff-exit-code-with-w-fixes later to maint).

 * transfer.unpackLimit ought to be used as a fallback, but overrode
   fetch.unpackLimit and receive.unpackLimit instead.
   (merge f3d33f8cfe ts/unpacklimit-config-fix later to maint).

 * The use of API between two calls to require_clean_work_tree() from
   the sequencer code has been cleaned up for consistency.
   (merge a9b5955e07 ob/sequencer-empty-hint-fix later to maint).

 * "git diff --no-such-option" and other corner cases around the exit
   status of the "diff" command has been corrected.
   (merge 5cc6b2d70b jk/diff-result-code-cleanup later to maint).

 * "git for-each-ref --sort='contents:size'" sorts the refs according
   to size numerically, giving a ref that points at a blob twelve-byte
   (12) long before showing a blob hundred-byte (100) long.
   (merge 6d79cd8474 ks/ref-filter-sort-numerically later to maint).

 * We now limit depth of the tree objects and maximum length of
   pathnames recorded in tree objects.
   (merge 4d5693ba05 jk/tree-name-and-depth-limit later to maint).

 * Various fixes to the behavior of "rebase -i" when the command got
   interrupted by conflicting changes.
   (merge 203573b024 pw/rebase-i-after-failure later to maint).

 * References from description of the `--patch` option in various
   manual pages have been simplified and improved.
   (merge 11422f23e3 so/diff-doc-for-patch-update later to maint).

 * "git grep -e A --no-or -e B" is accepted, even though the negation
   of "or" did not mean anything, which has been tightened.
   (merge aae8558b10 rs/grep-no-no-or later to maint).

 * The completion script (in contrib/) has been taught to treat the
   "-t" option to "git checkout" and "git switch" just like the
   "--track" option, to complete remote-tracking branches.
   (merge 9f892830d6 js/complete-checkout-t later to maint).

 * "git diff --no-index -R <(one) <(two)" did not work correctly,
   which has been corrected.
   (merge 48944f214c pw/diff-no-index-from-named-pipes later to maint).

 * Update "git maintenance" timers' implementation based on systemd
   timers to work with WSL.
   (merge 5e8515e8e8 js/systemd-timers-wsl-fix later to maint).

 * "git diff --cached" codepath did not fill the necessary stat
   information for a file when fsmonitor knows it is clean and ended
   up behaving as if it is not clean, which has been corrected.
   (merge 6a044a2048 js/diff-cached-fsmonitor-fix later to maint).

 * Clarify how "alias.foo = : git cmd ; aliased-command-string" should
   be spelled with necessary whitespaces around punctuation marks to
   work.
   (merge 4333267995 pb/completion-aliases-doc later to maint).

 * HTTP Header redaction code has been adjusted for a newer version of
   cURL library that shows its traces differently from earlier
   versions.
   (merge 0763c3a2c4 jk/redact-h2h3-headers-fix later to maint).

 * An error message given by "git send-email" when given a malformed
   address did not give correct information, which has been corrected.
   (merge 12288cc44e tb/send-email-extract-valid-address-error-message-fix later to maint).

 * UBSan options were not propagated through the test framework to git
   run via the httpd, unlike ASan options, which has been corrected.
   (merge 252d693797 jk/test-pass-ubsan-options-to-http-test later to maint).

 * "checkout --merge -- path" and "update-index --unresolve path" did
   not resurrect conflicted state that was resolved to remove path,
   but now they do.
   (merge 5bdedac3c7 jc/unresolve-removal later to maint).

 * The display width table for unicode characters has been updated for
   Unicode 15.1
   (merge 872976c37e bb/unicode-width-table-15 later to maint).

 * Update mailmap entry for Derrick.
   (merge 6e5457d8c7 ds/mailmap-entry-update later to maint).

 * In .gitmodules files, submodules are keyed by their names, and the
   path to the submodule whose name is $name is specified by the
   submodule.$name.path variable.  There were a few codepaths that
   mixed the name and path up when consulting the submodule database,
   which have been corrected.  It took long for these bugs to be found
   as the name of a submodule initially is the same as its path, and
   the problem does not surface until it is moved to a different path,
   which apparently happens very rarely.

 * "git diff --merge-base X other args..." insisted that X must be a
   commit and errored out when given an annotated tag that peels to a
   commit, but we only need it to be a committish.  This has been
   corrected.
   (merge 4adceb5a29 ar/diff-index-merge-base-fix later to maint).

 * Fix "git merge-tree" to stop segfaulting when the --attr-source
   option is used.
   (merge e95bafc52f jc/merge-ort-attr-index-fix later to maint).

 * Unlike "git log --pretty=%D", "git log --pretty="%(decorate)" did
   not auto-initialize the decoration subsystem, which has been
   corrected.

 * Feeding "git stash store" with a random commit that was not created
   by "git stash create" now errors out.
   (merge d9b6634589 jc/fail-stash-to-store-non-stash later to maint).

 * The index file has room only for lower 32-bit of the file size in
   the cached stat information, which means cached stat information
   will have 0 in its sd_size member for a file whose size is multiple
   of 4GiB.  This is mistaken for a racily clean path.  Avoid it by
   storing a bogus sd_size value instead for such files.
   (merge 5143ac07b1 bc/racy-4gb-files later to maint).

 * "git p4" tried to store symlinks to LFS when told, but has been
   fixed not to do so, because it does not make sense.
   (merge 10c89a02b0 mm/p4-symlink-with-lfs later to maint).

 * The codepath to handle recipient addresses `git send-email
   --compose` learns from the user was completely broken, which has
   been corrected.
   (merge 3ec6167567 jk/send-email-fix-addresses-from-composed-messages later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge fd3ba590d8 ws/git-push-doc-grammofix later to maint).
   (merge 5f33a843de ds/upload-pack-error-sequence-fix later to maint).
   (merge beaa1d952b jk/function-pointer-mismatches-fix later to maint).
   (merge b46d806ea5 ob/t9001-indent-fix later to maint).
   (merge fdc9914c28 ja/worktree-orphan later to maint).
   (merge c2cbefc510 jc/mv-d-to-d-error-message-fix later to maint).
   (merge d0fc552bfc ch/t6300-verify-commit-test-cleanup later to maint).
   (merge aa4b83dd5e ws/git-svn-retire-faketerm later to maint).
   (merge edf80d23f1 jk/ci-retire-allow-ref later to maint).
   (merge 256a94ef6c bc/more-git-var later to maint).
   (merge 82af2c639c ob/sequencer-reword-error-message later to maint).
   (merge 2a63c79dae rs/grep-parseopt-simplify later to maint).
   (merge 078c42531e rs/name-rev-use-opt-hidden-bool later to maint).
   (merge 63642d58b4 ob/sequencer-remove-dead-code later to maint).
   (merge 8aae489756 ob/t3404-typofix later to maint).
   (merge 58be11432e eg/config-type-path-docfix later to maint).
   (merge 563f339d98 ch/clean-docfix later to maint).
   (merge 4fbe83fcd9 hy/doc-show-is-like-log-not-diff-tree later to maint).
   (merge 43abaaf008 ob/am-msgfix later to maint).
   (merge c2c349a15c xz/commit-title-soft-limit-doc later to maint).
   (merge f4cbb32c27 rs/parse-opt-ctx-cleanup later to maint).
   (merge badf2fe1c3 jk/decoration-and-other-leak-fixes later to maint).
   (merge cebfaaa333 sn/cat-file-doc-update later to maint).
   (merge 8b3aa36f5a ps/rewritten-is-per-worktree-doc later to maint).
   (merge ffbf6a748d jc/update-list-references-to-lore later to maint).
   (merge 14d569b1a7 jc/am-doc-whitespace-action-fix later to maint).
   (merge 48399e9cf0 ni/die-message-fix-for-git-add later to maint).
   (merge ca3285dd69 ps/git-repack-doc-fixes later to maint).
   (merge 243c79fdc7 wx/merge-ort-comment-typofix later to maint).
   (merge a060705d94 jc/commit-new-underscore-index-fix later to maint).
   (merge f6d83e2115 ms/doc-push-fix later to maint).

----------------------------------------------------------------

Changes since v2.42.0 are as follows:

Alyssa Ross (1):
      diff: fix --merge-base with annotated tags

Andy Koppe (8):
      pretty-formats: enclose options in angle brackets
      decorate: refactor format_decorations()
      decorate: avoid some unnecessary color overhead
      decorate: color each token separately
      pretty: add %(decorate[:<options>]) format
      pretty: add pointer and tag options to %(decorate)
      decorate: use commit color for HEAD arrow
      pretty: fix ref filtering for %(decorate) formats

Beat Bolli (1):
      unicode: update the width tables to Unicode 15.1

Caleb Hill (1):
      git-clean doc: fix "without do cleaning" typo

Calvin Wan (4):
      hex-ll: separate out non-hash-algo functions
      wrapper: reduce scope of remove_or_warn()
      config: correct bad boolean env value error message
      parse: separate out parsing functions from config.h

Christian Couder (9):
      pack-objects: allow `--filter` without `--stdout`
      t/helper: add 'find-pack' test-tool
      repack: refactor finishing pack-objects command
      repack: refactor finding pack prefix
      pack-bitmap-write: rebuild using new bitmap when remapping
      repack: add `--filter=<filter-spec>` option
      gc: add `gc.repackFilter` config option
      repack: implement `--filter-to` for storing filtered out objects
      gc: add `gc.repackFilterTo` config option

Christian Hesse (2):
      t/lib-gpg: forcibly run a trustdb update
      t/t6300: drop magic filtering

Derrick Stolee (13):
      upload-pack: fix race condition in error messages
      maintenance: add get_random_minute()
      maintenance: use random minute in launchctl scheduler
      maintenance: use random minute in Windows scheduler
      maintenance: use random minute in cron scheduler
      maintenance: swap method locations
      maintenance: use random minute in systemd scheduler
      maintenance: fix systemd schedule overlaps
      maintenance: update schedule before config
      scalar: add --[no-]src option
      setup: add discover_git_directory_reason()
      scalar reconfigure: help users remove buggy repos
      mailmap: change primary address for Derrick Stolee

Dorcas AnonoLitunya (1):
      t7601: use "test_path_is_file" etc. instead of "test -f"

Dragan Simic (2):
      diff --stat: add config option to limit filename width
      diff --stat: set the width defaults in a helper function

Drew DeVault (1):
      format-patch: --rfc honors what --subject-prefix sets

Elijah Newren (25):
      documentation: wording improvements
      documentation: fix small error
      documentation: fix typos
      documentation: fix apostrophe usage
      documentation: add missing words
      documentation: remove extraneous words
      documentation: fix subject/verb agreement
      documentation: employ consistent verb tense for a list
      documentation: fix verb tense
      documentation: fix adjective vs. noun
      documentation: fix verb vs. noun
      documentation: fix singular vs. plural
      documentation: whitespace is already generally plural
      documentation: fix choice of article
      documentation: add missing article
      documentation: remove unnecessary hyphens
      documentation: add missing hyphens
      documentation: use clearer prepositions
      documentation: fix punctuation
      documentation: fix capitalization
      documentation: fix whitespace issues
      documentation: add some commas where they are helpful
      documentation: add missing fullstops
      documentation: add missing quotes
      documentation: add missing parenthesis

Eric W. Biederman (1):
      bulk-checkin: only support blobs in index_bulk_checkin

Eric Wong (1):
      treewide: fix various bugs w/ OpenSSL 3+ EVP API

Evan Gates (1):
      git-config: fix misworded --type=path explanation

Han Young (1):
      show doc: redirect user to git log manual instead of git diff-tree

Isoken June Ibizugbe (1):
      builtin/branch.c: adjust error messages to coding guidelines

Jacob Abel (1):
      builtin/worktree.c: fix typo in "forgot fetch" msg

Jan Alexander Steffens (heftig) (6):
      submodule--helper: use submodule_from_path in set-{url,branch}
      submodule--helper: return error from set-url when modifying failed
      t7419: actually test the branch switching
      t7419, t7420: use test_cmp_config instead of grepping .gitmodules
      t7419: test that we correctly handle renamed submodules
      t7420: test that we correctly handle renamed submodules

Jason Hatton (1):
      Prevent git from rehashing 4GiB files

Javier Mora (2):
      git-status.txt: fix minor asciidoc format issue
      doc/git-bisect: clarify `git bisect run` syntax

Jeff King (113):
      hashmap: use expected signatures for comparison functions
      diff-files: avoid negative exit value
      diff: show usage for unknown builtin_diff_files() options
      diff: die when failing to read index in git-diff builtin
      diff: drop useless return from run_diff_{files,index} functions
      diff: drop useless return values in git-diff helpers
      diff: drop useless "status" parameter from diff_result_code()
      commit-graph: verify swapped zero/non-zero generation cases
      test-lib: ignore uninteresting LSan output
      sequencer: use repository parameter in short_commit_name()
      sequencer: mark repository argument as unused
      ref-filter: mark unused parameters in parser callbacks
      pack-bitmap: mark unused parameters in show_object callback
      worktree: mark unused parameters in each_ref_fn callback
      commit-graph: mark unused data parameters in generation callbacks
      ls-tree: mark unused parameter in callback
      stash: mark unused parameter in diff callback
      trace2: mark unused us_elapsed_absolute parameters
      trace2: mark unused config callback parameter
      test-trace2: mark unused argv/argc parameters
      grep: mark unused parameter in output function
      add-interactive: mark unused callback parameters
      negotiator/noop: mark unused callback parameters
      worktree: mark unused parameters in noop repair callback
      imap-send: mark unused parameters with NO_OPENSSL
      grep: mark unused parmaeters in pcre fallbacks
      credential: mark unused parameter in urlmatch callback
      fetch: mark unused parameter in ref_transaction callback
      bundle-uri: mark unused parameters in callbacks
      gc: mark unused descriptors in scheduler callbacks
      update-ref: mark unused parameter in parser callbacks
      ci: allow branch selection through "vars"
      ci: deprecate ci/config/allow-ref script
      merge: make xopts a strvec
      merge: simplify parsing of "-n" option
      format-patch: use OPT_STRING_LIST for to/cc options
      tree-walk: reduce stack size for recursive functions
      tree-walk: drop MAX_TRAVERSE_TREES macro
      tree-walk: rename "error" variable
      fsck: detect very large tree pathnames
      add core.maxTreeDepth config
      traverse_trees(): respect max_allowed_tree_depth
      read_tree(): respect max_allowed_tree_depth
      list-objects: respect max_allowed_tree_depth
      tree-diff: respect max_allowed_tree_depth
      lower core.maxTreeDepth default to 2048
      checkout-index: delay automatic setting of to_tempfile
      parse-options: prefer opt->value to globals in callbacks
      parse-options: mark unused "opt" parameter in callbacks
      merge: do not pass unused opt->value parameter
      parse-options: add more BUG_ON() annotations
      interpret-trailers: mark unused "unset" parameters in option callbacks
      parse-options: mark unused parameters in noop callback
      merge-ort: drop custom err() function
      merge-ort: stop passing "opt" to read_oid_strbuf()
      merge-ort: drop unused parameters from detect_and_process_renames()
      merge-ort: drop unused "opt" parameter from merge_check_renames_reusable()
      http: factor out matching of curl http/2 trace lines
      http: update curl http/2 info matching for curl 8.3.0
      merge-ort: lowercase a few error messages
      fsmonitor: prefer repo_git_path() to git_pathdup()
      fsmonitor/win32: drop unused parameters
      fsmonitor: mark some maybe-unused parameters
      fsmonitor/win32: mark unused parameter in fsm_os__incompatible()
      fsmonitor: mark unused parameters in stub functions
      fsmonitor/darwin: mark unused parameters in system callback
      fsmonitor: mark unused hashmap callback parameters
      run-command: mark unused parameters in start_bg_wait callbacks
      test-lib: set UBSAN_OPTIONS to match ASan
      commit-graph: factor out chain opening function
      commit-graph: check mixed generation validation when loading chain file
      t5324: harmonize sha1/sha256 graph chain corruption
      commit-graph: detect read errors when verifying graph chain
      commit-graph: tighten chain size check
      commit-graph: report incomplete chains during verification
      t6700: mark test as leak-free
      commit-reach: free temporary list in get_octopus_merge_bases()
      merge: free result of repo_get_merge_bases()
      commit-graph: move slab-clearing to close_commit_graph()
      commit-graph: free all elements of graph chain
      commit-graph: delay base_graph assignment in add_graph_to_chain()
      commit-graph: free graph struct that was not added to chain
      commit-graph: free write-context entries before overwriting
      commit-graph: free write-context base_graph_name during cleanup
      commit-graph: clear oidset after finishing write
      decorate: add clear_decoration() function
      revision: clear decoration structs during release_revisions()
      daemon: free listen_addr before returning
      repack: free existing_cruft array after use
      chunk-format: note that pair_chunk() is unsafe
      t: add library for munging chunk-format files
      midx: stop ignoring malformed oid fanout chunk
      commit-graph: check size of oid fanout chunk
      midx: check size of oid lookup chunk
      commit-graph: check consistency of fanout table
      midx: check size of pack names chunk
      midx: enforce chunk alignment on reading
      midx: check size of object offset chunk
      midx: bounds-check large offset chunk
      midx: check size of revindex chunk
      commit-graph: check size of commit data chunk
      commit-graph: detect out-of-bounds extra-edges pointers
      commit-graph: bounds-check base graphs chunk
      commit-graph: check size of generations chunk
      commit-graph: bounds-check generation overflow chunk
      commit-graph: check bounds when accessing BDAT chunk
      commit-graph: check bounds when accessing BIDX chunk
      commit-graph: detect out-of-order BIDX offsets
      chunk-format: drop pair_chunk_unsafe()
      t5319: make corrupted large-offset test more robust
      doc/send-email: mention handling of "reply-to" with --compose
      Revert "send-email: extract email-parsing code into a subroutine"
      send-email: handle to/cc/bcc from --compose message

Johannes Schindelin (17):
      windows: ignore empty `PATH` elements
      is_Cygwin: avoid `exec`ing anything
      Move is_<platform> functions to the beginning
      Move the `_which` function (almost) to the top
      Work around Tcl's default `PATH` lookup
      rebase: allow overriding the maximal length of the generated labels
      ci: avoid building from the same commit in parallel
      ci(linux-asan-ubsan): let's save some time
      var: avoid a segmentation fault when `HOME` is unset
      completion(switch/checkout): treat --track and -t the same
      maintenance(systemd): support the Windows Subsystem for Linux
      ci: add a GitHub workflow to submit Coverity scans
      coverity: cache the Coverity Build Tool
      coverity: allow overriding the Coverity project
      coverity: support building on Windows
      coverity: allow running on macOS
      coverity: detect and report when the token or project is incorrect

John Cai (3):
      merge-ort: initialize repo in index state
      attr: read attributes from HEAD when bare repo
      attr: add attr.tree for setting the treeish to read attributes from

Josh Soref (1):
      Documentation/git-status: add missing line breaks

Josip Sokcevic (1):
      diff-lib: fix check_removed when fsmonitor is on

Junio C Hamano (49):
      update-index: do not read HEAD and MERGE_HEAD unconditionally
      resolve-undo: allow resurrecting conflicted state that resolved to deletion
      update-index: use unmerge_index_entry() to support removal
      update-index: remove stale fallback code for "--unresolve"
      checkout/restore: refuse unmerging paths unless checking out of the index
      checkout/restore: add basic tests for --merge
      checkout: allow "checkout -m path" to unmerge removed paths
      mv: fix error for moving directory to another
      diff: move the fallback "--exit-code" code down
      diff: mode-only change should be noticed by "--patch -w --exit-code"
      diff: teach "--stat -w --exit-code" to notice differences
      t4040: remove test that succeeded for a wrong reason
      pretty-formats: define "literal formatting code"
      diff: spell DIFF_INDEX_CACHED out when calling run_diff_index()
      diff: the -w option breaks --exit-code for --raw and other output modes
      transfer.unpackLimit: fetch/receive.unpackLimit takes precedence
      Start the 2.43 cycle
      The second batch for 2.43
      The extra batch to update credenthal helpers
      The third batch
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      update-index doc: v4 is OK with JGit and libgit2
      update-index: add --show-index-version
      test-tool: retire "index-version"
      The eighth batch
      The ninth batch
      The tenth batch
      The eleventh batch
      completion: loosen and document the requirement around completing alias
      The twelfth batch
      The thirteenth batch
      The fourteenth batch
      The fifteenth batch
      doc: update list archive reference to use lore.kernel.org
      The sixteenth batch
      merge: introduce {copy|clear}_merge_options()
      stash: be careful what we store
      The seventeenth batch
      The eighteenth batch
      commit: do not use cryptic "new_index" in end-user facing messages
      The nineteenth batch
      am: align placeholder for --whitespace option with apply
      The twentieth batch
      The twenty-first batch
      The twenty-second batch
      Git 2.42.1

Kousik Sanagavarapu (4):
      ref-filter: sort numerically when ":size" is used
      t/t6300: cleanup test_atom
      t/t6300: introduce test_bad_atom
      ref-filter: add mailmap support

Kristoffer Haugsbakk (2):
      range-diff: treat notes like `log`
      grep: die gracefully when outside repository

Linus Arver (16):
      trailer tests: make test cases self-contained
      trailer test description: this tests --where=after, not --where=before
      trailer: add tests to check defaulting behavior with --no-* flags
      trailer doc: narrow down scope of --where and related flags
      trailer: trailer location is a place, not an action
      trailer --no-divider help: describe usual "---" meaning
      trailer --parse help: expose aliased options
      trailer --only-input: prefer "configuration variables" over "rules"
      trailer --parse docs: add explanation for its usefulness
      trailer --unfold help: prefer "reformat" over "join"
      trailer doc: emphasize the effect of configuration variables
      trailer doc: separator within key suppresses default separator
      trailer doc: <token> is a <key> or <keyAlias>, not both
      trailer: separate public from internal portion of trailer_iterator
      trailer: split process_input_file into separate pieces
      trailer: split process_command_line_args into separate functions

M Hickford (3):
      credential/libsecret: store new attributes
      credential/libsecret: erase matching creds only
      credential/wincred: erase matching creds only

Mark Levedahl (6):
      git gui Makefile - remove Cygwin modifications
      git-gui - remove obsolete Cygwin specific code
      git-gui - use cygstart to browse on Cygwin
      git-gui - use mkshortcut on Cygwin
      git-gui - re-enable use of hook scripts
      git-gui - use git-hook, honor core.hooksPath

Mark Ruvald Pedersen (1):
      sequencer: truncate labels to accommodate loose refs

Matthew McClain (1):
      git-p4 shouldn't attempt to store symlinks in LFS

Michal Suchanek (1):
      git-push doc: more visibility for -q option

Naomi Ibe (1):
      builtin/add.c: clean up die() messages

Oswald Buddenhagen (16):
      t/lib-rebase: set_fake_editor(): fix recognition of reset's short command
      t/lib-rebase: set_fake_editor(): handle FAKE_LINES more consistently
      sequencer: simplify allocation of result array in todo_list_rearrange_squash()
      t/lib-rebase: improve documentation of set_fake_editor()
      t9001: fix indentation in test_no_confirm()
      format-patch: add --description-file option
      sequencer: rectify empty hint in call of require_clean_work_tree()
      sequencer: beautify subject of reverts of reverts
      git-revert.txt: add discussion
      sequencer: fix error message on failure to copy SQUASH_MSG
      t3404-rebase-interactive.sh: fix typos in title of a rewording test
      sequencer: remove unreachable exit condition in pick_commits()
      am: fix error message in parse_opt_show_current_patch()
      rebase: simplify code related to imply_merge()
      rebase: handle --strategy via imply_merge() as well
      rebase: move parse_opt_keep_empty() down

Patrick Steinhardt (5):
      upload-pack: fix exit code when denying fetch of unreachable object ID
      revision: make pseudo-opt flags read via stdin behave consistently
      doc/git-worktree: mention "refs/rewritten" as per-worktree refs
      doc/git-repack: fix syntax for `-g` shorthand option
      doc/git-repack: don't mention nonexistent "--unpacked" option

Philippe Blain (3):
      completion: commit: complete configured trailer tokens
      completion: commit: complete trailers tokens more robustly
      completion: improve doc for complex aliases

Phillip Wood (7):
      rebase -i: move unlink() calls
      rebase -i: remove patch file after conflict resolution
      sequencer: use rebase_path_message()
      sequencer: factor out part of pick_commits()
      rebase: fix rewritten list for failed pick
      rebase --continue: refuse to commit after failed command
      rebase -i: fix adding failed command to the todo list

René Scharfe (14):
      subtree: disallow --no-{help,quiet,debug,branch,message}
      t1502, docs: disallow --no-help
      t1502: move optionspec help output to a file
      t1502: test option negation
      parse-options: show negatability of options in short help
      parse-options: factor out usage_indent() and usage_padding()
      parse-options: no --[no-]no-...
      parse-options: simplify usage_padding()
      parse-options: allow omitting option help text
      name-rev: use OPT_HIDDEN_BOOL for --peel-tag
      grep: use OPT_INTEGER_F for --max-depth
      grep: reject --no-or
      diff --no-index: fix -R with stdin
      parse-options: drop unused parse_opt_ctx_t member

Rubén Justo (2):
      branch: error message deleting a branch in use
      branch: error message checking out a branch in use

Sergey Organov (4):
      doc/diff-options: fix link to generating patch section
      diff-merges: improve --diff-merges documentation
      diff-merges: introduce '--dd' option
      completion: complete '--dd'

Shuqi Liang (3):
      t1092: add tests for 'git check-attr'
      attr.c: read attributes in a sparse directory
      check-attr: integrate with sparse-index

Tang Yuyi (1):
      merge-tree: add -X strategy option

Taylor Blau (24):
      repack: move `pack_geometry` struct to the stack
      commit-graph: introduce `commit_graph_generation_from_graph()`
      t/t5318-commit-graph.sh: test generation zero transitions during fsck
      commit-graph: avoid repeated mixed generation number warnings
      leak tests: mark a handful of tests as leak-free
      leak tests: mark t3321-notes-stripspace.sh as leak-free
      leak tests: mark t5583-push-branches.sh as leak-free
      builtin/pack-objects.c: remove unnecessary strbuf_reset()
      builtin/pack-objects.c: support `--max-pack-size` with `--cruft`
      Documentation/gitformat-pack.txt: remove multi-cruft packs alternative
      Documentation/gitformat-pack.txt: drop mixed version section
      builtin/repack.c: extract structure to store existing packs
      builtin/repack.c: extract marking packs for deletion
      builtin/repack.c: extract redundant pack cleanup for --geometric
      builtin/repack.c: extract redundant pack cleanup for existing packs
      builtin/repack.c: extract `has_existing_non_kept_packs()`
      builtin/repack.c: store existing cruft packs separately
      builtin/repack.c: avoid directly inspecting "util"
      builtin/repack.c: extract common cruft pack loop
      git-send-email.perl: avoid printing undef when validating addresses
      t7700: split cruft-related tests to t7704
      builtin/repack.c: parse `--max-pack-size` with OPT_MAGNITUDE
      builtin/repack.c: implement support for `--max-cruft-size`
      builtin/repack.c: avoid making cruft packs preferred

Victoria Dye (4):
      ref-cache.c: fix prefix matching in ref iteration
      dir.[ch]: expose 'get_dtype'
      dir.[ch]: add 'follow_symlink' arg to 'get_dtype'
      files-backend.c: avoid stat in 'loose_fill_ref_dir'

Vipul Kumar (1):
      git-gui: Fix a typo in README

Wesley Schwengle (2):
      git-push.txt: fix grammar
      git-svn: drop FakeTerm hack

brian m. carlson (1):
      t: add a test helper to truncate files

Ævar Arnfjörð Bjarmason (1):
      Makefiles: change search through $(MAKEFLAGS) for GNU make 4.4

Štěpán Němec (6):
      doc: fix some typos, grammar and wording issues
      doc/diff-options: improve wording of the log.diffMerges mention
      git-jump: admit to passing merge mode args to ls-files
      doc/gitk: s/sticked/stuck/
      t/README: fix multi-prerequisite example
      doc/cat-file: make synopsis and description less confusing

王常新 (1):
      merge-ort.c: fix typo 'neeed' to 'needed'

谢致邦 (XIE Zhibang) (2):
      doc: correct the 50 characters soft limit
      doc: correct the 50 characters soft limit (+)



^ permalink raw reply	[relevance 4%]

* [ANNOUNCE] Git v2.42.0
@ 2023-08-21 18:12  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2023-08-21 18:12 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

The latest feature release Git v2.42.0 is now available at the
usual places.  It is comprised of 453 non-merge commits since
v2.41.0, contributed by 78 people, 17 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.42.0'
tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.41.0 are as follows.
Welcome to the Git development community!

  Adam Majer, Andreas Herrmann, Greg Alexander, Han Young, Jacob
  Abel, Jan Klötzke, Jim Pryor, Johan Ruokangas, Josh Sref,
  Josip Sokcevic, Louis Strous, Lumynous, Petar Vutov, Premek
  Vysoky, Sebastian Thiel, Tribo Dar, and Vinayak Dev.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  , Alejandro R. Sedeño, Alex Henrie, Arkadii Yakovets, Bagas
  Sanjaya, Beat Bolli, brian m. carlson, Calvin Wan, Carlo Marcelo
  Arenas Belón, Christian Couder, D. Ben Knoble, Derrick Stolee,
  Dimitriy Ryazantcev, Elijah Newren, Emir SARI, Eric Sunshine,
  Eric Wong, Glen Choo, Hariom Verma, Jacob Keller, Jaydeep Das,
  Jean-Noël Avila, Jeff King, Johannes Schindelin, John Cai,
  Jonathan Nieder, Jonathan Tan, Jordi Mas, Junio C Hamano,
  Kate Golovanova, Kousik Sanagavarapu, Kristoffer Haugsbakk,
  Linus Arver, Martin Ågren, Matthew Hughes, Matthias Aßhauer, M
  Hickford, Michael Haggerty, Mike Hommey, Nsengiyumva Wilberforce,
  Oswald Buddenhagen, Patrick Steinhardt, Peter Krefting,
  Philippe Blain, Phillip Wood, Ralf Thielow, Randall S. Becker,
  René Scharfe, Rubén Justo, Sean Allred, Shuqi Liang, SZEDER
  Gábor, Taylor Blau, Teng Long, Todd Zullinger, Toon Claes,
  Torsten Bögershausen, Victoria Dye, Yi-Jyun Pan, Yuyi Wang,
  and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.42 Release Notes
=======================

UI, Workflows & Features

 * "git pack-refs" learns "--include" and "--exclude" to tweak the ref
   hierarchy to be packed using pattern matching.

 * 'git worktree add' learned how to create a worktree based on an
   orphaned branch with `--orphan`.

 * "git pack-objects" learned to invoke a new hook program that
   enumerates extra objects to be used as anchoring points to keep
   otherwise unreachable objects in cruft packs.

 * Add more "git var" for toolsmiths to learn various locations Git is
   configured with either via the configuration or hard-coded defaults.

 * 'git notes append' was taught '--separator' to specify string to insert
   between paragraphs.

 * The "git for-each-ref" family of commands learned placeholders
   related to GPG signature verification.

 * "git diff --no-index" learned to read from named pipes as if they
   were regular files, to allow "git diff <(process) <(substitution)"
   some shells support.

 * Help newbies by suggesting that there are cases where force-pushing
   is a valid and sensible thing to update a branch at a remote
   repository, rather than reconciling with merge/rebase.

 * "git blame --contents=file" has been taught to work in a bare
   repository.

 * "git branch -f X" to repoint the branch X said that X was "checked
   out" in another worktree, even when branch X was not and instead
   being bisected or rebased.  The message was reworded to say the
   branch was "in use".

 * Tone down the warning on SHA-256 repositories being an experimental
   curiosity.  We do not have support for them to interoperate with
   traditional SHA-1 repositories, but at this point, we do not plan
   to make breaking changes to SHA-256 repositories and there is no
   longer need for such a strongly phrased warning.


Performance, Internal Implementation, Development Support etc.

 * "git diff-tree" has been taught to take advantage of the
   sparse-index feature.

 * Clang's sanitizer implementation seems to work better than GCC's.
   (merge d88d727143 jk/ci-use-clang-for-sanitizer-jobs later to maint).

 * The object traversal using reachability bitmap done by
   "pack-object" has been tweaked to take advantage of the fact that
   using "boundary" commits as representative of all the uninteresting
   ones can save quite a lot of object enumeration.

 * discover_git_directory() no longer touches the_repository.

 * "git worktree" learned to work better with sparse index feature.

 * When the external merge driver is killed by a signal, its output
   should not be trusted as a resolution with conflicts that is
   proposed by the driver, but the code did.

 * The set-up code for the get_revision() API now allows feeding
   options like --all and --not in the --stdin mode.

 * Move functions that are not about pure string manipulation out of
   strbuf.[ch]

 * "imap-send" codepaths got cleaned up to get rid of unused
   parameters.

 * Enumerating refs in the packed-refs file, while excluding refs that
   match certain patterns, has been optimized.

 * Mark-up unused parameters in the code so that we can eventually
   enable -Wunused-parameter by default.

 * Instead of inventing a custom counter variables for debugging,
   use existing trace2 facility in the fsync customization codepath.

 * "git branch --list --format=<format>" and friends are taught
   a new "%(describe)" placeholder.

 * Clarify how to choose the starting point for a new topic in
   developer guidance document.

 * The implementation of "get_sha1_hex()" that reads a hexadecimal
   string that spells a full object name has been extended to cope
   with any hash function used in the repository, but the "sha1" in
   its name survived.  Rename it to get_hash_hex(), a name that is
   more consistent within its friends like get_hash_hex_algop().

 * Command line parser fix, and a small parse-options API update.


Fixes since v2.41
-----------------

 * "git tag" learned to leave the "$GIT_DIR/TAG_EDITMSG" file when the
   command failed, so that the user can salvage what they typed.
   (merge 08c12ec1d0 kh/keep-tag-editmsg-upon-failure later to maint).

 * The "-s" (silent, squelch) option of the "diff" family of commands
   did not interact with other options that specify the output format
   well.  This has been cleaned up so that it will clear all the
   formatting options given before.
   (merge 9d484b92ed jc/diff-s-with-other-options later to maint).

 * Update documentation regarding Coccinelle patches.
   (merge 3bd0097cfc gc/doc-cocci-updates later to maint).

 * Some atoms that can be used in "--format=<format>" for "git ls-tree"
   were not supported by "git ls-files", even though they were relevant
   in the context of the latter.
   (merge 4d28c4f75f zh/ls-files-format-atoms later to maint).

 * Document more pseudo-refs and teach the command line completion
   machinery to complete AUTO_MERGE.
   (merge 982ff3a649 pb/complete-and-document-auto-merge-and-friends later to maint).

 * "git submodule" code trusted the data coming from the config (and
   the in-tree .gitmodules file) too much without validating, leading
   to NULL dereference if the user mucks with a repository (e.g.
   submodule.<name>.url is removed).  This has been corrected.
   (merge fbc806acd1 tb/submodule-null-deref-fix later to maint).

 * The value of config.worktree is per-repository, but has been kept
   in a singleton global variable per process. This has been OK as
   most Git operations interacted with a single repository at a time,
   but not right for operations like recursive "grep" that want to
   access multiple repositories from a single process without forking.

   The global variable has been eliminated and made into a member in
   the per-repository data structure.
   (merge 3867f6d650 vd/worktree-config-is-per-repository later to maint).

 * "git [-c log.follow=true] log [--follow] ':(glob)f**'" used to barf.
   (merge 8260bc5902 jk/log-follow-with-non-literal-pathspec later to maint).

 * Introduce a mechanism to disable replace refs globally and per
   repository.
   (merge 9c7d1b057f ds/disable-replace-refs later to maint).

 * "git cat-file --batch" and friends learned "-Z" that uses NUL
   delimiter for both input and output.
   (merge f79e18849b ps/cat-file-null-output later to maint).

 * The reimplemented "git add -i" did not honor color.ui configuration.
   (merge 6f74648cea ds/add-i-color-configuration-fix later to maint).

 * Compilation fix for platforms without D_TYPE in struct dirent.
   (merge 03bf92b9bf as/dtype-compilation-fix later to maint).

 * Suggest to refrain from using hex literals that are non-portable
   when writing printf(1) format strings.
   (merge f0b68f0546 jt/doc-use-octal-with-printf later to maint).

 * Simplify error message when run-command fails to start a command.
   (merge 6d224ac286 rs/run-command-exec-error-on-noent later to maint).

 * Gracefully deal with a stale MIDX file that lists a packfile that
   no longer exists.
   (merge 06f3867865 tb/open-midx-bitmap-fallback later to maint).

 * Even when diff.ignoreSubmodules tells us to ignore submodule
   changes, "git commit" with an index that already records changes to
   submodules should include the submodule changes in the resulting
   commit, but it did not.
   (merge 5768478edc js/defeat-ignore-submodules-config-with-explicit-addition later to maint).

 * When "git commit --trailer=..." invokes the interpret-trailers
   machinery, it knows what it feeds to interpret-trailers is a full
   log message without any patch, but failed to express that by
   passing the "--no-divider" option, which has been corrected.
   (merge be3d654343 jk/commit-use-no-divider-with-interpret-trailers later to maint).

 * Avoid breakage of "git pack-objects --cruft" due to inconsistency
   between the way the code enumerates packfiles in the repository.
   (merge 73320e49ad tb/collect-pack-filenames-fix later to maint).

 * We create .pack and then .idx, we consider only packfiles that have
   .idx usable (those with only .pack are not ready yet), so we should
   remove .idx before removing .pack for consistency.
   (merge 0dd1324a73 ds/remove-idx-before-pack later to maint).

 * Partially revert a sanity check that the rest of the config code
   was not ready, to avoid triggering it in a corner case.
   (merge a53f43f900 gc/config-partial-submodule-kvi-fix later to maint).

 * "git apply" punts when it is fed too large a patch input; the error
   message it gives when it happens has been clarified.
   (merge 42612e18d2 pw/apply-too-large later to maint).

 * During a cherry-pick or revert session that works on multiple
   commits, "git status" did not give correct information, which has
   been corrected.
   (merge a096a889f4 jk/cherry-pick-revert-status later to maint).

 * A few places failed to differentiate the case where the index is
   truly empty (nothing added) and we haven't yet read from the
   on-disk index file, which have been corrected.
   (merge 2ee045eea1 js/empty-index-fixes later to maint).

 * "git bugreport" tests did not test what it wanted to test, which
   has been corrected.
   (merge 1aa92b8500 ma/t0091-fixup later to maint).

 * Code snippets in a tutorial document no longer compiled after
   recent header shuffling, which have been corrected.
   (merge bbd7c7b7c0 vd/adjust-mfow-doc-to-updated-headers later to maint).

 * "git ls-files '(attr:X)D/'" that triggers the common prefix
   optimization codepath failed to read from "D/.gitattributes",
   which has been corrected.
   (merge f4a8fde057 jc/pathspec-match-with-common-prefix later to maint).

 * "git fsck --no-progress" still spewed noise from the commit-graph
   subsystem, which has been corrected.
   (merge 9281cd07f0 tb/fsck-no-progress later to maint).

 * Various offset computation in the code that accesses the packfiles
   and other data in the object layer has been hardened against
   arithmetic overflow, especially on 32-bit systems.
   (merge 9a25cad7e0 tb/object-access-overflow-protection later to maint).

 * Names of MinGW header files are spelled in mixed case in some
   source files, but the build host can be using case sensitive
   filesystem with header files with their name spelled in all
   lowercase.
   (merge 4a53d0d0bc mh/mingw-case-sensitive-build later to maint).

 * Update message mark-up for i18n in "git bundle".
   (merge bbb6acd998 dk/bundle-i18n-more later to maint).

 * "git tag --list --points-at X" showed tags that directly refers to
   object X, but did not list a tag that points at such a tag, which
   has been corrected.

 * "./configure --with-expat=no" did not work as a way to refuse use
   of the expat library on a system with the library installed, which
   has been corrected.
   (merge fb8f7269c2 ah/autoconf-fixes later to maint).

 * When the user edits "rebase -i" todo file so that it starts with a
   "fixup", which would make it invalid, the command truncated the
   rest of the file before giving an error and returning the control
   back to the user.  Stop truncating to make it easier to correct
   such a malformed todo file.
   (merge 9645a087c2 ah/sequencer-rewrite-todo-fix later to maint).

 * Rewrite the description of giving a custom command to the
   submodule.<name>.update configuration variable.
   (merge 7cebc5bd78 pv/doc-submodule-update-settings later to maint).

 * Adjust to OpenSSL 3+, which deprecates its SHA-1 functions based on
   its traditional API, by using its EVP API instead.
   (merge bda9c12073 ew/hash-with-openssl-evp later to maint).

 * Exclude "." from the set of characters to be removed from the
   beginning and the end of the human-readable name.
   (merge 1c04cb0744 bc/ident-dot-is-no-longer-crud-letter later to maint).

 * "git bisect visualize" stopped running "gitk" on Git for Windows
   when the command was reimplemented in C around Git 2.34 timeframe.
   This has been corrected.
   (merge fff1594fa7 ma/locate-in-path-for-windows later to maint).

 * "git rebase -i" with a series of squash/fixup, when one of the
   steps stopped in conflicts and ended up getting skipped, did not
   handle the accumulated commit log messages, which has been
   corrected.
   (merge 6ce7afe163 pw/rebase-skip-commit-message-fix later to maint).

 * Adjust to newer Term::ReadLine to prevent it from breaking
   the interactive prompt code in send-email.
   (merge c016726c2d jk/send-email-with-new-readline later to maint).

 * Windows updates.
   (merge 0050f8e401 ds/maintenance-on-windows-fix later to maint).

 * Correct use of lstat() that assumed a failing call would not
   clobber the statbuf.
   (merge 72695d8214 st/mv-lstat-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 51f9d2e563 sa/doc-ls-remote later to maint).
   (merge c6d26a9dda jk/format-patch-message-id-unleak later to maint).
   (merge f7e063f326 ps/fetch-cleanups later to maint).
   (merge e4cf013468 tl/quote-problematic-arg-for-clarity later to maint).
   (merge 20025fdfc7 tz/test-ssh-verifytime-fix later to maint).
   (merge e48a21df65 tz/test-fix-pthreads-prereq later to maint).
   (merge 68b51172e3 mh/commit-reach-get-reachable-plug-leak later to maint).
   (merge aeee1408ce kh/use-default-notes-doc later to maint).
   (merge 3b8724bce6 jc/test-modernization later to maint).
   (merge 447a3b7331 jc/test-modernization-2 later to maint).
   (merge d57fa7fc73 la/doc-interpret-trailers later to maint).
   (merge 548afb0d9a la/docs-typofixes later to maint).
   (merge 3744ffcbcd rs/doc-ls-tree-hex-literal later to maint).
   (merge 6c26da8404 mh/credential-erase-improvements later to maint).
   (merge 78e56cff69 tz/lib-gpg-prereq-fix later to maint).
   (merge 80d32e84b5 rj/leakfixes later to maint).
   (merge 0a868031ed pb/complete-diff-options later to maint).
   (merge d4f28279ad jc/doc-hash-object-types later to maint).
   (merge 1876a5ae15 ks/t4205-test-describe-with-abbrev-fix later to maint).
   (merge 6e6a529b57 jk/fsck-indices-in-worktrees later to maint).
   (merge 3e81b896f7 rs/packet-length-simplify later to maint).
   (merge 4c9cb51fe7 mh/doc-credential-helpers later to maint).
   (merge 3437f549dd jr/gitignore-doc-example-markup later to maint).
   (merge 947ebd62a0 jc/am-parseopt-fix later to maint).
   (merge e12cb98e1e jc/branch-parseopt-fix later to maint).
   (merge d6f598e443 jc/gitignore-doc-pattern-markup later to maint).
   (merge a2dad4868b jc/transport-parseopt-fix later to maint).
   (merge 68cbb20e73 jc/parse-options-show-branch later to maint).
   (merge 3821eb6c3d jc/parse-options-reset later to maint).
   (merge c48af99a3e bb/trace2-comment-fix later to maint).
   (merge c95ae3ff9c rs/describe-parseopt-fix later to maint).
   (merge 36f76d2a25 rs/pack-objects-parseopt-fix later to maint).
   (merge 30c8c55cbf jc/tree-walk-drop-base-offset later to maint).
   (merge d089a06421 rs/bundle-parseopt-cleanup later to maint).
   (merge 823839bda1 ew/sha256-gcrypt-leak-fixes later to maint).
   (merge a5c01603b3 bc/ignore-clangd-cache later to maint).
   (merge 12009a182b js/allow-t4000-to-be-indented-with-spaces later to maint).
   (merge b3dcd24b8a jc/send-email-pre-process-fix later to maint).

----------------------------------------------------------------

Changes since v2.41.0 are as follows:

Adam Majer (1):
      doc: sha256 is no longer experimental

Alejandro R. Sedeño (1):
      statinfo.h: move DTYPE defines from dir.h

Alex Henrie (4):
      wt-status: don't show divergence advice when committing
      remote: don't imply that integration is always required before pushing
      push: don't imply that integration is always required before pushing
      sequencer: finish parsing the todo list despite an invalid first line

Andreas Herrmann (3):
      configure.ac: don't overwrite NO_EXPAT option
      configure.ac: don't overwrite NO_CURL option
      configure.ac: always save NO_ICONV to config.status

Arkadii Yakovets (1):
      l10n: uk: update translation (2.42.0)

Bagas Sanjaya (1):
      l10n: po-id for 2.42 (round 1)

Beat Bolli (2):
      trace2: fix a comment
      wrapper: use trace2 counters to collect fsync stats

Calvin Wan (13):
      strbuf: clarify API boundary
      strbuf: clarify dependency
      abspath: move related functions to abspath
      credential-store: move related functions to credential-store file
      object-name: move related functions to object-name
      path: move related function to path
      strbuf: remove global variable
      git-compat-util: move strbuf.c funcs to its header
      git-compat-util: move wrapper.c funcs to its header
      sane-ctype.h: create header for sane-ctype macros
      kwset: move translation table from ctype
      treewide: remove unnecessary includes for wrapper.h
      git-compat-util: move alloc macros to git-compat-util.h

D. Ben Knoble (2):
      i18n: mark more bundle.c strings for translation
      t4002: fix "diff can read from stdin" syntax

Derrick Stolee (7):
      add: check color.ui for interactive add
      add: test use of brackets when color is disabled
      repository: create disable_replace_refs()
      replace-objects: create wrapper around setting
      repository: create read_replace_refs setting
      packfile: delete .idx files before .pack files
      builtin/repack.c: only repack `.pack`s that exist

Dimitriy Ryazantcev (1):
      l10n: ru.po: update Russian translation

Elijah Newren (28):
      init-db: document existing bug with core.bare in template config
      init-db: remove unnecessary global variable
      init-db, clone: change unnecessary global into passed parameter
      setup: adopt shared init-db & clone code
      read-cache: move shared commit and ls-files code
      add: modify add_files_to_cache() to avoid globals
      read-cache: move shared add/checkout/commit code
      statinfo: move stat_{data,validity} functions from cache/read-cache
      run-command.h: move declarations for run-command.c from cache.h
      name-hash.h: move declarations for name-hash.c from cache.h
      sparse-index.h: move declarations for sparse-index.c from cache.h
      preload-index.h: move declarations for preload-index.c from elsewhere
      diff.h: move declaration for global in diff.c from cache.h
      merge.h: move declarations for merge.c from cache.h
      repository.h: move declaration of the_index from cache.h
      read-cache*.h: move declarations for read-cache.c functions from cache.h
      cache.h: remove this no-longer-used header
      log-tree: replace include of revision.h with simple forward declaration
      repository: remove unnecessary include of path.h
      diff.h: remove unnecessary include of oidset.h
      list-objects-filter-options.h: remove unneccessary include
      builtin.h: remove unneccessary includes
      git-compat-util.h: remove unneccessary include of wildmatch.h
      merge-ll: rename from ll-merge
      khash: name the structs that khash declares
      object-store-ll.h: split this header out of object-store.h
      hash-ll, hashmap: move oidhash() to hash-ll
      fsmonitor-ll.h: split this header out of fsmonitor.h

Emir SARI (1):
      l10n: tr: git 2.42.0

Eric Sunshine (1):
      fsck: avoid misleading variable name

Eric Wong (5):
      sha256/gcrypt: fix build with SANITIZE=leak
      sha256/gcrypt: fix memory leak with SHA-256 repos
      sha256/gcrypt: die on gcry_md_open failures
      sha256: avoid functions deprecated in OpenSSL 3+
      avoid SHA-1 functions deprecated in OpenSSL 3+

Glen Choo (16):
      cocci: add headings to and reword README
      cocci: codify authoring and reviewing practices
      setup.c: don't setup in discover_git_directory()
      config: don't BUG when both kvi and source are set
      config: inline git_color_default_config
      urlmatch.h: use config_fn_t type
      config: add ctx arg to config_fn_t
      config.c: pass ctx in configsets
      config: pass ctx with config files
      config.c: pass ctx with CLI config
      trace2: plumb config kvi
      config: pass kvi to die_bad_number()
      config.c: remove config_reader from configsets
      config: add kvi.path, use it to evaluate includes
      config: pass source to config_parser_event_fn_t
      mailmap: change primary address for Glen Choo

Han Young (1):
      blame: allow --contents to work with bare repo

Jacob Abel (11):
      worktree add: include -B in usage docs
      t2400: cleanup created worktree in test
      t2400: refactor "worktree add" opt exclusion tests
      t2400: add tests to verify --quiet
      worktree add: add --orphan flag
      worktree add: introduce "try --orphan" hint
      worktree add: extend DWIM to infer --orphan
      worktree add: emit warn when there is a bad HEAD
      t2400: drop no-op `--sq` from rev-parse call
      builtin/worktree.c: convert tab in advice to space
      t2400: rewrite regex to avoid unintentional PCRE

Jacob Keller (1):
      fix cherry-pick/revert status when doing multiple commits

Jan Klötzke (1):
      ref-filter: handle nested tags in --points-at option

Jean-Noël Avila (2):
      l10n: fr v2.42.0 rnd 1
      l10n: fr v2.42.0 rnd 2

Jeff King (41):
      format-patch: free rev.message_id when exiting
      format-patch: free elements of rev.ref_message_ids list
      pathspec: factor out magic-to-name function
      diff: factor out --follow pathspec check
      diff: detect pathspec magic not supported by --follow
      ci: use clang for ASan/UBSan checks
      ci: run ASan/UBSan in a single job
      ci: drop linux-clang job
      commit: pass --no-divider to interpret-trailers
      http: handle both "h2" and "h2h3" in curl info lines
      var: mark unused parameters in git_var callbacks
      imap-send: use server conf argument in setup_curl()
      imap-send: drop unused parameter from imap_cmd_cb callback
      imap-send: drop unused fields from imap_cmd_cb
      refs.c: rename `ref_filter`
      ref-filter.h: provide `REF_FILTER_INIT`
      ref-filter: clear reachable list pointers after freeing
      ref-filter: add `ref_filter_clear()`
      ref-filter.c: parameterize match functions over patterns
      test-ref-store: drop unimplemented reflog-expire command
      do_for_each_ref_helper(): mark unused repository parameter
      http: mark unused parameters in curl callbacks
      http-push: mark unused parameter in xml callback
      am: mark unused keep_cr parameters
      count-objects: mark unused parameter in alternates callback
      revisions: drop unused "opt" parameter in "tweak" callbacks
      fsck: mark unused parameters in various fsck callbacks
      merge-tree: mark unused parameter in traverse callback
      replace: mark unused parameter in ref callback
      replace: mark unused parameter in each_mergetag_fn callback
      rev-parse: mark unused parameter in for_each_abbrev callback
      tag: mark unused parameters in each_tag_name_fn callbacks
      t/helper: mark unused callback void data parameters
      ref-filter: avoid parsing tagged objects in match_points_at()
      ref-filter: avoid parsing non-tags in match_points_at()
      ref-filter: simplify return type of match_points_at
      send-email: drop FakeTerm hack
      send-email: avoid creating more than one Term::ReadLine object
      repack: free geometry struct
      t4053: avoid writing to unopened pipe
      fsck: use enum object_type for fsck_walk callback

Johan Ruokangas (1):
      gitignore.txt: use backticks instead of double quotes

Johannes Schindelin (6):
      do_read_index(): always mark index as initialized unless erroring out
      split-index: accept that a base index can be empty
      commit -a -m: allow the top-level tree to become empty again
      t0040: declare non-tab indentation to be okay in this script
      win32: add a helper to run `git.exe` without a foreground window
      git maintenance: avoid console window in scheduled tasks on Windows

John Cai (34):
      docs: clarify git-pack-refs --all will pack all refs
      pack-refs: teach --exclude option to exclude refs from being packed
      pack-refs: teach pack-refs --include option
      t0000-basic: modernize test format
      t0030-stripspace: modernize test format
      t3210-pack-refs: modernize test format
      t1001-read-tree-m-2way: modernize test format
      t1002-read-tree-m-u-2way: modernize test format
      t1006-cat-file: modernize test format
      t3500-cherry: modernize test format
      t3700-add: modernize test format
      t3903-stash: modernize test format
      t4002-diff-basic: modernize test format
      t4003-diff-rename-1: modernize test format
      t4004-diff-rename-symlink: modernize test format
      t4202-log: modernize test format
      t4206-log-follow-harder-copies: modernize test format
      t5300-pack-object: modernize test format
      t5301-sliding-window: modernize test format
      t5303-pack-corruption-resilience: modernize test format
      t5306-pack-nobase: modernize test format
      t6050-replace: modernize test format
      t7101-reset-empty-subdirs: modernize test format
      t7110-reset-merge: modernize test format
      t7111-reset-table: modernize test format
      t7201-co: modernize test format
      t7508-status: modernize test format
      t7600-merge: modernize test format
      t7700-repack: modernize test format
      t9100-git-svn-basic: modernize test format
      t9104-git-svn-follow-parent: modernize test format
      t9200-git-cvsexportcommit: modernize test format
      t9400-git-cvsserver-server: modernize test format
      docs: add git hash-object -t option's possible values

Jonathan Tan (1):
      CodingGuidelines: use octal escapes, not hex

Jordi Mas (1):
      l10n: Update Catalan translation

Josip Sokcevic (1):
      diff-lib: honor override_submodule_config flag bit

Junio C Hamano (48):
      diff: fix interaction between the "-s" option and other options
      show-branch doc: say <ref>, not <reference>
      Start the 2.42 cycle
      The second batch for 2.42
      The third batch
      ll-merge: killing the external merge driver aborts the merge
      The fourth batch
      t6406: skip "external merge driver getting killed by a signal" test on Windows
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      t6135: attr magic with path pattern
      tree-walk: lose base_offset that is never used in tree_entry_interesting
      tree-walk: drop unused base_offset from do_match()
      The ninth batch
      dir: match "attr" pathspec magic with correct paths
      The tenth batch
      The eleventh batch
      The twelfth batch
      gitignore.txt: mark up explanation of patterns consistently
      am: simplify parsing of "--[no-]keep-cr"
      branch: reject "--no-all" and "--no-remotes" early
      parse-options: introduce OPT_IPVERSION()
      fetch: reject --no-ipv[46]
      show-branch: --no-sparse should give dense output
      short help: allow multi-line opthelp
      remote: simplify "remote add --tags" help text
      short help: allow a gap smaller than USAGE_GAP
      show-branch: reject --[no-](topo|date)-order
      reset: reject --no-(mixed|soft|hard|merge|keep) option
      The thirteenth batch
      branch: update the message to refuse touching a branch in-use
      hex: retire get_sha1_hex()
      The fourteenth batch
      SubmittingPatches: choice of base for fixing an older maintenance track
      The fifteenth batch
      SubmittingPatches: explain why 'next' and above are inappropriate base
      SubmittingPatches: use of older maintenance tracks is an exception
      The sixteenth batch
      MyFirstContribution: refrain from self-iterating too much
      The seventeenth batch
      The eighteenth batch
      Git 2.42-rc0
      A few more topics before -rc1
      Git 2.42-rc1
      Git 2.42-rc2
      Git 2.42

Kousik Sanagavarapu (5):
      t/lib-gpg: introduce new prereq GPG2
      ref-filter: add new "signature" atom
      t4205: correctly test %(describe:abbrev=...)
      ref-filter: add multiple-option parsing functions
      ref-filter: add new "describe" atom

Kristoffer Haugsbakk (5):
      doc: tag: document `TAG_EDITMSG`
      t/t7004-tag: add regression test for successful tag creation
      tag: keep the message file in case ref transaction fails
      notes: update documentation for `use_default_notes`
      notes: move the documentation to the struct

Linus Arver (15):
      docs: typofixes
      doc: trailer: fix grammar
      doc: trailer: swap verb order
      doc: trailer: drop "commit message part" phrasing
      doc: trailer: examples: avoid the word "message" by itself
      doc: trailer: remove redundant phrasing
      doc: trailer: use angle brackets for <token> and <value>
      doc: trailer.<token>.command: emphasize deprecation
      doc: trailer: mention 'key' in DESCRIPTION
      doc: trailer: add more examples in DESCRIPTION
      SubmittingPatches: reword awkward phrasing
      SubmittingPatches: discuss subsystems separately from git.git
      SubmittingPatches: de-emphasize branches as starting points
      SubmittingPatches: emphasize need to communicate non-default starting points
      SubmittingPatches: simplify guidance for choosing a starting point

M Hickford (3):
      credential: avoid erasing distinct password
      credential: erase all matching credentials
      doc: gitcredentials: link to helper list

Martin Ågren (5):
      t0091-bugreport.sh: actually verify some content of report
      notes doc: split up run-on sentences
      notes doc: tidy up `--no-stripspace` paragraph
      show-ref doc: fix carets in monospace
      rev-list-options: fix typo in `--stdin` documentation

Matthias Aßhauer (3):
      run-command: conditionally define locate_in_PATH()
      compat/mingw: implement a native locate_in_PATH()
      docs: update when `git bisect visualize` uses `gitk`

Mike Hommey (2):
      commit-reach: fix memory leak in get_reachable_subset()
      mingw: use lowercase includes for some Windows headers

Oswald Buddenhagen (2):
      advice: handle "rebase" in error_resolve_conflict()
      t9001: remove excessive GIT_SEND_EMAIL_NOTTY=1

Patrick Steinhardt (17):
      fetch: drop unused DISPLAY_FORMAT_UNKNOWN enum value
      fetch: drop unneeded NULL-check for `remote_ref`
      fetch: pass through `fetch_config` directly
      fetch: use `fetch_config` to store "fetch.prune" value
      fetch: use `fetch_config` to store "fetch.pruneTags" value
      fetch: use `fetch_config` to store "fetch.showForcedUpdates" value
      fetch: use `fetch_config` to store "fetch.recurseSubmodules" value
      fetch: use `fetch_config` to store "fetch.parallel" value
      fetch: use `fetch_config` to store "submodule.fetchJobs" value
      t1006: don't strip timestamps from expected results
      t1006: modernize test style to use `test_cmp`
      strbuf: provide CRLF-aware helper to read until a specified delimiter
      cat-file: simplify reading from standard input
      cat-file: add option '-Z' that delimits input and output with NUL
      revision: reorder `read_revisions_from_stdin()`
      revision: small readability improvement for reading from stdin
      revision: handle pseudo-opts in `--stdin` mode

Petar Vutov (1):
      doc: highlight that .gitmodules does not support !command

Peter Krefting (1):
      l10n: sv.po: Update Swedish translation 5549t0f0u

Philippe Blain (30):
      revisions.txt: use description list for special refs
      revisions.txt: document more special refs
      completion: complete REVERT_HEAD and BISECT_HEAD
      git-merge.txt: modernize word choice in "True merge" section
      Documentation: document AUTO_MERGE
      completion: complete AUTO_MERGE
      completion: add comments describing __git_diff_* globals
      completion: complete --break-rewrites
      completion: complete --cc
      completion: complete --combined-all-paths
      completion: complete --compact-summary
      completion: complete --default-prefix
      completion: complete --find-copies
      completion: complete --find-object
      completion: complete --find-renames
      completion: complete --function-context
      completion: complete --ignore-matching-lines
      completion: complete --irreversible-delete
      completion: complete --ita-invisible-in-index and --ita-visible-in-index
      completion: complete --line-prefix
      completion: complete --no-relative
      completion: complete --no-stat
      completion: complete --output
      completion: complete --output-indicator-{context,new,old}
      completion: complete --unified
      completion: complete --ws-error-highlight
      completion: move --pickaxe-{all,regex} to __git_diff_common_options
      completion: complete --diff-merges, its options and --no-diff-merges
      completion: complete --remerge-diff
      diff.c: mention completion above add_diff_options

Phillip Wood (7):
      apply: improve error messages when reading patch
      diff --no-index: refuse to compare stdin to a directory
      diff --no-index: die on error reading stdin
      t4054: test diff --no-index with stdin
      diff --no-index: support reading from named pipes
      rebase --skip: fix commit message clean up when skipping squash
      t4053: avoid race when killing background processes

Ralf Thielow (1):
      l10n: Update German translation

René Scharfe (20):
      t1800: loosen matching of error message for bad shebang
      run-command: report exec error even on ENOENT
      ls-tree: fix documentation of %x format placeholder
      pretty: factor out expand_separator()
      strbuf: factor out strbuf_expand_step()
      replace strbuf_expand_dict_cb() with strbuf_expand_step()
      replace strbuf_expand() with strbuf_expand_step()
      strbuf: simplify strbuf_expand_literal_cb()
      ls-tree: simplify prefix handling
      pretty: avoid double negative in format_commit_item()
      pkt-line: add size parameter to packet_length()
      pretty: use strchr(3) in userformat_find_requirements()
      t6300: fix setup with GPGSSH but without GPG
      strbuf: use skip_prefix() in strbuf_addftime()
      ls-tree: fix --no-full-name
      describe: fix --no-exact-match
      pack-objects: fix --no-keep-true-parents
      pack-objects: fix --no-quiet
      bundle: use OPT_PASSTHRU_ARGV
      parse-options: disallow negating OPTION_SET_INT 0

Rubén Justo (11):
      config: fix a leak in git_config_copy_or_rename_section_in_file
      remote: fix a leak in query_matches_negative_refspec
      branch: fix a leak in dwim_and_setup_tracking
      branch: fix a leak in inherit_tracking
      branch: fix a leak in check_tracking_branch
      branch: fix a leak in setup_tracking
      rev-parse: fix a leak with --abbrev-ref
      branch: fix a leak in setup_tracking
      branch: fix a leak in cmd_branch
      config: fix a leak in git_config_copy_or_rename_section_in_file
      tests: mark as passing with SANITIZE=leak

Sean Allred (5):
      show-ref doc: update for internal consistency
      ls-remote doc: remove redundant --tags example
      ls-remote doc: show peeled tags in examples
      ls-remote doc: explain what each example does
      ls-remote doc: document the output format

Sebastian Thiel (1):
      mv: handle lstat() failure correctly

Shuqi Liang (2):
      diff-tree: integrate with sparse index
      worktree: integrate with sparse-index

Taylor Blau (53):
      object: add object_array initializer helper function
      pack-bitmap.c: extract `fill_in_bitmap()`
      pack-bitmap.c: use commit boundary during bitmap traversal
      builtin/submodule--helper.c: handle missing submodule URLs
      builtin/repack.c: only collect fully-formed packs
      reachable.c: extract `obj_is_recent()`
      gc: introduce `gc.recentObjectsHook`
      pack-bitmap.c: gracefully degrade on failure to load MIDX'd pack
      t7701: make annotated tag unreachable
      fsck: suppress commit-graph output with `--no-progress`
      fsck: suppress MIDX output with `--no-progress`
      commit-graph.c: extract `verify_one_commit_graph()`
      commit-graph.c: iteratively verify commit-graph chains
      commit-graph.c: pass progress to `verify_one_commit_graph()`
      commit-graph.c: avoid duplicated progress output during `verify`
      builtin/for-each-ref.c: add `--exclude` option
      refs: plumb `exclude_patterns` argument throughout
      refs/packed-backend.c: refactor `find_reference_location()`
      refs/packed-backend.c: implement jump lists to avoid excluded pattern(s)
      refs/packed-backend.c: add trace2 counters for jump list
      revision.h: store hidden refs in a `strvec`
      refs.h: let `for_each_namespaced_ref()` take excluded patterns
      refs.h: implement `hidden_refs_to_excludes()`
      builtin/receive-pack.c: avoid enumerating hidden references
      upload-pack.c: avoid enumerating hidden refs where possible
      ls-refs.c: avoid enumerating hidden refs where possible
      builtin/repack.c: avoid dir traversal in `collect_pack_filenames()`
      packfile.c: prevent overflow in `nth_packed_object_id()`
      packfile.c: prevent overflow in `load_idx()`
      packfile.c: use checked arithmetic in `nth_packed_object_offset()`
      midx.c: use `size_t`'s for fanout nr and alloc
      midx.c: prevent overflow in `nth_midxed_object_oid()`
      midx.c: prevent overflow in `nth_midxed_offset()`
      midx.c: store `nr`, `alloc` variables as `size_t`'s
      midx.c: prevent overflow in `write_midx_internal()`
      midx.c: prevent overflow in `fill_included_packs_batch()`
      pack-bitmap.c: ensure that eindex lookups don't overflow
      commit-graph.c: prevent overflow in `write_commit_graph_file()`
      commit-graph.c: prevent overflow in add_graph_to_chain()
      commit-graph.c: prevent overflow in `load_oid_from_graph()`
      commit-graph.c: prevent overflow in `fill_commit_graph_info()`
      commit-graph.c: prevent overflow in `fill_commit_in_graph()`
      commit-graph.c: prevent overflow in `load_tree_for_commit()`
      commit-graph.c: prevent overflow in `split_graph_merge_strategy()`
      commit-graph.c: prevent overflow in `merge_commit_graph()`
      commit-graph.c: prevent overflow in `write_commit_graph()`
      commit-graph.c: prevent overflow in `verify_commit_graph()`
      t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories
      t/lib-commit-graph.sh: avoid directory change in `graph_git_behavior()`
      t5318: avoid top-level directory changes
      t5328: avoid top-level directory changes
      t/lib-commit-graph.sh: avoid sub-shell in `graph_git_behavior()`
      Documentation/RelNotes/2.42.0.txt: typofix

Teng Long (10):
      surround %s with quotes when failed to lookup commit
      notes.c: cleanup 'strbuf_grow' call in 'append_edit'
      notes.c: use designated initializers for clarity
      t3321: add test cases about the notes stripspace behavior
      notes.c: introduce '--separator=<paragraph-break>' option
      notes.c: append separator instead of insert by pos
      notes.c: introduce "--[no-]stripspace" option
      notes: introduce "--no-separator" option
      l10n: zh_CN: v2.42.0 round 1
      l10n: zh_CN: 2.42.0 round 2

Todd Zullinger (3):
      trace2 tests: fix PTHREADS prereq
      t/lib-gpg: fix ssh-keygen -Y check-novalidate with openssh-9.0
      t/lib-gpg: require GPGSSH for GPGSSH_VERIFYTIME prereq

Victoria Dye (3):
      config: use gitdir to get worktree config
      config: pass 'repo' directly to 'config_with_options()'
      repository: move 'repository_format_worktree_config' to repo scope

Vinayak Dev (1):
      docs: add necessary headers to Documentation/MFOW.txt

Yi-Jyun Pan (1):
      l10n: zh_TW.po: Git 2.42

ZheNing Hu (1):
      ls-files: align format atoms with ls-tree

brian m. carlson (9):
      t: add a function to check executable bit
      var: add support for listing the shell
      var: format variable structure with C99 initializers
      var: adjust memory allocation for strings
      attr: expose and rename accessor functions
      var: add attributes files locations
      var: add config file locations
      ident: don't consider '.' a crud
      gitignore: ignore clangd .cache directory


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.42.0-rc2
@ 2023-08-15 21:22  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2023-08-15 21:22 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.42.0-rc2 is now available for testing at
the usual places.  It is comprised of 435 non-merge commits since
v2.41.0, contributed by 67 people, 16 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.42.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.41.0 are as follows.
Welcome to the Git development community!

  Adam Majer, Andreas Herrmann, Greg Alexander, Han Young, Jacob
  Abel, Jan Klötzke, Jim Pryor, Johan Ruokangas, Josh Sref, Josip
  Sokcevic, Louis Strous, Petar Vutov, Premek Vysoky, Sebastian
  Thiel, Tribo Dar, and Vinayak Dev.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alejandro R. Sedeño, Alex Henrie, Beat Bolli, brian m. carlson,
  Calvin Wan, Carlo Marcelo Arenas Belón, Christian Couder, D. Ben
  Knoble, Derrick Stolee, Elijah Newren, Eric Sunshine, Eric Wong,
  Glen Choo, Hariom Verma, Jacob Keller, Jaydeep Das, Jeff King,
  Johannes Schindelin, John Cai, Jonathan Nieder, Jonathan Tan,
  Junio C Hamano, Kousik Sanagavarapu, Kristoffer Haugsbakk, Linus
  Arver, Martin Ågren, Matthew Hughes, Matthias Aßhauer, M Hickford,
  Michael Haggerty, Mike Hommey, Nsengiyumva Wilberforce, Oswald
  Buddenhagen, Patrick Steinhardt, Philippe Blain, Phillip Wood,
  Randall S. Becker, René Scharfe, Rubén Justo, Sean Allred, Shuqi
  Liang, SZEDER Gábor, Taylor Blau, Teng Long, Todd Zullinger, Toon
  Claes, Torsten Bögershausen, Victoria Dye, Yuyi Wang, and ZheNing
  Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.42 Release Notes (draft)
===============================

UI, Workflows & Features

 * "git pack-refs" learns "--include" and "--exclude" to tweak the ref
   hierarchy to be packed using pattern matching.

 * 'git worktree add' learned how to create a worktree based on an
   orphaned branch with `--orphan`.

 * "git pack-objects" learned to invoke a new hook program that
   enumerates extra objects to be used as anchoring points to keep
   otherwise unreachable objects in cruft packs.

 * Add more "git var" for toolsmiths to learn various locations Git is
   configured with either via the configuration or hardcoded defaults.

 * 'git notes append' was taught '--separator' to specify string to insert
   between paragraphs.

 * The "git for-each-ref" family of commands learned placeholders
   related to GPG signature verification.

 * "git diff --no-index" learned to read from named pipes as if they
   were regular files, to allow "git diff <(process) <(substitution)"
   some shells support.

 * Help newbies by suggesting that there are cases where force-pushing
   is a valid and sensible thing to update a branch at a remote
   repository, rather than reconciling with merge/rebase.

 * "git blame --contents=file" has been taught to work in a bare
   repository.

 * "git branch -f X" to repoint the branch X said that X was "checked
   out" in another worktree, even when branch X was not and instead
   being bisected or rebased.  The message was reworded to say the
   branch was "in use".

 * Tone down the warning on SHA-256 repositories being an experimental
   curiosity.  We do not have support for them to interoperate with
   traditional SHA-1 repositories, but at this point, we do not plan
   to make breaking changes to SHA-256 repositories and there is no
   longer need for such a strongly phrased warning.


Performance, Internal Implementation, Development Support etc.

 * "git diff-tree" has been taught to take advantage of the
   sparse-index feature.

 * Clang's sanitizer implementation seems to work better than GCC's.
   (merge d88d727143 jk/ci-use-clang-for-sanitizer-jobs later to maint).

 * The object traversal using reachability bitmap done by
   "pack-object" has been tweaked to take advantage of the fact that
   using "boundary" commits as representative of all the uninteresting
   ones can save quite a lot of object enumeration.

 * discover_git_directory() no longer touches the_repository.

 * "git worktree" learned to work better with sparse index feature.

 * When the external merge driver is killed by a signal, its output
   should not be trusted as a resolution with conflicts that is
   proposed by the driver, but the code did.

 * The set-up code for the get_revision() API now allows feeding
   options like --all and --not in the --stdin mode.

 * Move functions that are not about pure string manipulation out of
   strbuf.[ch]

 * "imap-send" codepaths got cleaned up to get rid of unused
   parameters.

 * Enumerating refs in the packed-refs file, while excluding refs that
   match certain patterns, has been optimized.

 * Mark-up unused parameters in the code so that we can eventually
   enable -Wunused-parameter by default.

 * Instead of inventing a custom counter variables for debugging,
   use existing trace2 facility in the fsync customization codepath.

 * "git branch --list --format=<format>" and friends are taught
   a new "%(describe)" placeholder.

 * Clarify how to choose the starting point for a new topic in
   developer guidance document.

 * The implementation of "get_sha1_hex()" that reads a hexadecimal
   string that spells a full object name has been extended to cope
   with any hash function used in the repository, but the "sha1" in
   its name survived.  Rename it to get_hash_hex(), a name that is
   more consistent within its friends like get_hash_hex_algop().

 * Command line parser fix, and a small parse-options API update.


Fixes since v2.41
-----------------

 * "git tag" learned to leave the "$GIT_DIR/TAG_EDITMSG" file when the
   command failed, so that the user can salvage what they typed.
   (merge 08c12ec1d0 kh/keep-tag-editmsg-upon-failure later to maint).

 * The "-s" (silent, squelch) option of the "diff" family of commands
   did not interact with other options that specify the output format
   well.  This has been cleaned up so that it will clear all the
   formatting options given before.
   (merge 9d484b92ed jc/diff-s-with-other-options later to maint).

 * Update documentation regarding Coccinelle patches.
   (merge 3bd0097cfc gc/doc-cocci-updates later to maint).

 * Some atoms that can be used in "--format=<format>" for "git ls-tree"
   were not supported by "git ls-files", even though they were relevant
   in the context of the latter.
   (merge 4d28c4f75f zh/ls-files-format-atoms later to maint).

 * Document more pseudo-refs and teach the command line completion
   machinery to complete AUTO_MERGE.
   (merge 982ff3a649 pb/complete-and-document-auto-merge-and-friends later to maint).

 * "git submodule" code trusted the data coming from the config (and
   the in-tree .gitmodules file) too much without validating, leading
   to NULL dereference if the user mucks with a repository (e.g.
   submodule.<name>.url is removed).  This has been corrected.
   (merge fbc806acd1 tb/submodule-null-deref-fix later to maint).

 * The value of config.worktree is per-repository, but has been kept
   in a singleton global variable per process. This has been OK as
   most Git operations interacted with a single repository at a time,
   but not right for operations like recursive "grep" that want to
   access multiple repositories from a single process without forking.

   The global variable has been eliminated and made into a member in
   the per-repository data structure.
   (merge 3867f6d650 vd/worktree-config-is-per-repository later to maint).

 * "git [-c log.follow=true] log [--follow] ':(glob)f**'" used to barf.
   (merge 8260bc5902 jk/log-follow-with-non-literal-pathspec later to maint).

 * Introduce a mechanism to disable replace refs globally and per
   repository.
   (merge 9c7d1b057f ds/disable-replace-refs later to maint).

 * "git cat-file --batch" and friends learned "-Z" that uses NUL
   delimiter for both input and output.
   (merge f79e18849b ps/cat-file-null-output later to maint).

 * The reimplemented "git add -i" did not honor color.ui configuration.
   (merge 6f74648cea ds/add-i-color-configuration-fix later to maint).

 * Compilation fix for platforms without D_TYPE in struct dirent.
   (merge 03bf92b9bf as/dtype-compilation-fix later to maint).

 * Suggest to refrain from using hex literals that are non-portable
   when writing printf(1) format strings.
   (merge f0b68f0546 jt/doc-use-octal-with-printf later to maint).

 * Simplify error message when run-command fails to start a command.
   (merge 6d224ac286 rs/run-command-exec-error-on-noent later to maint).

 * Gracefully deal with a stale MIDX file that lists a packfile that
   no longer exists.
   (merge 06f3867865 tb/open-midx-bitmap-fallback later to maint).

 * Even when diff.ignoreSubmodules tells us to ignore submodule
   changes, "git commit" with an index that already records changes to
   submodules should include the submodule changes in the resulting
   commit, but it did not.
   (merge 5768478edc js/defeat-ignore-submodules-config-with-explicit-addition later to maint).

 * When "git commit --trailer=..." invokes the interpret-trailers
   machinery, it knows what it feeds to interpret-trailers is a full
   log message without any patch, but failed to express that by
   passing the "--no-divider" option, which has been corrected.
   (merge be3d654343 jk/commit-use-no-divider-with-interpret-trailers later to maint).

 * Avoid breakage of "git pack-objects --cruft" due to inconsistency
   between the way the code enumerates packfiles in the repository.
   (merge 73320e49ad tb/collect-pack-filenames-fix later to maint).

 * We create .pack and then .idx, we consider only packfiles that have
   .idx usable (those with only .pack are not ready yet), so we should
   remove .idx before removing .pack for consistency.
   (merge 0dd1324a73 ds/remove-idx-before-pack later to maint).

 * Partially revert a sanity check that the rest of the config code
   was not ready, to avoid triggering it in a corner case.
   (merge a53f43f900 gc/config-partial-submodule-kvi-fix later to maint).

 * "git apply" punts when it is fed too large a patch input; the error
   message it gives when it happens has been clarified.
   (merge 42612e18d2 pw/apply-too-large later to maint).

 * During a cherry-pick or revert session that works on multiple
   commits, "git status" did not give correct information, which has
   been corrected.
   (merge a096a889f4 jk/cherry-pick-revert-status later to maint).

 * A few places failed to differentiate the case where the index is
   truly empty (nothing added) and we haven't yet read from the
   on-disk index file, which have been corrected.
   (merge 2ee045eea1 js/empty-index-fixes later to maint).

 * "git bugreport" tests did not test what it wanted to test, which
   has been corrected.
   (merge 1aa92b8500 ma/t0091-fixup later to maint).

 * Code snippets in a tutorial document no longer compiled after
   recent header shuffling, which have been corrected.
   (merge bbd7c7b7c0 vd/adjust-mfow-doc-to-updated-headers later to maint).

 * "git ls-files '(attr:X)D/'" that triggers the common prefix
   optimization codepath failed to read from "D/.gitattributes",
   which has been corrected.
   (merge f4a8fde057 jc/pathspec-match-with-common-prefix later to maint).

 * "git fsck --no-progress" still spewed noise from the commit-graph
   subsystem, which has been corrected.
   (merge 9281cd07f0 tb/fsck-no-progress later to maint).

 * Various offset computation in the code that accesses the packfiles
   and other data in the object layer has been hardened against
   arithmetic overflow, especially on 32-bit systems.
   (merge 9a25cad7e0 tb/object-access-overflow-protection later to maint).

 * Names of MinGW header files are spelled in mixed case in some
   source files, but the build host can be using case sensitive
   filesystem with header files with their name spelled in all
   lowercase.
   (merge 4a53d0d0bc mh/mingw-case-sensitive-build later to maint).

 * Update message mark-up for i18n in "git bundle".
   (merge bbb6acd998 dk/bundle-i18n-more later to maint).

 * "git tag --list --points-at X" showed tags that directly refers to
   object X, but did not list a tag that points at such a tag, which
   has been corrected.

 * "./configure --with-expat=no" did not work as a way to refuse use
   of the expat library on a system with the library installed, which
   has been corrected.
   (merge fb8f7269c2 ah/autoconf-fixes later to maint).

 * When the user edits "rebase -i" todo file so that it starts with a
   "fixup", which would make it invalid, the command truncated the
   rest of the file before giving an error and returning the control
   back to the user.  Stop truncating to make it easier to correct
   such a malformed todo file.
   (merge 9645a087c2 ah/sequencer-rewrite-todo-fix later to maint).

 * Rewrite the description of giving a custom command to the
   submodule.<name>.update configuration variable.
   (merge 7cebc5bd78 pv/doc-submodule-update-settings later to maint).

 * Adjust to OpenSSL 3+, which deprecates its SHA-1 functions based on
   its traditional API, by using its EVP API instead.
   (merge bda9c12073 ew/hash-with-openssl-evp later to maint).

 * Exclude "." from the set of characters to be removed from the
   beginning and the end of the human-readable name.
   (merge 1c04cb0744 bc/ident-dot-is-no-longer-crud-letter later to maint).

 * "git bisect visualize" stopped running "gitk" on Git for Windows
   when the command was reimplemented in C around Git 2.34 timeframe.
   This has been corrected.
   (merge fff1594fa7 ma/locate-in-path-for-windows later to maint).

 * "git rebase -i" with a series of squash/fixup, when one of the
   steps stopped in conflicts and ended up getting skipped, did not
   handle the accumulated commit log messages, which has been
   corrected.
   (merge 6ce7afe163 pw/rebase-skip-commit-message-fix later to maint).

 * Adjust to newer Term::ReadLine to prevent it from breaking
   the interactive prompt code in send-email.
   (merge c016726c2d jk/send-email-with-new-readline later to maint).

 * Windows updates.
   (merge 0050f8e401 ds/maintenance-on-windows-fix later to maint).

 * Correct use of lstat() that assumed a failing call would not
   clobber the statbuf.
   (merge 72695d8214 st/mv-lstat-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 51f9d2e563 sa/doc-ls-remote later to maint).
   (merge c6d26a9dda jk/format-patch-message-id-unleak later to maint).
   (merge f7e063f326 ps/fetch-cleanups later to maint).
   (merge e4cf013468 tl/quote-problematic-arg-for-clarity later to maint).
   (merge 20025fdfc7 tz/test-ssh-verifytime-fix later to maint).
   (merge e48a21df65 tz/test-fix-pthreads-prereq later to maint).
   (merge 68b51172e3 mh/commit-reach-get-reachable-plug-leak later to maint).
   (merge aeee1408ce kh/use-default-notes-doc later to maint).
   (merge 3b8724bce6 jc/test-modernization later to maint).
   (merge 447a3b7331 jc/test-modernization-2 later to maint).
   (merge d57fa7fc73 la/doc-interpret-trailers later to maint).
   (merge 548afb0d9a la/docs-typofixes later to maint).
   (merge 3744ffcbcd rs/doc-ls-tree-hex-literal later to maint).
   (merge 6c26da8404 mh/credential-erase-improvements later to maint).
   (merge 78e56cff69 tz/lib-gpg-prereq-fix later to maint).
   (merge 80d32e84b5 rj/leakfixes later to maint).
   (merge 0a868031ed pb/complete-diff-options later to maint).
   (merge d4f28279ad jc/doc-hash-object-types later to maint).
   (merge 1876a5ae15 ks/t4205-test-describe-with-abbrev-fix later to maint).
   (merge 6e6a529b57 jk/fsck-indices-in-worktrees later to maint).
   (merge 3e81b896f7 rs/packet-length-simplify later to maint).
   (merge 4c9cb51fe7 mh/doc-credential-helpers later to maint).
   (merge 3437f549dd jr/gitignore-doc-example-markup later to maint).
   (merge 947ebd62a0 jc/am-parseopt-fix later to maint).
   (merge e12cb98e1e jc/branch-parseopt-fix later to maint).
   (merge d6f598e443 jc/gitignore-doc-pattern-markup later to maint).
   (merge a2dad4868b jc/transport-parseopt-fix later to maint).
   (merge 68cbb20e73 jc/parse-options-show-branch later to maint).
   (merge 3821eb6c3d jc/parse-options-reset later to maint).
   (merge c48af99a3e bb/trace2-comment-fix later to maint).
   (merge c95ae3ff9c rs/describe-parseopt-fix later to maint).
   (merge 36f76d2a25 rs/pack-objects-parseopt-fix later to maint).
   (merge 30c8c55cbf jc/tree-walk-drop-base-offset later to maint).
   (merge d089a06421 rs/bundle-parseopt-cleanup later to maint).
   (merge 823839bda1 ew/sha256-gcrypt-leak-fixes later to maint).
   (merge a5c01603b3 bc/ignore-clangd-cache later to maint).
   (merge 12009a182b js/allow-t4000-to-be-indented-with-spaces later to maint).
   (merge b3dcd24b8a jc/send-email-pre-process-fix later to maint).

----------------------------------------------------------------

Changes since v2.41.0 are as follows:

Adam Majer (1):
      doc: sha256 is no longer experimental

Alejandro R. Sedeño (1):
      statinfo.h: move DTYPE defines from dir.h

Alex Henrie (4):
      wt-status: don't show divergence advice when committing
      remote: don't imply that integration is always required before pushing
      push: don't imply that integration is always required before pushing
      sequencer: finish parsing the todo list despite an invalid first line

Andreas Herrmann (3):
      configure.ac: don't overwrite NO_EXPAT option
      configure.ac: don't overwrite NO_CURL option
      configure.ac: always save NO_ICONV to config.status

Beat Bolli (2):
      trace2: fix a comment
      wrapper: use trace2 counters to collect fsync stats

Calvin Wan (13):
      strbuf: clarify API boundary
      strbuf: clarify dependency
      abspath: move related functions to abspath
      credential-store: move related functions to credential-store file
      object-name: move related functions to object-name
      path: move related function to path
      strbuf: remove global variable
      git-compat-util: move strbuf.c funcs to its header
      git-compat-util: move wrapper.c funcs to its header
      sane-ctype.h: create header for sane-ctype macros
      kwset: move translation table from ctype
      treewide: remove unnecessary includes for wrapper.h
      git-compat-util: move alloc macros to git-compat-util.h

D. Ben Knoble (2):
      i18n: mark more bundle.c strings for translation
      t4002: fix "diff can read from stdin" syntax

Derrick Stolee (7):
      add: check color.ui for interactive add
      add: test use of brackets when color is disabled
      repository: create disable_replace_refs()
      replace-objects: create wrapper around setting
      repository: create read_replace_refs setting
      packfile: delete .idx files before .pack files
      builtin/repack.c: only repack `.pack`s that exist

Elijah Newren (28):
      init-db: document existing bug with core.bare in template config
      init-db: remove unnecessary global variable
      init-db, clone: change unnecessary global into passed parameter
      setup: adopt shared init-db & clone code
      read-cache: move shared commit and ls-files code
      add: modify add_files_to_cache() to avoid globals
      read-cache: move shared add/checkout/commit code
      statinfo: move stat_{data,validity} functions from cache/read-cache
      run-command.h: move declarations for run-command.c from cache.h
      name-hash.h: move declarations for name-hash.c from cache.h
      sparse-index.h: move declarations for sparse-index.c from cache.h
      preload-index.h: move declarations for preload-index.c from elsewhere
      diff.h: move declaration for global in diff.c from cache.h
      merge.h: move declarations for merge.c from cache.h
      repository.h: move declaration of the_index from cache.h
      read-cache*.h: move declarations for read-cache.c functions from cache.h
      cache.h: remove this no-longer-used header
      log-tree: replace include of revision.h with simple forward declaration
      repository: remove unnecessary include of path.h
      diff.h: remove unnecessary include of oidset.h
      list-objects-filter-options.h: remove unneccessary include
      builtin.h: remove unneccessary includes
      git-compat-util.h: remove unneccessary include of wildmatch.h
      merge-ll: rename from ll-merge
      khash: name the structs that khash declares
      object-store-ll.h: split this header out of object-store.h
      hash-ll, hashmap: move oidhash() to hash-ll
      fsmonitor-ll.h: split this header out of fsmonitor.h

Eric Sunshine (1):
      fsck: avoid misleading variable name

Eric Wong (5):
      sha256/gcrypt: fix build with SANITIZE=leak
      sha256/gcrypt: fix memory leak with SHA-256 repos
      sha256/gcrypt: die on gcry_md_open failures
      sha256: avoid functions deprecated in OpenSSL 3+
      avoid SHA-1 functions deprecated in OpenSSL 3+

Glen Choo (16):
      cocci: add headings to and reword README
      cocci: codify authoring and reviewing practices
      setup.c: don't setup in discover_git_directory()
      config: don't BUG when both kvi and source are set
      config: inline git_color_default_config
      urlmatch.h: use config_fn_t type
      config: add ctx arg to config_fn_t
      config.c: pass ctx in configsets
      config: pass ctx with config files
      config.c: pass ctx with CLI config
      trace2: plumb config kvi
      config: pass kvi to die_bad_number()
      config.c: remove config_reader from configsets
      config: add kvi.path, use it to evaluate includes
      config: pass source to config_parser_event_fn_t
      mailmap: change primary address for Glen Choo

Han Young (1):
      blame: allow --contents to work with bare repo

Jacob Abel (11):
      worktree add: include -B in usage docs
      t2400: cleanup created worktree in test
      t2400: refactor "worktree add" opt exclusion tests
      t2400: add tests to verify --quiet
      worktree add: add --orphan flag
      worktree add: introduce "try --orphan" hint
      worktree add: extend DWIM to infer --orphan
      worktree add: emit warn when there is a bad HEAD
      t2400: drop no-op `--sq` from rev-parse call
      builtin/worktree.c: convert tab in advice to space
      t2400: rewrite regex to avoid unintentional PCRE

Jacob Keller (1):
      fix cherry-pick/revert status when doing multiple commits

Jan Klötzke (1):
      ref-filter: handle nested tags in --points-at option

Jeff King (40):
      format-patch: free rev.message_id when exiting
      format-patch: free elements of rev.ref_message_ids list
      pathspec: factor out magic-to-name function
      diff: factor out --follow pathspec check
      diff: detect pathspec magic not supported by --follow
      ci: use clang for ASan/UBSan checks
      ci: run ASan/UBSan in a single job
      ci: drop linux-clang job
      commit: pass --no-divider to interpret-trailers
      http: handle both "h2" and "h2h3" in curl info lines
      var: mark unused parameters in git_var callbacks
      imap-send: use server conf argument in setup_curl()
      imap-send: drop unused parameter from imap_cmd_cb callback
      imap-send: drop unused fields from imap_cmd_cb
      refs.c: rename `ref_filter`
      ref-filter.h: provide `REF_FILTER_INIT`
      ref-filter: clear reachable list pointers after freeing
      ref-filter: add `ref_filter_clear()`
      ref-filter.c: parameterize match functions over patterns
      test-ref-store: drop unimplemented reflog-expire command
      do_for_each_ref_helper(): mark unused repository parameter
      http: mark unused parameters in curl callbacks
      http-push: mark unused parameter in xml callback
      am: mark unused keep_cr parameters
      count-objects: mark unused parameter in alternates callback
      revisions: drop unused "opt" parameter in "tweak" callbacks
      fsck: mark unused parameters in various fsck callbacks
      merge-tree: mark unused parameter in traverse callback
      replace: mark unused parameter in ref callback
      replace: mark unused parameter in each_mergetag_fn callback
      rev-parse: mark unused parameter in for_each_abbrev callback
      tag: mark unused parameters in each_tag_name_fn callbacks
      t/helper: mark unused callback void data parameters
      ref-filter: avoid parsing tagged objects in match_points_at()
      ref-filter: avoid parsing non-tags in match_points_at()
      ref-filter: simplify return type of match_points_at
      send-email: drop FakeTerm hack
      send-email: avoid creating more than one Term::ReadLine object
      repack: free geometry struct
      t4053: avoid writing to unopened pipe

Johan Ruokangas (1):
      gitignore.txt: use backticks instead of double quotes

Johannes Schindelin (6):
      do_read_index(): always mark index as initialized unless erroring out
      split-index: accept that a base index can be empty
      commit -a -m: allow the top-level tree to become empty again
      t0040: declare non-tab indentation to be okay in this script
      win32: add a helper to run `git.exe` without a foreground window
      git maintenance: avoid console window in scheduled tasks on Windows

John Cai (34):
      docs: clarify git-pack-refs --all will pack all refs
      pack-refs: teach --exclude option to exclude refs from being packed
      pack-refs: teach pack-refs --include option
      t0000-basic: modernize test format
      t0030-stripspace: modernize test format
      t3210-pack-refs: modernize test format
      t1001-read-tree-m-2way: modernize test format
      t1002-read-tree-m-u-2way: modernize test format
      t1006-cat-file: modernize test format
      t3500-cherry: modernize test format
      t3700-add: modernize test format
      t3903-stash: modernize test format
      t4002-diff-basic: modernize test format
      t4003-diff-rename-1: modernize test format
      t4004-diff-rename-symlink: modernize test format
      t4202-log: modernize test format
      t4206-log-follow-harder-copies: modernize test format
      t5300-pack-object: modernize test format
      t5301-sliding-window: modernize test format
      t5303-pack-corruption-resilience: modernize test format
      t5306-pack-nobase: modernize test format
      t6050-replace: modernize test format
      t7101-reset-empty-subdirs: modernize test format
      t7110-reset-merge: modernize test format
      t7111-reset-table: modernize test format
      t7201-co: modernize test format
      t7508-status: modernize test format
      t7600-merge: modernize test format
      t7700-repack: modernize test format
      t9100-git-svn-basic: modernize test format
      t9104-git-svn-follow-parent: modernize test format
      t9200-git-cvsexportcommit: modernize test format
      t9400-git-cvsserver-server: modernize test format
      docs: add git hash-object -t option's possible values

Jonathan Tan (1):
      CodingGuidelines: use octal escapes, not hex

Josip Sokcevic (1):
      diff-lib: honor override_submodule_config flag bit

Junio C Hamano (47):
      diff: fix interaction between the "-s" option and other options
      show-branch doc: say <ref>, not <reference>
      Start the 2.42 cycle
      The second batch for 2.42
      The third batch
      ll-merge: killing the external merge driver aborts the merge
      The fourth batch
      t6406: skip "external merge driver getting killed by a signal" test on Windows
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      t6135: attr magic with path pattern
      tree-walk: lose base_offset that is never used in tree_entry_interesting
      tree-walk: drop unused base_offset from do_match()
      The ninth batch
      dir: match "attr" pathspec magic with correct paths
      The tenth batch
      The eleventh batch
      The twelfth batch
      gitignore.txt: mark up explanation of patterns consistently
      am: simplify parsing of "--[no-]keep-cr"
      branch: reject "--no-all" and "--no-remotes" early
      parse-options: introduce OPT_IPVERSION()
      fetch: reject --no-ipv[46]
      show-branch: --no-sparse should give dense output
      short help: allow multi-line opthelp
      remote: simplify "remote add --tags" help text
      short help: allow a gap smaller than USAGE_GAP
      show-branch: reject --[no-](topo|date)-order
      reset: reject --no-(mixed|soft|hard|merge|keep) option
      The thirteenth batch
      branch: update the message to refuse touching a branch in-use
      hex: retire get_sha1_hex()
      The fourteenth batch
      SubmittingPatches: choice of base for fixing an older maintenance track
      The fifteenth batch
      SubmittingPatches: explain why 'next' and above are inappropriate base
      SubmittingPatches: use of older maintenance tracks is an exception
      The sixteenth batch
      MyFirstContribution: refrain from self-iterating too much
      The seventeenth batch
      The eighteenth batch
      Git 2.42-rc0
      A few more topics before -rc1
      Git 2.42-rc1
      Git 2.42-rc2

Kousik Sanagavarapu (5):
      t/lib-gpg: introduce new prereq GPG2
      ref-filter: add new "signature" atom
      t4205: correctly test %(describe:abbrev=...)
      ref-filter: add multiple-option parsing functions
      ref-filter: add new "describe" atom

Kristoffer Haugsbakk (5):
      doc: tag: document `TAG_EDITMSG`
      t/t7004-tag: add regression test for successful tag creation
      tag: keep the message file in case ref transaction fails
      notes: update documentation for `use_default_notes`
      notes: move the documentation to the struct

Linus Arver (15):
      docs: typofixes
      doc: trailer: fix grammar
      doc: trailer: swap verb order
      doc: trailer: drop "commit message part" phrasing
      doc: trailer: examples: avoid the word "message" by itself
      doc: trailer: remove redundant phrasing
      doc: trailer: use angle brackets for <token> and <value>
      doc: trailer.<token>.command: emphasize deprecation
      doc: trailer: mention 'key' in DESCRIPTION
      doc: trailer: add more examples in DESCRIPTION
      SubmittingPatches: reword awkward phrasing
      SubmittingPatches: discuss subsystems separately from git.git
      SubmittingPatches: de-emphasize branches as starting points
      SubmittingPatches: emphasize need to communicate non-default starting points
      SubmittingPatches: simplify guidance for choosing a starting point

M Hickford (3):
      credential: avoid erasing distinct password
      credential: erase all matching credentials
      doc: gitcredentials: link to helper list

Martin Ågren (1):
      t0091-bugreport.sh: actually verify some content of report

Matthias Aßhauer (3):
      run-command: conditionally define locate_in_PATH()
      compat/mingw: implement a native locate_in_PATH()
      docs: update when `git bisect visualize` uses `gitk`

Mike Hommey (2):
      commit-reach: fix memory leak in get_reachable_subset()
      mingw: use lowercase includes for some Windows headers

Oswald Buddenhagen (2):
      advice: handle "rebase" in error_resolve_conflict()
      t9001: remove excessive GIT_SEND_EMAIL_NOTTY=1

Patrick Steinhardt (17):
      fetch: drop unused DISPLAY_FORMAT_UNKNOWN enum value
      fetch: drop unneeded NULL-check for `remote_ref`
      fetch: pass through `fetch_config` directly
      fetch: use `fetch_config` to store "fetch.prune" value
      fetch: use `fetch_config` to store "fetch.pruneTags" value
      fetch: use `fetch_config` to store "fetch.showForcedUpdates" value
      fetch: use `fetch_config` to store "fetch.recurseSubmodules" value
      fetch: use `fetch_config` to store "fetch.parallel" value
      fetch: use `fetch_config` to store "submodule.fetchJobs" value
      t1006: don't strip timestamps from expected results
      t1006: modernize test style to use `test_cmp`
      strbuf: provide CRLF-aware helper to read until a specified delimiter
      cat-file: simplify reading from standard input
      cat-file: add option '-Z' that delimits input and output with NUL
      revision: reorder `read_revisions_from_stdin()`
      revision: small readability improvement for reading from stdin
      revision: handle pseudo-opts in `--stdin` mode

Petar Vutov (1):
      doc: highlight that .gitmodules does not support !command

Philippe Blain (30):
      revisions.txt: use description list for special refs
      revisions.txt: document more special refs
      completion: complete REVERT_HEAD and BISECT_HEAD
      git-merge.txt: modernize word choice in "True merge" section
      Documentation: document AUTO_MERGE
      completion: complete AUTO_MERGE
      completion: add comments describing __git_diff_* globals
      completion: complete --break-rewrites
      completion: complete --cc
      completion: complete --combined-all-paths
      completion: complete --compact-summary
      completion: complete --default-prefix
      completion: complete --find-copies
      completion: complete --find-object
      completion: complete --find-renames
      completion: complete --function-context
      completion: complete --ignore-matching-lines
      completion: complete --irreversible-delete
      completion: complete --ita-invisible-in-index and --ita-visible-in-index
      completion: complete --line-prefix
      completion: complete --no-relative
      completion: complete --no-stat
      completion: complete --output
      completion: complete --output-indicator-{context,new,old}
      completion: complete --unified
      completion: complete --ws-error-highlight
      completion: move --pickaxe-{all,regex} to __git_diff_common_options
      completion: complete --diff-merges, its options and --no-diff-merges
      completion: complete --remerge-diff
      diff.c: mention completion above add_diff_options

Phillip Wood (7):
      apply: improve error messages when reading patch
      diff --no-index: refuse to compare stdin to a directory
      diff --no-index: die on error reading stdin
      t4054: test diff --no-index with stdin
      diff --no-index: support reading from named pipes
      rebase --skip: fix commit message clean up when skipping squash
      t4053: avoid race when killing background processes

René Scharfe (20):
      t1800: loosen matching of error message for bad shebang
      run-command: report exec error even on ENOENT
      ls-tree: fix documentation of %x format placeholder
      pretty: factor out expand_separator()
      strbuf: factor out strbuf_expand_step()
      replace strbuf_expand_dict_cb() with strbuf_expand_step()
      replace strbuf_expand() with strbuf_expand_step()
      strbuf: simplify strbuf_expand_literal_cb()
      ls-tree: simplify prefix handling
      pretty: avoid double negative in format_commit_item()
      pkt-line: add size parameter to packet_length()
      pretty: use strchr(3) in userformat_find_requirements()
      t6300: fix setup with GPGSSH but without GPG
      strbuf: use skip_prefix() in strbuf_addftime()
      ls-tree: fix --no-full-name
      describe: fix --no-exact-match
      pack-objects: fix --no-keep-true-parents
      pack-objects: fix --no-quiet
      bundle: use OPT_PASSTHRU_ARGV
      parse-options: disallow negating OPTION_SET_INT 0

Rubén Justo (11):
      config: fix a leak in git_config_copy_or_rename_section_in_file
      remote: fix a leak in query_matches_negative_refspec
      branch: fix a leak in dwim_and_setup_tracking
      branch: fix a leak in inherit_tracking
      branch: fix a leak in check_tracking_branch
      branch: fix a leak in setup_tracking
      rev-parse: fix a leak with --abbrev-ref
      branch: fix a leak in setup_tracking
      branch: fix a leak in cmd_branch
      config: fix a leak in git_config_copy_or_rename_section_in_file
      tests: mark as passing with SANITIZE=leak

Sean Allred (5):
      show-ref doc: update for internal consistency
      ls-remote doc: remove redundant --tags example
      ls-remote doc: show peeled tags in examples
      ls-remote doc: explain what each example does
      ls-remote doc: document the output format

Sebastian Thiel (1):
      mv: handle lstat() failure correctly

Shuqi Liang (2):
      diff-tree: integrate with sparse index
      worktree: integrate with sparse-index

Taylor Blau (53):
      object: add object_array initializer helper function
      pack-bitmap.c: extract `fill_in_bitmap()`
      pack-bitmap.c: use commit boundary during bitmap traversal
      builtin/submodule--helper.c: handle missing submodule URLs
      builtin/repack.c: only collect fully-formed packs
      reachable.c: extract `obj_is_recent()`
      gc: introduce `gc.recentObjectsHook`
      pack-bitmap.c: gracefully degrade on failure to load MIDX'd pack
      t7701: make annotated tag unreachable
      fsck: suppress commit-graph output with `--no-progress`
      fsck: suppress MIDX output with `--no-progress`
      commit-graph.c: extract `verify_one_commit_graph()`
      commit-graph.c: iteratively verify commit-graph chains
      commit-graph.c: pass progress to `verify_one_commit_graph()`
      commit-graph.c: avoid duplicated progress output during `verify`
      builtin/for-each-ref.c: add `--exclude` option
      refs: plumb `exclude_patterns` argument throughout
      refs/packed-backend.c: refactor `find_reference_location()`
      refs/packed-backend.c: implement jump lists to avoid excluded pattern(s)
      refs/packed-backend.c: add trace2 counters for jump list
      revision.h: store hidden refs in a `strvec`
      refs.h: let `for_each_namespaced_ref()` take excluded patterns
      refs.h: implement `hidden_refs_to_excludes()`
      builtin/receive-pack.c: avoid enumerating hidden references
      upload-pack.c: avoid enumerating hidden refs where possible
      ls-refs.c: avoid enumerating hidden refs where possible
      builtin/repack.c: avoid dir traversal in `collect_pack_filenames()`
      packfile.c: prevent overflow in `nth_packed_object_id()`
      packfile.c: prevent overflow in `load_idx()`
      packfile.c: use checked arithmetic in `nth_packed_object_offset()`
      midx.c: use `size_t`'s for fanout nr and alloc
      midx.c: prevent overflow in `nth_midxed_object_oid()`
      midx.c: prevent overflow in `nth_midxed_offset()`
      midx.c: store `nr`, `alloc` variables as `size_t`'s
      midx.c: prevent overflow in `write_midx_internal()`
      midx.c: prevent overflow in `fill_included_packs_batch()`
      pack-bitmap.c: ensure that eindex lookups don't overflow
      commit-graph.c: prevent overflow in `write_commit_graph_file()`
      commit-graph.c: prevent overflow in add_graph_to_chain()
      commit-graph.c: prevent overflow in `load_oid_from_graph()`
      commit-graph.c: prevent overflow in `fill_commit_graph_info()`
      commit-graph.c: prevent overflow in `fill_commit_in_graph()`
      commit-graph.c: prevent overflow in `load_tree_for_commit()`
      commit-graph.c: prevent overflow in `split_graph_merge_strategy()`
      commit-graph.c: prevent overflow in `merge_commit_graph()`
      commit-graph.c: prevent overflow in `write_commit_graph()`
      commit-graph.c: prevent overflow in `verify_commit_graph()`
      t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories
      t/lib-commit-graph.sh: avoid directory change in `graph_git_behavior()`
      t5318: avoid top-level directory changes
      t5328: avoid top-level directory changes
      t/lib-commit-graph.sh: avoid sub-shell in `graph_git_behavior()`
      Documentation/RelNotes/2.42.0.txt: typofix

Teng Long (8):
      surround %s with quotes when failed to lookup commit
      notes.c: cleanup 'strbuf_grow' call in 'append_edit'
      notes.c: use designated initializers for clarity
      t3321: add test cases about the notes stripspace behavior
      notes.c: introduce '--separator=<paragraph-break>' option
      notes.c: append separator instead of insert by pos
      notes.c: introduce "--[no-]stripspace" option
      notes: introduce "--no-separator" option

Todd Zullinger (3):
      trace2 tests: fix PTHREADS prereq
      t/lib-gpg: fix ssh-keygen -Y check-novalidate with openssh-9.0
      t/lib-gpg: require GPGSSH for GPGSSH_VERIFYTIME prereq

Victoria Dye (3):
      config: use gitdir to get worktree config
      config: pass 'repo' directly to 'config_with_options()'
      repository: move 'repository_format_worktree_config' to repo scope

Vinayak Dev (1):
      docs: add necessary headers to Documentation/MFOW.txt

ZheNing Hu (1):
      ls-files: align format atoms with ls-tree

brian m. carlson (9):
      t: add a function to check executable bit
      var: add support for listing the shell
      var: format variable structure with C99 initializers
      var: adjust memory allocation for strings
      attr: expose and rename accessor functions
      var: add attributes files locations
      var: add config file locations
      ident: don't consider '.' a crud
      gitignore: ignore clangd .cache directory


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.42.0-rc1
@ 2023-08-10 16:45  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2023-08-10 16:45 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.42.0-rc1 is now available for testing at
the usual places.  It is comprised of 422 non-merge commits since
v2.41.0, contributed by 63 people, 15 of which are new faces [*].

There are still some corners to be rounded before everything is
ready to go, but I've already extended -rc1 by a day, so let's not
wait for the regression fixes we already know of but haven't got
around to.  They will be in 'master' before -rc2 is tagged.  On the
other hand, changes that are not about fixing new regressions
introduced during this cycle are to be postponed until the next
cycle.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.42.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.41.0 are as follows.
Welcome to the Git development community!

  Adam Majer, Andreas Herrmann, Greg Alexander, Han Young, Jacob
  Abel, Jan Klötzke, Jim Pryor, Johan Ruokangas, Josh Sref,
  Josip Sokcevic, Louis Strous, Petar Vutov, Premek Vysoky,
  Tribo Dar, and Vinayak Dev.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alejandro R. Sedeño, Alex Henrie, Beat Bolli, brian m. carlson,
  Calvin Wan, Christian Couder, D. Ben Knoble, Derrick Stolee,
  Elijah Newren, Eric Sunshine, Eric Wong, Glen Choo, Hariom Verma,
  Jacob Keller, Jaydeep Das, Jeff King, Johannes Schindelin, John
  Cai, Jonathan Nieder, Jonathan Tan, Junio C Hamano, Kousik
  Sanagavarapu, Kristoffer Haugsbakk, Linus Arver, Martin Ågren,
  Matthew Hughes, Matthias Aßhauer, M Hickford, Michael Haggerty,
  Mike Hommey, Nsengiyumva Wilberforce, Patrick Steinhardt, Philippe
  Blain, Phillip Wood, Randall S. Becker, René Scharfe, Rubén Justo,
  Sean Allred, Shuqi Liang, SZEDER Gábor, Taylor Blau, Teng Long,
  Todd Zullinger, Toon Claes, Torsten Bögershausen, Victoria Dye,
  and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.42 Release Notes (draft)
===============================

UI, Workflows & Features

 * "git pack-refs" learns "--include" and "--exclude" to tweak the ref
   hierarchy to be packed using pattern matching.

 * 'git worktree add' learned how to create a worktree based on an
   orphaned branch with `--orphan`.

 * "git pack-objects" learned to invoke a new hook program that
   enumerates extra objects to be used as anchoring points to keep
   otherwise unreachable objects in cruft packs.

 * Add more "git var" for toolsmiths to learn various locations Git is
   configured with either via the configuration or hardcoded defaults.

 * 'git notes append' was taught '--separator' to specify string to insert
   between paragraphs.

 * The "git for-each-ref" family of commands learned placeholders
   related to GPG signature verification.

 * "git diff --no-index" learned to read from named pipes as if they
   were regular files, to allow "git diff <(process) <(substitution)"
   some shells support.

 * Help newbies by suggesting that there are cases where force-pushing
   is a valid and sensible thing to update a branch at a remote
   repository, rather than reconciling with merge/rebase.

 * "git blame --contents=file" has been taught to work in a bare
   repository.

 * "git branch -f X" to repoint the branch X said that X was "checked
   out" in another worktree, even when branch X was not and instead
   being bisected or rebased.  The message was reworded to say the
   branch was "in use".

 * Tone down the warning on SHA-256 repositories being an experimental
   curiosity.  We do not have support for them to interoperate with
   traditional SHA-1 repositories, but at this point, we do not plan
   to make breaking changes to SHA-256 repositories and there is no
   longer need for such a strongly phrased warning.


Performance, Internal Implementation, Development Support etc.

 * "git diff-tree" has been taught to take advantage of the
   sparse-index feature.

 * Clang's sanitizer implementation seems to work better than GCC's.
   (merge d88d727143 jk/ci-use-clang-for-sanitizer-jobs later to maint).

 * The object traversal using reachability bitmap done by
   "pack-object" has been tweaked to take advantage of the fact that
   using "boundary" commits as representative of all the uninteresting
   ones can save quite a lot of object enumeration.

 * discover_git_directory() no longer touches the_repository.

 * "git worktree" learned to work better with sparse index feature.

 * When the external merge driver is killed by a signal, its output
   should not be trusted as a resolution with conflicts that is
   proposed by the driver, but the code did.

 * The set-up code for the get_revision() API now allows feeding
   options like --all and --not in the --stdin mode.

 * Move functions that are not about pure string manipulation out of
   strbuf.[ch]

 * "imap-send" codepaths got cleaned up to get rid of unused
   parameters.

 * Enumerating refs in the packed-refs file, while excluding refs that
   match certain patterns, has been optimized.

 * Mark-up unused parameters in the code so that we can eventually
   enable -Wunused-parameter by default.

 * Instead of inventing a custom counter variables for debugging,
   use existing trace2 facility in the fsync customization codepath.

 * "git branch --list --format=<format>" and friends are taught
   a new "%(describe)" placeholder.

 * Clarify how to choose the starting point for a new topic in
   developer guidance document.

 * The implementation of "get_sha1_hex()" that reads a hexadecimal
   string that spells a full object name has been extended to cope
   with any hash function used in the repository, but the "sha1" in
   its name survived.  Rename it to get_hash_hex(), a name that is
   more consistent within its friends like get_hash_hex_algop().

 * Command line parser fix, and a small parse-options API update.


Fixes since v2.41
-----------------

 * "git tag" learned to leave the "$GIT_DIR/TAG_EDITMSG" file when the
   command failed, so that the user can salvage what they typed.
   (merge 08c12ec1d0 kh/keep-tag-editmsg-upon-failure later to maint).

 * The "-s" (silent, squelch) option of the "diff" family of commands
   did not interact with other options that specify the output format
   well.  This has been cleaned up so that it will clear all the
   formatting options given before.
   (merge 9d484b92ed jc/diff-s-with-other-options later to maint).

 * Update documentation regarding Coccinelle patches.
   (merge 3bd0097cfc gc/doc-cocci-updates later to maint).

 * Some atoms that can be used in "--format=<format>" for "git ls-tree"
   were not supported by "git ls-files", even though they were relevant
   in the context of the latter.
   (merge 4d28c4f75f zh/ls-files-format-atoms later to maint).

 * Document more pseudo-refs and teach the command line completion
   machinery to complete AUTO_MERGE.
   (merge 982ff3a649 pb/complete-and-document-auto-merge-and-friends later to maint).

 * "git submodule" code trusted the data coming from the config (and
   the in-tree .gitmodules file) too much without validating, leading
   to NULL dereference if the user mucks with a repository (e.g.
   submodule.<name>.url is removed).  This has been corrected.
   (merge fbc806acd1 tb/submodule-null-deref-fix later to maint).

 * The value of config.worktree is per-repository, but has been kept
   in a singleton global variable per process. This has been OK as
   most Git operations interacted with a single repository at a time,
   but not right for operations like recursive "grep" that want to
   access multiple repositories from a single process without forking.

   The global variable has been eliminated and made into a member in
   the per-repository data structure.
   (merge 3867f6d650 vd/worktree-config-is-per-repository later to maint).

 * "git [-c log.follow=true] log [--follow] ':(glob)f**'" used to barf.
   (merge 8260bc5902 jk/log-follow-with-non-literal-pathspec later to maint).

 * Introduce a mechanism to disable replace refs globally and per
   repository.
   (merge 9c7d1b057f ds/disable-replace-refs later to maint).

 * "git cat-file --batch" and friends learned "-Z" that uses NUL
   delimiter for both input and output.
   (merge f79e18849b ps/cat-file-null-output later to maint).

 * The reimplemented "git add -i" did not honor color.ui configuration.
   (merge 6f74648cea ds/add-i-color-configuration-fix later to maint).

 * Compilation fix for platforms without D_TYPE in struct dirent.
   (merge 03bf92b9bf as/dtype-compilation-fix later to maint).

 * Suggest to refrain from using hex literals that are non-portable
   when writing printf(1) format strings.
   (merge f0b68f0546 jt/doc-use-octal-with-printf later to maint).

 * Simplify error message when run-command fails to start a command.
   (merge 6d224ac286 rs/run-command-exec-error-on-noent later to maint).

 * Gracefully deal with a stale MIDX file that lists a packfile that
   no longer exists.
   (merge 06f3867865 tb/open-midx-bitmap-fallback later to maint).

 * Even when diff.ignoreSubmodules tells us to ignore submodule
   changes, "git commit" with an index that already records changes to
   submodules should include the submodule changes in the resulting
   commit, but it did not.
   (merge 5768478edc js/defeat-ignore-submodules-config-with-explicit-addition later to maint).

 * When "git commit --trailer=..." invokes the interpret-trailers
   machinery, it knows what it feeds to interpret-trailers is a full
   log message without any patch, but failed to express that by
   passing the "--no-divider" option, which has been corrected.
   (merge be3d654343 jk/commit-use-no-divider-with-interpret-trailers later to maint).

 * Avoid breakage of "git pack-objects --cruft" due to inconsistency
   between the way the code enumerates packfiles in the repository.
   (merge 73320e49ad tb/collect-pack-filenames-fix later to maint).

 * We create .pack and then .idx, we consider only packfiles that have
   .idx usable (those with only .pack are not ready yet), so we should
   remove .idx before removing .pack for consistency.
   (merge 0dd1324a73 ds/remove-idx-before-pack later to maint).

 * Partially revert a sanity check that the rest of the config code
   was not ready, to avoid triggering it in a corner case.
   (merge a53f43f900 gc/config-partial-submodule-kvi-fix later to maint).

 * "git apply" punts when it is fed too large a patch input; the error
   message it gives when it happens has been clarified.
   (merge 42612e18d2 pw/apply-too-large later to maint).

 * During a cherry-pick or revert session that works on multiple
   commits, "git status" did not give correct information, which has
   been corrected.
   (merge a096a889f4 jk/cherry-pick-revert-status later to maint).

 * A few places failed to differentiate the case where the index is
   truly empty (nothing added) and we haven't yet read from the
   on-disk index file, which have been corrected.
   (merge 2ee045eea1 js/empty-index-fixes later to maint).

 * "git bugreport" tests did not test what it wanted to test, which
   has been corrected.
   (merge 1aa92b8500 ma/t0091-fixup later to maint).

 * Code snippets in a tutorial document no longer compiled after
   recent header shuffling, which have been corrected.
   (merge bbd7c7b7c0 vd/adjust-mfow-doc-to-updated-headers later to maint).

 * "git ls-files '(attr:X)D/'" that triggers the common prefix
   optimization codepath failed to read from "D/.gitattributes",
   which has been corrected.
   (merge f4a8fde057 jc/pathspec-match-with-common-prefix later to maint).

 * "git fsck --no-progress" still spewed noise from the commit-graph
   subsystem, which has been corrected.
   (merge 9281cd07f0 tb/fsck-no-progress later to maint).

 * Various offset computation in the code that accesses the packfiles
   and other data in the object layer has been hardened against
   arithmetic overflow, especially on 32-bit systems.
   (merge 9a25cad7e0 tb/object-access-overflow-protection later to maint).

 * Names of MinGW header files are spelled in mixed case in some
   source files, but the build host can be using case sensitive
   filesystem with header files with their name spelled in all
   lowercase.
   (merge 4a53d0d0bc mh/mingw-case-sensitive-build later to maint).

 * Update message mark-up for i18n in "git bundle".
   (merge bbb6acd998 dk/bundle-i18n-more later to maint).

 * "git tag --list --points-at X" showed tags that directly refers to
   object X, but did not list a tag that points at such a tag, which
   has been corrected.

 * "./configure --with-expat=no" did not work as a way to refuse use
   of the expat library on a system with the library installed, which
   has been corrected.
   (merge fb8f7269c2 ah/autoconf-fixes later to maint).

 * When the user edits "rebase -i" todo file so that it starts with a
   "fixup", which would make it invalid, the command truncated the
   rest of the file before giving an error and returning the control
   back to the user.  Stop truncating to make it easier to correct
   such a malformed todo file.
   (merge 9645a087c2 ah/sequencer-rewrite-todo-fix later to maint).

 * Rewrite the description of giving a custom command to the
   submodule.<name>.update configuration variable.
   (merge 7cebc5bd78 pv/doc-submodule-update-settings later to maint).

 * Adjust to OpenSSL 3+, which deprecates its SHA-1 functions based on
   its traditional API, by using its EVP API instead.
   (merge bda9c12073 ew/hash-with-openssl-evp later to maint).

 * Exclude "." from the set of characters to be removed from the
   beginning and the end of the human-readable name.
   (merge 1c04cb0744 bc/ident-dot-is-no-longer-crud-letter later to maint).

 * "git bisect visualize" stopped running "gitk" on Git for Windows
   when the command was reimplemented in C around Git 2.34 timeframe.
   This has been corrected.
   (merge fff1594fa7 ma/locate-in-path-for-windows later to maint).

 * "git rebase -i" with a series of squash/fixup, when one of the
   steps stopped in conflicts and ended up getting skipped, did not
   handle the accumulated commit log messages, which has been
   corrected.
   (merge 6ce7afe163 pw/rebase-skip-commit-message-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 51f9d2e563 sa/doc-ls-remote later to maint).
   (merge c6d26a9dda jk/format-patch-message-id-unleak later to maint).
   (merge f7e063f326 ps/fetch-cleanups later to maint).
   (merge e4cf013468 tl/quote-problematic-arg-for-clarity later to maint).
   (merge 20025fdfc7 tz/test-ssh-verifytime-fix later to maint).
   (merge e48a21df65 tz/test-fix-pthreads-prereq later to maint).
   (merge 68b51172e3 mh/commit-reach-get-reachable-plug-leak later to maint).
   (merge aeee1408ce kh/use-default-notes-doc later to maint).
   (merge 3b8724bce6 jc/test-modernization later to maint).
   (merge 447a3b7331 jc/test-modernization-2 later to maint).
   (merge d57fa7fc73 la/doc-interpret-trailers later to maint).
   (merge 548afb0d9a la/docs-typofixes later to maint).
   (merge 3744ffcbcd rs/doc-ls-tree-hex-literal later to maint).
   (merge 6c26da8404 mh/credential-erase-improvements later to maint).
   (merge 78e56cff69 tz/lib-gpg-prereq-fix later to maint).
   (merge 80d32e84b5 rj/leakfixes later to maint).
   (merge 0a868031ed pb/complete-diff-options later to maint).
   (merge d4f28279ad jc/doc-hash-object-types later to maint).
   (merge 1876a5ae15 ks/t4205-test-describe-with-abbrev-fix later to maint).
   (merge 6e6a529b57 jk/fsck-indices-in-worktrees later to maint).
   (merge 3e81b896f7 rs/packet-length-simplify later to maint).
   (merge 4c9cb51fe7 mh/doc-credential-helpers later to maint).
   (merge 3437f549dd jr/gitignore-doc-example-markup later to maint).
   (merge 947ebd62a0 jc/am-parseopt-fix later to maint).
   (merge e12cb98e1e jc/branch-parseopt-fix later to maint).
   (merge d6f598e443 jc/gitignore-doc-pattern-markup later to maint).
   (merge a2dad4868b jc/transport-parseopt-fix later to maint).
   (merge 68cbb20e73 jc/parse-options-show-branch later to maint).
   (merge 3821eb6c3d jc/parse-options-reset later to maint).
   (merge c48af99a3e bb/trace2-comment-fix later to maint).
   (merge c95ae3ff9c rs/describe-parseopt-fix later to maint).
   (merge 36f76d2a25 rs/pack-objects-parseopt-fix later to maint).
   (merge 30c8c55cbf jc/tree-walk-drop-base-offset later to maint).
   (merge d089a06421 rs/bundle-parseopt-cleanup later to maint).
   (merge 823839bda1 ew/sha256-gcrypt-leak-fixes later to maint).
   (merge a5c01603b3 bc/ignore-clangd-cache later to maint).

----------------------------------------------------------------

Changes since v2.41.0 are as follows:

Adam Majer (1):
      doc: sha256 is no longer experimental

Alejandro R. Sedeño (1):
      statinfo.h: move DTYPE defines from dir.h

Alex Henrie (4):
      wt-status: don't show divergence advice when committing
      remote: don't imply that integration is always required before pushing
      push: don't imply that integration is always required before pushing
      sequencer: finish parsing the todo list despite an invalid first line

Andreas Herrmann (3):
      configure.ac: don't overwrite NO_EXPAT option
      configure.ac: don't overwrite NO_CURL option
      configure.ac: always save NO_ICONV to config.status

Beat Bolli (2):
      trace2: fix a comment
      wrapper: use trace2 counters to collect fsync stats

Calvin Wan (13):
      strbuf: clarify API boundary
      strbuf: clarify dependency
      abspath: move related functions to abspath
      credential-store: move related functions to credential-store file
      object-name: move related functions to object-name
      path: move related function to path
      strbuf: remove global variable
      git-compat-util: move strbuf.c funcs to its header
      git-compat-util: move wrapper.c funcs to its header
      sane-ctype.h: create header for sane-ctype macros
      kwset: move translation table from ctype
      treewide: remove unnecessary includes for wrapper.h
      git-compat-util: move alloc macros to git-compat-util.h

D. Ben Knoble (2):
      i18n: mark more bundle.c strings for translation
      t4002: fix "diff can read from stdin" syntax

Derrick Stolee (7):
      add: check color.ui for interactive add
      add: test use of brackets when color is disabled
      repository: create disable_replace_refs()
      replace-objects: create wrapper around setting
      repository: create read_replace_refs setting
      packfile: delete .idx files before .pack files
      builtin/repack.c: only repack `.pack`s that exist

Elijah Newren (28):
      init-db: document existing bug with core.bare in template config
      init-db: remove unnecessary global variable
      init-db, clone: change unnecessary global into passed parameter
      setup: adopt shared init-db & clone code
      read-cache: move shared commit and ls-files code
      add: modify add_files_to_cache() to avoid globals
      read-cache: move shared add/checkout/commit code
      statinfo: move stat_{data,validity} functions from cache/read-cache
      run-command.h: move declarations for run-command.c from cache.h
      name-hash.h: move declarations for name-hash.c from cache.h
      sparse-index.h: move declarations for sparse-index.c from cache.h
      preload-index.h: move declarations for preload-index.c from elsewhere
      diff.h: move declaration for global in diff.c from cache.h
      merge.h: move declarations for merge.c from cache.h
      repository.h: move declaration of the_index from cache.h
      read-cache*.h: move declarations for read-cache.c functions from cache.h
      cache.h: remove this no-longer-used header
      log-tree: replace include of revision.h with simple forward declaration
      repository: remove unnecessary include of path.h
      diff.h: remove unnecessary include of oidset.h
      list-objects-filter-options.h: remove unneccessary include
      builtin.h: remove unneccessary includes
      git-compat-util.h: remove unneccessary include of wildmatch.h
      merge-ll: rename from ll-merge
      khash: name the structs that khash declares
      object-store-ll.h: split this header out of object-store.h
      hash-ll, hashmap: move oidhash() to hash-ll
      fsmonitor-ll.h: split this header out of fsmonitor.h

Eric Sunshine (1):
      fsck: avoid misleading variable name

Eric Wong (5):
      sha256/gcrypt: fix build with SANITIZE=leak
      sha256/gcrypt: fix memory leak with SHA-256 repos
      sha256/gcrypt: die on gcry_md_open failures
      sha256: avoid functions deprecated in OpenSSL 3+
      avoid SHA-1 functions deprecated in OpenSSL 3+

Glen Choo (16):
      cocci: add headings to and reword README
      cocci: codify authoring and reviewing practices
      setup.c: don't setup in discover_git_directory()
      config: don't BUG when both kvi and source are set
      config: inline git_color_default_config
      urlmatch.h: use config_fn_t type
      config: add ctx arg to config_fn_t
      config.c: pass ctx in configsets
      config: pass ctx with config files
      config.c: pass ctx with CLI config
      trace2: plumb config kvi
      config: pass kvi to die_bad_number()
      config.c: remove config_reader from configsets
      config: add kvi.path, use it to evaluate includes
      config: pass source to config_parser_event_fn_t
      mailmap: change primary address for Glen Choo

Han Young (1):
      blame: allow --contents to work with bare repo

Jacob Abel (11):
      worktree add: include -B in usage docs
      t2400: cleanup created worktree in test
      t2400: refactor "worktree add" opt exclusion tests
      t2400: add tests to verify --quiet
      worktree add: add --orphan flag
      worktree add: introduce "try --orphan" hint
      worktree add: extend DWIM to infer --orphan
      worktree add: emit warn when there is a bad HEAD
      t2400: drop no-op `--sq` from rev-parse call
      builtin/worktree.c: convert tab in advice to space
      t2400: rewrite regex to avoid unintentional PCRE

Jacob Keller (1):
      fix cherry-pick/revert status when doing multiple commits

Jan Klötzke (1):
      ref-filter: handle nested tags in --points-at option

Jeff King (36):
      format-patch: free rev.message_id when exiting
      format-patch: free elements of rev.ref_message_ids list
      pathspec: factor out magic-to-name function
      diff: factor out --follow pathspec check
      diff: detect pathspec magic not supported by --follow
      ci: use clang for ASan/UBSan checks
      ci: run ASan/UBSan in a single job
      ci: drop linux-clang job
      commit: pass --no-divider to interpret-trailers
      http: handle both "h2" and "h2h3" in curl info lines
      var: mark unused parameters in git_var callbacks
      imap-send: use server conf argument in setup_curl()
      imap-send: drop unused parameter from imap_cmd_cb callback
      imap-send: drop unused fields from imap_cmd_cb
      refs.c: rename `ref_filter`
      ref-filter.h: provide `REF_FILTER_INIT`
      ref-filter: clear reachable list pointers after freeing
      ref-filter: add `ref_filter_clear()`
      ref-filter.c: parameterize match functions over patterns
      test-ref-store: drop unimplemented reflog-expire command
      do_for_each_ref_helper(): mark unused repository parameter
      http: mark unused parameters in curl callbacks
      http-push: mark unused parameter in xml callback
      am: mark unused keep_cr parameters
      count-objects: mark unused parameter in alternates callback
      revisions: drop unused "opt" parameter in "tweak" callbacks
      fsck: mark unused parameters in various fsck callbacks
      merge-tree: mark unused parameter in traverse callback
      replace: mark unused parameter in ref callback
      replace: mark unused parameter in each_mergetag_fn callback
      rev-parse: mark unused parameter in for_each_abbrev callback
      tag: mark unused parameters in each_tag_name_fn callbacks
      t/helper: mark unused callback void data parameters
      ref-filter: avoid parsing tagged objects in match_points_at()
      ref-filter: avoid parsing non-tags in match_points_at()
      ref-filter: simplify return type of match_points_at

Johan Ruokangas (1):
      gitignore.txt: use backticks instead of double quotes

Johannes Schindelin (3):
      do_read_index(): always mark index as initialized unless erroring out
      split-index: accept that a base index can be empty
      commit -a -m: allow the top-level tree to become empty again

John Cai (34):
      docs: clarify git-pack-refs --all will pack all refs
      pack-refs: teach --exclude option to exclude refs from being packed
      pack-refs: teach pack-refs --include option
      t0000-basic: modernize test format
      t0030-stripspace: modernize test format
      t3210-pack-refs: modernize test format
      t1001-read-tree-m-2way: modernize test format
      t1002-read-tree-m-u-2way: modernize test format
      t1006-cat-file: modernize test format
      t3500-cherry: modernize test format
      t3700-add: modernize test format
      t3903-stash: modernize test format
      t4002-diff-basic: modernize test format
      t4003-diff-rename-1: modernize test format
      t4004-diff-rename-symlink: modernize test format
      t4202-log: modernize test format
      t4206-log-follow-harder-copies: modernize test format
      t5300-pack-object: modernize test format
      t5301-sliding-window: modernize test format
      t5303-pack-corruption-resilience: modernize test format
      t5306-pack-nobase: modernize test format
      t6050-replace: modernize test format
      t7101-reset-empty-subdirs: modernize test format
      t7110-reset-merge: modernize test format
      t7111-reset-table: modernize test format
      t7201-co: modernize test format
      t7508-status: modernize test format
      t7600-merge: modernize test format
      t7700-repack: modernize test format
      t9100-git-svn-basic: modernize test format
      t9104-git-svn-follow-parent: modernize test format
      t9200-git-cvsexportcommit: modernize test format
      t9400-git-cvsserver-server: modernize test format
      docs: add git hash-object -t option's possible values

Jonathan Tan (1):
      CodingGuidelines: use octal escapes, not hex

Josip Sokcevic (1):
      diff-lib: honor override_submodule_config flag bit

Junio C Hamano (46):
      diff: fix interaction between the "-s" option and other options
      show-branch doc: say <ref>, not <reference>
      Start the 2.42 cycle
      The second batch for 2.42
      The third batch
      ll-merge: killing the external merge driver aborts the merge
      The fourth batch
      t6406: skip "external merge driver getting killed by a signal" test on Windows
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      t6135: attr magic with path pattern
      tree-walk: lose base_offset that is never used in tree_entry_interesting
      tree-walk: drop unused base_offset from do_match()
      The ninth batch
      dir: match "attr" pathspec magic with correct paths
      The tenth batch
      The eleventh batch
      The twelfth batch
      gitignore.txt: mark up explanation of patterns consistently
      am: simplify parsing of "--[no-]keep-cr"
      branch: reject "--no-all" and "--no-remotes" early
      parse-options: introduce OPT_IPVERSION()
      fetch: reject --no-ipv[46]
      show-branch: --no-sparse should give dense output
      short help: allow multi-line opthelp
      remote: simplify "remote add --tags" help text
      short help: allow a gap smaller than USAGE_GAP
      show-branch: reject --[no-](topo|date)-order
      reset: reject --no-(mixed|soft|hard|merge|keep) option
      The thirteenth batch
      branch: update the message to refuse touching a branch in-use
      hex: retire get_sha1_hex()
      The fourteenth batch
      SubmittingPatches: choice of base for fixing an older maintenance track
      The fifteenth batch
      SubmittingPatches: explain why 'next' and above are inappropriate base
      SubmittingPatches: use of older maintenance tracks is an exception
      The sixteenth batch
      MyFirstContribution: refrain from self-iterating too much
      The seventeenth batch
      The eighteenth batch
      Git 2.42-rc0
      A few more topics before -rc1
      Git 2.42-rc1

Kousik Sanagavarapu (5):
      t/lib-gpg: introduce new prereq GPG2
      ref-filter: add new "signature" atom
      t4205: correctly test %(describe:abbrev=...)
      ref-filter: add multiple-option parsing functions
      ref-filter: add new "describe" atom

Kristoffer Haugsbakk (5):
      doc: tag: document `TAG_EDITMSG`
      t/t7004-tag: add regression test for successful tag creation
      tag: keep the message file in case ref transaction fails
      notes: update documentation for `use_default_notes`
      notes: move the documentation to the struct

Linus Arver (15):
      docs: typofixes
      doc: trailer: fix grammar
      doc: trailer: swap verb order
      doc: trailer: drop "commit message part" phrasing
      doc: trailer: examples: avoid the word "message" by itself
      doc: trailer: remove redundant phrasing
      doc: trailer: use angle brackets for <token> and <value>
      doc: trailer.<token>.command: emphasize deprecation
      doc: trailer: mention 'key' in DESCRIPTION
      doc: trailer: add more examples in DESCRIPTION
      SubmittingPatches: reword awkward phrasing
      SubmittingPatches: discuss subsystems separately from git.git
      SubmittingPatches: de-emphasize branches as starting points
      SubmittingPatches: emphasize need to communicate non-default starting points
      SubmittingPatches: simplify guidance for choosing a starting point

M Hickford (3):
      credential: avoid erasing distinct password
      credential: erase all matching credentials
      doc: gitcredentials: link to helper list

Martin Ågren (1):
      t0091-bugreport.sh: actually verify some content of report

Matthias Aßhauer (3):
      run-command: conditionally define locate_in_PATH()
      compat/mingw: implement a native locate_in_PATH()
      docs: update when `git bisect visualize` uses `gitk`

Mike Hommey (2):
      commit-reach: fix memory leak in get_reachable_subset()
      mingw: use lowercase includes for some Windows headers

Patrick Steinhardt (17):
      fetch: drop unused DISPLAY_FORMAT_UNKNOWN enum value
      fetch: drop unneeded NULL-check for `remote_ref`
      fetch: pass through `fetch_config` directly
      fetch: use `fetch_config` to store "fetch.prune" value
      fetch: use `fetch_config` to store "fetch.pruneTags" value
      fetch: use `fetch_config` to store "fetch.showForcedUpdates" value
      fetch: use `fetch_config` to store "fetch.recurseSubmodules" value
      fetch: use `fetch_config` to store "fetch.parallel" value
      fetch: use `fetch_config` to store "submodule.fetchJobs" value
      t1006: don't strip timestamps from expected results
      t1006: modernize test style to use `test_cmp`
      strbuf: provide CRLF-aware helper to read until a specified delimiter
      cat-file: simplify reading from standard input
      cat-file: add option '-Z' that delimits input and output with NUL
      revision: reorder `read_revisions_from_stdin()`
      revision: small readability improvement for reading from stdin
      revision: handle pseudo-opts in `--stdin` mode

Petar Vutov (1):
      doc: highlight that .gitmodules does not support !command

Philippe Blain (30):
      revisions.txt: use description list for special refs
      revisions.txt: document more special refs
      completion: complete REVERT_HEAD and BISECT_HEAD
      git-merge.txt: modernize word choice in "True merge" section
      Documentation: document AUTO_MERGE
      completion: complete AUTO_MERGE
      completion: add comments describing __git_diff_* globals
      completion: complete --break-rewrites
      completion: complete --cc
      completion: complete --combined-all-paths
      completion: complete --compact-summary
      completion: complete --default-prefix
      completion: complete --find-copies
      completion: complete --find-object
      completion: complete --find-renames
      completion: complete --function-context
      completion: complete --ignore-matching-lines
      completion: complete --irreversible-delete
      completion: complete --ita-invisible-in-index and --ita-visible-in-index
      completion: complete --line-prefix
      completion: complete --no-relative
      completion: complete --no-stat
      completion: complete --output
      completion: complete --output-indicator-{context,new,old}
      completion: complete --unified
      completion: complete --ws-error-highlight
      completion: move --pickaxe-{all,regex} to __git_diff_common_options
      completion: complete --diff-merges, its options and --no-diff-merges
      completion: complete --remerge-diff
      diff.c: mention completion above add_diff_options

Phillip Wood (6):
      apply: improve error messages when reading patch
      diff --no-index: refuse to compare stdin to a directory
      diff --no-index: die on error reading stdin
      t4054: test diff --no-index with stdin
      diff --no-index: support reading from named pipes
      rebase --skip: fix commit message clean up when skipping squash

René Scharfe (19):
      t1800: loosen matching of error message for bad shebang
      run-command: report exec error even on ENOENT
      ls-tree: fix documentation of %x format placeholder
      pretty: factor out expand_separator()
      strbuf: factor out strbuf_expand_step()
      replace strbuf_expand_dict_cb() with strbuf_expand_step()
      replace strbuf_expand() with strbuf_expand_step()
      strbuf: simplify strbuf_expand_literal_cb()
      ls-tree: simplify prefix handling
      pretty: avoid double negative in format_commit_item()
      pkt-line: add size parameter to packet_length()
      pretty: use strchr(3) in userformat_find_requirements()
      t6300: fix setup with GPGSSH but without GPG
      strbuf: use skip_prefix() in strbuf_addftime()
      ls-tree: fix --no-full-name
      describe: fix --no-exact-match
      pack-objects: fix --no-keep-true-parents
      pack-objects: fix --no-quiet
      bundle: use OPT_PASSTHRU_ARGV

Rubén Justo (11):
      config: fix a leak in git_config_copy_or_rename_section_in_file
      remote: fix a leak in query_matches_negative_refspec
      branch: fix a leak in dwim_and_setup_tracking
      branch: fix a leak in inherit_tracking
      branch: fix a leak in check_tracking_branch
      branch: fix a leak in setup_tracking
      rev-parse: fix a leak with --abbrev-ref
      branch: fix a leak in setup_tracking
      branch: fix a leak in cmd_branch
      config: fix a leak in git_config_copy_or_rename_section_in_file
      tests: mark as passing with SANITIZE=leak

Sean Allred (5):
      show-ref doc: update for internal consistency
      ls-remote doc: remove redundant --tags example
      ls-remote doc: show peeled tags in examples
      ls-remote doc: explain what each example does
      ls-remote doc: document the output format

Shuqi Liang (2):
      diff-tree: integrate with sparse index
      worktree: integrate with sparse-index

Taylor Blau (53):
      object: add object_array initializer helper function
      pack-bitmap.c: extract `fill_in_bitmap()`
      pack-bitmap.c: use commit boundary during bitmap traversal
      builtin/submodule--helper.c: handle missing submodule URLs
      builtin/repack.c: only collect fully-formed packs
      reachable.c: extract `obj_is_recent()`
      gc: introduce `gc.recentObjectsHook`
      pack-bitmap.c: gracefully degrade on failure to load MIDX'd pack
      t7701: make annotated tag unreachable
      fsck: suppress commit-graph output with `--no-progress`
      fsck: suppress MIDX output with `--no-progress`
      commit-graph.c: extract `verify_one_commit_graph()`
      commit-graph.c: iteratively verify commit-graph chains
      commit-graph.c: pass progress to `verify_one_commit_graph()`
      commit-graph.c: avoid duplicated progress output during `verify`
      builtin/for-each-ref.c: add `--exclude` option
      refs: plumb `exclude_patterns` argument throughout
      refs/packed-backend.c: refactor `find_reference_location()`
      refs/packed-backend.c: implement jump lists to avoid excluded pattern(s)
      refs/packed-backend.c: add trace2 counters for jump list
      revision.h: store hidden refs in a `strvec`
      refs.h: let `for_each_namespaced_ref()` take excluded patterns
      refs.h: implement `hidden_refs_to_excludes()`
      builtin/receive-pack.c: avoid enumerating hidden references
      upload-pack.c: avoid enumerating hidden refs where possible
      ls-refs.c: avoid enumerating hidden refs where possible
      builtin/repack.c: avoid dir traversal in `collect_pack_filenames()`
      packfile.c: prevent overflow in `nth_packed_object_id()`
      packfile.c: prevent overflow in `load_idx()`
      packfile.c: use checked arithmetic in `nth_packed_object_offset()`
      midx.c: use `size_t`'s for fanout nr and alloc
      midx.c: prevent overflow in `nth_midxed_object_oid()`
      midx.c: prevent overflow in `nth_midxed_offset()`
      midx.c: store `nr`, `alloc` variables as `size_t`'s
      midx.c: prevent overflow in `write_midx_internal()`
      midx.c: prevent overflow in `fill_included_packs_batch()`
      pack-bitmap.c: ensure that eindex lookups don't overflow
      commit-graph.c: prevent overflow in `write_commit_graph_file()`
      commit-graph.c: prevent overflow in add_graph_to_chain()
      commit-graph.c: prevent overflow in `load_oid_from_graph()`
      commit-graph.c: prevent overflow in `fill_commit_graph_info()`
      commit-graph.c: prevent overflow in `fill_commit_in_graph()`
      commit-graph.c: prevent overflow in `load_tree_for_commit()`
      commit-graph.c: prevent overflow in `split_graph_merge_strategy()`
      commit-graph.c: prevent overflow in `merge_commit_graph()`
      commit-graph.c: prevent overflow in `write_commit_graph()`
      commit-graph.c: prevent overflow in `verify_commit_graph()`
      t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories
      t/lib-commit-graph.sh: avoid directory change in `graph_git_behavior()`
      t5318: avoid top-level directory changes
      t5328: avoid top-level directory changes
      t/lib-commit-graph.sh: avoid sub-shell in `graph_git_behavior()`
      Documentation/RelNotes/2.42.0.txt: typofix

Teng Long (8):
      surround %s with quotes when failed to lookup commit
      notes.c: cleanup 'strbuf_grow' call in 'append_edit'
      notes.c: use designated initializers for clarity
      t3321: add test cases about the notes stripspace behavior
      notes.c: introduce '--separator=<paragraph-break>' option
      notes.c: append separator instead of insert by pos
      notes.c: introduce "--[no-]stripspace" option
      notes: introduce "--no-separator" option

Todd Zullinger (3):
      trace2 tests: fix PTHREADS prereq
      t/lib-gpg: fix ssh-keygen -Y check-novalidate with openssh-9.0
      t/lib-gpg: require GPGSSH for GPGSSH_VERIFYTIME prereq

Victoria Dye (3):
      config: use gitdir to get worktree config
      config: pass 'repo' directly to 'config_with_options()'
      repository: move 'repository_format_worktree_config' to repo scope

Vinayak Dev (1):
      docs: add necessary headers to Documentation/MFOW.txt

ZheNing Hu (1):
      ls-files: align format atoms with ls-tree

brian m. carlson (9):
      t: add a function to check executable bit
      var: add support for listing the shell
      var: format variable structure with C99 initializers
      var: adjust memory allocation for strings
      attr: expose and rename accessor functions
      var: add attributes files locations
      var: add config file locations
      ident: don't consider '.' a crud
      gitignore: ignore clangd .cache directory



^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.42.0-rc0
@ 2023-08-04 19:30  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2023-08-04 19:30 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

An early preview release Git v2.42.0-rc0 is now available for
testing at the usual places.  It is comprised of 401 non-merge
commits since v2.41.0, contributed by 59 people, 13 of which are
new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.42.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.41.0 are as follows.
Welcome to the Git development community!

  Andreas Herrmann, Greg Alexander, Han Young, Jacob Abel, Jan
  Klötzke, Jim Pryor, Johan Ruokangas, Josh Sref, Josip Sokcevic,
  Petar Vutov, Premek Vysoky, Tribo Dar, and Vinayak Dev.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  , Alejandro R. Sedeño, Alex Henrie, Beat Bolli, brian
  m. carlson, Calvin Wan, Christian Couder, D. Ben Knoble, Derrick
  Stolee, Elijah Newren, Eric Sunshine, Glen Choo, Hariom Verma,
  Jacob Keller, Jaydeep Das, Jeff King, Johannes Schindelin,
  John Cai, Jonathan Nieder, Jonathan Tan, Junio C Hamano, Kousik
  Sanagavarapu, Kristoffer Haugsbakk, Linus Arver, Martin Ågren,
  Matthew Hughes, M Hickford, Michael Haggerty, Mike Hommey,
  Nsengiyumva Wilberforce, Patrick Steinhardt, Philippe Blain,
  Phillip Wood, Randall S. Becker, René Scharfe, Rubén Justo,
  Sean Allred, Shuqi Liang, SZEDER Gábor, Taylor Blau, Teng Long,
  Todd Zullinger, Toon Claes, Torsten Bögershausen, Victoria Dye,
  and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.42 Release Notes (draft)
===============================

UI, Workflows & Features

 * "git pack-refs" learns "--include" and "--exclude" to tweak the ref
   hierarchy to be packed using pattern matching.

 * 'git worktree add' learned how to create a worktree based on an
   orphaned branch with `--orphan`.

 * "git pack-objects" learned to invoke a new hook program that
   enumerates extra objects to be used as anchoring points to keep
   otherwise unreachable objects in cruft packs.

 * Add more "git var" for toolsmiths to learn various locations Git is
   configured with either via the configuration or hardcoded defaults.

 * 'git notes append' was taught '--separator' to specify string to insert
   between paragraphs.

 * The "git for-each-ref" family of commands learned placeholders
   related to GPG signature verification.

 * "git diff --no-index" learned to read from named pipes as if they
   were regular files, to allow "git diff <(process) <(substitution)"
   some shells support.

 * Help newbies by suggesting that there are cases where force-pushing
   is a valid and sensible thing to update a branch at a remote
   repository, rather than reconciling with merge/rebase.

 * "git blame --contents=file" has been taught to work in a bare
   repository.

 * "git branch -f X" to repoint the branch X said that X was "checked
   out" in another worktree, even when branch X was not and instead
   being bisected or rebased.  The message was reworded to say the
   branch was "in use".


Performance, Internal Implementation, Development Support etc.

 * "git diff-tree" has been taught to take advantage of the
   sparse-index feature.

 * Clang's sanitizer implementation seems to work better than GCC's.
   (merge d88d727143 jk/ci-use-clang-for-sanitizer-jobs later to maint).

 * The object traversal using reachability bitmap done by
   "pack-object" has been tweaked to take advantage of the fact that
   using "boundary" commits as representative of all the uninteresting
   ones can save quite a lot of object enumeration.

 * discover_git_directory() no longer touches the_repository.

 * "git worktree" learned to work better with sparse index feature.

 * When the external merge driver is killed by a signal, its output
   should not be trusted as a resolution with conflicts that is
   proposed by the driver, but the code did.

 * The set-up code for the get_revision() API now allows feeding
   options like --all and --not in the --stdin mode.

 * Move functions that are not about pure string manipulation out of
   strbuf.[ch]

 * "imap-send" codepaths got cleaned up to get rid of unused
   parameters.

 * Enumerating refs in the packed-refs file, while excluding refs that
   match certain patterns, has been optimized.

 * Mark-up unused parameters in the code so that we can eventually
   enable -Wunused-parameter by default.

 * Instead of inventing a custom counter variables for debugging,
   use existing trace2 facility in the fsync customization codepath.

 * "git branch --list --format=<format>" and friends are taught
   a new "%(describe)" placeholder.

 * Clarify how to choose the starting point for a new topic in
   developer guidance document.

 * The implementation of "get_sha1_hex()" that reads a hexadecimal
   string that spells a full object name has been extended to cope
   with any hash function used in the repository, but the "sha1" in
   its name survived.  Rename it to get_hash_hex(), a name that is
   more consistent within its friends like get_hash_hex_algop().

 * Command line parser fix, and a small parse-options API update.


Fixes since v2.41
-----------------

 * "git tag" learned to leave the "$GIT_DIR/TAG_EDITMSG" file when the
   command failed, so that the user can salvage what they typed.
   (merge 08c12ec1d0 kh/keep-tag-editmsg-upon-failure later to maint).

 * The "-s" (silent, squelch) option of the "diff" family of commands
   did not interact with other options that specify the output format
   well.  This has been cleaned up so that it will clear all the
   formatting options given before.
   (merge 9d484b92ed jc/diff-s-with-other-options later to maint).

 * Update documentation regarding Coccinelle patches.
   (merge 3bd0097cfc gc/doc-cocci-updates later to maint).

 * Some atoms that can be used in "--format=<format>" for "git ls-tree"
   were not supported by "git ls-files", even though they were relevant
   in the context of the latter.
   (merge 4d28c4f75f zh/ls-files-format-atoms later to maint).

 * Document more pseudo-refs and teach the command line completion
   machinery to complete AUTO_MERGE.
   (merge 982ff3a649 pb/complete-and-document-auto-merge-and-friends later to maint).

 * "git submodule" code trusted the data coming from the config (and
   the in-tree .gitmodules file) too much without validating, leading
   to NULL dereference if the user mucks with a repository (e.g.
   submodule.<name>.url is removed).  This has been corrected.
   (merge fbc806acd1 tb/submodule-null-deref-fix later to maint).

 * The value of config.worktree is per-repository, but has been kept
   in a singleton global variable per process. This has been OK as
   most Git operations interacted with a single repository at a time,
   but not right for operations like recursive "grep" that want to
   access multiple repositories from a single process without forking.

   The global variable has been eliminated and made into a member in
   the per-repository data structure.
   (merge 3867f6d650 vd/worktree-config-is-per-repository later to maint).

 * "git [-c log.follow=true] log [--follow] ':(glob)f**'" used to barf.
   (merge 8260bc5902 jk/log-follow-with-non-literal-pathspec later to maint).

 * Introduce a mechanism to disable replace refs globally and per
   repository.
   (merge 9c7d1b057f ds/disable-replace-refs later to maint).

 * "git cat-file --batch" and friends learned "-Z" that uses NUL
   delimiter for both input and output.
   (merge f79e18849b ps/cat-file-null-output later to maint).

 * The reimplemented "git add -i" did not honor color.ui configuration.
   (merge 6f74648cea ds/add-i-color-configuration-fix later to maint).

 * Compilation fix for platforms without D_TYPE in struct dirent.
   (merge 03bf92b9bf as/dtype-compilation-fix later to maint).

 * Suggest to refrain from using hex literals that are non-portable
   when writing printf(1) format strings.
   (merge f0b68f0546 jt/doc-use-octal-with-printf later to maint).

 * Simplify error message when run-command fails to start a command.
   (merge 6d224ac286 rs/run-command-exec-error-on-noent later to maint).

 * Gracefully deal with a stale MIDX file that lists a packfile that
   no longer exists.
   (merge 06f3867865 tb/open-midx-bitmap-fallback later to maint).

 * Even when diff.ignoreSubmodules tells us to ignore submodule
   changes, "git commit" with an index that already records changes to
   submodules should include the submodule changes in the resulting
   commit, but it did not.
   (merge 5768478edc js/defeat-ignore-submodules-config-with-explicit-addition later to maint).

 * When "git commit --trailer=..." invokes the interpret-trailers
   machinery, it knows what it feeds to interpret-trailers is a full
   log message without any patch, but failed to express that by
   passing the "--no-divider" option, which has been corrected.
   (merge be3d654343 jk/commit-use-no-divider-with-interpret-trailers later to maint).

 * Avoid breakage of "git pack-objects --cruft" due to inconsistency
   between the way the code enumerates packfiles in the repository.
   (merge 73320e49ad tb/collect-pack-filenames-fix later to maint).

 * We create .pack and then .idx, we consider only packfiles that have
   .idx usable (those with only .pack are not ready yet), so we should
   remove .idx before removing .pack for consistency.
   (merge 0dd1324a73 ds/remove-idx-before-pack later to maint).

 * Partially revert a sanity check that the rest of the config code
   was not ready, to avoid triggering it in a corner case.
   (merge a53f43f900 gc/config-partial-submodule-kvi-fix later to maint).

 * "git apply" punts when it is fed too large a patch input; the error
   message it gives when it happens has been clarified.
   (merge 42612e18d2 pw/apply-too-large later to maint).

 * During a cherry-pick or revert session that works on multiple
   commits, "git status" did not give correct information, which has
   been corrected.
   (merge a096a889f4 jk/cherry-pick-revert-status later to maint).

 * A few places failed to differentiate the case where the index is
   truly empty (nothing added) and we haven't yet read from the
   on-disk index file, which have been corrected.
   (merge 2ee045eea1 js/empty-index-fixes later to maint).

 * "git bugreport" tests did not test what it wanted to test, which
   has been corrected.
   (merge 1aa92b8500 ma/t0091-fixup later to maint).

 * Code snippets in a tutorial document no longer compiled after
   recent header shuffling, which have been corrected.
   (merge bbd7c7b7c0 vd/adjust-mfow-doc-to-updated-headers later to maint).

 * "git ls-files '(attr:X)D/'" that triggers the common prefix
   optimization codepath failed to read from "D/.gitattributes",
   which has been corrected.
   (merge f4a8fde057 jc/pathspec-match-with-common-prefix later to maint).

 * "git fsck --no-progress" still spewed noise from the commit-graph
   subsystem, which has been corrected.
   (merge 9281cd07f0 tb/fsck-no-progress later to maint).

 * Various offset computation in the code that accesses the packfiles
   and other data in the object layer has been hardened against
   arithmetic overflow, especially on 32-bit systems.
   (merge 9a25cad7e0 tb/object-access-overflow-protection later to maint).

 * Names of MinGW header files are spelled in mixed case in some
   source files, but the build host can be using case sensitive
   filesystem with header files with their name spelled in all
   lowercase.
   (merge 4a53d0d0bc mh/mingw-case-sensitive-build later to maint).

 * Update message mark-up for i18n in "git bundle".
   (merge bbb6acd998 dk/bundle-i18n-more later to maint).

 * "git tag --list --points-at X" showed tags that directly refers to
   object X, but did not list a tag that points at such a tag, which
   has been corrected.

 * "./configure --with-expat=no" did not work as a way to refuse use
   of the expat library on a system with the library installed, which
   has been corrected.
   (merge fb8f7269c2 ah/autoconf-fixes later to maint).

 * When the user edits "rebase -i" todo file so that it starts with a
   "fixup", which would make it invalid, the command truncated the
   rest of the file before giving an error and returning the control
   back to the user.  Stop truncating to make it easier to correct
   such a malformed todo file.
   (merge 9645a087c2 ah/sequencer-rewrite-todo-fix later to maint).

 * Rewrite the description of giving a custom command to the
   submodule.<name>.update configuration variable.
   (merge 7cebc5bd78 pv/doc-submodule-update-settings later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 51f9d2e563 sa/doc-ls-remote later to maint).
   (merge c6d26a9dda jk/format-patch-message-id-unleak later to maint).
   (merge f7e063f326 ps/fetch-cleanups later to maint).
   (merge e4cf013468 tl/quote-problematic-arg-for-clarity later to maint).
   (merge 20025fdfc7 tz/test-ssh-verifytime-fix later to maint).
   (merge e48a21df65 tz/test-fix-pthreads-prereq later to maint).
   (merge 68b51172e3 mh/commit-reach-get-reachable-plug-leak later to maint).
   (merge aeee1408ce kh/use-default-notes-doc later to maint).
   (merge 3b8724bce6 jc/test-modernization later to maint).
   (merge 447a3b7331 jc/test-modernization-2 later to maint).
   (merge d57fa7fc73 la/doc-interpret-trailers later to maint).
   (merge 548afb0d9a la/docs-typofixes later to maint).
   (merge 3744ffcbcd rs/doc-ls-tree-hex-literal later to maint).
   (merge 6c26da8404 mh/credential-erase-improvements later to maint).
   (merge 78e56cff69 tz/lib-gpg-prereq-fix later to maint).
   (merge 80d32e84b5 rj/leakfixes later to maint).
   (merge 0a868031ed pb/complete-diff-options later to maint).
   (merge d4f28279ad jc/doc-hash-object-types later to maint).
   (merge 1876a5ae15 ks/t4205-test-describe-with-abbrev-fix later to maint).
   (merge 6e6a529b57 jk/fsck-indices-in-worktrees later to maint).
   (merge 3e81b896f7 rs/packet-length-simplify later to maint).
   (merge 4c9cb51fe7 mh/doc-credential-helpers later to maint).
   (merge 3437f549dd jr/gitignore-doc-example-markup later to maint).
   (merge 947ebd62a0 jc/am-parseopt-fix later to maint).
   (merge e12cb98e1e jc/branch-parseopt-fix later to maint).
   (merge d6f598e443 jc/gitignore-doc-pattern-markup later to maint).
   (merge a2dad4868b jc/transport-parseopt-fix later to maint).
   (merge 68cbb20e73 jc/parse-options-show-branch later to maint).
   (merge 3821eb6c3d jc/parse-options-reset later to maint).
   (merge c48af99a3e bb/trace2-comment-fix later to maint).
   (merge c95ae3ff9c rs/describe-parseopt-fix later to maint).
   (merge 36f76d2a25 rs/pack-objects-parseopt-fix later to maint).
   (merge 30c8c55cbf jc/tree-walk-drop-base-offset later to maint).

----------------------------------------------------------------

Changes since v2.41.0 are as follows:

Alejandro R. Sedeño (1):
      statinfo.h: move DTYPE defines from dir.h

Alex Henrie (4):
      wt-status: don't show divergence advice when committing
      remote: don't imply that integration is always required before pushing
      push: don't imply that integration is always required before pushing
      sequencer: finish parsing the todo list despite an invalid first line

Andreas Herrmann (3):
      configure.ac: don't overwrite NO_EXPAT option
      configure.ac: don't overwrite NO_CURL option
      configure.ac: always save NO_ICONV to config.status

Beat Bolli (2):
      trace2: fix a comment
      wrapper: use trace2 counters to collect fsync stats

Calvin Wan (13):
      strbuf: clarify API boundary
      strbuf: clarify dependency
      abspath: move related functions to abspath
      credential-store: move related functions to credential-store file
      object-name: move related functions to object-name
      path: move related function to path
      strbuf: remove global variable
      git-compat-util: move strbuf.c funcs to its header
      git-compat-util: move wrapper.c funcs to its header
      sane-ctype.h: create header for sane-ctype macros
      kwset: move translation table from ctype
      treewide: remove unnecessary includes for wrapper.h
      git-compat-util: move alloc macros to git-compat-util.h

D. Ben Knoble (2):
      i18n: mark more bundle.c strings for translation
      t4002: fix "diff can read from stdin" syntax

Derrick Stolee (7):
      add: check color.ui for interactive add
      add: test use of brackets when color is disabled
      repository: create disable_replace_refs()
      replace-objects: create wrapper around setting
      repository: create read_replace_refs setting
      packfile: delete .idx files before .pack files
      builtin/repack.c: only repack `.pack`s that exist

Elijah Newren (28):
      init-db: document existing bug with core.bare in template config
      init-db: remove unnecessary global variable
      init-db, clone: change unnecessary global into passed parameter
      setup: adopt shared init-db & clone code
      read-cache: move shared commit and ls-files code
      add: modify add_files_to_cache() to avoid globals
      read-cache: move shared add/checkout/commit code
      statinfo: move stat_{data,validity} functions from cache/read-cache
      run-command.h: move declarations for run-command.c from cache.h
      name-hash.h: move declarations for name-hash.c from cache.h
      sparse-index.h: move declarations for sparse-index.c from cache.h
      preload-index.h: move declarations for preload-index.c from elsewhere
      diff.h: move declaration for global in diff.c from cache.h
      merge.h: move declarations for merge.c from cache.h
      repository.h: move declaration of the_index from cache.h
      read-cache*.h: move declarations for read-cache.c functions from cache.h
      cache.h: remove this no-longer-used header
      log-tree: replace include of revision.h with simple forward declaration
      repository: remove unnecessary include of path.h
      diff.h: remove unnecessary include of oidset.h
      list-objects-filter-options.h: remove unneccessary include
      builtin.h: remove unneccessary includes
      git-compat-util.h: remove unneccessary include of wildmatch.h
      merge-ll: rename from ll-merge
      khash: name the structs that khash declares
      object-store-ll.h: split this header out of object-store.h
      hash-ll, hashmap: move oidhash() to hash-ll
      fsmonitor-ll.h: split this header out of fsmonitor.h

Eric Sunshine (1):
      fsck: avoid misleading variable name

Glen Choo (15):
      cocci: add headings to and reword README
      cocci: codify authoring and reviewing practices
      setup.c: don't setup in discover_git_directory()
      config: don't BUG when both kvi and source are set
      config: inline git_color_default_config
      urlmatch.h: use config_fn_t type
      config: add ctx arg to config_fn_t
      config.c: pass ctx in configsets
      config: pass ctx with config files
      config.c: pass ctx with CLI config
      trace2: plumb config kvi
      config: pass kvi to die_bad_number()
      config.c: remove config_reader from configsets
      config: add kvi.path, use it to evaluate includes
      config: pass source to config_parser_event_fn_t

Han Young (1):
      blame: allow --contents to work with bare repo

Jacob Abel (11):
      worktree add: include -B in usage docs
      t2400: cleanup created worktree in test
      t2400: refactor "worktree add" opt exclusion tests
      t2400: add tests to verify --quiet
      worktree add: add --orphan flag
      worktree add: introduce "try --orphan" hint
      worktree add: extend DWIM to infer --orphan
      worktree add: emit warn when there is a bad HEAD
      t2400: drop no-op `--sq` from rev-parse call
      builtin/worktree.c: convert tab in advice to space
      t2400: rewrite regex to avoid unintentional PCRE

Jacob Keller (1):
      fix cherry-pick/revert status when doing multiple commits

Jan Klötzke (1):
      ref-filter: handle nested tags in --points-at option

Jeff King (36):
      format-patch: free rev.message_id when exiting
      format-patch: free elements of rev.ref_message_ids list
      pathspec: factor out magic-to-name function
      diff: factor out --follow pathspec check
      diff: detect pathspec magic not supported by --follow
      ci: use clang for ASan/UBSan checks
      ci: run ASan/UBSan in a single job
      ci: drop linux-clang job
      commit: pass --no-divider to interpret-trailers
      http: handle both "h2" and "h2h3" in curl info lines
      var: mark unused parameters in git_var callbacks
      imap-send: use server conf argument in setup_curl()
      imap-send: drop unused parameter from imap_cmd_cb callback
      imap-send: drop unused fields from imap_cmd_cb
      refs.c: rename `ref_filter`
      ref-filter.h: provide `REF_FILTER_INIT`
      ref-filter: clear reachable list pointers after freeing
      ref-filter: add `ref_filter_clear()`
      ref-filter.c: parameterize match functions over patterns
      test-ref-store: drop unimplemented reflog-expire command
      do_for_each_ref_helper(): mark unused repository parameter
      http: mark unused parameters in curl callbacks
      http-push: mark unused parameter in xml callback
      am: mark unused keep_cr parameters
      count-objects: mark unused parameter in alternates callback
      revisions: drop unused "opt" parameter in "tweak" callbacks
      fsck: mark unused parameters in various fsck callbacks
      merge-tree: mark unused parameter in traverse callback
      replace: mark unused parameter in ref callback
      replace: mark unused parameter in each_mergetag_fn callback
      rev-parse: mark unused parameter in for_each_abbrev callback
      tag: mark unused parameters in each_tag_name_fn callbacks
      t/helper: mark unused callback void data parameters
      ref-filter: avoid parsing tagged objects in match_points_at()
      ref-filter: avoid parsing non-tags in match_points_at()
      ref-filter: simplify return type of match_points_at

Johan Ruokangas (1):
      gitignore.txt: use backticks instead of double quotes

Johannes Schindelin (3):
      do_read_index(): always mark index as initialized unless erroring out
      split-index: accept that a base index can be empty
      commit -a -m: allow the top-level tree to become empty again

John Cai (34):
      docs: clarify git-pack-refs --all will pack all refs
      pack-refs: teach --exclude option to exclude refs from being packed
      pack-refs: teach pack-refs --include option
      t0000-basic: modernize test format
      t0030-stripspace: modernize test format
      t3210-pack-refs: modernize test format
      t1001-read-tree-m-2way: modernize test format
      t1002-read-tree-m-u-2way: modernize test format
      t1006-cat-file: modernize test format
      t3500-cherry: modernize test format
      t3700-add: modernize test format
      t3903-stash: modernize test format
      t4002-diff-basic: modernize test format
      t4003-diff-rename-1: modernize test format
      t4004-diff-rename-symlink: modernize test format
      t4202-log: modernize test format
      t4206-log-follow-harder-copies: modernize test format
      t5300-pack-object: modernize test format
      t5301-sliding-window: modernize test format
      t5303-pack-corruption-resilience: modernize test format
      t5306-pack-nobase: modernize test format
      t6050-replace: modernize test format
      t7101-reset-empty-subdirs: modernize test format
      t7110-reset-merge: modernize test format
      t7111-reset-table: modernize test format
      t7201-co: modernize test format
      t7508-status: modernize test format
      t7600-merge: modernize test format
      t7700-repack: modernize test format
      t9100-git-svn-basic: modernize test format
      t9104-git-svn-follow-parent: modernize test format
      t9200-git-cvsexportcommit: modernize test format
      t9400-git-cvsserver-server: modernize test format
      docs: add git hash-object -t option's possible values

Jonathan Tan (1):
      CodingGuidelines: use octal escapes, not hex

Josip Sokcevic (1):
      diff-lib: honor override_submodule_config flag bit

Junio C Hamano (44):
      diff: fix interaction between the "-s" option and other options
      show-branch doc: say <ref>, not <reference>
      Start the 2.42 cycle
      The second batch for 2.42
      The third batch
      ll-merge: killing the external merge driver aborts the merge
      The fourth batch
      t6406: skip "external merge driver getting killed by a signal" test on Windows
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      t6135: attr magic with path pattern
      tree-walk: lose base_offset that is never used in tree_entry_interesting
      tree-walk: drop unused base_offset from do_match()
      The ninth batch
      dir: match "attr" pathspec magic with correct paths
      The tenth batch
      The eleventh batch
      The twelfth batch
      gitignore.txt: mark up explanation of patterns consistently
      am: simplify parsing of "--[no-]keep-cr"
      branch: reject "--no-all" and "--no-remotes" early
      parse-options: introduce OPT_IPVERSION()
      fetch: reject --no-ipv[46]
      show-branch: --no-sparse should give dense output
      short help: allow multi-line opthelp
      remote: simplify "remote add --tags" help text
      short help: allow a gap smaller than USAGE_GAP
      show-branch: reject --[no-](topo|date)-order
      reset: reject --no-(mixed|soft|hard|merge|keep) option
      The thirteenth batch
      branch: update the message to refuse touching a branch in-use
      hex: retire get_sha1_hex()
      The fourteenth batch
      SubmittingPatches: choice of base for fixing an older maintenance track
      The fifteenth batch
      SubmittingPatches: explain why 'next' and above are inappropriate base
      SubmittingPatches: use of older maintenance tracks is an exception
      The sixteenth batch
      MyFirstContribution: refrain from self-iterating too much
      The seventeenth batch
      The eighteenth batch
      Git 2.42-rc0

Kousik Sanagavarapu (5):
      t/lib-gpg: introduce new prereq GPG2
      ref-filter: add new "signature" atom
      t4205: correctly test %(describe:abbrev=...)
      ref-filter: add multiple-option parsing functions
      ref-filter: add new "describe" atom

Kristoffer Haugsbakk (5):
      doc: tag: document `TAG_EDITMSG`
      t/t7004-tag: add regression test for successful tag creation
      tag: keep the message file in case ref transaction fails
      notes: update documentation for `use_default_notes`
      notes: move the documentation to the struct

Linus Arver (15):
      docs: typofixes
      doc: trailer: fix grammar
      doc: trailer: swap verb order
      doc: trailer: drop "commit message part" phrasing
      doc: trailer: examples: avoid the word "message" by itself
      doc: trailer: remove redundant phrasing
      doc: trailer: use angle brackets for <token> and <value>
      doc: trailer.<token>.command: emphasize deprecation
      doc: trailer: mention 'key' in DESCRIPTION
      doc: trailer: add more examples in DESCRIPTION
      SubmittingPatches: reword awkward phrasing
      SubmittingPatches: discuss subsystems separately from git.git
      SubmittingPatches: de-emphasize branches as starting points
      SubmittingPatches: emphasize need to communicate non-default starting points
      SubmittingPatches: simplify guidance for choosing a starting point

M Hickford (3):
      credential: avoid erasing distinct password
      credential: erase all matching credentials
      doc: gitcredentials: link to helper list

Martin Ågren (1):
      t0091-bugreport.sh: actually verify some content of report

Mike Hommey (2):
      commit-reach: fix memory leak in get_reachable_subset()
      mingw: use lowercase includes for some Windows headers

Patrick Steinhardt (17):
      fetch: drop unused DISPLAY_FORMAT_UNKNOWN enum value
      fetch: drop unneeded NULL-check for `remote_ref`
      fetch: pass through `fetch_config` directly
      fetch: use `fetch_config` to store "fetch.prune" value
      fetch: use `fetch_config` to store "fetch.pruneTags" value
      fetch: use `fetch_config` to store "fetch.showForcedUpdates" value
      fetch: use `fetch_config` to store "fetch.recurseSubmodules" value
      fetch: use `fetch_config` to store "fetch.parallel" value
      fetch: use `fetch_config` to store "submodule.fetchJobs" value
      t1006: don't strip timestamps from expected results
      t1006: modernize test style to use `test_cmp`
      strbuf: provide CRLF-aware helper to read until a specified delimiter
      cat-file: simplify reading from standard input
      cat-file: add option '-Z' that delimits input and output with NUL
      revision: reorder `read_revisions_from_stdin()`
      revision: small readability improvement for reading from stdin
      revision: handle pseudo-opts in `--stdin` mode

Petar Vutov (1):
      doc: highlight that .gitmodules does not support !command

Philippe Blain (30):
      revisions.txt: use description list for special refs
      revisions.txt: document more special refs
      completion: complete REVERT_HEAD and BISECT_HEAD
      git-merge.txt: modernize word choice in "True merge" section
      Documentation: document AUTO_MERGE
      completion: complete AUTO_MERGE
      completion: add comments describing __git_diff_* globals
      completion: complete --break-rewrites
      completion: complete --cc
      completion: complete --combined-all-paths
      completion: complete --compact-summary
      completion: complete --default-prefix
      completion: complete --find-copies
      completion: complete --find-object
      completion: complete --find-renames
      completion: complete --function-context
      completion: complete --ignore-matching-lines
      completion: complete --irreversible-delete
      completion: complete --ita-invisible-in-index and --ita-visible-in-index
      completion: complete --line-prefix
      completion: complete --no-relative
      completion: complete --no-stat
      completion: complete --output
      completion: complete --output-indicator-{context,new,old}
      completion: complete --unified
      completion: complete --ws-error-highlight
      completion: move --pickaxe-{all,regex} to __git_diff_common_options
      completion: complete --diff-merges, its options and --no-diff-merges
      completion: complete --remerge-diff
      diff.c: mention completion above add_diff_options

Phillip Wood (5):
      apply: improve error messages when reading patch
      diff --no-index: refuse to compare stdin to a directory
      diff --no-index: die on error reading stdin
      t4054: test diff --no-index with stdin
      diff --no-index: support reading from named pipes

René Scharfe (18):
      t1800: loosen matching of error message for bad shebang
      run-command: report exec error even on ENOENT
      ls-tree: fix documentation of %x format placeholder
      pretty: factor out expand_separator()
      strbuf: factor out strbuf_expand_step()
      replace strbuf_expand_dict_cb() with strbuf_expand_step()
      replace strbuf_expand() with strbuf_expand_step()
      strbuf: simplify strbuf_expand_literal_cb()
      ls-tree: simplify prefix handling
      pretty: avoid double negative in format_commit_item()
      pkt-line: add size parameter to packet_length()
      pretty: use strchr(3) in userformat_find_requirements()
      t6300: fix setup with GPGSSH but without GPG
      strbuf: use skip_prefix() in strbuf_addftime()
      ls-tree: fix --no-full-name
      describe: fix --no-exact-match
      pack-objects: fix --no-keep-true-parents
      pack-objects: fix --no-quiet

Rubén Justo (11):
      config: fix a leak in git_config_copy_or_rename_section_in_file
      remote: fix a leak in query_matches_negative_refspec
      branch: fix a leak in dwim_and_setup_tracking
      branch: fix a leak in inherit_tracking
      branch: fix a leak in check_tracking_branch
      branch: fix a leak in setup_tracking
      rev-parse: fix a leak with --abbrev-ref
      branch: fix a leak in setup_tracking
      branch: fix a leak in cmd_branch
      config: fix a leak in git_config_copy_or_rename_section_in_file
      tests: mark as passing with SANITIZE=leak

Sean Allred (5):
      show-ref doc: update for internal consistency
      ls-remote doc: remove redundant --tags example
      ls-remote doc: show peeled tags in examples
      ls-remote doc: explain what each example does
      ls-remote doc: document the output format

Shuqi Liang (2):
      diff-tree: integrate with sparse index
      worktree: integrate with sparse-index

Taylor Blau (48):
      object: add object_array initializer helper function
      pack-bitmap.c: extract `fill_in_bitmap()`
      pack-bitmap.c: use commit boundary during bitmap traversal
      builtin/submodule--helper.c: handle missing submodule URLs
      builtin/repack.c: only collect fully-formed packs
      reachable.c: extract `obj_is_recent()`
      gc: introduce `gc.recentObjectsHook`
      pack-bitmap.c: gracefully degrade on failure to load MIDX'd pack
      t7701: make annotated tag unreachable
      fsck: suppress commit-graph output with `--no-progress`
      fsck: suppress MIDX output with `--no-progress`
      commit-graph.c: extract `verify_one_commit_graph()`
      commit-graph.c: iteratively verify commit-graph chains
      commit-graph.c: pass progress to `verify_one_commit_graph()`
      commit-graph.c: avoid duplicated progress output during `verify`
      builtin/for-each-ref.c: add `--exclude` option
      refs: plumb `exclude_patterns` argument throughout
      refs/packed-backend.c: refactor `find_reference_location()`
      refs/packed-backend.c: implement jump lists to avoid excluded pattern(s)
      refs/packed-backend.c: add trace2 counters for jump list
      revision.h: store hidden refs in a `strvec`
      refs.h: let `for_each_namespaced_ref()` take excluded patterns
      refs.h: implement `hidden_refs_to_excludes()`
      builtin/receive-pack.c: avoid enumerating hidden references
      upload-pack.c: avoid enumerating hidden refs where possible
      ls-refs.c: avoid enumerating hidden refs where possible
      builtin/repack.c: avoid dir traversal in `collect_pack_filenames()`
      packfile.c: prevent overflow in `nth_packed_object_id()`
      packfile.c: prevent overflow in `load_idx()`
      packfile.c: use checked arithmetic in `nth_packed_object_offset()`
      midx.c: use `size_t`'s for fanout nr and alloc
      midx.c: prevent overflow in `nth_midxed_object_oid()`
      midx.c: prevent overflow in `nth_midxed_offset()`
      midx.c: store `nr`, `alloc` variables as `size_t`'s
      midx.c: prevent overflow in `write_midx_internal()`
      midx.c: prevent overflow in `fill_included_packs_batch()`
      pack-bitmap.c: ensure that eindex lookups don't overflow
      commit-graph.c: prevent overflow in `write_commit_graph_file()`
      commit-graph.c: prevent overflow in add_graph_to_chain()
      commit-graph.c: prevent overflow in `load_oid_from_graph()`
      commit-graph.c: prevent overflow in `fill_commit_graph_info()`
      commit-graph.c: prevent overflow in `fill_commit_in_graph()`
      commit-graph.c: prevent overflow in `load_tree_for_commit()`
      commit-graph.c: prevent overflow in `split_graph_merge_strategy()`
      commit-graph.c: prevent overflow in `merge_commit_graph()`
      commit-graph.c: prevent overflow in `write_commit_graph()`
      commit-graph.c: prevent overflow in `verify_commit_graph()`
      Documentation/RelNotes/2.42.0.txt: typofix

Teng Long (8):
      surround %s with quotes when failed to lookup commit
      notes.c: cleanup 'strbuf_grow' call in 'append_edit'
      notes.c: use designated initializers for clarity
      t3321: add test cases about the notes stripspace behavior
      notes.c: introduce '--separator=<paragraph-break>' option
      notes.c: append separator instead of insert by pos
      notes.c: introduce "--[no-]stripspace" option
      notes: introduce "--no-separator" option

Todd Zullinger (3):
      trace2 tests: fix PTHREADS prereq
      t/lib-gpg: fix ssh-keygen -Y check-novalidate with openssh-9.0
      t/lib-gpg: require GPGSSH for GPGSSH_VERIFYTIME prereq

Victoria Dye (3):
      config: use gitdir to get worktree config
      config: pass 'repo' directly to 'config_with_options()'
      repository: move 'repository_format_worktree_config' to repo scope

Vinayak Dev (1):
      docs: add necessary headers to Documentation/MFOW.txt

ZheNing Hu (1):
      ls-files: align format atoms with ls-tree

brian m. carlson (7):
      t: add a function to check executable bit
      var: add support for listing the shell
      var: format variable structure with C99 initializers
      var: adjust memory allocation for strings
      attr: expose and rename accessor functions
      var: add attributes files locations
      var: add config file locations


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.41.0
@ 2023-06-01 10:11  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2023-06-01 10:11 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

The latest feature release Git v2.41.0 is now available at the
usual places.  It is comprised of 542 non-merge commits since
v2.40.0, contributed by 95 people, 29 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.41.0'
tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.40.0 are as follows.
Welcome to the Git development community!

  Adam Johnson, André Baptista, Andy Koppe, Arkadii Yakovets,
  Benjamin Jorand, Clement Mabileau, Corentin Garcia, Cristian Le,
  Daniel Watson, D. Ben Knoble, Douglas Anderson, Edwin Kofler,
  Jonas Haag, Jouke Witteveen, Kate Golovanova, Matthias Görgens,
  Maxim Cournoyer, Michael Henry, Michael Strawbridge, Nico Rieck,
  Peter Dave Hello, Raghul Nanth A, Rolf Eike Beer, Shuqi Liang,
  Siddharth Singh, Stanislav Malishevskiy, Stephane Odul, Vítor
  Pinho, and Xin Xing.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alexander Shopov, Alex Henrie,
  Andreas Schwab, Andrei Rybak, Bagas Sanjaya, Beat Bolli, brian
  m. carlson, Christian Hesse, Daniel Santos, Derrick Stolee,
  Elijah Newren, Emily Shaffer, Emir SARI, Eric Sunshine, Eric
  Wong, Fangyi Zhou, Felipe Contreras, Glen Choo, Han Xin, Jacob
  Keller, Jean-Noël Avila, Jeff King, Jiang Xin, Joakim Petersen,
  Johannes Schindelin, Johannes Sixt, John Cai, John Keeping,
  Jordi Mas, Josh Soref, Junio C Hamano, Kristoffer Haugsbakk,
  Linus Arver, Linus Torvalds, Martin Ågren, Mathias Krause,
  Matthew John Cheetham, Matthias Rüster, M Hickford, Michael
  J Gruber, Mike Hommey, Oswald Buddenhagen, Øystein Walle,
  Patrick Steinhardt, Paul Eggert, Peter Krefting, Philippe Blain,
  Phillip Wood, Ralf Thielow, Randall S. Becker, René Scharfe,
  Robin Jarry, Rubén Justo, RyotaK, Sohom Datta, SZEDER Gábor,
  Tao Klerks, Taylor Blau, Teng Long, Todd Zullinger, Torsten
  Bögershausen, William Sprent, Yi-Jyun Pan, ZheNing Hu,
  and 依云.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.41 Release Notes
=======================

UI, Workflows & Features

 * Allow information carried on the WWW-Authenticate header to be
   passed to the credential helpers.

 * A new "fetch.hideRefs" option can be used to exclude specified refs
   from "rev-list --objects --stdin --not --all" traversal for
   checking object connectivity, most useful when there are many
   unrelated histories in a single repository.

 * "git push" has been taught to allow deletion of refs with one-level
   names to help repairing a repository who acquired such a ref by
   mistake.  In general, we don't encourage use of such a ref, and
   creation or update to such a ref is rejected as before.

 * Allow "git bisect reset" to check out the original branch when the
   branch is already checked out in a different worktree linked to the
   same repository.

 * A few subcommands have been taught to stop users from working on a
   branch that is being used in another worktree linked to the same
   repository.

 * "git format-patch" learned to write a log-message only output file
   for empty commits.

 * "git format-patch" honors the src/dst prefixes set to nonstandard
   values with configuration variables like "diff.noprefix", causing
   receiving end of the patch that expects the standard -p1 format to
   break.  "format-patch" has been taught to ignore end-user configuration
   and always use the standard prefixes.

   This is a backward compatibility breaking change.

 * Lift the limitation that colored prompts can only be used with
   PROMPT_COMMAND mode.

 * "git blame --contents=<file> <rev> -- <path>" used to be forbidden,
   but now it finds the origins of lines starting at <file> contents
   through the history that leads to <rev>.

 * "git pack-redundant" gave a warning when run, as the command has
   outlived its usefulness long ago and is nominated for future
   removal.  Now we escalate to give an error.

 * "git clone" from an empty repository learned to propagate the
   choice of the hash algorithm from the source repository to the
   newly created repository over any one of the v0/v1/v2 protocol.

 * "git mergetool" and "git difftool" learns a new configuration
   guiDefault to optionally favor configured guitool over non-gui-tool
   automatically when $DISPLAY is set.

 * "git branch -d origin/master" would say "no such branch", but it is
   likely a missed "-r" if refs/remotes/origin/master exists.  The
   command has been taught to give such a hint in its error message.

 * Clean-up of the code path that deals with merge strategy option
   handling in "git rebase".

 * "git clone --local" stops copying from an original repository that
   has symbolic links inside its $GIT_DIR; an error message when that
   happens has been updated.

 * The "--format=..." option of "git for-each-ref", "git branch", and
   "git tag" commands learn "--omit-empty" to hide refs whose
   formatting results in an empty string from the output.

 * The sendemail-validate validate hook learned to pass the total
   number of input files and where in the sequence each invocation is
   via environment variables.

 * When "gc" needs to retain unreachable objects, packing them into
   cruft packs (instead of exploding them into loose object files) has
   been offered as a more efficient option for some time.  Now the use
   of cruft packs has been made the default and no longer considered
   an experimental feature.

 * The output given by "git blame" that attributes a line to contents
   taken from the file specified by the "--contents" option shows it
   differently from a line attributed to the working tree file.

 * "git send-email" learned to give the e-mail headers to the validate
   hook by passing an extra argument from the command line.

 * The credential subsystem learns to help OAuth framework.

 * The titles of manual pages used to be chomped at an unreasonably
   short limit, which has been removed.

 * Error messages given when working on an unborn branch that is
   checked out in another worktree have been improved.

 * The documentation was misleading about the interaction between
   GIT_DEFAULT_HASH and "git clone", which has been clarified to
   stress that the variable is to be ignored by the command.

 * "git send-email" learned "--header-cmd=<cmd>" that can inject
   arbitrary e-mail header lines to the outgoing messages.

 * "git fsck" learned to detect bit-flip breakages in the reachability
   bitmap files.

 * The "--stdin" option of "git name-rev" has been replaced with
   the "--annotate-stdin" option more than a year ago.  We stop
   advertising it in the "git name-rev -h" output.

 * "git push --all" gained an alias "git push --branches".

 * "git fetch" learned the "--porcelain" option that emits what it did
   in a machine-parseable format.

 * "git --attr-source=<tree> cmd $args" is a new way to have any
   command to read attributes not from the working tree but from the
   given tree object.


Performance, Internal Implementation, Development Support etc.

 * Code clean-up to clarify directory traversal API.

 * Code clean-up to clarify the rule that "git-compat-util.h" must be
   the first to be included.

 * More work towards -Wunused.

 * Instead of forcing each command to choose to honor GPG related
   configuration variables, make the subsystem lazily initialize
   itself.

 * Remove workaround for ancient versions of DocBook to make it work
   correctly with groff, which has not been necessary since docbook
   1.76 from 2010.

 * Code clean-up to include and/or uninclude parse-options.h file as
   needed.

 * The code path that reports what "git fetch" did to each ref has
   been cleaned up.

 * Assorted config API updates.

 * A few configuration variables to tell the cURL library that
   different types of ssl-cert and ssl-key are in use have been added.

 * Split key function and data structure definitions out of cache.h to
   new header files and adjust the users.

 * "git fetch --all" does not have to download and handle the same
   bundleURI over and over, which has been corrected.

 * "git sparse-checkout" command learns a debugging aid for the sparse
   rule definitions.

 * "git write-tree" learns to work better with sparse-index.

 * The on-disk reverse index that allows mapping from the pack offset
   to the object name for the object stored at the offset has been
   enabled by default.

 * "git fsck" learned to validate the on-disk pack reverse index files.

 * strtok() and strtok_r() are banned in this codebase.

 * The detect-compilers script to help auto-tweaking the build system
   had trouble working with compilers whose version number has extra
   suffixes.  The script has been taught that certain suffixes (like
   "-win32" in "gcc 10-win32") can be safely stripped as they share
   the same features and bugs with the version without the suffix.

 * ctype tests have been taught to test EOF, too.

 * The implementation of credential helpers used fgets() over fixed
   size buffers to read protocol messages, causing the remainder of
   the folded long line to trigger unexpected behaviour, which has
   been corrected.

 * The implementation of the default "negotiator", used to find common
   ancestor over the network for object tranfer, used to be recursive;
   it was updated to be iterative to conserve stackspace usage.

 * Our custom callout formatter is no longer used in the documentation
   formatting toolchain, as the upstream default ones give better
   output these days.

 * The tracing mechanism learned to notice and report when
   auto-discovered bare repositories are being used, as allowing so
   without explicitly stating the user intends to do so (with setting
   GIT_DIR for example) can be used with social engineering as an
   attack vector.

 * "git diff-files" learned not to expand sparse-index unless needed.


Fixes since v2.40
-----------------

 * "git fsck" learned to check the index files in other worktrees,
   just like "git gc" honors them as anchoring points.
   (merge 8d3e7eac52 jk/fsck-indices-in-worktrees later to maint).

 * Fix a segfaulting loop.  The function and its caller may need
   further clean-up.
   (merge c5773dc078 ew/commit-reach-clean-up-flags-fix later to maint).

 * "git restore" supports options like "--ours" that are only
   meaningful during a conflicted merge, but these options are only
   meaningful when updating the working tree files.  These options are
   marked to be incompatible when both "--staged" and "--worktree" are
   in effect.
   (merge ee8a88826a ak/restore-both-incompatible-with-conflicts later to maint).

 * Simplify UI to control progress meter given by "git bundle" command.
   (merge 8b95521edb jk/bundle-progress later to maint).

 * "git bundle" learned that "-" is a common way to say that the input
   comes from the standard input and/or the output goes to the
   standard output.  It used to work only for output and only from the
   root level of the working tree.
   (merge 0bbe10313e jk/bundle-use-dash-for-stdfiles later to maint).

 * Once we start running, we assumed that the list of alternate object
   databases would never change.  Hook into the machinery used to
   update the list of packfiles during runtime to update this list as
   well.
   (merge e2d003dbed ds/reprepare-alternates-when-repreparing-packfiles later to maint).

 * The code to parse "git rebase -X<opt>" was not prepared to see an
   unparsable option string, which has been corrected.
   (merge 15a4cc912e ab/fix-strategy-opts-parsing later to maint).

 * "git add -p" while the index is unmerged sometimes failed to parse
   the diff output it internally produces and died, which has been
   corrected.
   (merge 28d1122f9c jk/add-p-unmerged-fix later to maint).

 * Fix for a "ls-files --format="%(path)" that produced nonsense
   output, which was a bug in 2.38.
   (merge cfb62dd006 aj/ls-files-format-fix later to maint).

 * "git receive-pack" that responds to "git push" requests failed to
   clean a stale lockfile when killed in the middle, which has been
   corrected.
   (merge c55c30669c ps/receive-pack-unlock-before-die later to maint).

 * "git rev-parse --quiet foo@{u}", or anything that asks @{u} to be
   parsed with GET_OID_QUIETLY option, did not quietly fail, which has
   been corrected.
   (merge dfbfdc521d fc/oid-quietly-parse-upstream later to maint).

 * Transports that do not support protocol v2 did not correctly fall
   back to protocol v0 under certain conditions, which has been
   corrected.
   (merge eaa0fd6584 jk/fix-proto-downgrade-to-v0 later to maint).

 * time(2) on glib 2.31+, especially on Linux, goes out of sync with
   higher resolution timers used for gettimeofday(2) and by the
   filesystem.  Replace all calls to it with a git_time() wrapper and
   (merge 370ddcbc89 pe/time-use-gettimeofday later to maint).

 * Code clean-up to use designated initializers in parse-options API.
   (merge 353e6d4554 sg/parse-options-h-initializers later to maint).

 * A recent-ish change to allow unicode character classes to be used
   with "grep -P" triggered a JIT bug in older pcre2 libraries.
   The problematic change in Git built with these older libraries has
   been disabled to work around the bug.
   (merge 14b9a04479 mk/workaround-pcre-jit-ucp-bug later to maint).

 * The wildmatch library code unlearns exponential behaviour it
   acquired some time ago since it was borrowed from rsync.
   (merge 3dc0b7f0dc pw/wildmatch-fixes later to maint).

 * The index files can become corrupt under certain conditions when
   the split-index feature is in use, especially together with
   fsmonitor, which have been corrected.
   (merge 061dd722dc js/split-index-fixes later to maint).

 * Document what the pathname-looking strings in "rev-list --object"
   output are for and what they mean.
   (merge 15364d2a3c jk/document-rev-list-object-name later to maint).

 * Fix unnecessary truncation of generation numbers used in-core.
   (merge d3af1c193d ps/ahead-behind-truncation-fix later to maint).

 * Code clean-up around the use of the_repository.
   (merge 4a93b899c1 ab/remove-implicit-use-of-the-repository later to maint).

 * Consistently spell "Message-ID" as such, not "Message-Id".
   (merge ba4324c4e1 jc/spell-id-in-both-caps-in-message-id later to maint).

 * Correct use of an uninitialized structure member.
   (merge dc12ee77ab jx/cap-object-info-uninitialized-fix later to maint).

 * Tests had a few places where we ignored PERL_PATH and blindly used
   /usr/bin/perl, which have been corrected.
   (merge c1917156a0 jk/use-perl-path-consistently later to maint).

 * Documentation mark-up fix.
   (merge 78b6369e67 la/mfc-markup-fix later to maint).

 * Doc toolchain update to remove old workaround for AsciiDoc.
   (merge 8806120de6 fc/remove-header-workarounds-for-asciidoc later to maint).

 * The userdiff regexp patterns for various filetypes that are built
   into the system have been updated to avoid triggering regexp errors
   from UTF-8 aware regex engines.
   (merge be39144954 rs/userdiff-multibyte-regex later to maint).

 * The approxidate() API has been simplified by losing an extra
   function that did the same thing as another one.
   (merge 8a7f0b666f rs/remove-approxidate-relative later to maint).

 * Code clean-up to replace a hardcoded constant with a CPP macro.
   (merge c870de6502 rs/get-tar-commit-id-use-defined-const later to maint).

 * Doc build simplification.
   (merge 9a09ed3229 fc/doc-stop-using-manversion later to maint).

 * "git archive" run from a subdirectory mishandled attributes and
   paths outside the current directory.
   (merge 92b1dd1b9e rs/archive-from-subdirectory-fixes later to maint).

 * The code to parse capability list for v0 on-wire protocol fell into
   an infinite loop when a capability appears multiple times, which
   has been corrected.

 * Geometric repacking ("git repack --geometric=<n>") in a repository
   that borrows from an alternate object database had various corner
   case bugs, which have been corrected.
   (merge d85cd18777 ps/fix-geom-repack-with-alternates later to maint).

 * The "%GT" placeholder for the "--format" option of "git log" and
   friends caused BUG() to trigger on a commit signed with an unknown
   key, which has been corrected.
   (merge 7891e46585 jk/gpg-trust-level-fix later to maint).

 * The completion script used to use bare "read" without the "-r"
   option to read the contents of various state files, which risked
   getting confused with backslashes in them.  This has been
   corrected.
   (merge 197152098a ek/completion-use-read-r-to-read-literally later to maint).

 * A small API fix to the ort merge strategy backend.
   (merge 000c4ceca7 en/ort-finalize-after-0-merges-fix later to maint).

 * The commit object parser has been taught to be a bit more lenient
   to parse timestamps on the author/committer line with a malformed
   author/committer ident.
   (merge 90ef0f14eb jk/parse-commit-with-malformed-ident later to maint).

 * Retitle a test script with an overly narrow name.
   (merge 8bb19c14fb ob/t3501-retitle later to maint).

 * Doc update to clarify how text and eol attributes interact to
   specify the end-of-line conversion.
   (merge 6696077ace ah/doc-attributes-text later to maint).

 * Gitk updates from GfW project.
   (merge 99e70f3077 js/gitk-fixes-from-gfw later to maint).

 * "git diff --dirstat" leaked memory, which has been plugged.
   (merge 83973981eb jc/dirstat-plug-leaks later to maint).

 * "git merge-tree" reads the basic configuration, which can be used
    by git forges to disable replace-refs feature.
   (merge b6551feadf ds/merge-tree-use-config later to maint).

 * A few bugs in the sequencer machinery that results in miscounting
   the steps have been corrected.
   (merge 170eea9750 js/rebase-count-fixes later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge f7111175df as/doc-markup-fix later to maint).
   (merge 90ff7c9898 fc/test-aggregation-clean-up later to maint).
   (merge 9b0c7f308a jc/am-doc-refer-to-format-patch later to maint).
   (merge b10cbdac4c bb/unicode-width-table-15 later to maint).
   (merge 3457b50e8c ab/retire-scripted-add-p later to maint).
   (merge d52fcf493b ds/p2000-fix-grep-sparse later to maint).
   (merge ec063d2591 ss/hashmap-typofix later to maint).
   (merge 1aaed69d11 rs/archive-mtime later to maint).
   (merge 2da2cc9b28 ob/rollback-after-commit-lock-failure later to maint).
   (merge 54dbd0933b ob/sequencer-save-head-simplify later to maint).
   (merge a93cbe8d78 ar/test-cleanup-unused-file-creation later to maint).
   (merge cc48ddd937 jk/chainlint-fixes later to maint).
   (merge 4833b08426 ow/ref-format-remove-unused-member later to maint).
   (merge d0ea2ca1cf dw/doc-submittingpatches-grammofix later to maint).
   (merge fd72637423 ar/t2024-checkout-output-fix later to maint).
   (merge d45cbe3fe0 ob/sequencer-i18n-fix later to maint).
   (merge b734fe49fd ob/messages-capitalize-exception later to maint).
   (merge ad353d7e77 ma/gittutorial-fixes later to maint).
   (merge a5855fd8d4 ar/test-cleanup-unused-file-creation-part2 later to maint).
   (merge 0c5308af30 sd/doc-gitignore-and-rm-cached later to maint).
   (merge cbb83daeaf kh/doc-interpret-trailers-updates later to maint).
   (merge 3d77fbb664 ar/config-count-tests-updates later to maint).
   (merge b7cf25c8f4 jc/t9800-fix-use-of-show-s-raw later to maint).

----------------------------------------------------------------

Changes since v2.40.0 are as follows:

Adam Johnson (1):
      ls-files: fix "--format" output of relative paths

Alex Henrie (5):
      rebase: add documentation and test for --no-rebase-merges
      rebase: deprecate --rebase-merges=""
      rebase: add a config option for --rebase-merges
      format-patch: correct documentation of --thread without an argument
      docs: rewrite the documentation of the text and eol attributes

Alexander Shopov (1):
      l10n: bg.po: Updated Bulgarian translation (5515t)

Andreas Schwab (1):
      git-merge-tree.txt: replace spurious HTML entity

Andrei Rybak (19):
      t1005: assert output of ls-files
      t1006: assert error output of cat-file
      t1010: don't create unused files
      t1302: don't create unused file
      t1400: assert output of update-ref
      t1404: don't create unused file
      t1507: assert output of rev-parse
      t3060: fix mention of function prune_index
      t2107: fix mention of the_index.cache_changed
      t2024: fix loose/strict local base branch DWIM test
      t1300: drop duplicate test
      t1300: check stderr for "ignores pairs" tests
      t1300: add tests for missing keys
      t0300: don't create unused file
      t1300: fix config file syntax error descriptions
      t1300: don't create unused files
      t1450: don't create unused files
      t1502: don't create unused files
      t2019: don't create unused files

Andy Koppe (1):
      restore: fault --staged --worktree with merge opts

Arkadii Yakovets (3):
      l10n: uk: add initial translation
      l10n: uk: remove stale lines
      l10n: update uk localization

Bagas Sanjaya (1):
      l10n: po-id for 2.41 (round 1)

Beat Bolli (1):
      unicode: update the width tables to Unicode 15

Benjamin Jorand (1):
      l10n: fr: fix translation of stash save help

Christian Hesse (1):
      imap-send: include strbuf.h

Clement Mabileau (1):
      branch: improve error log on branch not found by checking remotes refs

Corentin Garcia (1):
      doc/git-config: add unit for http.lowSpeedLimit

Daniel Santos (1):
      l10n: TEAMS: Update pt_PT repo link

Daniel Watson (1):
      SubmittingPatches: clarify MUA discussion with "the"

Derrick Stolee (19):
      object-file: reprepare alternates when necessary
      for-each-ref: add --stdin option
      for-each-ref: explicitly test no matches
      commit-graph: refactor compute_topological_levels()
      commit-graph: simplify compute_generation_numbers()
      commit-graph: return generation from memory
      commit-reach: implement ahead_behind() logic
      for-each-ref: add ahead-behind format atom
      commit-reach: add tips_reachable_from_bases()
      p2000: remove stray '--sparse' flag from test
      fetch: download bundles once, even with --all
      ci: update 'static-analysis' to Ubuntu 22.04
      fsck: create scaffolding for rev-index checks
      fsck: check rev-index checksums
      fsck: check rev-index position values
      fsck: validate .rev file header
      fsck: verify checksums of all .bitmap files
      fsck: use local repository
      merge-tree: load default git config

Edwin Kofler (1):
      completion: suppress unwanted unescaping of `read`

Elijah Newren (94):
      treewide: ensure one of the appropriate headers is sourced first
      treewide: remove unnecessary git-compat-util.h includes in headers
      treewide: remove unnecessary cache.h includes
      treewide: remove unnecessary cache.h includes in source files
      alloc.h: move ALLOC_GROW() functions from cache.h
      hash.h: move some oid-related declarations from cache.h
      hex.h: move some hex-related declarations from cache.h
      cache.h: remove dependence on hex.h; make other files include it explicitly
      pretty.h: move has_non_ascii() declaration from commit.h
      ident.h: move ident-related declarations out of cache.h
      object.h: stop depending on cache.h; make cache.h depend on object.h
      dir.h: refactor to no longer need to include cache.h
      object-store.h: move struct object_info from cache.h
      replace-object.h: move read_replace_refs declaration from cache.h to here
      treewide: replace cache.h with more direct headers, where possible
      Remove unnecessary includes of builtin.h
      diff.h: remove unnecessary include of object.h
      t2021: fix platform-specific leftover cruft
      unpack-trees: heed requests to overwrite ignored files
      dir: separate public from internal portion of dir_struct
      dir: add a usage note to exclude_per_dir
      dir: mark output only fields of dir_struct as such
      unpack-trees: clean up some flow control
      sparse-checkout: avoid using internal API of unpack-trees
      sparse-checkout: avoid using internal API of unpack-trees, take 2
      unpack_trees: start splitting internal fields from public API
      unpack-trees: mark fields only used internally as internal
      unpack-trees: rewrap a few overlong lines from previous patch
      unpack-trees: special case read-tree debugging as internal usage
      unpack-trees: add usage notices around df_conflict_entry
      treewide: remove unnecessary cache.h inclusion from a few headers
      treewide: be explicit about dependence on gettext.h
      treewide: remove unnecessary inclusion of gettext.h
      treewide: remove unnecessary cache.h inclusion from several sources
      environment: move comment_line_char from cache.h
      abspath.h: move absolute path functions from cache.h
      cache.h: remove expand_user_path()
      path.h: move function declarations for path.c functions from cache.h
      wrapper.h: move declarations for wrapper.c functions from cache.h
      treewide: remove unnecessary includes of cache.h
      environment.h: move declarations for environment.c functions from cache.h
      treewide: remove cache.h inclusion due to environment.h changes
      setup.h: move declarations for setup.c functions from cache.h
      treewide: remove cache.h inclusion due to setup.h changes
      write-or-die.h: move declarations for write-or-die.c functions from cache.h
      csum-file.h: remove unnecessary inclusion of cache.h
      treewide: be explicit about dependence on trace.h & trace2.h
      treewide: be explicit about dependence on advice.h
      treewide: be explicit about dependence on convert.h
      treewide: be explicit about dependence on pack-revindex.h
      treewide: be explicit about dependence on oid-array.h
      treewide: be explicit about dependence on mem-pool.h
      treewide: remove unnecessary cache.h inclusion
      object-name.h: move declarations for object-name.c functions from cache.h
      treewide: remove cache.h inclusion due to object-name.h changes
      git-zlib: move declarations for git-zlib functions from cache.h
      treewide: remove cache.h inclusion due to git-zlib changes
      object-file.h: move declarations for object-file.c functions from cache.h
      treewide: remove cache.h inclusion due to object-file.h changes
      object.h: move some inline functions and defines from cache.h
      treewide: remove cache.h inclusion due to object.h changes
      editor: move editor-related functions and declarations into common file
      treewide: remove cache.h inclusion due to editor.h changes
      pager.h: move declarations for pager.c functions from cache.h
      treewide: remove cache.h inclusion due to pager.h changes
      cache.h: remove unnecessary includes
      treewide: remove double forward declaration of read_in_full
      treewide: reduce includes of cache.h in other headers
      mailmap, quote: move declarations of global vars to correct unit
      protocol.h: move definition of DEFAULT_GIT_PORT from cache.h
      treewide: be explicit about dependence on strbuf.h
      symlinks.h: move declarations for symlinks.c functions from cache.h
      packfile.h: move pack_window and pack_entry from cache.h
      server-info.h: move declarations for server-info.c functions from cache.h
      copy.h: move declarations for copy.c functions from cache.h
      base85.h: move declarations for base85.c functions from cache.h
      pkt-line.h: move declarations for pkt-line.c functions from cache.h
      match-trees.h: move declarations for match-trees.c functions from cache.h
      ws.h: move declarations for ws.c functions from cache.h
      versioncmp.h: move declarations for versioncmp.c functions from cache.h
      dir.h: move DTYPE defines from cache.h
      tree-diff.c: move S_DIFFTREE_IFXMIN_NEQ define from cache.h
      hash-ll.h: split out of hash.h to remove dependency on repository.h
      cache,tree: move cmp_cache_name_compare from tree.[ch] to read-cache.c
      cache,tree: move basic name compare functions from read-cache to tree
      treewide: remove cache.h inclusion due to previous changes
      cache.h: remove unnecessary headers
      fsmonitor: reduce includes of cache.h
      commit.h: reduce unnecessary includes
      object-store.h: reduce unnecessary includes
      diff.h: reduce unnecessary includes
      reftable: ensure git-compat-util.h is the first (indirect) include
      merge-ort: fix calling merge_finalize() with no intermediate merge
      t5583: fix shebang line

Emily Shaffer (1):
      mailmap: change primary address for Emily Shaffer

Emir SARI (1):
      l10n: tr: Update Turkish translations for 2.41.0

Eric Sunshine (1):
      tests: diagnose unclosed here-doc in chainlint.pl

Eric Wong (3):
      commit-reach: avoid NULL dereference
      fetch: support hideRefs to speed up connectivity checks
      fetch: pass --no-write-fetch-head to subprocesses

Fangyi Zhou (1):
      rebase: fix capitalisation autoSquash in i18n string

Felipe Contreras (16):
      advice: add diverging advice for novices
      test: simplify counts aggregation
      test: don't print aggregate-results command
      object-name: fix quiet @{u} parsing
      completion: prompt: use generic colors
      doc: remove GNU troff workaround
      doc: remove manpage-base-url workaround
      doc: asciidoc: remove custom header macro
      doc: simplify man version
      doc: set actual revdate for manpages
      doc: git-checkout: trivial callout cleanup
      doc: git-checkout: reorganize examples
      doc: remove custom callouts format
      doc: manpage: remove maximum title length
      doc: doc-diff: specify date
      test: rev-parse-upstream: add missing cmp

Glen Choo (10):
      config.c: plumb config_source through static fns
      config.c: don't assign to "cf_global" directly
      config.c: create config_reader and the_reader
      config.c: plumb the_reader through callbacks
      config.c: remove current_config_kvi
      config.c: remove current_parsing_scope
      config: report cached filenames in die_bad_number()
      config.c: rename "struct config_source cf"
      clone: error specifically with --local and symlinked objects
      setup: trace bare repository setups

Han Xin (2):
      negotiator/default: avoid stack overflow
      negotiator/skipping: fix some problems in mark_common()

Jacob Keller (2):
      blame: allow --contents to work with non-HEAD commit
      blame: use different author name for fake commit generated by --contents

Jean-Noël Avila (2):
      l10n: fr.po v2.41.0 rnd1
      l10n: fr.po v2.41.0 rnd2

Jeff King (90):
      ref-filter: drop unused atom parameter from get_worktree_path()
      ls-refs: drop config caching
      serve: use repository pointer to get config
      serve: mark unused parameters in virtual functions
      object-name: mark unused parameters in disambiguate callbacks
      http-backend: mark argc/argv unused
      http-backend: mark unused parameters in virtual functions
      ref-filter: mark unused callback parameters
      mark "pointless" data pointers in callbacks
      run-command: mark error routine parameters as unused
      mark unused parameters in signal handlers
      list-objects: mark unused callback parameters
      for_each_object: mark unused callback parameters
      prio-queue: mark unused parameters in comparison functions
      notes: mark unused callback parameters
      fetch-pack: mark unused parameter in callback function
      rewrite_parents(): mark unused callback parameter
      for_each_commit_graft(): mark unused callback parameter
      userformat_want_item(): mark unused parameter
      run_processes_parallel: mark unused callback parameters
      help: mark unused parameter in git_unknown_cmd_config()
      fsck: factor out index fsck
      fsck: check index files in all worktrees
      fsck: mention file path for index errors
      fsck: check even zero-entry index files
      drop pure pass-through config callbacks
      bundle: turn on --all-progress-implied by default
      bundle: let "-" mean stdin for reading operations
      bundle: document handling of "-" as stdin
      parse-options: consistently allocate memory in fix_filename()
      parse-options: use prefix_filename_except_for_dash() helper
      diff: factor out src/dst prefix setup
      t4013: add tests for diff prefix options
      diff: add --default-prefix option
      format-patch: do not respect diff.noprefix
      format-patch: add format.noprefix option
      add-patch: handle "* Unmerged path" lines
      http-push: prefer CURLOPT_UPLOAD to CURLOPT_PUT
      http: prefer CURLOPT_SEEKFUNCTION to CURLOPT_IOCTLFUNCTION
      range-diff: drop useless "offset" variable from read_patches()
      http: support CURLOPT_PROTOCOLS_STR
      range-diff: handle unterminated lines in read_patches()
      range-diff: use ssize_t for parsed "len" in read_patches()
      rebase: prefer --default-prefix to --{src,dst}-prefix for format-patch
      mailmap: drop debugging code
      http: drop unused parameter from start_object_request()
      http: mark unused parameter in fill_active_slot() callbacks
      transport: mark unused parameters in fetch_refs_from_bundle()
      git_connect(): fix corner cases in downgrading v2 to v0
      fast-export: drop const when storing anonymized values
      fast-export: simplify initialization of anonymized hashmaps
      fast-export: factor out anonymized_entry creation
      fast-export: de-obfuscate --anonymize-map handling
      fast-export: drop data parameter from anonymous generators
      fast-export: drop unused parameter from anonymize_commit_message()
      Makefile: force -O0 when compiling with SANITIZE=leak
      pack-redundant: escalate deprecation warning to an error
      docs: document caveats of rev-list's object-name output
      fast-import: fix file access when run from subdir
      builtins: always pass prefix to parse_options()
      builtins: annotate always-empty prefix parameters
      builtins: mark unused prefix parameters
      mark "argv" as unused when we check argc
      t/helper: mark unused argv/argc arguments
      parse-options: drop parse_opt_unknown_cb()
      pack-redundant: document deprecation
      tests: run internal chain-linter under "make test"
      tests: replace chainlint subshell with a function
      tests: drop here-doc check from internal chain-linter
      tests: skip test_eval_ in internal chain-lint
      t/lib-httpd: pass PERL_PATH to CGI scripts
      v0 protocol: fix infinite loop when parsing multi-valued capabilities
      t5512: stop referring to "v1" protocol
      v0 protocol: fix sha1/sha256 confusion for capabilities^{}
      t5512: add v2 support for "ls-remote --symref" test
      t5512: allow any protocol version for filtered symref test
      t5512: test "ls-remote --heads --symref" filtering with v0 and v2
      v0 protocol: use size_t for capability length/offset
      gpg-interface: set trust level of missing key to "undefined"
      notes: clean up confusing NULL checks in init_notes()
      fetch_bundle_uri(): drop pointless NULL check
      t4212: avoid putting git on left-hand side of pipe
      parse_commit(): parse timestamp from end of line
      parse_commit(): handle broken whitespace-only timestamp
      parse_commit(): describe more date-parsing failure modes
      doc-diff: drop SOURCE_DATE_EPOCH override
      t7001: avoid git on upstream of pipe
      t7001: use "ls-files --format" instead of "cut"
      t: drop "verbose" helper function
      t/lib-httpd: make CGIPassAuth support conditional

Jiang Xin (5):
      github-actions: run gcc-8 on ubuntu-20.04 image
      ci: remove the pipe after "p4 -V" to catch errors
      ci: use the same version of p4 on both Linux and macOS
      ci: install python on ubuntu
      object-info: init request_info before reading arg

Johannes Schindelin (31):
      compat/win32/syslog: fix use-after-realloc
      nedmalloc: avoid new compile error
      t0033: GETTEXT_POISON fix
      t0003: GETTEXT_POISON fix, part 1
      t0003: GETTEXT_POISON fix, conclusion
      t5619: GETTEXT_POISON fix
      t5604: GETTEXT_POISON fix, part 1
      t5604: GETTEXT_POISON fix, conclusion
      clone.c: avoid "exceeds maximum object size" error with GCC v12.x
      split-index & fsmonitor: demonstrate a bug
      split-index; stop abusing the `base_oid` to strip the "link" extension
      fsmonitor: avoid overriding `cache_changed` bits
      unpack-trees: take care to propagate the split-index flag
      t3701: we don't need no Perl for `add -i` anymore
      t5563: prevent "ambiguous redirect"
      apply --reject: overwrite existing `.rej` symlink if it exists
      gettext: avoid using gettext if the locale dir is not present
      tests: avoid using `test_i18ncmp`
      Git 2.31.8
      Git 2.32.7
      Git 2.33.8
      Git 2.34.8
      Git 2.35.8
      Git 2.36.6
      Git 2.37.7
      Git 2.38.5
      Git 2.39.3
      Git 2.40.1
      gitk: prevent overly long command lines
      rebase --update-refs: fix loops
      rebase -r: fix the total number shown in the progress

John Cai (2):
      name-rev: make --stdin hidden
      attr: teach "--attr-source=<tree>" global option to "git"

John Keeping (1):
      format-patch: output header for empty commits

Jordi Mas (2):
      l10n: Update Catalan translation
      l10n: Update Catalan translation

Josh Soref (1):
      subtree: support long global flags

Jouke Witteveen (1):
      send-email docs: Remove mention of discontinued gmail feature

Junio C Hamano (39):
      gpg-interface: lazily initialize and read the configuration
      bundle: don't blindly apply prefix_filename() to "-"
      Start the 2.41 cycle
      The second batch
      am: refer to format-patch in the documentation
      The third batch
      http.c: clear the 'finished' member once we are done with it
      The fourth batch
      The fifth batch
      The sixth batch
      e-mail workflow: Message-ID is spelled with ID in both capital letters
      The seventh batch
      clone: propagate object-format when cloning from void
      The eighth batch
      The ninth batch
      The tenth batch
      The eleventh batch
      The twelfth batch
      The thirteenth batch
      doc: GIT_DEFAULT_HASH is and will be ignored during "clone"
      The fourteenth batch
      The fifteenth batch
      The sixteenth batch
      diff: refactor common tail part of dirstat computation
      diff: plug leaks in dirstat
      t9800: correct misuse of 'show -s --raw' in a test
      The seventeenth batch
      The eighteenth batch
      Git 2.41-rc0
      tests: do not negate test_path_exists
      t2021: do not negate test_path_is_dir
      test: do not negate test_path_is_* to assert absense
      A bit more before -rc1
      send-email: clear the $message_id after validation
      t9001: mark the script as no longer leak checker clean
      Git 2.41-rc1
      A few more topics after 2.41-rc1
      Git 2.41-rc2
      Git 2.41

Kristoffer Haugsbakk (5):
      config: tell the user that we expect an ASCII character
      doc: interpret-trailers: don’t use heredoc in examples
      doc: interpret-trailers: use input redirection
      doc: interpret-trailers: don’t use deprecated config
      doc: interpret-trailers: fix example

Linus Arver (1):
      MyFirstContribution: render literal *

M Hickford (3):
      credential/wincred: include wincred.h
      credential/wincred: store password_expiry_utc
      credential: new attribute oauth_refresh_token

Martin Ågren (2):
      gittutorial: drop early mention of origin
      gittutorial: wrap literal examples in backticks

Mathias Krause (1):
      grep: work around UTF-8 related JIT bug in PCRE2 <= 10.34

Matthew John Cheetham (3):
      t5563: add tests for basic and anoymous HTTP access
      http: read HTTP WWW-Authenticate response headers
      credential: add WWW-Authenticate header to cred requests

Maxim Cournoyer (3):
      send-email: extract execute_cmd from recipients_cmd
      send-email: add --header-cmd, --no-header-cmd options
      send-email: detect empty blank lines in command output

Michael J Gruber (1):
      t3070: make chain lint tester happy

Michael Strawbridge (2):
      send-email: refactor header generation functions
      send-email: expose header information to git-send-email's sendemail-validate hook

Mike Hommey (1):
      Handle some compiler versions containing a dash

Nico Rieck (1):
      gitk: escape file paths before piping to git log

Oswald Buddenhagen (5):
      sequencer: remove pointless rollback_lock_file()
      sequencer: rewrite save_head() in terms of write_message()
      sequencer: actually translate report in do_exec()
      messages: capitalization and punctuation exceptions
      t/t3501-revert-cherry-pick.sh: clarify scope of the file

Patrick Steinhardt (27):
      receive-pack: fix stale packfile locks when dying
      fetch: move reference width calculation into `display_state`
      fetch: move output format into `display_state`
      fetch: pass the full local reference name to `format_display`
      fetch: centralize handling of per-reference format
      fetch: centralize logic to print remote URL
      fetch: centralize printing of reference updates
      commit-graph: fix truncated generation numbers
      midx: fix segfault with no packs and invalid preferred pack
      repack: fix trying to use preferred pack in alternates
      repack: fix generating multi-pack-index with only non-local packs
      pack-objects: split out `--stdin-packs` tests into separate file
      pack-objects: fix error when packing same pack twice
      pack-objects: fix error when same packfile is included and excluded
      pack-objects: extend test coverage of `--stdin-packs` with alternates
      t/helper: allow chmtime to print verbosely without modifying mtime
      repack: honor `-l` when calculating pack geometry
      repack: disable writing bitmaps when doing a local repack
      fetch: fix `--no-recurse-submodules` with multi-remote fetches
      fetch: split out tests for output format
      fetch: add a test to exercise invalid output formats
      fetch: print left-hand side when fetching HEAD:foo
      fetch: refactor calculation of the display table width
      fetch: introduce `display_format` enum
      fetch: lift up parsing of "fetch.output" config variable
      fetch: move option related variables into main function
      fetch: introduce machine-parseable "porcelain" output format

Paul Eggert (1):
      git-compat-util: use gettimeofday(2) for time(2)

Peter Krefting (1):
      l10n: sv.po: Update Swedish translation (5515t0f0u)

Phillip Wood (8):
      wildmatch: fix exponential behavior
      wildmatch: avoid undefined behavior
      wildmatch: hide internal return values
      rebase: stop reading and writing unnecessary strategy state
      sequencer: use struct strvec to store merge strategy options
      rebase -m: cleanup --strategy-option handling
      rebase -m: fix serialization of strategy options
      rebase: remove a couple of redundant strategy tests

Raghul Nanth A (1):
      describe: enable sparse index for describe

Ralf Thielow (1):
      l10n: Update German translation

René Scharfe (6):
      archive: improve support for running in subdirectory
      t5000: use check_mtime()
      userdiff: support regexec(3) with multi-byte support
      date: remove approxidate_relative()
      get-tar-commit-id: use TYPEFLAG_GLOBAL_HEADER instead of magic value
      test-ctype: check EOF

Robin Jarry (1):
      send-email: export patch counters in validate environment

Rubén Justo (10):
      bisect: fix "reset" when branch is checked out elsewhere
      worktree: introduce is_shared_symref()
      branch: fix die_if_checked_out() when ignore_current_worktree
      rebase: refuse to switch to a branch already checked out elsewhere (test)
      switch: reject if the branch is already checked out elsewhere (test)
      branch: test for failures while renaming branches
      branch: use get_worktrees() in copy_or_rename_branch()
      branch: description for orphan branch errors
      branch: rename orphan branches in any worktree
      branch: avoid unnecessary worktrees traversals

SZEDER Gábor (6):
      treewide: include parse-options.h in source files
      treewide: remove unnecessary inclusions of parse-options.h from headers
      parse-options.h: use consistent name for the callback parameters
      parse-options.h: rename _OPT_CONTAINS_OR_WITH()'s parameters
      parse-options.h: use designated initializers in OPT_* macros
      cocci: remove 'unused.cocci'

Shuqi Liang (4):
      write-tree: integrate with sparse index
      t1092: update a write-tree test
      t1092: add tests for `git diff-files`
      diff-files: integrate with sparse index

Siddharth Singh (1):
      hashmap.h: fix minor typo

Sohom Datta (1):
      docs: clarify git rm --cached function in gitignore note

Stanislav Malishevskiy (1):
      http: add support for different sslcert and sslkey types.

Tao Klerks (1):
      mergetool: new config guiDefault supports auto-toggling gui by DISPLAY

Taylor Blau (37):
      commit-graph: introduce `ensure_generations_valid()`
      pack-write.c: plug a leak in stage_tmp_packfiles()
      t5325: mark as leak-free
      pack-revindex: make `load_pack_revindex` take a repository
      pack-revindex: introduce GIT_TEST_REV_INDEX_DIE_ON_DISK
      pack-revindex: introduce `pack.readReverseIndex`
      config: enable `pack.writeReverseIndex` by default
      t: invert `GIT_TEST_WRITE_REV_INDEX`
      t1300: demonstrate failure when renaming sections with long lines
      config: avoid fixed-sized buffer when renaming/deleting a section
      config.c: avoid integer truncation in `copy_or_rename_section_in_file()`
      config.c: disallow overly-long lines in `copy_or_rename_section_in_file()`
      Git 2.30.9
      pack-write.c: plug a leak in stage_tmp_packfiles()
      builtin/repack.c: fix incorrect reference to '-C'
      builtin/gc.c: ignore cruft packs with `--keep-largest-pack`
      t/t5304-prune.sh: prepare for `gc --cruft` by default
      t/t6501-freshen-objects.sh: prepare for `gc --cruft` by default
      t/t6500-gc.sh: refactor cruft pack tests
      t/t6500-gc.sh: add additional test cases
      t/t9300-fast-import.sh: prepare for `gc --cruft` by default
      builtin/gc.c: make `gc.cruftPacks` enabled by default
      repository.h: drop unused `gc_cruft_packs`
      string-list: multi-delimiter `string_list_split_in_place()`
      string-list: introduce `string_list_setlen()`
      t/helper/test-hashmap.c: avoid using `strtok()`
      t/helper/test-oidmap.c: avoid using `strtok()`
      t/helper/test-json-writer.c: avoid using `strtok()`
      banned.h: mark `strtok()` and `strtok_r()` as banned
      credential.c: store "wwwauth[]" values in `credential_read()`
      t/lib-credential.sh: ensure credential helpers handle long headers
      contrib/credential: avoid fixed-size buffer in osxkeychain
      contrib/credential: remove 'gnome-keyring' credential helper
      contrib/credential: .gitignore libsecret build artifacts
      contrib/credential: avoid fixed-size buffer in libsecret
      contrib/credential: embiggen fixed-size buffer in wincred
      run-command.c: fix missing include under `NO_PTHREADS`

Teng Long (2):
      push: introduce '--branches' option
      l10n: zh_CN: Git 2.41.0 round #1

William Sprent (2):
      builtin/sparse-checkout: remove NEED_WORK_TREE flag
      builtin/sparse-checkout: add check-rules command

Yi-Jyun Pan (1):
      l10n: zh_TW.po: Git 2.41.0

ZheNing Hu (2):
      receive-pack: fix funny ref error messsage
      push: allow delete single-level ref

brian m. carlson (1):
      upload-pack: advertise capabilities when cloning empty repos

Ævar Arnfjörð Bjarmason (33):
      auto-crlf tests: don't lose exit code in loops and outside tests
      t/lib-patch-mode.sh: fix ignored exit codes
      tests: don't lose exit status with "(cd ...; test <op> $(git ...))"
      tests: don't lose "git" exit codes in "! ( git ... | grep )"
      tests: don't lose exit status with "test <op> $(git ...)"
      tests: don't lose misc "git" exit codes
      sequencer.c: fix overflow & segfault in parse_strategy_opts()
      cocci: remove dead rule from "the_repository.pending.cocci"
      cocci: fix incorrect & verbose "the_repository" rules
      cocci: sort "the_repository" rules by header
      cocci: add missing "the_repository" macros to "pending"
      cocci: apply the "cache.h" part of "the_repository.pending"
      cocci: apply the "commit-reach.h" part of "the_repository.pending"
      cocci: apply the "commit.h" part of "the_repository.pending"
      cocci: apply the "diff.h" part of "the_repository.pending"
      cocci: apply the "object-store.h" part of "the_repository.pending"
      cocci: apply the "pretty.h" part of "the_repository.pending"
      cocci: apply the "packfile.h" part of "the_repository.pending"
      cocci: apply the "promisor-remote.h" part of "the_repository.pending"
      cocci: apply the "refs.h" part of "the_repository.pending"
      cocci: apply the "rerere.h" part of "the_repository.pending"
      cocci: apply the "revision.h" part of "the_repository.pending"
      post-cocci: adjust comments for recent repo_* migration
      libs: use "struct repository *" argument, not "the_repository"
      config tests: cover blind spots in git_die_config() tests
      config tests: add "NULL" tests for *_get_value_multi()
      config API: add and use a "git_config_get()" family of functions
      versioncmp.c: refactor config reading next commit
      config API: have *_multi() return an "int" and take a "dest"
      for-each-repo: error on bad --config
      config API users: test for *_get_value_multi() segfaults
      config API: add "string" version of *_value_multi(), fix segfaults
      for-each-repo: with bad config, don't conflate <path> and <cmd>

Øystein Walle (2):
      ref-filter: remove unused ref_format member
      branch, for-each-ref, tag: add option to omit empty lines


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.41.0-rc2
@ 2023-05-24 21:41  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2023-05-24 21:41 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.41.0-rc2 is now available for testing at
the usual places.  It is comprised of 525 non-merge commits since
v2.40.0, contributed by 80 people, 25 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.41.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.40.0 are as follows.
Welcome to the Git development community!

  Adam Johnson, André Baptista, Andy Koppe, Clement Mabileau,
  Corentin Garcia, Cristian Le, Daniel Watson, D. Ben Knoble,
  Douglas Anderson, Edwin Kofler, Jonas Haag, Jouke Witteveen,
  Matthias Görgens, Maxim Cournoyer, Michael Henry, Michael
  Strawbridge, Nico Rieck, Raghul Nanth A, Rolf Eike Beer, Shuqi
  Liang, Siddharth Singh, Stanislav Malishevskiy, Stephane Odul,
  Vítor Pinho, and Xin Xing.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alex Henrie, Andreas Schwab,
  Andrei Rybak, Beat Bolli, brian m. carlson, Christian Hesse,
  Derrick Stolee, Elijah Newren, Emily Shaffer, Eric Sunshine,
  Eric Wong, Fangyi Zhou, Felipe Contreras, Glen Choo, Han Xin,
  Jacob Keller, Jeff King, Jiang Xin, Joakim Petersen, Johannes
  Schindelin, Johannes Sixt, John Cai, John Keeping, Josh Soref,
  Junio C Hamano, Kristoffer Haugsbakk, Linus Arver, Linus
  Torvalds, Martin Ågren, Mathias Krause, Matthew John Cheetham,
  M Hickford, Michael J Gruber, Mike Hommey, Oswald Buddenhagen,
  Øystein Walle, Patrick Steinhardt, Paul Eggert, Philippe Blain,
  Phillip Wood, Randall S. Becker, René Scharfe, Robin Jarry,
  Rubén Justo, RyotaK, Sohom Datta, SZEDER Gábor, Tao Klerks,
  Taylor Blau, Teng Long, Todd Zullinger, Torsten Bögershausen,
  William Sprent, and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.41 Release Notes (draft)
===============================

UI, Workflows & Features

 * Allow information carried on the WWW-Authenticate header to be
   passed to the credential helpers.

 * A new "fetch.hideRefs" option can be used to exclude specified refs
   from "rev-list --objects --stdin --not --all" traversal for
   checking object connectivity, most useful when there are many
   unrelated histories in a single repository.

 * "git push" has been taught to allow deletion of refs with one-level
   names to help repairing a repository who acquired such a ref by
   mistake.  In general, we don't encourage use of such a ref, and
   creation or update to such a ref is rejected as before.

 * Allow "git bisect reset" to check out the original branch when the
   branch is already checked out in a different worktree linked to the
   same repository.

 * A few subcommands have been taught to stop users from working on a
   branch that is being used in another worktree linked to the same
   repository.

 * "git format-patch" learned to write a log-message only output file
   for empty commits.

 * "git format-patch" honors the src/dst prefixes set to nonstandard
   values with configuration variables like "diff.noprefix", causing
   receiving end of the patch that expects the standard -p1 format to
   break.  "format-patch" has been taught to ignore end-user configuration
   and always use the standard prefixes.

   This is a backward compatibility breaking change.

 * Lift the limitation that colored prompts can only be used with
   PROMPT_COMMAND mode.

 * "git blame --contents=<file> <rev> -- <path>" used to be forbidden,
   but now it finds the origins of lines starting at <file> contents
   through the history that leads to <rev>.

 * "git pack-redundant" gave a warning when run, as the command has
   outlived its usefulness long ago and is nominated for future
   removal.  Now we escalate to give an error.

 * "git clone" from an empty repository learned to propagate the
   choice of the hash algorithm from the source repository to the
   newly created repository over any one of the v0/v1/v2 protocol.

 * "git mergetool" and "git difftool" learns a new configuration
   guiDefault to optionally favor configured guitool over non-gui-tool
   automatically when $DISPLAY is set.

 * "git branch -d origin/master" would say "no such branch", but it is
   likely a missed "-r" if refs/remotes/origin/master exists.  The
   command has been taught to give such a hint in its error message.

 * Clean-up of the code path that deals with merge strategy option
   handling in "git rebase".

 * "git clone --local" stops copying from an original repository that
   has symbolic links inside its $GIT_DIR; an error message when that
   happens has been updated.

 * The "--format=..." option of "git for-each-ref", "git branch", and
   "git tag" commands learn "--omit-empty" to hide refs whose
   formatting results in an empty string from the output.

 * The sendemail-validate validate hook learned to pass the total
   number of input files and where in the sequence each invocation is
   via environment variables.

 * When "gc" needs to retain unreachable objects, packing them into
   cruft packs (instead of exploding them into loose object files) has
   been offered as a more efficient option for some time.  Now the use
   of cruft packs has been made the default and no longer considered
   an experimental feature.

 * The output given by "git blame" that attributes a line to contents
   taken from the file specified by the "--contents" option shows it
   differently from a line attributed to the working tree file.

 * "git send-email" learned to give the e-mail headers to the validate
   hook by passing an extra argument from the command line.

 * The credential subsystem learns to help OAuth framework.

 * The titles of manual pages used to be chomped at an unreasonably
   short limit, which has been removed.

 * Error messages given when working on an unborn branch that is
   checked out in another worktree have been improved.

 * The documentation was misleading about the interaction between
   GIT_DEFAULT_HASH and "git clone", which has been clarified to
   stress that the variable is to be ignored by the command.

 * "git send-email" learned "--header-cmd=<cmd>" that can inject
   arbitrary e-mail header lines to the outgoing messages.

 * "git fsck" learned to detect bit-flip breakages in the reachability
   bitmap files.

 * The "--stdin" option of "git name-rev" has been replaced with
   the "--annotate-stdin" option more than a year ago.  We stop
   advertising it in the "git name-rev -h" output.

 * "git push --all" gained an alias "git push --branches".

 * "git fetch" learned the "--porcelain" option that emits what it did
   in a machine-parseable format.

 * "git --attr-source=<tree> cmd $args" is a new way to have any
   command to read attributes not from the working tree but from the
   given tree object.


Performance, Internal Implementation, Development Support etc.

 * Code clean-up to clarify directory traversal API.

 * Code clean-up to clarify the rule that "git-compat-util.h" must be
   the first to be included.

 * More work towards -Wunused.

 * Instead of forcing each command to choose to honor GPG related
   configuration variables, make the subsystem lazily initialize
   itself.

 * Remove workaround for ancient versions of DocBook to make it work
   correctly with groff, which has not been necessary since docbook
   1.76 from 2010.

 * Code clean-up to include and/or uninclude parse-options.h file as
   needed.

 * The code path that reports what "git fetch" did to each ref has
   been cleaned up.

 * Assorted config API updates.

 * A few configuration variables to tell the cURL library that
   different types of ssl-cert and ssl-key are in use have been added.

 * Split key function and data structure definitions out of cache.h to
   new header files and adjust the users.

 * "git fetch --all" does not have to download and handle the same
   bundleURI over and over, which has been corrected.

 * "git sparse-checkout" command learns a debugging aid for the sparse
   rule definitions.

 * "git write-tree" learns to work better with sparse-index.

 * The on-disk reverse index that allows mapping from the pack offset
   to the object name for the object stored at the offset has been
   enabled by default.

 * "git fsck" learned to validate the on-disk pack reverse index files.

 * strtok() and strtok_r() are banned in this codebase.

 * The detect-compilers script to help auto-tweaking the build system
   had trouble working with compilers whose version number has extra
   suffixes.  The script has been taught that certain suffixes (like
   "-win32" in "gcc 10-win32") can be safely stripped as they share
   the same features and bugs with the version without the suffix.

 * ctype tests have been taught to test EOF, too.

 * The implementation of credential helpers used fgets() over fixed
   size buffers to read protocol messages, causing the remainder of
   the folded long line to trigger unexpected behaviour, which has
   been corrected.

 * The implementation of the default "negotiator", used to find common
   ancestor over the network for object tranfer, used to be recursive;
   it was updated to be iterative to conserve stackspace usage.

 * Our custom callout formatter is no longer used in the documentation
   formatting toolchain, as the upstream default ones give better
   output these days.

 * The tracing mechanism learned to notice and report when
   auto-discovered bare repositories are being used, as allowing so
   without explicitly stating the user intends to do so (with setting
   GIT_DIR for example) can be used with social engineering as an
   attack vector.

 * "git diff-files" learned not to expand sparse-index unless needed.


Fixes since v2.40
-----------------

 * "git fsck" learned to check the index files in other worktrees,
   just like "git gc" honors them as anchoring points.
   (merge 8d3e7eac52 jk/fsck-indices-in-worktrees later to maint).

 * Fix a segfaulting loop.  The function and its caller may need
   further clean-up.
   (merge c5773dc078 ew/commit-reach-clean-up-flags-fix later to maint).

 * "git restore" supports options like "--ours" that are only
   meaningful during a conflicted merge, but these options are only
   meaningful when updating the working tree files.  These options are
   marked to be incompatible when both "--staged" and "--worktree" are
   in effect.
   (merge ee8a88826a ak/restore-both-incompatible-with-conflicts later to maint).

 * Simplify UI to control progress meter given by "git bundle" command.
   (merge 8b95521edb jk/bundle-progress later to maint).

 * "git bundle" learned that "-" is a common way to say that the input
   comes from the standard input and/or the output goes to the
   standard output.  It used to work only for output and only from the
   root level of the working tree.
   (merge 0bbe10313e jk/bundle-use-dash-for-stdfiles later to maint).

 * Once we start running, we assumed that the list of alternate object
   databases would never change.  Hook into the machinery used to
   update the list of packfiles during runtime to update this list as
   well.
   (merge e2d003dbed ds/reprepare-alternates-when-repreparing-packfiles later to maint).

 * The code to parse "git rebase -X<opt>" was not prepared to see an
   unparsable option string, which has been corrected.
   (merge 15a4cc912e ab/fix-strategy-opts-parsing later to maint).

 * "git add -p" while the index is unmerged sometimes failed to parse
   the diff output it internally produces and died, which has been
   corrected.
   (merge 28d1122f9c jk/add-p-unmerged-fix later to maint).

 * Fix for a "ls-files --format="%(path)" that produced nonsense
   output, which was a bug in 2.38.
   (merge cfb62dd006 aj/ls-files-format-fix later to maint).

 * "git receive-pack" that responds to "git push" requests failed to
   clean a stale lockfile when killed in the middle, which has been
   corrected.
   (merge c55c30669c ps/receive-pack-unlock-before-die later to maint).

 * "git rev-parse --quiet foo@{u}", or anything that asks @{u} to be
   parsed with GET_OID_QUIETLY option, did not quietly fail, which has
   been corrected.
   (merge dfbfdc521d fc/oid-quietly-parse-upstream later to maint).

 * Transports that do not support protocol v2 did not correctly fall
   back to protocol v0 under certain conditions, which has been
   corrected.
   (merge eaa0fd6584 jk/fix-proto-downgrade-to-v0 later to maint).

 * time(2) on glib 2.31+, especially on Linux, goes out of sync with
   higher resolution timers used for gettimeofday(2) and by the
   filesystem.  Replace all calls to it with a git_time() wrapper and
   (merge 370ddcbc89 pe/time-use-gettimeofday later to maint).

 * Code clean-up to use designated initializers in parse-options API.
   (merge 353e6d4554 sg/parse-options-h-initializers later to maint).

 * A recent-ish change to allow unicode character classes to be used
   with "grep -P" triggered a JIT bug in older pcre2 libraries.
   The problematic change in Git built with these older libraries has
   been disabled to work around the bug.
   (merge 14b9a04479 mk/workaround-pcre-jit-ucp-bug later to maint).

 * The wildmatch library code unlearns exponential behaviour it
   acquired some time ago since it was borrowed from rsync.
   (merge 3dc0b7f0dc pw/wildmatch-fixes later to maint).

 * The index files can become corrupt under certain conditions when
   the split-index feature is in use, especially together with
   fsmonitor, which have been corrected.
   (merge 061dd722dc js/split-index-fixes later to maint).

 * Document what the pathname-looking strings in "rev-list --object"
   output are for and what they mean.
   (merge 15364d2a3c jk/document-rev-list-object-name later to maint).

 * Fix unnecessary truncation of generation numbers used in-core.
   (merge d3af1c193d ps/ahead-behind-truncation-fix later to maint).

 * Code clean-up around the use of the_repository.
   (merge 4a93b899c1 ab/remove-implicit-use-of-the-repository later to maint).

 * Consistently spell "Message-ID" as such, not "Message-Id".
   (merge ba4324c4e1 jc/spell-id-in-both-caps-in-message-id later to maint).

 * Correct use of an uninitialized structure member.
   (merge dc12ee77ab jx/cap-object-info-uninitialized-fix later to maint).

 * Tests had a few places where we ignored PERL_PATH and blindly used
   /usr/bin/perl, which have been corrected.
   (merge c1917156a0 jk/use-perl-path-consistently later to maint).

 * Documentation mark-up fix.
   (merge 78b6369e67 la/mfc-markup-fix later to maint).

 * Doc toolchain update to remove old workaround for AsciiDoc.
   (merge 8806120de6 fc/remove-header-workarounds-for-asciidoc later to maint).

 * The userdiff regexp patterns for various filetypes that are built
   into the system have been updated to avoid triggering regexp errors
   from UTF-8 aware regex engines.
   (merge be39144954 rs/userdiff-multibyte-regex later to maint).

 * The approxidate() API has been simplified by losing an extra
   function that did the same thing as another one.
   (merge 8a7f0b666f rs/remove-approxidate-relative later to maint).

 * Code clean-up to replace a hardcoded constant with a CPP macro.
   (merge c870de6502 rs/get-tar-commit-id-use-defined-const later to maint).

 * Doc build simplification.
   (merge 9a09ed3229 fc/doc-stop-using-manversion later to maint).

 * "git archive" run from a subdirectory mishandled attributes and
   paths outside the current directory.
   (merge 92b1dd1b9e rs/archive-from-subdirectory-fixes later to maint).

 * The code to parse capability list for v0 on-wire protocol fell into
   an infinite loop when a capability appears multiple times, which
   has been corrected.

 * Geometric repacking ("git repack --geometric=<n>") in a repository
   that borrows from an alternate object database had various corner
   case bugs, which have been corrected.
   (merge d85cd18777 ps/fix-geom-repack-with-alternates later to maint).

 * The "%GT" placeholder for the "--format" option of "git log" and
   friends caused BUG() to trigger on a commit signed with an unknown
   key, which has been corrected.
   (merge 7891e46585 jk/gpg-trust-level-fix later to maint).

 * The completion script used to use bare "read" without the "-r"
   option to read the contents of various state files, which risked
   getting confused with backslashes in them.  This has been
   corrected.
   (merge 197152098a ek/completion-use-read-r-to-read-literally later to maint).

 * A small API fix to the ort merge strategy backend.
   (merge 000c4ceca7 en/ort-finalize-after-0-merges-fix later to maint).

 * The commit object parser has been taught to be a bit more lenient
   to parse timestamps on the author/committer line with a malformed
   author/committer ident.
   (merge 90ef0f14eb jk/parse-commit-with-malformed-ident later to maint).

 * Retitle a test script with an overly narrow name.
   (merge 8bb19c14fb ob/t3501-retitle later to maint).

 * Doc update to clarify how text and eol attributes interact to
   specify the end-of-line conversion.
   (merge 6696077ace ah/doc-attributes-text later to maint).

 * Gitk updates from GfW project.
   (merge 99e70f3077 js/gitk-fixes-from-gfw later to maint).

 * "git diff --dirstat" leaked memory, which has been plugged.
   (merge 83973981eb jc/dirstat-plug-leaks later to maint).

 * "git merge-tree" reads the basic configuration, which can be used
    by git forges to disable replace-refs feature.
   (merge b6551feadf ds/merge-tree-use-config later to maint).

 * A few bugs in the sequencer machinery that results in miscounting
   the steps have been corrected.
   (merge 170eea9750 js/rebase-count-fixes later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge f7111175df as/doc-markup-fix later to maint).
   (merge 90ff7c9898 fc/test-aggregation-clean-up later to maint).
   (merge 9b0c7f308a jc/am-doc-refer-to-format-patch later to maint).
   (merge b10cbdac4c bb/unicode-width-table-15 later to maint).
   (merge 3457b50e8c ab/retire-scripted-add-p later to maint).
   (merge d52fcf493b ds/p2000-fix-grep-sparse later to maint).
   (merge ec063d2591 ss/hashmap-typofix later to maint).
   (merge 1aaed69d11 rs/archive-mtime later to maint).
   (merge 2da2cc9b28 ob/rollback-after-commit-lock-failure later to maint).
   (merge 54dbd0933b ob/sequencer-save-head-simplify later to maint).
   (merge a93cbe8d78 ar/test-cleanup-unused-file-creation later to maint).
   (merge cc48ddd937 jk/chainlint-fixes later to maint).
   (merge 4833b08426 ow/ref-format-remove-unused-member later to maint).
   (merge d0ea2ca1cf dw/doc-submittingpatches-grammofix later to maint).
   (merge fd72637423 ar/t2024-checkout-output-fix later to maint).
   (merge d45cbe3fe0 ob/sequencer-i18n-fix later to maint).
   (merge b734fe49fd ob/messages-capitalize-exception later to maint).
   (merge ad353d7e77 ma/gittutorial-fixes later to maint).
   (merge a5855fd8d4 ar/test-cleanup-unused-file-creation-part2 later to maint).
   (merge 0c5308af30 sd/doc-gitignore-and-rm-cached later to maint).
   (merge cbb83daeaf kh/doc-interpret-trailers-updates later to maint).
   (merge 3d77fbb664 ar/config-count-tests-updates later to maint).
   (merge b7cf25c8f4 jc/t9800-fix-use-of-show-s-raw later to maint).

----------------------------------------------------------------

Changes since v2.40.0 are as follows:

Adam Johnson (1):
      ls-files: fix "--format" output of relative paths

Alex Henrie (5):
      rebase: add documentation and test for --no-rebase-merges
      rebase: deprecate --rebase-merges=""
      rebase: add a config option for --rebase-merges
      format-patch: correct documentation of --thread without an argument
      docs: rewrite the documentation of the text and eol attributes

Andreas Schwab (1):
      git-merge-tree.txt: replace spurious HTML entity

Andrei Rybak (19):
      t1005: assert output of ls-files
      t1006: assert error output of cat-file
      t1010: don't create unused files
      t1302: don't create unused file
      t1400: assert output of update-ref
      t1404: don't create unused file
      t1507: assert output of rev-parse
      t3060: fix mention of function prune_index
      t2107: fix mention of the_index.cache_changed
      t2024: fix loose/strict local base branch DWIM test
      t1300: drop duplicate test
      t1300: check stderr for "ignores pairs" tests
      t1300: add tests for missing keys
      t0300: don't create unused file
      t1300: fix config file syntax error descriptions
      t1300: don't create unused files
      t1450: don't create unused files
      t1502: don't create unused files
      t2019: don't create unused files

Andy Koppe (1):
      restore: fault --staged --worktree with merge opts

Beat Bolli (1):
      unicode: update the width tables to Unicode 15

Christian Hesse (1):
      imap-send: include strbuf.h

Clement Mabileau (1):
      branch: improve error log on branch not found by checking remotes refs

Corentin Garcia (1):
      doc/git-config: add unit for http.lowSpeedLimit

Daniel Watson (1):
      SubmittingPatches: clarify MUA discussion with "the"

Derrick Stolee (19):
      object-file: reprepare alternates when necessary
      for-each-ref: add --stdin option
      for-each-ref: explicitly test no matches
      commit-graph: refactor compute_topological_levels()
      commit-graph: simplify compute_generation_numbers()
      commit-graph: return generation from memory
      commit-reach: implement ahead_behind() logic
      for-each-ref: add ahead-behind format atom
      commit-reach: add tips_reachable_from_bases()
      p2000: remove stray '--sparse' flag from test
      fetch: download bundles once, even with --all
      ci: update 'static-analysis' to Ubuntu 22.04
      fsck: create scaffolding for rev-index checks
      fsck: check rev-index checksums
      fsck: check rev-index position values
      fsck: validate .rev file header
      fsck: verify checksums of all .bitmap files
      fsck: use local repository
      merge-tree: load default git config

Edwin Kofler (1):
      completion: suppress unwanted unescaping of `read`

Elijah Newren (94):
      treewide: ensure one of the appropriate headers is sourced first
      treewide: remove unnecessary git-compat-util.h includes in headers
      treewide: remove unnecessary cache.h includes
      treewide: remove unnecessary cache.h includes in source files
      alloc.h: move ALLOC_GROW() functions from cache.h
      hash.h: move some oid-related declarations from cache.h
      hex.h: move some hex-related declarations from cache.h
      cache.h: remove dependence on hex.h; make other files include it explicitly
      pretty.h: move has_non_ascii() declaration from commit.h
      ident.h: move ident-related declarations out of cache.h
      object.h: stop depending on cache.h; make cache.h depend on object.h
      dir.h: refactor to no longer need to include cache.h
      object-store.h: move struct object_info from cache.h
      replace-object.h: move read_replace_refs declaration from cache.h to here
      treewide: replace cache.h with more direct headers, where possible
      Remove unnecessary includes of builtin.h
      diff.h: remove unnecessary include of object.h
      t2021: fix platform-specific leftover cruft
      unpack-trees: heed requests to overwrite ignored files
      dir: separate public from internal portion of dir_struct
      dir: add a usage note to exclude_per_dir
      dir: mark output only fields of dir_struct as such
      unpack-trees: clean up some flow control
      sparse-checkout: avoid using internal API of unpack-trees
      sparse-checkout: avoid using internal API of unpack-trees, take 2
      unpack_trees: start splitting internal fields from public API
      unpack-trees: mark fields only used internally as internal
      unpack-trees: rewrap a few overlong lines from previous patch
      unpack-trees: special case read-tree debugging as internal usage
      unpack-trees: add usage notices around df_conflict_entry
      treewide: remove unnecessary cache.h inclusion from a few headers
      treewide: be explicit about dependence on gettext.h
      treewide: remove unnecessary inclusion of gettext.h
      treewide: remove unnecessary cache.h inclusion from several sources
      environment: move comment_line_char from cache.h
      abspath.h: move absolute path functions from cache.h
      cache.h: remove expand_user_path()
      path.h: move function declarations for path.c functions from cache.h
      wrapper.h: move declarations for wrapper.c functions from cache.h
      treewide: remove unnecessary includes of cache.h
      environment.h: move declarations for environment.c functions from cache.h
      treewide: remove cache.h inclusion due to environment.h changes
      setup.h: move declarations for setup.c functions from cache.h
      treewide: remove cache.h inclusion due to setup.h changes
      write-or-die.h: move declarations for write-or-die.c functions from cache.h
      csum-file.h: remove unnecessary inclusion of cache.h
      treewide: be explicit about dependence on trace.h & trace2.h
      treewide: be explicit about dependence on advice.h
      treewide: be explicit about dependence on convert.h
      treewide: be explicit about dependence on pack-revindex.h
      treewide: be explicit about dependence on oid-array.h
      treewide: be explicit about dependence on mem-pool.h
      treewide: remove unnecessary cache.h inclusion
      object-name.h: move declarations for object-name.c functions from cache.h
      treewide: remove cache.h inclusion due to object-name.h changes
      git-zlib: move declarations for git-zlib functions from cache.h
      treewide: remove cache.h inclusion due to git-zlib changes
      object-file.h: move declarations for object-file.c functions from cache.h
      treewide: remove cache.h inclusion due to object-file.h changes
      object.h: move some inline functions and defines from cache.h
      treewide: remove cache.h inclusion due to object.h changes
      editor: move editor-related functions and declarations into common file
      treewide: remove cache.h inclusion due to editor.h changes
      pager.h: move declarations for pager.c functions from cache.h
      treewide: remove cache.h inclusion due to pager.h changes
      cache.h: remove unnecessary includes
      treewide: remove double forward declaration of read_in_full
      treewide: reduce includes of cache.h in other headers
      mailmap, quote: move declarations of global vars to correct unit
      protocol.h: move definition of DEFAULT_GIT_PORT from cache.h
      treewide: be explicit about dependence on strbuf.h
      symlinks.h: move declarations for symlinks.c functions from cache.h
      packfile.h: move pack_window and pack_entry from cache.h
      server-info.h: move declarations for server-info.c functions from cache.h
      copy.h: move declarations for copy.c functions from cache.h
      base85.h: move declarations for base85.c functions from cache.h
      pkt-line.h: move declarations for pkt-line.c functions from cache.h
      match-trees.h: move declarations for match-trees.c functions from cache.h
      ws.h: move declarations for ws.c functions from cache.h
      versioncmp.h: move declarations for versioncmp.c functions from cache.h
      dir.h: move DTYPE defines from cache.h
      tree-diff.c: move S_DIFFTREE_IFXMIN_NEQ define from cache.h
      hash-ll.h: split out of hash.h to remove dependency on repository.h
      cache,tree: move cmp_cache_name_compare from tree.[ch] to read-cache.c
      cache,tree: move basic name compare functions from read-cache to tree
      treewide: remove cache.h inclusion due to previous changes
      cache.h: remove unnecessary headers
      fsmonitor: reduce includes of cache.h
      commit.h: reduce unnecessary includes
      object-store.h: reduce unnecessary includes
      diff.h: reduce unnecessary includes
      reftable: ensure git-compat-util.h is the first (indirect) include
      merge-ort: fix calling merge_finalize() with no intermediate merge
      t5583: fix shebang line

Emily Shaffer (1):
      mailmap: change primary address for Emily Shaffer

Eric Sunshine (1):
      tests: diagnose unclosed here-doc in chainlint.pl

Eric Wong (3):
      commit-reach: avoid NULL dereference
      fetch: support hideRefs to speed up connectivity checks
      fetch: pass --no-write-fetch-head to subprocesses

Fangyi Zhou (1):
      rebase: fix capitalisation autoSquash in i18n string

Felipe Contreras (16):
      advice: add diverging advice for novices
      test: simplify counts aggregation
      test: don't print aggregate-results command
      object-name: fix quiet @{u} parsing
      completion: prompt: use generic colors
      doc: remove GNU troff workaround
      doc: remove manpage-base-url workaround
      doc: asciidoc: remove custom header macro
      doc: simplify man version
      doc: set actual revdate for manpages
      doc: git-checkout: trivial callout cleanup
      doc: git-checkout: reorganize examples
      doc: remove custom callouts format
      doc: manpage: remove maximum title length
      doc: doc-diff: specify date
      test: rev-parse-upstream: add missing cmp

Glen Choo (10):
      config.c: plumb config_source through static fns
      config.c: don't assign to "cf_global" directly
      config.c: create config_reader and the_reader
      config.c: plumb the_reader through callbacks
      config.c: remove current_config_kvi
      config.c: remove current_parsing_scope
      config: report cached filenames in die_bad_number()
      config.c: rename "struct config_source cf"
      clone: error specifically with --local and symlinked objects
      setup: trace bare repository setups

Han Xin (2):
      negotiator/default: avoid stack overflow
      negotiator/skipping: fix some problems in mark_common()

Jacob Keller (2):
      blame: allow --contents to work with non-HEAD commit
      blame: use different author name for fake commit generated by --contents

Jeff King (90):
      ref-filter: drop unused atom parameter from get_worktree_path()
      ls-refs: drop config caching
      serve: use repository pointer to get config
      serve: mark unused parameters in virtual functions
      object-name: mark unused parameters in disambiguate callbacks
      http-backend: mark argc/argv unused
      http-backend: mark unused parameters in virtual functions
      ref-filter: mark unused callback parameters
      mark "pointless" data pointers in callbacks
      run-command: mark error routine parameters as unused
      mark unused parameters in signal handlers
      list-objects: mark unused callback parameters
      for_each_object: mark unused callback parameters
      prio-queue: mark unused parameters in comparison functions
      notes: mark unused callback parameters
      fetch-pack: mark unused parameter in callback function
      rewrite_parents(): mark unused callback parameter
      for_each_commit_graft(): mark unused callback parameter
      userformat_want_item(): mark unused parameter
      run_processes_parallel: mark unused callback parameters
      help: mark unused parameter in git_unknown_cmd_config()
      fsck: factor out index fsck
      fsck: check index files in all worktrees
      fsck: mention file path for index errors
      fsck: check even zero-entry index files
      drop pure pass-through config callbacks
      bundle: turn on --all-progress-implied by default
      bundle: let "-" mean stdin for reading operations
      bundle: document handling of "-" as stdin
      parse-options: consistently allocate memory in fix_filename()
      parse-options: use prefix_filename_except_for_dash() helper
      diff: factor out src/dst prefix setup
      t4013: add tests for diff prefix options
      diff: add --default-prefix option
      format-patch: do not respect diff.noprefix
      format-patch: add format.noprefix option
      add-patch: handle "* Unmerged path" lines
      http-push: prefer CURLOPT_UPLOAD to CURLOPT_PUT
      http: prefer CURLOPT_SEEKFUNCTION to CURLOPT_IOCTLFUNCTION
      range-diff: drop useless "offset" variable from read_patches()
      http: support CURLOPT_PROTOCOLS_STR
      range-diff: handle unterminated lines in read_patches()
      range-diff: use ssize_t for parsed "len" in read_patches()
      rebase: prefer --default-prefix to --{src,dst}-prefix for format-patch
      mailmap: drop debugging code
      http: drop unused parameter from start_object_request()
      http: mark unused parameter in fill_active_slot() callbacks
      transport: mark unused parameters in fetch_refs_from_bundle()
      git_connect(): fix corner cases in downgrading v2 to v0
      fast-export: drop const when storing anonymized values
      fast-export: simplify initialization of anonymized hashmaps
      fast-export: factor out anonymized_entry creation
      fast-export: de-obfuscate --anonymize-map handling
      fast-export: drop data parameter from anonymous generators
      fast-export: drop unused parameter from anonymize_commit_message()
      Makefile: force -O0 when compiling with SANITIZE=leak
      pack-redundant: escalate deprecation warning to an error
      docs: document caveats of rev-list's object-name output
      fast-import: fix file access when run from subdir
      builtins: always pass prefix to parse_options()
      builtins: annotate always-empty prefix parameters
      builtins: mark unused prefix parameters
      mark "argv" as unused when we check argc
      t/helper: mark unused argv/argc arguments
      parse-options: drop parse_opt_unknown_cb()
      pack-redundant: document deprecation
      tests: run internal chain-linter under "make test"
      tests: replace chainlint subshell with a function
      tests: drop here-doc check from internal chain-linter
      tests: skip test_eval_ in internal chain-lint
      t/lib-httpd: pass PERL_PATH to CGI scripts
      v0 protocol: fix infinite loop when parsing multi-valued capabilities
      t5512: stop referring to "v1" protocol
      v0 protocol: fix sha1/sha256 confusion for capabilities^{}
      t5512: add v2 support for "ls-remote --symref" test
      t5512: allow any protocol version for filtered symref test
      t5512: test "ls-remote --heads --symref" filtering with v0 and v2
      v0 protocol: use size_t for capability length/offset
      gpg-interface: set trust level of missing key to "undefined"
      notes: clean up confusing NULL checks in init_notes()
      fetch_bundle_uri(): drop pointless NULL check
      t4212: avoid putting git on left-hand side of pipe
      parse_commit(): parse timestamp from end of line
      parse_commit(): handle broken whitespace-only timestamp
      parse_commit(): describe more date-parsing failure modes
      doc-diff: drop SOURCE_DATE_EPOCH override
      t7001: avoid git on upstream of pipe
      t7001: use "ls-files --format" instead of "cut"
      t: drop "verbose" helper function
      t/lib-httpd: make CGIPassAuth support conditional

Jiang Xin (5):
      github-actions: run gcc-8 on ubuntu-20.04 image
      ci: remove the pipe after "p4 -V" to catch errors
      ci: use the same version of p4 on both Linux and macOS
      ci: install python on ubuntu
      object-info: init request_info before reading arg

Johannes Schindelin (31):
      compat/win32/syslog: fix use-after-realloc
      nedmalloc: avoid new compile error
      t0033: GETTEXT_POISON fix
      t0003: GETTEXT_POISON fix, part 1
      t0003: GETTEXT_POISON fix, conclusion
      t5619: GETTEXT_POISON fix
      t5604: GETTEXT_POISON fix, part 1
      t5604: GETTEXT_POISON fix, conclusion
      clone.c: avoid "exceeds maximum object size" error with GCC v12.x
      split-index & fsmonitor: demonstrate a bug
      split-index; stop abusing the `base_oid` to strip the "link" extension
      fsmonitor: avoid overriding `cache_changed` bits
      unpack-trees: take care to propagate the split-index flag
      t3701: we don't need no Perl for `add -i` anymore
      t5563: prevent "ambiguous redirect"
      apply --reject: overwrite existing `.rej` symlink if it exists
      gettext: avoid using gettext if the locale dir is not present
      tests: avoid using `test_i18ncmp`
      Git 2.31.8
      Git 2.32.7
      Git 2.33.8
      Git 2.34.8
      Git 2.35.8
      Git 2.36.6
      Git 2.37.7
      Git 2.38.5
      Git 2.39.3
      Git 2.40.1
      gitk: prevent overly long command lines
      rebase --update-refs: fix loops
      rebase -r: fix the total number shown in the progress

John Cai (2):
      name-rev: make --stdin hidden
      attr: teach "--attr-source=<tree>" global option to "git"

John Keeping (1):
      format-patch: output header for empty commits

Josh Soref (1):
      subtree: support long global flags

Jouke Witteveen (1):
      send-email docs: Remove mention of discontinued gmail feature

Junio C Hamano (38):
      gpg-interface: lazily initialize and read the configuration
      bundle: don't blindly apply prefix_filename() to "-"
      Start the 2.41 cycle
      The second batch
      am: refer to format-patch in the documentation
      The third batch
      http.c: clear the 'finished' member once we are done with it
      The fourth batch
      The fifth batch
      The sixth batch
      e-mail workflow: Message-ID is spelled with ID in both capital letters
      The seventh batch
      clone: propagate object-format when cloning from void
      The eighth batch
      The ninth batch
      The tenth batch
      The eleventh batch
      The twelfth batch
      The thirteenth batch
      doc: GIT_DEFAULT_HASH is and will be ignored during "clone"
      The fourteenth batch
      The fifteenth batch
      The sixteenth batch
      diff: refactor common tail part of dirstat computation
      diff: plug leaks in dirstat
      t9800: correct misuse of 'show -s --raw' in a test
      The seventeenth batch
      The eighteenth batch
      Git 2.41-rc0
      tests: do not negate test_path_exists
      t2021: do not negate test_path_is_dir
      test: do not negate test_path_is_* to assert absense
      A bit more before -rc1
      send-email: clear the $message_id after validation
      t9001: mark the script as no longer leak checker clean
      Git 2.41-rc1
      A few more topics after 2.41-rc1
      Git 2.41-rc2

Kristoffer Haugsbakk (5):
      config: tell the user that we expect an ASCII character
      doc: interpret-trailers: don’t use heredoc in examples
      doc: interpret-trailers: use input redirection
      doc: interpret-trailers: don’t use deprecated config
      doc: interpret-trailers: fix example

Linus Arver (1):
      MyFirstContribution: render literal *

M Hickford (3):
      credential/wincred: include wincred.h
      credential/wincred: store password_expiry_utc
      credential: new attribute oauth_refresh_token

Martin Ågren (2):
      gittutorial: drop early mention of origin
      gittutorial: wrap literal examples in backticks

Mathias Krause (1):
      grep: work around UTF-8 related JIT bug in PCRE2 <= 10.34

Matthew John Cheetham (3):
      t5563: add tests for basic and anoymous HTTP access
      http: read HTTP WWW-Authenticate response headers
      credential: add WWW-Authenticate header to cred requests

Maxim Cournoyer (3):
      send-email: extract execute_cmd from recipients_cmd
      send-email: add --header-cmd, --no-header-cmd options
      send-email: detect empty blank lines in command output

Michael J Gruber (1):
      t3070: make chain lint tester happy

Michael Strawbridge (2):
      send-email: refactor header generation functions
      send-email: expose header information to git-send-email's sendemail-validate hook

Mike Hommey (1):
      Handle some compiler versions containing a dash

Nico Rieck (1):
      gitk: escape file paths before piping to git log

Oswald Buddenhagen (5):
      sequencer: remove pointless rollback_lock_file()
      sequencer: rewrite save_head() in terms of write_message()
      sequencer: actually translate report in do_exec()
      messages: capitalization and punctuation exceptions
      t/t3501-revert-cherry-pick.sh: clarify scope of the file

Patrick Steinhardt (27):
      receive-pack: fix stale packfile locks when dying
      fetch: move reference width calculation into `display_state`
      fetch: move output format into `display_state`
      fetch: pass the full local reference name to `format_display`
      fetch: centralize handling of per-reference format
      fetch: centralize logic to print remote URL
      fetch: centralize printing of reference updates
      commit-graph: fix truncated generation numbers
      midx: fix segfault with no packs and invalid preferred pack
      repack: fix trying to use preferred pack in alternates
      repack: fix generating multi-pack-index with only non-local packs
      pack-objects: split out `--stdin-packs` tests into separate file
      pack-objects: fix error when packing same pack twice
      pack-objects: fix error when same packfile is included and excluded
      pack-objects: extend test coverage of `--stdin-packs` with alternates
      t/helper: allow chmtime to print verbosely without modifying mtime
      repack: honor `-l` when calculating pack geometry
      repack: disable writing bitmaps when doing a local repack
      fetch: fix `--no-recurse-submodules` with multi-remote fetches
      fetch: split out tests for output format
      fetch: add a test to exercise invalid output formats
      fetch: print left-hand side when fetching HEAD:foo
      fetch: refactor calculation of the display table width
      fetch: introduce `display_format` enum
      fetch: lift up parsing of "fetch.output" config variable
      fetch: move option related variables into main function
      fetch: introduce machine-parseable "porcelain" output format

Paul Eggert (1):
      git-compat-util: use gettimeofday(2) for time(2)

Phillip Wood (8):
      wildmatch: fix exponential behavior
      wildmatch: avoid undefined behavior
      wildmatch: hide internal return values
      rebase: stop reading and writing unnecessary strategy state
      sequencer: use struct strvec to store merge strategy options
      rebase -m: cleanup --strategy-option handling
      rebase -m: fix serialization of strategy options
      rebase: remove a couple of redundant strategy tests

Raghul Nanth A (1):
      describe: enable sparse index for describe

René Scharfe (6):
      archive: improve support for running in subdirectory
      t5000: use check_mtime()
      userdiff: support regexec(3) with multi-byte support
      date: remove approxidate_relative()
      get-tar-commit-id: use TYPEFLAG_GLOBAL_HEADER instead of magic value
      test-ctype: check EOF

Robin Jarry (1):
      send-email: export patch counters in validate environment

Rubén Justo (10):
      bisect: fix "reset" when branch is checked out elsewhere
      worktree: introduce is_shared_symref()
      branch: fix die_if_checked_out() when ignore_current_worktree
      rebase: refuse to switch to a branch already checked out elsewhere (test)
      switch: reject if the branch is already checked out elsewhere (test)
      branch: test for failures while renaming branches
      branch: use get_worktrees() in copy_or_rename_branch()
      branch: description for orphan branch errors
      branch: rename orphan branches in any worktree
      branch: avoid unnecessary worktrees traversals

SZEDER Gábor (6):
      treewide: include parse-options.h in source files
      treewide: remove unnecessary inclusions of parse-options.h from headers
      parse-options.h: use consistent name for the callback parameters
      parse-options.h: rename _OPT_CONTAINS_OR_WITH()'s parameters
      parse-options.h: use designated initializers in OPT_* macros
      cocci: remove 'unused.cocci'

Shuqi Liang (4):
      write-tree: integrate with sparse index
      t1092: update a write-tree test
      t1092: add tests for `git diff-files`
      diff-files: integrate with sparse index

Siddharth Singh (1):
      hashmap.h: fix minor typo

Sohom Datta (1):
      docs: clarify git rm --cached function in gitignore note

Stanislav Malishevskiy (1):
      http: add support for different sslcert and sslkey types.

Tao Klerks (1):
      mergetool: new config guiDefault supports auto-toggling gui by DISPLAY

Taylor Blau (37):
      commit-graph: introduce `ensure_generations_valid()`
      pack-write.c: plug a leak in stage_tmp_packfiles()
      t5325: mark as leak-free
      pack-revindex: make `load_pack_revindex` take a repository
      pack-revindex: introduce GIT_TEST_REV_INDEX_DIE_ON_DISK
      pack-revindex: introduce `pack.readReverseIndex`
      config: enable `pack.writeReverseIndex` by default
      t: invert `GIT_TEST_WRITE_REV_INDEX`
      t1300: demonstrate failure when renaming sections with long lines
      config: avoid fixed-sized buffer when renaming/deleting a section
      config.c: avoid integer truncation in `copy_or_rename_section_in_file()`
      config.c: disallow overly-long lines in `copy_or_rename_section_in_file()`
      Git 2.30.9
      pack-write.c: plug a leak in stage_tmp_packfiles()
      builtin/repack.c: fix incorrect reference to '-C'
      builtin/gc.c: ignore cruft packs with `--keep-largest-pack`
      t/t5304-prune.sh: prepare for `gc --cruft` by default
      t/t6501-freshen-objects.sh: prepare for `gc --cruft` by default
      t/t6500-gc.sh: refactor cruft pack tests
      t/t6500-gc.sh: add additional test cases
      t/t9300-fast-import.sh: prepare for `gc --cruft` by default
      builtin/gc.c: make `gc.cruftPacks` enabled by default
      repository.h: drop unused `gc_cruft_packs`
      string-list: multi-delimiter `string_list_split_in_place()`
      string-list: introduce `string_list_setlen()`
      t/helper/test-hashmap.c: avoid using `strtok()`
      t/helper/test-oidmap.c: avoid using `strtok()`
      t/helper/test-json-writer.c: avoid using `strtok()`
      banned.h: mark `strtok()` and `strtok_r()` as banned
      credential.c: store "wwwauth[]" values in `credential_read()`
      t/lib-credential.sh: ensure credential helpers handle long headers
      contrib/credential: avoid fixed-size buffer in osxkeychain
      contrib/credential: remove 'gnome-keyring' credential helper
      contrib/credential: .gitignore libsecret build artifacts
      contrib/credential: avoid fixed-size buffer in libsecret
      contrib/credential: embiggen fixed-size buffer in wincred
      run-command.c: fix missing include under `NO_PTHREADS`

Teng Long (1):
      push: introduce '--branches' option

William Sprent (2):
      builtin/sparse-checkout: remove NEED_WORK_TREE flag
      builtin/sparse-checkout: add check-rules command

ZheNing Hu (2):
      receive-pack: fix funny ref error messsage
      push: allow delete single-level ref

brian m. carlson (1):
      upload-pack: advertise capabilities when cloning empty repos

Ævar Arnfjörð Bjarmason (33):
      auto-crlf tests: don't lose exit code in loops and outside tests
      t/lib-patch-mode.sh: fix ignored exit codes
      tests: don't lose exit status with "(cd ...; test <op> $(git ...))"
      tests: don't lose "git" exit codes in "! ( git ... | grep )"
      tests: don't lose exit status with "test <op> $(git ...)"
      tests: don't lose misc "git" exit codes
      sequencer.c: fix overflow & segfault in parse_strategy_opts()
      cocci: remove dead rule from "the_repository.pending.cocci"
      cocci: fix incorrect & verbose "the_repository" rules
      cocci: sort "the_repository" rules by header
      cocci: add missing "the_repository" macros to "pending"
      cocci: apply the "cache.h" part of "the_repository.pending"
      cocci: apply the "commit-reach.h" part of "the_repository.pending"
      cocci: apply the "commit.h" part of "the_repository.pending"
      cocci: apply the "diff.h" part of "the_repository.pending"
      cocci: apply the "object-store.h" part of "the_repository.pending"
      cocci: apply the "pretty.h" part of "the_repository.pending"
      cocci: apply the "packfile.h" part of "the_repository.pending"
      cocci: apply the "promisor-remote.h" part of "the_repository.pending"
      cocci: apply the "refs.h" part of "the_repository.pending"
      cocci: apply the "rerere.h" part of "the_repository.pending"
      cocci: apply the "revision.h" part of "the_repository.pending"
      post-cocci: adjust comments for recent repo_* migration
      libs: use "struct repository *" argument, not "the_repository"
      config tests: cover blind spots in git_die_config() tests
      config tests: add "NULL" tests for *_get_value_multi()
      config API: add and use a "git_config_get()" family of functions
      versioncmp.c: refactor config reading next commit
      config API: have *_multi() return an "int" and take a "dest"
      for-each-repo: error on bad --config
      config API users: test for *_get_value_multi() segfaults
      config API: add "string" version of *_value_multi(), fix segfaults
      for-each-repo: with bad config, don't conflate <path> and <cmd>

Øystein Walle (2):
      ref-filter: remove unused ref_format member
      branch, for-each-ref, tag: add option to omit empty lines



^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.41.0-rc1
@ 2023-05-19 17:39  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2023-05-19 17:39 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.41.0-rc1 is now available for testing at
the usual places.  It is comprised of 516 non-merge commits since
v2.40.0, contributed by 79 people, 24 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.41.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.40.0 are as
follows.  Welcome to the Git development community!

  Adam Johnson, André Baptista, Andy Koppe, Clement Mabileau,
  Cristian Le, Daniel Watson, D. Ben Knoble, Douglas Anderson,
  Edwin Kofler, Jonas Haag, Jouke Witteveen, Matthias Görgens,
  Maxim Cournoyer, Michael Henry, Michael Strawbridge, Nico
  Rieck, Raghul Nanth A, Rolf Eike Beer, Shuqi Liang, Siddharth
  Singh, Stanislav Malishevskiy, Stephane Odul, Vítor Pinho,
  and Xin Xing.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alex Henrie, Andreas Schwab,
  Andrei Rybak, Beat Bolli, brian m. carlson, Christian Hesse,
  Derrick Stolee, Elijah Newren, Emily Shaffer, Eric Sunshine,
  Eric Wong, Fangyi Zhou, Felipe Contreras, Glen Choo, Han Xin,
  Jacob Keller, Jeff King, Jiang Xin, Joakim Petersen, Johannes
  Schindelin, Johannes Sixt, John Cai, John Keeping, Josh Soref,
  Junio C Hamano, Kristoffer Haugsbakk, Linus Arver, Linus
  Torvalds, Martin Ågren, Mathias Krause, Matthew John Cheetham,
  M Hickford, Michael J Gruber, Mike Hommey, Oswald Buddenhagen,
  Øystein Walle, Patrick Steinhardt, Paul Eggert, Philippe Blain,
  Phillip Wood, Randall S. Becker, René Scharfe, Robin Jarry,
  Rubén Justo, RyotaK, Sohom Datta, SZEDER Gábor, Tao Klerks,
  Taylor Blau, Teng Long, Todd Zullinger, Torsten Bögershausen,
  William Sprent, and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.41 Release Notes (draft)
===============================

UI, Workflows & Features

 * Allow information carried on the WWW-Authenticate header to be
   passed to the credential helpers.

 * A new "fetch.hideRefs" option can be used to exclude specified refs
   from "rev-list --objects --stdin --not --all" traversal for
   checking object connectivity, most useful when there are many
   unrelated histories in a single repository.

 * "git push" has been taught to allow deletion of refs with one-level
   names to help repairing a repository who acquired such a ref by
   mistake.  In general, we don't encourage use of such a ref, and
   creation or update to such a ref is rejected as before.

 * Allow "git bisect reset" to check out the original branch when the
   branch is already checked out in a different worktree linked to the
   same repository.

 * A few subcommands have been taught to stop users from working on a
   branch that is being used in another worktree linked to the same
   repository.

 * "git format-patch" learned to write a log-message only output file
   for empty commits.

 * "git format-patch" honors the src/dst prefixes set to nonstandard
   values with configuration variables like "diff.noprefix", causing
   receiving end of the patch that expects the standard -p1 format to
   break.  "format-patch" has been taught to ignore end-user configuration
   and always use the standard prefixes.

   This is a backward compatibility breaking change.

 * Lift the limitation that colored prompts can only be used with
   PROMPT_COMMAND mode.

 * "git blame --contents=<file> <rev> -- <path>" used to be forbidden,
   but now it finds the origins of lines starting at <file> contents
   through the history that leads to <rev>.

 * "git pack-redundant" gave a warning when run, as the command has
   outlived its usefulness long ago and is nominated for future
   removal.  Now we escalate to give an error.

 * "git clone" from an empty repository learned to propagate the
   choice of the hash algorithm from the source repository to the
   newly created repository over any one of the v0/v1/v2 protocol.

 * "git mergetool" and "git difftool" learns a new configuration
   guiDefault to optionally favor configured guitool over non-gui-tool
   automatically when $DISPLAY is set.

 * "git branch -d origin/master" would say "no such branch", but it is
   likely a missed "-r" if refs/remotes/origin/master exists.  The
   command has been taught to give such a hint in its error message.

 * Clean-up of the code path that deals with merge strategy option
   handling in "git rebase".

 * "git clone --local" stops copying from an original repository that
   has symbolic links inside its $GIT_DIR; an error message when that
   happens has been updated.

 * "git branch --format=..." and "git format-patch --format=..."
   learns "--omit-empty" to hide refs that whose formatting result
   becomes an empty string from the output.

 * The sendemail-validate validate hook learned to pass the total
   number of input files and where in the sequence each invocation is
   via environment variables.

 * When "gc" needs to retain unreachable objects, packing them into
   cruft packs (instead of exploding them into loose object files) has
   been offered as a more efficient option for some time.  Now the use
   of cruft packs has been made the default and no longer considered
   an experimental feature.

 * The output given by "git blame" that attributes a line to contents
   taken from the file specified by the "--contents" option shows it
   differently from a line attributed to the working tree file.

 * "git send-email" learned to give the e-mail headers to the validate
   hook by passing an extra argument from the command line.

 * The credential subsystem learns to help OAuth framework.

 * The titles of manual pages used to be chomped at an unreasonably
   short limit, which has been removed.

 * Error messages given when working on an unborn branch that is
   checked out in another worktree have been improved.

 * The documentation was misleading about the interaction between
   GIT_DEFAULT_HASH and "git clone", which has been clarified to
   stress that the variable is to be ignored by the command.

 * "git send-email" learned "--header-cmd=<cmd>" that can inject
   arbitrary e-mail header lines to the outgoing messages.

 * "git fsck" learned to detect bit-flip breakages in the reachability
   bitmap files.

 * The "--stdin" option of "git name-rev" has been replaced with
   the "--annotate-stdin" option more than a year ago.  We stop
   advertising it in the "git name-rev -h" output.

 * "git push --all" gained an alias "git push --branches".

 * "git fetch" learned the "--porcelain" option that emits what it did
   in a machine-parseable format.

 * "git --attr-source=<tree> cmd $args" is a new way to have any
   command to read attributes not from the working tree but from the
   given tree object.


Performance, Internal Implementation, Development Support etc.

 * Code clean-up to clarify directory traversal API.

 * Code clean-up to clarify the rule that "git-compat-util.h" must be
   the first to be included.

 * More work towards -Wunused.

 * Instead of forcing each command to choose to honor GPG related
   configuration variables, make the subsystem lazily initialize
   itself.

 * Remove workaround for ancient versions of DocBook to make it work
   correctly with groff, which has not been necessary since docbook
   1.76 from 2010.

 * Code clean-up to include and/or uninclude parse-options.h file as
   needed.

 * The code path that reports what "git fetch" did to each ref has
   been cleaned up.

 * Assorted config API updates.

 * A few configuration variables to tell the cURL library that
   different types of ssl-cert and ssl-key are in use have been added.

 * Split key function and data structure definitions out of cache.h to
   new header files and adjust the users.

 * "git fetch --all" does not have to download and handle the same
   bundleURI over and over, which has been corrected.

 * "git sparse-checkout" command learns a debugging aid for the sparse
   rule definitions.

 * "git write-tree" learns to work better with sparse-index.

 * The on-disk reverse index that allows mapping from the pack offset
   to the object name for the object stored at the offset has been
   enabled by default.

 * "git fsck" learned to validate the on-disk pack reverse index files.

 * strtok() and strtok_r() are banned in this codebase.

 * The detect-compilers script to help auto-tweaking the build system
   had trouble working with compilers whose version number has extra
   suffixes.  The script has been taught that certain suffixes (like
   "-win32" in "gcc 10-win32") can be safely stripped as they share
   the same features and bugs with the version without the suffix.

 * ctype tests have been taught to test EOF, too.

 * The implementation of credential helpers used fgets() over fixed
   size buffers to read protocol messages, causing the remainder of
   the folded long line to trigger unexpected behaviour, which has
   been corrected.

 * The implementation of the default "negotiator", used to find common
   ancestor over the network for object tranfer, used to be recursive;
   it was updated to be iterative to conserve stackspace usage.

 * Our custom callout formatter is no longer used in the documentation
   formatting toolchain, as the upstream default ones give better
   output these days.

 * The tracing mechanism learned to notice and report when
   auto-discovered bare repositories are being used, as allowing so
   without explicitly stating the user intends to do so (with setting
   GIT_DIR for example) can be used with social engineering as an
   attack vector.

 * "git diff-files" learned not to expand sparse-index unless needed.


Fixes since v2.40
-----------------

 * "git fsck" learned to check the index files in other worktrees,
   just like "git gc" honors them as anchoring points.
   (merge 8d3e7eac52 jk/fsck-indices-in-worktrees later to maint).

 * Fix a segfaulting loop.  The function and its caller may need
   further clean-up.
   (merge c5773dc078 ew/commit-reach-clean-up-flags-fix later to maint).

 * "git restore" supports options like "--ours" that are only
   meaningful during a conflicted merge, but these options are only
   meaningful when updating the working tree files.  These options are
   marked to be incompatible when both "--staged" and "--worktree" are
   in effect.
   (merge ee8a88826a ak/restore-both-incompatible-with-conflicts later to maint).

 * Simplify UI to control progress meter given by "git bundle" command.
   (merge 8b95521edb jk/bundle-progress later to maint).

 * "git bundle" learned that "-" is a common way to say that the input
   comes from the standard input and/or the output goes to the
   standard output.  It used to work only for output and only from the
   root level of the working tree.
   (merge 0bbe10313e jk/bundle-use-dash-for-stdfiles later to maint).

 * Once we start running, we assumed that the list of alternate object
   databases would never change.  Hook into the machinery used to
   update the list of packfiles during runtime to update this list as
   well.
   (merge e2d003dbed ds/reprepare-alternates-when-repreparing-packfiles later to maint).

 * The code to parse "git rebase -X<opt>" was not prepared to see an
   unparsable option string, which has been corrected.
   (merge 15a4cc912e ab/fix-strategy-opts-parsing later to maint).

 * "git add -p" while the index is unmerged sometimes failed to parse
   the diff output it internally produces and died, which has been
   corrected.
   (merge 28d1122f9c jk/add-p-unmerged-fix later to maint).

 * Fix for a "ls-files --format="%(path)" that produced nonsense
   output, which was a bug in 2.38.
   (merge cfb62dd006 aj/ls-files-format-fix later to maint).

 * "git receive-pack" that responds to "git push" requests failed to
   clean a stale lockfile when killed in the middle, which has been
   corrected.
   (merge c55c30669c ps/receive-pack-unlock-before-die later to maint).

 * "git rev-parse --quiet foo@{u}", or anything that asks @{u} to be
   parsed with GET_OID_QUIETLY option, did not quietly fail, which has
   been corrected.
   (merge dfbfdc521d fc/oid-quietly-parse-upstream later to maint).

 * Transports that do not support protocol v2 did not correctly fall
   back to protocol v0 under certain conditions, which has been
   corrected.
   (merge eaa0fd6584 jk/fix-proto-downgrade-to-v0 later to maint).

 * time(2) on glib 2.31+, especially on Linux, goes out of sync with
   higher resolution timers used for gettimeofday(2) and by the
   filesystem.  Replace all calls to it with a git_time() wrapper and
   (merge 370ddcbc89 pe/time-use-gettimeofday later to maint).

 * Code clean-up to use designated initializers in parse-options API.
   (merge 353e6d4554 sg/parse-options-h-initializers later to maint).

 * A recent-ish change to allow unicode character classes to be used
   with "grep -P" triggered a JIT bug in older pcre2 libraries.
   The problematic change in Git built with these older libraries has
   been disabled to work around the bug.
   (merge 14b9a04479 mk/workaround-pcre-jit-ucp-bug later to maint).

 * The wildmatch library code unlearns exponential behaviour it
   acquired some time ago since it was borrowed from rsync.
   (merge 3dc0b7f0dc pw/wildmatch-fixes later to maint).

 * The index files can become corrupt under certain conditions when
   the split-index feature is in use, especially together with
   fsmonitor, which have been corrected.
   (merge 061dd722dc js/split-index-fixes later to maint).

 * Document what the pathname-looking strings in "rev-list --object"
   output are for and what they mean.
   (merge 15364d2a3c jk/document-rev-list-object-name later to maint).

 * Fix unnecessary truncation of generation numbers used in-core.
   (merge d3af1c193d ps/ahead-behind-truncation-fix later to maint).

 * Code clean-up around the use of the_repository.
   (merge 4a93b899c1 ab/remove-implicit-use-of-the-repository later to maint).

 * Consistently spell "Message-ID" as such, not "Message-Id".
   (merge ba4324c4e1 jc/spell-id-in-both-caps-in-message-id later to maint).

 * Correct use of an uninitialized structure member.
   (merge dc12ee77ab jx/cap-object-info-uninitialized-fix later to maint).

 * Tests had a few places where we ignored PERL_PATH and blindly used
   /usr/bin/perl, which have been corrected.
   (merge c1917156a0 jk/use-perl-path-consistently later to maint).

 * Documentation mark-up fix.
   (merge 78b6369e67 la/mfc-markup-fix later to maint).

 * Doc toolchain update to remove old workaround for AsciiDoc.
   (merge 8806120de6 fc/remove-header-workarounds-for-asciidoc later to maint).

 * The userdiff regexp patterns for various filetypes that are built
   into the system have been updated to avoid triggering regexp errors
   from UTF-8 aware regex engines.
   (merge be39144954 rs/userdiff-multibyte-regex later to maint).

 * The approxidate() API has been simplified by losing an extra
   function that did the same thing as another one.
   (merge 8a7f0b666f rs/remove-approxidate-relative later to maint).

 * Code clean-up to replace a hardcoded constant with a CPP macro.
   (merge c870de6502 rs/get-tar-commit-id-use-defined-const later to maint).

 * Doc build simplification.
   (merge 9a09ed3229 fc/doc-stop-using-manversion later to maint).

 * "git archive" run from a subdirectory mishandled attributes and
   paths outside the current directory.
   (merge 92b1dd1b9e rs/archive-from-subdirectory-fixes later to maint).

 * The code to parse capability list for v0 on-wire protocol fell into
   an infinite loop when a capability appears multiple times, which
   has been corrected.

 * Geometric repacking ("git repack --geometric=<n>") in a repository
   that borrows from an alternate object database had various corner
   case bugs, which have been corrected.
   (merge d85cd18777 ps/fix-geom-repack-with-alternates later to maint).

 * The "%GT" placeholder for the "--format" option of "git log" and
   friends caused BUG() to trigger on a commit signed with an unknown
   key, which has been corrected.
   (merge 7891e46585 jk/gpg-trust-level-fix later to maint).

 * The completion script used to use bare "read" without the "-r"
   option to read the contents of various state files, which risked
   getting confused with backslashes in them.  This has been
   corrected.
   (merge 197152098a ek/completion-use-read-r-to-read-literally later to maint).

 * A small API fix to the ort merge strategy backend.
   (merge 000c4ceca7 en/ort-finalize-after-0-merges-fix later to maint).

 * The commit object parser has been taught to be a bit more lenient
   to parse timestamps on the author/committer line with a malformed
   author/committer ident.
   (merge 90ef0f14eb jk/parse-commit-with-malformed-ident later to maint).

 * Retitle a test script with an overly narrow name.
   (merge 8bb19c14fb ob/t3501-retitle later to maint).

 * Doc update to clarify how text and eol attributes interact to
   specify the end-of-line conversion.
   (merge 6696077ace ah/doc-attributes-text later to maint).

 * Gitk updates from GfW project.
   (merge 99e70f3077 js/gitk-fixes-from-gfw later to maint).

 * "git diff --dirstat" leaked memory, which has been plugged.
   (merge 83973981eb jc/dirstat-plug-leaks later to maint).

 * "git merge-tree" reads the basic configuration, which can be used
    by git forges to disable replace-refs feature.
   (merge b6551feadf ds/merge-tree-use-config later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge f7111175df as/doc-markup-fix later to maint).
   (merge 90ff7c9898 fc/test-aggregation-clean-up later to maint).
   (merge 9b0c7f308a jc/am-doc-refer-to-format-patch later to maint).
   (merge b10cbdac4c bb/unicode-width-table-15 later to maint).
   (merge 3457b50e8c ab/retire-scripted-add-p later to maint).
   (merge d52fcf493b ds/p2000-fix-grep-sparse later to maint).
   (merge ec063d2591 ss/hashmap-typofix later to maint).
   (merge 1aaed69d11 rs/archive-mtime later to maint).
   (merge 2da2cc9b28 ob/rollback-after-commit-lock-failure later to maint).
   (merge 54dbd0933b ob/sequencer-save-head-simplify later to maint).
   (merge a93cbe8d78 ar/test-cleanup-unused-file-creation later to maint).
   (merge cc48ddd937 jk/chainlint-fixes later to maint).
   (merge 4833b08426 ow/ref-format-remove-unused-member later to maint).
   (merge d0ea2ca1cf dw/doc-submittingpatches-grammofix later to maint).
   (merge fd72637423 ar/t2024-checkout-output-fix later to maint).
   (merge d45cbe3fe0 ob/sequencer-i18n-fix later to maint).
   (merge b734fe49fd ob/messages-capitalize-exception later to maint).
   (merge ad353d7e77 ma/gittutorial-fixes later to maint).
   (merge a5855fd8d4 ar/test-cleanup-unused-file-creation-part2 later to maint).
   (merge 0c5308af30 sd/doc-gitignore-and-rm-cached later to maint).
   (merge cbb83daeaf kh/doc-interpret-trailers-updates later to maint).
   (merge 3d77fbb664 ar/config-count-tests-updates later to maint).
   (merge b7cf25c8f4 jc/t9800-fix-use-of-show-s-raw later to maint).

----------------------------------------------------------------

Changes since v2.40.0 are as follows:

Adam Johnson (1):
      ls-files: fix "--format" output of relative paths

Alex Henrie (5):
      rebase: add documentation and test for --no-rebase-merges
      rebase: deprecate --rebase-merges=""
      rebase: add a config option for --rebase-merges
      format-patch: correct documentation of --thread without an argument
      docs: rewrite the documentation of the text and eol attributes

Andreas Schwab (1):
      git-merge-tree.txt: replace spurious HTML entity

Andrei Rybak (19):
      t1005: assert output of ls-files
      t1006: assert error output of cat-file
      t1010: don't create unused files
      t1302: don't create unused file
      t1400: assert output of update-ref
      t1404: don't create unused file
      t1507: assert output of rev-parse
      t3060: fix mention of function prune_index
      t2107: fix mention of the_index.cache_changed
      t2024: fix loose/strict local base branch DWIM test
      t1300: drop duplicate test
      t1300: check stderr for "ignores pairs" tests
      t1300: add tests for missing keys
      t0300: don't create unused file
      t1300: fix config file syntax error descriptions
      t1300: don't create unused files
      t1450: don't create unused files
      t1502: don't create unused files
      t2019: don't create unused files

Andy Koppe (1):
      restore: fault --staged --worktree with merge opts

Beat Bolli (1):
      unicode: update the width tables to Unicode 15

Christian Hesse (1):
      imap-send: include strbuf.h

Clement Mabileau (1):
      branch: improve error log on branch not found by checking remotes refs

Daniel Watson (1):
      SubmittingPatches: clarify MUA discussion with "the"

Derrick Stolee (19):
      object-file: reprepare alternates when necessary
      for-each-ref: add --stdin option
      for-each-ref: explicitly test no matches
      commit-graph: refactor compute_topological_levels()
      commit-graph: simplify compute_generation_numbers()
      commit-graph: return generation from memory
      commit-reach: implement ahead_behind() logic
      for-each-ref: add ahead-behind format atom
      commit-reach: add tips_reachable_from_bases()
      p2000: remove stray '--sparse' flag from test
      fetch: download bundles once, even with --all
      ci: update 'static-analysis' to Ubuntu 22.04
      fsck: create scaffolding for rev-index checks
      fsck: check rev-index checksums
      fsck: check rev-index position values
      fsck: validate .rev file header
      fsck: verify checksums of all .bitmap files
      fsck: use local repository
      merge-tree: load default git config

Edwin Kofler (1):
      completion: suppress unwanted unescaping of `read`

Elijah Newren (94):
      treewide: ensure one of the appropriate headers is sourced first
      treewide: remove unnecessary git-compat-util.h includes in headers
      treewide: remove unnecessary cache.h includes
      treewide: remove unnecessary cache.h includes in source files
      alloc.h: move ALLOC_GROW() functions from cache.h
      hash.h: move some oid-related declarations from cache.h
      hex.h: move some hex-related declarations from cache.h
      cache.h: remove dependence on hex.h; make other files include it explicitly
      pretty.h: move has_non_ascii() declaration from commit.h
      ident.h: move ident-related declarations out of cache.h
      object.h: stop depending on cache.h; make cache.h depend on object.h
      dir.h: refactor to no longer need to include cache.h
      object-store.h: move struct object_info from cache.h
      replace-object.h: move read_replace_refs declaration from cache.h to here
      treewide: replace cache.h with more direct headers, where possible
      Remove unnecessary includes of builtin.h
      diff.h: remove unnecessary include of object.h
      t2021: fix platform-specific leftover cruft
      unpack-trees: heed requests to overwrite ignored files
      dir: separate public from internal portion of dir_struct
      dir: add a usage note to exclude_per_dir
      dir: mark output only fields of dir_struct as such
      unpack-trees: clean up some flow control
      sparse-checkout: avoid using internal API of unpack-trees
      sparse-checkout: avoid using internal API of unpack-trees, take 2
      unpack_trees: start splitting internal fields from public API
      unpack-trees: mark fields only used internally as internal
      unpack-trees: rewrap a few overlong lines from previous patch
      unpack-trees: special case read-tree debugging as internal usage
      unpack-trees: add usage notices around df_conflict_entry
      treewide: remove unnecessary cache.h inclusion from a few headers
      treewide: be explicit about dependence on gettext.h
      treewide: remove unnecessary inclusion of gettext.h
      treewide: remove unnecessary cache.h inclusion from several sources
      environment: move comment_line_char from cache.h
      abspath.h: move absolute path functions from cache.h
      cache.h: remove expand_user_path()
      path.h: move function declarations for path.c functions from cache.h
      wrapper.h: move declarations for wrapper.c functions from cache.h
      treewide: remove unnecessary includes of cache.h
      environment.h: move declarations for environment.c functions from cache.h
      treewide: remove cache.h inclusion due to environment.h changes
      setup.h: move declarations for setup.c functions from cache.h
      treewide: remove cache.h inclusion due to setup.h changes
      write-or-die.h: move declarations for write-or-die.c functions from cache.h
      csum-file.h: remove unnecessary inclusion of cache.h
      treewide: be explicit about dependence on trace.h & trace2.h
      treewide: be explicit about dependence on advice.h
      treewide: be explicit about dependence on convert.h
      treewide: be explicit about dependence on pack-revindex.h
      treewide: be explicit about dependence on oid-array.h
      treewide: be explicit about dependence on mem-pool.h
      treewide: remove unnecessary cache.h inclusion
      object-name.h: move declarations for object-name.c functions from cache.h
      treewide: remove cache.h inclusion due to object-name.h changes
      git-zlib: move declarations for git-zlib functions from cache.h
      treewide: remove cache.h inclusion due to git-zlib changes
      object-file.h: move declarations for object-file.c functions from cache.h
      treewide: remove cache.h inclusion due to object-file.h changes
      object.h: move some inline functions and defines from cache.h
      treewide: remove cache.h inclusion due to object.h changes
      editor: move editor-related functions and declarations into common file
      treewide: remove cache.h inclusion due to editor.h changes
      pager.h: move declarations for pager.c functions from cache.h
      treewide: remove cache.h inclusion due to pager.h changes
      cache.h: remove unnecessary includes
      treewide: remove double forward declaration of read_in_full
      treewide: reduce includes of cache.h in other headers
      mailmap, quote: move declarations of global vars to correct unit
      protocol.h: move definition of DEFAULT_GIT_PORT from cache.h
      treewide: be explicit about dependence on strbuf.h
      symlinks.h: move declarations for symlinks.c functions from cache.h
      packfile.h: move pack_window and pack_entry from cache.h
      server-info.h: move declarations for server-info.c functions from cache.h
      copy.h: move declarations for copy.c functions from cache.h
      base85.h: move declarations for base85.c functions from cache.h
      pkt-line.h: move declarations for pkt-line.c functions from cache.h
      match-trees.h: move declarations for match-trees.c functions from cache.h
      ws.h: move declarations for ws.c functions from cache.h
      versioncmp.h: move declarations for versioncmp.c functions from cache.h
      dir.h: move DTYPE defines from cache.h
      tree-diff.c: move S_DIFFTREE_IFXMIN_NEQ define from cache.h
      hash-ll.h: split out of hash.h to remove dependency on repository.h
      cache,tree: move cmp_cache_name_compare from tree.[ch] to read-cache.c
      cache,tree: move basic name compare functions from read-cache to tree
      treewide: remove cache.h inclusion due to previous changes
      cache.h: remove unnecessary headers
      fsmonitor: reduce includes of cache.h
      commit.h: reduce unnecessary includes
      object-store.h: reduce unnecessary includes
      diff.h: reduce unnecessary includes
      reftable: ensure git-compat-util.h is the first (indirect) include
      merge-ort: fix calling merge_finalize() with no intermediate merge
      t5583: fix shebang line

Emily Shaffer (1):
      mailmap: change primary address for Emily Shaffer

Eric Sunshine (1):
      tests: diagnose unclosed here-doc in chainlint.pl

Eric Wong (3):
      commit-reach: avoid NULL dereference
      fetch: support hideRefs to speed up connectivity checks
      fetch: pass --no-write-fetch-head to subprocesses

Fangyi Zhou (1):
      rebase: fix capitalisation autoSquash in i18n string

Felipe Contreras (16):
      advice: add diverging advice for novices
      test: simplify counts aggregation
      test: don't print aggregate-results command
      object-name: fix quiet @{u} parsing
      completion: prompt: use generic colors
      doc: remove GNU troff workaround
      doc: remove manpage-base-url workaround
      doc: asciidoc: remove custom header macro
      doc: simplify man version
      doc: set actual revdate for manpages
      doc: git-checkout: trivial callout cleanup
      doc: git-checkout: reorganize examples
      doc: remove custom callouts format
      doc: manpage: remove maximum title length
      doc: doc-diff: specify date
      test: rev-parse-upstream: add missing cmp

Glen Choo (10):
      config.c: plumb config_source through static fns
      config.c: don't assign to "cf_global" directly
      config.c: create config_reader and the_reader
      config.c: plumb the_reader through callbacks
      config.c: remove current_config_kvi
      config.c: remove current_parsing_scope
      config: report cached filenames in die_bad_number()
      config.c: rename "struct config_source cf"
      clone: error specifically with --local and symlinked objects
      setup: trace bare repository setups

Han Xin (2):
      negotiator/default: avoid stack overflow
      negotiator/skipping: fix some problems in mark_common()

Jacob Keller (2):
      blame: allow --contents to work with non-HEAD commit
      blame: use different author name for fake commit generated by --contents

Jeff King (90):
      ref-filter: drop unused atom parameter from get_worktree_path()
      ls-refs: drop config caching
      serve: use repository pointer to get config
      serve: mark unused parameters in virtual functions
      object-name: mark unused parameters in disambiguate callbacks
      http-backend: mark argc/argv unused
      http-backend: mark unused parameters in virtual functions
      ref-filter: mark unused callback parameters
      mark "pointless" data pointers in callbacks
      run-command: mark error routine parameters as unused
      mark unused parameters in signal handlers
      list-objects: mark unused callback parameters
      for_each_object: mark unused callback parameters
      prio-queue: mark unused parameters in comparison functions
      notes: mark unused callback parameters
      fetch-pack: mark unused parameter in callback function
      rewrite_parents(): mark unused callback parameter
      for_each_commit_graft(): mark unused callback parameter
      userformat_want_item(): mark unused parameter
      run_processes_parallel: mark unused callback parameters
      help: mark unused parameter in git_unknown_cmd_config()
      fsck: factor out index fsck
      fsck: check index files in all worktrees
      fsck: mention file path for index errors
      fsck: check even zero-entry index files
      drop pure pass-through config callbacks
      bundle: turn on --all-progress-implied by default
      bundle: let "-" mean stdin for reading operations
      bundle: document handling of "-" as stdin
      parse-options: consistently allocate memory in fix_filename()
      parse-options: use prefix_filename_except_for_dash() helper
      diff: factor out src/dst prefix setup
      t4013: add tests for diff prefix options
      diff: add --default-prefix option
      format-patch: do not respect diff.noprefix
      format-patch: add format.noprefix option
      add-patch: handle "* Unmerged path" lines
      http-push: prefer CURLOPT_UPLOAD to CURLOPT_PUT
      http: prefer CURLOPT_SEEKFUNCTION to CURLOPT_IOCTLFUNCTION
      range-diff: drop useless "offset" variable from read_patches()
      http: support CURLOPT_PROTOCOLS_STR
      range-diff: handle unterminated lines in read_patches()
      range-diff: use ssize_t for parsed "len" in read_patches()
      rebase: prefer --default-prefix to --{src,dst}-prefix for format-patch
      mailmap: drop debugging code
      http: drop unused parameter from start_object_request()
      http: mark unused parameter in fill_active_slot() callbacks
      transport: mark unused parameters in fetch_refs_from_bundle()
      git_connect(): fix corner cases in downgrading v2 to v0
      fast-export: drop const when storing anonymized values
      fast-export: simplify initialization of anonymized hashmaps
      fast-export: factor out anonymized_entry creation
      fast-export: de-obfuscate --anonymize-map handling
      fast-export: drop data parameter from anonymous generators
      fast-export: drop unused parameter from anonymize_commit_message()
      Makefile: force -O0 when compiling with SANITIZE=leak
      pack-redundant: escalate deprecation warning to an error
      docs: document caveats of rev-list's object-name output
      fast-import: fix file access when run from subdir
      builtins: always pass prefix to parse_options()
      builtins: annotate always-empty prefix parameters
      builtins: mark unused prefix parameters
      mark "argv" as unused when we check argc
      t/helper: mark unused argv/argc arguments
      parse-options: drop parse_opt_unknown_cb()
      pack-redundant: document deprecation
      tests: run internal chain-linter under "make test"
      tests: replace chainlint subshell with a function
      tests: drop here-doc check from internal chain-linter
      tests: skip test_eval_ in internal chain-lint
      t/lib-httpd: pass PERL_PATH to CGI scripts
      v0 protocol: fix infinite loop when parsing multi-valued capabilities
      t5512: stop referring to "v1" protocol
      v0 protocol: fix sha1/sha256 confusion for capabilities^{}
      t5512: add v2 support for "ls-remote --symref" test
      t5512: allow any protocol version for filtered symref test
      t5512: test "ls-remote --heads --symref" filtering with v0 and v2
      v0 protocol: use size_t for capability length/offset
      gpg-interface: set trust level of missing key to "undefined"
      notes: clean up confusing NULL checks in init_notes()
      fetch_bundle_uri(): drop pointless NULL check
      t4212: avoid putting git on left-hand side of pipe
      parse_commit(): parse timestamp from end of line
      parse_commit(): handle broken whitespace-only timestamp
      parse_commit(): describe more date-parsing failure modes
      doc-diff: drop SOURCE_DATE_EPOCH override
      t7001: avoid git on upstream of pipe
      t7001: use "ls-files --format" instead of "cut"
      t: drop "verbose" helper function
      t/lib-httpd: make CGIPassAuth support conditional

Jiang Xin (5):
      github-actions: run gcc-8 on ubuntu-20.04 image
      ci: remove the pipe after "p4 -V" to catch errors
      ci: use the same version of p4 on both Linux and macOS
      ci: install python on ubuntu
      object-info: init request_info before reading arg

Johannes Schindelin (29):
      compat/win32/syslog: fix use-after-realloc
      nedmalloc: avoid new compile error
      t0033: GETTEXT_POISON fix
      t0003: GETTEXT_POISON fix, part 1
      t0003: GETTEXT_POISON fix, conclusion
      t5619: GETTEXT_POISON fix
      t5604: GETTEXT_POISON fix, part 1
      t5604: GETTEXT_POISON fix, conclusion
      clone.c: avoid "exceeds maximum object size" error with GCC v12.x
      split-index & fsmonitor: demonstrate a bug
      split-index; stop abusing the `base_oid` to strip the "link" extension
      fsmonitor: avoid overriding `cache_changed` bits
      unpack-trees: take care to propagate the split-index flag
      t3701: we don't need no Perl for `add -i` anymore
      t5563: prevent "ambiguous redirect"
      apply --reject: overwrite existing `.rej` symlink if it exists
      gettext: avoid using gettext if the locale dir is not present
      tests: avoid using `test_i18ncmp`
      Git 2.31.8
      Git 2.32.7
      Git 2.33.8
      Git 2.34.8
      Git 2.35.8
      Git 2.36.6
      Git 2.37.7
      Git 2.38.5
      Git 2.39.3
      Git 2.40.1
      gitk: prevent overly long command lines

John Cai (2):
      name-rev: make --stdin hidden
      attr: teach "--attr-source=<tree>" global option to "git"

John Keeping (1):
      format-patch: output header for empty commits

Josh Soref (1):
      subtree: support long global flags

Jouke Witteveen (1):
      send-email docs: Remove mention of discontinued gmail feature

Junio C Hamano (33):
      gpg-interface: lazily initialize and read the configuration
      bundle: don't blindly apply prefix_filename() to "-"
      Start the 2.41 cycle
      The second batch
      am: refer to format-patch in the documentation
      The third batch
      http.c: clear the 'finished' member once we are done with it
      The fourth batch
      The fifth batch
      The sixth batch
      e-mail workflow: Message-ID is spelled with ID in both capital letters
      The seventh batch
      clone: propagate object-format when cloning from void
      The eighth batch
      The ninth batch
      The tenth batch
      The eleventh batch
      The twelfth batch
      The thirteenth batch
      doc: GIT_DEFAULT_HASH is and will be ignored during "clone"
      The fourteenth batch
      The fifteenth batch
      The sixteenth batch
      diff: refactor common tail part of dirstat computation
      diff: plug leaks in dirstat
      t9800: correct misuse of 'show -s --raw' in a test
      The seventeenth batch
      The eighteenth batch
      Git 2.41-rc0
      A bit more before -rc1
      send-email: clear the $message_id after validation
      t9001: mark the script as no longer leak checker clean
      Git 2.41-rc1

Kristoffer Haugsbakk (5):
      config: tell the user that we expect an ASCII character
      doc: interpret-trailers: don’t use heredoc in examples
      doc: interpret-trailers: use input redirection
      doc: interpret-trailers: don’t use deprecated config
      doc: interpret-trailers: fix example

Linus Arver (1):
      MyFirstContribution: render literal *

M Hickford (3):
      credential/wincred: include wincred.h
      credential/wincred: store password_expiry_utc
      credential: new attribute oauth_refresh_token

Martin Ågren (2):
      gittutorial: drop early mention of origin
      gittutorial: wrap literal examples in backticks

Mathias Krause (1):
      grep: work around UTF-8 related JIT bug in PCRE2 <= 10.34

Matthew John Cheetham (3):
      t5563: add tests for basic and anoymous HTTP access
      http: read HTTP WWW-Authenticate response headers
      credential: add WWW-Authenticate header to cred requests

Maxim Cournoyer (3):
      send-email: extract execute_cmd from recipients_cmd
      send-email: add --header-cmd, --no-header-cmd options
      send-email: detect empty blank lines in command output

Michael J Gruber (1):
      t3070: make chain lint tester happy

Michael Strawbridge (2):
      send-email: refactor header generation functions
      send-email: expose header information to git-send-email's sendemail-validate hook

Mike Hommey (1):
      Handle some compiler versions containing a dash

Nico Rieck (1):
      gitk: escape file paths before piping to git log

Oswald Buddenhagen (5):
      sequencer: remove pointless rollback_lock_file()
      sequencer: rewrite save_head() in terms of write_message()
      sequencer: actually translate report in do_exec()
      messages: capitalization and punctuation exceptions
      t/t3501-revert-cherry-pick.sh: clarify scope of the file

Patrick Steinhardt (27):
      receive-pack: fix stale packfile locks when dying
      fetch: move reference width calculation into `display_state`
      fetch: move output format into `display_state`
      fetch: pass the full local reference name to `format_display`
      fetch: centralize handling of per-reference format
      fetch: centralize logic to print remote URL
      fetch: centralize printing of reference updates
      commit-graph: fix truncated generation numbers
      midx: fix segfault with no packs and invalid preferred pack
      repack: fix trying to use preferred pack in alternates
      repack: fix generating multi-pack-index with only non-local packs
      pack-objects: split out `--stdin-packs` tests into separate file
      pack-objects: fix error when packing same pack twice
      pack-objects: fix error when same packfile is included and excluded
      pack-objects: extend test coverage of `--stdin-packs` with alternates
      t/helper: allow chmtime to print verbosely without modifying mtime
      repack: honor `-l` when calculating pack geometry
      repack: disable writing bitmaps when doing a local repack
      fetch: fix `--no-recurse-submodules` with multi-remote fetches
      fetch: split out tests for output format
      fetch: add a test to exercise invalid output formats
      fetch: print left-hand side when fetching HEAD:foo
      fetch: refactor calculation of the display table width
      fetch: introduce `display_format` enum
      fetch: lift up parsing of "fetch.output" config variable
      fetch: move option related variables into main function
      fetch: introduce machine-parseable "porcelain" output format

Paul Eggert (1):
      git-compat-util: use gettimeofday(2) for time(2)

Phillip Wood (8):
      wildmatch: fix exponential behavior
      wildmatch: avoid undefined behavior
      wildmatch: hide internal return values
      rebase: stop reading and writing unnecessary strategy state
      sequencer: use struct strvec to store merge strategy options
      rebase -m: cleanup --strategy-option handling
      rebase -m: fix serialization of strategy options
      rebase: remove a couple of redundant strategy tests

Raghul Nanth A (1):
      describe: enable sparse index for describe

René Scharfe (6):
      archive: improve support for running in subdirectory
      t5000: use check_mtime()
      userdiff: support regexec(3) with multi-byte support
      date: remove approxidate_relative()
      get-tar-commit-id: use TYPEFLAG_GLOBAL_HEADER instead of magic value
      test-ctype: check EOF

Robin Jarry (1):
      send-email: export patch counters in validate environment

Rubén Justo (10):
      bisect: fix "reset" when branch is checked out elsewhere
      worktree: introduce is_shared_symref()
      branch: fix die_if_checked_out() when ignore_current_worktree
      rebase: refuse to switch to a branch already checked out elsewhere (test)
      switch: reject if the branch is already checked out elsewhere (test)
      branch: test for failures while renaming branches
      branch: use get_worktrees() in copy_or_rename_branch()
      branch: description for orphan branch errors
      branch: rename orphan branches in any worktree
      branch: avoid unnecessary worktrees traversals

SZEDER Gábor (6):
      treewide: include parse-options.h in source files
      treewide: remove unnecessary inclusions of parse-options.h from headers
      parse-options.h: use consistent name for the callback parameters
      parse-options.h: rename _OPT_CONTAINS_OR_WITH()'s parameters
      parse-options.h: use designated initializers in OPT_* macros
      cocci: remove 'unused.cocci'

Shuqi Liang (3):
      write-tree: integrate with sparse index
      t1092: add tests for `git diff-files`
      diff-files: integrate with sparse index

Siddharth Singh (1):
      hashmap.h: fix minor typo

Sohom Datta (1):
      docs: clarify git rm --cached function in gitignore note

Stanislav Malishevskiy (1):
      http: add support for different sslcert and sslkey types.

Tao Klerks (1):
      mergetool: new config guiDefault supports auto-toggling gui by DISPLAY

Taylor Blau (37):
      commit-graph: introduce `ensure_generations_valid()`
      pack-write.c: plug a leak in stage_tmp_packfiles()
      t5325: mark as leak-free
      pack-revindex: make `load_pack_revindex` take a repository
      pack-revindex: introduce GIT_TEST_REV_INDEX_DIE_ON_DISK
      pack-revindex: introduce `pack.readReverseIndex`
      config: enable `pack.writeReverseIndex` by default
      t: invert `GIT_TEST_WRITE_REV_INDEX`
      t1300: demonstrate failure when renaming sections with long lines
      config: avoid fixed-sized buffer when renaming/deleting a section
      config.c: avoid integer truncation in `copy_or_rename_section_in_file()`
      config.c: disallow overly-long lines in `copy_or_rename_section_in_file()`
      Git 2.30.9
      pack-write.c: plug a leak in stage_tmp_packfiles()
      builtin/repack.c: fix incorrect reference to '-C'
      builtin/gc.c: ignore cruft packs with `--keep-largest-pack`
      t/t5304-prune.sh: prepare for `gc --cruft` by default
      t/t6501-freshen-objects.sh: prepare for `gc --cruft` by default
      t/t6500-gc.sh: refactor cruft pack tests
      t/t6500-gc.sh: add additional test cases
      t/t9300-fast-import.sh: prepare for `gc --cruft` by default
      builtin/gc.c: make `gc.cruftPacks` enabled by default
      repository.h: drop unused `gc_cruft_packs`
      string-list: multi-delimiter `string_list_split_in_place()`
      string-list: introduce `string_list_setlen()`
      t/helper/test-hashmap.c: avoid using `strtok()`
      t/helper/test-oidmap.c: avoid using `strtok()`
      t/helper/test-json-writer.c: avoid using `strtok()`
      banned.h: mark `strtok()` and `strtok_r()` as banned
      credential.c: store "wwwauth[]" values in `credential_read()`
      t/lib-credential.sh: ensure credential helpers handle long headers
      contrib/credential: avoid fixed-size buffer in osxkeychain
      contrib/credential: remove 'gnome-keyring' credential helper
      contrib/credential: .gitignore libsecret build artifacts
      contrib/credential: avoid fixed-size buffer in libsecret
      contrib/credential: embiggen fixed-size buffer in wincred
      run-command.c: fix missing include under `NO_PTHREADS`

Teng Long (1):
      push: introduce '--branches' option

William Sprent (2):
      builtin/sparse-checkout: remove NEED_WORK_TREE flag
      builtin/sparse-checkout: add check-rules command

ZheNing Hu (2):
      receive-pack: fix funny ref error messsage
      push: allow delete single-level ref

brian m. carlson (1):
      upload-pack: advertise capabilities when cloning empty repos

Ævar Arnfjörð Bjarmason (33):
      auto-crlf tests: don't lose exit code in loops and outside tests
      t/lib-patch-mode.sh: fix ignored exit codes
      tests: don't lose exit status with "(cd ...; test <op> $(git ...))"
      tests: don't lose "git" exit codes in "! ( git ... | grep )"
      tests: don't lose exit status with "test <op> $(git ...)"
      tests: don't lose misc "git" exit codes
      sequencer.c: fix overflow & segfault in parse_strategy_opts()
      cocci: remove dead rule from "the_repository.pending.cocci"
      cocci: fix incorrect & verbose "the_repository" rules
      cocci: sort "the_repository" rules by header
      cocci: add missing "the_repository" macros to "pending"
      cocci: apply the "cache.h" part of "the_repository.pending"
      cocci: apply the "commit-reach.h" part of "the_repository.pending"
      cocci: apply the "commit.h" part of "the_repository.pending"
      cocci: apply the "diff.h" part of "the_repository.pending"
      cocci: apply the "object-store.h" part of "the_repository.pending"
      cocci: apply the "pretty.h" part of "the_repository.pending"
      cocci: apply the "packfile.h" part of "the_repository.pending"
      cocci: apply the "promisor-remote.h" part of "the_repository.pending"
      cocci: apply the "refs.h" part of "the_repository.pending"
      cocci: apply the "rerere.h" part of "the_repository.pending"
      cocci: apply the "revision.h" part of "the_repository.pending"
      post-cocci: adjust comments for recent repo_* migration
      libs: use "struct repository *" argument, not "the_repository"
      config tests: cover blind spots in git_die_config() tests
      config tests: add "NULL" tests for *_get_value_multi()
      config API: add and use a "git_config_get()" family of functions
      versioncmp.c: refactor config reading next commit
      config API: have *_multi() return an "int" and take a "dest"
      for-each-repo: error on bad --config
      config API users: test for *_get_value_multi() segfaults
      config API: add "string" version of *_value_multi(), fix segfaults
      for-each-repo: with bad config, don't conflate <path> and <cmd>

Øystein Walle (2):
      ref-filter: remove unused ref_format member
      branch, for-each-ref, tag: add option to omit empty lines


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.41.0-rc0
@ 2023-05-16  3:42  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2023-05-16  3:42 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

An early preview release Git v2.41.0-rc0 is now available for
testing at the usual places.  It is comprised of 507 non-merge
commits since v2.40.0, contributed by 74 people, 23 of which are
new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.41.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.40.0 are as follows.
Welcome to the Git development community!

  Adam Johnson, André Baptista, Andy Koppe, Clement Mabileau,
  Cristian Le, Daniel Watson, D. Ben Knoble, Edwin Kofler, Jonas
  Haag, Jouke Witteveen, Matthias Görgens, Maxim Cournoyer,
  Michael Henry, Michael Strawbridge, Nico Rieck, Raghul Nanth
  A, Rolf Eike Beer, Shuqi Liang, Siddharth Singh, Stanislav
  Malishevskiy, Stephane Odul, Vítor Pinho, and Xin Xing.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alex Henrie, Andreas Schwab, Andrei
  Rybak, Beat Bolli, Derrick Stolee, Elijah Newren, Emily Shaffer,
  Eric Sunshine, Eric Wong, Fangyi Zhou, Felipe Contreras, Glen
  Choo, Han Xin, Jacob Keller, Jeff King, Jiang Xin, Joakim
  Petersen, Johannes Schindelin, Johannes Sixt, John Cai, John
  Keeping, Josh Soref, Junio C Hamano, Kristoffer Haugsbakk, Linus
  Arver, Linus Torvalds, Martin Ågren, Mathias Krause, Matthew
  John Cheetham, M Hickford, Michael J Gruber, Mike Hommey, Oswald
  Buddenhagen, Øystein Walle, Patrick Steinhardt, Paul Eggert,
  Philippe Blain, Phillip Wood, René Scharfe, Robin Jarry,
  Rubén Justo, RyotaK, Sohom Datta, SZEDER Gábor, Tao Klerks,
  Taylor Blau, Teng Long, Torsten Bögershausen, William Sprent,
  and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.41 Release Notes (draft)
===============================

UI, Workflows & Features

 * Allow information carried on the WWW-AUthenticate header to be
   passed to the credential helpers.

 * A new "fetch.hideRefs" option can be used to exclude specified refs
   from "rev-list --objects --stdin --not --all" traversal for
   checking object connectivity, most useful when there are many
   unrelated histories in a single repository.

 * "git push" has been taught to allow deletion of refs with one-level
   names to help repairing a repository who acquired such a ref by
   mistake.  In general, we don't encourage use of such a ref, and
   creation or update to such a ref is rejected as before.

 * Allow "git bisect reset" to check out the original branch when the
   branch is already checked out in a different worktree linked to the
   same repository.

 * A few subcommands have been taught to stop users from working on a
   branch that is being used in another worktree linked to the same
   repository.

 * "git format-patch" learned to write a log-message only output file
   for empty commits.

 * "git format-patch" honors the src/dst prefixes set to nonstandard
   values with configuration variables like "diff.noprefix", causing
   receiving end of the patch that expects the standard -p1 format to
   break.  "format-patch" has been taught to ignore end-user configuration
   and always use the standard prefixes.

   This is a backward compatibility breaking change.

 * Lift the limitation that colored prompts can only be used with
   PROMPT_COMMAND mode.

 * "git blame --contents=<file> <rev> -- <path>" used to be forbidden,
   but now it finds the origins of lines starting at <file> contents
   through the history that leads to <rev>.

 * "git pack-redundant" gave a warning when run, as the command has
   outlived its usefulness long ago and is nominated for future
   removal.  Now we escalate to give an error.

 * "git clone" from an empty repository learned to propagate the
   choice of the hash algorithm from the source repository to the
   newly created repository.

 * "git mergetool" and "git difftool" learns a new configuration
   guiDefault to optionally favor configured guitool over non-gui-tool
   automatically when $DISPLAY is set.

 * "git branch -d origin/master" would say "no such branch", but it is
   likely a missed "-r" if refs/remotes/origin/master exists.  The
   command has been taught to give such a hint in its error message.

 * Clean-up of the code path that deals with merge strategy option
   handling in "git rebase".

 * "git clone --local" stops copying from an original repository that
   has symbolic links inside its $GIT_DIR; an error message when that
   happens has been updated.

 * "git branch --format=..." and "git format-patch --format=..."
   learns "--omit-empty" to hide refs that whose formatting result
   becomes an empty string from the output.

 * The sendemail-validate validate hook learned to pass the total
   number of input files and where in the sequence each invocation is
   via environment variables.

 * When "gc" needs to retain unreachable objects, packing them into
   cruft packs (instead of exploding them into loose object files) has
   been offered as a more efficient option for some time.  Now the use
   of cruft packs has been made the default and no longer considered
   an experimental feature.

 * The output given by "git blame" that attributes a line to contents
   taken from the file specified by the "--contents" option shows it
   differently from a line attributed to the working tree file.

 * "git send-email" learned to give the e-mail headers to the validate
   hook by passing an extra argument from the command line.

 * The credential subsystem learns to help OAuth framework.

 * The titles of manual pages used to be chomped at an unreasonably
   short limit, which has been removed.

 * Error messages given when working on an unborn branch that is
   checked out in another worktree have been improved.

 * The documentation was misleading about the interaction between
   GIT_DEFAULT_HASH and "git clone", which has been clarified to
   stress that the variable is to be ignored by the command.

 * "git send-email" learned "--header-cmd=<cmd>" that can inject
   arbitrary e-mail header lines to the outgoing messages.

 * "git fsck" learned to detect bit-flip breakages in the reachability
   bitmap files.

 * The "--stdin" option of "git name-rev" has been replaced with
   the "--annotate-stdin" option more than a year ago.  We stop
   advertising it in the "git name-rev -h" output.

 * "git push --all" gained an alias "git push --branches".

 * "git fetch" learned the "--porcelain" option that emits what it did
   in a machine-parseable format.


Performance, Internal Implementation, Development Support etc.

 * Code clean-up to clarify directory traversal API.

 * Code clean-up to clarify the rule that "git-compat-util.h" must be
   the first to be included.

 * More work towards -Wunused.

 * Instead of forcing each command to choose to honor GPG related
   configuration variables, make the subsystem lazily initialize
   itself.

 * Remove workaround for ancient versions of DocBook to make it work
   correctly with groff, which has not been necessary since docbook
   1.76 from 2010.

 * Code clean-up to include and/or uninclude parse-options.h file as
   needed.

 * The code path that reports what "git fetch" did to each ref has
   been cleaned up.

 * Assorted config API updates.

 * A few configuration variables to tell the cURL library that
   different types of ssl-cert and ssl-key are in use have been added.

 * Split key function and data structure definitions out of cache.h to
   new header files and adjust the users.

 * "git fetch --all" does not have to download and handle the same
   bundleURI over and over, which has been corrected.

 * "git sparse-checkout" command learns a debugging aid for the sparse
   rule definitions.

 * "git write-tree" learns to work better with sparse-index.

 * The on-disk reverse index that allows mapping from the pack offset
   to the object name for the object stored at the offset has been
   enabled by default.

 * "git fsck" learned to validate the on-disk pack reverse index files.

 * strtok() and strtok_r() are banned in this codebase.

 * The detect-compilers script to help auto-tweaking the build system
   had trouble working with compilers whose version number has extra
   suffixes.  The script has been taught that certain suffixes (like
   "-win32" in "gcc 10-win32") can be safely stripped as they share
   the same features and bugs with the version without the suffix.

 * ctype tests have been taught to test EOF, too.

 * The implementation of credential helpers used fgets() over fixed
   size buffers to read protocol messages, causing the remainder of
   the folded long line to trigger unexpected behaviour, which has
   been corrected.

 * The implementation of the default "negotiator", used to find common
   ancestor over the network for object tranfer, used to be recursive;
   it was updated to be iterative to conserve stackspace usage.

 * Our custom callout formatter is no longer used in the documentation
   formatting toolchain, as the upstream default ones give better
   output these days.

 * The tracing mechanism learned to notice and report when
   auto-discovered bare repositories are being used, as allowing so
   without explicitly stating the user intends to do so (with setting
   GIT_DIR for example) can be used with social engineering as an
   attack vector.

 * "git diff-files" learned not to expand sparse-index unless needed.


Fixes since v2.40
-----------------

 * "git fsck" learned to check the index files in other worktrees,
   just like "git gc" honors them as anchoring points.
   (merge 8d3e7eac52 jk/fsck-indices-in-worktrees later to maint).

 * Fix a segfaulting loop.  The function and its caller may need
   further clean-up.
   (merge c5773dc078 ew/commit-reach-clean-up-flags-fix later to maint).

 * "git restore" supports options like "--ours" that are only
   meaningful during a conflicted merge, but these options are only
   meaningful when updating the working tree files.  These options are
   marked to be incompatible when both "--staged" and "--worktree" are
   in effect.
   (merge ee8a88826a ak/restore-both-incompatible-with-conflicts later to maint).

 * Simplify UI to control progress meter given by "git bundle" command.
   (merge 8b95521edb jk/bundle-progress later to maint).

 * "git bundle" learned that "-" is a common way to say that the input
   comes from the standard input and/or the output goes to the
   standard output.  It used to work only for output and only from the
   root level of the working tree.
   (merge 0bbe10313e jk/bundle-use-dash-for-stdfiles later to maint).

 * Once we start running, we assumed that the list of alternate object
   databases would never change.  Hook into the machinery used to
   update the list of packfiles during runtime to update this list as
   well.
   (merge e2d003dbed ds/reprepare-alternates-when-repreparing-packfiles later to maint).

 * The code to parse "git rebase -X<opt>" was not prepared to see an
   unparsable option string, which has been corrected.
   (merge 15a4cc912e ab/fix-strategy-opts-parsing later to maint).

 * "git add -p" while the index is unmerged sometimes failed to parse
   the diff output it internally produces and died, which has been
   corrected.
   (merge 28d1122f9c jk/add-p-unmerged-fix later to maint).

 * Fix for a "ls-files --format="%(path)" that produced nonsense
   output, which was a bug in 2.38.
   (merge cfb62dd006 aj/ls-files-format-fix later to maint).

 * "git receive-pack" that responds to "git push" requests failed to
   clean a stale lockfile when killed in the middle, which has been
   corrected.
   (merge c55c30669c ps/receive-pack-unlock-before-die later to maint).

 * "git rev-parse --quiet foo@{u}", or anything that asks @{u} to be
   parsed with GET_OID_QUIETLY option, did not quietly fail, which has
   been corrected.
   (merge dfbfdc521d fc/oid-quietly-parse-upstream later to maint).

 * Transports that do not support protocol v2 did not correctly fall
   back to protocol v0 under certain conditions, which has been
   corrected.
   (merge eaa0fd6584 jk/fix-proto-downgrade-to-v0 later to maint).

 * time(2) on glib 2.31+, especially on Linux, goes out of sync with
   higher resolution timers used for gettimeofday(2) and by the
   filesystem.  Replace all calls to it with a git_time() wrapper and
   (merge 370ddcbc89 pe/time-use-gettimeofday later to maint).

 * Code clean-up to use designated initializers in parse-options API.
   (merge 353e6d4554 sg/parse-options-h-initializers later to maint).

 * A recent-ish change to allow unicode character classes to be used
   with "grep -P" triggered a JIT bug in older pcre2 libraries.
   The problematic change in Git built with these older libraries has
   been disabled to work around the bug.
   (merge 14b9a04479 mk/workaround-pcre-jit-ucp-bug later to maint).

 * The wildmatch library code unlearns exponential behaviour it
   acquired some time ago since it was borrowed from rsync.
   (merge 3dc0b7f0dc pw/wildmatch-fixes later to maint).

 * The index files can become corrupt under certain conditions when
   the split-index feature is in use, especially together with
   fsmonitor, which have been corrected.
   (merge 061dd722dc js/split-index-fixes later to maint).

 * Document what the pathname-looking strings in "rev-list --object"
   output are for and what they mean.
   (merge 15364d2a3c jk/document-rev-list-object-name later to maint).

 * Fix unnecessary truncation of generation numbers used in-core.
   (merge d3af1c193d ps/ahead-behind-truncation-fix later to maint).

 * Code clean-up around the use of the_repository.
   (merge 4a93b899c1 ab/remove-implicit-use-of-the-repository later to maint).

 * Consistently spell "Message-ID" as such, not "Message-Id".
   (merge ba4324c4e1 jc/spell-id-in-both-caps-in-message-id later to maint).

 * Correct use of an uninitialized structure member.
   (merge dc12ee77ab jx/cap-object-info-uninitialized-fix later to maint).

 * Tests had a few places where we ignored PERL_PATH and blindly used
   /usr/bin/perl, which have been corrected.
   (merge c1917156a0 jk/use-perl-path-consistently later to maint).

 * Documentation mark-up fix.
   (merge 78b6369e67 la/mfc-markup-fix later to maint).

 * Doc toolchain update to remove old workaround for AsciiDoc.
   (merge 8806120de6 fc/remove-header-workarounds-for-asciidoc later to maint).

 * The userdiff regexp patterns for various filetypes that are built
   into the system have been updated to avoid triggering regexp errors
   from UTF-8 aware regex engines.
   (merge be39144954 rs/userdiff-multibyte-regex later to maint).

 * The approxidate() API has been simplified by losing an extra
   function that did the same thing as another one.
   (merge 8a7f0b666f rs/remove-approxidate-relative later to maint).

 * Code clean-up to replace a hardcoded constant with a CPP macro.
   (merge c870de6502 rs/get-tar-commit-id-use-defined-const later to maint).

 * Doc build simplification.
   (merge 9a09ed3229 fc/doc-stop-using-manversion later to maint).

 * "git archive" run from a subdirectory mishandled attributes and
   paths outside the current directory.
   (merge 92b1dd1b9e rs/archive-from-subdirectory-fixes later to maint).

 * The code to parse capability list for v0 on-wire protocol fell into
   an infinite loop when a capability appears multiple times, which
   has been corrected.

 * Geometric repacking ("git repack --geometric=<n>") in a repository
   that borrows from an alternate object database had various corner
   case bugs, which have been corrected.
   (merge d85cd18777 ps/fix-geom-repack-with-alternates later to maint).

 * The "%GT" placeholder for the "--format" option of "git log" and
   friends caused BUG() to trigger on a commit signed with an unknown
   key, which has been corrected.
   (merge 7891e46585 jk/gpg-trust-level-fix later to maint).

 * The completion script used to use bare "read" without the "-r"
   option to read the contents of various state files, which risked
   getting confused with backslashes in them.  This has been
   corrected.
   (merge 197152098a ek/completion-use-read-r-to-read-literally later to maint).

 * A small API fix to the ort merge strategy backend.
   (merge 000c4ceca7 en/ort-finalize-after-0-merges-fix later to maint).

 * The commit object parser has been taught to be a bit more lenient
   to parse timestamps on the author/committer line with a malformed
   author/committer ident.
   (merge 90ef0f14eb jk/parse-commit-with-malformed-ident later to maint).

 * Retitle a test script with an overly narrow name.
   (merge 8bb19c14fb ob/t3501-retitle later to maint).

 * Doc update to clarify how text and eol attributes interact to
   specify the end-of-line conversion.
   (merge 6696077ace ah/doc-attributes-text later to maint).

 * Gitk updates from GfW project.
   (merge 99e70f3077 js/gitk-fixes-from-gfw later to maint).

 * "git diff --dirstat" leaked memory, which has been plugged.
   (merge 83973981eb jc/dirstat-plug-leaks later to maint).

 * "git merge-tree" reads the basic configuration, which can be used
    by git forges to disable replace-refs feature.
   (merge b6551feadf ds/merge-tree-use-config later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge f7111175df as/doc-markup-fix later to maint).
   (merge 90ff7c9898 fc/test-aggregation-clean-up later to maint).
   (merge 9b0c7f308a jc/am-doc-refer-to-format-patch later to maint).
   (merge b10cbdac4c bb/unicode-width-table-15 later to maint).
   (merge 3457b50e8c ab/retire-scripted-add-p later to maint).
   (merge d52fcf493b ds/p2000-fix-grep-sparse later to maint).
   (merge ec063d2591 ss/hashmap-typofix later to maint).
   (merge 1aaed69d11 rs/archive-mtime later to maint).
   (merge 2da2cc9b28 ob/rollback-after-commit-lock-failure later to maint).
   (merge 54dbd0933b ob/sequencer-save-head-simplify later to maint).
   (merge a93cbe8d78 ar/test-cleanup-unused-file-creation later to maint).
   (merge cc48ddd937 jk/chainlint-fixes later to maint).
   (merge 4833b08426 ow/ref-format-remove-unused-member later to maint).
   (merge d0ea2ca1cf dw/doc-submittingpatches-grammofix later to maint).
   (merge fd72637423 ar/t2024-checkout-output-fix later to maint).
   (merge d45cbe3fe0 ob/sequencer-i18n-fix later to maint).
   (merge b734fe49fd ob/messages-capitalize-exception later to maint).
   (merge ad353d7e77 ma/gittutorial-fixes later to maint).
   (merge a5855fd8d4 ar/test-cleanup-unused-file-creation-part2 later to maint).
   (merge 0c5308af30 sd/doc-gitignore-and-rm-cached later to maint).
   (merge cbb83daeaf kh/doc-interpret-trailers-updates later to maint).
   (merge 3d77fbb664 ar/config-count-tests-updates later to maint).
   (merge b7cf25c8f4 jc/t9800-fix-use-of-show-s-raw later to maint).

----------------------------------------------------------------

Changes since v2.40.0 are as follows:

Adam Johnson (1):
      ls-files: fix "--format" output of relative paths

Alex Henrie (5):
      rebase: add documentation and test for --no-rebase-merges
      rebase: deprecate --rebase-merges=""
      rebase: add a config option for --rebase-merges
      format-patch: correct documentation of --thread without an argument
      docs: rewrite the documentation of the text and eol attributes

Andreas Schwab (1):
      git-merge-tree.txt: replace spurious HTML entity

Andrei Rybak (19):
      t1005: assert output of ls-files
      t1006: assert error output of cat-file
      t1010: don't create unused files
      t1302: don't create unused file
      t1400: assert output of update-ref
      t1404: don't create unused file
      t1507: assert output of rev-parse
      t3060: fix mention of function prune_index
      t2107: fix mention of the_index.cache_changed
      t2024: fix loose/strict local base branch DWIM test
      t1300: drop duplicate test
      t1300: check stderr for "ignores pairs" tests
      t1300: add tests for missing keys
      t0300: don't create unused file
      t1300: fix config file syntax error descriptions
      t1300: don't create unused files
      t1450: don't create unused files
      t1502: don't create unused files
      t2019: don't create unused files

Andy Koppe (1):
      restore: fault --staged --worktree with merge opts

Beat Bolli (1):
      unicode: update the width tables to Unicode 15

Clement Mabileau (1):
      branch: improve error log on branch not found by checking remotes refs

Daniel Watson (1):
      SubmittingPatches: clarify MUA discussion with "the"

Derrick Stolee (19):
      object-file: reprepare alternates when necessary
      for-each-ref: add --stdin option
      for-each-ref: explicitly test no matches
      commit-graph: refactor compute_topological_levels()
      commit-graph: simplify compute_generation_numbers()
      commit-graph: return generation from memory
      commit-reach: implement ahead_behind() logic
      for-each-ref: add ahead-behind format atom
      commit-reach: add tips_reachable_from_bases()
      p2000: remove stray '--sparse' flag from test
      fetch: download bundles once, even with --all
      ci: update 'static-analysis' to Ubuntu 22.04
      fsck: create scaffolding for rev-index checks
      fsck: check rev-index checksums
      fsck: check rev-index position values
      fsck: validate .rev file header
      fsck: verify checksums of all .bitmap files
      fsck: use local repository
      merge-tree: load default git config

Edwin Kofler (1):
      completion: suppress unwanted unescaping of `read`

Elijah Newren (94):
      treewide: ensure one of the appropriate headers is sourced first
      treewide: remove unnecessary git-compat-util.h includes in headers
      treewide: remove unnecessary cache.h includes
      treewide: remove unnecessary cache.h includes in source files
      alloc.h: move ALLOC_GROW() functions from cache.h
      hash.h: move some oid-related declarations from cache.h
      hex.h: move some hex-related declarations from cache.h
      cache.h: remove dependence on hex.h; make other files include it explicitly
      pretty.h: move has_non_ascii() declaration from commit.h
      ident.h: move ident-related declarations out of cache.h
      object.h: stop depending on cache.h; make cache.h depend on object.h
      dir.h: refactor to no longer need to include cache.h
      object-store.h: move struct object_info from cache.h
      replace-object.h: move read_replace_refs declaration from cache.h to here
      treewide: replace cache.h with more direct headers, where possible
      Remove unnecessary includes of builtin.h
      diff.h: remove unnecessary include of object.h
      t2021: fix platform-specific leftover cruft
      unpack-trees: heed requests to overwrite ignored files
      dir: separate public from internal portion of dir_struct
      dir: add a usage note to exclude_per_dir
      dir: mark output only fields of dir_struct as such
      unpack-trees: clean up some flow control
      sparse-checkout: avoid using internal API of unpack-trees
      sparse-checkout: avoid using internal API of unpack-trees, take 2
      unpack_trees: start splitting internal fields from public API
      unpack-trees: mark fields only used internally as internal
      unpack-trees: rewrap a few overlong lines from previous patch
      unpack-trees: special case read-tree debugging as internal usage
      unpack-trees: add usage notices around df_conflict_entry
      treewide: remove unnecessary cache.h inclusion from a few headers
      treewide: be explicit about dependence on gettext.h
      treewide: remove unnecessary inclusion of gettext.h
      treewide: remove unnecessary cache.h inclusion from several sources
      environment: move comment_line_char from cache.h
      abspath.h: move absolute path functions from cache.h
      cache.h: remove expand_user_path()
      path.h: move function declarations for path.c functions from cache.h
      wrapper.h: move declarations for wrapper.c functions from cache.h
      treewide: remove unnecessary includes of cache.h
      environment.h: move declarations for environment.c functions from cache.h
      treewide: remove cache.h inclusion due to environment.h changes
      setup.h: move declarations for setup.c functions from cache.h
      treewide: remove cache.h inclusion due to setup.h changes
      write-or-die.h: move declarations for write-or-die.c functions from cache.h
      csum-file.h: remove unnecessary inclusion of cache.h
      treewide: be explicit about dependence on trace.h & trace2.h
      treewide: be explicit about dependence on advice.h
      treewide: be explicit about dependence on convert.h
      treewide: be explicit about dependence on pack-revindex.h
      treewide: be explicit about dependence on oid-array.h
      treewide: be explicit about dependence on mem-pool.h
      treewide: remove unnecessary cache.h inclusion
      object-name.h: move declarations for object-name.c functions from cache.h
      treewide: remove cache.h inclusion due to object-name.h changes
      git-zlib: move declarations for git-zlib functions from cache.h
      treewide: remove cache.h inclusion due to git-zlib changes
      object-file.h: move declarations for object-file.c functions from cache.h
      treewide: remove cache.h inclusion due to object-file.h changes
      object.h: move some inline functions and defines from cache.h
      treewide: remove cache.h inclusion due to object.h changes
      editor: move editor-related functions and declarations into common file
      treewide: remove cache.h inclusion due to editor.h changes
      pager.h: move declarations for pager.c functions from cache.h
      treewide: remove cache.h inclusion due to pager.h changes
      cache.h: remove unnecessary includes
      treewide: remove double forward declaration of read_in_full
      treewide: reduce includes of cache.h in other headers
      mailmap, quote: move declarations of global vars to correct unit
      protocol.h: move definition of DEFAULT_GIT_PORT from cache.h
      treewide: be explicit about dependence on strbuf.h
      symlinks.h: move declarations for symlinks.c functions from cache.h
      packfile.h: move pack_window and pack_entry from cache.h
      server-info.h: move declarations for server-info.c functions from cache.h
      copy.h: move declarations for copy.c functions from cache.h
      base85.h: move declarations for base85.c functions from cache.h
      pkt-line.h: move declarations for pkt-line.c functions from cache.h
      match-trees.h: move declarations for match-trees.c functions from cache.h
      ws.h: move declarations for ws.c functions from cache.h
      versioncmp.h: move declarations for versioncmp.c functions from cache.h
      dir.h: move DTYPE defines from cache.h
      tree-diff.c: move S_DIFFTREE_IFXMIN_NEQ define from cache.h
      hash-ll.h: split out of hash.h to remove dependency on repository.h
      cache,tree: move cmp_cache_name_compare from tree.[ch] to read-cache.c
      cache,tree: move basic name compare functions from read-cache to tree
      treewide: remove cache.h inclusion due to previous changes
      cache.h: remove unnecessary headers
      fsmonitor: reduce includes of cache.h
      commit.h: reduce unnecessary includes
      object-store.h: reduce unnecessary includes
      diff.h: reduce unnecessary includes
      reftable: ensure git-compat-util.h is the first (indirect) include
      merge-ort: fix calling merge_finalize() with no intermediate merge
      t5583: fix shebang line

Emily Shaffer (1):
      mailmap: change primary address for Emily Shaffer

Eric Sunshine (1):
      tests: diagnose unclosed here-doc in chainlint.pl

Eric Wong (3):
      commit-reach: avoid NULL dereference
      fetch: support hideRefs to speed up connectivity checks
      fetch: pass --no-write-fetch-head to subprocesses

Fangyi Zhou (1):
      rebase: fix capitalisation autoSquash in i18n string

Felipe Contreras (16):
      advice: add diverging advice for novices
      test: simplify counts aggregation
      test: don't print aggregate-results command
      object-name: fix quiet @{u} parsing
      completion: prompt: use generic colors
      doc: remove GNU troff workaround
      doc: remove manpage-base-url workaround
      doc: asciidoc: remove custom header macro
      doc: simplify man version
      doc: set actual revdate for manpages
      doc: git-checkout: trivial callout cleanup
      doc: git-checkout: reorganize examples
      doc: remove custom callouts format
      doc: manpage: remove maximum title length
      doc: doc-diff: specify date
      test: rev-parse-upstream: add missing cmp

Glen Choo (10):
      config.c: plumb config_source through static fns
      config.c: don't assign to "cf_global" directly
      config.c: create config_reader and the_reader
      config.c: plumb the_reader through callbacks
      config.c: remove current_config_kvi
      config.c: remove current_parsing_scope
      config: report cached filenames in die_bad_number()
      config.c: rename "struct config_source cf"
      clone: error specifically with --local and symlinked objects
      setup: trace bare repository setups

Han Xin (2):
      negotiator/default: avoid stack overflow
      negotiator/skipping: fix some problems in mark_common()

Jacob Keller (2):
      blame: allow --contents to work with non-HEAD commit
      blame: use different author name for fake commit generated by --contents

Jeff King (89):
      ref-filter: drop unused atom parameter from get_worktree_path()
      ls-refs: drop config caching
      serve: use repository pointer to get config
      serve: mark unused parameters in virtual functions
      object-name: mark unused parameters in disambiguate callbacks
      http-backend: mark argc/argv unused
      http-backend: mark unused parameters in virtual functions
      ref-filter: mark unused callback parameters
      mark "pointless" data pointers in callbacks
      run-command: mark error routine parameters as unused
      mark unused parameters in signal handlers
      list-objects: mark unused callback parameters
      for_each_object: mark unused callback parameters
      prio-queue: mark unused parameters in comparison functions
      notes: mark unused callback parameters
      fetch-pack: mark unused parameter in callback function
      rewrite_parents(): mark unused callback parameter
      for_each_commit_graft(): mark unused callback parameter
      userformat_want_item(): mark unused parameter
      run_processes_parallel: mark unused callback parameters
      help: mark unused parameter in git_unknown_cmd_config()
      fsck: factor out index fsck
      fsck: check index files in all worktrees
      fsck: mention file path for index errors
      fsck: check even zero-entry index files
      drop pure pass-through config callbacks
      bundle: turn on --all-progress-implied by default
      bundle: let "-" mean stdin for reading operations
      bundle: document handling of "-" as stdin
      parse-options: consistently allocate memory in fix_filename()
      parse-options: use prefix_filename_except_for_dash() helper
      diff: factor out src/dst prefix setup
      t4013: add tests for diff prefix options
      diff: add --default-prefix option
      format-patch: do not respect diff.noprefix
      format-patch: add format.noprefix option
      add-patch: handle "* Unmerged path" lines
      http-push: prefer CURLOPT_UPLOAD to CURLOPT_PUT
      http: prefer CURLOPT_SEEKFUNCTION to CURLOPT_IOCTLFUNCTION
      range-diff: drop useless "offset" variable from read_patches()
      http: support CURLOPT_PROTOCOLS_STR
      range-diff: handle unterminated lines in read_patches()
      range-diff: use ssize_t for parsed "len" in read_patches()
      rebase: prefer --default-prefix to --{src,dst}-prefix for format-patch
      mailmap: drop debugging code
      http: drop unused parameter from start_object_request()
      http: mark unused parameter in fill_active_slot() callbacks
      transport: mark unused parameters in fetch_refs_from_bundle()
      git_connect(): fix corner cases in downgrading v2 to v0
      fast-export: drop const when storing anonymized values
      fast-export: simplify initialization of anonymized hashmaps
      fast-export: factor out anonymized_entry creation
      fast-export: de-obfuscate --anonymize-map handling
      fast-export: drop data parameter from anonymous generators
      fast-export: drop unused parameter from anonymize_commit_message()
      Makefile: force -O0 when compiling with SANITIZE=leak
      pack-redundant: escalate deprecation warning to an error
      docs: document caveats of rev-list's object-name output
      fast-import: fix file access when run from subdir
      builtins: always pass prefix to parse_options()
      builtins: annotate always-empty prefix parameters
      builtins: mark unused prefix parameters
      mark "argv" as unused when we check argc
      t/helper: mark unused argv/argc arguments
      parse-options: drop parse_opt_unknown_cb()
      pack-redundant: document deprecation
      tests: run internal chain-linter under "make test"
      tests: replace chainlint subshell with a function
      tests: drop here-doc check from internal chain-linter
      tests: skip test_eval_ in internal chain-lint
      t/lib-httpd: pass PERL_PATH to CGI scripts
      v0 protocol: fix infinite loop when parsing multi-valued capabilities
      t5512: stop referring to "v1" protocol
      v0 protocol: fix sha1/sha256 confusion for capabilities^{}
      t5512: add v2 support for "ls-remote --symref" test
      t5512: allow any protocol version for filtered symref test
      t5512: test "ls-remote --heads --symref" filtering with v0 and v2
      v0 protocol: use size_t for capability length/offset
      gpg-interface: set trust level of missing key to "undefined"
      notes: clean up confusing NULL checks in init_notes()
      fetch_bundle_uri(): drop pointless NULL check
      t4212: avoid putting git on left-hand side of pipe
      parse_commit(): parse timestamp from end of line
      parse_commit(): handle broken whitespace-only timestamp
      parse_commit(): describe more date-parsing failure modes
      doc-diff: drop SOURCE_DATE_EPOCH override
      t7001: avoid git on upstream of pipe
      t7001: use "ls-files --format" instead of "cut"
      t: drop "verbose" helper function

Jiang Xin (5):
      github-actions: run gcc-8 on ubuntu-20.04 image
      ci: remove the pipe after "p4 -V" to catch errors
      ci: use the same version of p4 on both Linux and macOS
      ci: install python on ubuntu
      object-info: init request_info before reading arg

Johannes Schindelin (29):
      compat/win32/syslog: fix use-after-realloc
      nedmalloc: avoid new compile error
      t0033: GETTEXT_POISON fix
      t0003: GETTEXT_POISON fix, part 1
      t0003: GETTEXT_POISON fix, conclusion
      t5619: GETTEXT_POISON fix
      t5604: GETTEXT_POISON fix, part 1
      t5604: GETTEXT_POISON fix, conclusion
      clone.c: avoid "exceeds maximum object size" error with GCC v12.x
      split-index & fsmonitor: demonstrate a bug
      split-index; stop abusing the `base_oid` to strip the "link" extension
      fsmonitor: avoid overriding `cache_changed` bits
      unpack-trees: take care to propagate the split-index flag
      t3701: we don't need no Perl for `add -i` anymore
      t5563: prevent "ambiguous redirect"
      apply --reject: overwrite existing `.rej` symlink if it exists
      gettext: avoid using gettext if the locale dir is not present
      tests: avoid using `test_i18ncmp`
      Git 2.31.8
      Git 2.32.7
      Git 2.33.8
      Git 2.34.8
      Git 2.35.8
      Git 2.36.6
      Git 2.37.7
      Git 2.38.5
      Git 2.39.3
      Git 2.40.1
      gitk: prevent overly long command lines

John Cai (1):
      name-rev: make --stdin hidden

John Keeping (1):
      format-patch: output header for empty commits

Josh Soref (1):
      subtree: support long global flags

Jouke Witteveen (1):
      send-email docs: Remove mention of discontinued gmail feature

Junio C Hamano (29):
      gpg-interface: lazily initialize and read the configuration
      bundle: don't blindly apply prefix_filename() to "-"
      Start the 2.41 cycle
      The second batch
      am: refer to format-patch in the documentation
      The third batch
      http.c: clear the 'finished' member once we are done with it
      The fourth batch
      The fifth batch
      The sixth batch
      e-mail workflow: Message-ID is spelled with ID in both capital letters
      The seventh batch
      clone: propagate object-format when cloning from void
      The eighth batch
      The ninth batch
      The tenth batch
      The eleventh batch
      The twelfth batch
      The thirteenth batch
      doc: GIT_DEFAULT_HASH is and will be ignored during "clone"
      The fourteenth batch
      The fifteenth batch
      The sixteenth batch
      diff: refactor common tail part of dirstat computation
      diff: plug leaks in dirstat
      t9800: correct misuse of 'show -s --raw' in a test
      The seventeenth batch
      The eighteenth batch
      Git 2.41-rc0

Kristoffer Haugsbakk (5):
      config: tell the user that we expect an ASCII character
      doc: interpret-trailers: don’t use heredoc in examples
      doc: interpret-trailers: use input redirection
      doc: interpret-trailers: don’t use deprecated config
      doc: interpret-trailers: fix example

Linus Arver (1):
      MyFirstContribution: render literal *

M Hickford (3):
      credential/wincred: include wincred.h
      credential/wincred: store password_expiry_utc
      credential: new attribute oauth_refresh_token

Martin Ågren (2):
      gittutorial: drop early mention of origin
      gittutorial: wrap literal examples in backticks

Mathias Krause (1):
      grep: work around UTF-8 related JIT bug in PCRE2 <= 10.34

Matthew John Cheetham (3):
      t5563: add tests for basic and anoymous HTTP access
      http: read HTTP WWW-Authenticate response headers
      credential: add WWW-Authenticate header to cred requests

Maxim Cournoyer (3):
      send-email: extract execute_cmd from recipients_cmd
      send-email: add --header-cmd, --no-header-cmd options
      send-email: detect empty blank lines in command output

Michael J Gruber (1):
      t3070: make chain lint tester happy

Michael Strawbridge (2):
      send-email: refactor header generation functions
      send-email: expose header information to git-send-email's sendemail-validate hook

Mike Hommey (1):
      Handle some compiler versions containing a dash

Nico Rieck (1):
      gitk: escape file paths before piping to git log

Oswald Buddenhagen (5):
      sequencer: remove pointless rollback_lock_file()
      sequencer: rewrite save_head() in terms of write_message()
      sequencer: actually translate report in do_exec()
      messages: capitalization and punctuation exceptions
      t/t3501-revert-cherry-pick.sh: clarify scope of the file

Patrick Steinhardt (27):
      receive-pack: fix stale packfile locks when dying
      fetch: move reference width calculation into `display_state`
      fetch: move output format into `display_state`
      fetch: pass the full local reference name to `format_display`
      fetch: centralize handling of per-reference format
      fetch: centralize logic to print remote URL
      fetch: centralize printing of reference updates
      commit-graph: fix truncated generation numbers
      midx: fix segfault with no packs and invalid preferred pack
      repack: fix trying to use preferred pack in alternates
      repack: fix generating multi-pack-index with only non-local packs
      pack-objects: split out `--stdin-packs` tests into separate file
      pack-objects: fix error when packing same pack twice
      pack-objects: fix error when same packfile is included and excluded
      pack-objects: extend test coverage of `--stdin-packs` with alternates
      t/helper: allow chmtime to print verbosely without modifying mtime
      repack: honor `-l` when calculating pack geometry
      repack: disable writing bitmaps when doing a local repack
      fetch: fix `--no-recurse-submodules` with multi-remote fetches
      fetch: split out tests for output format
      fetch: add a test to exercise invalid output formats
      fetch: print left-hand side when fetching HEAD:foo
      fetch: refactor calculation of the display table width
      fetch: introduce `display_format` enum
      fetch: lift up parsing of "fetch.output" config variable
      fetch: move option related variables into main function
      fetch: introduce machine-parseable "porcelain" output format

Paul Eggert (1):
      git-compat-util: use gettimeofday(2) for time(2)

Phillip Wood (8):
      wildmatch: fix exponential behavior
      wildmatch: avoid undefined behavior
      wildmatch: hide internal return values
      rebase: stop reading and writing unnecessary strategy state
      sequencer: use struct strvec to store merge strategy options
      rebase -m: cleanup --strategy-option handling
      rebase -m: fix serialization of strategy options
      rebase: remove a couple of redundant strategy tests

Raghul Nanth A (1):
      describe: enable sparse index for describe

René Scharfe (6):
      archive: improve support for running in subdirectory
      t5000: use check_mtime()
      userdiff: support regexec(3) with multi-byte support
      date: remove approxidate_relative()
      get-tar-commit-id: use TYPEFLAG_GLOBAL_HEADER instead of magic value
      test-ctype: check EOF

Robin Jarry (1):
      send-email: export patch counters in validate environment

Rubén Justo (10):
      bisect: fix "reset" when branch is checked out elsewhere
      worktree: introduce is_shared_symref()
      branch: fix die_if_checked_out() when ignore_current_worktree
      rebase: refuse to switch to a branch already checked out elsewhere (test)
      switch: reject if the branch is already checked out elsewhere (test)
      branch: test for failures while renaming branches
      branch: use get_worktrees() in copy_or_rename_branch()
      branch: description for orphan branch errors
      branch: rename orphan branches in any worktree
      branch: avoid unnecessary worktrees traversals

SZEDER Gábor (6):
      treewide: include parse-options.h in source files
      treewide: remove unnecessary inclusions of parse-options.h from headers
      parse-options.h: use consistent name for the callback parameters
      parse-options.h: rename _OPT_CONTAINS_OR_WITH()'s parameters
      parse-options.h: use designated initializers in OPT_* macros
      cocci: remove 'unused.cocci'

Shuqi Liang (3):
      write-tree: integrate with sparse index
      t1092: add tests for `git diff-files`
      diff-files: integrate with sparse index

Siddharth Singh (1):
      hashmap.h: fix minor typo

Sohom Datta (1):
      docs: clarify git rm --cached function in gitignore note

Stanislav Malishevskiy (1):
      http: add support for different sslcert and sslkey types.

Tao Klerks (1):
      mergetool: new config guiDefault supports auto-toggling gui by DISPLAY

Taylor Blau (36):
      commit-graph: introduce `ensure_generations_valid()`
      pack-write.c: plug a leak in stage_tmp_packfiles()
      t5325: mark as leak-free
      pack-revindex: make `load_pack_revindex` take a repository
      pack-revindex: introduce GIT_TEST_REV_INDEX_DIE_ON_DISK
      pack-revindex: introduce `pack.readReverseIndex`
      config: enable `pack.writeReverseIndex` by default
      t: invert `GIT_TEST_WRITE_REV_INDEX`
      t1300: demonstrate failure when renaming sections with long lines
      config: avoid fixed-sized buffer when renaming/deleting a section
      config.c: avoid integer truncation in `copy_or_rename_section_in_file()`
      config.c: disallow overly-long lines in `copy_or_rename_section_in_file()`
      Git 2.30.9
      pack-write.c: plug a leak in stage_tmp_packfiles()
      builtin/repack.c: fix incorrect reference to '-C'
      builtin/gc.c: ignore cruft packs with `--keep-largest-pack`
      t/t5304-prune.sh: prepare for `gc --cruft` by default
      t/t6501-freshen-objects.sh: prepare for `gc --cruft` by default
      t/t6500-gc.sh: refactor cruft pack tests
      t/t6500-gc.sh: add additional test cases
      t/t9300-fast-import.sh: prepare for `gc --cruft` by default
      builtin/gc.c: make `gc.cruftPacks` enabled by default
      repository.h: drop unused `gc_cruft_packs`
      string-list: multi-delimiter `string_list_split_in_place()`
      string-list: introduce `string_list_setlen()`
      t/helper/test-hashmap.c: avoid using `strtok()`
      t/helper/test-oidmap.c: avoid using `strtok()`
      t/helper/test-json-writer.c: avoid using `strtok()`
      banned.h: mark `strtok()` and `strtok_r()` as banned
      credential.c: store "wwwauth[]" values in `credential_read()`
      t/lib-credential.sh: ensure credential helpers handle long headers
      contrib/credential: avoid fixed-size buffer in osxkeychain
      contrib/credential: remove 'gnome-keyring' credential helper
      contrib/credential: .gitignore libsecret build artifacts
      contrib/credential: avoid fixed-size buffer in libsecret
      contrib/credential: embiggen fixed-size buffer in wincred

Teng Long (1):
      push: introduce '--branches' option

William Sprent (2):
      builtin/sparse-checkout: remove NEED_WORK_TREE flag
      builtin/sparse-checkout: add check-rules command

ZheNing Hu (2):
      receive-pack: fix funny ref error messsage
      push: allow delete single-level ref

Ævar Arnfjörð Bjarmason (33):
      auto-crlf tests: don't lose exit code in loops and outside tests
      t/lib-patch-mode.sh: fix ignored exit codes
      tests: don't lose exit status with "(cd ...; test <op> $(git ...))"
      tests: don't lose "git" exit codes in "! ( git ... | grep )"
      tests: don't lose exit status with "test <op> $(git ...)"
      tests: don't lose misc "git" exit codes
      sequencer.c: fix overflow & segfault in parse_strategy_opts()
      cocci: remove dead rule from "the_repository.pending.cocci"
      cocci: fix incorrect & verbose "the_repository" rules
      cocci: sort "the_repository" rules by header
      cocci: add missing "the_repository" macros to "pending"
      cocci: apply the "cache.h" part of "the_repository.pending"
      cocci: apply the "commit-reach.h" part of "the_repository.pending"
      cocci: apply the "commit.h" part of "the_repository.pending"
      cocci: apply the "diff.h" part of "the_repository.pending"
      cocci: apply the "object-store.h" part of "the_repository.pending"
      cocci: apply the "pretty.h" part of "the_repository.pending"
      cocci: apply the "packfile.h" part of "the_repository.pending"
      cocci: apply the "promisor-remote.h" part of "the_repository.pending"
      cocci: apply the "refs.h" part of "the_repository.pending"
      cocci: apply the "rerere.h" part of "the_repository.pending"
      cocci: apply the "revision.h" part of "the_repository.pending"
      post-cocci: adjust comments for recent repo_* migration
      libs: use "struct repository *" argument, not "the_repository"
      config tests: cover blind spots in git_die_config() tests
      config tests: add "NULL" tests for *_get_value_multi()
      config API: add and use a "git_config_get()" family of functions
      versioncmp.c: refactor config reading next commit
      config API: have *_multi() return an "int" and take a "dest"
      for-each-repo: error on bad --config
      config API users: test for *_get_value_multi() segfaults
      config API: add "string" version of *_value_multi(), fix segfaults
      for-each-repo: with bad config, don't conflate <path> and <cmd>

Øystein Walle (2):
      ref-filter: remove unused ref_format member
      branch, for-each-ref, tag: add option to omit empty lines


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.40.0
@ 2023-03-13 17:48  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2023-03-13 17:48 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

The latest feature release Git v2.40.0 is now available at the
usual places.  It is comprised of 472 non-merge commits since
v2.39.0, contributed by 88 people, 30 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.40.0'
tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.39.0 are as follows.
Welcome to the Git development community!

  Adam Szkoda, Alison Winters, Ashutosh Pandey, Carl Baldwin,
  Daniël Haazen, Drew Noakes, Eric Sesterhenn, Gwyneth Morgan,
  Harshil-Jani, Hubert Jasudowicz, idriss fekir, Kostya Farber,
  Marco Nenciarini, Markus Vervier, Matheus Tavares Bernardino,
  Mathias Krause, Pat LaVarre, Peter Grayson, Rudy Rigot, Seija,
  Seija Kijin, Simon Gerber, Thierry Reding, toon@iotcl.com, Wes
  Lord, Yukai Chou, Yutaro Ohno, yvvdwf, Zhang Yi, and 孟子易.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alexander Shopov, Andrei Rybak, Bagas
  Sanjaya, Calvin Wan, Carlo Marcelo Arenas Belón, Christian
  Couder, Chris. Webster, Derrick Stolee, Đoàn Trần Công
  Danh, Elijah Newren, Emily Shaffer, Emir SARI, Eric Sunshine,
  Eric Wong, Erik Cervin Edin, Fangyi Zhou, Glen Choo, Jean-Noël
  Avila, Jeff Hostetler, Jeff King, Jiang Xin, Joern Schneeweisz,
  Johannes Schindelin, Johannes Sixt, John Cai, Jonathan Tan,
  Jordi Mas, Junio C Hamano, Karthik Nayak, Kevin Willford, Kyle
  Meyer, Kyle Zhao, Lars Kellogg-Stedman, Martin Ågren, Matthias
  Aßhauer, Matthias Rüster, M Hickford, Patrick Steinhardt,
  Peter Krefting, Philip Oakley, Philippe Blain, Phillip Wood,
  Ralf Thielow, Randall S. Becker, René Scharfe, Rubén Justo,
  Sean Allred, Siddharth Asthana, Sven Strickroth, SZEDER Gábor,
  Taylor Blau, Teng Long, Torsten Bögershausen, William Sprent,
  Yoichi Nakayama, ZheNing Hu, and 依云.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.40 Release Notes
=======================

UI, Workflows & Features

 * "merge-tree" learns a new `--merge-base` option.

 * "git jump" (in contrib/) learned to present the "quickfix list" to
   its standard output (instead of letting it consumed by the editor
   it invokes), and learned to also drive emacs/emacsclient.

 * "git var UNKNOWN_VARIABLE" and "git var VARIABLE" with the variable
   given an empty value used to behave identically.  Now the latter
   just gives an empty output, while the former still gives an error
   message.

 * Introduce a case insensitive mode to the Bash completion helpers.

 * The advice message given by "git status" when it takes long time to
   enumerate untracked paths has been updated.

 * Just like "git var GIT_EDITOR" abstracts the complex logic to
   choose which editor gets used behind it, "git var" now give support
   to GIT_SEQUENCE_EDITOR.

 * "git format-patch" learned to honor format.mboxrd even when sending
   patches to the standard output stream,

 * 'cat-file' gains mailmap support for its '--batch-check' and '-s'
   options.

 * Conditionally skip the pre-applypatch and applypatch-msg hooks when
   applying patches with 'git am'.

 * Introduce an optional configuration to allow the trailing hash that
   protects the index file from bit flipping.

 * "git check-attr" learned to take an optional tree-ish to read the
   .gitattributes file from.

 * "scalar" learned to give progress bar.

 * "grep -P" learned to use Unicode Character Property to grok
   character classes when processing \b and \w etc.

 * "git rebase" often ignored incompatible options instead of
   complaining, which has been corrected.

 * "scalar" warns but continues when its periodic maintenance
   feature cannot be enabled.

 * The bundle-URI subsystem adds support for creation-token heuristics
   to help incremental fetches.

 * Userdiff regexp update for Java language.

 * "git fetch --jobs=0" used to hit a BUG(), which has been corrected
   to use the available CPUs.

 * An invalid label or ref in the "rebase -i" todo file used to
   trigger an runtime error. SUch an error is now diagnosed while the
   todo file is parsed.

 * The "diff" drivers specified by the "diff" attribute attached to
   paths can now specify which algorithm (e.g. histogram) to use.

 * "git range-diff" learned --abbrev=<num> option.

 * "git archive HEAD^{tree}" records the paths with the current
   timestamp in the archive, making it harder to obtain a stable
   output.  The command learned the --mtime option to specify an
   arbitrary timestamp (e.g. --mtime="@0 +0000" for the epoch).

 * The credential subsystem learned that a password may have an
   explicit expiration.

 * The format.attach configuration variable lacked a way to override a
   value defined in a lower-priority configuration file (e.g. the
   system one) by redefining it in a higher-priority configuration
   file.  Now, setting format.attach to an empty string means show the
   patch inline in the e-mail message, without using MIME attachment.

   This is a backward incompatible change.


Performance, Internal Implementation, Development Support etc.

 * `git bisect` becomes a builtin.

 * The pack-bitmap machinery is taught to log the paths of redundant
   bitmap(s) to trace2 instead of stderr.

 * Use the SHA1DC implementation on macOS, just like other platforms,
   by default.

 * Even in a repository with promisor remote, it is useless to
   attempt to lazily attempt fetching an object that is expected to be
   commit, because no "filter" mode omits commit objects.  Take
   advantage of this assumption to fail fast on errors.

 * Stop using "git --super-prefix" and narrow the scope of its use to
   the submodule--helper.

 * Stop running win+VS build by default.

 * CI updates.  We probably want a clean-up to move the long shell
   script embedded in yaml file into a separate file, but that can
   come later.

 * Use `git diff --no-index` as a test_cmp on Windows.

   We'd probably need to revisit "do we really want to, and have to,
   lose CRLF vs LF?" later, at which time we may be able to further
   clean this up by replacing "git diff --no-index" with "diff -u".

 * Avoid unnecessary builds in CI, with settings configured in
   ci-config.

 * Plug leaks in sequencer subsystem and its users.

 * In-tree .gitattributes update to match the way we recommend our
   users to mark a file as text.
   (merge 1f34e0cd3d po/attributes-text later to maint).

 * Finally retire the scripted "git add -p/-i" implementation and have
   everybody use the one reimplemented in C.


Fixes since v2.39
-----------------

 * Various leak fixes.

 * Fix a bug where `pack-objects` would not respect multiple `--filter`
   arguments when invoked directly.
   (merge d4f7036887 rs/multi-filter-args later to maint).

 * Make fsmonitor more robust to avoid the flakiness seen in t7527.
   (merge 6692d45477 jh/t7527-unflake-by-forcing-cookie later to maint).

 * Stop using deprecated macOS API in fsmonitor.
   (merge b0226007f0 jh/fsmonitor-darwin-modernize later to maint).

 * Redefining system functions for a few functions did not follow our
   usual "implement git_foo() and #define foo(args) git_foo(args)"
   pattern, which has broken build for some folks.

 * The way the diff machinery prepares the options array for the
   parse_options API has been refactored to avoid resource leaks.
   (merge 189e97bc4b rs/diff-parseopts later to maint).

 * Correct pthread API usage.
   (merge 786e67611d sx/pthread-error-check-fix later to maint).

 * The code to auto-correct a misspelt subcommand unnecessarily called
   into git_default_config() from the early config codepath, which was
   a no-no.  This has bee corrected.
   (merge 0918d08887 sg/help-autocorrect-config-fix later to maint).

 * "git http-fetch" (which is rarely used) forgot to identify itself
   in the trace2 output.
   (merge 7abb43cbc8 jt/http-fetch-trace2-report-name later to maint).

 * The output from "git diff --stat" on an unmerged path lost the
   terminating LF in Git 2.39, which has been corrected.
   (merge 209d9cb011 pg/diff-stat-unmerged-regression-fix later to maint).

 * "git pull -v --recurse-submodules" attempted to pass "-v" down to
   underlying "git submodule update", which did not understand the
   request and barfed, which has been corrected.
   (merge 6f65f84766 ss/pull-v-recurse-fix later to maint).

 * When given a pattern that matches an empty string at the end of a
   line, the code to parse the "git diff" line-ranges fell into an
   infinite loop, which has been corrected.

 * Fix the sequence to fsync $GIT_DIR/packed-refs file that forgot to
   flush its output to the disk..

 * Fix to a small regression in 2.38 days.

 * "git diff --relative" did not mix well with "git diff --ext-diff",
   which has been corrected.

 * The logic to see if we are using the "cone" mode by checking the
   sparsity patterns has been tightened to avoid mistaking a pattern
   that names a single file as specifying a cone.

 * Deal with a few deprecation warning from cURL library.

 * Doc update for environment variables set when hooks are invoked.

 * Document ORIG_HEAD a bit more.

 * "git ls-tree --format='%(path) %(path)' $tree $path" showed the
   path three times, which has been corrected.

 * Remove "git env--helper" and demote it to a test-tool subcommand.
   (merge 4a1baacd46 ab/test-env-helper later to maint).

 * Newer regex library macOS stopped enabling GNU-like enhanced BRE,
   where '\(A\|B\)' works as alternation, unless explicitly asked with
   the REG_ENHANCED flag.  "git grep" now can be compiled to do so, to
   retain the old behaviour.

 * Pthread emulation on Win32 leaked thread handle when a thread is
   joined.
   (merge 238a9dfe86 sk/win32-close-handle-upon-pthread-join later to maint).

 * "git send-email -v 3" used to be expanded to "git send-email
   --validate 3" when the user meant to pass them down to
   "format-patch", which has been corrected.
   (merge 8774aa56ad km/send-email-with-v-reroll-count later to maint).

 * Document that "branch -f <branch>" disables only the safety to
   avoid recreating an existing branch.

 * "git fetch <group>", when "<group>" of remotes lists the same
   remote twice, unnecessarily failed when parallel fetching was
   enabled, which has been corrected.
   (merge 06a668cb90 cw/fetch-remote-group-with-duplication later to maint).

 * Clarify how "checkout -b/-B" and "git branch [-f]" are similar but
   different in the documentation.

 * "git hash-object" now checks that the resulting object is well
   formed with the same code as "git fsck".
   (merge 8e4309038f jk/hash-object-fsck later to maint).

 * Improve the error message given when private key is not loaded in
   the ssh agent in the codepath to sign with an ssh key.
   (merge dce7b31126 as/ssh-signing-improve-key-missing-error later to maint).

 * Adjust "git request-pull" to strip embedded signature from signed
   tags to notice non-PGP signatures.
   (merge a9cad02538 gm/request-pull-with-non-pgp-signed-tags later to maint).

 * Remove support for MSys, which now lags way behind MSys2.
   (merge 2987407f3c hj/remove-msys-support later to maint).

 * Fix use of CreateThread() API call made early in the windows
   start-up code.
   (merge 592bcab61b sk/winansi-createthread-fix later to maint).

 * "git pack-objects" learned to release delta-island bitmap data when
   it is done using it, saving peak heap memory usage.
   (merge 647982bb71 ew/free-island-marks later to maint).

 * In an environment where dynamically generated code is prohibited to
   run (e.g. SELinux), failure to JIT pcre patterns is expected.  Fall
   back to interpreted execution in such a case.
   (merge 50b6ad55b0 cb/grep-fallback-failing-jit later to maint).

 * "git name-rev" heuristics update.
   (merge b2182a8730 en/name-rev-make-taggerdate-much-less-important later to maint).

 * Remove more remaining uses of macros that relies on the_index
   singleton instance without explicitly spelling it out.

 * Remove unnecessary explicit sizing of strbuf.
   (merge 93ea118bed rs/cache-tree-strbuf-growth-fix later to maint).

 * Doc update.
   (merge d9ec3b0dc0 jk/doc-ls-remote-matching later to maint).

 * Error messages given upon a signature verification failure used to
   discard the errors from underlying gpg program, which has been
   corrected.
   (merge ad6b320756 js/gpg-errors later to maint).

 * Update --date=default documentation.
   (merge 9deef088ae rd/doc-default-date-format later to maint).

 * A test helper had a single write(2) of 256kB, which was too big for
   some platforms (e.g. NonStop), which has been corrected by using
   xwrite() wrapper appropriately.
   (merge 58eab6ff13 jc/genzeros-avoid-raw-write later to maint).

 * sscanf(3) used in "git symbolic-ref --short" implementation found
   to be not working reliably on macOS in UTF-8 locales.  Rewrite the
   code to avoid sscanf() altogether to work it around.
   (merge 613bef56b8 jk/shorten-unambiguous-ref-wo-sscanf later to maint).

 * Various fix-ups on HTTP tests.
   (merge 8f2146dbf1 jk/http-test-fixes later to maint).

 * Fixes to code that parses the todo file used in "rebase -i".
   (merge 666b6e1135 pw/rebase-i-parse-fix later to maint).

 * Test library clean-up.
   (merge c600a91c94 ar/test-lib-remove-stale-comment later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 4eb1ccecd4 dh/mingw-ownership-check-typofix later to maint).
   (merge f95526419b ar/typofix-gitattributes-doc later to maint).
   (merge 27875aeec9 km/doc-branch-start-point later to maint).
   (merge 35c194dc57 es/t1509-root-fixes later to maint).
   (merge 7b341645e3 pw/ci-print-failure-name-fix later to maint).
   (merge bcb71d45bf jx/t1301-updates later to maint).
   (merge ebdc46c242 jc/doc-diff-patch.txt later to maint).
   (merge a87a20cbb4 ar/test-cleanup later to maint).
   (merge f5156f1885 ar/bisect-doc-update later to maint).
   (merge fca2d86c97 jk/interop-error later to maint).
   (merge cf4936ed74 tl/ls-tree-code-clean-up later to maint).
   (merge dcb47e52b0 en/t6426-todo-cleanup later to maint).
   (merge 5b8db44bdd jc/format-patch-v-unleak later to maint).
   (merge 590b636737 jk/hash-object-literally-fd-leak later to maint).
   (merge 5458ba0a4d tb/t0003-invoke-dd-more-portably later to maint).
   (merge 70661d288b ar/markup-em-dash later to maint).
   (merge e750951e74 en/ls-files-doc-update later to maint).
   (merge 4f542975d1 mh/doc-credential-cache-only-in-core later to maint).
   (merge 3a2ebaebc7 gc/index-format-doc later to maint).
   (merge b08edf709d jk/httpd-test-updates later to maint).
   (merge d85e9448dd wl/new-command-doc later to maint).
   (merge d912a603ed kf/t5000-modernise later to maint).
   (merge e65b868d07 rs/size-t-fixes later to maint).
   (merge 3eb1e1ca9a ab/config-h-remove-unused later to maint).
   (merge d390e08076 cw/doc-pushurl-vs-url later to maint).
   (merge 567342fc77 rs/ctype-test later to maint).
   (merge d35d8f2e7a ap/t2015-style-update later to maint).

----------------------------------------------------------------

Changes since v2.39.0 are as follows:

Adam Szkoda (1):
      ssh signing: better error message when key not in agent

Alexander Shopov (1):
      l10n: bg.po: Updated Bulgarian translation (5490t)

Alison Winters (2):
      completion: add optional ignore-case when matching refs
      completion: add case-insensitive match of pseudorefs

Andrei Rybak (12):
      gitattributes.txt: fix typo in "comma separated"
      *: fix typos which duplicate a word
      git-bisect-lk2009: update java code conventions link
      git-bisect-lk2009: update nist report link
      t6003: uncomment test '--max-age=c3, --topo-order'
      t6422: drop commented out code
      t7527: use test_when_finished in 'case insensitive+preserving'
      Documentation: render dash correctly
      userdiff: support Java type parameters
      userdiff: support Java record types
      userdiff: support Java sealed classes
      test-lib: drop comment about test_description

Ashutosh Pandey (1):
      t2015-checkout-unborn.sh: changes the style for cd

Bagas Sanjaya (1):
      l10n: po-id for 2.40 (round 1)

Calvin Wan (2):
      fetch: fix duplicate remote parallel fetch bug
      Documentation: clarify multiple pushurls vs urls

Carlo Marcelo Arenas Belón (2):
      test-lib: add prerequisite for 64-bit platforms
      grep: correctly identify utf-8 characters with \{b,w} in -P

Chris. Webster (3):
      ci (check-whitespace): suggest fixes for errors
      ci (check-whitespace): add links to job output
      ci (check-whitespace): move to actions/checkout@v3

Daniël Haazen (1):
      mingw: fix typo in an error message from ownership check

Derrick Stolee (25):
      transport: rename got_remote_heads
      bundle-uri: serve bundle.* keys from config
      strbuf: introduce strbuf_strip_file_from_path()
      bundle-uri: allow relative URLs in bundle lists
      bundle-uri: download bundles from an advertised list
      clone: unbundle the advertised bundles
      hashfile: allow skipping the hash function
      read-cache: add index.skipHash config option
      test-lib-functions: add helper for trailing hash
      features: feature.manyFiles implies fast index writes
      t1600: fix racy index.skipHash test
      t: allow 'scalar' in test_must_fail
      t921*: test scalar behavior starting maintenance
      scalar: only warn when background maintenance fails
      bundle: test unbundling with incomplete history
      bundle: verify using check_connected()
      t5558: add tests for creationToken heuristic
      bundle-uri: parse bundle.heuristic=creationToken
      bundle-uri: parse bundle.<id>.creationToken values
      bundle-uri: download in creationToken order
      clone: set fetch.bundleURI if appropriate
      bundle-uri: drop bundle.flag from design doc
      fetch: fetch from an external bundle URI
      bundle-uri: store fetch.bundleCreationToken
      bundle-uri: test missing bundles with heuristic

Elijah Newren (16):
      ls-files: add missing documentation for --resolve-undo option
      ls-files: clarify descriptions of file selection options
      ls-files: clarify descriptions of status tags for -t
      ls-files: guide folks to --exclude-standard over other --exclude* options
      t6426: fix TODO about making test more comprehensive
      rebase: mark --update-refs as requiring the merge backend
      rebase: flag --apply and --merge as incompatible
      rebase: remove --allow-empty-message from incompatible opts
      rebase: fix docs about incompatibilities with --root
      rebase: fix incompatiblity checks for --[no-]reapply-cherry-picks
      rebase: add coverage of other incompatible options
      rebase: clarify the OPT_CMDMODE incompatibilities
      rebase: fix formatting of rebase --reapply-cherry-picks option in docs
      rebase: put rebase_options initialization in single place
      rebase: provide better error message for apply options vs. merge config
      name-rev: fix names by dropping taggerdate workaround

Emily Shaffer (4):
      run-command: allow stdin for run_processes_parallel
      hook API: support passing stdin to hooks, convert am's 'post-rewrite'
      sequencer: use the new hook API for the simpler "post-rewrite" call
      hook: support a --to-stdin=<path> option

Emir SARI (1):
      l10n: tr: Update Turkish translations for v.2.40.0

Eric Sunshine (4):
      t1509: fix failing "root work tree" test due to owner-check
      t1509: make "setup" test more robust
      t1509: facilitate repeated script invocations
      githooks: discuss Git operations in foreign repositories

Eric Wong (2):
      format-patch: support format.mboxrd with --stdout
      delta-islands: free island_marks and bitmaps

Fangyi Zhou (1):
      l10n: zh_CN v2.40.0 round 1

Glen Choo (2):
      read-tree + fetch tests: test failing "--super-prefix" interaction
      docs: document zero bits in index "mode"

Gwyneth Morgan (2):
      request-pull: filter out SSH/X.509 tag signatures
      signature-format.txt: note SSH and X.509 signature delimiters

Harshil-Jani (2):
      mingw: remove duplicate `USE_NED_ALLOCATOR` directive
      mingw: remove msysGit/MSYS1 support

Jean-Noël Avila (3):
      l10n: fr: fix some typos
      l10n: fr: v2.40.0 rnd 1
      l10n: fr: v2.40.0 rnd 2

Jeff Hostetler (2):
      fsmonitor: fix race seen in t7527
      fsmonitor: eliminate call to deprecated FSEventStream function

Jeff King (74):
      git-jump: move valid-mode check earlier
      pack-bitmap.c: break out of the bitmap loop early if not tracing
      pack-bitmap.c: trace bitmap ignore logs when midx-bitmap is found
      git-compat-util: avoid redefining system function names
      git-compat-util: undefine system names before redeclaring them
      server_supports_v2(): use a separate function for die_on_error
      ls-refs: use repository parameter to iterate refs
      blob: drop unused parts of parse_blob_buffer()
      list-objects: drop process_gitlink() function
      ws: drop unused parameter from ws_blank_line()
      xdiff: drop unused parameter in def_ff()
      xdiff: mark unused parameter in xdl_call_hunk_func()
      diff: mark unused parameters in callbacks
      list-objects-filter: mark unused parameters in virtual functions
      userdiff: mark unused parameter in internal callback
      ref-filter: reject arguments to %(HEAD)
      ref-filter: factor out "%(foo) does not take arguments" errors
      ref-filter: factor out "unrecognized %(foo) arg" errors
      ref-filter: truncate atom names in error messages
      ref-filter: convert email atom parser to use err_bad_arg()
      test-bundle-uri: drop unused variables
      diff: use filespec path to set up tempfiles for ext-diff
      diff: clean up external-diff argv setup
      diff: drop "name" parameter from prepare_temp_file()
      convert trivial uses of strncmp() to starts_with()
      convert trivial uses of strncmp() to skip_prefix()
      object-file: inline calls to read_object()
      streaming: inline call to read_object_file_extended()
      read_object_file_extended(): drop lookup_replace option
      repo_read_object_file(): stop wrapping read_object_file_extended()
      packfile: inline custom read_object()
      object-file: fix indent-with-space
      t/interop: report which vanilla git command failed
      http-push: prefer CURLOPT_UPLOAD to CURLOPT_PUT
      http: prefer CURLOPT_SEEKFUNCTION to CURLOPT_IOCTLFUNCTION
      http: support CURLOPT_PROTOCOLS_STR
      t1007: modernize malformed object tests
      t1006: stop using 0-padded timestamps
      t7030: stop using invalid tag name
      t: use hash-object --literally when created malformed objects
      fsck: provide a function to fsck buffer without object struct
      hash-object: use fsck for object checks
      hash-object: fix descriptor leak with --literally
      fsck: do not assume NUL-termination of buffers
      t/lib-httpd: bump required apache version to 2.2
      t/lib-httpd: bump required apache version to 2.4
      t/lib-httpd: drop SSLMutex config
      t/lib-httpd: increase ssl key size to 2048 bits
      http-push: prefer CURLOPT_UPLOAD to CURLOPT_PUT
      http: prefer CURLOPT_SEEKFUNCTION to CURLOPT_IOCTLFUNCTION
      http: support CURLOPT_PROTOCOLS_STR
      doc/ls-remote: cosmetic cleanups for examples
      doc/ls-remote: clarify pattern format
      shorten_unambiguous_ref(): avoid integer truncation
      shorten_unambiguous_ref(): use NUM_REV_PARSE_RULES constant
      shorten_unambiguous_ref(): avoid sscanf()
      add basic http proxy tests
      t0066: drop setup of "dir5"
      t5541: run "used receive-pack service" test earlier
      t5541: stop marking "used receive-pack service" test as v0 only
      t5541: simplify and move "no empty path components" test
      t5551: drop redundant grep for Accept-Language
      t5551: lower-case headers in expected curl trace
      t5551: handle HTTP/2 when checking curl trace
      t5551: stop forcing clone to run with v0 protocol
      t5551: handle v2 protocol when checking curl trace
      t5551: handle v2 protocol in upload-pack service test
      t5551: simplify expected cookie file
      t5551: handle v2 protocol in cookie test
      t5551: drop curl trace lines without headers
      t/lib-httpd: respect $HTTPD_PROTO in expect_askpass()
      t/lib-httpd: enable HTTP/2 "h2" protocol, not just h2c
      t5559: fix test failures with LIB_HTTPD_SSL
      t5559: make SSL/TLS the default

Jiang Xin (3):
      t1301: fix wrong template dir for git-init
      t1301: use test_when_finished for cleanup
      t1301: do not change $CWD in "shared=all" test case

Johannes Schindelin (24):
      bisect--helper: handle states directly
      Turn `git bisect` into a full built-in
      t0021: use Windows-friendly `pwd`
      tests(mingw): avoid very slow `mingw_test_cmp`
      ci: only run win+VS build & tests in Git for Windows' fork
      bisect--helper: simplify exit code computation
      bisect: verify that a bogus option won't try to start a bisection
      bisect run: fix the error message
      bisect: remove Cogito-related code
      bisect: no longer try to clean up left-over `.git/head-name` files
      fsck: document the new `gitattributes` message IDs
      attr: adjust a mismatched data type
      attr: adjust a mismatched data type
      Git 2.31.7
      Git 2.32.6
      Git 2.33.7
      Git 2.34.7
      Git 2.35.7
      Git 2.36.5
      Git 2.37.6
      Git 2.38.4
      Git 2.39.2
      t7510: add a test case that does not need gpg
      gpg: do show gpg's error message upon failure

Johannes Sixt (1):
      t3920: don't ignore errors of more than one command with `|| true`

John Cai (4):
      docs: link generating patch sections
      attr: fix instructions on how to check attrs
      diff: consolidate diff algorithm option parsing
      diff: teach diff to read algorithm from diff driver

Jonathan Tan (5):
      http-fetch: invoke trace2_cmd_name()
      object-file: remove OBJECT_INFO_IGNORE_LOOSE
      object-file: refactor map_loose_object_1()
      object-file: emit corruption errors when detected
      commit: don't lazy-fetch commits

Jordi Mas (1):
      l10n: Update Catalan translation

Junio C Hamano (43):
      Git 2.30.7
      Git 2.31.6
      Git 2.32.5
      Git 2.33.6
      Git 2.34.6
      Git 2.35.6
      Git 2.36.4
      Git 2.37.5
      Git 2.38.3
      Git 2.39.1
      Start the 2.40 cycle
      The first batch for 2.40
      The second batch
      The third batch
      The fourth batch
      The fifth batch
      The sixth batch
      format-patch: unleak "-v <num>"
      The seventh batch
      branch: document `-f` and linked worktree behaviour
      checkout: document -b/-B to highlight the differences from "git branch"
      The eighth batch
      The ninth batch
      The tenth batch
      The eleventh batch
      The twelfth batch
      The thirteenth batch
      Git 2.30.8
      The fourteenth batch
      The fifteenth batch
      Prepare for 2.39.3 just in case
      The sixteenth batch
      rev-list: clarify git-log default date format
      test-genzeros: avoid raw write(2)
      format.attach: allow empty value to disable multi-part messages
      The seventeenth batch
      Git 2.40-rc0
      A few more topics post 2.40-rc0
      A bit more before 2.40-rc1
      A bit more before 2.40-rc1
      Git 2.40-rc1
      Git 2.40-rc2
      Git 2.40

Karthik Nayak (2):
      t0003: move setup for `--all` into new block
      attr: add flag `--source` to work with tree-ish

Kostya Farber (1):
      t5000: modernise archive and :(glob) test

Kyle Meyer (2):
      send-email: relay '-v N' to format-patch
      doc/git-branch: fix --force description typo

Kyle Zhao (3):
      merge-tree.c: add --merge-base=<commit> option
      merge-tree.c: allow specifying the merge-base when --stdin is passed
      docs: fix description of the `--merge-base` option

Lars Kellogg-Stedman (1):
      line-range: fix infinite loop bug with '$' regex

M Hickford (2):
      Documentation: clarify that cache forgets credentials if the system restarts
      credential: new attribute password_expiry_utc

Martin Ågren (1):
      git-cat-file.txt: fix list continuations rendering literally

Mathias Krause (1):
      grep: fall back to interpreter if JIT memory allocation fails

Matthias Aßhauer (1):
      fetch: choose a sensible default with --jobs=0 again

Patrick Steinhardt (28):
      attr: fix overflow when upserting attribute with overly long name
      attr: fix out-of-bounds read with huge attribute names
      attr: fix integer overflow when parsing huge attribute names
      attr: fix out-of-bounds write when parsing huge number of attributes
      attr: fix out-of-bounds read with unreasonable amount of patterns
      attr: fix integer overflow with more than INT_MAX macros
      attr: harden allocation against integer overflows
      attr: fix silently splitting up lines longer than 2048 bytes
      attr: ignore attribute lines exceeding 2048 bytes
      attr: ignore overly large gitattributes files
      pretty: fix out-of-bounds write caused by integer overflow
      pretty: fix out-of-bounds read when left-flushing with stealing
      pretty: fix out-of-bounds read when parsing invalid padding format
      pretty: fix adding linefeed when placeholder is not expanded
      pretty: fix integer overflow in wrapping format
      utf8: fix truncated string lengths in `utf8_strnwidth()`
      utf8: fix returning negative string width
      utf8: fix overflow when returning string width
      utf8: fix checking for glyph width in `strbuf_utf8_replace()`
      utf8: refactor `strbuf_utf8_replace` to not rely on preallocated buffer
      pretty: restrict input lengths for padding and wrapping formats
      fsck: refactor `fsck_blob()` to allow for more checks
      fsck: pull out function to check a set of blobs
      fsck: move checks for gitattributes
      fsck: implement checks for gitattributes
      refs: fix corruption by not correctly syncing packed-refs to disk
      apply: fix writing behind newly created symbolic links
      delta-islands: fix segfault when freeing island marks

Peter Grayson (1):
      diff: fix regression with --stat and unmerged file

Peter Krefting (1):
      l10n: sv.po: Update Swedish translation (5490t0f0u)

Philip Oakley (6):
      doc: pretty-formats: separate parameters from placeholders
      doc: pretty-formats: delineate `%<|(` parameter values
      doc: pretty-formats document negative column alignments
      doc: pretty-formats describe use of ellipsis in truncation
      doc: pretty-formats note wide char limitations, and add tests
      .gitattributes: include `text` attribute for eol attributes

Philippe Blain (6):
      git-cherry-pick.txt: do not use 'ORIG_HEAD' in example
      git-reset.txt: mention 'ORIG_HEAD' in the Description
      git-merge.txt: mention 'ORIG_HEAD' in the Description
      revisions.txt: be explicit about commands writing 'ORIG_HEAD'
      git-rebase.txt: add a note about 'ORIG_HEAD' being overwritten
      branch: improve advice when --recurse-submodules fails

Phillip Wood (5):
      ci(github): restore "print test failures" step name
      rebase: cleanup "--exec" option handling
      rebase -i: check labels and refs when parsing todo list
      rebase -i: match whole word in is_command()
      rebase -i: fix parsing of "fixup -C<commit>"

Ralf Thielow (1):
      l10n: update German translation

René Scharfe (31):
      t5317: stop losing return codes of git ls-files
      t5317: demonstrate failure to handle multiple --filter options
      pack-objects: fix handling of multiple --filter options
      pack-objects: simplify --filter handling
      list-objects-filter: remove OPT_PARSE_LIST_OBJECTS_FILTER_INIT()
      t4205: don't exit test script on failure
      diff: factor out add_diff_options()
      diff: use add_diff_options() in diff_opt_parse()
      diff: remove parseopts member from struct diff_options
      list-objects-filter: plug pattern_list leak
      t3920: support CR-eating grep
      reflog: clear leftovers in reflog_expiry_cleanup()
      commit: skip already cleared parents in clear_commit_marks_1()
      am: don't pass strvec to apply_parse_options()
      object-file: inline write_buffer()
      use enhanced basic regular expressions on macOS
      mingw: make argv2 in try_shell_exec() non-const
      factor out BARF_UNLESS_COPYABLE
      do full type check in BARF_UNLESS_COPYABLE
      add DUP_ARRAY
      use DUP_ARRAY
      ls-tree: fix expansion of repeated %(path)
      ls-tree: remove dead store and strbuf for quote_c_style()
      read-cache: use size_t for {base,df}_name_compare()
      pack-objects: use strcspn(3) in name_cmp_len()
      cache-tree: fix strbuf growth in prime_cache_tree_rec()
      test-ctype: test isascii
      test-ctype: test islower and isupper
      test-ctype: test iscntrl, ispunct, isxdigit and isprint
      archive: add --mtime
      range-diff: avoid compiler warning when char is unsigned

Rubén Justo (1):
      branch: force-copy a branch to itself via @{-1} is a no-op

Rudy Rigot (1):
      status: modernize git-status "slow untracked files" advice

SZEDER Gábor (1):
      tests: make 'test_oid' print trailing newline

Sean Allred (3):
      var: do not print usage() with a correct invocation
      var: allow GIT_EDITOR to return null
      var: add GIT_SEQUENCE_EDITOR variable

Seija (1):
      maintenance: compare output of pthread functions for inequality with 0

Seija Kijin (6):
      git: remove duplicate includes
      win32: use _endthreadex to terminate threads, not ExitThread
      win32: prepare pthread.c for change by formatting
      win32: close handles of threads that have been joined
      merge: break out of all_strategy loop when strategy is found
      compat/winansi: check for errors of CreateThread() correctly

Siddharth Asthana (2):
      cat-file: add mailmap support to -s option
      cat-file: add mailmap support to --batch-check option

Simon Gerber (1):
      help.c: fix autocorrect in work tree for bare repository

Sven Strickroth (1):
      submodule: accept -v for the update command

Taylor Blau (5):
      ci: avoid unnecessary builds
      t5619: demonstrate clone_local() with ambiguous transport
      clone: delay picking a transport until after get_repo_path()
      dir-iterator: prevent top-level symlinks without FOLLOW_SYMLINKS
      dir-iterator: drop unused `DIR_ITERATOR_FOLLOW_SYMLINKS`

Teng Long (5):
      pack-bitmap.c: remove unnecessary "open_pack_index()" calls
      pack-bitmap.c: avoid exposing absolute paths
      ls-tree: cleanup the redundant SPACE
      t3104: remove shift code in 'test_ls_tree_format'
      range-diff: let '--abbrev' option takes effect

Thierry Reding (1):
      am: allow passing --no-verify flag

Torsten Bögershausen (1):
      t0003: call dd with portable blocksize

Wes Lord (1):
      new-command.txt: update reference to builtin docs

William Sprent (1):
      dir: check for single file cone patterns

Yoichi Nakayama (2):
      git-jump: add an optional argument '--stdout'
      git-jump: invoke emacs/emacsclient

Yukai Chou (1):
      doc: fix non-existent config name

Yutaro Ohno (1):
      doc: add "git switch -c" as another option on detached HEAD

Zhang Yi (1):
      t9700: modernize test scripts

ZheNing Hu (1):
      scalar: show progress if stderr refers to a terminal

idriss fekir (1):
      trace.c, git.c: remove unnecessary parameter to trace_repo_setup()

Ævar Arnfjörð Bjarmason (90):
      bisect tests: test for v2.30.0 "bisect run" regressions
      bisect: refactor bisect_run() to match CodingGuidelines
      bisect test: test exit codes on bad usage
      bisect--helper: emit usage for "git bisect"
      bisect; remove unused "git-bisect.sh" and ".gitignore" entry
      tests: mark tests as passing with SANITIZE=leak
      {reset,merge}: call discard_index() before returning
      commit: discard partial cache before (re-)reading it
      read-cache.c: clear and free "sparse_checkout_patterns"
      dir.c: free "ident" and "exclude_per_dir" in "struct untracked_cache"
      built-ins & libs & helpers: add/move destructors, fix leaks
      unpack-file: fix ancient leak in create_temp_file()
      revision API: call graph_clear() in release_revisions()
      ls-files: fix a --with-tree memory leak
      sequencer.c: fix "opts->strategy" leak in read_strategy_opts()
      connected.c: free the "struct packed_git"
      rebase: don't leak on "--abort"
      cherry-pick: free "struct replay_opts" members
      revert: fix parse_options_concat() leak
      built-ins: use free() not UNLEAK() if trivial, rm dead code
      t5314: check exit code of "git"
      t7600: don't ignore "rev-parse" exit code in helper
      t4023: fix ignored exit codes of git
      Makefile: use sha1collisiondetection by default on OSX and Darwin
      bundle: don't segfault on "git bundle <subcmd>"
      protocol v2: add server-side "bundle-uri" skeleton
      t: create test harness for 'bundle-uri' command
      clone: request the 'bundle-uri' command when available
      bundle-uri client: add boolean transfer.bundleURI setting
      bundle-uri client: add helper for testing server
      submodule absorbgitdirs tests: add missing "Migrating git..." tests
      submodule.c & submodule--helper: pass along "super_prefix" param
      submodule--helper: don't use global --super-prefix in "absorbgitdirs"
      submodule--helper: convert "foreach" to its own "--super-prefix"
      submodule--helper: convert "sync" to its own "--super-prefix"
      submodule--helper: convert "status" to its own "--super-prefix"
      submodule--helper: convert "{update,clone}" to their own "--super-prefix"
      read-tree: add "--super-prefix" option, eliminate global
      builtin/bundle.c: remove superfluous "newargc" variable
      bundle <cmd>: have usage_msg_opt() note the missing "<file>"
      builtin/difftool.c: { 0 }-initialize rather than using memset()
      sparse-index.c: expand_to_path() can assume non-NULL "istate"
      sparse-index API: BUG() out on NULL ensure_full_index()
      read-cache.c: refactor set_new_index_sparsity() for subsequent commit
      bisect--helper: make the order consistently `argc, argv`
      ls-tree: don't use "show_tree_data" for "fast" callbacks
      ls-tree: use a "struct options"
      ls-tree: fold "show_tree_data" into "cb" struct
      ls-tree: make "line_termination" less generic
      env-helper: move this built-in to "test-tool env-helper"
      cache API: add a "INDEX_STATE_INIT" macro/function, add release_index()
      treewide: always have a valid "index_state.repo" member
      add: remove "add.interactive.useBuiltin" & Perl "git add--interactive"
      add API: remove run_add_interactive() wrapper function
      docs & comments: replace mentions of "git-add--interactive.perl"
      tests: mark tests as passing with SANITIZE=leak
      bundle.c: don't leak the "args" in the "struct child_process"
      commit-graph: use free_commit_graph() instead of UNLEAK()
      clone: use free() instead of UNLEAK()
      various: add missing clear_pathspec(), fix leaks
      name-rev: don't xstrdup() an already dup'd string
      repack: fix leaks on error with "goto cleanup"
      worktree: fix a trivial leak in prune_worktrees()
      http-backend.c: fix "dir" and "cmd_arg" leaks in cmd_main()
      http-backend.c: fix cmd_main() memory leak, refactor reg{exec,free}()
      commit-graph: fix a parse_options_concat() leak
      show-branch: free() allocated "head" before return
      builtin/merge.c: use fixed strings, not "strbuf", fix leak
      builtin/merge.c: free "&buf" on "Your local changes..." error
      grep.c: refactor free_grep_patterns()
      grep API: plug memory leaks by freeing "header_list"
      receive-pack: release the linked "struct command *" list
      push: refactor refspec_append_mapped() for subsequent leak-fix
      push: free_refs() the "local_refs" in set_refspecs()
      rebase: use "cleanup" pattern in do_interactive_rebase()
      sequencer.c: split up sequencer_remove_state()
      sequencer API users: fix get_replay_opts() leaks
      builtin/revert.c: move free-ing of "revs" to replay_opts_release()
      builtin/rebase.c: fix "options.onto_name" leak
      sequencer.c: always free() the "msgbuf" in do_pick_commit()
      builtin/rebase.c: free() "options.strategy_opts"
      commit.c: free() revs.commit in get_fork_point()
      config.h: remove unused git_configset_add_parameters()
      run-command.c: remove dead assignment in while-loop
      builtin/rm.c: use narrower "USE_THE_INDEX_VARIABLE"
      cocci & cache.h: fully apply "active_nr" part of index-compatibility
      cocci & cache.h: apply pending "index_cache_pos" rule
      cocci & cache-tree.h: migrate "write_cache_as_tree" to "*_index_*"
      cache-tree API: remove redundant update_main_cache_tree()
      cocci & cache.h: remove "USE_THE_INDEX_COMPATIBILITY_MACROS"

Đoàn Trần Công Danh (6):
      bisect: fix output regressions in v2.30.0
      bisect run: keep some of the post-v2.30.0 output
      bisect-run: verify_good: account for non-negative exit status
      bisect--helper: identify as bisect when report error
      bisect--helper: log: allow arbitrary number of arguments
      date.c: allow ISO 8601 reduced precision times


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.40.0-rc2
@ 2023-03-07 19:47  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2023-03-07 19:47 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.40.0-rc2 is now available for testing at
the usual places.  It is comprised of 461 non-merge commits since
v2.39.0, contributed by 78 people, 30 of which are new faces [*].

Relative to 2.40-rc1, there is one fix to make "git range-diff
--abbrev=<number>" option work on platforms whose char is unsigned.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.40.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.39.0 are as follows.
Welcome to the Git development community!

  Adam Szkoda, Alison Winters, Ashutosh Pandey, Carl Baldwin,
  Daniël Haazen, Drew Noakes, Eric Sesterhenn, Gwyneth Morgan,
  Harshil-Jani, Hubert Jasudowicz, idriss fekir, Kostya Farber,
  Marco Nenciarini, Markus Vervier, Matheus Tavares Bernardino,
  Mathias Krause, Pat LaVarre, Peter Grayson, Rudy Rigot, Seija,
  Seija Kijin, Simon Gerber, Thierry Reding, toon@iotcl.com, Wes
  Lord, Yukai Chou, Yutaro Ohno, yvvdwf, Zhang Yi, and 孟子易.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Andrei Rybak, Calvin Wan, Carlo
  Marcelo Arenas Belón, Christian Couder, Chris. Webster,
  Derrick Stolee, Đoàn Trần Công Danh, Elijah Newren,
  Emily Shaffer, Eric Sunshine, Eric Wong, Erik Cervin Edin, Glen
  Choo, Jeff Hostetler, Jeff King, Jiang Xin, Joern Schneeweisz,
  Johannes Schindelin, Johannes Sixt, John Cai, Jonathan Tan,
  Junio C Hamano, Karthik Nayak, Kevin Willford, Kyle Meyer, Kyle
  Zhao, Lars Kellogg-Stedman, Martin Ågren, Matthias Aßhauer,
  M Hickford, Patrick Steinhardt, Philip Oakley, Philippe Blain,
  Phillip Wood, Randall S. Becker, René Scharfe, Rubén Justo,
  Sean Allred, Siddharth Asthana, Sven Strickroth, SZEDER Gábor,
  Taylor Blau, Teng Long, Torsten Bögershausen, William Sprent,
  Yoichi Nakayama, and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.40 Release Notes (draft)
===============================

UI, Workflows & Features

 * "merge-tree" learns a new `--merge-base` option.

 * "git jump" (in contrib/) learned to present the "quickfix list" to
   its standard output (instead of letting it consumed by the editor
   it invokes), and learned to also drive emacs/emacsclient.

 * "git var UNKNOWN_VARIABLE" and "git var VARIABLE" with the variable
   given an empty value used to behave identically.  Now the latter
   just gives an empty output, while the former still gives an error
   message.

 * Introduce a case insensitive mode to the Bash completion helpers.

 * The advice message given by "git status" when it takes long time to
   enumerate untracked paths has been updated.

 * Just like "git var GIT_EDITOR" abstracts the complex logic to
   choose which editor gets used behind it, "git var" now give support
   to GIT_SEQUENCE_EDITOR.

 * "git format-patch" learned to honor format.mboxrd even when sending
   patches to the standard output stream,

 * 'cat-file' gains mailmap support for its '--batch-check' and '-s'
   options.

 * Conditionally skip the pre-applypatch and applypatch-msg hooks when
   applying patches with 'git am'.

 * Introduce an optional configuration to allow the trailing hash that
   protects the index file from bit flipping.

 * "git check-attr" learned to take an optional tree-ish to read the
   .gitattributes file from.

 * "scalar" learned to give progress bar.

 * "grep -P" learned to use Unicode Character Property to grok
   character classes when processing \b and \w etc.

 * "git rebase" often ignored incompatible options instead of
   complaining, which has been corrected.

 * "scalar" warns but continues when its periodic maintenance
   feature cannot be enabled.

 * The bundle-URI subsystem adds support for creation-token heuristics
   to help incremental fetches.

 * Userdiff regexp update for Java language.

 * "git fetch --jobs=0" used to hit a BUG(), which has been corrected
   to use the available CPUs.

 * An invalid label or ref in the "rebase -i" todo file used to
   trigger an runtime error. SUch an error is now diagnosed while the
   todo file is parsed.

 * The "diff" drivers specified by the "diff" attribute attached to
   paths can now specify which algorithm (e.g. histogram) to use.

 * "git range-diff" learned --abbrev=<num> option.

 * "git archive HEAD^{tree}" records the paths with the current
   timestamp in the archive, making it harder to obtain a stable
   output.  The command learned the --mtime option to specify an
   arbitrary timestamp (e.g. --mtime="@0 +0000" for the epoch).

 * The credential subsystem learned that a password may have an
   explicit expiration.

 * The format.attach configuration variable lacked a way to override a
   value defined in a lower-priority configuration file (e.g. the
   system one) by redefining it in a higher-priority configuration
   file.  Now, setting format.attach to an empty string means show the
   patch inline in the e-mail message, without using MIME attachment.

   This is a backward incompatible change.


Performance, Internal Implementation, Development Support etc.

 * `git bisect` becomes a builtin.

 * The pack-bitmap machinery is taught to log the paths of redundant
   bitmap(s) to trace2 instead of stderr.

 * Use the SHA1DC implementation on macOS, just like other platforms,
   by default.

 * Even in a repository with promisor remote, it is useless to
   attempt to lazily attempt fetching an object that is expected to be
   commit, because no "filter" mode omits commit objects.  Take
   advantage of this assumption to fail fast on errors.

 * Stop using "git --super-prefix" and narrow the scope of its use to
   the submodule--helper.

 * Stop running win+VS build by default.

 * CI updates.  We probably want a clean-up to move the long shell
   script embedded in yaml file into a separate file, but that can
   come later.

 * Use `git diff --no-index` as a test_cmp on Windows.

   We'd probably need to revisit "do we really want to, and have to,
   lose CRLF vs LF?" later, at which time we may be able to further
   clean this up by replacing "git diff --no-index" with "diff -u".

 * Avoid unnecessary builds in CI, with settings configured in
   ci-config.

 * Plug leaks in sequencer subsystem and its users.

 * In-tree .gitattributes update to match the way we recommend our
   users to mark a file as text.
   (merge 1f34e0cd3d po/attributes-text later to maint).

 * Finally retire the scripted "git add -p/-i" implementation and have
   everybody use the one reimplemented in C.


Fixes since v2.39
-----------------

 * Various leak fixes.

 * Fix a bug where `pack-objects` would not respect multiple `--filter`
   arguments when invoked directly.
   (merge d4f7036887 rs/multi-filter-args later to maint).

 * Make fsmonitor more robust to avoid the flakiness seen in t7527.
   (merge 6692d45477 jh/t7527-unflake-by-forcing-cookie later to maint).

 * Stop using deprecated macOS API in fsmonitor.
   (merge b0226007f0 jh/fsmonitor-darwin-modernize later to maint).

 * Redefining system functions for a few functions did not follow our
   usual "implement git_foo() and #define foo(args) git_foo(args)"
   pattern, which has broken build for some folks.

 * The way the diff machinery prepares the options array for the
   parse_options API has been refactored to avoid resource leaks.
   (merge 189e97bc4b rs/diff-parseopts later to maint).

 * Correct pthread API usage.
   (merge 786e67611d sx/pthread-error-check-fix later to maint).

 * The code to auto-correct a misspelt subcommand unnecessarily called
   into git_default_config() from the early config codepath, which was
   a no-no.  This has bee corrected.
   (merge 0918d08887 sg/help-autocorrect-config-fix later to maint).

 * "git http-fetch" (which is rarely used) forgot to identify itself
   in the trace2 output.
   (merge 7abb43cbc8 jt/http-fetch-trace2-report-name later to maint).

 * The output from "git diff --stat" on an unmerged path lost the
   terminating LF in Git 2.39, which has been corrected.
   (merge 209d9cb011 pg/diff-stat-unmerged-regression-fix later to maint).

 * "git pull -v --recurse-submodules" attempted to pass "-v" down to
   underlying "git submodule update", which did not understand the
   request and barfed, which has been corrected.
   (merge 6f65f84766 ss/pull-v-recurse-fix later to maint).

 * When given a pattern that matches an empty string at the end of a
   line, the code to parse the "git diff" line-ranges fell into an
   infinite loop, which has been corrected.

 * Fix the sequence to fsync $GIT_DIR/packed-refs file that forgot to
   flush its output to the disk..

 * Fix to a small regression in 2.38 days.

 * "git diff --relative" did not mix well with "git diff --ext-diff",
   which has been corrected.

 * The logic to see if we are using the "cone" mode by checking the
   sparsity patterns has been tightened to avoid mistaking a pattern
   that names a single file as specifying a cone.

 * Deal with a few deprecation warning from cURL library.

 * Doc update for environment variables set when hooks are invoked.

 * Document ORIG_HEAD a bit more.

 * "git ls-tree --format='%(path) %(path)' $tree $path" showed the
   path three times, which has been corrected.

 * Remove "git env--helper" and demote it to a test-tool subcommand.
   (merge 4a1baacd46 ab/test-env-helper later to maint).

 * Newer regex library macOS stopped enabling GNU-like enhanced BRE,
   where '\(A\|B\)' works as alternation, unless explicitly asked with
   the REG_ENHANCED flag.  "git grep" now can be compiled to do so, to
   retain the old behaviour.

 * Pthread emulation on Win32 leaked thread handle when a thread is
   joined.
   (merge 238a9dfe86 sk/win32-close-handle-upon-pthread-join later to maint).

 * "git send-email -v 3" used to be expanded to "git send-email
   --validate 3" when the user meant to pass them down to
   "format-patch", which has been corrected.
   (merge 8774aa56ad km/send-email-with-v-reroll-count later to maint).

 * Document that "branch -f <branch>" disables only the safety to
   avoid recreating an existing branch.

 * "git fetch <group>", when "<group>" of remotes lists the same
   remote twice, unnecessarily failed when parallel fetching was
   enabled, which has been corrected.
   (merge 06a668cb90 cw/fetch-remote-group-with-duplication later to maint).

 * Clarify how "checkout -b/-B" and "git branch [-f]" are similar but
   different in the documentation.

 * "git hash-object" now checks that the resulting object is well
   formed with the same code as "git fsck".
   (merge 8e4309038f jk/hash-object-fsck later to maint).

 * Improve the error message given when private key is not loaded in
   the ssh agent in the codepath to sign with an ssh key.
   (merge dce7b31126 as/ssh-signing-improve-key-missing-error later to maint).

 * Adjust "git request-pull" to strip embedded signature from signed
   tags to notice non-PGP signatures.
   (merge a9cad02538 gm/request-pull-with-non-pgp-signed-tags later to maint).

 * Remove support for MSys, which now lags way behind MSys2.
   (merge 2987407f3c hj/remove-msys-support later to maint).

 * Fix use of CreateThread() API call made early in the windows
   start-up code.
   (merge 592bcab61b sk/winansi-createthread-fix later to maint).

 * "git pack-objects" learned to release delta-island bitmap data when
   it is done using it, saving peak heap memory usage.
   (merge 647982bb71 ew/free-island-marks later to maint).

 * In an environment where dynamically generated code is prohibited to
   run (e.g. SELinux), failure to JIT pcre patterns is expected.  Fall
   back to interpreted execution in such a case.
   (merge 50b6ad55b0 cb/grep-fallback-failing-jit later to maint).

 * "git name-rev" heuristics update.
   (merge b2182a8730 en/name-rev-make-taggerdate-much-less-important later to maint).

 * Remove more remaining uses of macros that relies on the_index
   singleton instance without explicitly spelling it out.

 * Remove unnecessary explicit sizing of strbuf.
   (merge 93ea118bed rs/cache-tree-strbuf-growth-fix later to maint).

 * Doc update.
   (merge d9ec3b0dc0 jk/doc-ls-remote-matching later to maint).

 * Error messages given upon a signature verification failure used to
   discard the errors from underlying gpg program, which has been
   corrected.
   (merge ad6b320756 js/gpg-errors later to maint).

 * Update --date=default documentation.
   (merge 9deef088ae rd/doc-default-date-format later to maint).

 * A test helper had a single write(2) of 256kB, which was too big for
   some platforms (e.g. NonStop), which has been corrected by using
   xwrite() wrapper appropriately.
   (merge 58eab6ff13 jc/genzeros-avoid-raw-write later to maint).

 * sscanf(3) used in "git symbolic-ref --short" implementation found
   to be not working reliably on macOS in UTF-8 locales.  Rewrite the
   code to avoid sscanf() altogether to work it around.
   (merge 613bef56b8 jk/shorten-unambiguous-ref-wo-sscanf later to maint).

 * Various fix-ups on HTTP tests.
   (merge 8f2146dbf1 jk/http-test-fixes later to maint).

 * Fixes to code that parses the todo file used in "rebase -i".
   (merge 666b6e1135 pw/rebase-i-parse-fix later to maint).

 * Test library clean-up.
   (merge c600a91c94 ar/test-lib-remove-stale-comment later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 4eb1ccecd4 dh/mingw-ownership-check-typofix later to maint).
   (merge f95526419b ar/typofix-gitattributes-doc later to maint).
   (merge 27875aeec9 km/doc-branch-start-point later to maint).
   (merge 35c194dc57 es/t1509-root-fixes later to maint).
   (merge 7b341645e3 pw/ci-print-failure-name-fix later to maint).
   (merge bcb71d45bf jx/t1301-updates later to maint).
   (merge ebdc46c242 jc/doc-diff-patch.txt later to maint).
   (merge a87a20cbb4 ar/test-cleanup later to maint).
   (merge f5156f1885 ar/bisect-doc-update later to maint).
   (merge fca2d86c97 jk/interop-error later to maint).
   (merge cf4936ed74 tl/ls-tree-code-clean-up later to maint).
   (merge dcb47e52b0 en/t6426-todo-cleanup later to maint).
   (merge 5b8db44bdd jc/format-patch-v-unleak later to maint).
   (merge 590b636737 jk/hash-object-literally-fd-leak later to maint).
   (merge 5458ba0a4d tb/t0003-invoke-dd-more-portably later to maint).
   (merge 70661d288b ar/markup-em-dash later to maint).
   (merge e750951e74 en/ls-files-doc-update later to maint).
   (merge 4f542975d1 mh/doc-credential-cache-only-in-core later to maint).
   (merge 3a2ebaebc7 gc/index-format-doc later to maint).
   (merge b08edf709d jk/httpd-test-updates later to maint).
   (merge d85e9448dd wl/new-command-doc later to maint).
   (merge d912a603ed kf/t5000-modernise later to maint).
   (merge e65b868d07 rs/size-t-fixes later to maint).
   (merge 3eb1e1ca9a ab/config-h-remove-unused later to maint).
   (merge d390e08076 cw/doc-pushurl-vs-url later to maint).
   (merge 567342fc77 rs/ctype-test later to maint).
   (merge d35d8f2e7a ap/t2015-style-update later to maint).

----------------------------------------------------------------

Changes since v2.39.0 are as follows:

Adam Szkoda (1):
      ssh signing: better error message when key not in agent

Alison Winters (2):
      completion: add optional ignore-case when matching refs
      completion: add case-insensitive match of pseudorefs

Andrei Rybak (12):
      gitattributes.txt: fix typo in "comma separated"
      *: fix typos which duplicate a word
      git-bisect-lk2009: update java code conventions link
      git-bisect-lk2009: update nist report link
      t6003: uncomment test '--max-age=c3, --topo-order'
      t6422: drop commented out code
      t7527: use test_when_finished in 'case insensitive+preserving'
      Documentation: render dash correctly
      userdiff: support Java type parameters
      userdiff: support Java record types
      userdiff: support Java sealed classes
      test-lib: drop comment about test_description

Ashutosh Pandey (1):
      t2015-checkout-unborn.sh: changes the style for cd

Calvin Wan (2):
      fetch: fix duplicate remote parallel fetch bug
      Documentation: clarify multiple pushurls vs urls

Carlo Marcelo Arenas Belón (2):
      test-lib: add prerequisite for 64-bit platforms
      grep: correctly identify utf-8 characters with \{b,w} in -P

Chris. Webster (3):
      ci (check-whitespace): suggest fixes for errors
      ci (check-whitespace): add links to job output
      ci (check-whitespace): move to actions/checkout@v3

Daniël Haazen (1):
      mingw: fix typo in an error message from ownership check

Derrick Stolee (25):
      transport: rename got_remote_heads
      bundle-uri: serve bundle.* keys from config
      strbuf: introduce strbuf_strip_file_from_path()
      bundle-uri: allow relative URLs in bundle lists
      bundle-uri: download bundles from an advertised list
      clone: unbundle the advertised bundles
      hashfile: allow skipping the hash function
      read-cache: add index.skipHash config option
      test-lib-functions: add helper for trailing hash
      features: feature.manyFiles implies fast index writes
      t1600: fix racy index.skipHash test
      t: allow 'scalar' in test_must_fail
      t921*: test scalar behavior starting maintenance
      scalar: only warn when background maintenance fails
      bundle: test unbundling with incomplete history
      bundle: verify using check_connected()
      t5558: add tests for creationToken heuristic
      bundle-uri: parse bundle.heuristic=creationToken
      bundle-uri: parse bundle.<id>.creationToken values
      bundle-uri: download in creationToken order
      clone: set fetch.bundleURI if appropriate
      bundle-uri: drop bundle.flag from design doc
      fetch: fetch from an external bundle URI
      bundle-uri: store fetch.bundleCreationToken
      bundle-uri: test missing bundles with heuristic

Elijah Newren (16):
      ls-files: add missing documentation for --resolve-undo option
      ls-files: clarify descriptions of file selection options
      ls-files: clarify descriptions of status tags for -t
      ls-files: guide folks to --exclude-standard over other --exclude* options
      t6426: fix TODO about making test more comprehensive
      rebase: mark --update-refs as requiring the merge backend
      rebase: flag --apply and --merge as incompatible
      rebase: remove --allow-empty-message from incompatible opts
      rebase: fix docs about incompatibilities with --root
      rebase: fix incompatiblity checks for --[no-]reapply-cherry-picks
      rebase: add coverage of other incompatible options
      rebase: clarify the OPT_CMDMODE incompatibilities
      rebase: fix formatting of rebase --reapply-cherry-picks option in docs
      rebase: put rebase_options initialization in single place
      rebase: provide better error message for apply options vs. merge config
      name-rev: fix names by dropping taggerdate workaround

Emily Shaffer (4):
      run-command: allow stdin for run_processes_parallel
      hook API: support passing stdin to hooks, convert am's 'post-rewrite'
      sequencer: use the new hook API for the simpler "post-rewrite" call
      hook: support a --to-stdin=<path> option

Eric Sunshine (4):
      t1509: fix failing "root work tree" test due to owner-check
      t1509: make "setup" test more robust
      t1509: facilitate repeated script invocations
      githooks: discuss Git operations in foreign repositories

Eric Wong (2):
      format-patch: support format.mboxrd with --stdout
      delta-islands: free island_marks and bitmaps

Glen Choo (2):
      read-tree + fetch tests: test failing "--super-prefix" interaction
      docs: document zero bits in index "mode"

Gwyneth Morgan (2):
      request-pull: filter out SSH/X.509 tag signatures
      signature-format.txt: note SSH and X.509 signature delimiters

Harshil-Jani (2):
      mingw: remove duplicate `USE_NED_ALLOCATOR` directive
      mingw: remove msysGit/MSYS1 support

Jeff Hostetler (2):
      fsmonitor: fix race seen in t7527
      fsmonitor: eliminate call to deprecated FSEventStream function

Jeff King (74):
      git-jump: move valid-mode check earlier
      pack-bitmap.c: break out of the bitmap loop early if not tracing
      pack-bitmap.c: trace bitmap ignore logs when midx-bitmap is found
      git-compat-util: avoid redefining system function names
      git-compat-util: undefine system names before redeclaring them
      server_supports_v2(): use a separate function for die_on_error
      ls-refs: use repository parameter to iterate refs
      blob: drop unused parts of parse_blob_buffer()
      list-objects: drop process_gitlink() function
      ws: drop unused parameter from ws_blank_line()
      xdiff: drop unused parameter in def_ff()
      xdiff: mark unused parameter in xdl_call_hunk_func()
      diff: mark unused parameters in callbacks
      list-objects-filter: mark unused parameters in virtual functions
      userdiff: mark unused parameter in internal callback
      ref-filter: reject arguments to %(HEAD)
      ref-filter: factor out "%(foo) does not take arguments" errors
      ref-filter: factor out "unrecognized %(foo) arg" errors
      ref-filter: truncate atom names in error messages
      ref-filter: convert email atom parser to use err_bad_arg()
      test-bundle-uri: drop unused variables
      diff: use filespec path to set up tempfiles for ext-diff
      diff: clean up external-diff argv setup
      diff: drop "name" parameter from prepare_temp_file()
      convert trivial uses of strncmp() to starts_with()
      convert trivial uses of strncmp() to skip_prefix()
      object-file: inline calls to read_object()
      streaming: inline call to read_object_file_extended()
      read_object_file_extended(): drop lookup_replace option
      repo_read_object_file(): stop wrapping read_object_file_extended()
      packfile: inline custom read_object()
      object-file: fix indent-with-space
      t/interop: report which vanilla git command failed
      http-push: prefer CURLOPT_UPLOAD to CURLOPT_PUT
      http: prefer CURLOPT_SEEKFUNCTION to CURLOPT_IOCTLFUNCTION
      http: support CURLOPT_PROTOCOLS_STR
      t1007: modernize malformed object tests
      t1006: stop using 0-padded timestamps
      t7030: stop using invalid tag name
      t: use hash-object --literally when created malformed objects
      fsck: provide a function to fsck buffer without object struct
      hash-object: use fsck for object checks
      hash-object: fix descriptor leak with --literally
      fsck: do not assume NUL-termination of buffers
      t/lib-httpd: bump required apache version to 2.2
      t/lib-httpd: bump required apache version to 2.4
      t/lib-httpd: drop SSLMutex config
      t/lib-httpd: increase ssl key size to 2048 bits
      http-push: prefer CURLOPT_UPLOAD to CURLOPT_PUT
      http: prefer CURLOPT_SEEKFUNCTION to CURLOPT_IOCTLFUNCTION
      http: support CURLOPT_PROTOCOLS_STR
      doc/ls-remote: cosmetic cleanups for examples
      doc/ls-remote: clarify pattern format
      shorten_unambiguous_ref(): avoid integer truncation
      shorten_unambiguous_ref(): use NUM_REV_PARSE_RULES constant
      shorten_unambiguous_ref(): avoid sscanf()
      add basic http proxy tests
      t0066: drop setup of "dir5"
      t5541: run "used receive-pack service" test earlier
      t5541: stop marking "used receive-pack service" test as v0 only
      t5541: simplify and move "no empty path components" test
      t5551: drop redundant grep for Accept-Language
      t5551: lower-case headers in expected curl trace
      t5551: handle HTTP/2 when checking curl trace
      t5551: stop forcing clone to run with v0 protocol
      t5551: handle v2 protocol when checking curl trace
      t5551: handle v2 protocol in upload-pack service test
      t5551: simplify expected cookie file
      t5551: handle v2 protocol in cookie test
      t5551: drop curl trace lines without headers
      t/lib-httpd: respect $HTTPD_PROTO in expect_askpass()
      t/lib-httpd: enable HTTP/2 "h2" protocol, not just h2c
      t5559: fix test failures with LIB_HTTPD_SSL
      t5559: make SSL/TLS the default

Jiang Xin (3):
      t1301: fix wrong template dir for git-init
      t1301: use test_when_finished for cleanup
      t1301: do not change $CWD in "shared=all" test case

Johannes Schindelin (24):
      bisect--helper: handle states directly
      Turn `git bisect` into a full built-in
      t0021: use Windows-friendly `pwd`
      tests(mingw): avoid very slow `mingw_test_cmp`
      ci: only run win+VS build & tests in Git for Windows' fork
      bisect--helper: simplify exit code computation
      bisect: verify that a bogus option won't try to start a bisection
      bisect run: fix the error message
      bisect: remove Cogito-related code
      bisect: no longer try to clean up left-over `.git/head-name` files
      fsck: document the new `gitattributes` message IDs
      attr: adjust a mismatched data type
      attr: adjust a mismatched data type
      Git 2.31.7
      Git 2.32.6
      Git 2.33.7
      Git 2.34.7
      Git 2.35.7
      Git 2.36.5
      Git 2.37.6
      Git 2.38.4
      Git 2.39.2
      t7510: add a test case that does not need gpg
      gpg: do show gpg's error message upon failure

Johannes Sixt (1):
      t3920: don't ignore errors of more than one command with `|| true`

John Cai (4):
      docs: link generating patch sections
      attr: fix instructions on how to check attrs
      diff: consolidate diff algorithm option parsing
      diff: teach diff to read algorithm from diff driver

Jonathan Tan (5):
      http-fetch: invoke trace2_cmd_name()
      object-file: remove OBJECT_INFO_IGNORE_LOOSE
      object-file: refactor map_loose_object_1()
      object-file: emit corruption errors when detected
      commit: don't lazy-fetch commits

Junio C Hamano (42):
      Git 2.30.7
      Git 2.31.6
      Git 2.32.5
      Git 2.33.6
      Git 2.34.6
      Git 2.35.6
      Git 2.36.4
      Git 2.37.5
      Git 2.38.3
      Git 2.39.1
      Start the 2.40 cycle
      The first batch for 2.40
      The second batch
      The third batch
      The fourth batch
      The fifth batch
      The sixth batch
      format-patch: unleak "-v <num>"
      The seventh batch
      branch: document `-f` and linked worktree behaviour
      checkout: document -b/-B to highlight the differences from "git branch"
      The eighth batch
      The ninth batch
      The tenth batch
      The eleventh batch
      The twelfth batch
      The thirteenth batch
      Git 2.30.8
      The fourteenth batch
      The fifteenth batch
      Prepare for 2.39.3 just in case
      The sixteenth batch
      rev-list: clarify git-log default date format
      test-genzeros: avoid raw write(2)
      format.attach: allow empty value to disable multi-part messages
      The seventeenth batch
      Git 2.40-rc0
      A few more topics post 2.40-rc0
      A bit more before 2.40-rc1
      A bit more before 2.40-rc1
      Git 2.40-rc1
      Git 2.40-rc2

Karthik Nayak (2):
      t0003: move setup for `--all` into new block
      attr: add flag `--source` to work with tree-ish

Kostya Farber (1):
      t5000: modernise archive and :(glob) test

Kyle Meyer (2):
      send-email: relay '-v N' to format-patch
      doc/git-branch: fix --force description typo

Kyle Zhao (3):
      merge-tree.c: add --merge-base=<commit> option
      merge-tree.c: allow specifying the merge-base when --stdin is passed
      docs: fix description of the `--merge-base` option

Lars Kellogg-Stedman (1):
      line-range: fix infinite loop bug with '$' regex

M Hickford (2):
      Documentation: clarify that cache forgets credentials if the system restarts
      credential: new attribute password_expiry_utc

Martin Ågren (1):
      git-cat-file.txt: fix list continuations rendering literally

Mathias Krause (1):
      grep: fall back to interpreter if JIT memory allocation fails

Matthias Aßhauer (1):
      fetch: choose a sensible default with --jobs=0 again

Patrick Steinhardt (28):
      attr: fix overflow when upserting attribute with overly long name
      attr: fix out-of-bounds read with huge attribute names
      attr: fix integer overflow when parsing huge attribute names
      attr: fix out-of-bounds write when parsing huge number of attributes
      attr: fix out-of-bounds read with unreasonable amount of patterns
      attr: fix integer overflow with more than INT_MAX macros
      attr: harden allocation against integer overflows
      attr: fix silently splitting up lines longer than 2048 bytes
      attr: ignore attribute lines exceeding 2048 bytes
      attr: ignore overly large gitattributes files
      pretty: fix out-of-bounds write caused by integer overflow
      pretty: fix out-of-bounds read when left-flushing with stealing
      pretty: fix out-of-bounds read when parsing invalid padding format
      pretty: fix adding linefeed when placeholder is not expanded
      pretty: fix integer overflow in wrapping format
      utf8: fix truncated string lengths in `utf8_strnwidth()`
      utf8: fix returning negative string width
      utf8: fix overflow when returning string width
      utf8: fix checking for glyph width in `strbuf_utf8_replace()`
      utf8: refactor `strbuf_utf8_replace` to not rely on preallocated buffer
      pretty: restrict input lengths for padding and wrapping formats
      fsck: refactor `fsck_blob()` to allow for more checks
      fsck: pull out function to check a set of blobs
      fsck: move checks for gitattributes
      fsck: implement checks for gitattributes
      refs: fix corruption by not correctly syncing packed-refs to disk
      apply: fix writing behind newly created symbolic links
      delta-islands: fix segfault when freeing island marks

Peter Grayson (1):
      diff: fix regression with --stat and unmerged file

Philip Oakley (6):
      doc: pretty-formats: separate parameters from placeholders
      doc: pretty-formats: delineate `%<|(` parameter values
      doc: pretty-formats document negative column alignments
      doc: pretty-formats describe use of ellipsis in truncation
      doc: pretty-formats note wide char limitations, and add tests
      .gitattributes: include `text` attribute for eol attributes

Philippe Blain (6):
      git-cherry-pick.txt: do not use 'ORIG_HEAD' in example
      git-reset.txt: mention 'ORIG_HEAD' in the Description
      git-merge.txt: mention 'ORIG_HEAD' in the Description
      revisions.txt: be explicit about commands writing 'ORIG_HEAD'
      git-rebase.txt: add a note about 'ORIG_HEAD' being overwritten
      branch: improve advice when --recurse-submodules fails

Phillip Wood (5):
      ci(github): restore "print test failures" step name
      rebase: cleanup "--exec" option handling
      rebase -i: check labels and refs when parsing todo list
      rebase -i: match whole word in is_command()
      rebase -i: fix parsing of "fixup -C<commit>"

René Scharfe (31):
      t5317: stop losing return codes of git ls-files
      t5317: demonstrate failure to handle multiple --filter options
      pack-objects: fix handling of multiple --filter options
      pack-objects: simplify --filter handling
      list-objects-filter: remove OPT_PARSE_LIST_OBJECTS_FILTER_INIT()
      t4205: don't exit test script on failure
      diff: factor out add_diff_options()
      diff: use add_diff_options() in diff_opt_parse()
      diff: remove parseopts member from struct diff_options
      list-objects-filter: plug pattern_list leak
      t3920: support CR-eating grep
      reflog: clear leftovers in reflog_expiry_cleanup()
      commit: skip already cleared parents in clear_commit_marks_1()
      am: don't pass strvec to apply_parse_options()
      object-file: inline write_buffer()
      use enhanced basic regular expressions on macOS
      mingw: make argv2 in try_shell_exec() non-const
      factor out BARF_UNLESS_COPYABLE
      do full type check in BARF_UNLESS_COPYABLE
      add DUP_ARRAY
      use DUP_ARRAY
      ls-tree: fix expansion of repeated %(path)
      ls-tree: remove dead store and strbuf for quote_c_style()
      read-cache: use size_t for {base,df}_name_compare()
      pack-objects: use strcspn(3) in name_cmp_len()
      cache-tree: fix strbuf growth in prime_cache_tree_rec()
      test-ctype: test isascii
      test-ctype: test islower and isupper
      test-ctype: test iscntrl, ispunct, isxdigit and isprint
      archive: add --mtime
      range-diff: avoid compiler warning when char is unsigned

Rubén Justo (1):
      branch: force-copy a branch to itself via @{-1} is a no-op

Rudy Rigot (1):
      status: modernize git-status "slow untracked files" advice

SZEDER Gábor (1):
      tests: make 'test_oid' print trailing newline

Sean Allred (3):
      var: do not print usage() with a correct invocation
      var: allow GIT_EDITOR to return null
      var: add GIT_SEQUENCE_EDITOR variable

Seija (1):
      maintenance: compare output of pthread functions for inequality with 0

Seija Kijin (6):
      git: remove duplicate includes
      win32: use _endthreadex to terminate threads, not ExitThread
      win32: prepare pthread.c for change by formatting
      win32: close handles of threads that have been joined
      merge: break out of all_strategy loop when strategy is found
      compat/winansi: check for errors of CreateThread() correctly

Siddharth Asthana (2):
      cat-file: add mailmap support to -s option
      cat-file: add mailmap support to --batch-check option

Simon Gerber (1):
      help.c: fix autocorrect in work tree for bare repository

Sven Strickroth (1):
      submodule: accept -v for the update command

Taylor Blau (5):
      ci: avoid unnecessary builds
      t5619: demonstrate clone_local() with ambiguous transport
      clone: delay picking a transport until after get_repo_path()
      dir-iterator: prevent top-level symlinks without FOLLOW_SYMLINKS
      dir-iterator: drop unused `DIR_ITERATOR_FOLLOW_SYMLINKS`

Teng Long (5):
      pack-bitmap.c: remove unnecessary "open_pack_index()" calls
      pack-bitmap.c: avoid exposing absolute paths
      ls-tree: cleanup the redundant SPACE
      t3104: remove shift code in 'test_ls_tree_format'
      range-diff: let '--abbrev' option takes effect

Thierry Reding (1):
      am: allow passing --no-verify flag

Torsten Bögershausen (1):
      t0003: call dd with portable blocksize

Wes Lord (1):
      new-command.txt: update reference to builtin docs

William Sprent (1):
      dir: check for single file cone patterns

Yoichi Nakayama (2):
      git-jump: add an optional argument '--stdout'
      git-jump: invoke emacs/emacsclient

Yukai Chou (1):
      doc: fix non-existent config name

Yutaro Ohno (1):
      doc: add "git switch -c" as another option on detached HEAD

Zhang Yi (1):
      t9700: modernize test scripts

ZheNing Hu (1):
      scalar: show progress if stderr refers to a terminal

idriss fekir (1):
      trace.c, git.c: remove unnecessary parameter to trace_repo_setup()

Ævar Arnfjörð Bjarmason (90):
      bisect tests: test for v2.30.0 "bisect run" regressions
      bisect: refactor bisect_run() to match CodingGuidelines
      bisect test: test exit codes on bad usage
      bisect--helper: emit usage for "git bisect"
      bisect; remove unused "git-bisect.sh" and ".gitignore" entry
      tests: mark tests as passing with SANITIZE=leak
      {reset,merge}: call discard_index() before returning
      commit: discard partial cache before (re-)reading it
      read-cache.c: clear and free "sparse_checkout_patterns"
      dir.c: free "ident" and "exclude_per_dir" in "struct untracked_cache"
      built-ins & libs & helpers: add/move destructors, fix leaks
      unpack-file: fix ancient leak in create_temp_file()
      revision API: call graph_clear() in release_revisions()
      ls-files: fix a --with-tree memory leak
      sequencer.c: fix "opts->strategy" leak in read_strategy_opts()
      connected.c: free the "struct packed_git"
      rebase: don't leak on "--abort"
      cherry-pick: free "struct replay_opts" members
      revert: fix parse_options_concat() leak
      built-ins: use free() not UNLEAK() if trivial, rm dead code
      t5314: check exit code of "git"
      t7600: don't ignore "rev-parse" exit code in helper
      t4023: fix ignored exit codes of git
      Makefile: use sha1collisiondetection by default on OSX and Darwin
      bundle: don't segfault on "git bundle <subcmd>"
      protocol v2: add server-side "bundle-uri" skeleton
      t: create test harness for 'bundle-uri' command
      clone: request the 'bundle-uri' command when available
      bundle-uri client: add boolean transfer.bundleURI setting
      bundle-uri client: add helper for testing server
      submodule absorbgitdirs tests: add missing "Migrating git..." tests
      submodule.c & submodule--helper: pass along "super_prefix" param
      submodule--helper: don't use global --super-prefix in "absorbgitdirs"
      submodule--helper: convert "foreach" to its own "--super-prefix"
      submodule--helper: convert "sync" to its own "--super-prefix"
      submodule--helper: convert "status" to its own "--super-prefix"
      submodule--helper: convert "{update,clone}" to their own "--super-prefix"
      read-tree: add "--super-prefix" option, eliminate global
      builtin/bundle.c: remove superfluous "newargc" variable
      bundle <cmd>: have usage_msg_opt() note the missing "<file>"
      builtin/difftool.c: { 0 }-initialize rather than using memset()
      sparse-index.c: expand_to_path() can assume non-NULL "istate"
      sparse-index API: BUG() out on NULL ensure_full_index()
      read-cache.c: refactor set_new_index_sparsity() for subsequent commit
      bisect--helper: make the order consistently `argc, argv`
      ls-tree: don't use "show_tree_data" for "fast" callbacks
      ls-tree: use a "struct options"
      ls-tree: fold "show_tree_data" into "cb" struct
      ls-tree: make "line_termination" less generic
      env-helper: move this built-in to "test-tool env-helper"
      cache API: add a "INDEX_STATE_INIT" macro/function, add release_index()
      treewide: always have a valid "index_state.repo" member
      add: remove "add.interactive.useBuiltin" & Perl "git add--interactive"
      add API: remove run_add_interactive() wrapper function
      docs & comments: replace mentions of "git-add--interactive.perl"
      tests: mark tests as passing with SANITIZE=leak
      bundle.c: don't leak the "args" in the "struct child_process"
      commit-graph: use free_commit_graph() instead of UNLEAK()
      clone: use free() instead of UNLEAK()
      various: add missing clear_pathspec(), fix leaks
      name-rev: don't xstrdup() an already dup'd string
      repack: fix leaks on error with "goto cleanup"
      worktree: fix a trivial leak in prune_worktrees()
      http-backend.c: fix "dir" and "cmd_arg" leaks in cmd_main()
      http-backend.c: fix cmd_main() memory leak, refactor reg{exec,free}()
      commit-graph: fix a parse_options_concat() leak
      show-branch: free() allocated "head" before return
      builtin/merge.c: use fixed strings, not "strbuf", fix leak
      builtin/merge.c: free "&buf" on "Your local changes..." error
      grep.c: refactor free_grep_patterns()
      grep API: plug memory leaks by freeing "header_list"
      receive-pack: release the linked "struct command *" list
      push: refactor refspec_append_mapped() for subsequent leak-fix
      push: free_refs() the "local_refs" in set_refspecs()
      rebase: use "cleanup" pattern in do_interactive_rebase()
      sequencer.c: split up sequencer_remove_state()
      sequencer API users: fix get_replay_opts() leaks
      builtin/revert.c: move free-ing of "revs" to replay_opts_release()
      builtin/rebase.c: fix "options.onto_name" leak
      sequencer.c: always free() the "msgbuf" in do_pick_commit()
      builtin/rebase.c: free() "options.strategy_opts"
      commit.c: free() revs.commit in get_fork_point()
      config.h: remove unused git_configset_add_parameters()
      run-command.c: remove dead assignment in while-loop
      builtin/rm.c: use narrower "USE_THE_INDEX_VARIABLE"
      cocci & cache.h: fully apply "active_nr" part of index-compatibility
      cocci & cache.h: apply pending "index_cache_pos" rule
      cocci & cache-tree.h: migrate "write_cache_as_tree" to "*_index_*"
      cache-tree API: remove redundant update_main_cache_tree()
      cocci & cache.h: remove "USE_THE_INDEX_COMPATIBILITY_MACROS"

Đoàn Trần Công Danh (6):
      bisect: fix output regressions in v2.30.0
      bisect run: keep some of the post-v2.30.0 output
      bisect-run: verify_good: account for non-negative exit status
      bisect--helper: identify as bisect when report error
      bisect--helper: log: allow arbitrary number of arguments
      date.c: allow ISO 8601 reduced precision times


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.40.0-rc1
@ 2023-03-01 17:40  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2023-03-01 17:40 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.40.0-rc1 is now available for testing at
the usual places.  It is comprised of 458 non-merge commits since
v2.39.0, contributed by 78 people, 30 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.40.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.39.0 are as follows.
Welcome to the Git development community!

  Adam Szkoda, Alison Winters, Ashutosh Pandey, Carl Baldwin,
  Daniël Haazen, Drew Noakes, Eric Sesterhenn, Gwyneth Morgan,
  Harshil-Jani, Hubert Jasudowicz, idriss fekir, Kostya Farber,
  Marco Nenciarini, Markus Vervier, Matheus Tavares Bernardino,
  Mathias Krause, Pat LaVarre, Peter Grayson, Rudy Rigot, Seija,
  Seija Kijin, Simon Gerber, Thierry Reding, toon@iotcl.com, Wes
  Lord, Yukai Chou, Yutaro Ohno, yvvdwf, Zhang Yi, and 孟子易.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Andrei Rybak, Calvin Wan, Carlo
  Marcelo Arenas Belón, Christian Couder, Chris. Webster,
  Derrick Stolee, Đoàn Trần Công Danh, Elijah Newren,
  Emily Shaffer, Eric Sunshine, Eric Wong, Erik Cervin Edin, Glen
  Choo, Jeff Hostetler, Jeff King, Jiang Xin, Joern Schneeweisz,
  Johannes Schindelin, Johannes Sixt, John Cai, Jonathan Tan,
  Junio C Hamano, Karthik Nayak, Kevin Willford, Kyle Meyer, Kyle
  Zhao, Lars Kellogg-Stedman, Martin Ågren, Matthias Aßhauer,
  M Hickford, Patrick Steinhardt, Philip Oakley, Philippe Blain,
  Phillip Wood, Randall S. Becker, René Scharfe, Rubén Justo,
  Sean Allred, Siddharth Asthana, Sven Strickroth, SZEDER Gábor,
  Taylor Blau, Teng Long, Torsten Bögershausen, William Sprent,
  Yoichi Nakayama, and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.40 Release Notes (draft)
===============================

UI, Workflows & Features

 * "merge-tree" learns a new `--merge-base` option.

 * "git jump" (in contrib/) learned to present the "quickfix list" to
   its standard output (instead of letting it consumed by the editor
   it invokes), and learned to also drive emacs/emacsclient.

 * "git var UNKNOWN_VARIABLE" and "git var VARIABLE" with the variable
   given an empty value used to behave identically.  Now the latter
   just gives an empty output, while the former still gives an error
   message.

 * Introduce a case insensitive mode to the Bash completion helpers.

 * The advice message given by "git status" when it takes long time to
   enumerate untracked paths has been updated.

 * Just like "git var GIT_EDITOR" abstracts the complex logic to
   choose which editor gets used behind it, "git var" now give support
   to GIT_SEQUENCE_EDITOR.

 * "git format-patch" learned to honor format.mboxrd even when sending
   patches to the standard output stream,

 * 'cat-file' gains mailmap support for its '--batch-check' and '-s'
   options.

 * Conditionally skip the pre-applypatch and applypatch-msg hooks when
   applying patches with 'git am'.

 * Introduce an optional configuration to allow the trailing hash that
   protects the index file from bit flipping.

 * "git check-attr" learned to take an optional tree-ish to read the
   .gitattributes file from.

 * "scalar" learned to give progress bar.

 * "grep -P" learned to use Unicode Character Property to grok
   character classes when processing \b and \w etc.

 * "git rebase" often ignored incompatible options instead of
   complaining, which has been corrected.

 * "scalar" warns but continues when its periodic maintenance
   feature cannot be enabled.

 * The bundle-URI subsystem adds support for creation-token heuristics
   to help incremental fetches.

 * Userdiff regexp update for Java language.

 * "git fetch --jobs=0" used to hit a BUG(), which has been corrected
   to use the available CPUs.

 * An invalid label or ref in the "rebase -i" todo file used to
   trigger an runtime error. SUch an error is now diagnosed while the
   todo file is parsed.

 * The "diff" drivers specified by the "diff" attribute attached to
   paths can now specify which algorithm (e.g. histogram) to use.

 * "git range-diff" learned --abbrev=<num> option.

 * "git archive HEAD^{tree}" records the paths with the current
   timestamp in the archive, making it harder to obtain a stable
   output.  The command learned the --mtime option to specify an
   arbitrary timestamp (e.g. --mtime="@0 +0000" for the epoch).

 * The credential subsystem learned that a password may have an
   explicit expiration.

 * The format.attach configuration variable lacked a way to override a
   value defined in a lower-priority configuration file (e.g. the
   system one) by redefining it in a higher-priority configuration
   file.  Now, setting format.attach to an empty string means show the
   patch inline in the e-mail message, without using MIME attachment.

   This is a backward incompatible change.


Performance, Internal Implementation, Development Support etc.

 * `git bisect` becomes a builtin.

 * The pack-bitmap machinery is taught to log the paths of redundant
   bitmap(s) to trace2 instead of stderr.

 * Use the SHA1DC implementation on macOS, just like other platforms,
   by default.

 * Even in a repository with promisor remote, it is useless to
   attempt to lazily attempt fetching an object that is expected to be
   commit, because no "filter" mode omits commit objects.  Take
   advantage of this assumption to fail fast on errors.

 * Stop using "git --super-prefix" and narrow the scope of its use to
   the submodule--helper.

 * Stop running win+VS build by default.

 * CI updates.  We probably want a clean-up to move the long shell
   script embedded in yaml file into a separate file, but that can
   come later.

 * Use `git diff --no-index` as a test_cmp on Windows.

   We'd probably need to revisit "do we really want to, and have to,
   lose CRLF vs LF?" later, at which time we may be able to further
   clean this up by replacing "git diff --no-index" with "diff -u".

 * Avoid unnecessary builds in CI, with settings configured in
   ci-config.

 * Plug leaks in sequencer subsystem and its users.

 * In-tree .gitattributes update to match the way we recommend our
   users to mark a file as text.
   (merge 1f34e0cd3d po/attributes-text later to maint).

 * Finally retire the scripted "git add -p/-i" implementation and have
   everybody use the one reimplemented in C.


Fixes since v2.39
-----------------

 * Various leak fixes.

 * Fix a bug where `pack-objects` would not respect multiple `--filter`
   arguments when invoked directly.
   (merge d4f7036887 rs/multi-filter-args later to maint).

 * Make fsmonitor more robust to avoid the flakiness seen in t7527.
   (merge 6692d45477 jh/t7527-unflake-by-forcing-cookie later to maint).

 * Stop using deprecated macOS API in fsmonitor.
   (merge b0226007f0 jh/fsmonitor-darwin-modernize later to maint).

 * Redefining system functions for a few functions did not follow our
   usual "implement git_foo() and #define foo(args) git_foo(args)"
   pattern, which has broken build for some folks.

 * The way the diff machinery prepares the options array for the
   parse_options API has been refactored to avoid resource leaks.
   (merge 189e97bc4b rs/diff-parseopts later to maint).

 * Correct pthread API usage.
   (merge 786e67611d sx/pthread-error-check-fix later to maint).

 * The code to auto-correct a misspelt subcommand unnecessarily called
   into git_default_config() from the early config codepath, which was
   a no-no.  This has bee corrected.
   (merge 0918d08887 sg/help-autocorrect-config-fix later to maint).

 * "git http-fetch" (which is rarely used) forgot to identify itself
   in the trace2 output.
   (merge 7abb43cbc8 jt/http-fetch-trace2-report-name later to maint).

 * The output from "git diff --stat" on an unmerged path lost the
   terminating LF in Git 2.39, which has been corrected.
   (merge 209d9cb011 pg/diff-stat-unmerged-regression-fix later to maint).

 * "git pull -v --recurse-submodules" attempted to pass "-v" down to
   underlying "git submodule update", which did not understand the
   request and barfed, which has been corrected.
   (merge 6f65f84766 ss/pull-v-recurse-fix later to maint).

 * When given a pattern that matches an empty string at the end of a
   line, the code to parse the "git diff" line-ranges fell into an
   infinite loop, which has been corrected.

 * Fix the sequence to fsync $GIT_DIR/packed-refs file that forgot to
   flush its output to the disk..

 * Fix to a small regression in 2.38 days.

 * "git diff --relative" did not mix well with "git diff --ext-diff",
   which has been corrected.

 * The logic to see if we are using the "cone" mode by checking the
   sparsity patterns has been tightened to avoid mistaking a pattern
   that names a single file as specifying a cone.

 * Deal with a few deprecation warning from cURL library.

 * Doc update for environment variables set when hooks are invoked.

 * Document ORIG_HEAD a bit more.

 * "git ls-tree --format='%(path) %(path)' $tree $path" showed the
   path three times, which has been corrected.

 * Remove "git env--helper" and demote it to a test-tool subcommand.
   (merge 4a1baacd46 ab/test-env-helper later to maint).

 * Newer regex library macOS stopped enabling GNU-like enhanced BRE,
   where '\(A\|B\)' works as alternation, unless explicitly asked with
   the REG_ENHANCED flag.  "git grep" now can be compiled to do so, to
   retain the old behaviour.

 * Pthread emulation on Win32 leaked thread handle when a thread is
   joined.
   (merge 238a9dfe86 sk/win32-close-handle-upon-pthread-join later to maint).

 * "git send-email -v 3" used to be expanded to "git send-email
   --validate 3" when the user meant to pass them down to
   "format-patch", which has been corrected.
   (merge 8774aa56ad km/send-email-with-v-reroll-count later to maint).

 * Document that "branch -f <branch>" disables only the safety to
   avoid recreating an existing branch.

 * "git fetch <group>", when "<group>" of remotes lists the same
   remote twice, unnecessarily failed when parallel fetching was
   enabled, which has been corrected.
   (merge 06a668cb90 cw/fetch-remote-group-with-duplication later to maint).

 * Clarify how "checkout -b/-B" and "git branch [-f]" are similar but
   different in the documentation.

 * "git hash-object" now checks that the resulting object is well
   formed with the same code as "git fsck".
   (merge 8e4309038f jk/hash-object-fsck later to maint).

 * Improve the error message given when private key is not loaded in
   the ssh agent in the codepath to sign with an ssh key.
   (merge dce7b31126 as/ssh-signing-improve-key-missing-error later to maint).

 * Adjust "git request-pull" to strip embedded signature from signed
   tags to notice non-PGP signatures.
   (merge a9cad02538 gm/request-pull-with-non-pgp-signed-tags later to maint).

 * Remove support for MSys, which now lags way behind MSys2.
   (merge 2987407f3c hj/remove-msys-support later to maint).

 * Fix use of CreateThread() API call made early in the windows
   start-up code.
   (merge 592bcab61b sk/winansi-createthread-fix later to maint).

 * "git pack-objects" learned to release delta-island bitmap data when
   it is done using it, saving peak heap memory usage.
   (merge 647982bb71 ew/free-island-marks later to maint).

 * In an environment where dynamically generated code is prohibited to
   run (e.g. SELinux), failure to JIT pcre patterns is expected.  Fall
   back to interpreted execution in such a case.
   (merge 50b6ad55b0 cb/grep-fallback-failing-jit later to maint).

 * "git name-rev" heuristics update.
   (merge b2182a8730 en/name-rev-make-taggerdate-much-less-important later to maint).

 * Remove more remaining uses of macros that relies on the_index
   singleton instance without explicitly spelling it out.

 * Remove unnecessary explicit sizing of strbuf.
   (merge 93ea118bed rs/cache-tree-strbuf-growth-fix later to maint).

 * Doc update.
   (merge d9ec3b0dc0 jk/doc-ls-remote-matching later to maint).

 * Error messages given upon a signature verification failure used to
   discard the errors from underlying gpg program, which has been
   corrected.
   (merge ad6b320756 js/gpg-errors later to maint).

 * Update --date=default documentation.
   (merge 9deef088ae rd/doc-default-date-format later to maint).

 * A test helper had a single write(2) of 256kB, which was too big for
   some platforms (e.g. NonStop), which has been corrected by using
   xwrite() wrapper appropriately.
   (merge 58eab6ff13 jc/genzeros-avoid-raw-write later to maint).

 * sscanf(3) used in "git symbolic-ref --short" implementation found
   to be not working reliably on macOS in UTF-8 locales.  Rewrite the
   code to avoid sscanf() altogether to work it around.
   (merge 613bef56b8 jk/shorten-unambiguous-ref-wo-sscanf later to maint).

 * Various fix-ups on HTTP tests.
   (merge 8f2146dbf1 jk/http-test-fixes later to maint).

 * Fixes to code that parses the todo file used in "rebase -i".
   (merge 666b6e1135 pw/rebase-i-parse-fix later to maint).

 * Test library clean-up.
   (merge c600a91c94 ar/test-lib-remove-stale-comment later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 4eb1ccecd4 dh/mingw-ownership-check-typofix later to maint).
   (merge f95526419b ar/typofix-gitattributes-doc later to maint).
   (merge 27875aeec9 km/doc-branch-start-point later to maint).
   (merge 35c194dc57 es/t1509-root-fixes later to maint).
   (merge 7b341645e3 pw/ci-print-failure-name-fix later to maint).
   (merge bcb71d45bf jx/t1301-updates later to maint).
   (merge ebdc46c242 jc/doc-diff-patch.txt later to maint).
   (merge a87a20cbb4 ar/test-cleanup later to maint).
   (merge f5156f1885 ar/bisect-doc-update later to maint).
   (merge fca2d86c97 jk/interop-error later to maint).
   (merge cf4936ed74 tl/ls-tree-code-clean-up later to maint).
   (merge dcb47e52b0 en/t6426-todo-cleanup later to maint).
   (merge 5b8db44bdd jc/format-patch-v-unleak later to maint).
   (merge 590b636737 jk/hash-object-literally-fd-leak later to maint).
   (merge 5458ba0a4d tb/t0003-invoke-dd-more-portably later to maint).
   (merge 70661d288b ar/markup-em-dash later to maint).
   (merge e750951e74 en/ls-files-doc-update later to maint).
   (merge 4f542975d1 mh/doc-credential-cache-only-in-core later to maint).
   (merge 3a2ebaebc7 gc/index-format-doc later to maint).
   (merge b08edf709d jk/httpd-test-updates later to maint).
   (merge d85e9448dd wl/new-command-doc later to maint).
   (merge d912a603ed kf/t5000-modernise later to maint).
   (merge e65b868d07 rs/size-t-fixes later to maint).
   (merge 3eb1e1ca9a ab/config-h-remove-unused later to maint).
   (merge d390e08076 cw/doc-pushurl-vs-url later to maint).
   (merge 567342fc77 rs/ctype-test later to maint).
   (merge d35d8f2e7a ap/t2015-style-update later to maint).

----------------------------------------------------------------

Changes since v2.39.0 are as follows:

Adam Szkoda (1):
      ssh signing: better error message when key not in agent

Alison Winters (2):
      completion: add optional ignore-case when matching refs
      completion: add case-insensitive match of pseudorefs

Andrei Rybak (12):
      gitattributes.txt: fix typo in "comma separated"
      *: fix typos which duplicate a word
      git-bisect-lk2009: update java code conventions link
      git-bisect-lk2009: update nist report link
      t6003: uncomment test '--max-age=c3, --topo-order'
      t6422: drop commented out code
      t7527: use test_when_finished in 'case insensitive+preserving'
      Documentation: render dash correctly
      userdiff: support Java type parameters
      userdiff: support Java record types
      userdiff: support Java sealed classes
      test-lib: drop comment about test_description

Ashutosh Pandey (1):
      t2015-checkout-unborn.sh: changes the style for cd

Calvin Wan (2):
      fetch: fix duplicate remote parallel fetch bug
      Documentation: clarify multiple pushurls vs urls

Carlo Marcelo Arenas Belón (2):
      test-lib: add prerequisite for 64-bit platforms
      grep: correctly identify utf-8 characters with \{b,w} in -P

Chris. Webster (3):
      ci (check-whitespace): suggest fixes for errors
      ci (check-whitespace): add links to job output
      ci (check-whitespace): move to actions/checkout@v3

Daniël Haazen (1):
      mingw: fix typo in an error message from ownership check

Derrick Stolee (25):
      transport: rename got_remote_heads
      bundle-uri: serve bundle.* keys from config
      strbuf: introduce strbuf_strip_file_from_path()
      bundle-uri: allow relative URLs in bundle lists
      bundle-uri: download bundles from an advertised list
      clone: unbundle the advertised bundles
      hashfile: allow skipping the hash function
      read-cache: add index.skipHash config option
      test-lib-functions: add helper for trailing hash
      features: feature.manyFiles implies fast index writes
      t1600: fix racy index.skipHash test
      t: allow 'scalar' in test_must_fail
      t921*: test scalar behavior starting maintenance
      scalar: only warn when background maintenance fails
      bundle: test unbundling with incomplete history
      bundle: verify using check_connected()
      t5558: add tests for creationToken heuristic
      bundle-uri: parse bundle.heuristic=creationToken
      bundle-uri: parse bundle.<id>.creationToken values
      bundle-uri: download in creationToken order
      clone: set fetch.bundleURI if appropriate
      bundle-uri: drop bundle.flag from design doc
      fetch: fetch from an external bundle URI
      bundle-uri: store fetch.bundleCreationToken
      bundle-uri: test missing bundles with heuristic

Elijah Newren (16):
      ls-files: add missing documentation for --resolve-undo option
      ls-files: clarify descriptions of file selection options
      ls-files: clarify descriptions of status tags for -t
      ls-files: guide folks to --exclude-standard over other --exclude* options
      t6426: fix TODO about making test more comprehensive
      rebase: mark --update-refs as requiring the merge backend
      rebase: flag --apply and --merge as incompatible
      rebase: remove --allow-empty-message from incompatible opts
      rebase: fix docs about incompatibilities with --root
      rebase: fix incompatiblity checks for --[no-]reapply-cherry-picks
      rebase: add coverage of other incompatible options
      rebase: clarify the OPT_CMDMODE incompatibilities
      rebase: fix formatting of rebase --reapply-cherry-picks option in docs
      rebase: put rebase_options initialization in single place
      rebase: provide better error message for apply options vs. merge config
      name-rev: fix names by dropping taggerdate workaround

Emily Shaffer (4):
      run-command: allow stdin for run_processes_parallel
      hook API: support passing stdin to hooks, convert am's 'post-rewrite'
      sequencer: use the new hook API for the simpler "post-rewrite" call
      hook: support a --to-stdin=<path> option

Eric Sunshine (4):
      t1509: fix failing "root work tree" test due to owner-check
      t1509: make "setup" test more robust
      t1509: facilitate repeated script invocations
      githooks: discuss Git operations in foreign repositories

Eric Wong (2):
      format-patch: support format.mboxrd with --stdout
      delta-islands: free island_marks and bitmaps

Glen Choo (2):
      read-tree + fetch tests: test failing "--super-prefix" interaction
      docs: document zero bits in index "mode"

Gwyneth Morgan (1):
      request-pull: filter out SSH/X.509 tag signatures

Harshil-Jani (2):
      mingw: remove duplicate `USE_NED_ALLOCATOR` directive
      mingw: remove msysGit/MSYS1 support

Jeff Hostetler (2):
      fsmonitor: fix race seen in t7527
      fsmonitor: eliminate call to deprecated FSEventStream function

Jeff King (74):
      git-jump: move valid-mode check earlier
      pack-bitmap.c: break out of the bitmap loop early if not tracing
      pack-bitmap.c: trace bitmap ignore logs when midx-bitmap is found
      git-compat-util: avoid redefining system function names
      git-compat-util: undefine system names before redeclaring them
      server_supports_v2(): use a separate function for die_on_error
      ls-refs: use repository parameter to iterate refs
      blob: drop unused parts of parse_blob_buffer()
      list-objects: drop process_gitlink() function
      ws: drop unused parameter from ws_blank_line()
      xdiff: drop unused parameter in def_ff()
      xdiff: mark unused parameter in xdl_call_hunk_func()
      diff: mark unused parameters in callbacks
      list-objects-filter: mark unused parameters in virtual functions
      userdiff: mark unused parameter in internal callback
      ref-filter: reject arguments to %(HEAD)
      ref-filter: factor out "%(foo) does not take arguments" errors
      ref-filter: factor out "unrecognized %(foo) arg" errors
      ref-filter: truncate atom names in error messages
      ref-filter: convert email atom parser to use err_bad_arg()
      test-bundle-uri: drop unused variables
      diff: use filespec path to set up tempfiles for ext-diff
      diff: clean up external-diff argv setup
      diff: drop "name" parameter from prepare_temp_file()
      convert trivial uses of strncmp() to starts_with()
      convert trivial uses of strncmp() to skip_prefix()
      object-file: inline calls to read_object()
      streaming: inline call to read_object_file_extended()
      read_object_file_extended(): drop lookup_replace option
      repo_read_object_file(): stop wrapping read_object_file_extended()
      packfile: inline custom read_object()
      object-file: fix indent-with-space
      t/interop: report which vanilla git command failed
      http-push: prefer CURLOPT_UPLOAD to CURLOPT_PUT
      http: prefer CURLOPT_SEEKFUNCTION to CURLOPT_IOCTLFUNCTION
      http: support CURLOPT_PROTOCOLS_STR
      t1007: modernize malformed object tests
      t1006: stop using 0-padded timestamps
      t7030: stop using invalid tag name
      t: use hash-object --literally when created malformed objects
      fsck: provide a function to fsck buffer without object struct
      hash-object: use fsck for object checks
      hash-object: fix descriptor leak with --literally
      fsck: do not assume NUL-termination of buffers
      t/lib-httpd: bump required apache version to 2.2
      t/lib-httpd: bump required apache version to 2.4
      t/lib-httpd: drop SSLMutex config
      t/lib-httpd: increase ssl key size to 2048 bits
      http-push: prefer CURLOPT_UPLOAD to CURLOPT_PUT
      http: prefer CURLOPT_SEEKFUNCTION to CURLOPT_IOCTLFUNCTION
      http: support CURLOPT_PROTOCOLS_STR
      doc/ls-remote: cosmetic cleanups for examples
      doc/ls-remote: clarify pattern format
      shorten_unambiguous_ref(): avoid integer truncation
      shorten_unambiguous_ref(): use NUM_REV_PARSE_RULES constant
      shorten_unambiguous_ref(): avoid sscanf()
      add basic http proxy tests
      t0066: drop setup of "dir5"
      t5541: run "used receive-pack service" test earlier
      t5541: stop marking "used receive-pack service" test as v0 only
      t5541: simplify and move "no empty path components" test
      t5551: drop redundant grep for Accept-Language
      t5551: lower-case headers in expected curl trace
      t5551: handle HTTP/2 when checking curl trace
      t5551: stop forcing clone to run with v0 protocol
      t5551: handle v2 protocol when checking curl trace
      t5551: handle v2 protocol in upload-pack service test
      t5551: simplify expected cookie file
      t5551: handle v2 protocol in cookie test
      t5551: drop curl trace lines without headers
      t/lib-httpd: respect $HTTPD_PROTO in expect_askpass()
      t/lib-httpd: enable HTTP/2 "h2" protocol, not just h2c
      t5559: fix test failures with LIB_HTTPD_SSL
      t5559: make SSL/TLS the default

Jiang Xin (3):
      t1301: fix wrong template dir for git-init
      t1301: use test_when_finished for cleanup
      t1301: do not change $CWD in "shared=all" test case

Johannes Schindelin (24):
      bisect--helper: handle states directly
      Turn `git bisect` into a full built-in
      t0021: use Windows-friendly `pwd`
      tests(mingw): avoid very slow `mingw_test_cmp`
      ci: only run win+VS build & tests in Git for Windows' fork
      bisect--helper: simplify exit code computation
      bisect: verify that a bogus option won't try to start a bisection
      bisect run: fix the error message
      bisect: remove Cogito-related code
      bisect: no longer try to clean up left-over `.git/head-name` files
      fsck: document the new `gitattributes` message IDs
      attr: adjust a mismatched data type
      attr: adjust a mismatched data type
      Git 2.31.7
      Git 2.32.6
      Git 2.33.7
      Git 2.34.7
      Git 2.35.7
      Git 2.36.5
      Git 2.37.6
      Git 2.38.4
      Git 2.39.2
      t7510: add a test case that does not need gpg
      gpg: do show gpg's error message upon failure

Johannes Sixt (1):
      t3920: don't ignore errors of more than one command with `|| true`

John Cai (4):
      docs: link generating patch sections
      attr: fix instructions on how to check attrs
      diff: consolidate diff algorithm option parsing
      diff: teach diff to read algorithm from diff driver

Jonathan Tan (5):
      http-fetch: invoke trace2_cmd_name()
      object-file: remove OBJECT_INFO_IGNORE_LOOSE
      object-file: refactor map_loose_object_1()
      object-file: emit corruption errors when detected
      commit: don't lazy-fetch commits

Junio C Hamano (41):
      Git 2.30.7
      Git 2.31.6
      Git 2.32.5
      Git 2.33.6
      Git 2.34.6
      Git 2.35.6
      Git 2.36.4
      Git 2.37.5
      Git 2.38.3
      Git 2.39.1
      Start the 2.40 cycle
      The first batch for 2.40
      The second batch
      The third batch
      The fourth batch
      The fifth batch
      The sixth batch
      format-patch: unleak "-v <num>"
      The seventh batch
      branch: document `-f` and linked worktree behaviour
      checkout: document -b/-B to highlight the differences from "git branch"
      The eighth batch
      The ninth batch
      The tenth batch
      The eleventh batch
      The twelfth batch
      The thirteenth batch
      Git 2.30.8
      The fourteenth batch
      The fifteenth batch
      Prepare for 2.39.3 just in case
      The sixteenth batch
      rev-list: clarify git-log default date format
      test-genzeros: avoid raw write(2)
      format.attach: allow empty value to disable multi-part messages
      The seventeenth batch
      Git 2.40-rc0
      A few more topics post 2.40-rc0
      A bit more before 2.40-rc1
      A bit more before 2.40-rc1
      Git 2.40-rc1

Karthik Nayak (2):
      t0003: move setup for `--all` into new block
      attr: add flag `--source` to work with tree-ish

Kostya Farber (1):
      t5000: modernise archive and :(glob) test

Kyle Meyer (2):
      send-email: relay '-v N' to format-patch
      doc/git-branch: fix --force description typo

Kyle Zhao (3):
      merge-tree.c: add --merge-base=<commit> option
      merge-tree.c: allow specifying the merge-base when --stdin is passed
      docs: fix description of the `--merge-base` option

Lars Kellogg-Stedman (1):
      line-range: fix infinite loop bug with '$' regex

M Hickford (2):
      Documentation: clarify that cache forgets credentials if the system restarts
      credential: new attribute password_expiry_utc

Martin Ågren (1):
      git-cat-file.txt: fix list continuations rendering literally

Mathias Krause (1):
      grep: fall back to interpreter if JIT memory allocation fails

Matthias Aßhauer (1):
      fetch: choose a sensible default with --jobs=0 again

Patrick Steinhardt (28):
      attr: fix overflow when upserting attribute with overly long name
      attr: fix out-of-bounds read with huge attribute names
      attr: fix integer overflow when parsing huge attribute names
      attr: fix out-of-bounds write when parsing huge number of attributes
      attr: fix out-of-bounds read with unreasonable amount of patterns
      attr: fix integer overflow with more than INT_MAX macros
      attr: harden allocation against integer overflows
      attr: fix silently splitting up lines longer than 2048 bytes
      attr: ignore attribute lines exceeding 2048 bytes
      attr: ignore overly large gitattributes files
      pretty: fix out-of-bounds write caused by integer overflow
      pretty: fix out-of-bounds read when left-flushing with stealing
      pretty: fix out-of-bounds read when parsing invalid padding format
      pretty: fix adding linefeed when placeholder is not expanded
      pretty: fix integer overflow in wrapping format
      utf8: fix truncated string lengths in `utf8_strnwidth()`
      utf8: fix returning negative string width
      utf8: fix overflow when returning string width
      utf8: fix checking for glyph width in `strbuf_utf8_replace()`
      utf8: refactor `strbuf_utf8_replace` to not rely on preallocated buffer
      pretty: restrict input lengths for padding and wrapping formats
      fsck: refactor `fsck_blob()` to allow for more checks
      fsck: pull out function to check a set of blobs
      fsck: move checks for gitattributes
      fsck: implement checks for gitattributes
      refs: fix corruption by not correctly syncing packed-refs to disk
      apply: fix writing behind newly created symbolic links
      delta-islands: fix segfault when freeing island marks

Peter Grayson (1):
      diff: fix regression with --stat and unmerged file

Philip Oakley (6):
      doc: pretty-formats: separate parameters from placeholders
      doc: pretty-formats: delineate `%<|(` parameter values
      doc: pretty-formats document negative column alignments
      doc: pretty-formats describe use of ellipsis in truncation
      doc: pretty-formats note wide char limitations, and add tests
      .gitattributes: include `text` attribute for eol attributes

Philippe Blain (6):
      git-cherry-pick.txt: do not use 'ORIG_HEAD' in example
      git-reset.txt: mention 'ORIG_HEAD' in the Description
      git-merge.txt: mention 'ORIG_HEAD' in the Description
      revisions.txt: be explicit about commands writing 'ORIG_HEAD'
      git-rebase.txt: add a note about 'ORIG_HEAD' being overwritten
      branch: improve advice when --recurse-submodules fails

Phillip Wood (5):
      ci(github): restore "print test failures" step name
      rebase: cleanup "--exec" option handling
      rebase -i: check labels and refs when parsing todo list
      rebase -i: match whole word in is_command()
      rebase -i: fix parsing of "fixup -C<commit>"

René Scharfe (30):
      t5317: stop losing return codes of git ls-files
      t5317: demonstrate failure to handle multiple --filter options
      pack-objects: fix handling of multiple --filter options
      pack-objects: simplify --filter handling
      list-objects-filter: remove OPT_PARSE_LIST_OBJECTS_FILTER_INIT()
      t4205: don't exit test script on failure
      diff: factor out add_diff_options()
      diff: use add_diff_options() in diff_opt_parse()
      diff: remove parseopts member from struct diff_options
      list-objects-filter: plug pattern_list leak
      t3920: support CR-eating grep
      reflog: clear leftovers in reflog_expiry_cleanup()
      commit: skip already cleared parents in clear_commit_marks_1()
      am: don't pass strvec to apply_parse_options()
      object-file: inline write_buffer()
      use enhanced basic regular expressions on macOS
      mingw: make argv2 in try_shell_exec() non-const
      factor out BARF_UNLESS_COPYABLE
      do full type check in BARF_UNLESS_COPYABLE
      add DUP_ARRAY
      use DUP_ARRAY
      ls-tree: fix expansion of repeated %(path)
      ls-tree: remove dead store and strbuf for quote_c_style()
      read-cache: use size_t for {base,df}_name_compare()
      pack-objects: use strcspn(3) in name_cmp_len()
      cache-tree: fix strbuf growth in prime_cache_tree_rec()
      test-ctype: test isascii
      test-ctype: test islower and isupper
      test-ctype: test iscntrl, ispunct, isxdigit and isprint
      archive: add --mtime

Rubén Justo (1):
      branch: force-copy a branch to itself via @{-1} is a no-op

Rudy Rigot (1):
      status: modernize git-status "slow untracked files" advice

SZEDER Gábor (1):
      tests: make 'test_oid' print trailing newline

Sean Allred (3):
      var: do not print usage() with a correct invocation
      var: allow GIT_EDITOR to return null
      var: add GIT_SEQUENCE_EDITOR variable

Seija (1):
      maintenance: compare output of pthread functions for inequality with 0

Seija Kijin (6):
      git: remove duplicate includes
      win32: use _endthreadex to terminate threads, not ExitThread
      win32: prepare pthread.c for change by formatting
      win32: close handles of threads that have been joined
      merge: break out of all_strategy loop when strategy is found
      compat/winansi: check for errors of CreateThread() correctly

Siddharth Asthana (2):
      cat-file: add mailmap support to -s option
      cat-file: add mailmap support to --batch-check option

Simon Gerber (1):
      help.c: fix autocorrect in work tree for bare repository

Sven Strickroth (1):
      submodule: accept -v for the update command

Taylor Blau (5):
      ci: avoid unnecessary builds
      t5619: demonstrate clone_local() with ambiguous transport
      clone: delay picking a transport until after get_repo_path()
      dir-iterator: prevent top-level symlinks without FOLLOW_SYMLINKS
      dir-iterator: drop unused `DIR_ITERATOR_FOLLOW_SYMLINKS`

Teng Long (5):
      pack-bitmap.c: remove unnecessary "open_pack_index()" calls
      pack-bitmap.c: avoid exposing absolute paths
      ls-tree: cleanup the redundant SPACE
      t3104: remove shift code in 'test_ls_tree_format'
      range-diff: let '--abbrev' option takes effect

Thierry Reding (1):
      am: allow passing --no-verify flag

Torsten Bögershausen (1):
      t0003: call dd with portable blocksize

Wes Lord (1):
      new-command.txt: update reference to builtin docs

William Sprent (1):
      dir: check for single file cone patterns

Yoichi Nakayama (2):
      git-jump: add an optional argument '--stdout'
      git-jump: invoke emacs/emacsclient

Yukai Chou (1):
      doc: fix non-existent config name

Yutaro Ohno (1):
      doc: add "git switch -c" as another option on detached HEAD

Zhang Yi (1):
      t9700: modernize test scripts

ZheNing Hu (1):
      scalar: show progress if stderr refers to a terminal

idriss fekir (1):
      trace.c, git.c: remove unnecessary parameter to trace_repo_setup()

Ævar Arnfjörð Bjarmason (90):
      bisect tests: test for v2.30.0 "bisect run" regressions
      bisect: refactor bisect_run() to match CodingGuidelines
      bisect test: test exit codes on bad usage
      bisect--helper: emit usage for "git bisect"
      bisect; remove unused "git-bisect.sh" and ".gitignore" entry
      tests: mark tests as passing with SANITIZE=leak
      {reset,merge}: call discard_index() before returning
      commit: discard partial cache before (re-)reading it
      read-cache.c: clear and free "sparse_checkout_patterns"
      dir.c: free "ident" and "exclude_per_dir" in "struct untracked_cache"
      built-ins & libs & helpers: add/move destructors, fix leaks
      unpack-file: fix ancient leak in create_temp_file()
      revision API: call graph_clear() in release_revisions()
      ls-files: fix a --with-tree memory leak
      sequencer.c: fix "opts->strategy" leak in read_strategy_opts()
      connected.c: free the "struct packed_git"
      rebase: don't leak on "--abort"
      cherry-pick: free "struct replay_opts" members
      revert: fix parse_options_concat() leak
      built-ins: use free() not UNLEAK() if trivial, rm dead code
      t5314: check exit code of "git"
      t7600: don't ignore "rev-parse" exit code in helper
      t4023: fix ignored exit codes of git
      Makefile: use sha1collisiondetection by default on OSX and Darwin
      bundle: don't segfault on "git bundle <subcmd>"
      protocol v2: add server-side "bundle-uri" skeleton
      t: create test harness for 'bundle-uri' command
      clone: request the 'bundle-uri' command when available
      bundle-uri client: add boolean transfer.bundleURI setting
      bundle-uri client: add helper for testing server
      submodule absorbgitdirs tests: add missing "Migrating git..." tests
      submodule.c & submodule--helper: pass along "super_prefix" param
      submodule--helper: don't use global --super-prefix in "absorbgitdirs"
      submodule--helper: convert "foreach" to its own "--super-prefix"
      submodule--helper: convert "sync" to its own "--super-prefix"
      submodule--helper: convert "status" to its own "--super-prefix"
      submodule--helper: convert "{update,clone}" to their own "--super-prefix"
      read-tree: add "--super-prefix" option, eliminate global
      builtin/bundle.c: remove superfluous "newargc" variable
      bundle <cmd>: have usage_msg_opt() note the missing "<file>"
      builtin/difftool.c: { 0 }-initialize rather than using memset()
      sparse-index.c: expand_to_path() can assume non-NULL "istate"
      sparse-index API: BUG() out on NULL ensure_full_index()
      read-cache.c: refactor set_new_index_sparsity() for subsequent commit
      bisect--helper: make the order consistently `argc, argv`
      ls-tree: don't use "show_tree_data" for "fast" callbacks
      ls-tree: use a "struct options"
      ls-tree: fold "show_tree_data" into "cb" struct
      ls-tree: make "line_termination" less generic
      env-helper: move this built-in to "test-tool env-helper"
      cache API: add a "INDEX_STATE_INIT" macro/function, add release_index()
      treewide: always have a valid "index_state.repo" member
      add: remove "add.interactive.useBuiltin" & Perl "git add--interactive"
      add API: remove run_add_interactive() wrapper function
      docs & comments: replace mentions of "git-add--interactive.perl"
      tests: mark tests as passing with SANITIZE=leak
      bundle.c: don't leak the "args" in the "struct child_process"
      commit-graph: use free_commit_graph() instead of UNLEAK()
      clone: use free() instead of UNLEAK()
      various: add missing clear_pathspec(), fix leaks
      name-rev: don't xstrdup() an already dup'd string
      repack: fix leaks on error with "goto cleanup"
      worktree: fix a trivial leak in prune_worktrees()
      http-backend.c: fix "dir" and "cmd_arg" leaks in cmd_main()
      http-backend.c: fix cmd_main() memory leak, refactor reg{exec,free}()
      commit-graph: fix a parse_options_concat() leak
      show-branch: free() allocated "head" before return
      builtin/merge.c: use fixed strings, not "strbuf", fix leak
      builtin/merge.c: free "&buf" on "Your local changes..." error
      grep.c: refactor free_grep_patterns()
      grep API: plug memory leaks by freeing "header_list"
      receive-pack: release the linked "struct command *" list
      push: refactor refspec_append_mapped() for subsequent leak-fix
      push: free_refs() the "local_refs" in set_refspecs()
      rebase: use "cleanup" pattern in do_interactive_rebase()
      sequencer.c: split up sequencer_remove_state()
      sequencer API users: fix get_replay_opts() leaks
      builtin/revert.c: move free-ing of "revs" to replay_opts_release()
      builtin/rebase.c: fix "options.onto_name" leak
      sequencer.c: always free() the "msgbuf" in do_pick_commit()
      builtin/rebase.c: free() "options.strategy_opts"
      commit.c: free() revs.commit in get_fork_point()
      config.h: remove unused git_configset_add_parameters()
      run-command.c: remove dead assignment in while-loop
      builtin/rm.c: use narrower "USE_THE_INDEX_VARIABLE"
      cocci & cache.h: fully apply "active_nr" part of index-compatibility
      cocci & cache.h: apply pending "index_cache_pos" rule
      cocci & cache-tree.h: migrate "write_cache_as_tree" to "*_index_*"
      cache-tree API: remove redundant update_main_cache_tree()
      cocci & cache.h: remove "USE_THE_INDEX_COMPATIBILITY_MACROS"

Đoàn Trần Công Danh (6):
      bisect: fix output regressions in v2.30.0
      bisect run: keep some of the post-v2.30.0 output
      bisect-run: verify_good: account for non-negative exit status
      bisect--helper: identify as bisect when report error
      bisect--helper: log: allow arbitrary number of arguments
      date.c: allow ISO 8601 reduced precision times


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.40.0-rc0
@ 2023-02-24 20:24  4% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2023-02-24 20:24 UTC (permalink / raw)
  To: git; +Cc: git-packagers

An early preview release Git v2.40.0-rc0 is now available for
testing at the usual places.  It is comprised of 417 non-merge
commits since v2.39.0, contributed by 71 people, 24 of which are
new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.40.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.39.0 are as follows.
Welcome to the Git development community!

  Adam Szkoda, Alison Winters, Carl Baldwin, Daniël Haazen, Eric
  Sesterhenn, Gwyneth Morgan, Harshil-Jani, Hubert Jasudowicz,
  Kostya Farber, Marco Nenciarini, Markus Vervier, Mathias Krause,
  Pat LaVarre, Peter Grayson, Rudy Rigot, Seija, Seija Kijin,
  Simon Gerber, Thierry Reding, toon@iotcl.com, Wes Lord, Yukai
  Chou, Yutaro Ohno, and yvvdwf.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Andrei Rybak, Calvin Wan, Carlo
  Marcelo Arenas Belón, Christian Couder, Chris. Webster,
  Derrick Stolee, Đoàn Trần Công Danh, Elijah Newren,
  Emily Shaffer, Eric Sunshine, Eric Wong, Erik Cervin Edin, Glen
  Choo, Jeff Hostetler, Jeff King, Jiang Xin, Joern Schneeweisz,
  Johannes Schindelin, Johannes Sixt, John Cai, Jonathan Tan,
  Junio C Hamano, Karthik Nayak, Kevin Willford, Kyle Meyer,
  Kyle Zhao, Lars Kellogg-Stedman, Martin Ågren, M Hickford,
  Patrick Steinhardt, Philip Oakley, Philippe Blain, Phillip
  Wood, Randall S. Becker, René Scharfe, Rubén Justo, Sean
  Allred, Siddharth Asthana, Sven Strickroth, SZEDER Gábor,
  Taylor Blau, Teng Long, Torsten Bögershausen, William Sprent,
  Yoichi Nakayama, and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.40 Release Notes (draft)
===============================

UI, Workflows & Features

 * "merge-tree" learns a new `--merge-base` option.

 * "git jump" (in contrib/) learned to present the "quickfix list" to
   its standard output (instead of letting it consumed by the editor
   it invokes), and learned to also drive emacs/emacsclient.

 * "git var UNKNOWN_VARIABLE" and "git var VARIABLE" with the variable
   given an empty value used to behave identically.  Now the latter
   just gives an empty output, while the former still gives an error
   message.

 * Introduce a case insensitive mode to the Bash completion helpers.

 * The advice message given by "git status" when it takes long time to
   enumerate untracked paths has been updated.

 * Just like "git var GIT_EDITOR" abstracts the complex logic to
   choose which editor gets used behind it, "git var" now give support
   to GIT_SEQUENCE_EDITOR.

 * "git format-patch" learned to honor format.mboxrd even when sending
   patches to the standard output stream,

 * 'cat-file' gains mailmap support for its '--batch-check' and '-s'
   options.

 * Conditionally skip the pre-applypatch and applypatch-msg hooks when
   applying patches with 'git am'.

 * Introduce an optional configuration to allow the trailing hash that
   protects the index file from bit flipping.

 * "git check-attr" learned to take an optional tree-ish to read the
   .gitattributes file from.

 * "scalar" learned to give progress bar.

 * "grep -P" learned to use Unicode Character Property to grok
   character classes when processing \b and \w etc.

 * "git rebase" often ignored incompatible options instead of
   complaining, which has been corrected.

 * "scalar" warns but continues when its periodic maintenance
   feature cannot be enabled.

 * The bundle-URI subsystem adds support for creation-token heuristics
   to help incremental fetches.

 * Userdiff regexp update for Java language.


Performance, Internal Implementation, Development Support etc.

 * `git bisect` becomes a builtin.

 * The pack-bitmap machinery is taught to log the paths of redundant
   bitmap(s) to trace2 instead of stderr.

 * Use the SHA1DC implementation on macOS, just like other platforms,
   by default.

 * Even in a repository with promisor remote, it is useless to
   attempt to lazily attempt fetching an object that is expected to be
   commit, because no "filter" mode omits commit objects.  Take
   advantage of this assumption to fail fast on errors.

 * Stop using "git --super-prefix" and narrow the scope of its use to
   the submodule--helper.

 * Stop running win+VS build by default.

 * CI updates.  We probably want a clean-up to move the long shell
   script embedded in yaml file into a separate file, but that can
   come later.

 * Use `git diff --no-index` as a test_cmp on Windows.

   We'd probably need to revisit "do we really want to, and have to,
   lose CRLF vs LF?" later, at which time we may be able to further
   clean this up by replacing "git diff --no-index" with "diff -u".

 * Avoid unnecessary builds in CI, with settings configured in
   ci-config.

 * Plug leaks in sequencer subsystem and its users.

 * In-tree .gitattributes update to match the way we recommend our
   users to mark a file as text.
   (merge 1f34e0cd3d po/attributes-text later to maint).

 * Finally retire the scripted "git add -p/-i" implementation and have
   everybody use the one reimplemented in C.


Fixes since v2.39
-----------------

 * Various leak fixes.

 * Fix a bug where `pack-objects` would not respect multiple `--filter`
   arguments when invoked directly.
   (merge d4f7036887 rs/multi-filter-args later to maint).

 * Make fsmonitor more robust to avoid the flakiness seen in t7527.
   (merge 6692d45477 jh/t7527-unflake-by-forcing-cookie later to maint).

 * Stop using deprecated macOS API in fsmonitor.
   (merge b0226007f0 jh/fsmonitor-darwin-modernize later to maint).

 * Redefining system functions for a few functions did not follow our
   usual "implement git_foo() and #define foo(args) git_foo(args)"
   pattern, which has broken build for some folks.

 * The way the diff machinery prepares the options array for the
   parse_options API has been refactored to avoid resource leaks.
   (merge 189e97bc4b rs/diff-parseopts later to maint).

 * Correct pthread API usage.
   (merge 786e67611d sx/pthread-error-check-fix later to maint).

 * The code to auto-correct a misspelt subcommand unnecessarily called
   into git_default_config() from the early config codepath, which was
   a no-no.  This has bee corrected.
   (merge 0918d08887 sg/help-autocorrect-config-fix later to maint).

 * "git http-fetch" (which is rarely used) forgot to identify itself
   in the trace2 output.
   (merge 7abb43cbc8 jt/http-fetch-trace2-report-name later to maint).

 * The output from "git diff --stat" on an unmerged path lost the
   terminating LF in Git 2.39, which has been corrected.
   (merge 209d9cb011 pg/diff-stat-unmerged-regression-fix later to maint).

 * "git pull -v --recurse-submodules" attempted to pass "-v" down to
   underlying "git submodule update", which did not understand the
   request and barfed, which has been corrected.
   (merge 6f65f84766 ss/pull-v-recurse-fix later to maint).

 * When given a pattern that matches an empty string at the end of a
   line, the code to parse the "git diff" line-ranges fell into an
   infinite loop, which has been corrected.

 * Fix the sequence to fsync $GIT_DIR/packed-refs file that forgot to
   flush its output to the disk..

 * Fix to a small regression in 2.38 days.

 * "git diff --relative" did not mix well with "git diff --ext-diff",
   which has been corrected.

 * The logic to see if we are using the "cone" mode by checking the
   sparsity patterns has been tightened to avoid mistaking a pattern
   that names a single file as specifying a cone.

 * Deal with a few deprecation warning from cURL library.

 * Doc update for environment variables set when hooks are invoked.

 * Document ORIG_HEAD a bit more.

 * "git ls-tree --format='%(path) %(path)' $tree $path" showed the
   path three times, which has been corrected.

 * Remove "git env--helper" and demote it to a test-tool subcommand.
   (merge 4a1baacd46 ab/test-env-helper later to maint).

 * Newer regex library macOS stopped enabling GNU-like enhanced BRE,
   where '\(A\|B\)' works as alternation, unless explicitly asked with
   the REG_ENHANCED flag.  "git grep" now can be compiled to do so, to
   retain the old behaviour.

 * Pthread emulation on Win32 leaked thread handle when a thread is
   joined.
   (merge 238a9dfe86 sk/win32-close-handle-upon-pthread-join later to maint).

 * "git send-email -v 3" used to be expanded to "git send-email
   --validate 3" when the user meant to pass them down to
   "format-patch", which has been corrected.
   (merge 8774aa56ad km/send-email-with-v-reroll-count later to maint).

 * Document that "branch -f <branch>" disables only the safety to
   avoid recreating an existing branch.

 * "git fetch <group>", when "<group>" of remotes lists the same
   remote twice, unnecessarily failed when parallel fetching was
   enabled, which has been corrected.
   (merge 06a668cb90 cw/fetch-remote-group-with-duplication later to maint).

 * Clarify how "checkout -b/-B" and "git branch [-f]" are similar but
   different in the documentation.

 * "git hash-object" now checks that the resulting object is well
   formed with the same code as "git fsck".
   (merge 8e4309038f jk/hash-object-fsck later to maint).

 * Improve the error message given when private key is not loaded in
   the ssh agent in the codepath to sign with an ssh key.
   (merge dce7b31126 as/ssh-signing-improve-key-missing-error later to maint).

 * Adjust "git request-pull" to strip embedded signature from signed
   tags to notice non-PGP signatures.
   (merge a9cad02538 gm/request-pull-with-non-pgp-signed-tags later to maint).

 * Remove support for MSys, which now lags way behind MSys2.
   (merge 2987407f3c hj/remove-msys-support later to maint).

 * Fix use of CreateThread() API call made early in the windows
   start-up code.
   (merge 592bcab61b sk/winansi-createthread-fix later to maint).

 * "git pack-objects" learned to release delta-island bitmap data when
   it is done using it, saving peak heap memory usage.
   (merge 647982bb71 ew/free-island-marks later to maint).

 * In an environment where dynamically generated code is prohibited to
   run (e.g. SELinux), failure to JIT pcre patterns is expected.  Fall
   back to interpreted execution in such a case.
   (merge 50b6ad55b0 cb/grep-fallback-failing-jit later to maint).

 * "git name-rev" heuristics update.
   (merge b2182a8730 en/name-rev-make-taggerdate-much-less-important later to maint).

 * Remove more remaining uses of macros that relies on the_index
   singleton instance without explicitly spelling it out.

 * Remove unnecessary explicit sizing of strbuf.
   (merge 93ea118bed rs/cache-tree-strbuf-growth-fix later to maint).

 * Doc update.
   (merge d9ec3b0dc0 jk/doc-ls-remote-matching later to maint).

 * Error messages given upon a signature verification failure used to
   discard the errors from underlying gpg program, which has been
   corrected.
   (merge ad6b320756 js/gpg-errors later to maint).

 * Update --date=default documentation.
   (merge 9deef088ae rd/doc-default-date-format later to maint).

 * A test helper had a single write(2) of 256kB, which was too big for
   some platforms (e.g. NonStop), which has been corrected by using
   xwrite() wrapper appropriately.
   (merge 58eab6ff13 jc/genzeros-avoid-raw-write later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 4eb1ccecd4 dh/mingw-ownership-check-typofix later to maint).
   (merge f95526419b ar/typofix-gitattributes-doc later to maint).
   (merge 27875aeec9 km/doc-branch-start-point later to maint).
   (merge 35c194dc57 es/t1509-root-fixes later to maint).
   (merge 7b341645e3 pw/ci-print-failure-name-fix later to maint).
   (merge bcb71d45bf jx/t1301-updates later to maint).
   (merge ebdc46c242 jc/doc-diff-patch.txt later to maint).
   (merge a87a20cbb4 ar/test-cleanup later to maint).
   (merge f5156f1885 ar/bisect-doc-update later to maint).
   (merge fca2d86c97 jk/interop-error later to maint).
   (merge cf4936ed74 tl/ls-tree-code-clean-up later to maint).
   (merge dcb47e52b0 en/t6426-todo-cleanup later to maint).
   (merge 5b8db44bdd jc/format-patch-v-unleak later to maint).
   (merge 590b636737 jk/hash-object-literally-fd-leak later to maint).
   (merge 5458ba0a4d tb/t0003-invoke-dd-more-portably later to maint).
   (merge 70661d288b ar/markup-em-dash later to maint).
   (merge e750951e74 en/ls-files-doc-update later to maint).
   (merge 4f542975d1 mh/doc-credential-cache-only-in-core later to maint).
   (merge 3a2ebaebc7 gc/index-format-doc later to maint).
   (merge b08edf709d jk/httpd-test-updates later to maint).
   (merge d85e9448dd wl/new-command-doc later to maint).
   (merge d912a603ed kf/t5000-modernise later to maint).
   (merge e65b868d07 rs/size-t-fixes later to maint).
   (merge 3eb1e1ca9a ab/config-h-remove-unused later to maint).
   (merge d390e08076 cw/doc-pushurl-vs-url later to maint).
   (merge 567342fc77 rs/ctype-test later to maint).

----------------------------------------------------------------

Changes since v2.39.0 are as follows:

Adam Szkoda (1):
      ssh signing: better error message when key not in agent

Alison Winters (2):
      completion: add optional ignore-case when matching refs
      completion: add case-insensitive match of pseudorefs

Andrei Rybak (11):
      gitattributes.txt: fix typo in "comma separated"
      *: fix typos which duplicate a word
      git-bisect-lk2009: update java code conventions link
      git-bisect-lk2009: update nist report link
      t6003: uncomment test '--max-age=c3, --topo-order'
      t6422: drop commented out code
      t7527: use test_when_finished in 'case insensitive+preserving'
      Documentation: render dash correctly
      userdiff: support Java type parameters
      userdiff: support Java record types
      userdiff: support Java sealed classes

Calvin Wan (2):
      fetch: fix duplicate remote parallel fetch bug
      Documentation: clarify multiple pushurls vs urls

Carlo Marcelo Arenas Belón (2):
      test-lib: add prerequisite for 64-bit platforms
      grep: correctly identify utf-8 characters with \{b,w} in -P

Chris. Webster (3):
      ci (check-whitespace): suggest fixes for errors
      ci (check-whitespace): add links to job output
      ci (check-whitespace): move to actions/checkout@v3

Daniël Haazen (1):
      mingw: fix typo in an error message from ownership check

Derrick Stolee (25):
      transport: rename got_remote_heads
      bundle-uri: serve bundle.* keys from config
      strbuf: introduce strbuf_strip_file_from_path()
      bundle-uri: allow relative URLs in bundle lists
      bundle-uri: download bundles from an advertised list
      clone: unbundle the advertised bundles
      hashfile: allow skipping the hash function
      read-cache: add index.skipHash config option
      test-lib-functions: add helper for trailing hash
      features: feature.manyFiles implies fast index writes
      t1600: fix racy index.skipHash test
      t: allow 'scalar' in test_must_fail
      t921*: test scalar behavior starting maintenance
      scalar: only warn when background maintenance fails
      bundle: test unbundling with incomplete history
      bundle: verify using check_connected()
      t5558: add tests for creationToken heuristic
      bundle-uri: parse bundle.heuristic=creationToken
      bundle-uri: parse bundle.<id>.creationToken values
      bundle-uri: download in creationToken order
      clone: set fetch.bundleURI if appropriate
      bundle-uri: drop bundle.flag from design doc
      fetch: fetch from an external bundle URI
      bundle-uri: store fetch.bundleCreationToken
      bundle-uri: test missing bundles with heuristic

Elijah Newren (16):
      ls-files: add missing documentation for --resolve-undo option
      ls-files: clarify descriptions of file selection options
      ls-files: clarify descriptions of status tags for -t
      ls-files: guide folks to --exclude-standard over other --exclude* options
      t6426: fix TODO about making test more comprehensive
      rebase: mark --update-refs as requiring the merge backend
      rebase: flag --apply and --merge as incompatible
      rebase: remove --allow-empty-message from incompatible opts
      rebase: fix docs about incompatibilities with --root
      rebase: fix incompatiblity checks for --[no-]reapply-cherry-picks
      rebase: add coverage of other incompatible options
      rebase: clarify the OPT_CMDMODE incompatibilities
      rebase: fix formatting of rebase --reapply-cherry-picks option in docs
      rebase: put rebase_options initialization in single place
      rebase: provide better error message for apply options vs. merge config
      name-rev: fix names by dropping taggerdate workaround

Emily Shaffer (4):
      run-command: allow stdin for run_processes_parallel
      hook API: support passing stdin to hooks, convert am's 'post-rewrite'
      sequencer: use the new hook API for the simpler "post-rewrite" call
      hook: support a --to-stdin=<path> option

Eric Sunshine (4):
      t1509: fix failing "root work tree" test due to owner-check
      t1509: make "setup" test more robust
      t1509: facilitate repeated script invocations
      githooks: discuss Git operations in foreign repositories

Eric Wong (2):
      format-patch: support format.mboxrd with --stdout
      delta-islands: free island_marks and bitmaps

Glen Choo (2):
      read-tree + fetch tests: test failing "--super-prefix" interaction
      docs: document zero bits in index "mode"

Gwyneth Morgan (1):
      request-pull: filter out SSH/X.509 tag signatures

Harshil-Jani (2):
      mingw: remove duplicate `USE_NED_ALLOCATOR` directive
      mingw: remove msysGit/MSYS1 support

Jeff Hostetler (2):
      fsmonitor: fix race seen in t7527
      fsmonitor: eliminate call to deprecated FSEventStream function

Jeff King (53):
      git-jump: move valid-mode check earlier
      pack-bitmap.c: break out of the bitmap loop early if not tracing
      pack-bitmap.c: trace bitmap ignore logs when midx-bitmap is found
      git-compat-util: avoid redefining system function names
      git-compat-util: undefine system names before redeclaring them
      server_supports_v2(): use a separate function for die_on_error
      ls-refs: use repository parameter to iterate refs
      blob: drop unused parts of parse_blob_buffer()
      list-objects: drop process_gitlink() function
      ws: drop unused parameter from ws_blank_line()
      xdiff: drop unused parameter in def_ff()
      xdiff: mark unused parameter in xdl_call_hunk_func()
      diff: mark unused parameters in callbacks
      list-objects-filter: mark unused parameters in virtual functions
      userdiff: mark unused parameter in internal callback
      ref-filter: reject arguments to %(HEAD)
      ref-filter: factor out "%(foo) does not take arguments" errors
      ref-filter: factor out "unrecognized %(foo) arg" errors
      ref-filter: truncate atom names in error messages
      ref-filter: convert email atom parser to use err_bad_arg()
      test-bundle-uri: drop unused variables
      diff: use filespec path to set up tempfiles for ext-diff
      diff: clean up external-diff argv setup
      diff: drop "name" parameter from prepare_temp_file()
      convert trivial uses of strncmp() to starts_with()
      convert trivial uses of strncmp() to skip_prefix()
      object-file: inline calls to read_object()
      streaming: inline call to read_object_file_extended()
      read_object_file_extended(): drop lookup_replace option
      repo_read_object_file(): stop wrapping read_object_file_extended()
      packfile: inline custom read_object()
      object-file: fix indent-with-space
      t/interop: report which vanilla git command failed
      http-push: prefer CURLOPT_UPLOAD to CURLOPT_PUT
      http: prefer CURLOPT_SEEKFUNCTION to CURLOPT_IOCTLFUNCTION
      http: support CURLOPT_PROTOCOLS_STR
      t1007: modernize malformed object tests
      t1006: stop using 0-padded timestamps
      t7030: stop using invalid tag name
      t: use hash-object --literally when created malformed objects
      fsck: provide a function to fsck buffer without object struct
      hash-object: use fsck for object checks
      hash-object: fix descriptor leak with --literally
      fsck: do not assume NUL-termination of buffers
      t/lib-httpd: bump required apache version to 2.2
      t/lib-httpd: bump required apache version to 2.4
      t/lib-httpd: drop SSLMutex config
      t/lib-httpd: increase ssl key size to 2048 bits
      http-push: prefer CURLOPT_UPLOAD to CURLOPT_PUT
      http: prefer CURLOPT_SEEKFUNCTION to CURLOPT_IOCTLFUNCTION
      http: support CURLOPT_PROTOCOLS_STR
      doc/ls-remote: cosmetic cleanups for examples
      doc/ls-remote: clarify pattern format

Jiang Xin (3):
      t1301: fix wrong template dir for git-init
      t1301: use test_when_finished for cleanup
      t1301: do not change $CWD in "shared=all" test case

Johannes Schindelin (24):
      bisect--helper: handle states directly
      Turn `git bisect` into a full built-in
      t0021: use Windows-friendly `pwd`
      tests(mingw): avoid very slow `mingw_test_cmp`
      ci: only run win+VS build & tests in Git for Windows' fork
      bisect--helper: simplify exit code computation
      bisect: verify that a bogus option won't try to start a bisection
      bisect run: fix the error message
      bisect: remove Cogito-related code
      bisect: no longer try to clean up left-over `.git/head-name` files
      fsck: document the new `gitattributes` message IDs
      attr: adjust a mismatched data type
      attr: adjust a mismatched data type
      Git 2.31.7
      Git 2.32.6
      Git 2.33.7
      Git 2.34.7
      Git 2.35.7
      Git 2.36.5
      Git 2.37.6
      Git 2.38.4
      Git 2.39.2
      t7510: add a test case that does not need gpg
      gpg: do show gpg's error message upon failure

Johannes Sixt (1):
      t3920: don't ignore errors of more than one command with `|| true`

John Cai (2):
      docs: link generating patch sections
      attr: fix instructions on how to check attrs

Jonathan Tan (5):
      http-fetch: invoke trace2_cmd_name()
      object-file: remove OBJECT_INFO_IGNORE_LOOSE
      object-file: refactor map_loose_object_1()
      object-file: emit corruption errors when detected
      commit: don't lazy-fetch commits

Junio C Hamano (36):
      Git 2.30.7
      Git 2.31.6
      Git 2.32.5
      Git 2.33.6
      Git 2.34.6
      Git 2.35.6
      Git 2.36.4
      Git 2.37.5
      Git 2.38.3
      Git 2.39.1
      Start the 2.40 cycle
      The first batch for 2.40
      The second batch
      The third batch
      The fourth batch
      The fifth batch
      The sixth batch
      format-patch: unleak "-v <num>"
      The seventh batch
      branch: document `-f` and linked worktree behaviour
      checkout: document -b/-B to highlight the differences from "git branch"
      The eighth batch
      The ninth batch
      The tenth batch
      The eleventh batch
      The twelfth batch
      The thirteenth batch
      Git 2.30.8
      The fourteenth batch
      The fifteenth batch
      Prepare for 2.39.3 just in case
      The sixteenth batch
      rev-list: clarify git-log default date format
      test-genzeros: avoid raw write(2)
      The seventeenth batch
      Git 2.40-rc0

Karthik Nayak (2):
      t0003: move setup for `--all` into new block
      attr: add flag `--source` to work with tree-ish

Kostya Farber (1):
      t5000: modernise archive and :(glob) test

Kyle Meyer (2):
      send-email: relay '-v N' to format-patch
      doc/git-branch: fix --force description typo

Kyle Zhao (3):
      merge-tree.c: add --merge-base=<commit> option
      merge-tree.c: allow specifying the merge-base when --stdin is passed
      docs: fix description of the `--merge-base` option

Lars Kellogg-Stedman (1):
      line-range: fix infinite loop bug with '$' regex

M Hickford (1):
      Documentation: clarify that cache forgets credentials if the system restarts

Martin Ågren (1):
      git-cat-file.txt: fix list continuations rendering literally

Mathias Krause (1):
      grep: fall back to interpreter if JIT memory allocation fails

Patrick Steinhardt (27):
      attr: fix overflow when upserting attribute with overly long name
      attr: fix out-of-bounds read with huge attribute names
      attr: fix integer overflow when parsing huge attribute names
      attr: fix out-of-bounds write when parsing huge number of attributes
      attr: fix out-of-bounds read with unreasonable amount of patterns
      attr: fix integer overflow with more than INT_MAX macros
      attr: harden allocation against integer overflows
      attr: fix silently splitting up lines longer than 2048 bytes
      attr: ignore attribute lines exceeding 2048 bytes
      attr: ignore overly large gitattributes files
      pretty: fix out-of-bounds write caused by integer overflow
      pretty: fix out-of-bounds read when left-flushing with stealing
      pretty: fix out-of-bounds read when parsing invalid padding format
      pretty: fix adding linefeed when placeholder is not expanded
      pretty: fix integer overflow in wrapping format
      utf8: fix truncated string lengths in `utf8_strnwidth()`
      utf8: fix returning negative string width
      utf8: fix overflow when returning string width
      utf8: fix checking for glyph width in `strbuf_utf8_replace()`
      utf8: refactor `strbuf_utf8_replace` to not rely on preallocated buffer
      pretty: restrict input lengths for padding and wrapping formats
      fsck: refactor `fsck_blob()` to allow for more checks
      fsck: pull out function to check a set of blobs
      fsck: move checks for gitattributes
      fsck: implement checks for gitattributes
      refs: fix corruption by not correctly syncing packed-refs to disk
      apply: fix writing behind newly created symbolic links

Peter Grayson (1):
      diff: fix regression with --stat and unmerged file

Philip Oakley (6):
      doc: pretty-formats: separate parameters from placeholders
      doc: pretty-formats: delineate `%<|(` parameter values
      doc: pretty-formats document negative column alignments
      doc: pretty-formats describe use of ellipsis in truncation
      doc: pretty-formats note wide char limitations, and add tests
      .gitattributes: include `text` attribute for eol attributes

Philippe Blain (6):
      git-cherry-pick.txt: do not use 'ORIG_HEAD' in example
      git-reset.txt: mention 'ORIG_HEAD' in the Description
      git-merge.txt: mention 'ORIG_HEAD' in the Description
      revisions.txt: be explicit about commands writing 'ORIG_HEAD'
      git-rebase.txt: add a note about 'ORIG_HEAD' being overwritten
      branch: improve advice when --recurse-submodules fails

Phillip Wood (2):
      ci(github): restore "print test failures" step name
      rebase: cleanup "--exec" option handling

René Scharfe (29):
      t5317: stop losing return codes of git ls-files
      t5317: demonstrate failure to handle multiple --filter options
      pack-objects: fix handling of multiple --filter options
      pack-objects: simplify --filter handling
      list-objects-filter: remove OPT_PARSE_LIST_OBJECTS_FILTER_INIT()
      t4205: don't exit test script on failure
      diff: factor out add_diff_options()
      diff: use add_diff_options() in diff_opt_parse()
      diff: remove parseopts member from struct diff_options
      list-objects-filter: plug pattern_list leak
      t3920: support CR-eating grep
      reflog: clear leftovers in reflog_expiry_cleanup()
      commit: skip already cleared parents in clear_commit_marks_1()
      am: don't pass strvec to apply_parse_options()
      object-file: inline write_buffer()
      use enhanced basic regular expressions on macOS
      mingw: make argv2 in try_shell_exec() non-const
      factor out BARF_UNLESS_COPYABLE
      do full type check in BARF_UNLESS_COPYABLE
      add DUP_ARRAY
      use DUP_ARRAY
      ls-tree: fix expansion of repeated %(path)
      ls-tree: remove dead store and strbuf for quote_c_style()
      read-cache: use size_t for {base,df}_name_compare()
      pack-objects: use strcspn(3) in name_cmp_len()
      cache-tree: fix strbuf growth in prime_cache_tree_rec()
      test-ctype: test isascii
      test-ctype: test islower and isupper
      test-ctype: test iscntrl, ispunct, isxdigit and isprint

Rubén Justo (1):
      branch: force-copy a branch to itself via @{-1} is a no-op

Rudy Rigot (1):
      status: modernize git-status "slow untracked files" advice

SZEDER Gábor (1):
      tests: make 'test_oid' print trailing newline

Sean Allred (3):
      var: do not print usage() with a correct invocation
      var: allow GIT_EDITOR to return null
      var: add GIT_SEQUENCE_EDITOR variable

Seija (1):
      maintenance: compare output of pthread functions for inequality with 0

Seija Kijin (6):
      git: remove duplicate includes
      win32: use _endthreadex to terminate threads, not ExitThread
      win32: prepare pthread.c for change by formatting
      win32: close handles of threads that have been joined
      merge: break out of all_strategy loop when strategy is found
      compat/winansi: check for errors of CreateThread() correctly

Siddharth Asthana (2):
      cat-file: add mailmap support to -s option
      cat-file: add mailmap support to --batch-check option

Simon Gerber (1):
      help.c: fix autocorrect in work tree for bare repository

Sven Strickroth (1):
      submodule: accept -v for the update command

Taylor Blau (4):
      ci: avoid unnecessary builds
      t5619: demonstrate clone_local() with ambiguous transport
      clone: delay picking a transport until after get_repo_path()
      dir-iterator: prevent top-level symlinks without FOLLOW_SYMLINKS

Teng Long (4):
      pack-bitmap.c: remove unnecessary "open_pack_index()" calls
      pack-bitmap.c: avoid exposing absolute paths
      ls-tree: cleanup the redundant SPACE
      t3104: remove shift code in 'test_ls_tree_format'

Thierry Reding (1):
      am: allow passing --no-verify flag

Torsten Bögershausen (1):
      t0003: call dd with portable blocksize

Wes Lord (1):
      new-command.txt: update reference to builtin docs

William Sprent (1):
      dir: check for single file cone patterns

Yoichi Nakayama (2):
      git-jump: add an optional argument '--stdout'
      git-jump: invoke emacs/emacsclient

Yukai Chou (1):
      doc: fix non-existent config name

Yutaro Ohno (1):
      doc: add "git switch -c" as another option on detached HEAD

ZheNing Hu (1):
      scalar: show progress if stderr refers to a terminal

Ævar Arnfjörð Bjarmason (90):
      bisect tests: test for v2.30.0 "bisect run" regressions
      bisect: refactor bisect_run() to match CodingGuidelines
      bisect test: test exit codes on bad usage
      bisect--helper: emit usage for "git bisect"
      bisect; remove unused "git-bisect.sh" and ".gitignore" entry
      tests: mark tests as passing with SANITIZE=leak
      {reset,merge}: call discard_index() before returning
      commit: discard partial cache before (re-)reading it
      read-cache.c: clear and free "sparse_checkout_patterns"
      dir.c: free "ident" and "exclude_per_dir" in "struct untracked_cache"
      built-ins & libs & helpers: add/move destructors, fix leaks
      unpack-file: fix ancient leak in create_temp_file()
      revision API: call graph_clear() in release_revisions()
      ls-files: fix a --with-tree memory leak
      sequencer.c: fix "opts->strategy" leak in read_strategy_opts()
      connected.c: free the "struct packed_git"
      rebase: don't leak on "--abort"
      cherry-pick: free "struct replay_opts" members
      revert: fix parse_options_concat() leak
      built-ins: use free() not UNLEAK() if trivial, rm dead code
      t5314: check exit code of "git"
      t7600: don't ignore "rev-parse" exit code in helper
      t4023: fix ignored exit codes of git
      Makefile: use sha1collisiondetection by default on OSX and Darwin
      bundle: don't segfault on "git bundle <subcmd>"
      protocol v2: add server-side "bundle-uri" skeleton
      t: create test harness for 'bundle-uri' command
      clone: request the 'bundle-uri' command when available
      bundle-uri client: add boolean transfer.bundleURI setting
      bundle-uri client: add helper for testing server
      submodule absorbgitdirs tests: add missing "Migrating git..." tests
      submodule.c & submodule--helper: pass along "super_prefix" param
      submodule--helper: don't use global --super-prefix in "absorbgitdirs"
      submodule--helper: convert "foreach" to its own "--super-prefix"
      submodule--helper: convert "sync" to its own "--super-prefix"
      submodule--helper: convert "status" to its own "--super-prefix"
      submodule--helper: convert "{update,clone}" to their own "--super-prefix"
      read-tree: add "--super-prefix" option, eliminate global
      builtin/bundle.c: remove superfluous "newargc" variable
      bundle <cmd>: have usage_msg_opt() note the missing "<file>"
      builtin/difftool.c: { 0 }-initialize rather than using memset()
      sparse-index.c: expand_to_path() can assume non-NULL "istate"
      sparse-index API: BUG() out on NULL ensure_full_index()
      read-cache.c: refactor set_new_index_sparsity() for subsequent commit
      bisect--helper: make the order consistently `argc, argv`
      ls-tree: don't use "show_tree_data" for "fast" callbacks
      ls-tree: use a "struct options"
      ls-tree: fold "show_tree_data" into "cb" struct
      ls-tree: make "line_termination" less generic
      env-helper: move this built-in to "test-tool env-helper"
      cache API: add a "INDEX_STATE_INIT" macro/function, add release_index()
      treewide: always have a valid "index_state.repo" member
      add: remove "add.interactive.useBuiltin" & Perl "git add--interactive"
      add API: remove run_add_interactive() wrapper function
      docs & comments: replace mentions of "git-add--interactive.perl"
      tests: mark tests as passing with SANITIZE=leak
      bundle.c: don't leak the "args" in the "struct child_process"
      commit-graph: use free_commit_graph() instead of UNLEAK()
      clone: use free() instead of UNLEAK()
      various: add missing clear_pathspec(), fix leaks
      name-rev: don't xstrdup() an already dup'd string
      repack: fix leaks on error with "goto cleanup"
      worktree: fix a trivial leak in prune_worktrees()
      http-backend.c: fix "dir" and "cmd_arg" leaks in cmd_main()
      http-backend.c: fix cmd_main() memory leak, refactor reg{exec,free}()
      commit-graph: fix a parse_options_concat() leak
      show-branch: free() allocated "head" before return
      builtin/merge.c: use fixed strings, not "strbuf", fix leak
      builtin/merge.c: free "&buf" on "Your local changes..." error
      grep.c: refactor free_grep_patterns()
      grep API: plug memory leaks by freeing "header_list"
      receive-pack: release the linked "struct command *" list
      push: refactor refspec_append_mapped() for subsequent leak-fix
      push: free_refs() the "local_refs" in set_refspecs()
      rebase: use "cleanup" pattern in do_interactive_rebase()
      sequencer.c: split up sequencer_remove_state()
      sequencer API users: fix get_replay_opts() leaks
      builtin/revert.c: move free-ing of "revs" to replay_opts_release()
      builtin/rebase.c: fix "options.onto_name" leak
      sequencer.c: always free() the "msgbuf" in do_pick_commit()
      builtin/rebase.c: free() "options.strategy_opts"
      commit.c: free() revs.commit in get_fork_point()
      config.h: remove unused git_configset_add_parameters()
      run-command.c: remove dead assignment in while-loop
      builtin/rm.c: use narrower "USE_THE_INDEX_VARIABLE"
      cocci & cache.h: fully apply "active_nr" part of index-compatibility
      cocci & cache.h: apply pending "index_cache_pos" rule
      cocci & cache-tree.h: migrate "write_cache_as_tree" to "*_index_*"
      cache-tree API: remove redundant update_main_cache_tree()
      cocci & cache.h: remove "USE_THE_INDEX_COMPATIBILITY_MACROS"

Đoàn Trần Công Danh (6):
      bisect: fix output regressions in v2.30.0
      bisect run: keep some of the post-v2.30.0 output
      bisect-run: verify_good: account for non-negative exit status
      bisect--helper: identify as bisect when report error
      bisect--helper: log: allow arbitrary number of arguments
      date.c: allow ISO 8601 reduced precision times


^ permalink raw reply	[relevance 4%]

* [ANNOUNCE] Git v2.39.0
@ 2022-12-12 13:43  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2022-12-12 13:43 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

The latest feature release Git v2.39.0 is now available at the
usual places.  It is comprised of 483 non-merge commits since
v2.38.0, contributed by 86 people, 31 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.39.0'
tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.38.0 are as follows.
Welcome to the Git development community!

  Alexander Kanavin, Alexander Meshcheryakov, Andreas Hasenack,
  Anh Le, Arthur Chan, Daniel Sonbolian, Debra Obondo, Diomidis
  Spinellis, Erik Cervin Edin, Hank Leininger, herr.kaste, John
  A. Leuenhagen, Julia Ramer, Kevin Backhouse, Kousik Sanagavarapu,
  Lukáš Doktor, Martin Englund, M Hickford, Michael V. Scovetta,
  Noah Betzen, Nsengiyumva Wilberforce, orygaw, Oscar Dominguez,
  Ronan Pigott, Rubén Justo, Sotir Danailov, srz_zumix, Stefano
  Rivera, Tim Jaacks, Vincent Bernat, and Vlad-Stefan Harbuz.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  정재우, Ævar Arnfjörð Bjarmason, Alejandro R. Sedeño,
  Alexander Shopov, Alex Henrie, Bagas Sanjaya, Derrick Stolee,
  Đoàn Trần Công Danh, Elijah Newren, Emily Shaffer, Emir
  SARI, Eric DeCosta, Eric Sunshine, Eric Wong, Fangyi Zhou,
  Glen Choo, Han-Wen Nienhuys, Jan Pokorný, Jean-Noël Avila,
  Jeff Hostetler, Jeff King, Jerry Zhang, Jiang Xin, Johannes
  Altmanninger, Johannes Schindelin, John Cai, Jonathan Tan,
  Jordi Mas, Julien Moutinho, Junio C Hamano, Kyle Meyer, Martin
  Ågren, Martin von Zweigbergk, Matheus Tavares, Matthew John
  Cheetham, Matthias Rüster, Michael J Gruber, Michael McClimon,
  Patrick Steinhardt, Paul Smith, Peter Krefting, Philip Oakley,
  Philippe Blain, Phillip Wood, Ralf Thielow, Randall S. Becker,
  René Scharfe, Sergey Organov, Shaoxuan Yuan, SZEDER Gábor,
  Taylor Blau, Torsten Bögershausen, Victoria Dye, Yi-Jyun Pan,
  and 依云.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.39 Release Notes
=======================

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

 * "git grep" learned to expand the sparse-index more lazily and on
   demand in a sparse checkout.

 * By default, use of fsmonitor on a repository on networked
   filesystem is disabled. Add knobs to make it workable on macOS.

 * After checking out a "branch" that is a symbolic-ref that points at
   another branch, "git symbolic-ref HEAD" reports the underlying
   branch, not the symbolic-ref the user gave checkout as argument.
   The command learned the "--no-recurse" option to stop after
   dereferencing a symbolic-ref only once.

 * "git branch --edit-description @{-1}" is now a way to edit branch
   description of the branch you were on before switching to the
   current branch.

 * "git merge-tree --stdin" is a new way to request a series of merges
   and report the merge results.

 * "git shortlog" learned to group by the "format" string.

 * A new "--include-whitespace" option is added to "git patch-id", and
   existing bugs in the internal patch-id logic that did not match
   what "git patch-id" produces have been corrected.

 * Enable gc.cruftpacks by default for those who opt into
   feature.experimental setting.

 * "git repack" learns to send cruft objects out of the way into
   packfiles outside the repository.

 * 'scalar reconfigure -a' is taught to automatically remove
   scalar.repo entires which no longer exist.

 * Redact headers from cURL's h2h3 module in GIT_CURL_VERBOSE and
   others.

 * 'git maintenance register' is taught to write configuration to an
   arbitrary path, and 'git for-each-repo' is taught to expand tilde
   characters in paths.

 * When creating new notes, the template used to get a stray empty
   newline, which has been removed.

 * "git receive-pack" used to use all the local refs as the boundary for
   checking connectivity of the data "git push" sent, but now it uses
   only the refs that it advertised to the pusher. In a repository with
   the .hideRefs configuration, this reduces the resources needed to
   perform the check.

 * With '--recurse-submodules=on-demand', all submodules are
   recursively pushed.


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

 * With a bit of header twiddling, use the native regexp library on
   macOS instead of the compat/ one.

 * Prepare for GNU [ef]grep that throw warning of their uses.

 * Sources related to fuzz testing have been moved down to their own
   directory.

 * Most credential helpers ignored unknown entries in a credential
   description, but a few died upon seeing them.  The latter were
   taught to ignore them, too

 * "scalar unregister" in a repository that is already been
   unregistered reported an error.

 * Remove error detection from a function that fetches from promisor
   remotes, and make it die when such a fetch fails to bring all the
   requested objects, to give an early failure to various operations.

 * Update CodingGuidelines to clarify what features to use and avoid
   in C99.

 * Avoid false-positive from LSan whose assumption may be broken with
   higher optimization levels.

 * Enable address and undefined sanitizer tasks at GitHub Actions CI.

 * More UNUSED annotation to help using -Wunused option with the
   compiler.
   (merge 4b992f0a24 jk/unused-anno-more later to maint).

 * Rewrite a deep recursion in the skipping negotiator to use a loop
   with on-heap prio queue to avoid stack wastage.

 * Add documentation for message IDs in fsck error messages.

 * Define the logical elements of a "bundle list", data structure to
   store them in-core, format to transfer them, and code to parse
   them.

 * The role the security mailing list plays in an embargoed release
   has been documented.

 * Two new facilities, "timer" and "counter", are introduced to the
   trace2 API.

 * Code simplification by using strvec_pushf() instead of building an
   argument in a separate strbuf.

 * Make sure generated dependency file is stably sorted to help
   developers debugging their build issues.

 * The glossary entries for "commit-graph file" and "reachability
   bitmap" have been added.

 * Various tests exercising the transfer.credentialsInUrl
   configuration are taught to avoid making requests which require
   resolving localhost to reduce CI-flakiness.

 * A redundant diagnostic message is dropped from test_path_is_missing().

 * Simplify the run-command API.

 * Update the actions/github-script dependency in CI to avoid a
   deprecation warning.

 * Progress on being able to initialize a rev_info struct with a
   macro.

 * Add trace2 counters to the region to clear skip worktree bits in a
   sparse checkout.

 * Modernize test script to avoid "test -f" and friends.

 * Avoid calling 'cache_tree_update()' when doing so would be
   redundant.

 * Update the credential-cache documentation to provide a more
   realistic example.

 * Makefile comments updates and reordering to clarify knobs used to
   choose SHA implementations.

 * A design document for sparse-checkout's future directions has been
   added.

 * Teach chainlint.pl to annotate the original test definition instead
   of the token stream.

 * "make coccicheck" is time consuming. It has been made to run more
   incrementally.

 * `parse_object()` has been hardened to check for the existence of a
   suspected blob object.

 * The build procedure has been adjusted to GNUmake version 4.4, which
   made some changes to how pattern rule with multiple targets are
   handled.


Fixes since v2.38
-----------------

 * The codepath that reads from the index v4 had unaligned memory
   accesses, which has been corrected.

 * Fix messages incorrectly marked for translation.

 * "git fsck" failed to release contents of tree objects already used
   from the memory, which has been fixed.

 * "git clone" did not like to see the "--bare" and the "--origin"
   options used together without a good reason.

 * "git remote rename" failed to rename a remote without fetch
   refspec, which has been corrected.

 * Documentation on various Boolean GIT_* environment variables have
   been clarified.

 * "git rebase -i" can mistakenly attempt to apply a fixup to a commit
   itself, which has been corrected.

 * "git multi-pack-index repack/expire" used to repack unreachable
   cruft into a new pack, which have been corrected.

 * In read-only repositories, "git merge-tree" tried to come up with a
   merge result tree object, which it failed (which is not wrong) and
   led to a segfault (which is bad), which has been corrected.

 * Force C locale while running tests around httpd to make sure we can
   find expected error messages in the log.

 * Fix a logic in "mailinfo -b" that miscomputed the length of a
   substring, which lead to an out-of-bounds access.

 * The codepath to sign learned to report errors when it fails to read
   from "ssh-keygen".

 * Code clean-up that results in plugging a leak.

 * "GIT_EDITOR=: git branch --edit-description" resulted in failure,
   which has been corrected.

 * The code to clean temporary object directories (used for
   quarantine) tried to remove them inside its signal handler, which
   was a no-no.

 * Update comment in the Makefile about the RUNTIME_PREFIX config knob.

 * Clarify that "the sentence after <area>: prefix does not begin with
   a capital letter" rule applies only to the commit title.

 * "git branch --edit-description" on an unborn branch misleadingly
   said that no such branch exists, which has been corrected.

 * Work around older clang that warns against C99 zero initialization
   syntax for struct.

 * Giving "--invert-grep" and "--all-match" without "--grep" to the
   "git log" command resulted in an attempt to access grep pattern
   expression structure that has not been allocated, which has been
   corrected.
   (merge db84376f98 ab/grep-simplify-extended-expression later to maint).

 * "git diff rev^!" did not show combined diff to go to the rev from
   its parents.
   (merge a79c6b6081 rs/diff-caret-bang-with-parents later to maint).

 * Allow configuration files in "protected" scopes to include other
   configuration files.
   (merge ecec57b3c9 gc/bare-repo-discovery later to maint).

 * Give a bit more diversity to macOS CI by using sha1dc in one of the
   jobs (the other one tests Apple Common Crypto).
   (merge 1ad5c3df35 jc/ci-osx-with-sha1dc later to maint).

 * A bugfix with tracing support in midx codepath
   (merge e9c3839944 tb/midx-bitmap-selection-fix later to maint).

 * When geometric repacking feature is in use together with the
   --pack-kept-objects option, we lost packs marked with .keep files.
   (merge 197443e80a tb/save-keep-pack-during-geometric-repack later to maint).

 * Move a global variable added as a hack during regression fixes to
   its proper place in the API.
   (merge 0b0ab95f17 ab/run-hook-api-cleanup later to maint).

 * Update to build procedure with VS using CMake/CTest.
   (merge c858750b41 js/cmake-updates later to maint).

 * The short-help text shown by "git cmd -h" and the synopsis text
   shown at the beginning of "git help cmd" have been made more
   consistent.

 * When creating a multi-pack bitmap, remove per-pack bitmap files
   unconditionally as they will never be consulted.
   (merge 55d902cd61 tb/remove-unused-pack-bitmap later to maint).

 * Fix a longstanding syntax error in Git.pm error codepath.

 * "git diff --stat" etc. were invented back when everything was ASCII
   and strlen() was a way to measure the display width of a string;
   adjust them to compute the display width assuming UTF-8 pathnames.
   (merge ce8529b2bb tb/diffstat-with-utf8-strwidth later to maint).

 * "git branch --edit-description" can exit with status -1 which is
   not a good practice; it learned to use 1 as everybody else instead.

 * "git apply" limits its input to a bit less than 1 GiB.

 * Merging a branch with directory renames into a branch that changes
   the directory to a symlink was mishandled by the ort merge
   strategy, which has been corrected.

 * A bugfix to "git subtree" in its split and merge features.

 * Fix some bugs in the reflog messages when rebasing and changes the
   reflog messages of "rebase --apply" to match "rebase --merge" with
   the aim of making the reflog easier to parse.

 * "git rebase --keep-base" used to discard the commits that are
   already cherry-picked to the upstream, even when "keep-base" meant
   that the base, on top of which the history is being rebuilt, does
   not yet include these cherry-picked commits.  The --keep-base
   option now implies --reapply-cherry-picks and --no-fork-point
   options.

 * The way "git repack" created temporary files when it received a
   signal was prone to deadlocking, which has been corrected.

 * Various tests exercising the transfer.credentialsInUrl
   configuration are taught to avoid making requests which require
   resolving localhost to reduce CI-flakiness.

 * The adjust_shared_perm() helper function learned to refrain from
   setting the "g+s" bit on directories when it is not necessary.

 * "git archive" mistakenly complained twice about a missing
   executable, which has been corrected.

 * Fix a bug where `git branch -d` did not work on an orphaned HEAD.

 * `git rebase --update-refs` would delete references when all
   `update-ref` commands in the sequencer were removed, which has been
   corrected.

 * Fix a regression in the bisect-helper which mistakenly treats
   arguments to the command given to 'git bisect run' as arguments to
   the helper.

 * Correct an error where `git rebase` would mistakenly use a branch or
   tag named "refs/rewritten/xyz" when missing a rebase label.

 * Assorted fixes of parsing end-user input as integers.
   (merge 14770cf0de pw/config-int-parse-fixes later to maint).

 * "git prune" may try to iterate over .git/objects/pack for trash
   files to remove in it, and loudly fail when the directory is
   missing, which is not necessary.  The command has been taught to
   ignore such a failure.
   (merge 6974765352 ew/prune-with-missing-objects-pack later to maint).

 * Add one more candidate directory that may house httpd modules while
   running tests.
   (merge 1c7dc23d41 es/locate-httpd-module-location-in-test later to maint).

 * A handful of leaks in the line-log machinery have been plugged.

 * The format of a line in /proc/cpuinfo that describes a CPU on s390x
   looked different from everybody else, and the code in chainlint.pl
   failed to parse it.
   (merge 1f51b77f4f ah/chainlint-cpuinfo-parse-fix later to maint).

 * Adjust the GitHub CI to newer ubuntu release.
   (merge 0d3507f3e7 jx/ci-ubuntu-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 413bc6d20a ds/cmd-main-reorder later to maint).
   (merge 8d2863e4ed nw/t1002-cleanup later to maint).
   (merge 7c2dc122f9 rs/list-objects-filter-leakfix later to maint).
   (merge 288fcb1c94 zk/push-use-bitmaps later to maint).
   (merge 42db324c0f km/merge-recursive-typofix later to maint).

----------------------------------------------------------------

Changes since v2.38.0 are as follows:

Alejandro R. Sedeño (1):
      git-compat-util.h: GCC deprecated message arg only in GCC 4.5+

Alex Henrie (2):
      fsmonitor--daemon: don't translate literal commands
      push: improve grammar of branch.autoSetupMerge advice

Alexander Shopov (1):
      l10n: bg.po: Updated Bulgarian translation (5501t)

Andreas Hasenack (1):
      chainlint.pl: fix /proc/cpuinfo regexp

Anh Le (2):
      index: add trace2 region for clear skip worktree
      index: raise a bug if the index is materialised more than once

Arthur Chan (1):
      fuzz: reorganise the path for existing oss-fuzz fuzzers

Bagas Sanjaya (1):
      l10n: po-id for 2.39 (round 1)

Daniel Sonbolian (1):
      git.c: improve code readability in cmd_main()

Debra Obondo (1):
      t7001-mv.sh: modernizing test script using functions

Derrick Stolee (15):
      maintenance: add 'unregister --force'
      scalar: make 'unregister' idempotent
      gc: replace config subprocesses with API calls
      string-list: document iterator behavior on NULL input
      bundle-uri: fix technical doc issues
      bundle-uri: use plain string in find_temp_filename()
      bundle-uri: create bundle_list struct and helpers
      bundle-uri: create base key-value pair parsing
      bundle-uri: parse bundle list in config format
      bundle-uri: limit recursion depth for bundle lists
      bundle: properly clear all revision flags
      bundle-uri: fetch a list of bundles
      bundle: add flags to verify_bundle()
      bundle-uri: quiet failed unbundlings
      bundle-uri: suppress stderr from remote-https

Diomidis Spinellis (1):
      grep: fix multibyte regex handling under macOS

Elijah Newren (4):
      merge-ort: fix bug with dir rename vs change dir to symlink
      merge-tree: update documentation for differences in -z output
      merge-tree: support multiple batched merges with --stdin
      sparse-checkout.txt: new document with sparse-checkout directions

Emily Shaffer (2):
      gc: add tests for --cruft and friends
      config: let feature.experimental imply gc.cruftPacks=true

Emir SARI (1):
      l10n: tr: v2.39.0 updates

Eric DeCosta (6):
      fsmonitor: refactor filesystem checks to common interface
      fsmonitor: relocate socket file if .git directory is remote
      fsmonitor: avoid socket location check if using hook
      fsmonitor: deal with synthetic firmlinks on macOS
      fsmonitor: check for compatability before communicating with fsmonitor
      fsmonitor: add documentation for allowRemote and socketDir options

Eric Sunshine (9):
      check-non-portable-shell: detect obsolescent egrep/fgrep
      chainlint: add explanatory comments
      chainlint: tighten accuracy when consuming input stream
      chainlint: latch start/end position of each token
      chainlint: annotate original test definition rather than token stream
      chainlint: sidestep impoverished macOS "terminfo"
      chainlint: latch line numbers at which each token starts and ends
      chainlint: prefix annotated test definition with line numbers
      lib-httpd: extend module location auto-detection

Eric Wong (2):
      delta-islands: free island-related data after use
      prune: quiet ENOENT on missing directories

Fangyi Zhou (1):
      l10n: zh_CN v2.39.0 round 1

Glen Choo (3):
      config: respect includes in protected config
      http: redact curl h2h3 headers in info
      object-file: use real paths when adding alternates

Han-Wen Nienhuys (1):
      refs: unify parse_worktree_ref() and ref_type()

Jean-Noël Avila (2):
      i18n: fix command template placeholder format
      l10n: fr: v2.39 rnd 1

Jeff Hostetler (9):
      config.mak.dev: disable suggest braces error on old clang versions
      trace2: use size_t alloc,nr_open_regions in tr2tls_thread_ctx
      tr2tls: clarify TLS terminology
      api-trace2.txt: elminate section describing the public trace2 API
      trace2: rename the thread_name argument to trace2_thread_start
      trace2: improve thread-name documentation in the thread-context
      trace2: convert ctx.thread_name from strbuf to pointer
      trace2: add stopwatch timers
      trace2: add global counter mechanism

Jeff King (43):
      fsck: free tree buffers after walking unreachable objects
      fsck: turn off save_commit_buffer
      parse_object_buffer(): respect save_commit_buffer
      clone: allow "--bare" with "-o"
      remote: handle rename of remote without fetch refspec
      shell: add basic tests
      shell: limit size of interactive commands
      sequencer: detect author name errors in read_author_script()
      test-submodule: inline resolve_relative_url() function
      multi-pack-index: avoid writing to global in option callback
      commit: avoid writing to global in option callback
      attr: drop DEBUG_ATTR code
      dir: use fspathncmp() in pl_hashmap_cmp()
      fsmonitor: fix leak of warning message
      diffstat_consume(): assert non-zero length
      submodule--helper: drop unused argc from module_list_compute()
      update-index: drop unused argc from do_reupdate()
      mark unused parameters in trivial compat functions
      object-file: mark unused parameters in hash_unknown functions
      string-list: mark unused callback parameters
      date: mark unused parameters in handler functions
      apply: mark unused parameters in handlers
      apply: mark unused parameters in noop error/warning routine
      convert: mark unused parameter in null stream filter
      diffcore-pickaxe: mark unused parameters in pickaxe functions
      ll-merge: mark unused parameters in callbacks
      Makefile: force -O0 when compiling with SANITIZE=leak
      repack: convert "names" util bitfield to array
      repack: populate extension bits incrementally
      repack: expand error message for missing pack files
      repack: use tempfiles for signal cleanup
      repack: drop remove_temporary_files()
      Git.pm: trust rev-parse to find bare repositories
      t7700: annotate cruft-pack failure with ok=sigpipe
      shortlog: accept `--date`-related options
      Makefile: force -O0 when compiling with SANITIZE=leak
      t5516: move plaintext-password tests from t5601 and t5516
      ref-filter: fix parsing of signatures without blank lines
      ref-filter: fix parsing of signatures with CRLF and no body
      branch: gracefully handle '-d' on orphan HEAD
      t: run t5551 tests with both HTTP and HTTP/2
      parse_object(): drop extra "has" check before checking object type
      parse_object(): check on-disk type of suspected blob

Jerry Zhang (6):
      patch-id: fix stable patch id for binary / header-only
      patch-id: use stable patch-id for rebases
      builtin: patch-id: fix patch-id with binary diffs
      patch-id: fix patch-id for mode changes
      builtin: patch-id: add --verbatim as a command mode
      builtin: patch-id: remove unused diff-tree prefix

Jiang Xin (5):
      t5516: fail to run in verbose mode
      github-actions: run gcc-8 on ubuntu-20.04 image
      ci: remove the pipe after "p4 -V" to catch errors
      ci: use the same version of p4 on both Linux and macOS
      ci: install python on ubuntu

Johannes Altmanninger (1):
      sequencer: avoid dropping fixup commit that targets self via commit-ish

Johannes Schindelin (14):
      merge-ort: fix segmentation fault in read-only repositories
      merge-ort: return early when failing to write a blob
      cmake: make it easier to diagnose regressions in CTest runs
      cmake: copy the merge tools for testing
      add -p: avoid ambiguous signed/unsigned comparison
      cmake: avoid editing t/test-lib.sh
      cmake: increase time-out for a long-running test
      t5516/t5601: be less strict about the number of credential warnings
      scalar reconfigure -a: remove stale `scalar.repo` entries
      ci: use a newer `github-script` version
      tests(scalar): tighten the stale `scalar.repo` test some
      ci: avoid using deprecated {up,down}load-artifacts Action
      RelNotes: a couple of typofixes
      ci: use a newer `github-script` version

John Cai (3):
      tmp-objdir: skip clean up when handling a signal
      fsck: remove the unused BAD_TAG_OBJECT
      fsck: document msg-id

Jonathan Tan (4):
      promisor-remote: remove a return value
      promisor-remote: die upon failing fetch
      negotiator/skipping: avoid stack overflow
      Doc: document push.recurseSubmodules=only

Jordi Mas (1):
      l10n: Update Catalan translation

Julia Ramer (1):
      embargoed releases: also describe the git-security list and the process

Junio C Hamano (32):
      environ: document GIT_SSL_NO_VERIFY
      environ: explain Boolean environment variables
      environ: GIT_FLUSH should be made a usual Boolean
      environ: simplify description of GIT_INDEX_FILE
      environ: GIT_INDEX_VERSION affects not just a new repository
      branch: do not fail a no-op --edit-desc
      SubmittingPatches: use usual capitalization in the log message body
      Start 2.39 cycle
      symbolic-ref: teach "--[no-]recurse" option
      The (real) first batch for 2.39
      The second batch
      The third batch
      The fourth batch
      ci: add address and undefined sanitizer tasks
      ci: use DC_SHA1=YesPlease on osx-clang job for CI
      The fifth batch
      diff: leave NEEDWORK notes in show_stats() function
      fsck: remove the unused MISSING_TREE_OBJECT
      Documentation: add lint-fsck-msgids
      Downmerge a handful of topics for 2.38.2
      The sixth batch
      Downmerge a bit more for 2.38.2
      The seventh batch
      The eighth batch
      adjust_shared_perm(): leave g+s alone when the group does not matter
      Git 2.39-rc0
      Another batch before -rc1
      A bit more before -rc1
      Git 2.39-rc1
      Git 2.39-rc2
      Git 2.38.2
      Git 2.39

Kevin Backhouse (1):
      alias.c: reject too-long cmdline strings in split_cmdline()

Kousik Sanagavarapu (1):
      repository-version.txt: partialClone casing change

Kyle Meyer (1):
      merge-recursive: fix variable typo in error message

M Hickford (4):
      Documentation/gitcredentials.txt: mention password alternatives
      Documentation: increase example cache timeout to 1 hour
      docs: clarify that credential discards unrecognised attributes
      Docs: describe how a credential-generating helper works

Martin Ågren (1):
      test-lib-functions: drop redundant diagnostic print

Matheus Tavares (1):
      mailmap: update email address of Matheus Tavares

Matthew John Cheetham (3):
      wincred: ignore unknown lines (do not die)
      netrc: ignore unknown lines (do not die)
      osxkeychain: clarify that we ignore unknown lines

Michael J Gruber (1):
      notes: avoid empty line in template

Michael McClimon (1):
      Git.pm: add semicolon after catch statement

Noah Betzen (1):
      mergetool.txt: typofix 'overwriten' -> 'overwritten'

Nsengiyumva Wilberforce (1):
      t1002: modernize outdated conditional

Oscar Dominguez (1):
      ci(main): upgrade actions/checkout to v3

Patrick Steinhardt (7):
      refs: fix memory leak when parsing hideRefs config
      refs: get rid of global list of hidden refs
      revision: move together exclusion-related functions
      revision: introduce struct to handle exclusions
      revision: add new parameter to exclude hidden refs
      rev-parse: add `--exclude-hidden=` option
      receive-pack: only use visible refs for connectivity check

Paul Smith (1):
      Makefile: avoid multiple patterns when recipes generate one file

Peter Krefting (1):
      l10n: sv.po: Update Swedish translation (5501t0f0)

Philip Oakley (4):
      doc: use "commit-graph" hyphenation consistently
      doc: use 'object database' not ODB or abbreviation
      glossary: add "commit graph" description
      glossary: add reachability bitmap description

Philippe Blain (9):
      test-lib-functions: mark 'test_commit' variables as 'local'
      subtree: use 'git rev-parse --verify [--quiet]' for better error messages
      subtree: add 'die_incompatible_opt' function to reduce duplication
      subtree: prefix die messages with 'fatal'
      subtree: define a variable before its first use in 'find_latest_squash'
      subtree: use named variables instead of "$@" in cmd_pull
      subtree: process 'git-subtree-split' trailer in separate function
      subtree: fix squash merging after annotated tag was squashed merged
      subtree: fix split after annotated tag was squashed merged

Phillip Wood (26):
      mailinfo -b: fix an out of bounds access
      ssh signing: return an error when signature cannot be read
      t3435: remove redundant test case
      t3416: tighten two tests
      t3416: set $EDITOR in subshell
      rebase: be stricter when reading state files containing oids
      rebase: store orig_head as a commit
      rebase: rename merge_base to branch_base
      rebase: factor out branch_base calculation
      rebase --keep-base: imply --reapply-cherry-picks
      rebase --keep-base: imply --no-fork-point
      rebase --apply: remove duplicated code
      t3406: rework rebase reflog tests
      rebase --merge: fix reflog when continuing
      rebase --merge: fix reflog message after skipping
      rebase --apply: respect GIT_REFLOG_ACTION
      rebase --apply: make reflog messages match rebase --merge
      rebase --abort: improve reflog message
      rebase: cleanup action handling
      sequencer: stop exporting GIT_REFLOG_ACTION
      rebase: stop exporting GIT_REFLOG_ACTION
      git_parse_unsigned: reject negative values
      config: require at least one digit when parsing numbers
      git_parse_signed(): avoid integer overflow
      sequencer: unify label lookup
      sequencer: tighten label lookups

Ralf Thielow (1):
      l10n: de.po: update German translation

René Scharfe (21):
      revision: use strtol_i() for exclude_parent
      revisions.txt: unspecify order of resolved parts of ^!
      diff: support ^! for merges
      gc: simplify maintenance_task_pack_refs()
      t/lib-httpd: pass LANG and LC_ALL to Apache
      bisect--helper: plug strvec leak
      archive: deduplicate verbose printing
      submodule: use strvec_pushf() for --super-prefix
      run-command: fix return value comment
      am: simplify building "show" argument list
      bisect: simplify building "checkout" argument list
      bisect--helper: factor out do_bisect_run()
      sequencer: simplify building argument list in do_exec()
      use child_process member "args" instead of string array variable
      use child_process members "args" and "env" directly
      replace and remove run_command_v_opt_cd_env()
      replace and remove run_command_v_opt_tr2()
      replace and remove run_command_v_opt_cd_env_tr2()
      replace and remove run_command_v_opt()
      archive-tar: report filter start error only once
      list-objects-filter: plug combine_filter_data leak

Ronan Pigott (2):
      for-each-repo: interpolate repo path arguments
      maintenance: add option to register in a specific config

Rubén Justo (5):
      ref-filter.c: fix a leak in get_head_description
      branch: description for non-existent branch errors
      branch: support for shortcuts like @{-1}, completed
      branch: error copying or renaming a detached HEAD
      branch: error code with --edit-description

SZEDER Gábor (4):
      Documentation/build-docdep.perl: generate sorted output
      line-log: free diff queue when processing non-merge commits
      line-log: free the diff queues' arrays when processing merge commits
      diff.c: use diff_free_queue()

Sergey Organov (3):
      diff-merges: cleanup func_by_opt()
      diff-merges: cleanup set_diff_merges()
      diff-merges: clarify log.diffMerges documentation

Shaoxuan Yuan (1):
      builtin/grep.c: integrate with sparse index

Sotir Danailov (1):
      docs: git-send-email: difference between ssl and tls smtp-encryption

Taylor Blau (64):
      Documentation/git-multi-pack-index.txt: fix typo
      Documentation/git-multi-pack-index.txt: clarify expire behavior
      midx.c: prevent `expire` from removing the cruft pack
      midx.c: avoid cruft packs with `repack --batch-size=0`
      midx.c: replace `xcalloc()` with `CALLOC_ARRAY()`
      midx.c: remove unnecessary loop condition
      midx.c: avoid cruft packs with non-zero `repack --batch-size`
      builtin/clone.c: disallow `--local` clones with symlinks
      t/lib-submodule-update.sh: allow local submodules
      t/t1NNN: allow local submodules
      t/2NNNN: allow local submodules
      t/t3NNN: allow local submodules
      t/t4NNN: allow local submodules
      t/t5NNN: allow local submodules
      t/t6NNN: allow local submodules
      t/t7NNN: allow local submodules
      t/t9NNN: allow local submodules
      transport: make `protocol.file.allow` be "user" by default
      t1092: prepare for changing protocol.file.allow
      t2080: prepare for changing protocol.file.allow
      t1092: prepare for changing protocol.file.allow
      t2080: prepare for changing protocol.file.allow
      t3207: prepare for changing protocol.file.allow
      t5516: prepare for changing protocol.file.allow
      t5537: prepare for changing protocol.file.allow
      t7814: prepare for changing protocol.file.allow
      t3206: prepare for changing protocol.file.allow
      t5537: prepare for changing protocol.file.allow
      Git 2.30.6
      Git 2.31.5
      Git 2.32.4
      Git 2.33.5
      Git 2.34.5
      Git 2.35.5
      Git 2.36.3
      t7527: prepare for changing protocol.file.allow
      Git 2.37.4
      Git 2.38.1
      midx.c: fix whitespace typo
      midx.c: consider annotated tags during bitmap selection
      midx.c: instrument MIDX and bitmap generation with trace2 regions
      pack-bitmap-write.c: instrument number of reused bitmaps
      builtin/repack.c: remove redundant pack-based bitmaps
      repack: don't remove .keep packs with `--pack-kept-objects`
      builtin/repack.c: pass "out" to `prepare_pack_objects`
      builtin/repack.c: pass "cruft_expiration" to `write_cruft_pack`
      builtin/repack.c: write cruft packs to arbitrary locations
      builtin/repack.c: implement `--expire-to` for storing pruned objects
      shortlog: make trailer insertion a noop when appropriate
      shortlog: extract `--group` fragment for translation
      shortlog: support arbitrary commit format `--group`s
      shortlog: extract `shortlog_finish_setup()`
      shortlog: implement `--group=author` in terms of `--group=<format>`
      shortlog: implement `--group=committer` in terms of `--group=<format>`
      apply: reject patches larger than ~1 GiB
      Documentation/howto/maintain-git.txt: fix Meta/redo-jch.sh invocation
      The ninth batch
      Documentation: build redo-jch.sh from master..jch
      Documentation: build redo-seen.sh from jch..seen
      The tenth batch
      The eleventh batch
      The twelfth batch
      builtin/gc.c: fix use-after-free in maintenance_unregister()
      The thirteenth batch

Torsten Bögershausen (1):
      diff.c: use utf8_strwidth() to count display width

Victoria Dye (8):
      read-cache: avoid misaligned reads in index v4
      rebase --update-refs: avoid unintended ref deletion
      cache-tree: add perf test comparing update and prime
      unpack-trees: add 'skip_cache_tree_update' option
      reset: use 'skip_cache_tree_update' option
      read-tree: use 'skip_cache_tree_update' option
      rebase: use 'skip_cache_tree_update' option
      rebase --update-refs: avoid unintended ref deletion

Vincent Bernat (1):
      ls-files: fix --ignored and --killed flags in synopsis

Vlad-Stefan Harbuz (1):
      Documentation: fix typo

Yi-Jyun Pan (1):
      l10n: zh_TW.po: Git 2.39-rc2

srz_zumix (1):
      fsmonitor--daemon: on macOS support symlink

Ævar Arnfjörð Bjarmason (118):
      test-lib: have SANITIZE=leak imply TEST_NO_MALLOC_CHECK
      CodingGuidelines: update for C99
      CodingGuidelines: mention dynamic C99 initializer elements
      CodingGuidelines: allow declaring variables in for loops
      CodingGuidelines: mention C99 features we can't use
      grep.c: remove "extended" in favor of "pattern_expression", fix segfault
      CodingGuidelines: recommend against unportable C99 struct syntax
      bundle-uri: create "key=value" line parsing
      bundle-uri: unit test "key=value" parsing
      run-command test helper: use "else if" pattern
      run-command API: have "run_processes_parallel{,_tr2}()" return void
      run-command tests: use "return", not "exit"
      run-command API: make "n" parameter a "size_t"
      run-command API: don't fall back on online_cpus()
      run-command.c: use designated init for pp_init(), add "const"
      run-command API: have run_process_parallel() take an "opts" struct
      run-command API: move *_tr2() users to "run_processes_parallel()"
      run-command.c: make "struct parallel_processes" const if possible
      run-command.c: don't copy *_fn to "struct parallel_processes"
      run-command.c: don't copy "ungroup" to "struct parallel_processes"
      run-command.c: don't copy "data" to "struct parallel_processes"
      run-command.c: use "opts->processes", not "pp->max_processes"
      run-command.c: pass "opts" further down, and use "opts->processes"
      run-command.c: remove "max_processes", add "const" to signal() handler
      tests: assert *.txt SYNOPSIS and -h output
      CodingGuidelines: update and clarify command-line conventions
      builtin/bundle.c: indent with tabs
      bundle: define subcommand -h in terms of command -h
      doc SYNOPSIS: don't use ' for subcommands
      doc SYNOPSIS: consistently use ' for commands
      built-ins: consistently add "\n" between "usage" and options
      doc txt & -h consistency: word-wrap
      doc txt & -h consistency: fix incorrect alternates syntax
      doc txt & -h consistency: add "-z" to cat-file "-h"
      doc txt & -h consistency: balance unbalanced "[" and "]"
      doc txt & -h consistency: correct padding around "[]()"
      stash doc SYNOPSIS & -h: correct padding around "[]()"
      doc txt & -h consistency: use "<options>", not "<options>..."
      doc SYNOPSIS & -h: use "-" to separate words in labels, not "_"
      doc txt & -h consistency: fix mismatching labels
      doc txt & -h consistency: add or fix optional "--" syntax
      doc txt & -h consistency: make output order consistent
      doc txt & -h consistency: add missing options and labels
      doc txt & -h consistency: make "rerere" consistent
      doc txt & -h consistency: make "read-tree" consistent
      doc txt & -h consistency: make "bundle" consistent
      doc txt & -h consistency: use "git foo" form, not "git-foo"
      doc txt & -h consistency: add missing options
      doc txt & -h consistency: make "stash" consistent
      doc txt & -h consistency: make "annotate" consistent
      doc txt & -h consistency: use "[<label>...]" for "zero or more"
      doc txt & -h consistency: make "diff-tree" consistent
      doc txt & -h consistency: make "commit" consistent
      reflog doc: list real subcommands up-front
      worktree: define subcommand -h in terms of command -h
      doc txt & -h consistency: make "worktree" consistent
      tests: start asserting that *.txt SYNOPSIS matches -h output
      tests: assert consistent whitespace in -h output
      fsmonitor OSX: compile with DC_SHA1=YesPlease
      merge: remove always-the-same "verbose" arguments
      hook tests: fix redirection logic error in 96e7225b310
      submodule tests: reset "trace.out" between "grep" invocations
      run-command tests: test stdout of run_command_parallel()
      Makefile + shared.mak: rename and indent $(QUIET_SPATCH_T)
      cocci rules: remove unused "F" metavariable from pending rule
      Makefile: add ability to TAB-complete cocci *.patch rules
      Makefile: have "coccicheck" re-run if flags change
      Makefile: split off SPATCH_BATCH_SIZE comment from "cocci" heading
      cocci: split off include-less "tests" from SPATCH_FLAGS
      cocci: split off "--all-includes" from SPATCH_FLAGS
      cocci: make "coccicheck" rule incremental
      cocci: optimistically use COMPUTE_HEADER_DEPENDENCIES
      Makefile: copy contrib/coccinelle/*.cocci to build/
      cocci rules: remove <id>'s from rules that don't need them
      cocci: run against a generated ALL.cocci
      spatchcache: add a ccache-alike for "spatch"
      Makefile: always (re)set DC_SHA1 on fallback
      INSTALL: remove discussion of SHA-1 backends
      Makefile: correct DC_SHA1 documentation
      Makefile: create and use sections for "define" flag listing
      Makefile: rephrase the discussion of *_SHA1 knobs
      Makefile: document default SHA-256 backend
      Makefile: document SHA-1 and SHA-256 default and selection order
      Makefile & test-tool: replace "DC_SHA1" variable with a "define"
      Makefile: document default SHA-1 backend on OSX
      Makefile: discuss SHAttered in *_SHA{1,256} discussion
      submodule--helper: move "config" to a test-tool
      submodule tests: add tests for top-level flag output
      submodule--helper: fix a memory leak in "status"
      submodule tests: test for a "foreach" blind-spot
      submodule.c: refactor recursive block out of absorb function
      submodule API & "absorbgitdirs": remove "----recursive" option
      submodule--helper: remove --prefix from "absorbgitdirs"
      submodule--helper: drop "update --prefix <pfx>" for "-C <pfx> update"
      submodule--helper: use OPT_SUBCOMMAND() API
      revisions API: extend the nascent REV_INFO_INIT macro
      t7610: fix flaky timeout issue, don't clone from example.com
      Makefile: don't create a ".build/.build/" for cocci, fix output
      maintenance --unregister: fix uninit'd data use & -Wdeclaration-after-statement
      t7610: use "file:///dev/null", not "/dev/null", fixes MinGW
      cache.h: remove unused "the_index" compat macros
      builtin/{grep,log}.: don't define "USE_THE_INDEX_COMPATIBILITY_MACROS"
      cocci & cache.h: remove rarely used "the_index" compat macros
      read-cache API & users: make discard_index() return void
      cocci: add a index-compatibility.pending.cocci
      cocci & cache.h: apply a selection of "pending" index-compatibility
      cocci & cache.h: apply variable section of "pending" index-compatibility
      cocci: apply "pending" index-compatibility to "t/helper/*.c"
      {builtin/*,repository}.c: add & use "USE_THE_INDEX_VARIABLE"
      cache.h & test-tool.h: add & use "USE_THE_INDEX_VARIABLE"
      cocci: apply "pending" index-compatibility to some "builtin/*.c"
      parse_object(): simplify blob conditional
      trace2 tests: guard pthread test with "PTHREAD"
      Makefiles: change search through $(MAKEFLAGS) for GNU make 4.4
      cocci: avoid "should ... be a metavariable" warnings
      CI: upgrade to macos-12, and pin OSX version
      CI: don't explicitly pick "bash" shell outside of Windows, fix regression
      CI: migrate away from deprecated "set-output" syntax

Đoàn Trần Công Danh (8):
      CodingGuidelines: allow grep -E
      t: remove \{m,n\} from BRE grep usage
      t: convert egrep usage to "grep -E"
      t: convert fgrep usage to "grep -F"
      Makefile: clarify runtime relative gitexecdir
      bisect--helper: remove unused options
      bisect--helper: move all subcommands into their own functions
      bisect--helper: parse subcommand with OPT_SUBCOMMAND


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.39.0-rc2
@ 2022-12-06  4:00  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2022-12-06  4:00 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.39.0-rc2 is now available for testing at
the usual places.  It is comprised of 463 non-merge commits since
v2.38.0, contributed by 74 people, 30 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.39.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.38.0 are as follows.
Welcome to the Git development community!

  Alexander Kanavin, Alexander Meshcheryakov, Andreas Hasenack,
  Anh Le, Arthur Chan, Daniel Sonbolian, Debra Obondo, Diomidis
  Spinellis, Erik Cervin Edin, Hank Leininger, herr.kaste, John
  A. Leuenhagen, Julia Ramer, Kevin Backhouse, Kousik Sanagavarapu,
  Lukáš Doktor, Martin Englund, M Hickford, Michael V. Scovetta,
  Noah Betzen, Nsengiyumva Wilberforce, orygaw, Ronan Pigott,
  Rubén Justo, Sotir Danailov, srz_zumix, Stefano Rivera, Tim
  Jaacks, Vincent Bernat, and Vlad-Stefan Harbuz.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alejandro R. Sedeño, Alex Henrie, Derrick
  Stolee, Đoàn Trần Công Danh, Elijah Newren, Emily Shaffer, Eric
  DeCosta, Eric Sunshine, Eric Wong, Glen Choo, Han-Wen Nienhuys,
  Jan Pokorný, Jean-Noël Avila, Jeff Hostetler, Jeff King, Jerry
  Zhang, Jiang Xin, Johannes Altmanninger, Johannes Schindelin, John
  Cai, Jonathan Tan, Julien Moutinho, Junio C Hamano, Kyle Meyer,
  Martin Ågren, Martin von Zweigbergk, Matthew John Cheetham,
  Michael J Gruber, Michael McClimon, Patrick Steinhardt, Paul
  Smith, Philip Oakley, Philippe Blain, Phillip Wood, Randall
  S. Becker, René Scharfe, Sergey Organov, Shaoxuan Yuan, SZEDER
  Gábor, Taylor Blau, Torsten Bögershausen, and Victoria Dye.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.39 Release Notes (draft)
===============================

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

 * "git grep" learned to expand the sparse-index more lazily and on
   demand in a sparse checkout.

 * By default, use of fsmonitor on a repository on networked
   filesystem is disabled. Add knobs to make it workable on macOS.

 * After checking out a "branch" that is a symbolic-ref that points at
   another branch, "git symbolic-ref HEAD" reports the underlying
   branch, not the symbolic-ref the user gave checkout as argument.
   The command learned the "--no-recurse" option to stop after
   dereferencing a symbolic-ref only once.

 * "git branch --edit-description @{-1}" is now a way to edit branch
   description of the branch you were on before switching to the
   current branch.

 * "git merge-tree --stdin" is a new way to request a series of merges
   and report the merge results.

 * "git shortlog" learned to group by the "format" string.

 * A new "--include-whitespace" option is added to "git patch-id", and
   existing bugs in the internal patch-id logic that did not match
   what "git patch-id" produces have been corrected.

 * Enable gc.cruftpacks by default for those who opt into
   feature.experimental setting.

 * "git repack" learns to send cruft objects out of the way into
   packfiles outside the repository.

 * 'scalar reconfigure -a' is taught to automatically remove
   scalar.repo entires which no longer exist.

 * Redact headers from cURL's h2h3 module in GIT_CURL_VERBOSE and
   others.

 * 'git maintenance register' is taught to write configuration to an
   arbitrary path, and 'git for-each-repo' is taught to expand tilde
   characters in paths.

 * When creating new notes, the template used to get a stray empty
   newline, which has been removed.

 * "git receive-pack" used to use all the local refs as the boundary for
   checking connectivity of the data "git push" sent, but now it uses
   only the refs that it advertised to the pusher. In a repository with
   the .hideRefs configuration, this reduces the resources needed to
   perform the check.

 * With '--recurse-submodules=on-demand', all submodules are
   recursively pushed.


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

 * With a bit of header twiddling, use the native regexp library on
   macOS instead of the compat/ one.

 * Prepare for GNU [ef]grep that throw warning of their uses.

 * Sources related to fuzz testing have been moved down to their own
   directory.

 * Most credential helpers ignored unknown entries in a credential
   description, but a few died upon seeing them.  The latter were
   taught to ignore them, too

 * "scalar unregister" in a repository that is already been
   unregistered reported an error.

 * Remove error detection from a function that fetches from promisor
   remotes, and make it die when such a fetch fails to bring all the
   requested objects, to give an early failure to various operations.

 * Update CodingGuidelines to clarify what features to use and avoid
   in C99.

 * Avoid false-positive from LSan whose assumption may be broken with
   higher optimization levels.

 * Enable address and undefined sanitizer tasks at GitHub Actions CI.

 * More UNUSED annotation to help using -Wunused option with the
   compiler.
   (merge 4b992f0a24 jk/unused-anno-more later to maint).

 * Rewrite a deep recursion in the skipping negotiator to use a loop
   with on-heap prio queue to avoid stack wastage.

 * Add documentation for message IDs in fsck error messages.

 * Define the logical elements of a "bundle list", data structure to
   store them in-core, format to transfer them, and code to parse
   them.

 * The role the security mailing list plays in an embargoed release
   has been documented.

 * Two new facilities, "timer" and "counter", are introduced to the
   trace2 API.

 * Code simplification by using strvec_pushf() instead of building an
   argument in a separate strbuf.

 * Make sure generated dependency file is stably sorted to help
   developers debugging their build issues.

 * The glossary entries for "commit-graph file" and "reachability
   bitmap" have been added.

 * Various tests exercising the transfer.credentialsInUrl
   configuration are taught to avoid making requests which require
   resolving localhost to reduce CI-flakiness.

 * A redundant diagnostic message is dropped from test_path_is_missing().

 * Simplify the run-command API.

 * Update the actions/github-script dependency in CI to avoid a
   deprecation warning.

 * Progress on being able to initialize a rev_info struct with a
   macro.

 * Add trace2 counters to the region to clear skip worktree bits in a
   sparse checkout.

 * Modernize test script to avoid "test -f" and friends.

 * Avoid calling 'cache_tree_update()' when doing so would be
   redundant.

 * Update the credential-cache documentation to provide a more
   realistic example.

 * Makefile comments updates and reordering to clarify knobs used to
   choose SHA implementations.

 * A design document for sparse-checkout's future directions has been
   added.

 * Teach chainlint.pl to annotate the original test definition instead
   of the token stream.

 * "make coccicheck" is time consuming. It has been made to run more
   incrementally.

 * `parse_object()` has been hardened to check for the existence of a
   suspected blob object.

 * The build procedure has been adjusted to GNUmake version 4.4, which
   made some changes to how pattern rule with multiple targets are
   handled.


Fixes since v2.38
-----------------

 * The codepath that reads from the index v4 had unaligned memory
   accesses, which has been corrected.

 * Fix messages incorrectly marked for translation.

 * "git fsck" failed to release contents of tree objects already used
   from the memory, which has been fixed.

 * "git clone" did not like to see the "--bare" and the "--origin"
   options used together without a good reason.

 * "git remote rename" failed to rename a remote without fetch
   refspec, which has been corrected.

 * Documentation on various Boolean GIT_* environment variables have
   been clarified.

 * "git rebase -i" can mistakenly attempt to apply a fixup to a commit
   itself, which has been corrected.

 * "git multi-pack-index repack/expire" used to repack unreachable
   cruft into a new pack, which have been corrected.

 * In read-only repositories, "git merge-tree" tried to come up with a
   merge result tree object, which it failed (which is not wrong) and
   led to a segfault (which is bad), which has been corrected.

 * Force C locale while running tests around httpd to make sure we can
   find expected error messages in the log.

 * Fix a logic in "mailinfo -b" that miscomputed the length of a
   substring, which lead to an out-of-bounds access.

 * The codepath to sign learned to report errors when it fails to read
   from "ssh-keygen".

 * Code clean-up that results in plugging a leak.

 * "GIT_EDITOR=: git branch --edit-description" resulted in failure,
   which has been corrected.

 * The code to clean temporary object directories (used for
   quarantine) tried to remove them inside its signal handler, which
   was a no-no.

 * Update comment in the Makefile about the RUNTIME_PREFIX config knob.

 * Clarify that "the sentence after <area>: prefix does not begin with
   a capital letter" rule applies only to the commit title.

 * "git branch --edit-description" on an unborh branch misleadingly
   said that no such branch exists, which has been corrected.

 * Work around older clang that warns against C99 zero initialization
   syntax for struct.

 * Giving "--invert-grep" and "--all-match" without "--grep" to the
   "git log" command resulted in an attempt to access grep pattern
   expression structure that has not been allocated, which has been
   corrected.
   (merge db84376f98 ab/grep-simplify-extended-expression later to maint).

 * "git diff rev^!" did not show combined diff to go to the rev from
   its parents.
   (merge a79c6b6081 rs/diff-caret-bang-with-parents later to maint).

 * Allow configuration files in "protected" scopes to include other
   configuration files.
   (merge ecec57b3c9 gc/bare-repo-discovery later to maint).

 * Give a bit more diversity to macOS CI by using sha1dc in one of the
   jobs (the other one tests Apple Common Crypto).
   (merge 1ad5c3df35 jc/ci-osx-with-sha1dc later to maint).

 * A bugfix with tracing support in midx codepath
   (merge e9c3839944 tb/midx-bitmap-selection-fix later to maint).

 * When geometric repacking feature is in use together with the
   --pack-kept-objects option, we lost packs marked with .keep files.
   (merge 197443e80a tb/save-keep-pack-during-geometric-repack later to maint).

 * Move a global variable added as a hack during regression fixes to
   its proper place in the API.
   (merge 0b0ab95f17 ab/run-hook-api-cleanup later to maint).

 * Update to build procedure with VS using CMake/CTest.
   (merge c858750b41 js/cmake-updates later to maint).

 * The short-help text shown by "git cmd -h" and the synopsis text
   shown at the beginning of "git help cmd" have been made more
   consistent.

 * When creating a multi-pack bitmap, remove per-pack bitmap files
   unconditionally as they will never be consulted.
   (merge 55d902cd61 tb/remove-unused-pack-bitmap later to maint).

 * Fix a longstanding syntax error in Git.pm error codepath.

 * "git diff --stat" etc. were invented back when everything was ASCII
   and strlen() was a way to measure the display width of a string;
   adjust them to compute the display width assuming UTF-8 pathnames.
   (merge ce8529b2bb tb/diffstat-with-utf8-strwidth later to maint).

 * "git branch --edit-description" can exit with status -1 which is
   not a good practice; it learned to use 1 as everybody else instead.

 * "git apply" limits its input to a bit less than 1 GiB.

 * Merging a branch with directory renames into a branch that changes
   the directory to a symlink was mishandled by the ort merge
   strategy, which has been corrected.

 * A bugfix to "git subtree" in its split and merge features.

 * Fix some bugs in the reflog messages when rebasing and changes the
   reflog messages of "rebase --apply" to match "rebase --merge" with
   the aim of making the reflog easier to parse.

 * "git rebase --keep-base" used to discard the commits that are
   already cherry-picked to the upstream, even when "keep-base" meant
   that the base, on top of which the history is being rebuilt, does
   not yet include these cherry-picked commits.  The --keep-base
   option now implies --reapply-cherry-picks and --no-fork-point
   options.

 * The way "git repack" creared temporary files when it received a
   signal was prone to deadlocking, which has been corrected.

 * Various tests exercising the transfer.credentialsInUrl
   configuration are taught to avoid making requests which require
   resolving localhost to reduce CI-flakiness.

 * The adjust_shared_perm() helper function learned to refrain from
   setting the "g+s" bit on directories when it is not necessary.

 * "git archive" mistakenly complained twice about a missing
   executable, which has been corrected.

 * Fix a bug where `git branch -d` did not work on an orphaned HEAD.

 * `git rebase --update-refs` would delete references when all
   `update-ref` commands in the sequencer were removed, which has been
   corrected.

 * Fix a regression in the bisect-helper which mistakenly treats
   arguments to the command given to 'git bisect run' as arguments to
   the helper.

 * Correct an error where `git rebase` would mistakenly use a branch or
   tag named "refs/rewritten/xyz" when missing a rebase label.

 * Assorted fixes of parsing end-user input as integers.
   (merge 14770cf0de pw/config-int-parse-fixes later to maint).

 * "git prune" may try to iterate over .git/objects/pack for trash
   files to remove in it, and loudly fail when the directory is
   missing, which is not necessary.  The command has been taught to
   ignore such a failure.
   (merge 6974765352 ew/prune-with-missing-objects-pack later to maint).

 * Add one more candidate directory that may house httpd modules while
   running tests.
   (merge 1c7dc23d41 es/locate-httpd-module-location-in-test later to maint).

 * A handful of leaks in the line-log machinery have been plugged.

 * The format of a line in /proc/cpuinfo that describes a CPU on s390x
   looked different from everybody else, and the code in chainlint.pl
   failed to parse it.
   (merge 1f51b77f4f ah/chainlint-cpuinfo-parse-fix later to maint).

 * Adjust the GitHub CI to newer ubuntu release.
   (merge 0d3507f3e7 jx/ci-ubuntu-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 413bc6d20a ds/cmd-main-reorder later to maint).
   (merge 8d2863e4ed nw/t1002-cleanup later to maint).
   (merge 7c2dc122f9 rs/list-objects-filter-leakfix later to maint).
   (merge 288fcb1c94 zk/push-use-bitmaps later to maint).
   (merge 42db324c0f km/merge-recursive-typofix later to maint).

----------------------------------------------------------------

Changes since v2.38.0 are as follows:

Alejandro R. Sedeño (1):
      git-compat-util.h: GCC deprecated message arg only in GCC 4.5+

Alex Henrie (2):
      fsmonitor--daemon: don't translate literal commands
      push: improve grammar of branch.autoSetupMerge advice

Andreas Hasenack (1):
      chainlint.pl: fix /proc/cpuinfo regexp

Anh Le (2):
      index: add trace2 region for clear skip worktree
      index: raise a bug if the index is materialised more than once

Arthur Chan (1):
      fuzz: reorganise the path for existing oss-fuzz fuzzers

Daniel Sonbolian (1):
      git.c: improve code readability in cmd_main()

Debra Obondo (1):
      t7001-mv.sh: modernizing test script using functions

Derrick Stolee (15):
      maintenance: add 'unregister --force'
      scalar: make 'unregister' idempotent
      gc: replace config subprocesses with API calls
      string-list: document iterator behavior on NULL input
      bundle-uri: fix technical doc issues
      bundle-uri: use plain string in find_temp_filename()
      bundle-uri: create bundle_list struct and helpers
      bundle-uri: create base key-value pair parsing
      bundle-uri: parse bundle list in config format
      bundle-uri: limit recursion depth for bundle lists
      bundle: properly clear all revision flags
      bundle-uri: fetch a list of bundles
      bundle: add flags to verify_bundle()
      bundle-uri: quiet failed unbundlings
      bundle-uri: suppress stderr from remote-https

Diomidis Spinellis (1):
      grep: fix multibyte regex handling under macOS

Elijah Newren (4):
      merge-ort: fix bug with dir rename vs change dir to symlink
      merge-tree: update documentation for differences in -z output
      merge-tree: support multiple batched merges with --stdin
      sparse-checkout.txt: new document with sparse-checkout directions

Emily Shaffer (2):
      gc: add tests for --cruft and friends
      config: let feature.experimental imply gc.cruftPacks=true

Eric DeCosta (6):
      fsmonitor: refactor filesystem checks to common interface
      fsmonitor: relocate socket file if .git directory is remote
      fsmonitor: avoid socket location check if using hook
      fsmonitor: deal with synthetic firmlinks on macOS
      fsmonitor: check for compatability before communicating with fsmonitor
      fsmonitor: add documentation for allowRemote and socketDir options

Eric Sunshine (9):
      check-non-portable-shell: detect obsolescent egrep/fgrep
      chainlint: add explanatory comments
      chainlint: tighten accuracy when consuming input stream
      chainlint: latch start/end position of each token
      chainlint: annotate original test definition rather than token stream
      chainlint: sidestep impoverished macOS "terminfo"
      chainlint: latch line numbers at which each token starts and ends
      chainlint: prefix annotated test definition with line numbers
      lib-httpd: extend module location auto-detection

Eric Wong (2):
      delta-islands: free island-related data after use
      prune: quiet ENOENT on missing directories

Glen Choo (3):
      config: respect includes in protected config
      http: redact curl h2h3 headers in info
      object-file: use real paths when adding alternates

Han-Wen Nienhuys (1):
      refs: unify parse_worktree_ref() and ref_type()

Jean-Noël Avila (1):
      i18n: fix command template placeholder format

Jeff Hostetler (9):
      config.mak.dev: disable suggest braces error on old clang versions
      trace2: use size_t alloc,nr_open_regions in tr2tls_thread_ctx
      tr2tls: clarify TLS terminology
      api-trace2.txt: elminate section describing the public trace2 API
      trace2: rename the thread_name argument to trace2_thread_start
      trace2: improve thread-name documentation in the thread-context
      trace2: convert ctx.thread_name from strbuf to pointer
      trace2: add stopwatch timers
      trace2: add global counter mechanism

Jeff King (43):
      fsck: free tree buffers after walking unreachable objects
      fsck: turn off save_commit_buffer
      parse_object_buffer(): respect save_commit_buffer
      clone: allow "--bare" with "-o"
      remote: handle rename of remote without fetch refspec
      shell: add basic tests
      shell: limit size of interactive commands
      sequencer: detect author name errors in read_author_script()
      test-submodule: inline resolve_relative_url() function
      multi-pack-index: avoid writing to global in option callback
      commit: avoid writing to global in option callback
      attr: drop DEBUG_ATTR code
      dir: use fspathncmp() in pl_hashmap_cmp()
      fsmonitor: fix leak of warning message
      diffstat_consume(): assert non-zero length
      submodule--helper: drop unused argc from module_list_compute()
      update-index: drop unused argc from do_reupdate()
      mark unused parameters in trivial compat functions
      object-file: mark unused parameters in hash_unknown functions
      string-list: mark unused callback parameters
      date: mark unused parameters in handler functions
      apply: mark unused parameters in handlers
      apply: mark unused parameters in noop error/warning routine
      convert: mark unused parameter in null stream filter
      diffcore-pickaxe: mark unused parameters in pickaxe functions
      ll-merge: mark unused parameters in callbacks
      Makefile: force -O0 when compiling with SANITIZE=leak
      repack: convert "names" util bitfield to array
      repack: populate extension bits incrementally
      repack: expand error message for missing pack files
      repack: use tempfiles for signal cleanup
      repack: drop remove_temporary_files()
      Git.pm: trust rev-parse to find bare repositories
      t7700: annotate cruft-pack failure with ok=sigpipe
      shortlog: accept `--date`-related options
      Makefile: force -O0 when compiling with SANITIZE=leak
      t5516: move plaintext-password tests from t5601 and t5516
      ref-filter: fix parsing of signatures without blank lines
      ref-filter: fix parsing of signatures with CRLF and no body
      branch: gracefully handle '-d' on orphan HEAD
      t: run t5551 tests with both HTTP and HTTP/2
      parse_object(): drop extra "has" check before checking object type
      parse_object(): check on-disk type of suspected blob

Jerry Zhang (6):
      patch-id: fix stable patch id for binary / header-only
      patch-id: use stable patch-id for rebases
      builtin: patch-id: fix patch-id with binary diffs
      patch-id: fix patch-id for mode changes
      builtin: patch-id: add --verbatim as a command mode
      builtin: patch-id: remove unused diff-tree prefix

Jiang Xin (5):
      t5516: fail to run in verbose mode
      github-actions: run gcc-8 on ubuntu-20.04 image
      ci: remove the pipe after "p4 -V" to catch errors
      ci: use the same version of p4 on both Linux and macOS
      ci: install python on ubuntu

Johannes Altmanninger (1):
      sequencer: avoid dropping fixup commit that targets self via commit-ish

Johannes Schindelin (11):
      merge-ort: fix segmentation fault in read-only repositories
      merge-ort: return early when failing to write a blob
      cmake: make it easier to diagnose regressions in CTest runs
      cmake: copy the merge tools for testing
      add -p: avoid ambiguous signed/unsigned comparison
      cmake: avoid editing t/test-lib.sh
      cmake: increase time-out for a long-running test
      t5516/t5601: be less strict about the number of credential warnings
      scalar reconfigure -a: remove stale `scalar.repo` entries
      ci: use a newer `github-script` version
      tests(scalar): tighten the stale `scalar.repo` test some

John Cai (3):
      tmp-objdir: skip clean up when handling a signal
      fsck: remove the unused BAD_TAG_OBJECT
      fsck: document msg-id

Jonathan Tan (4):
      promisor-remote: remove a return value
      promisor-remote: die upon failing fetch
      negotiator/skipping: avoid stack overflow
      Doc: document push.recurseSubmodules=only

Julia Ramer (1):
      embargoed releases: also describe the git-security list and the process

Junio C Hamano (30):
      environ: document GIT_SSL_NO_VERIFY
      environ: explain Boolean environment variables
      environ: GIT_FLUSH should be made a usual Boolean
      environ: simplify description of GIT_INDEX_FILE
      environ: GIT_INDEX_VERSION affects not just a new repository
      branch: do not fail a no-op --edit-desc
      SubmittingPatches: use usual capitalization in the log message body
      Start 2.39 cycle
      symbolic-ref: teach "--[no-]recurse" option
      The (real) first batch for 2.39
      The second batch
      The third batch
      The fourth batch
      ci: add address and undefined sanitizer tasks
      ci: use DC_SHA1=YesPlease on osx-clang job for CI
      The fifth batch
      diff: leave NEEDWORK notes in show_stats() function
      fsck: remove the unused MISSING_TREE_OBJECT
      Documentation: add lint-fsck-msgids
      Downmerge a handful of topics for 2.38.2
      The sixth batch
      Downmerge a bit more for 2.38.2
      The seventh batch
      The eighth batch
      adjust_shared_perm(): leave g+s alone when the group does not matter
      Git 2.39-rc0
      Another batch before -rc1
      A bit more before -rc1
      Git 2.39-rc1
      Git 2.39-rc2

Kevin Backhouse (1):
      alias.c: reject too-long cmdline strings in split_cmdline()

Kousik Sanagavarapu (1):
      repository-version.txt: partialClone casing change

Kyle Meyer (1):
      merge-recursive: fix variable typo in error message

M Hickford (4):
      Documentation/gitcredentials.txt: mention password alternatives
      Documentation: increase example cache timeout to 1 hour
      docs: clarify that credential discards unrecognised attributes
      Docs: describe how a credential-generating helper works

Martin Ågren (1):
      test-lib-functions: drop redundant diagnostic print

Matthew John Cheetham (3):
      wincred: ignore unknown lines (do not die)
      netrc: ignore unknown lines (do not die)
      osxkeychain: clarify that we ignore unknown lines

Michael J Gruber (1):
      notes: avoid empty line in template

Michael McClimon (1):
      Git.pm: add semicolon after catch statement

Noah Betzen (1):
      mergetool.txt: typofix 'overwriten' -> 'overwritten'

Nsengiyumva Wilberforce (1):
      t1002: modernize outdated conditional

Patrick Steinhardt (7):
      refs: fix memory leak when parsing hideRefs config
      refs: get rid of global list of hidden refs
      revision: move together exclusion-related functions
      revision: introduce struct to handle exclusions
      revision: add new parameter to exclude hidden refs
      rev-parse: add `--exclude-hidden=` option
      receive-pack: only use visible refs for connectivity check

Paul Smith (1):
      Makefile: avoid multiple patterns when recipes generate one file

Philip Oakley (4):
      doc: use "commit-graph" hyphenation consistently
      doc: use 'object database' not ODB or abbreviation
      glossary: add "commit graph" description
      glossary: add reachability bitmap description

Philippe Blain (9):
      test-lib-functions: mark 'test_commit' variables as 'local'
      subtree: use 'git rev-parse --verify [--quiet]' for better error messages
      subtree: add 'die_incompatible_opt' function to reduce duplication
      subtree: prefix die messages with 'fatal'
      subtree: define a variable before its first use in 'find_latest_squash'
      subtree: use named variables instead of "$@" in cmd_pull
      subtree: process 'git-subtree-split' trailer in separate function
      subtree: fix squash merging after annotated tag was squashed merged
      subtree: fix split after annotated tag was squashed merged

Phillip Wood (26):
      mailinfo -b: fix an out of bounds access
      ssh signing: return an error when signature cannot be read
      t3435: remove redundant test case
      t3416: tighten two tests
      t3416: set $EDITOR in subshell
      rebase: be stricter when reading state files containing oids
      rebase: store orig_head as a commit
      rebase: rename merge_base to branch_base
      rebase: factor out branch_base calculation
      rebase --keep-base: imply --reapply-cherry-picks
      rebase --keep-base: imply --no-fork-point
      rebase --apply: remove duplicated code
      t3406: rework rebase reflog tests
      rebase --merge: fix reflog when continuing
      rebase --merge: fix reflog message after skipping
      rebase --apply: respect GIT_REFLOG_ACTION
      rebase --apply: make reflog messages match rebase --merge
      rebase --abort: improve reflog message
      rebase: cleanup action handling
      sequencer: stop exporting GIT_REFLOG_ACTION
      rebase: stop exporting GIT_REFLOG_ACTION
      git_parse_unsigned: reject negative values
      config: require at least one digit when parsing numbers
      git_parse_signed(): avoid integer overflow
      sequencer: unify label lookup
      sequencer: tighten label lookups

René Scharfe (21):
      revision: use strtol_i() for exclude_parent
      revisions.txt: unspecify order of resolved parts of ^!
      diff: support ^! for merges
      gc: simplify maintenance_task_pack_refs()
      t/lib-httpd: pass LANG and LC_ALL to Apache
      bisect--helper: plug strvec leak
      archive: deduplicate verbose printing
      submodule: use strvec_pushf() for --super-prefix
      run-command: fix return value comment
      am: simplify building "show" argument list
      bisect: simplify building "checkout" argument list
      bisect--helper: factor out do_bisect_run()
      sequencer: simplify building argument list in do_exec()
      use child_process member "args" instead of string array variable
      use child_process members "args" and "env" directly
      replace and remove run_command_v_opt_cd_env()
      replace and remove run_command_v_opt_tr2()
      replace and remove run_command_v_opt_cd_env_tr2()
      replace and remove run_command_v_opt()
      archive-tar: report filter start error only once
      list-objects-filter: plug combine_filter_data leak

Ronan Pigott (2):
      for-each-repo: interpolate repo path arguments
      maintenance: add option to register in a specific config

Rubén Justo (5):
      ref-filter.c: fix a leak in get_head_description
      branch: description for non-existent branch errors
      branch: support for shortcuts like @{-1}, completed
      branch: error copying or renaming a detached HEAD
      branch: error code with --edit-description

SZEDER Gábor (4):
      Documentation/build-docdep.perl: generate sorted output
      line-log: free diff queue when processing non-merge commits
      line-log: free the diff queues' arrays when processing merge commits
      diff.c: use diff_free_queue()

Sergey Organov (3):
      diff-merges: cleanup func_by_opt()
      diff-merges: cleanup set_diff_merges()
      diff-merges: clarify log.diffMerges documentation

Shaoxuan Yuan (1):
      builtin/grep.c: integrate with sparse index

Sotir Danailov (1):
      docs: git-send-email: difference between ssl and tls smtp-encryption

Taylor Blau (64):
      Documentation/git-multi-pack-index.txt: fix typo
      Documentation/git-multi-pack-index.txt: clarify expire behavior
      midx.c: prevent `expire` from removing the cruft pack
      midx.c: avoid cruft packs with `repack --batch-size=0`
      midx.c: replace `xcalloc()` with `CALLOC_ARRAY()`
      midx.c: remove unnecessary loop condition
      midx.c: avoid cruft packs with non-zero `repack --batch-size`
      builtin/clone.c: disallow `--local` clones with symlinks
      t/lib-submodule-update.sh: allow local submodules
      t/t1NNN: allow local submodules
      t/2NNNN: allow local submodules
      t/t3NNN: allow local submodules
      t/t4NNN: allow local submodules
      t/t5NNN: allow local submodules
      t/t6NNN: allow local submodules
      t/t7NNN: allow local submodules
      t/t9NNN: allow local submodules
      transport: make `protocol.file.allow` be "user" by default
      t1092: prepare for changing protocol.file.allow
      t2080: prepare for changing protocol.file.allow
      t1092: prepare for changing protocol.file.allow
      t2080: prepare for changing protocol.file.allow
      t3207: prepare for changing protocol.file.allow
      t5516: prepare for changing protocol.file.allow
      t5537: prepare for changing protocol.file.allow
      t7814: prepare for changing protocol.file.allow
      t3206: prepare for changing protocol.file.allow
      t5537: prepare for changing protocol.file.allow
      Git 2.30.6
      Git 2.31.5
      Git 2.32.4
      Git 2.33.5
      Git 2.34.5
      Git 2.35.5
      Git 2.36.3
      t7527: prepare for changing protocol.file.allow
      Git 2.37.4
      Git 2.38.1
      midx.c: fix whitespace typo
      midx.c: consider annotated tags during bitmap selection
      midx.c: instrument MIDX and bitmap generation with trace2 regions
      pack-bitmap-write.c: instrument number of reused bitmaps
      builtin/repack.c: remove redundant pack-based bitmaps
      repack: don't remove .keep packs with `--pack-kept-objects`
      builtin/repack.c: pass "out" to `prepare_pack_objects`
      builtin/repack.c: pass "cruft_expiration" to `write_cruft_pack`
      builtin/repack.c: write cruft packs to arbitrary locations
      builtin/repack.c: implement `--expire-to` for storing pruned objects
      shortlog: make trailer insertion a noop when appropriate
      shortlog: extract `--group` fragment for translation
      shortlog: support arbitrary commit format `--group`s
      shortlog: extract `shortlog_finish_setup()`
      shortlog: implement `--group=author` in terms of `--group=<format>`
      shortlog: implement `--group=committer` in terms of `--group=<format>`
      apply: reject patches larger than ~1 GiB
      Documentation/howto/maintain-git.txt: fix Meta/redo-jch.sh invocation
      The ninth batch
      Documentation: build redo-jch.sh from master..jch
      Documentation: build redo-seen.sh from jch..seen
      The tenth batch
      The eleventh batch
      The twelfth batch
      builtin/gc.c: fix use-after-free in maintenance_unregister()
      The thirteenth batch

Torsten Bögershausen (1):
      diff.c: use utf8_strwidth() to count display width

Victoria Dye (7):
      read-cache: avoid misaligned reads in index v4
      rebase --update-refs: avoid unintended ref deletion
      cache-tree: add perf test comparing update and prime
      unpack-trees: add 'skip_cache_tree_update' option
      reset: use 'skip_cache_tree_update' option
      read-tree: use 'skip_cache_tree_update' option
      rebase: use 'skip_cache_tree_update' option

Vincent Bernat (1):
      ls-files: fix --ignored and --killed flags in synopsis

Vlad-Stefan Harbuz (1):
      Documentation: fix typo

srz_zumix (1):
      fsmonitor--daemon: on macOS support symlink

Ævar Arnfjörð Bjarmason (115):
      test-lib: have SANITIZE=leak imply TEST_NO_MALLOC_CHECK
      CodingGuidelines: update for C99
      CodingGuidelines: mention dynamic C99 initializer elements
      CodingGuidelines: allow declaring variables in for loops
      CodingGuidelines: mention C99 features we can't use
      grep.c: remove "extended" in favor of "pattern_expression", fix segfault
      CodingGuidelines: recommend against unportable C99 struct syntax
      bundle-uri: create "key=value" line parsing
      bundle-uri: unit test "key=value" parsing
      run-command test helper: use "else if" pattern
      run-command API: have "run_processes_parallel{,_tr2}()" return void
      run-command tests: use "return", not "exit"
      run-command API: make "n" parameter a "size_t"
      run-command API: don't fall back on online_cpus()
      run-command.c: use designated init for pp_init(), add "const"
      run-command API: have run_process_parallel() take an "opts" struct
      run-command API: move *_tr2() users to "run_processes_parallel()"
      run-command.c: make "struct parallel_processes" const if possible
      run-command.c: don't copy *_fn to "struct parallel_processes"
      run-command.c: don't copy "ungroup" to "struct parallel_processes"
      run-command.c: don't copy "data" to "struct parallel_processes"
      run-command.c: use "opts->processes", not "pp->max_processes"
      run-command.c: pass "opts" further down, and use "opts->processes"
      run-command.c: remove "max_processes", add "const" to signal() handler
      tests: assert *.txt SYNOPSIS and -h output
      CodingGuidelines: update and clarify command-line conventions
      builtin/bundle.c: indent with tabs
      bundle: define subcommand -h in terms of command -h
      doc SYNOPSIS: don't use ' for subcommands
      doc SYNOPSIS: consistently use ' for commands
      built-ins: consistently add "\n" between "usage" and options
      doc txt & -h consistency: word-wrap
      doc txt & -h consistency: fix incorrect alternates syntax
      doc txt & -h consistency: add "-z" to cat-file "-h"
      doc txt & -h consistency: balance unbalanced "[" and "]"
      doc txt & -h consistency: correct padding around "[]()"
      stash doc SYNOPSIS & -h: correct padding around "[]()"
      doc txt & -h consistency: use "<options>", not "<options>..."
      doc SYNOPSIS & -h: use "-" to separate words in labels, not "_"
      doc txt & -h consistency: fix mismatching labels
      doc txt & -h consistency: add or fix optional "--" syntax
      doc txt & -h consistency: make output order consistent
      doc txt & -h consistency: add missing options and labels
      doc txt & -h consistency: make "rerere" consistent
      doc txt & -h consistency: make "read-tree" consistent
      doc txt & -h consistency: make "bundle" consistent
      doc txt & -h consistency: use "git foo" form, not "git-foo"
      doc txt & -h consistency: add missing options
      doc txt & -h consistency: make "stash" consistent
      doc txt & -h consistency: make "annotate" consistent
      doc txt & -h consistency: use "[<label>...]" for "zero or more"
      doc txt & -h consistency: make "diff-tree" consistent
      doc txt & -h consistency: make "commit" consistent
      reflog doc: list real subcommands up-front
      worktree: define subcommand -h in terms of command -h
      doc txt & -h consistency: make "worktree" consistent
      tests: start asserting that *.txt SYNOPSIS matches -h output
      tests: assert consistent whitespace in -h output
      fsmonitor OSX: compile with DC_SHA1=YesPlease
      merge: remove always-the-same "verbose" arguments
      hook tests: fix redirection logic error in 96e7225b310
      submodule tests: reset "trace.out" between "grep" invocations
      run-command tests: test stdout of run_command_parallel()
      Makefile + shared.mak: rename and indent $(QUIET_SPATCH_T)
      cocci rules: remove unused "F" metavariable from pending rule
      Makefile: add ability to TAB-complete cocci *.patch rules
      Makefile: have "coccicheck" re-run if flags change
      Makefile: split off SPATCH_BATCH_SIZE comment from "cocci" heading
      cocci: split off include-less "tests" from SPATCH_FLAGS
      cocci: split off "--all-includes" from SPATCH_FLAGS
      cocci: make "coccicheck" rule incremental
      cocci: optimistically use COMPUTE_HEADER_DEPENDENCIES
      Makefile: copy contrib/coccinelle/*.cocci to build/
      cocci rules: remove <id>'s from rules that don't need them
      cocci: run against a generated ALL.cocci
      spatchcache: add a ccache-alike for "spatch"
      Makefile: always (re)set DC_SHA1 on fallback
      INSTALL: remove discussion of SHA-1 backends
      Makefile: correct DC_SHA1 documentation
      Makefile: create and use sections for "define" flag listing
      Makefile: rephrase the discussion of *_SHA1 knobs
      Makefile: document default SHA-256 backend
      Makefile: document SHA-1 and SHA-256 default and selection order
      Makefile & test-tool: replace "DC_SHA1" variable with a "define"
      Makefile: document default SHA-1 backend on OSX
      Makefile: discuss SHAttered in *_SHA{1,256} discussion
      submodule--helper: move "config" to a test-tool
      submodule tests: add tests for top-level flag output
      submodule--helper: fix a memory leak in "status"
      submodule tests: test for a "foreach" blind-spot
      submodule.c: refactor recursive block out of absorb function
      submodule API & "absorbgitdirs": remove "----recursive" option
      submodule--helper: remove --prefix from "absorbgitdirs"
      submodule--helper: drop "update --prefix <pfx>" for "-C <pfx> update"
      submodule--helper: use OPT_SUBCOMMAND() API
      revisions API: extend the nascent REV_INFO_INIT macro
      t7610: fix flaky timeout issue, don't clone from example.com
      Makefile: don't create a ".build/.build/" for cocci, fix output
      maintenance --unregister: fix uninit'd data use & -Wdeclaration-after-statement
      t7610: use "file:///dev/null", not "/dev/null", fixes MinGW
      cache.h: remove unused "the_index" compat macros
      builtin/{grep,log}.: don't define "USE_THE_INDEX_COMPATIBILITY_MACROS"
      cocci & cache.h: remove rarely used "the_index" compat macros
      read-cache API & users: make discard_index() return void
      cocci: add a index-compatibility.pending.cocci
      cocci & cache.h: apply a selection of "pending" index-compatibility
      cocci & cache.h: apply variable section of "pending" index-compatibility
      cocci: apply "pending" index-compatibility to "t/helper/*.c"
      {builtin/*,repository}.c: add & use "USE_THE_INDEX_VARIABLE"
      cache.h & test-tool.h: add & use "USE_THE_INDEX_VARIABLE"
      cocci: apply "pending" index-compatibility to some "builtin/*.c"
      parse_object(): simplify blob conditional
      trace2 tests: guard pthread test with "PTHREAD"
      Makefiles: change search through $(MAKEFLAGS) for GNU make 4.4
      cocci: avoid "should ... be a metavariable" warnings

Đoàn Trần Công Danh (8):
      CodingGuidelines: allow grep -E
      t: remove \{m,n\} from BRE grep usage
      t: convert egrep usage to "grep -E"
      t: convert fgrep usage to "grep -F"
      Makefile: clarify runtime relative gitexecdir
      bisect--helper: remove unused options
      bisect--helper: move all subcommands into their own functions
      bisect--helper: parse subcommand with OPT_SUBCOMMAND


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.39.0-rc1
@ 2022-11-30  6:12  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2022-11-30  6:12 UTC (permalink / raw)
  To: git; +Cc: git-packagers

A release candidate Git v2.39.0-rc1 is now available for testing at
the usual places.  It is comprised of 460 non-merge commits since
v2.38.0, contributed by 74 people, 30 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.39.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.38.0 are as follows.
Welcome to the Git development community!

  Alexander Kanavin, Alexander Meshcheryakov, Andreas Hasenack,
  Anh Le, Arthur Chan, Daniel Sonbolian, Debra Obondo, Diomidis
  Spinellis, Erik Cervin Edin, Hank Leininger, herr.kaste, John
  A. Leuenhagen, Julia Ramer, Kevin Backhouse, Kousik Sanagavarapu,
  Lukáš Doktor, Martin Englund, M Hickford, Michael V. Scovetta,
  Noah Betzen, Nsengiyumva Wilberforce, orygaw, Ronan Pigott,
  Rubén Justo, Sotir Danailov, srz_zumix, Stefano Rivera, Tim
  Jaacks, Vincent Bernat, and Vlad-Stefan Harbuz.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  정재우, Ævar Arnfjörð Bjarmason, Alejandro R. Sedeño,
  Alex Henrie, Derrick Stolee, Đoàn Trần Công Danh, Elijah
  Newren, Emily Shaffer, Eric DeCosta, Eric Sunshine, Eric Wong,
  Glen Choo, Han-Wen Nienhuys, Jan Pokorný, Jean-Noël Avila,
  Jeff Hostetler, Jeff King, Jerry Zhang, Jiang Xin, Johannes
  Altmanninger, Johannes Schindelin, John Cai, Jonathan Tan,
  Julien Moutinho, Junio C Hamano, Kyle Meyer, Martin Ågren,
  Martin von Zweigbergk, Matthew John Cheetham, Michael J Gruber,
  Michael McClimon, Patrick Steinhardt, Paul Smith, Philip Oakley,
  Philippe Blain, Phillip Wood, Randall S. Becker, René Scharfe,
  Sergey Organov, Shaoxuan Yuan, SZEDER Gábor, Taylor Blau,
  Torsten Bögershausen, and Victoria Dye.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.39 Release Notes (draft)
===============================

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

 * "git grep" learned to expand the sparse-index more lazily and on
   demand in a sparse checkout.

 * By default, use of fsmonitor on a repository on networked
   filesystem is disabled. Add knobs to make it workable on macOS.

 * After checking out a "branch" that is a symbolic-ref that points at
   another branch, "git symbolic-ref HEAD" reports the underlying
   branch, not the symbolic-ref the user gave checkout as argument.
   The command learned the "--no-recurse" option to stop after
   dereferencing a symbolic-ref only once.

 * "git branch --edit-description @{-1}" is now a way to edit branch
   description of the branch you were on before switching to the
   current branch.

 * "git merge-tree --stdin" is a new way to request a series of merges
   and report the merge results.

 * "git shortlog" learned to group by the "format" string.

 * A new "--include-whitespace" option is added to "git patch-id", and
   existing bugs in the internal patch-id logic that did not match
   what "git patch-id" produces have been corrected.

 * Enable gc.cruftpacks by default for those who opt into
   feature.experimental setting.

 * "git repack" learns to send cruft objects out of the way into
   packfiles outside the repository.

 * 'scalar reconfigure -a' is taught to automatically remove
   scalar.repo entires which no longer exist.

 * Redact headers from cURL's h2h3 module in GIT_CURL_VERBOSE and
   others.

 * 'git maintenance register' is taught to write configuration to an
   arbitrary path, and 'git for-each-repo' is taught to expand tilde
   characters in paths.

 * When creating new notes, the template used to get a stray empty
   newline, which has been removed.

 * "git receive-pack" used to use all the local refs as the boundary for
   checking connectivity of the data "git push" sent, but now it uses
   only the refs that it advertised to the pusher. In a repository with
   the .hideRefs configuration, this reduces the resources needed to
   perform the check.

 * With '--recurse-submodules=on-demand', all submodules are
   recursively pushed.


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

 * With a bit of header twiddling, use the native regexp library on
   macOS instead of the compat/ one.

 * Prepare for GNU [ef]grep that throw warning of their uses.

 * Sources related to fuzz testing have been moved down to their own
   directory.

 * Most credential helpers ignored unknown entries in a credential
   description, but a few died upon seeing them.  The latter were
   taught to ignore them, too

 * "scalar unregister" in a repository that is already been
   unregistered reported an error.

 * Remove error detection from a function that fetches from promisor
   remotes, and make it die when such a fetch fails to bring all the
   requested objects, to give an early failure to various operations.

 * Update CodingGuidelines to clarify what features to use and avoid
   in C99.

 * Avoid false-positive from LSan whose assumption may be broken with
   higher optimization levels.

 * Enable address and undefined sanitizer tasks at GitHub Actions CI.

 * More UNUSED annotation to help using -Wunused option with the
   compiler.
   (merge 4b992f0a24 jk/unused-anno-more later to maint).

 * Rewrite a deep recursion in the skipping negotiator to use a loop
   with on-heap prio queue to avoid stack wastage.

 * Add documentation for message IDs in fsck error messages.

 * Define the logical elements of a "bundle list", data structure to
   store them in-core, format to transfer them, and code to parse
   them.

 * The role the security mailing list plays in an embargoed release
   has been documented.

 * Two new facilities, "timer" and "counter", are introduced to the
   trace2 API.

 * Code simplification by using strvec_pushf() instead of building an
   argument in a separate strbuf.

 * Make sure generated dependency file is stably sorted to help
   developers debugging their build issues.

 * The glossary entries for "commit-graph file" and "reachability
   bitmap" have been added.

 * Various tests exercising the transfer.credentialsInUrl
   configuration are taught to avoid making requests which require
   resolving localhost to reduce CI-flakiness.

 * A redundant diagnostic message is dropped from test_path_is_missing().

 * Simplify the run-command API.

 * Update the actions/github-script dependency in CI to avoid a
   deprecation warning.

 * Progress on being able to initialize a rev_info struct with a
   macro.

 * Add trace2 counters to the region to clear skip worktree bits in a
   sparse checkout.

 * Modernize test script to avoid "test -f" and friends.

 * Avoid calling 'cache_tree_update()' when doing so would be
   redundant.

 * Update the credential-cache documentation to provide a more
   realistic example.

 * Makefile comments updates and reordering to clarify knobs used to
   choose SHA implementations.

 * A design document for sparse-checkout's future directions has been
   added.

 * Teach chainlint.pl to annotate the original test definition instead
   of the token stream.

 * "make coccicheck" is time consuming. It has been made to run more
   incrementally.

 * `parse_object()` has been hardened to check for the existence of a
   suspected blob object.

 * Adjust the documentation build procedure to GNUmake version 4.4,
   which made some changes to how pattern rule with multiple targets
   are handled.


Fixes since v2.38
-----------------

 * The codepath that reads from the index v4 had unaligned memory
   accesses, which has been corrected.

 * Fix messages incorrectly marked for translation.

 * "git fsck" failed to release contents of tree objects already used
   from the memory, which has been fixed.

 * "git clone" did not like to see the "--bare" and the "--origin"
   options used together without a good reason.

 * "git remote rename" failed to rename a remote without fetch
   refspec, which has been corrected.

 * Documentation on various Boolean GIT_* environment variables have
   been clarified.

 * "git rebase -i" can mistakenly attempt to apply a fixup to a commit
   itself, which has been corrected.

 * "git multi-pack-index repack/expire" used to repack unreachable
   cruft into a new pack, which have been corrected.

 * In read-only repositories, "git merge-tree" tried to come up with a
   merge result tree object, which it failed (which is not wrong) and
   led to a segfault (which is bad), which has been corrected.

 * Force C locale while running tests around httpd to make sure we can
   find expected error messages in the log.

 * Fix a logic in "mailinfo -b" that miscomputed the length of a
   substring, which lead to an out-of-bounds access.

 * The codepath to sign learned to report errors when it fails to read
   from "ssh-keygen".

 * Code clean-up that results in plugging a leak.

 * "GIT_EDITOR=: git branch --edit-description" resulted in failure,
   which has been corrected.

 * The code to clean temporary object directories (used for
   quarantine) tried to remove them inside its signal handler, which
   was a no-no.

 * Update comment in the Makefile about the RUNTIME_PREFIX config knob.

 * Clarify that "the sentence after <area>: prefix does not begin with
   a capital letter" rule applies only to the commit title.

 * "git branch --edit-description" on an unborh branch misleadingly
   said that no such branch exists, which has been corrected.

 * Work around older clang that warns against C99 zero initialization
   syntax for struct.

 * Giving "--invert-grep" and "--all-match" without "--grep" to the
   "git log" command resulted in an attempt to access grep pattern
   expression structure that has not been allocated, which has been
   corrected.
   (merge db84376f98 ab/grep-simplify-extended-expression later to maint).

 * "git diff rev^!" did not show combined diff to go to the rev from
   its parents.
   (merge a79c6b6081 rs/diff-caret-bang-with-parents later to maint).

 * Allow configuration files in "protected" scopes to include other
   configuration files.
   (merge ecec57b3c9 gc/bare-repo-discovery later to maint).

 * Give a bit more diversity to macOS CI by using sha1dc in one of the
   jobs (the other one tests Apple Common Crypto).
   (merge 1ad5c3df35 jc/ci-osx-with-sha1dc later to maint).

 * A bugfix with tracing support in midx codepath
   (merge e9c3839944 tb/midx-bitmap-selection-fix later to maint).

 * When geometric repacking feature is in use together with the
   --pack-kept-objects option, we lost packs marked with .keep files.
   (merge 197443e80a tb/save-keep-pack-during-geometric-repack later to maint).

 * Move a global variable added as a hack during regression fixes to
   its proper place in the API.
   (merge 0b0ab95f17 ab/run-hook-api-cleanup later to maint).

 * Update to build procedure with VS using CMake/CTest.
   (merge c858750b41 js/cmake-updates later to maint).

 * The short-help text shown by "git cmd -h" and the synopsis text
   shown at the beginning of "git help cmd" have been made more
   consistent.

 * When creating a multi-pack bitmap, remove per-pack bitmap files
   unconditionally as they will never be consulted.
   (merge 55d902cd61 tb/remove-unused-pack-bitmap later to maint).

 * Fix a longstanding syntax error in Git.pm error codepath.

 * "git diff --stat" etc. were invented back when everything was ASCII
   and strlen() was a way to measure the display width of a string;
   adjust them to compute the display width assuming UTF-8 pathnames.
   (merge ce8529b2bb tb/diffstat-with-utf8-strwidth later to maint).

 * "git branch --edit-description" can exit with status -1 which is
   not a good practice; it learned to use 1 as everybody else instead.

 * "git apply" limits its input to a bit less than 1 GiB.

 * Merging a branch with directory renames into a branch that changes
   the directory to a symlink was mishandled by the ort merge
   strategy, which has been corrected.

 * A bugfix to "git subtree" in its split and merge features.

 * Fix some bugs in the reflog messages when rebasing and changes the
   reflog messages of "rebase --apply" to match "rebase --merge" with
   the aim of making the reflog easier to parse.

 * "git rebase --keep-base" used to discard the commits that are
   already cherry-picked to the upstream, even when "keep-base" meant
   that the base, on top of which the history is being rebuilt, does
   not yet include these cherry-picked commits.  The --keep-base
   option now implies --reapply-cherry-picks and --no-fork-point
   options.

 * The way "git repack" creared temporary files when it received a
   signal was prone to deadlocking, which has been corrected.

 * Various tests exercising the transfer.credentialsInUrl
   configuration are taught to avoid making requests which require
   resolving localhost to reduce CI-flakiness.

 * The adjust_shared_perm() helper function learned to refrain from
   setting the "g+s" bit on directories when it is not necessary.

 * "git archive" mistakenly complained twice about a missing
   executable, which has been corrected.

 * Fix a bug where `git branch -d` did not work on an orphaned HEAD.

 * `git rebase --update-refs` would delete references when all
   `update-ref` commands in the sequencer were removed, which has been
   corrected.

 * Fix a regression in the bisect-helper which mistakenly treats
   arguments to the command given to 'git bisect run' as arguments to
   the helper.

 * Correct an error where `git rebase` would mistakenly use a branch or
   tag named "refs/rewritten/xyz" when missing a rebase label.

 * Assorted fixes of parsing end-user input as integers.
   (merge 14770cf0de pw/config-int-parse-fixes later to maint).

 * "git prune" may try to iterate over .git/objects/pack for trash
   files to remove in it, and loudly fail when the directory is
   missing, which is not necessary.  The command has been taught to
   ignore such a failure.
   (merge 6974765352 ew/prune-with-missing-objects-pack later to maint).

 * Add one more candidate directory that may house httpd modules while
   running tests.
   (merge 1c7dc23d41 es/locate-httpd-module-location-in-test later to maint).

 * A handful of leaks in the line-log machinery have been plugged.

 * The format of a line in /proc/cpuinfo that describes a CPU on s390x
   looked different from everybody else, and the code in chainlint.pl
   failed to parse it.
   (merge 1f51b77f4f ah/chainlint-cpuinfo-parse-fix later to maint).

 * Adjust the GitHub CI to newer ubuntu release.
   (merge 0d3507f3e7 jx/ci-ubuntu-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 413bc6d20a ds/cmd-main-reorder later to maint).
   (merge 8d2863e4ed nw/t1002-cleanup later to maint).
   (merge 7c2dc122f9 rs/list-objects-filter-leakfix later to maint).
   (merge 288fcb1c94 zk/push-use-bitmaps later to maint).
   (merge 42db324c0f km/merge-recursive-typofix later to maint).

----------------------------------------------------------------

Changes since v2.38.0 are as follows:

Alejandro R. Sedeño (1):
      git-compat-util.h: GCC deprecated message arg only in GCC 4.5+

Alex Henrie (2):
      fsmonitor--daemon: don't translate literal commands
      push: improve grammar of branch.autoSetupMerge advice

Andreas Hasenack (1):
      chainlint.pl: fix /proc/cpuinfo regexp

Anh Le (2):
      index: add trace2 region for clear skip worktree
      index: raise a bug if the index is materialised more than once

Arthur Chan (1):
      fuzz: reorganise the path for existing oss-fuzz fuzzers

Daniel Sonbolian (1):
      git.c: improve code readability in cmd_main()

Debra Obondo (1):
      t7001-mv.sh: modernizing test script using functions

Derrick Stolee (15):
      maintenance: add 'unregister --force'
      scalar: make 'unregister' idempotent
      gc: replace config subprocesses with API calls
      string-list: document iterator behavior on NULL input
      bundle-uri: fix technical doc issues
      bundle-uri: use plain string in find_temp_filename()
      bundle-uri: create bundle_list struct and helpers
      bundle-uri: create base key-value pair parsing
      bundle-uri: parse bundle list in config format
      bundle-uri: limit recursion depth for bundle lists
      bundle: properly clear all revision flags
      bundle-uri: fetch a list of bundles
      bundle: add flags to verify_bundle()
      bundle-uri: quiet failed unbundlings
      bundle-uri: suppress stderr from remote-https

Diomidis Spinellis (1):
      grep: fix multibyte regex handling under macOS

Elijah Newren (4):
      merge-ort: fix bug with dir rename vs change dir to symlink
      merge-tree: update documentation for differences in -z output
      merge-tree: support multiple batched merges with --stdin
      sparse-checkout.txt: new document with sparse-checkout directions

Emily Shaffer (2):
      gc: add tests for --cruft and friends
      config: let feature.experimental imply gc.cruftPacks=true

Eric DeCosta (6):
      fsmonitor: refactor filesystem checks to common interface
      fsmonitor: relocate socket file if .git directory is remote
      fsmonitor: avoid socket location check if using hook
      fsmonitor: deal with synthetic firmlinks on macOS
      fsmonitor: check for compatability before communicating with fsmonitor
      fsmonitor: add documentation for allowRemote and socketDir options

Eric Sunshine (9):
      check-non-portable-shell: detect obsolescent egrep/fgrep
      chainlint: add explanatory comments
      chainlint: tighten accuracy when consuming input stream
      chainlint: latch start/end position of each token
      chainlint: annotate original test definition rather than token stream
      chainlint: sidestep impoverished macOS "terminfo"
      chainlint: latch line numbers at which each token starts and ends
      chainlint: prefix annotated test definition with line numbers
      lib-httpd: extend module location auto-detection

Eric Wong (2):
      delta-islands: free island-related data after use
      prune: quiet ENOENT on missing directories

Glen Choo (3):
      config: respect includes in protected config
      http: redact curl h2h3 headers in info
      object-file: use real paths when adding alternates

Han-Wen Nienhuys (1):
      refs: unify parse_worktree_ref() and ref_type()

Jean-Noël Avila (1):
      i18n: fix command template placeholder format

Jeff Hostetler (9):
      config.mak.dev: disable suggest braces error on old clang versions
      trace2: use size_t alloc,nr_open_regions in tr2tls_thread_ctx
      tr2tls: clarify TLS terminology
      api-trace2.txt: elminate section describing the public trace2 API
      trace2: rename the thread_name argument to trace2_thread_start
      trace2: improve thread-name documentation in the thread-context
      trace2: convert ctx.thread_name from strbuf to pointer
      trace2: add stopwatch timers
      trace2: add global counter mechanism

Jeff King (43):
      fsck: free tree buffers after walking unreachable objects
      fsck: turn off save_commit_buffer
      parse_object_buffer(): respect save_commit_buffer
      clone: allow "--bare" with "-o"
      remote: handle rename of remote without fetch refspec
      shell: add basic tests
      shell: limit size of interactive commands
      sequencer: detect author name errors in read_author_script()
      test-submodule: inline resolve_relative_url() function
      multi-pack-index: avoid writing to global in option callback
      commit: avoid writing to global in option callback
      attr: drop DEBUG_ATTR code
      dir: use fspathncmp() in pl_hashmap_cmp()
      fsmonitor: fix leak of warning message
      diffstat_consume(): assert non-zero length
      submodule--helper: drop unused argc from module_list_compute()
      update-index: drop unused argc from do_reupdate()
      mark unused parameters in trivial compat functions
      object-file: mark unused parameters in hash_unknown functions
      string-list: mark unused callback parameters
      date: mark unused parameters in handler functions
      apply: mark unused parameters in handlers
      apply: mark unused parameters in noop error/warning routine
      convert: mark unused parameter in null stream filter
      diffcore-pickaxe: mark unused parameters in pickaxe functions
      ll-merge: mark unused parameters in callbacks
      Makefile: force -O0 when compiling with SANITIZE=leak
      repack: convert "names" util bitfield to array
      repack: populate extension bits incrementally
      repack: expand error message for missing pack files
      repack: use tempfiles for signal cleanup
      repack: drop remove_temporary_files()
      Git.pm: trust rev-parse to find bare repositories
      t7700: annotate cruft-pack failure with ok=sigpipe
      shortlog: accept `--date`-related options
      Makefile: force -O0 when compiling with SANITIZE=leak
      t5516: move plaintext-password tests from t5601 and t5516
      ref-filter: fix parsing of signatures without blank lines
      ref-filter: fix parsing of signatures with CRLF and no body
      branch: gracefully handle '-d' on orphan HEAD
      t: run t5551 tests with both HTTP and HTTP/2
      parse_object(): drop extra "has" check before checking object type
      parse_object(): check on-disk type of suspected blob

Jerry Zhang (6):
      patch-id: fix stable patch id for binary / header-only
      patch-id: use stable patch-id for rebases
      builtin: patch-id: fix patch-id with binary diffs
      patch-id: fix patch-id for mode changes
      builtin: patch-id: add --verbatim as a command mode
      builtin: patch-id: remove unused diff-tree prefix

Jiang Xin (5):
      t5516: fail to run in verbose mode
      github-actions: run gcc-8 on ubuntu-20.04 image
      ci: remove the pipe after "p4 -V" to catch errors
      ci: use the same version of p4 on both Linux and macOS
      ci: install python on ubuntu

Johannes Altmanninger (1):
      sequencer: avoid dropping fixup commit that targets self via commit-ish

Johannes Schindelin (11):
      merge-ort: fix segmentation fault in read-only repositories
      merge-ort: return early when failing to write a blob
      cmake: make it easier to diagnose regressions in CTest runs
      cmake: copy the merge tools for testing
      add -p: avoid ambiguous signed/unsigned comparison
      cmake: avoid editing t/test-lib.sh
      cmake: increase time-out for a long-running test
      t5516/t5601: be less strict about the number of credential warnings
      scalar reconfigure -a: remove stale `scalar.repo` entries
      ci: use a newer `github-script` version
      tests(scalar): tighten the stale `scalar.repo` test some

John Cai (3):
      tmp-objdir: skip clean up when handling a signal
      fsck: remove the unused BAD_TAG_OBJECT
      fsck: document msg-id

Jonathan Tan (4):
      promisor-remote: remove a return value
      promisor-remote: die upon failing fetch
      negotiator/skipping: avoid stack overflow
      Doc: document push.recurseSubmodules=only

Julia Ramer (1):
      embargoed releases: also describe the git-security list and the process

Junio C Hamano (29):
      environ: document GIT_SSL_NO_VERIFY
      environ: explain Boolean environment variables
      environ: GIT_FLUSH should be made a usual Boolean
      environ: simplify description of GIT_INDEX_FILE
      environ: GIT_INDEX_VERSION affects not just a new repository
      branch: do not fail a no-op --edit-desc
      SubmittingPatches: use usual capitalization in the log message body
      Start 2.39 cycle
      symbolic-ref: teach "--[no-]recurse" option
      The (real) first batch for 2.39
      The second batch
      The third batch
      The fourth batch
      ci: add address and undefined sanitizer tasks
      ci: use DC_SHA1=YesPlease on osx-clang job for CI
      The fifth batch
      diff: leave NEEDWORK notes in show_stats() function
      fsck: remove the unused MISSING_TREE_OBJECT
      Documentation: add lint-fsck-msgids
      Downmerge a handful of topics for 2.38.2
      The sixth batch
      Downmerge a bit more for 2.38.2
      The seventh batch
      The eighth batch
      adjust_shared_perm(): leave g+s alone when the group does not matter
      Git 2.39-rc0
      Another batch before -rc1
      A bit more before -rc1
      Git 2.39-rc1

Kevin Backhouse (1):
      alias.c: reject too-long cmdline strings in split_cmdline()

Kousik Sanagavarapu (1):
      repository-version.txt: partialClone casing change

Kyle Meyer (1):
      merge-recursive: fix variable typo in error message

M Hickford (4):
      Documentation/gitcredentials.txt: mention password alternatives
      Documentation: increase example cache timeout to 1 hour
      docs: clarify that credential discards unrecognised attributes
      Docs: describe how a credential-generating helper works

Martin Ågren (1):
      test-lib-functions: drop redundant diagnostic print

Matthew John Cheetham (3):
      wincred: ignore unknown lines (do not die)
      netrc: ignore unknown lines (do not die)
      osxkeychain: clarify that we ignore unknown lines

Michael J Gruber (1):
      notes: avoid empty line in template

Michael McClimon (1):
      Git.pm: add semicolon after catch statement

Noah Betzen (1):
      mergetool.txt: typofix 'overwriten' -> 'overwritten'

Nsengiyumva Wilberforce (1):
      t1002: modernize outdated conditional

Patrick Steinhardt (7):
      refs: fix memory leak when parsing hideRefs config
      refs: get rid of global list of hidden refs
      revision: move together exclusion-related functions
      revision: introduce struct to handle exclusions
      revision: add new parameter to exclude hidden refs
      rev-parse: add `--exclude-hidden=` option
      receive-pack: only use visible refs for connectivity check

Paul Smith (1):
      Makefile: avoid multiple patterns when recipes generate one file

Philip Oakley (4):
      doc: use "commit-graph" hyphenation consistently
      doc: use 'object database' not ODB or abbreviation
      glossary: add "commit graph" description
      glossary: add reachability bitmap description

Philippe Blain (9):
      test-lib-functions: mark 'test_commit' variables as 'local'
      subtree: use 'git rev-parse --verify [--quiet]' for better error messages
      subtree: add 'die_incompatible_opt' function to reduce duplication
      subtree: prefix die messages with 'fatal'
      subtree: define a variable before its first use in 'find_latest_squash'
      subtree: use named variables instead of "$@" in cmd_pull
      subtree: process 'git-subtree-split' trailer in separate function
      subtree: fix squash merging after annotated tag was squashed merged
      subtree: fix split after annotated tag was squashed merged

Phillip Wood (26):
      mailinfo -b: fix an out of bounds access
      ssh signing: return an error when signature cannot be read
      t3435: remove redundant test case
      t3416: tighten two tests
      t3416: set $EDITOR in subshell
      rebase: be stricter when reading state files containing oids
      rebase: store orig_head as a commit
      rebase: rename merge_base to branch_base
      rebase: factor out branch_base calculation
      rebase --keep-base: imply --reapply-cherry-picks
      rebase --keep-base: imply --no-fork-point
      rebase --apply: remove duplicated code
      t3406: rework rebase reflog tests
      rebase --merge: fix reflog when continuing
      rebase --merge: fix reflog message after skipping
      rebase --apply: respect GIT_REFLOG_ACTION
      rebase --apply: make reflog messages match rebase --merge
      rebase --abort: improve reflog message
      rebase: cleanup action handling
      sequencer: stop exporting GIT_REFLOG_ACTION
      rebase: stop exporting GIT_REFLOG_ACTION
      git_parse_unsigned: reject negative values
      config: require at least one digit when parsing numbers
      git_parse_signed(): avoid integer overflow
      sequencer: unify label lookup
      sequencer: tighten label lookups

René Scharfe (21):
      revision: use strtol_i() for exclude_parent
      revisions.txt: unspecify order of resolved parts of ^!
      diff: support ^! for merges
      gc: simplify maintenance_task_pack_refs()
      t/lib-httpd: pass LANG and LC_ALL to Apache
      bisect--helper: plug strvec leak
      archive: deduplicate verbose printing
      submodule: use strvec_pushf() for --super-prefix
      run-command: fix return value comment
      am: simplify building "show" argument list
      bisect: simplify building "checkout" argument list
      bisect--helper: factor out do_bisect_run()
      sequencer: simplify building argument list in do_exec()
      use child_process member "args" instead of string array variable
      use child_process members "args" and "env" directly
      replace and remove run_command_v_opt_cd_env()
      replace and remove run_command_v_opt_tr2()
      replace and remove run_command_v_opt_cd_env_tr2()
      replace and remove run_command_v_opt()
      archive-tar: report filter start error only once
      list-objects-filter: plug combine_filter_data leak

Ronan Pigott (2):
      for-each-repo: interpolate repo path arguments
      maintenance: add option to register in a specific config

Rubén Justo (5):
      ref-filter.c: fix a leak in get_head_description
      branch: description for non-existent branch errors
      branch: support for shortcuts like @{-1}, completed
      branch: error copying or renaming a detached HEAD
      branch: error code with --edit-description

SZEDER Gábor (4):
      Documentation/build-docdep.perl: generate sorted output
      line-log: free diff queue when processing non-merge commits
      line-log: free the diff queues' arrays when processing merge commits
      diff.c: use diff_free_queue()

Sergey Organov (3):
      diff-merges: cleanup func_by_opt()
      diff-merges: cleanup set_diff_merges()
      diff-merges: clarify log.diffMerges documentation

Shaoxuan Yuan (1):
      builtin/grep.c: integrate with sparse index

Sotir Danailov (1):
      docs: git-send-email: difference between ssl and tls smtp-encryption

Taylor Blau (64):
      Documentation/git-multi-pack-index.txt: fix typo
      Documentation/git-multi-pack-index.txt: clarify expire behavior
      midx.c: prevent `expire` from removing the cruft pack
      midx.c: avoid cruft packs with `repack --batch-size=0`
      midx.c: replace `xcalloc()` with `CALLOC_ARRAY()`
      midx.c: remove unnecessary loop condition
      midx.c: avoid cruft packs with non-zero `repack --batch-size`
      builtin/clone.c: disallow `--local` clones with symlinks
      t/lib-submodule-update.sh: allow local submodules
      t/t1NNN: allow local submodules
      t/2NNNN: allow local submodules
      t/t3NNN: allow local submodules
      t/t4NNN: allow local submodules
      t/t5NNN: allow local submodules
      t/t6NNN: allow local submodules
      t/t7NNN: allow local submodules
      t/t9NNN: allow local submodules
      transport: make `protocol.file.allow` be "user" by default
      t1092: prepare for changing protocol.file.allow
      t2080: prepare for changing protocol.file.allow
      t1092: prepare for changing protocol.file.allow
      t2080: prepare for changing protocol.file.allow
      t3207: prepare for changing protocol.file.allow
      t5516: prepare for changing protocol.file.allow
      t5537: prepare for changing protocol.file.allow
      t7814: prepare for changing protocol.file.allow
      t3206: prepare for changing protocol.file.allow
      t5537: prepare for changing protocol.file.allow
      Git 2.30.6
      Git 2.31.5
      Git 2.32.4
      Git 2.33.5
      Git 2.34.5
      Git 2.35.5
      Git 2.36.3
      t7527: prepare for changing protocol.file.allow
      Git 2.37.4
      Git 2.38.1
      midx.c: fix whitespace typo
      midx.c: consider annotated tags during bitmap selection
      midx.c: instrument MIDX and bitmap generation with trace2 regions
      pack-bitmap-write.c: instrument number of reused bitmaps
      builtin/repack.c: remove redundant pack-based bitmaps
      repack: don't remove .keep packs with `--pack-kept-objects`
      builtin/repack.c: pass "out" to `prepare_pack_objects`
      builtin/repack.c: pass "cruft_expiration" to `write_cruft_pack`
      builtin/repack.c: write cruft packs to arbitrary locations
      builtin/repack.c: implement `--expire-to` for storing pruned objects
      shortlog: make trailer insertion a noop when appropriate
      shortlog: extract `--group` fragment for translation
      shortlog: support arbitrary commit format `--group`s
      shortlog: extract `shortlog_finish_setup()`
      shortlog: implement `--group=author` in terms of `--group=<format>`
      shortlog: implement `--group=committer` in terms of `--group=<format>`
      apply: reject patches larger than ~1 GiB
      Documentation/howto/maintain-git.txt: fix Meta/redo-jch.sh invocation
      The ninth batch
      Documentation: build redo-jch.sh from master..jch
      Documentation: build redo-seen.sh from jch..seen
      The tenth batch
      The eleventh batch
      The twelfth batch
      builtin/gc.c: fix use-after-free in maintenance_unregister()
      The thirteenth batch

Torsten Bögershausen (1):
      diff.c: use utf8_strwidth() to count display width

Victoria Dye (7):
      read-cache: avoid misaligned reads in index v4
      rebase --update-refs: avoid unintended ref deletion
      cache-tree: add perf test comparing update and prime
      unpack-trees: add 'skip_cache_tree_update' option
      reset: use 'skip_cache_tree_update' option
      read-tree: use 'skip_cache_tree_update' option
      rebase: use 'skip_cache_tree_update' option

Vincent Bernat (1):
      ls-files: fix --ignored and --killed flags in synopsis

Vlad-Stefan Harbuz (1):
      Documentation: fix typo

srz_zumix (1):
      fsmonitor--daemon: on macOS support symlink

Ævar Arnfjörð Bjarmason (113):
      test-lib: have SANITIZE=leak imply TEST_NO_MALLOC_CHECK
      CodingGuidelines: update for C99
      CodingGuidelines: mention dynamic C99 initializer elements
      CodingGuidelines: allow declaring variables in for loops
      CodingGuidelines: mention C99 features we can't use
      grep.c: remove "extended" in favor of "pattern_expression", fix segfault
      CodingGuidelines: recommend against unportable C99 struct syntax
      bundle-uri: create "key=value" line parsing
      bundle-uri: unit test "key=value" parsing
      run-command test helper: use "else if" pattern
      run-command API: have "run_processes_parallel{,_tr2}()" return void
      run-command tests: use "return", not "exit"
      run-command API: make "n" parameter a "size_t"
      run-command API: don't fall back on online_cpus()
      run-command.c: use designated init for pp_init(), add "const"
      run-command API: have run_process_parallel() take an "opts" struct
      run-command API: move *_tr2() users to "run_processes_parallel()"
      run-command.c: make "struct parallel_processes" const if possible
      run-command.c: don't copy *_fn to "struct parallel_processes"
      run-command.c: don't copy "ungroup" to "struct parallel_processes"
      run-command.c: don't copy "data" to "struct parallel_processes"
      run-command.c: use "opts->processes", not "pp->max_processes"
      run-command.c: pass "opts" further down, and use "opts->processes"
      run-command.c: remove "max_processes", add "const" to signal() handler
      tests: assert *.txt SYNOPSIS and -h output
      CodingGuidelines: update and clarify command-line conventions
      builtin/bundle.c: indent with tabs
      bundle: define subcommand -h in terms of command -h
      doc SYNOPSIS: don't use ' for subcommands
      doc SYNOPSIS: consistently use ' for commands
      built-ins: consistently add "\n" between "usage" and options
      doc txt & -h consistency: word-wrap
      doc txt & -h consistency: fix incorrect alternates syntax
      doc txt & -h consistency: add "-z" to cat-file "-h"
      doc txt & -h consistency: balance unbalanced "[" and "]"
      doc txt & -h consistency: correct padding around "[]()"
      stash doc SYNOPSIS & -h: correct padding around "[]()"
      doc txt & -h consistency: use "<options>", not "<options>..."
      doc SYNOPSIS & -h: use "-" to separate words in labels, not "_"
      doc txt & -h consistency: fix mismatching labels
      doc txt & -h consistency: add or fix optional "--" syntax
      doc txt & -h consistency: make output order consistent
      doc txt & -h consistency: add missing options and labels
      doc txt & -h consistency: make "rerere" consistent
      doc txt & -h consistency: make "read-tree" consistent
      doc txt & -h consistency: make "bundle" consistent
      doc txt & -h consistency: use "git foo" form, not "git-foo"
      doc txt & -h consistency: add missing options
      doc txt & -h consistency: make "stash" consistent
      doc txt & -h consistency: make "annotate" consistent
      doc txt & -h consistency: use "[<label>...]" for "zero or more"
      doc txt & -h consistency: make "diff-tree" consistent
      doc txt & -h consistency: make "commit" consistent
      reflog doc: list real subcommands up-front
      worktree: define subcommand -h in terms of command -h
      doc txt & -h consistency: make "worktree" consistent
      tests: start asserting that *.txt SYNOPSIS matches -h output
      tests: assert consistent whitespace in -h output
      fsmonitor OSX: compile with DC_SHA1=YesPlease
      merge: remove always-the-same "verbose" arguments
      hook tests: fix redirection logic error in 96e7225b310
      submodule tests: reset "trace.out" between "grep" invocations
      run-command tests: test stdout of run_command_parallel()
      Makefile + shared.mak: rename and indent $(QUIET_SPATCH_T)
      cocci rules: remove unused "F" metavariable from pending rule
      Makefile: add ability to TAB-complete cocci *.patch rules
      Makefile: have "coccicheck" re-run if flags change
      Makefile: split off SPATCH_BATCH_SIZE comment from "cocci" heading
      cocci: split off include-less "tests" from SPATCH_FLAGS
      cocci: split off "--all-includes" from SPATCH_FLAGS
      cocci: make "coccicheck" rule incremental
      cocci: optimistically use COMPUTE_HEADER_DEPENDENCIES
      Makefile: copy contrib/coccinelle/*.cocci to build/
      cocci rules: remove <id>'s from rules that don't need them
      cocci: run against a generated ALL.cocci
      spatchcache: add a ccache-alike for "spatch"
      Makefile: always (re)set DC_SHA1 on fallback
      INSTALL: remove discussion of SHA-1 backends
      Makefile: correct DC_SHA1 documentation
      Makefile: create and use sections for "define" flag listing
      Makefile: rephrase the discussion of *_SHA1 knobs
      Makefile: document default SHA-256 backend
      Makefile: document SHA-1 and SHA-256 default and selection order
      Makefile & test-tool: replace "DC_SHA1" variable with a "define"
      Makefile: document default SHA-1 backend on OSX
      Makefile: discuss SHAttered in *_SHA{1,256} discussion
      submodule--helper: move "config" to a test-tool
      submodule tests: add tests for top-level flag output
      submodule--helper: fix a memory leak in "status"
      submodule tests: test for a "foreach" blind-spot
      submodule.c: refactor recursive block out of absorb function
      submodule API & "absorbgitdirs": remove "----recursive" option
      submodule--helper: remove --prefix from "absorbgitdirs"
      submodule--helper: drop "update --prefix <pfx>" for "-C <pfx> update"
      submodule--helper: use OPT_SUBCOMMAND() API
      revisions API: extend the nascent REV_INFO_INIT macro
      t7610: fix flaky timeout issue, don't clone from example.com
      Makefile: don't create a ".build/.build/" for cocci, fix output
      maintenance --unregister: fix uninit'd data use & -Wdeclaration-after-statement
      t7610: use "file:///dev/null", not "/dev/null", fixes MinGW
      cache.h: remove unused "the_index" compat macros
      builtin/{grep,log}.: don't define "USE_THE_INDEX_COMPATIBILITY_MACROS"
      cocci & cache.h: remove rarely used "the_index" compat macros
      read-cache API & users: make discard_index() return void
      cocci: add a index-compatibility.pending.cocci
      cocci & cache.h: apply a selection of "pending" index-compatibility
      cocci & cache.h: apply variable section of "pending" index-compatibility
      cocci: apply "pending" index-compatibility to "t/helper/*.c"
      {builtin/*,repository}.c: add & use "USE_THE_INDEX_VARIABLE"
      cache.h & test-tool.h: add & use "USE_THE_INDEX_VARIABLE"
      cocci: apply "pending" index-compatibility to some "builtin/*.c"
      parse_object(): simplify blob conditional
      trace2 tests: guard pthread test with "PTHREAD"

Đoàn Trần Công Danh (8):
      CodingGuidelines: allow grep -E
      t: remove \{m,n\} from BRE grep usage
      t: convert egrep usage to "grep -E"
      t: convert fgrep usage to "grep -F"
      Makefile: clarify runtime relative gitexecdir
      bisect--helper: remove unused options
      bisect--helper: move all subcommands into their own functions
      bisect--helper: parse subcommand with OPT_SUBCOMMAND


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.39.0-rc0
@ 2022-11-23  7:25  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2022-11-23  7:25 UTC (permalink / raw)
  To: git; +Cc: git-packagers, lwn

An early preview release Git v2.39.0-rc0 is now available for
testing at the usual places.  It is comprised of 423 non-merge
commits since v2.38.0, contributed by 67 people, 28 of which are
new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.39.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.38.0 are as follows.
Welcome to the Git development community!

  Alexander Meshcheryakov, Anh Le, Arthur Chan, Daniel
  Sonbolian, Debra Obondo, Diomidis Spinellis, Erik Cervin
  Edin, Hank Leininger, herr.kaste, John A. Leuenhagen, Julia
  Ramer, Kevin Backhouse, Kousik Sanagavarapu, Lukáš Doktor,
  Martin Englund, M Hickford, Michael V. Scovetta, Noah Betzen,
  Nsengiyumva Wilberforce, orygaw, Ronan Pigott, Rubén Justo,
  Sotir Danailov, srz_zumix, Stefano Rivera, Tim Jaacks, Vincent
  Bernat, and Vlad-Stefan Harbuz.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  정재우, Ævar Arnfjörð Bjarmason, Alejandro R. Sedeño,
  Alex Henrie, Derrick Stolee, Đoàn Trần Công Danh, Elijah
  Newren, Emily Shaffer, Eric DeCosta, Eric Sunshine, Eric Wong,
  Glen Choo, Han-Wen Nienhuys, Jan Pokorný, Jeff Hostetler, Jeff
  King, Jerry Zhang, Johannes Altmanninger, Johannes Schindelin,
  John Cai, Jonathan Tan, Julien Moutinho, Junio C Hamano, Martin
  Ågren, Martin von Zweigbergk, Matthew John Cheetham, Michael
  J Gruber, Michael McClimon, Patrick Steinhardt, Philip Oakley,
  Philippe Blain, Phillip Wood, René Scharfe, Sergey Organov,
  Shaoxuan Yuan, SZEDER Gábor, Taylor Blau, Torsten Bögershausen,
  and Victoria Dye.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.39 Release Notes (draft)
===============================

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

 * "git grep" learned to expand the sparse-index more lazily and on
   demand in a sparse checkout.

 * By default, use of fsmonitor on a repository on networked
   filesystem is disabled. Add knobs to make it workable on macOS.

 * After checking out a "branch" that is a symbolic-ref that points at
   another branch, "git symbolic-ref HEAD" reports the underlying
   branch, not the symbolic-ref the user gave checkout as argument.
   The command learned the "--no-recurse" option to stop after
   dereferencing a symbolic-ref only once.

 * "git branch --edit-description @{-1}" is now a way to edit branch
   description of the branch you were on before switching to the
   current branch.

 * "git merge-tree --stdin" is a new way to request a series of merges
   and report the merge results.

 * "git shortlog" learned to group by the "format" string.

 * A new "--include-whitespace" option is added to "git patch-id", and
   existing bugs in the internal patch-id logic that did not match
   what "git patch-id" produces have been corrected.

 * Enable gc.cruftpacks by default for those who opt into
   feature.experimental setting.

 * "git repack" learns to send cruft objects out of the way into
   packfiles outside the repository.

 * 'scalar reconfigure -a' is taught to automatically remove
   scalar.repo entires which no longer exist.

 * Redact headers from cURL's h2h3 module in GIT_CURL_VERBOSE and
   others.

 * 'git maintenance register' is taught to write configuration to an
   arbitrary path, and 'git for-each-repo' is taught to expand tilde
   characters in paths.

 * When creating new notes, the template used to get a stray empty
   newline, which has been removed.

 * "git receive-pack" used to use all the local refs as the boundary for
   checking connectivity of the data "git push" sent, but now it uses
   only the refs that it advertised to the pusher. In a repository with
   the .hideRefs configuration, this reduces the resources needed to
   perform the check.

 * With '--recurse-submodules=on-demand', all submodules are
   recursively pushed.


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

 * With a bit of header twiddling, use the native regexp library on
   macOS instead of the compat/ one.

 * Prepare for GNU [ef]grep that throw warning of their uses.

 * Sources related to fuzz testing have been moved down to their own
   directory.

 * Most credential helpers ignored unknown entries in a credential
   description, but a few died upon seeing them.  The latter were
   taught to ignore them, too

 * "scalar unregister" in a repository that is already been
   unregistered reported an error.

 * Remove error detection from a function that fetches from promisor
   remotes, and make it die when such a fetch fails to bring all the
   requested objects, to give an early failure to various operations.

 * Update CodingGuidelines to clarify what features to use and avoid
   in C99.

 * Avoid false-positive from LSan whose assumption may be broken with
   higher optimization levels.

 * Enable address and undefined sanitizer tasks at GitHub Actions CI.

 * More UNUSED annotation to help using -Wunused option with the
   compiler.
   (merge 4b992f0a24 jk/unused-anno-more later to maint).

 * Rewrite a deep recursion in the skipping negotiator to use a loop
   with on-heap prio queue to avoid stack wastage.

 * Add documentation for message IDs in fsck error messages.

 * Define the logical elements of a "bundle list", data structure to
   store them in-core, format to transfer them, and code to parse
   them.

 * The role the security mailing list plays in an embargoed release
   has been documented.

 * Two new facilities, "timer" and "counter", are introduced to the
   trace2 API.

 * Code simplification by using strvec_pushf() instead of building an
   argument in a separate strbuf.

 * Make sure generated dependency file is stably sorted to help
   developers debugging their build issues.

 * The glossary entries for "commit-graph file" and "reachability
   bitmap" have been added.

 * Various tests exercising the transfer.credentialsInUrl
   configuration are taught to avoid making requests which require
   resolving localhost to reduce CI-flakiness.

 * A redundant diagnostic message is dropped from test_path_is_missing().

 * Simplify the run-command API.

 * Update the actions/github-script dependency in CI to avoid a
   deprecation warning.

 * Progress on being able to initialize a rev_info struct with a
   macro.

 * Add trace2 counters to the region to clear skip worktree bits in a
   sparse checkout.

 * Modernize test script to avoid "test -f" and friends.

 * Avoid calling 'cache_tree_update()' when doing so would be
   redundant.

 * Update the credential-cache documentation to provide a more
   realistic example.

 * Makefile comments updates and reordering to clarify knobs used to
   choose SHA implementations.

 * A design document for sparse-checkout's future directions has been
   added.

 * Teach chainlint.pl to annotate the original test definition instead
   of the token stream.

 * "make coccicheck" is time consuming. It has been made to run more
   incrementally.


Fixes since v2.38
-----------------

 * The codepath that reads from the index v4 had unaligned memory
   accesses, which has been corrected.

 * Fix messages incorrectly marked for translation.

 * "git fsck" failed to release contents of tree objects already used
   from the memory, which has been fixed.

 * "git clone" did not like to see the "--bare" and the "--origin"
   options used together without a good reason.

 * "git remote rename" failed to rename a remote without fetch
   refspec, which has been corrected.

 * Documentation on various Boolean GIT_* environment variables have
   been clarified.

 * "git rebase -i" can mistakenly attempt to apply a fixup to a commit
   itself, which has been corrected.

 * "git multi-pack-index repack/expire" used to repack unreachable
   cruft into a new pack, which have been corrected.

 * In read-only repositories, "git merge-tree" tried to come up with a
   merge result tree object, which it failed (which is not wrong) and
   led to a segfault (which is bad), which has been corrected.

 * Force C locale while running tests around httpd to make sure we can
   find expected error messages in the log.

 * Fix a logic in "mailinfo -b" that miscomputed the length of a
   substring, which lead to an out-of-bounds access.

 * The codepath to sign learned to report errors when it fails to read
   from "ssh-keygen".

 * Code clean-up that results in plugging a leak.

 * "GIT_EDITOR=: git branch --edit-description" resulted in failure,
   which has been corrected.

 * The code to clean temporary object directories (used for
   quarantine) tried to remove them inside its signal handler, which
   was a no-no.

 * Update comment in the Makefile about the RUNTIME_PREFIX config knob.

 * Clarify that "the sentence after <area>: prefix does not begin with
   a capital letter" rule applies only to the commit title.

 * "git branch --edit-description" on an unborh branch misleadingly
   said that no such branch exists, which has been corrected.

 * Work around older clang that warns against C99 zero initialization
   syntax for struct.

 * Giving "--invert-grep" and "--all-match" without "--grep" to the
   "git log" command resulted in an attempt to access grep pattern
   expression structure that has not been allocated, which has been
   corrected.
   (merge db84376f98 ab/grep-simplify-extended-expression later to maint).

 * "git diff rev^!" did not show combined diff to go to the rev from
   its parents.
   (merge a79c6b6081 rs/diff-caret-bang-with-parents later to maint).

 * Allow configuration files in "protected" scopes to include other
   configuration files.
   (merge ecec57b3c9 gc/bare-repo-discovery later to maint).

 * Give a bit more diversity to macOS CI by using sha1dc in one of the
   jobs (the other one tests Apple Common Crypto).
   (merge 1ad5c3df35 jc/ci-osx-with-sha1dc later to maint).

 * A bugfix with tracing support in midx codepath
   (merge e9c3839944 tb/midx-bitmap-selection-fix later to maint).

 * When geometric repacking feature is in use together with the
   --pack-kept-objects option, we lost packs marked with .keep files.
   (merge 197443e80a tb/save-keep-pack-during-geometric-repack later to maint).

 * Move a global variable added as a hack during regression fixes to
   its proper place in the API.
   (merge 0b0ab95f17 ab/run-hook-api-cleanup later to maint).

 * Update to build procedure with VS using CMake/CTest.
   (merge c858750b41 js/cmake-updates later to maint).

 * The short-help text shown by "git cmd -h" and the synopsis text
   shown at the beginning of "git help cmd" have been made more
   consistent.

 * When creating a multi-pack bitmap, remove per-pack bitmap files
   unconditionally as they will never be consulted.
   (merge 55d902cd61 tb/remove-unused-pack-bitmap later to maint).

 * Fix a longstanding syntax error in Git.pm error codepath.

 * "git diff --stat" etc. were invented back when everything was ASCII
   and strlen() was a way to measure the display width of a string;
   adjust them to compute the display width assuming UTF-8 pathnames.
   (merge ce8529b2bb tb/diffstat-with-utf8-strwidth later to maint).

 * "git branch --edit-description" can exit with status -1 which is
   not a good practice; it learned to use 1 as everybody else instead.

 * "git apply" limits its input to a bit less than 1 GiB.

 * Merging a branch with directory renames into a branch that changes
   the directory to a symlink was mishandled by the ort merge
   strategy, which has been corrected.

 * A bugfix to "git subtree" in its split and merge features.

 * Fix some bugs in the reflog messages when rebasing and changes the
   reflog messages of "rebase --apply" to match "rebase --merge" with
   the aim of making the reflog easier to parse.

 * "git rebase --keep-base" used to discard the commits that are
   already cherry-picked to the upstream, even when "keep-base" meant
   that the base, on top of which the history is being rebuilt, does
   not yet include these cherry-picked commits.  The --keep-base
   option now implies --reapply-cherry-picks and --no-fork-point
   options.

 * The way "git repack" creared temporary files when it received a
   signal was prone to deadlocking, which has been corrected.

 * Various tests exercising the transfer.credentialsInUrl
   configuration are taught to avoid making requests which require
   resolving localhost to reduce CI-flakiness.

 * The adjust_shared_perm() helper function learned to refrain from
   setting the "g+s" bit on directories when it is not necessary.

 * "git archive" mistakenly complained twice about a missing
   executable, which has been corrected.

 * Fix a bug where `git branch -d` did not work on an orphaned HEAD.

 * `git rebase --update-refs` would delete references when all
   `update-ref` commands in the sequencer were removed, which has been
   corrected.

 * Fix a regression in the bisect-helper which mistakenly treats
   arguments to the command given to 'git bisect run' as arguments to
   the helper.

 * Correct an error where `git rebase` would mistakenly use a branch or
   tag named "refs/rewritten/xyz" when missing a rebase label.

 * Other code cleanup, docfix, build fix, etc.
   (merge 413bc6d20a ds/cmd-main-reorder later to maint).
   (merge 8d2863e4ed nw/t1002-cleanup later to maint).

----------------------------------------------------------------

Changes since v2.38.0 are as follows:

Alejandro R. Sedeño (1):
      git-compat-util.h: GCC deprecated message arg only in GCC 4.5+

Alex Henrie (2):
      fsmonitor--daemon: don't translate literal commands
      push: improve grammar of branch.autoSetupMerge advice

Anh Le (2):
      index: add trace2 region for clear skip worktree
      index: raise a bug if the index is materialised more than once

Arthur Chan (1):
      fuzz: reorganise the path for existing oss-fuzz fuzzers

Daniel Sonbolian (1):
      git.c: improve code readability in cmd_main()

Debra Obondo (1):
      t7001-mv.sh: modernizing test script using functions

Derrick Stolee (15):
      maintenance: add 'unregister --force'
      scalar: make 'unregister' idempotent
      gc: replace config subprocesses with API calls
      string-list: document iterator behavior on NULL input
      bundle-uri: fix technical doc issues
      bundle-uri: use plain string in find_temp_filename()
      bundle-uri: create bundle_list struct and helpers
      bundle-uri: create base key-value pair parsing
      bundle-uri: parse bundle list in config format
      bundle-uri: limit recursion depth for bundle lists
      bundle: properly clear all revision flags
      bundle-uri: fetch a list of bundles
      bundle: add flags to verify_bundle()
      bundle-uri: quiet failed unbundlings
      bundle-uri: suppress stderr from remote-https

Diomidis Spinellis (1):
      grep: fix multibyte regex handling under macOS

Elijah Newren (4):
      merge-ort: fix bug with dir rename vs change dir to symlink
      merge-tree: update documentation for differences in -z output
      merge-tree: support multiple batched merges with --stdin
      sparse-checkout.txt: new document with sparse-checkout directions

Emily Shaffer (2):
      gc: add tests for --cruft and friends
      config: let feature.experimental imply gc.cruftPacks=true

Eric DeCosta (6):
      fsmonitor: refactor filesystem checks to common interface
      fsmonitor: relocate socket file if .git directory is remote
      fsmonitor: avoid socket location check if using hook
      fsmonitor: deal with synthetic firmlinks on macOS
      fsmonitor: check for compatability before communicating with fsmonitor
      fsmonitor: add documentation for allowRemote and socketDir options

Eric Sunshine (8):
      check-non-portable-shell: detect obsolescent egrep/fgrep
      chainlint: add explanatory comments
      chainlint: tighten accuracy when consuming input stream
      chainlint: latch start/end position of each token
      chainlint: annotate original test definition rather than token stream
      chainlint: sidestep impoverished macOS "terminfo"
      chainlint: latch line numbers at which each token starts and ends
      chainlint: prefix annotated test definition with line numbers

Eric Wong (1):
      delta-islands: free island-related data after use

Glen Choo (2):
      config: respect includes in protected config
      http: redact curl h2h3 headers in info

Han-Wen Nienhuys (1):
      refs: unify parse_worktree_ref() and ref_type()

Jeff Hostetler (9):
      config.mak.dev: disable suggest braces error on old clang versions
      trace2: use size_t alloc,nr_open_regions in tr2tls_thread_ctx
      tr2tls: clarify TLS terminology
      api-trace2.txt: elminate section describing the public trace2 API
      trace2: rename the thread_name argument to trace2_thread_start
      trace2: improve thread-name documentation in the thread-context
      trace2: convert ctx.thread_name from strbuf to pointer
      trace2: add stopwatch timers
      trace2: add global counter mechanism

Jeff King (41):
      fsck: free tree buffers after walking unreachable objects
      fsck: turn off save_commit_buffer
      parse_object_buffer(): respect save_commit_buffer
      clone: allow "--bare" with "-o"
      remote: handle rename of remote without fetch refspec
      shell: add basic tests
      shell: limit size of interactive commands
      sequencer: detect author name errors in read_author_script()
      test-submodule: inline resolve_relative_url() function
      multi-pack-index: avoid writing to global in option callback
      commit: avoid writing to global in option callback
      attr: drop DEBUG_ATTR code
      dir: use fspathncmp() in pl_hashmap_cmp()
      fsmonitor: fix leak of warning message
      diffstat_consume(): assert non-zero length
      submodule--helper: drop unused argc from module_list_compute()
      update-index: drop unused argc from do_reupdate()
      mark unused parameters in trivial compat functions
      object-file: mark unused parameters in hash_unknown functions
      string-list: mark unused callback parameters
      date: mark unused parameters in handler functions
      apply: mark unused parameters in handlers
      apply: mark unused parameters in noop error/warning routine
      convert: mark unused parameter in null stream filter
      diffcore-pickaxe: mark unused parameters in pickaxe functions
      ll-merge: mark unused parameters in callbacks
      Makefile: force -O0 when compiling with SANITIZE=leak
      repack: convert "names" util bitfield to array
      repack: populate extension bits incrementally
      repack: expand error message for missing pack files
      repack: use tempfiles for signal cleanup
      repack: drop remove_temporary_files()
      Git.pm: trust rev-parse to find bare repositories
      t7700: annotate cruft-pack failure with ok=sigpipe
      shortlog: accept `--date`-related options
      Makefile: force -O0 when compiling with SANITIZE=leak
      t5516: move plaintext-password tests from t5601 and t5516
      ref-filter: fix parsing of signatures without blank lines
      ref-filter: fix parsing of signatures with CRLF and no body
      branch: gracefully handle '-d' on orphan HEAD
      t: run t5551 tests with both HTTP and HTTP/2

Jerry Zhang (6):
      patch-id: fix stable patch id for binary / header-only
      patch-id: use stable patch-id for rebases
      builtin: patch-id: fix patch-id with binary diffs
      patch-id: fix patch-id for mode changes
      builtin: patch-id: add --verbatim as a command mode
      builtin: patch-id: remove unused diff-tree prefix

Johannes Altmanninger (1):
      sequencer: avoid dropping fixup commit that targets self via commit-ish

Johannes Schindelin (11):
      merge-ort: fix segmentation fault in read-only repositories
      merge-ort: return early when failing to write a blob
      cmake: make it easier to diagnose regressions in CTest runs
      cmake: copy the merge tools for testing
      add -p: avoid ambiguous signed/unsigned comparison
      cmake: avoid editing t/test-lib.sh
      cmake: increase time-out for a long-running test
      t5516/t5601: be less strict about the number of credential warnings
      scalar reconfigure -a: remove stale `scalar.repo` entries
      ci: use a newer `github-script` version
      tests(scalar): tighten the stale `scalar.repo` test some

John Cai (3):
      tmp-objdir: skip clean up when handling a signal
      fsck: remove the unused BAD_TAG_OBJECT
      fsck: document msg-id

Jonathan Tan (4):
      promisor-remote: remove a return value
      promisor-remote: die upon failing fetch
      negotiator/skipping: avoid stack overflow
      Doc: document push.recurseSubmodules=only

Julia Ramer (1):
      embargoed releases: also describe the git-security list and the process

Junio C Hamano (26):
      environ: document GIT_SSL_NO_VERIFY
      environ: explain Boolean environment variables
      environ: GIT_FLUSH should be made a usual Boolean
      environ: simplify description of GIT_INDEX_FILE
      environ: GIT_INDEX_VERSION affects not just a new repository
      branch: do not fail a no-op --edit-desc
      SubmittingPatches: use usual capitalization in the log message body
      Start 2.39 cycle
      symbolic-ref: teach "--[no-]recurse" option
      The (real) first batch for 2.39
      The second batch
      The third batch
      The fourth batch
      ci: add address and undefined sanitizer tasks
      ci: use DC_SHA1=YesPlease on osx-clang job for CI
      The fifth batch
      diff: leave NEEDWORK notes in show_stats() function
      fsck: remove the unused MISSING_TREE_OBJECT
      Documentation: add lint-fsck-msgids
      Downmerge a handful of topics for 2.38.2
      The sixth batch
      Downmerge a bit more for 2.38.2
      The seventh batch
      The eighth batch
      adjust_shared_perm(): leave g+s alone when the group does not matter
      Git 2.39-rc0

Kevin Backhouse (1):
      alias.c: reject too-long cmdline strings in split_cmdline()

Kousik Sanagavarapu (1):
      repository-version.txt: partialClone casing change

M Hickford (4):
      Documentation/gitcredentials.txt: mention password alternatives
      Documentation: increase example cache timeout to 1 hour
      docs: clarify that credential discards unrecognised attributes
      Docs: describe how a credential-generating helper works

Martin Ågren (1):
      test-lib-functions: drop redundant diagnostic print

Matthew John Cheetham (3):
      wincred: ignore unknown lines (do not die)
      netrc: ignore unknown lines (do not die)
      osxkeychain: clarify that we ignore unknown lines

Michael J Gruber (1):
      notes: avoid empty line in template

Michael McClimon (1):
      Git.pm: add semicolon after catch statement

Noah Betzen (1):
      mergetool.txt: typofix 'overwriten' -> 'overwritten'

Nsengiyumva Wilberforce (1):
      t1002: modernize outdated conditional

Patrick Steinhardt (7):
      refs: fix memory leak when parsing hideRefs config
      refs: get rid of global list of hidden refs
      revision: move together exclusion-related functions
      revision: introduce struct to handle exclusions
      revision: add new parameter to exclude hidden refs
      rev-parse: add `--exclude-hidden=` option
      receive-pack: only use visible refs for connectivity check

Philip Oakley (4):
      doc: use "commit-graph" hyphenation consistently
      doc: use 'object database' not ODB or abbreviation
      glossary: add "commit graph" description
      glossary: add reachability bitmap description

Philippe Blain (9):
      test-lib-functions: mark 'test_commit' variables as 'local'
      subtree: use 'git rev-parse --verify [--quiet]' for better error messages
      subtree: add 'die_incompatible_opt' function to reduce duplication
      subtree: prefix die messages with 'fatal'
      subtree: define a variable before its first use in 'find_latest_squash'
      subtree: use named variables instead of "$@" in cmd_pull
      subtree: process 'git-subtree-split' trailer in separate function
      subtree: fix squash merging after annotated tag was squashed merged
      subtree: fix split after annotated tag was squashed merged

Phillip Wood (23):
      mailinfo -b: fix an out of bounds access
      ssh signing: return an error when signature cannot be read
      t3435: remove redundant test case
      t3416: tighten two tests
      t3416: set $EDITOR in subshell
      rebase: be stricter when reading state files containing oids
      rebase: store orig_head as a commit
      rebase: rename merge_base to branch_base
      rebase: factor out branch_base calculation
      rebase --keep-base: imply --reapply-cherry-picks
      rebase --keep-base: imply --no-fork-point
      rebase --apply: remove duplicated code
      t3406: rework rebase reflog tests
      rebase --merge: fix reflog when continuing
      rebase --merge: fix reflog message after skipping
      rebase --apply: respect GIT_REFLOG_ACTION
      rebase --apply: make reflog messages match rebase --merge
      rebase --abort: improve reflog message
      rebase: cleanup action handling
      sequencer: stop exporting GIT_REFLOG_ACTION
      rebase: stop exporting GIT_REFLOG_ACTION
      sequencer: unify label lookup
      sequencer: tighten label lookups

René Scharfe (20):
      revision: use strtol_i() for exclude_parent
      revisions.txt: unspecify order of resolved parts of ^!
      diff: support ^! for merges
      gc: simplify maintenance_task_pack_refs()
      t/lib-httpd: pass LANG and LC_ALL to Apache
      bisect--helper: plug strvec leak
      archive: deduplicate verbose printing
      submodule: use strvec_pushf() for --super-prefix
      run-command: fix return value comment
      am: simplify building "show" argument list
      bisect: simplify building "checkout" argument list
      bisect--helper: factor out do_bisect_run()
      sequencer: simplify building argument list in do_exec()
      use child_process member "args" instead of string array variable
      use child_process members "args" and "env" directly
      replace and remove run_command_v_opt_cd_env()
      replace and remove run_command_v_opt_tr2()
      replace and remove run_command_v_opt_cd_env_tr2()
      replace and remove run_command_v_opt()
      archive-tar: report filter start error only once

Ronan Pigott (2):
      for-each-repo: interpolate repo path arguments
      maintenance: add option to register in a specific config

Rubén Justo (5):
      ref-filter.c: fix a leak in get_head_description
      branch: description for non-existent branch errors
      branch: support for shortcuts like @{-1}, completed
      branch: error copying or renaming a detached HEAD
      branch: error code with --edit-description

SZEDER Gábor (1):
      Documentation/build-docdep.perl: generate sorted output

Sergey Organov (3):
      diff-merges: cleanup func_by_opt()
      diff-merges: cleanup set_diff_merges()
      diff-merges: clarify log.diffMerges documentation

Shaoxuan Yuan (1):
      builtin/grep.c: integrate with sparse index

Sotir Danailov (1):
      docs: git-send-email: difference between ssl and tls smtp-encryption

Taylor Blau (64):
      Documentation/git-multi-pack-index.txt: fix typo
      Documentation/git-multi-pack-index.txt: clarify expire behavior
      midx.c: prevent `expire` from removing the cruft pack
      midx.c: avoid cruft packs with `repack --batch-size=0`
      midx.c: replace `xcalloc()` with `CALLOC_ARRAY()`
      midx.c: remove unnecessary loop condition
      midx.c: avoid cruft packs with non-zero `repack --batch-size`
      builtin/clone.c: disallow `--local` clones with symlinks
      t/lib-submodule-update.sh: allow local submodules
      t/t1NNN: allow local submodules
      t/2NNNN: allow local submodules
      t/t3NNN: allow local submodules
      t/t4NNN: allow local submodules
      t/t5NNN: allow local submodules
      t/t6NNN: allow local submodules
      t/t7NNN: allow local submodules
      t/t9NNN: allow local submodules
      transport: make `protocol.file.allow` be "user" by default
      t1092: prepare for changing protocol.file.allow
      t2080: prepare for changing protocol.file.allow
      t1092: prepare for changing protocol.file.allow
      t2080: prepare for changing protocol.file.allow
      t3207: prepare for changing protocol.file.allow
      t5516: prepare for changing protocol.file.allow
      t5537: prepare for changing protocol.file.allow
      t7814: prepare for changing protocol.file.allow
      t3206: prepare for changing protocol.file.allow
      t5537: prepare for changing protocol.file.allow
      Git 2.30.6
      Git 2.31.5
      Git 2.32.4
      Git 2.33.5
      Git 2.34.5
      Git 2.35.5
      Git 2.36.3
      t7527: prepare for changing protocol.file.allow
      Git 2.37.4
      Git 2.38.1
      midx.c: fix whitespace typo
      midx.c: consider annotated tags during bitmap selection
      midx.c: instrument MIDX and bitmap generation with trace2 regions
      pack-bitmap-write.c: instrument number of reused bitmaps
      builtin/repack.c: remove redundant pack-based bitmaps
      repack: don't remove .keep packs with `--pack-kept-objects`
      builtin/repack.c: pass "out" to `prepare_pack_objects`
      builtin/repack.c: pass "cruft_expiration" to `write_cruft_pack`
      builtin/repack.c: write cruft packs to arbitrary locations
      builtin/repack.c: implement `--expire-to` for storing pruned objects
      shortlog: make trailer insertion a noop when appropriate
      shortlog: extract `--group` fragment for translation
      shortlog: support arbitrary commit format `--group`s
      shortlog: extract `shortlog_finish_setup()`
      shortlog: implement `--group=author` in terms of `--group=<format>`
      shortlog: implement `--group=committer` in terms of `--group=<format>`
      apply: reject patches larger than ~1 GiB
      Documentation/howto/maintain-git.txt: fix Meta/redo-jch.sh invocation
      The ninth batch
      Documentation: build redo-jch.sh from master..jch
      Documentation: build redo-seen.sh from jch..seen
      The tenth batch
      The eleventh batch
      The twelfth batch
      builtin/gc.c: fix use-after-free in maintenance_unregister()
      The thirteenth batch

Torsten Bögershausen (1):
      diff.c: use utf8_strwidth() to count display width

Victoria Dye (7):
      read-cache: avoid misaligned reads in index v4
      rebase --update-refs: avoid unintended ref deletion
      cache-tree: add perf test comparing update and prime
      unpack-trees: add 'skip_cache_tree_update' option
      reset: use 'skip_cache_tree_update' option
      read-tree: use 'skip_cache_tree_update' option
      rebase: use 'skip_cache_tree_update' option

Vincent Bernat (1):
      ls-files: fix --ignored and --killed flags in synopsis

Vlad-Stefan Harbuz (1):
      Documentation: fix typo

srz_zumix (1):
      fsmonitor--daemon: on macOS support symlink

Ævar Arnfjörð Bjarmason (100):
      test-lib: have SANITIZE=leak imply TEST_NO_MALLOC_CHECK
      CodingGuidelines: update for C99
      CodingGuidelines: mention dynamic C99 initializer elements
      CodingGuidelines: allow declaring variables in for loops
      CodingGuidelines: mention C99 features we can't use
      grep.c: remove "extended" in favor of "pattern_expression", fix segfault
      CodingGuidelines: recommend against unportable C99 struct syntax
      bundle-uri: create "key=value" line parsing
      bundle-uri: unit test "key=value" parsing
      run-command test helper: use "else if" pattern
      run-command API: have "run_processes_parallel{,_tr2}()" return void
      run-command tests: use "return", not "exit"
      run-command API: make "n" parameter a "size_t"
      run-command API: don't fall back on online_cpus()
      run-command.c: use designated init for pp_init(), add "const"
      run-command API: have run_process_parallel() take an "opts" struct
      run-command API: move *_tr2() users to "run_processes_parallel()"
      run-command.c: make "struct parallel_processes" const if possible
      run-command.c: don't copy *_fn to "struct parallel_processes"
      run-command.c: don't copy "ungroup" to "struct parallel_processes"
      run-command.c: don't copy "data" to "struct parallel_processes"
      run-command.c: use "opts->processes", not "pp->max_processes"
      run-command.c: pass "opts" further down, and use "opts->processes"
      run-command.c: remove "max_processes", add "const" to signal() handler
      tests: assert *.txt SYNOPSIS and -h output
      CodingGuidelines: update and clarify command-line conventions
      builtin/bundle.c: indent with tabs
      bundle: define subcommand -h in terms of command -h
      doc SYNOPSIS: don't use ' for subcommands
      doc SYNOPSIS: consistently use ' for commands
      built-ins: consistently add "\n" between "usage" and options
      doc txt & -h consistency: word-wrap
      doc txt & -h consistency: fix incorrect alternates syntax
      doc txt & -h consistency: add "-z" to cat-file "-h"
      doc txt & -h consistency: balance unbalanced "[" and "]"
      doc txt & -h consistency: correct padding around "[]()"
      stash doc SYNOPSIS & -h: correct padding around "[]()"
      doc txt & -h consistency: use "<options>", not "<options>..."
      doc SYNOPSIS & -h: use "-" to separate words in labels, not "_"
      doc txt & -h consistency: fix mismatching labels
      doc txt & -h consistency: add or fix optional "--" syntax
      doc txt & -h consistency: make output order consistent
      doc txt & -h consistency: add missing options and labels
      doc txt & -h consistency: make "rerere" consistent
      doc txt & -h consistency: make "read-tree" consistent
      doc txt & -h consistency: make "bundle" consistent
      doc txt & -h consistency: use "git foo" form, not "git-foo"
      doc txt & -h consistency: add missing options
      doc txt & -h consistency: make "stash" consistent
      doc txt & -h consistency: make "annotate" consistent
      doc txt & -h consistency: use "[<label>...]" for "zero or more"
      doc txt & -h consistency: make "diff-tree" consistent
      doc txt & -h consistency: make "commit" consistent
      reflog doc: list real subcommands up-front
      worktree: define subcommand -h in terms of command -h
      doc txt & -h consistency: make "worktree" consistent
      tests: start asserting that *.txt SYNOPSIS matches -h output
      tests: assert consistent whitespace in -h output
      fsmonitor OSX: compile with DC_SHA1=YesPlease
      merge: remove always-the-same "verbose" arguments
      hook tests: fix redirection logic error in 96e7225b310
      submodule tests: reset "trace.out" between "grep" invocations
      run-command tests: test stdout of run_command_parallel()
      Makefile + shared.mak: rename and indent $(QUIET_SPATCH_T)
      cocci rules: remove unused "F" metavariable from pending rule
      Makefile: add ability to TAB-complete cocci *.patch rules
      Makefile: have "coccicheck" re-run if flags change
      Makefile: split off SPATCH_BATCH_SIZE comment from "cocci" heading
      cocci: split off include-less "tests" from SPATCH_FLAGS
      cocci: split off "--all-includes" from SPATCH_FLAGS
      cocci: make "coccicheck" rule incremental
      cocci: optimistically use COMPUTE_HEADER_DEPENDENCIES
      Makefile: copy contrib/coccinelle/*.cocci to build/
      cocci rules: remove <id>'s from rules that don't need them
      cocci: run against a generated ALL.cocci
      spatchcache: add a ccache-alike for "spatch"
      Makefile: always (re)set DC_SHA1 on fallback
      INSTALL: remove discussion of SHA-1 backends
      Makefile: correct DC_SHA1 documentation
      Makefile: create and use sections for "define" flag listing
      Makefile: rephrase the discussion of *_SHA1 knobs
      Makefile: document default SHA-256 backend
      Makefile: document SHA-1 and SHA-256 default and selection order
      Makefile & test-tool: replace "DC_SHA1" variable with a "define"
      Makefile: document default SHA-1 backend on OSX
      Makefile: discuss SHAttered in *_SHA{1,256} discussion
      submodule--helper: move "config" to a test-tool
      submodule tests: add tests for top-level flag output
      submodule--helper: fix a memory leak in "status"
      submodule tests: test for a "foreach" blind-spot
      submodule.c: refactor recursive block out of absorb function
      submodule API & "absorbgitdirs": remove "----recursive" option
      submodule--helper: remove --prefix from "absorbgitdirs"
      submodule--helper: drop "update --prefix <pfx>" for "-C <pfx> update"
      submodule--helper: use OPT_SUBCOMMAND() API
      revisions API: extend the nascent REV_INFO_INIT macro
      t7610: fix flaky timeout issue, don't clone from example.com
      Makefile: don't create a ".build/.build/" for cocci, fix output
      maintenance --unregister: fix uninit'd data use & -Wdeclaration-after-statement
      t7610: use "file:///dev/null", not "/dev/null", fixes MinGW

Đoàn Trần Công Danh (8):
      CodingGuidelines: allow grep -E
      t: remove \{m,n\} from BRE grep usage
      t: convert egrep usage to "grep -E"
      t: convert fgrep usage to "grep -F"
      Makefile: clarify runtime relative gitexecdir
      bisect--helper: remove unused options
      bisect--helper: move all subcommands into their own functions
      bisect--helper: parse subcommand with OPT_SUBCOMMAND


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.38.0
@ 2022-10-03 17:26  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2022-10-03 17:26 UTC (permalink / raw)
  To: git; +Cc: git-packagers

The latest feature release Git v2.38.0 is now available at the
usual places.  It is comprised of 699 non-merge commits since
v2.37.0, contributed by 92 people, 24 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.38.0'
tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.37.0 are as follows.
Welcome to the Git development community!

  Andrew Olsen, Anthony Delannoy, Carlos López, Celeste Liu,
  Cleber Rosa, David Plumpton, Elijah Conners, Eric DeCosta,
  Goss Geppert, Hubert Bossot, Ilya K, Ingy dot Net, Jacob Stopak,
  Julien Rouhaud, Kilian Kilger, Lana Deere, Manuel Boni, Matthew
  Klein, Miaoqian Lin, Moritz Baumann, Pavel Rappo, Pierre Garnier,
  Richard Oliver, and Xavier Morel.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Abhradeep Chakraborty, Adam Dinwoodie, Ævar Arnfjörð
  Bjarmason, Alexander Shopov, Alex Henrie, Arthur Milchior,
  Bagas Sanjaya, brian m. carlson, Calvin Wan, Carlo Marcelo
  Arenas Belón, Christian Couder, Christoph Reiter, Derrick
  Stolee, Dimitriy Ryazantcev, Đoàn Trần Công Danh, Elijah
  Newren, Emily Shaffer, Emir SARI, Eric Sunshine, Fangyi
  Zhou, Felipe Contreras, Fernando Ramos, Glen Choo, Han Xin,
  Hariom Verma, Jacob Keller, Jaydeep Das, Jean-Noël Avila,
  Jeff King, Jiang Xin, Joey Hess, Johannes Schindelin, John
  Cai, Jonathan Tan, Jordi Mas, Josh Steadmon, Junio C Hamano,
  Justin Donnelly, Kyle Zhao, Lessley Dennington, Li Linchao,
  Linus Torvalds, Martin Ågren, Matheus Tavares, Matthew John
  Cheetham, Michael J Gruber, Øystein Walle, Peter Krefting,
  Philip Oakley, Philippe Blain, Phillip Szelat, Phillip Wood,
  Ralf Thielow, Randall S. Becker, Renato Botelho, René Scharfe,
  Shaoxuan Yuan, Siddharth Asthana, SZEDER Gábor, Tao Klerks,
  Taylor Blau, Teng Long, Todd Zullinger, Torsten Bögershausen,
  Victoria Dye, Yi-Jyun Pan, ZheNing Hu, and 依云.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.38 Release Notes
=======================

UI, Workflows & Features

 * "git remote show [-n] frotz" now pays attention to negative
   pathspec.

 * "git push" sometimes performs poorly when reachability bitmaps are
   used, even in a repository where other operations are helped by
   bitmaps.  The push.useBitmaps configuration variable is introduced
   to allow disabling use of reachability bitmaps only for "git push".

 * "git grep -m<max-hits>" is a way to limit the hits shown per file.

 * "git merge-tree" learned a new mode where it takes two commits and
   computes a tree that would result in the merge commit, if the
   histories leading to these two commits were to be merged.

 * "git mv A B" in a sparsely populated working tree can be asked to
   move a path between directories that are "in cone" (i.e. expected
   to be materialized in the working tree) and "out of cone"
   (i.e. expected to be hidden).  The handling of such cases has been
   improved.

 * Earlier, HTTP transport clients learned to tell the server side
   what locale they are in by sending Accept-Language HTTP header, but
   this was done only for some requests but not others.

 * Introduce a safe.barerepository configuration variable that
   allows users to forbid discovery of bare repositories.

 * Various messages that come from the pack-bitmap codepaths have been
   tweaked.

 * "git rebase -i" learns to update branches whose tip appear in the
   rebased range with "--update-refs" option.

 * "git ls-files" learns the "--format" option to tweak its output.

 * "git cat-file" learned an option to use the mailmap when showing
   commit and tag objects.

 * When "git merge" finds that it cannot perform a merge, it should
   restore the working tree to the state before the command was
   initiated, but in some corner cases it didn't.

 * Operating modes like "--batch" of "git cat-file" command learned to
   take NUL-terminated input, instead of one-item-per-line.

 * "git rm" has become more aware of the sparse-index feature.

 * "git rev-list --disk-usage" learned to take an optional value
   "human" to show the reported value in human-readable format, like
   "3.40MiB".

 * The "diagnose" feature to create a zip archive for diagnostic
   material has been lifted from "scalar" and made into a feature of
   "git bugreport".

 * The namespaces used by "log --decorate" from "refs/" hierarchy by
   default has been tightened.

 * "git rev-list --ancestry-path=C A..B" is a natural extension of
   "git rev-list A..B"; instead of choosing a subset of A..B to those
   that have ancestry relationship with A, it lets a subset with
   ancestry relationship with C.

 * "scalar" now enables built-in fsmonitor on enlisted repositories,
   when able.

 * The bash prompt (in contrib/) learned to optionally indicate when
   the index is unmerged.

 * "git clone" command learned the "--bundle-uri" option to coordinate
   with hosting sites the use of pre-prepared bundle files.

 * "git range-diff" learned to honor pathspec argument if given.

 * "git format-patch --from=<ident>" can be told to add an in-body
   "From:" line even for commits that are authored by the given
   <ident> with "--force-in-body-from" option.

 * The built-in fsmonitor refuses to work on a network mounted
   repositories; a configuration knob for users to override this has
   been introduced.

 * The "scalar" addition from Microsoft is now part of the core Git
   installation.


Performance, Internal Implementation, Development Support etc.

 * Collection of what is referenced by objects in promisor packs have
   been optimized to inspect these objects in the in-pack order.

 * Introduce a helper to see if a branch is already being worked on
   (hence should not be newly checked out in a working tree), which
   performs much better than the existing find_shared_symref() to
   replace many uses of the latter.

 * Teach "git archive" to (optionally and then by default) avoid
   spawning an external "gzip" process when creating ".tar.gz" (and
   ".tgz") archives.

 * Allow large objects read from a packstream to be streamed into a
   loose object file straight, without having to keep it in-core as a
   whole.

 * Further preparation to turn git-submodule.sh into a builtin
   continues.

 * Apply Coccinelle rule to turn raw memmove() into MOVE_ARRAY() cpp
   macro, which would improve maintainability and readability.

 * Teach "make all" to build gitweb as well.

 * Tweak tests so that they still work when the "git init" template
   did not create .git/info directory.

 * Add Coccinelle rules to detect the pattern of initializing and then
   finalizing a structure without using it in between at all, which
   happens after code restructuring and the compilers fail to
   recognize as an unused variable.

 * The code to convert between GPG trust level strings and internal
   constants we use to represent them have been cleaned up.

 * Support for libnettle as SHA256 implementation has been added.

 * The way "git multi-pack" uses parse-options API has been improved.

 * A Coccinelle rule (in contrib/) to encourage use of COPY_ARRAY
   macro has been improved.

 * API tweak to make it easier to run fuzz testing on commit-graph parser.

 * Omit fsync-related trace2 entries when their values are all zero.

 * The codepath to write multi-pack index has been taught to release a
   large chunk of memory that holds an array of objects in the packs,
   as soon as it is done with the array, to reduce memory consumption.

 * Add a level of redirection to array allocation API in xdiff part,
   to make it easier to share with the libgit2 project.

 * "git fetch" client logs the partial clone filter used in the trace2
   output.

 * The "bundle URI" design gets documented.

 * The common ancestor negotiation exchange during a "git fetch"
   session now leaves trace log.

 * Test portability improvements.
   (merge 4d1d843be7 mt/rot13-in-c later to maint).

 * The "subcommand" mode is introduced to parse-options API and update
   the command line parser of Git commands with subcommands.

 * The pack bitmap file gained a bitmap-lookup table to speed up
   locating the necessary bitmap for a given commit.

 * The assembly version of SHA-1 implementation for PPC has been
   removed.

 * The server side that responds to "git fetch" and "git clone"
   request has been optimized by allowing it to send objects in its
   object store without recomputing and validating the object names.

 * Annotate function parameters that are not used (but cannot be
   removed for structural reasons), to prepare us to later compile
   with -Wunused warning turned on.

 * Share the text used to explain configuration variables used by "git
   <subcmd>" in "git help <subcmd>" with the text from "git help config".

 * "git mv A B" in a sparsely populated working tree can be asked to
   move a path from a directory that is "in cone" to another directory
   that is "out of cone".  Handling of such a case has been improved.

 * The chainlint script for our tests has been revamped.


Fixes since v2.37
-----------------

 * Rewrite of "git add -i" in C that appeared in Git 2.25 didn't
   correctly record a removed file to the index, which was fixed.

 * Certain diff options are currently ignored when combined-diff is
   shown; mark them as incompatible with the feature.

 * Adjust technical/bitmap-format to be formatted by AsciiDoc, and
   add some missing information to the documentation.

 * Fixes for tests when the source directory has unusual characters in
   its path, e.g. whitespaces, double-quotes, etc.

 * "git mktree --missing" lazily fetched objects that are missing from
   the local object store, which was totally unnecessary for the purpose
   of creating the tree object(s) from its input.

 * Give _() markings to fatal/warning/usage: labels that are shown in
   front of these messages.

 * References to commands-to-be-typed-literally in "git rebase"
   documentation mark-up have been corrected.

 * In a non-bare repository, the behavior of Git when the
   core.worktree configuration variable points at a directory that has
   a repository as its subdirectory, regressed in Git 2.27 days.

 * Recent update to vimdiff layout code has been made more robust
   against different end-user vim settings.

 * Plug various memory leaks, both in the main code and in test-tool
   commands.

 * Fixes a long-standing corner case bug around directory renames in
   the merge-ort strategy.

 * The resolve-undo information in the index was not protected against
   GC, which has been corrected.

 * A corner case bug where lazily fetching objects from a promisor
   remote resulted in infinite recursion has been corrected.

 * "git clone" from a repository with some ref whose HEAD is unborn
   did not set the HEAD in the resulting repository correctly, which
   has been corrected.

 * An earlier attempt to plug leaks placed a clean-up label to jump to
   at a bogus place, which as been corrected.

 * Variable quoting fix in the vimdiff driver of "git mergetool"

 * "git shortlog -n" relied on the underlying qsort() to be stable,
   which shouldn't have.  Fixed.

 * A fix for a regression in test framework.

 * mkstemp() emulation on Windows has been improved.

 * Add missing documentation for "include" and "includeIf" features in
   "git config" file format, which incidentally teaches the command
   line completion to include them in its offerings.

 * Avoid "white/black-list" in documentation and code comments.

 * Workaround for a compiler warning against use of die() in
   osx-keychain (in contrib/).

 * Workaround for a false positive compiler warning.

 * "git p4" working on UTF-16 files on Windows did not implement
   CRLF-to-LF conversion correctly, which has been corrected.

 * "git p4" did not handle non-ASCII client name well, which has been
   corrected.

 * "rerere-train" script (in contrib/) used to honor commit.gpgSign
   while recreating the throw-away merges.

 * "git checkout" miscounted the paths it updated, which has been
   corrected.

 * Fix for a bug that makes write-tree to fail to write out a
   non-existent index as a tree, introduced in 2.37.

 * There was a bug in the codepath to upgrade generation information
   in commit-graph from v1 to v2 format, which has been corrected.

 * Gitweb had legacy URL shortener that is specific to the way
   projects hosted on kernel.org used to (but no longer) work, which
   has been removed.

 * Fix build procedure for Windows that uses CMake so that it can pick
   up the shell interpreter from local installation location.

 * Conditionally allow building Python interpreter on Windows

 * Fix to lstat() emulation on Windows.

 * Older gcc with -Wall complains about the universal zero initializer
   "struct s = { 0 };" idiom, which makes developers' lives
   inconvenient (as -Werror is enabled by DEVELOPER=YesPlease).  The
   build procedure has been tweaked to help these compilers.

 * Plug memory leaks in the failure code path in the "merge-ort" merge
   strategy backend.

 * "git symbolic-ref symref non..sen..se" is now diagnosed as an error.

 * A follow-up fix to a fix for a regression in 2.36 around hooks.

 * Avoid repeatedly running getconf to ask libc version in the test
   suite, and instead just as it once per script.

 * Platform-specific code that determines if a directory is OK to use
   as a repository has been taught to report more details, especially
   on Windows.

 * "vimdiff3" regression fix.

 * "git fsck" reads mode from tree objects but canonicalizes the mode
   before passing it to the logic to check object sanity, which has
   hid broken tree objects from the checking logic.  This has been
   corrected, but to help existing projects with broken tree objects
   that they cannot fix retroactively, the severity of anomalies this
   code detects has been demoted to "info" for now.

 * Fixes to sparse index compatibility work for "reset" and "checkout"
   commands.

 * An earlier optimization discarded a tree-object buffer that is
   still in use, which has been corrected.

 * Fix deadlocks between main Git process and subprocess spawned via
   the pipe_command() API, that can kill "git add -p" that was
   reimplemented in C recently.

 * The sequencer machinery translated messages left in the reflog by
   mistake, which has been corrected.

 * xcalloc(), imitating calloc(), takes "number of elements of the
   array", and "size of a single element", in this order.  A call that
   does not follow this ordering has been corrected.

 * The preload-index codepath made copies of pathspec to give to
   multiple threads, which were left leaked.

 * Update the version of Ubuntu used for GitHub Actions CI from 18.04
   to 22.04.

 * The auto-stashed local changes created by "git merge --autostash"
   was mixed into a conflicted state left in the working tree, which
   has been corrected.

 * Multi-pack index got corrupted when preferred pack changed from one
   pack to another in a certain way, which has been corrected.
   (merge 99e4d084ff tb/midx-with-changing-preferred-pack-fix later to maint).

 * The clean-up of temporary files created via mks_tempfile_dt() was
   racy and attempted to unlink() the leading directory when signals
   are involved, which has been corrected.
   (merge babe2e0559 rs/tempfile-cleanup-race-fix later to maint).

 * FreeBSD portability fix for "git maintenance" that spawns "crontab"
   to schedule tasks.
   (merge ee69e7884e bc/gc-crontab-fix later to maint).

 * Those who use diff-so-fancy as the diff-filter noticed a regression
   or two in the code that parses the diff output in the built-in
   version of "add -p", which has been corrected.
   (merge 0a101676e5 js/add-p-diff-parsing-fix later to maint).

 * Segfault fix-up to an earlier fix to the topic to teach "git reset"
   and "git checkout" work better in a sparse checkout.
   (merge 037f8ea6d9 vd/sparse-reset-checkout-fixes later to maint).

 * "git diff --no-index A B" managed its the pathnames of its two
   input files rather haphazardly, sometimes leaking them.  The
   command line argument processing has been straightened out to clean
   it up.
   (merge 2b43dd0eb5 rs/diff-no-index-cleanup later to maint).

 * "git rev-list --verify-objects" ought to inspect the contents of
   objects and notice corrupted ones, but it didn't when the commit
   graph is in use, which has been corrected.
   (merge b27ccae34b jk/rev-list-verify-objects-fix later to maint).

 * More fixes to "add -p"
   (merge 64ec8efb83 js/builtin-add-p-portability-fix later to maint).

 * The parser in the script interface to parse-options in "git
   rev-parse" has been updated to diagnose a bogus input correctly.
   (merge f20b9c36d0 ow/rev-parse-parseopt-fix later to maint).

 * The code that manages list-object-filter structure, used in partial
   clones, leaked the instances, which has been plugged.
   (merge 66eede4a37 jk/plug-list-object-filter-leaks later to maint).

 * Fix another UI regression in the reimplemented "add -p".
   (merge f6f0ee247f rs/add-p-worktree-mode-prompt-fix later to maint).

 * "git fetch" over protocol v2 sent an incorrect ref prefix request
   to the server and made "git pull" with configured fetch refspec
   that does not cover the remote branch to merge with fail, which has
   been corrected.
   (merge 49ca2fba39 jk/proto-v2-ref-prefix-fix later to maint).

 * A result from opendir() was leaking in the commit-graph expiration
   codepath, which has been plugged.
   (merge 12f1ae5324 ml/commit-graph-expire-dir-leak-fix later to maint).

 * Just like we have coding guidelines, we now have guidelines for
   reviewers.
   (merge e01b851923 vd/doc-reviewing-guidelines later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 77b9e85c0f vd/fix-perf-tests later to maint).
   (merge 0682bc43f5 jk/test-crontab-fixes later to maint).
   (merge b46dd1726c cc/doc-trailer-whitespace-rules later to maint).

----------------------------------------------------------------

Changes since v2.37.0 are as follows:

Abhradeep Chakraborty (9):
      bitmap-format.txt: feed the file to asciidoc to generate html
      bitmap-format.txt: fix some formatting issues
      bitmap-format.txt: add information for trailing checksum
      Documentation/technical: describe bitmap lookup table extension
      bitmap: move `get commit positions` code to `bitmap_writer_finish`
      pack-bitmap-write.c: write lookup table extension
      pack-bitmap-write: learn pack.writeBitmapLookupTable and add tests
      pack-bitmap: prepare to read lookup table extension
      bitmap-lookup-table: add performance tests for lookup table

Adam Dinwoodie (1):
      t1800: correct test to handle Cygwin

Alex Henrie (5):
      gc: don't translate literal commands
      builtin/diagnose.c: don't translate the two mode values
      pack-bitmap: improve grammar of "xor chain" error message
      l10n: fr: don't say that merge is "the default strategy"
      l10n: es: update translation

Alexander Shopov (3):
      l10n: bg.po: Updated Bulgarian translation (5482t)
      l10n: bg.po: Updated Bulgarian translation (5484t)
      l10n: bg.po: Updated Bulgarian translation (5484t)

Anthony Delannoy (1):
      preload-index: fix memleak

Bagas Sanjaya (3):
      l10n: po-id for 2.38 (round 1)
      l10n: po-id for 2.38 (round 2)
      l10n: po-id for 2.38 (round 3)

Calvin Wan (1):
      submodule merge: update conflict error message

Carlo Marcelo Arenas Belón (2):
      setup: tighten ownership checks post CVE-2022-24765
      cmake: support local installations of git

Carlos López (1):
      grep: add --max-count command line option

Celeste Liu (1):
      contrib/rerere-train: avoid useless gpg sign in training

Christian Couder (1):
      Documentation: clarify whitespace rules for trailers

Cleber Rosa (1):
      setup: fix function name in a BUG() message

Derrick Stolee (51):
      branch: add branch_checked_out() helper
      branch: check for bisects and rebases
      fetch: use new branch_checked_out() and add tests
      branch: use branch_checked_out() when deleting refs
      branch: fix branch_checked_out() leaks
      t5510: replace 'origin' with URL more carefully
      vscode: improve tab size and wrapping
      git-rebase.txt: use back-ticks consistently
      pack-bitmap-write: use const for hashes
      midx: extract bitmap write setup
      midx: reduce memory pressure while writing bitmaps
      daemon: clarify directory arguments
      git-cvsserver: clarify directory list
      git.txt: remove redundant language
      t: avoid "whitelist"
      transport.c: avoid "whitelist"
      t2407: test bisect and rebase as black-boxes
      t2407: test branches currently using apply backend
      branch: consider refs under 'update-refs'
      rebase-interactive: update 'merge' description
      sequencer: define array with enum values
      sequencer: add update-ref command
      rebase: add --update-refs option
      rebase: update refs from 'update-ref' commands
      sequencer: rewrite update-refs as user edits todo list
      rebase: add rebase.updateRefs config option
      sequencer: ignore HEAD ref under --update-refs
      sequencer: notify user of --update-refs activity
      compat/win32: correct for incorrect compiler warning
      refs: allow "HEAD" as decoration filter
      t4207: modernize test
      t4207: test coloring of grafted decorations
      refs: add array of ref namespaces
      refs: use ref_namespaces for replace refs base
      log-tree: use ref_namespaces instead of if/else-if
      log: add default decoration filter
      log: add --clear-decorations option
      log: create log.initialDecorationSet=all
      maintenance: stop writing log.excludeDecoration
      fetch: use ref_namespaces during prefetch
      docs: document bundle URI standard
      bundle-uri: add example bundle organization
      remote-curl: add 'get' capability
      bundle-uri: create basic file-copy logic
      clone: add --bundle-uri option
      bundle-uri: add support for http(s):// and file://
      clone: --bundle-uri cannot be combined with --depth
      t6019: modernize tests with helper
      clone: warn on failure to repo_init()
      ci: update 'static-analysis' to Ubuntu 22.04
      pack-bitmap: remove trace2 region from hot path

Dimitriy Ryazantcev (1):
      i18n: mark message helpers prefix for translation

Elijah Conners (1):
      reftable: use a pointer for pq_entry param

Elijah Newren (43):
      merge-tree: rename merge_trees() to trivial_merge_trees()
      merge-tree: move logic for existing merge into new function
      merge-tree: add option parsing and initial shell for real merge function
      merge-tree: implement real merges
      merge-ort: split out a separate display_update_messages() function
      merge-tree: support including merge messages in output
      merge-ort: provide a merge_get_conflicted_files() helper function
      merge-ort: remove command-line-centric submodule message from merge-ort
      merge-tree: provide a list of which files have conflicts
      merge-tree: provide easy access to `ls-files -u` style info
      merge-ort: store more specific conflict information
      merge-ort: optionally produce machine-readable output
      merge-tree: allow `ls-files -u` style info to be NUL terminated
      merge-tree: add a --allow-unrelated-histories flag
      git-merge-tree.txt: add a section on potentional usage mistakes
      t6429: fix use of non-existent function
      t6423: add tests of dual directory rename plus add/add conflict
      merge-ort: small cleanups of check_for_directory_rename
      merge-ort: make a separate function for freeing struct collisions
      merge-ort: shuffle the computation and cleanup of potential collisions
      merge-ort: fix issue with dual rename and add/add conflict
      merge-ort-wrappers: make printed message match the one from recursive
      merge-resolve: abort if index does not match HEAD
      merge: abort if index does not match HEAD for trivial merges
      merge: do not abort early if one strategy fails to handle the merge
      merge: fix save_state() to work when there are stat-dirty files
      merge: make restore_state() restore staged state too
      merge: ensure we can actually restore pre-merge state
      merge: do not exit restore_state() prematurely
      merge-ort: remove translator lego in new "submodule conflict suggestion"
      merge-ort: avoid surprise with new sub_flag variable
      merge-ort: provide helpful submodule update message when possible
      merge-ort: remove code obsoleted by other changes
      rev-list-options.txt: fix simple typo
      revision: allow --ancestry-path to take an argument
      merge: only apply autostash when appropriate
      merge: cleanup confusing logic for handling successful merges
      merge: small code readability improvement
      t4301: add more interesting merge-tree testcases
      t64xx: convert 'test_create_repo' to 'git init'
      diff: have submodule_format logic avoid additional diff headers
      diff: fix filtering of additional headers under --remerge-diff
      diff: fix filtering of merge commits under --remerge-diff

Emir SARI (3):
      l10n: tr: Update translations for v2.38.0 round #1
      l10n: tr: v2.38.0 round 2
      l10n: tr: v2.38.0 3rd round

Eric DeCosta (1):
      fsmonitor: option to allow fsmonitor to run against network-mounted repos

Eric Sunshine (25):
      t2407: fix broken &&-chains in compound statement
      t1092: fix buggy sparse "blame" test
      t: detect and signal failure within loop
      t4301: account for behavior differences between sed implementations
      t4301: fix broken &&-chains and add missing loop termination
      t4301: emit blank line in more idiomatic fashion
      t: add skeleton chainlint.pl
      chainlint.pl: add POSIX shell lexical analyzer
      chainlint.pl: add POSIX shell parser
      chainlint.pl: add parser to validate tests
      chainlint.pl: add parser to identify test definitions
      chainlint.pl: validate test scripts in parallel
      chainlint.pl: don't require `return|exit|continue` to end with `&&`
      t/Makefile: apply chainlint.pl to existing self-tests
      chainlint.pl: don't require `&` background command to end with `&&`
      chainlint.pl: don't flag broken &&-chain if `$?` handled explicitly
      chainlint.pl: don't flag broken &&-chain if failure indicated explicitly
      chainlint.pl: complain about loops lacking explicit failure handling
      chainlint.pl: allow `|| echo` to signal failure upstream of a pipe
      t/chainlint: add more chainlint.pl self-tests
      test-lib: retire "lint harder" optimization hack
      test-lib: replace chainlint.sed with chainlint.pl
      t/Makefile: teach `make test` and `make prove` to run chainlint.pl
      t: retire unused chainlint.sed
      chainlint: colorize problem annotations and test delimiters

Fangyi Zhou (3):
      help: fix doubled words in explanation for developer interfaces
      l10n: zh_CN v2.38.0 rounds 1 & 2
      l10n: zh_CN: 2.38.0 round 3

Felipe Contreras (7):
      mergetools: vimdiff: fix comment
      mergetools: vimdiff: make vimdiff3 actually work
      mergetools: vimdiff: silence annoying messages
      mergetools: vimdiff: fix for diffopt
      mergetools: vimdiff: rework tab logic
      mergetools: vimdiff: fix single window layouts
      mergetools: vimdiff: simplify tabfirst

Fernando Ramos (1):
      vimdiff: make layout engine more robust against user vim settings

Glen Choo (16):
      submodule--helper: eliminate internal "--update" option
      submodule--helper tests: add missing "display path" coverage
      submodule--helper update: use display path helper
      submodule--helper: don't recreate recursive prefix
      submodule--helper: use correct display path helper
      submodule--helper update: use --super-prefix
      submodule--helper: remove display path helper
      Documentation/git-config.txt: add SCOPES section
      Documentation: define protected configuration
      config: learn `git_protected_config()`
      safe.directory: use git_protected_config()
      setup.c: create `safe.bareRepository`
      config.c: NULL check when reading protected config
      Documentation/git-reflog: remove unneeded \ from \{
      submodule--helper: add "const" to copy of "update_data"
      submodule--helper: refactor "errmsg_str" to be a "struct strbuf"

Goss Geppert (2):
      dir: traverse into repository
      dir: minor refactoring / clean-up

Han Xin (6):
      unpack-objects: low memory footprint for get_data() in dry_run mode
      object-file.c: refactor write_loose_object() to several steps
      object-file.c: add "stream_loose_object()" to handle large object
      unpack-objects: use stream_loose_object() to unpack large objects
      commit-graph.c: no lazy fetch in lookup_commit_in_graph()
      t5330: remove run_with_limited_processses()

Hubert Bossot (1):
      l10n: fr: The word 'branche' is only feminine

Jacob Keller (1):
      remote: handle negative refspecs in git remote show

Jacob Stopak (3):
      Documentation: fix various repeat word typos
      Documentation: clean up a few misspelled word typos
      Documentation: clean up various typos in technical docs

Jaydeep Das (1):
      gpg-interface: add function for converting trust level to string

Jean-Noël Avila (3):
      l10n: fr: v2.38 round 1
      l10n: fr: v2.38.0 round 2
      l10n: fr: v2.38.0 round 3

Jeff King (64):
      is_promisor_object(): walk promisor packs in pack-order
      fetch: stop passing around unused worktrees variable
      branch: drop unused worktrees variable
      revisions.txt: escape "..." to avoid asciidoc horizontal ellipsis
      clone: drop extra newline from warning message
      clone: propagate empty remote HEAD even with other branches
      clone: use remote branch if it matches default HEAD
      clone: move unborn head creation to update_head()
      ref-filter: disable save_commit_buffer while traversing
      diff-files: move misplaced cleanup label
      write_midx_bitmap(): drop unused refs_snapshot parameter
      config.mak.dev: squelch -Wno-missing-braces for older gcc
      tree-walk: add a mechanism for getting non-canonicalized modes
      fsck: actually detect bad file modes in trees
      fsck: downgrade tree badFilemode to "info"
      is_promisor_object(): fix use-after-free of tree buffer
      compat: add function to enable nonblocking pipes
      git-compat-util: make MAX_IO_SIZE define globally available
      pipe_command(): avoid xwrite() for writing to pipe
      pipe_command(): handle ENOSPC when writing to a pipe
      pipe_command(): mark stdin descriptor as non-blocking
      git-compat-util: add UNUSED macro
      refs: mark unused each_ref_fn parameters
      refs: mark unused reflog callback parameters
      refs: mark unused virtual method parameters
      transport: mark bundle transport_options as unused
      streaming: mark unused virtual method parameters
      config: mark unused callback parameters
      hashmap: mark unused callback parameters
      mark unused read_tree_recursive() callback parameters
      run-command: mark unused async callback parameters
      is_path_owned_by_current_uid(): mark "report" parameter as unused
      xdiff: drop unused mmfile parameters from xdl_do_histogram_diff()
      log-tree: drop unused commit param in remerge_diff()
      match_pathname(): drop unused "flags" parameter
      verify_one_sparse(): drop unused parameters
      reftable: drop unused parameter from reader_seek_linear()
      reflog: assert PARSE_OPT_NONEG in parse-options callbacks
      xdiff: drop unused mmfile parameters from xdl_do_patience_diff()
      pass subcommand "prefix" arguments to parse_options()
      maintenance: add parse-options boilerplate for subcommands
      remote: run "remote rm" argv through parse_options()
      pack-bitmap-write: drop unused pack_idx_entry parameters
      tempfile: drop active flag
      tempfile: update comment describing state transitions
      test-crontab: minor memory and error handling fixes
      lookup_commit_in_graph(): use prepare_commit_graph() to check for graph
      rev-list: disable commit graph with --verify-objects
      parse_object(): allow skipping hash check
      upload-pack: skip parse-object re-hashing of "want" objects
      parse_object(): check commit-graph when skip_hash set
      t1060: check partial clone of misnamed blob
      list_objects_filter_copy(): deep-copy sparse_oid_name field
      transport: deep-copy object-filter struct for fetch-pack
      transport: free filter options in disconnect_git()
      list_objects_filter_options: plug leak of filter_spec strings
      prepare_repo_settings(): plug leak of config values
      fetch: stop checking for NULL transport->remote in do_fetch()
      fetch: add branch.*.merge to default ref-prefix extension
      list-objects-filter: don't memset after releasing filter struct
      list-objects-filter: handle null default filter spec
      list-objects-filter: add and use initializers
      list-objects-filter: convert filter_spec to a strbuf
      list-objects-filter: initialize sub-filter structs

Johannes Schindelin (38):
      merge-ort: store messages in a list, not in a single strbuf
      merge-ort: make `path_messages` a strmap to a string_list
      Git 2.30.5
      Git 2.31.4
      Git 2.32.3
      Git 2.33.4
      Git 2.34.4
      Git 2.35.4
      Git 2.36.2
      add --interactive: allow `update` to stage deleted files
      tests: fix incorrect --write-junit-xml code
      mergetool(vimdiff): allow paths to contain spaces again
      shortlog: use a stable sort
      t5351: avoid relying on `core.fsyncMethod = batch` to be supported
      t5351: avoid using `test_cmp` for binary data
      windows: include the Python bits when building Git for Windows
      mingw: remove unneeded `NO_GETTEXT` directive
      mingw: remove unneeded `NO_CURL` directive
      lstat(mingw): correctly detect ENOTDIR scenarios
      merge-ort: clean up after failed merge
      merge-ort: do leave trace2 region even if checkout fails
      setup: fix some formatting
      setup: prepare for more detailed "dubious ownership" messages
      mingw: provide details about unsafe directories' ownership
      mingw: be more informative when ownership check fails on FAT32
      mingw: handle a file owned by the Administrators group correctly
      scalar unregister: stop FSMonitor daemon
      range-diff: reorder argument handling
      range-diff: consistently validate the arguments
      range-diff: optionally accept pathspecs
      add -p: avoid ambiguous signed/unsigned comparison
      t3701: test the built-in `add -i` regardless of NO_PERL
      t6132(NO_PERL): do not run the scripted `add -p`
      add -p: detect more mismatches between plain vs colored diffs
      add -p: gracefully handle unparseable hunk headers in colored diffs
      add -p: ignore dirty submodules
      git help: special-case `scalar`
      scalar: implement the `help` subcommand

Jonathan Tan (1):
      fetch-pack: write effective filter to trace2

Jordi Mas (3):
      l10n: Update Catalan translation
      l10n: Update Catalan translation
      l10n: Update Catalan translation

Josh Steadmon (1):
      fetch-pack: add tracing for negotiation rounds

Julien Rouhaud (1):
      gitweb: remove title shortening heuristics

Junio C Hamano (45):
      revision: mark blobs needed for resolve-undo as reachable
      A regression fix for 2.37
      Git 2.37.1
      builtin/mv.c: use the MOVE_ARRAY() macro instead of memmove()
      The first batch after Git 2.37
      fsck: do not dereference NULL while checking resolve-undo data
      The second batch
      The third batch
      The fourth batch
      The fifth batch
      builtin/remote.c: use the right kind of STRING_LIST_INIT
      The sixth batch
      The seventh batch
      Downmerge a handful of fixes for 2.37.x maintenance track
      The eighth batch
      The ninth batch
      doc: consolidate --rerere-autoupdate description
      doc: clarify rerere-autoupdate
      Downmerge a bit more for 2.37.x
      The tenth batch
      The eleventh batch
      Git 2.37.2
      The twelfth batch
      The thirteenth batch
      The fourteenth batch
      t5329: notice a failure within a loop
      The fifteenth batch
      A handful more topics from the 'master' front for 2.37.3
      pretty: separate out the logic to decide the use of in-body from
      format-patch: allow forcing the use of in-body From: header
      format-patch: learn format.forceInBodyFrom configuration variable
      The sixteenth batch
      Git 2.37.3
      The seventeenth batch
      The eighteenth batch
      The nineteenth batch
      The twentieth batch
      Merge a handful of topics from the 'master' front
      Prepare for 2.38-rc0
      Git 2.38-rc0
      A bit more of remaining topics before -rc1
      Final batch before -rc1
      Git 2.38-rc1
      Git 2.38-rc2
      Git 2.38

Justin Donnelly (1):
      git-prompt: show presence of unresolved conflicts at command prompt

Kilian Kilger (2):
      git-p4: fix bug with encoding of p4 client name
      git-p4: refactoring of p4CmdList()

Kyle Zhao (1):
      send-pack.c: add config push.useBitmaps

Lessley Dennington (1):
      osx-keychain: fix compiler warning

Li Linchao (3):
      ls-files: update test style
      remote-curl: send Accept-Language header to server
      rev-list: support human-readable output for `--disk-usage`

Linus Torvalds (1):
      symbolic-ref: refuse to set syntactically invalid target

Manuel Boni (1):
      config.txt: document include, includeIf

Martin Ågren (4):
      config/core.txt: fix minor issues for `core.sparseCheckoutCone`
      t4200: drop irrelevant code
      read-cache: make `do_read_index()` always set up `istate->repo`
      cmd-list.perl: fix identifying man sections

Matheus Tavares (7):
      checkout: document bug where delayed checkout counts entries twice
      checkout: show bug about failed entries being included in final report
      checkout: fix two bugs on the final count of updated entries
      pkt-line.h: move comment closer to the associated code
      t0021: avoid grepping for a Perl-specific string at filter output
      t0021: implementation the rot13-filter.pl script in C
      tests: use the new C rot13-filter helper to avoid PERL prereq

Matthew John Cheetham (1):
      scalar: enable built-in FSMonitor on `register`

Miaoqian Lin (1):
      commit-graph: Fix missing closedir in expire_commit_graphs

Michael J Gruber (3):
      sequencer: do not translate reflog messages
      sequencer: do not translate parameters to error_resolve_conflict()
      sequencer: do not translate command names

Moritz Baumann (3):
      git-p4: fix CR LF handling for utf16 files
      git-p4: fix typo in P4Submit.applyCommit()
      git-p4: fix error handling in P4Unshelve.renameBranch()

Peter Krefting (2):
      l10n: sv.po: Update Swedish translation (5482t0f0u)
      l10n: sv.po: Update Swedish translation (5484t0f0u)

Philip Oakley (1):
      doc add: renormalize is not idempotent for CRCRLF

Philippe Blain (3):
      diff-format.txt: dst can be 0* SHA-1 when path is deleted, too
      diff-format.txt: correct misleading wording
      diff-index.txt: update raw output format in examples

Phillip Wood (5):
      xdiff: introduce XDL_ALLOC_ARRAY()
      xdiff: introduce xdl_calloc
      xdiff: introduce XDL_CALLOC_ARRAY()
      xdiff: introduce XDL_ALLOC_GROW()
      tests: cache glibc version check

Ralf Thielow (2):
      l10n: de.po: update German translation
      l10n: de.po: update German translation

René Scharfe (28):
      archive: update format documentation
      archive: rename archiver data field to filter_command
      archive-tar: factor out write_block()
      archive-tar: add internal gzip implementation
      archive-tar: use OS_CODE 3 (Unix) for internal gzip
      archive-tar: use internal gzip by default
      combine-diff: abort if --ignore-matching-lines is given
      combine-diff: abort if --output is given
      cocci: avoid normalization rules for memcpy
      mingw: avoid mktemp() in mkstemp() implementation
      mergesort: unify ranks loops
      mergesort: tighten merge loop
      mergesort: add macros for typed sort of linked lists
      test-mergesort: use DEFINE_LIST_SORT_DEBUG
      test-mergesort: use DEFINE_LIST_SORT
      blame: use DEFINE_LIST_SORT
      commit: use DEFINE_LIST_SORT
      fetch-pack: use DEFINE_LIST_SORT
      packfile: use DEFINE_LIST_SORT
      mergesort: remove llist_mergesort()
      nonblock: support Windows
      tempfile: avoid directory cleanup race
      test-mergesort: read sort input all at once
      test-mergesort: use mem_pool for sort input
      diff-no-index: release strbuf on queue error
      diff-no-index: release prefixed filenames
      diff-no-index: simplify argv index calculation
      add -p: fix worktree patch mode prompts

Richard Oliver (1):
      mktree: do not check type of remote objects

SZEDER Gábor (30):
      Makefile: build 'gitweb' in the default target
      multi-pack-index: simplify handling of unknown --options
      index-format.txt: remove outdated list of supported extensions
      git.c: update NO_PARSEOPT markings
      t3301-notes.sh: check that default operation mode doesn't take arguments
      t5505-remote.sh: check the behavior without a subcommand
      t0040-parse-options: test parse_options() with various 'parse_opt_flags'
      api-parse-options.txt: fix description of OPT_CMDMODE
      parse-options: PARSE_OPT_KEEP_UNKNOWN only applies to --options
      parse-options: clarify the limitations of PARSE_OPT_NODASH
      parse-options: drop leading space from '--git-completion-helper' output
      parse-options: add support for parsing subcommands
      builtin/bundle.c: let parse-options parse subcommands
      builtin/commit-graph.c: let parse-options parse subcommands
      builtin/gc.c: let parse-options parse 'git maintenance's subcommands
      builtin/hook.c: let parse-options parse subcommands
      builtin/multi-pack-index.c: let parse-options parse subcommands
      builtin/notes.c: let parse-options parse subcommands
      builtin/reflog.c: let parse-options parse subcommands
      builtin/remote.c: let parse-options parse subcommands
      builtin/sparse-checkout.c: let parse-options parse subcommands
      builtin/stash.c: let parse-options parse subcommands
      builtin/worktree.c: let parse-options parse subcommands
      promisor-remote: fix xcalloc() argument order
      t0040-parse-options: remove leftover debugging
      test-parse-options.c: don't use for loop initial declaration
      test-parse-options.c: fix style of comparison with zero
      notes: simplify default operation mode arguments check
      notes, remote: show unknown subcommands between `'
      t/Makefile: remove 'test-results' on 'make clean'

Shaoxuan Yuan (22):
      t7002: add tests for moving out-of-cone file/directory
      t1092: mv directory from out-of-cone to in-cone
      mv: update sparsity after moving from out-of-cone to in-cone
      mv: decouple if/else-if checks using goto
      mv: check if out-of-cone file exists in index with SKIP_WORKTREE bit
      mv: check if <destination> exists in index to handle overwriting
      mv: use flags mode for update_mode
      mv: add check_dir_in_index() and solve general dir check issue
      t1092: add tests for `git-rm`
      pathspec.h: move pathspec_needs_expanded_index() from reset.c to here
      rm: expand the index only when necessary
      rm: integrate with sparse-index
      t7002: add tests for moving from in-cone to out-of-cone
      mv: rename check_dir_in_index() to empty_dir_has_sparse_contents()
      mv: free the with_slash in check_dir_in_index()
      mv: check if <destination> is a SKIP_WORKTREE_DIR
      mv: remove BOTH from enum update_mode
      mv: from in-cone to out-of-cone
      mv: cleanup empty WORKING_DIRECTORY
      advice.h: add advise_on_moving_dirty_path()
      mv: check overwrite for in-to-out move
      builtin/mv.c: fix possible segfault in add_slash()

Siddharth Asthana (4):
      revision: improve commit_rewrite_person()
      ident: move commit_rewrite_person() to ident.c
      ident: rename commit_rewrite_person() to apply_mailmap_to_header()
      cat-file: add mailmap support

Tao Klerks (1):
      rev-parse: documentation adjustment - mention remote tracking with @{u}

Taylor Blau (14):
      pack-objects.h: remove outdated pahole results
      commit-graph: pass repo_settings instead of repository
      t5318: demonstrate commit-graph generation v2 corruption
      commit-graph: introduce `repo_find_commit_pos_in_graph()`
      commit-graph: fix corrupt upgrade from generation v1 to v2
      t1006: extract --batch-command inputs to variables
      builtin/cat-file.c: support NUL-delimited input with `-z`
      t5326: demonstrate potential bitmap corruption
      t/lib-bitmap.sh: avoid silencing stderr
      midx.c: extract `struct midx_fanout`
      midx.c: extract `midx_fanout_add_midx_fanout()`
      midx.c: extract `midx_fanout_add_pack_fanout()`
      midx.c: include preferred pack correctly with existing MIDX
      midx.c: avoid adding preferred objects twice

Teng Long (8):
      pack-bitmap.c: fix formatting of error messages
      pack-bitmap.c: mark more strings for translations
      pack-bitmap.c: rename "idx_name" to "bitmap_name"
      pack-bitmap.c: do not ignore error when opening a bitmap file
      pack-bitmap.c: using error() instead of silently returning -1
      pack-bitmap.c: continue looping when first MIDX bitmap is found
      api-trace2.txt: print config key-value pair
      tr2: shows scope unconditionally in addition to key-value pair

Todd Zullinger (2):
      docs: fix a few recently broken links
      api docs: link to html version of api-trace2

Victoria Dye (37):
      scalar: reword command documentation to clarify purpose
      scalar: convert README.md into a technical design doc
      checkout: fix nested sparse directory diff in sparse index
      oneway_diff: handle removed sparse directories
      cache.h: create 'index_name_pos_sparse()'
      unpack-trees: unpack new trees as sparse directories
      scalar-diagnose: use "$GIT_UNZIP" in test
      scalar-diagnose: avoid 32-bit overflow of size_t
      scalar-diagnose: add directory to archiver more gently
      scalar-diagnose: move 'get_disk_info()' to 'compat/'
      scalar-diagnose: move functionality to common location
      diagnose.c: add option to configure archive contents
      builtin/diagnose.c: create 'git diagnose' builtin
      builtin/diagnose.c: add '--mode' option
      builtin/bugreport.c: create '--diagnose' option
      scalar-diagnose: use 'git diagnose --mode=all'
      scalar: update technical doc roadmap
      scalar: constrain enlistment search
      scalar-unregister: handle error codes greater than 0
      scalar-[un]register: clearly indicate source of error
      scalar-delete: do not 'die()' in 'delete_enlistment()'
      scalar: move config setting logic into its own function
      scalar: update technical doc roadmap with FSMonitor support
      p0004: fix prereq declaration
      p0006: fix 'read-tree' argument ordering
      unpack-trees: fix sparse directory recursion check
      scalar: fix command documentation section header
      scalar: include in standard Git build & installation
      scalar: add to 'git help -a' command list
      scalar-clone: add test coverage
      t/perf: add Scalar performance tests
      t/perf: add 'GIT_PERF_USE_SCALAR' run option
      Documentation/technical: include Scalar technical doc
      diagnose.c: refactor to safely use 'd_type'
      Documentation: add ReviewingGuidelines
      diagnose: add to command-list.txt
      version: fix builtin linking & documentation

Yi-Jyun Pan (1):
      l10n: zh_TW.po: Git 2.38.0, round 3

ZheNing Hu (2):
      ls-files: introduce "--format" option
      ls-files: fix black space in error message

brian m. carlson (2):
      sha256: add support for Nettle
      gc: use temporary file for editing crontab

Ævar Arnfjörð Bjarmason (153):
      t0008: don't rely on default ".git/info/exclude"
      tests: don't depend on template-created .git/branches
      tests: don't assume a .git/info for .git/info/grafts
      tests: don't assume a .git/info for .git/info/attributes
      tests: don't assume a .git/info for .git/info/refs
      tests: don't assume a .git/info for .git/info/exclude
      tests: don't assume a .git/info for .git/info/sparse-checkout
      object-file.c: factor out deflate part of write_loose_object()
      core doc: modernize core.bigFileThreshold documentation
      git-submodule.sh: remove unused sanitize_submodule_env()
      git-submodule.sh: remove unused $prefix variable
      git-submodule.sh: make the "$cached" variable a boolean
      git-submodule.sh: remove unused top-level "--branch" argument
      submodule--helper: have --require-init imply --init
      submodule update: remove "-v" option
      submodule--helper: rename "absorb-git-dirs" to "absorbgitdirs"
      submodule--helper: report "submodule" as our name in some "-h" output
      submodule--helper: understand --checkout, --merge and --rebase synonyms
      git-submodule.sh: use "$quiet", not "$GIT_QUIET"
      git-sh-setup.sh: remove "say" function, change last users
      gitweb/Makefile: define all .PHONY prerequisites inline
      gitweb/Makefile: add a $(GITWEB_ALL) variable
      gitweb/Makefile: clear up and de-duplicate the gitweb.{css,js} vars
      gitweb/Makefile: prepare to merge into top-level Makefile
      gitweb: remove "test" and "test-installed" targets
      gitweb/Makefile: include in top-level Makefile
      gitweb/Makefile: add a "NO_GITWEB" parameter
      tests: add missing double quotes to included library paths
      test-lib.sh: fix prepend_var() quoting issue
      config tests: fix harmless but broken "rm -r" cleanup
      submodule--helper: remove unused SUPPORT_SUPER_PREFIX flags
      check-ref-format: fix trivial memory leak
      clone: fix memory leak in wanted_peer_refs()
      submodule.c: free() memory from xgetcwd()
      revert: free "struct replay_opts" members
      cat-file: fix a memory leak in --batch-command mode
      merge-file: refactor for subsequent memory leak fix
      merge-file: fix memory leaks on error path
      checkout: avoid "struct unpack_trees_options" leak
      gc: fix a memory leak
      cat-file: fix a common "struct object_context" memory leak
      pull: fix a "struct oid_array" memory leak
      test-tool test-hash: fix a memory leak
      test-tool path-utils: fix a memory leak
      test-tool {dump,scrap}-cache-tree: fix memory leaks
      test-tool urlmatch-normalization: fix a memory leak
      test-tool regex: call regfree(), fix memory leaks
      test-tool json-writer: fix memory leaks
      test-tool bloom: fix memory leaks
      test-tool ref-store: fix a memory leak
      test-tool delta: fix a memory leak
      Makefile: remove mandatory "spatch" arguments from SPATCH_FLAGS
      Makefile & .gitignore: ignore & clean "git.res", not "*.res"
      cocci: add a "coccicheck-test" target and test *.cocci rules
      cocci: have "coccicheck{,-pending}" depend on "coccicheck-test"
      cocci: add and apply a rule to find "unused" strbufs
      cocci: generalize "unused" rule to cover more than "strbuf"
      trace2: only include "fsync" events if we git_fsync()
      test-lib: use $1, not $@ in test_known_broken_{ok,failure}_
      test-lib: don't set GIT_EXIT_OK before calling test_atexit_handler
      test-lib: fix GIT_EXIT_OK logic errors, use BAIL_OUT
      test-lib: add a --invert-exit-code switch
      t/README: reword the "GIT_TEST_PASSING_SANITIZE_LEAK" description
      test-lib: add a SANITIZE=leak logging mode
      t/Makefile: don't remove test-results in "clean-except-prove-cache"
      tests: move copy/pasted PERL + Test::More checks to a lib-perl.sh
      test-lib: simplify by removing test_external
      test-lib: add a GIT_TEST_PASSING_SANITIZE_LEAK=check mode
      test-lib: have the "check" mode for SANITIZE=leak consider leak logs
      leak tests: don't skip some tests under SANITIZE=leak
      leak tests: mark passing SANITIZE=leak tests as leak-free
      upload-pack: fix a memory leak in create_pack_file()
      CI: use "GIT_TEST_SANITIZE_LEAK_LOG=true" in linux-leaks
      bisect.c: add missing "goto" for release_revisions()
      test-fast-rebase helper: use release_revisions() (again)
      log: fix a memory leak in "git show <revision>..."
      log: refactor "rev.pending" code in cmd_show()
      bisect.c: partially fix bisect_rev_setup() memory leak
      revisions API: don't leak memory on argv elements that need free()-ing
      help.c: refactor drop_prefix() to use a "switch" statement"
      help.c: remove common category behavior from drop_prefix() behavior
      git help doc: use "<doc>" instead of "<guide>"
      git docs: add a category for user-facing file, repo and command UX
      git docs: add a category for file formats, protocols and interfaces
      docs: move commit-graph format docs to man section 5
      docs: move protocol-related docs to man section 5
      docs: move index format docs to man section 5
      docs: move signature docs to man section 5
      docs: move pack format docs to man section 5
      docs: move cruft pack docs to gitformat-pack
      docs: move http-protocol docs to man section 5
      hook API: don't segfault on strbuf_addf() to NULL "out"
      Makefile + hash.h: remove PPC_SHA1 implementation
      Makefile: use $(OBJECTS) instead of $(C_OBJ)
      git-compat-util.h: use "UNUSED", not "UNUSED(var)"
      git-compat-util.h: use "deprecated" for UNUSED variables
      submodule tests: test usage behavior
      submodule tests: test for "add <repository> <abs-path>"
      submodule--helper: remove unused "name" helper
      submodule--helper: remove unused "list" helper
      test-tool submodule-config: remove unused "--url" handling
      submodule--helper: move "is-active" to a test-tool
      submodule--helper: move "check-name" to a test-tool
      submodule--helper: move "resolve-relative-url-test" to a test-tool
      submodule--helper style: don't separate declared variables with \n\n
      submodule--helper style: add \n\n after variable declarations
      submodule--helper: replace memset() with { 0 }-initialization
      submodule--helper: use xstrfmt() in clone_submodule()
      submodule--helper: move "sb" in clone_submodule() to its own scope
      submodule--helper: add "const" to passed "module_clone_data"
      submodule--helper: add "const" to passed "struct update_data"
      submodule--helper: don't redundantly check "else if (res)"
      submodule--helper: rename "int res" to "int ret"
      submodule--helper: return "ret", not "1" from update_submodule()
      submodule--helper: add missing braces to "else" arm
      submodule--helper: don't call submodule_strategy_to_string() in BUG()
      submodule API: don't handle SM_..{UNSPECIFIED,COMMAND} in to_string()
      submodule--helper: use "code" in run_update_command()
      submodule--helper: don't exit() on failure, return
      submodule--helper: libify determine_submodule_update_strategy()
      submodule--helper: libify "must_die_on_failure" code paths
      submodule--helper update: don't override 'checkout' exit code
      submodule--helper: libify "must_die_on_failure" code paths (for die)
      submodule--helper: check repo{_submodule,}_init() return values
      submodule--helper: libify more "die" paths for module_update()
      submodule--helper: libify even more "die" paths for module_update()
      submodule--helper: fix bad config API usage
      submodule--helper: fix a leak in "clone_submodule"
      submodule--helper: fix trivial get_default_remote_submodule() leak
      submodule--helper: fix most "struct pathspec" memory leaks
      submodule--helper: "struct pathspec" memory leak in module_update()
      submodule--helper: don't leak {run,capture}_command() cp.dir argument
      submodule--helper: add and use *_release() functions
      submodule--helper: fix "errmsg_str" memory leak
      submodule--helper: fix "sm_path" and other "module_cb_list" leaks
      submodule--helper: fix a leak with repo_clear()
      submodule--helper: fix a memory leak in get_default_remote_submodule()
      submodule--helper: fix "reference" leak
      submodule--helper: fix obscure leak in module_add()
      submodule--helper: fix a leak in module_add()
      submodule--helper: fix a memory leak in print_status()
      submodule--helper: free some "displaypath" in "struct update_data"
      submodule--helper: free rest of "displaypath" in "struct update_data"
      submodule--helper: fix a configure_added_submodule() leak
      docs: add and use include template for config/* includes
      grep docs: de-duplicate configuration sections
      send-email docs: de-duplicate configuration sections
      apply docs: de-duplicate configuration sections
      notes docs: de-duplicate and combine configuration sections
      difftool docs: de-duplicate configuration sections
      log docs: de-duplicate configuration sections
      docs: add CONFIGURATION sections that map to a built-in
      docs: add CONFIGURATION sections that fuzzy map to built-ins

Øystein Walle (1):
      rev-parse --parseopt: detect missing opt-spec


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.38.0-rc2
@ 2022-09-27 21:10  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2022-09-27 21:10 UTC (permalink / raw)
  To: git; +Cc: git-packagers

A release candidate Git v2.38.0-rc2 is now available for testing at
the usual places.  It is comprised of 673 non-merge commits since
v2.37.0, contributed by 81 people, 23 of which are new faces [*].

The manpage generation problem in -rc1 has been corrected.  Other
than that, there aren't that many changes since -rc1.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.38.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.37.0 are as follows.
Welcome to the Git development community!

  Andrew Olsen, Anthony Delannoy, Carlos López, Celeste Liu,
  Cleber Rosa, David Plumpton, Elijah Conners, Eric DeCosta, Goss
  Geppert, Ilya K, Ingy dot Net, Jacob Stopak, Julien Rouhaud,
  Kilian Kilger, Lana Deere, Manuel Boni, Matthew Klein, Miaoqian
  Lin, Moritz Baumann, Pavel Rappo, Pierre Garnier, Richard Oliver,
  and Xavier Morel.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Abhradeep Chakraborty, Adam Dinwoodie, Ævar Arnfjörð
  Bjarmason, Alex Henrie, Arthur Milchior, brian m. carlson,
  Calvin Wan, Carlo Marcelo Arenas Belón, Christian Couder,
  Christoph Reiter, Derrick Stolee, Dimitriy Ryazantcev, Đoàn
  Trần Công Danh, Elijah Newren, Emily Shaffer, Eric Sunshine,
  Fangyi Zhou, Felipe Contreras, Fernando Ramos, Glen Choo,
  Han Xin, Hariom Verma, Jacob Keller, Jaydeep Das, Jeff King,
  Jiang Xin, Joey Hess, Johannes Schindelin, John Cai, Jonathan
  Tan, Josh Steadmon, Junio C Hamano, Justin Donnelly, Kyle Zhao,
  Lessley Dennington, Li Linchao, Linus Torvalds, Martin Ågren,
  Matheus Tavares, Matthew John Cheetham, Michael J Gruber,
  Øystein Walle, Philip Oakley, Philippe Blain, Phillip Wood,
  Randall S. Becker, Renato Botelho, René Scharfe, Shaoxuan Yuan,
  Siddharth Asthana, SZEDER Gábor, Tao Klerks, Taylor Blau,
  Teng Long, Todd Zullinger, Torsten Bögershausen, Victoria Dye,
  and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.38 Release Notes (draft)
===============================

UI, Workflows & Features

 * "git remote show [-n] frotz" now pays attention to negative
   pathspec.

 * "git push" sometimes performs poorly when reachability bitmaps are
   used, even in a repository where other operations are helped by
   bitmaps.  The push.useBitmaps configuration variable is introduced
   to allow disabling use of reachability bitmaps only for "git push".

 * "git grep -m<max-hits>" is a way to limit the hits shown per file.

 * "git merge-tree" learned a new mode where it takes two commits and
   computes a tree that would result in the merge commit, if the
   histories leading to these two commits were to be merged.

 * "git mv A B" in a sparsely populated working tree can be asked to
   move a path between directories that are "in cone" (i.e. expected
   to be materialized in the working tree) and "out of cone"
   (i.e. expected to be hidden).  The handling of such cases has been
   improved.

 * Earlier, HTTP transport clients learned to tell the server side
   what locale they are in by sending Accept-Language HTTP header, but
   this was done only for some requests but not others.

 * Introduce a safe.barerepository configuration variable that
   allows users to forbid discovery of bare repositories.

 * Various messages that come from the pack-bitmap codepaths have been
   tweaked.

 * "git rebase -i" learns to update branches whose tip appear in the
   rebased range with "--update-refs" option.

 * "git ls-files" learns the "--format" option to tweak its output.

 * "git cat-file" learned an option to use the mailmap when showing
   commit and tag objects.

 * When "git merge" finds that it cannot perform a merge, it should
   restore the working tree to the state before the command was
   initiated, but in some corner cases it didn't.

 * Operating modes like "--batch" of "git cat-file" command learned to
   take NUL-terminated input, instead of one-item-per-line.

 * "git rm" has become more aware of the sparse-index feature.

 * "git rev-list --disk-usage" learned to take an optional value
   "human" to show the reported value in human-readable format, like
   "3.40MiB".

 * The "diagnose" feature to create a zip archive for diagnostic
   material has been lifted from "scalar" and made into a feature of
   "git bugreport".

 * The namespaces used by "log --decorate" from "refs/" hierarchy by
   default has been tightened.

 * "git rev-list --ancestry-path=C A..B" is a natural extension of
   "git rev-list A..B"; instead of choosing a subset of A..B to those
   that have ancestry relationship with A, it lets a subset with
   ancestry relationship with C.

 * "scalar" now enables built-in fsmonitor on enlisted repositories,
   when able.

 * The bash prompt (in contrib/) learned to optionally indicate when
   the index is unmerged.

 * "git clone" command learned the "--bundle-uri" option to coordinate
   with hosting sites the use of pre-prepared bundle files.

 * "git range-diff" learned to honor pathspec argument if given.

 * "git format-patch --from=<ident>" can be told to add an in-body
   "From:" line even for commits that are authored by the given
   <ident> with "--force-in-body-from" option.

 * The built-in fsmonitor refuses to work on a network mounted
   repositories; a configuration knob for users to override this has
   been introduced.

 * The "scalar" addition from Microsoft is now part of the core Git
   installation.


Performance, Internal Implementation, Development Support etc.

 * Collection of what is referenced by objects in promisor packs have
   been optimized to inspect these objects in the in-pack order.

 * Introduce a helper to see if a branch is already being worked on
   (hence should not be newly checked out in a working tree), which
   performs much better than the existing find_shared_symref() to
   replace many uses of the latter.

 * Teach "git archive" to (optionally and then by default) avoid
   spawning an external "gzip" process when creating ".tar.gz" (and
   ".tgz") archives.

 * Allow large objects read from a packstream to be streamed into a
   loose object file straight, without having to keep it in-core as a
   whole.

 * Further preparation to turn git-submodule.sh into a builtin
   continues.

 * Apply Coccinelle rule to turn raw memmove() into MOVE_ARRAY() cpp
   macro, which would improve maintainability and readability.

 * Teach "make all" to build gitweb as well.

 * Tweak tests so that they still work when the "git init" template
   did not create .git/info directory.

 * Add Coccinelle rules to detect the pattern of initializing and then
   finalizing a structure without using it in between at all, which
   happens after code restructuring and the compilers fail to
   recognize as an unused variable.

 * The code to convert between GPG trust level strings and internal
   constants we use to represent them have been cleaned up.

 * Support for libnettle as SHA256 implementation has been added.

 * The way "git multi-pack" uses parse-options API has been improved.

 * A Coccinelle rule (in contrib/) to encourage use of COPY_ARRAY
   macro has been improved.

 * API tweak to make it easier to run fuzz testing on commit-graph parser.

 * Omit fsync-related trace2 entries when their values are all zero.

 * The codepath to write multi-pack index has been taught to release a
   large chunk of memory that holds an array of objects in the packs,
   as soon as it is done with the array, to reduce memory consumption.

 * Add a level of redirection to array allocation API in xdiff part,
   to make it easier to share with the libgit2 project.

 * "git fetch" client logs the partial clone filter used in the trace2
   output.

 * The "bundle URI" design gets documented.

 * The common ancestor negotiation exchange during a "git fetch"
   session now leaves trace log.

 * Test portability improvements.
   (merge 4d1d843be7 mt/rot13-in-c later to maint).

 * The "subcommand" mode is introduced to parse-options API and update
   the command line parser of Git commands with subcommands.

 * The pack bitmap file gained a bitmap-lookup table to speed up
   locating the necessary bitmap for a given commit.

 * The assembly version of SHA-1 implementation for PPC has been
   removed.

 * The server side that responds to "git fetch" and "git clone"
   request has been optimized by allowing it to send objects in its
   object store without recomputing and validating the object names.

 * Annotate function parameters that are not used (but cannot be
   removed for structural reasons), to prepare us to later compile
   with -Wunused warning turned on.

 * Share the text used to explain configuration variables used by "git
   <subcmd>" in "git help <subcmd>" with the text from "git help config".

 * "git mv A B" in a sparsely populated working tree can be asked to
   move a path from a directory that is "in cone" to another directory
   that is "out of cone".  Handling of such a case has been improved.

 * The chainlint script for our tests has been revamped.


Fixes since v2.37
-----------------

 * Rewrite of "git add -i" in C that appeared in Git 2.25 didn't
   correctly record a removed file to the index, which was fixed.

 * Certain diff options are currently ignored when combined-diff is
   shown; mark them as incompatible with the feature.

 * Adjust technical/bitmap-format to be formatted by AsciiDoc, and
   add some missing information to the documentation.

 * Fixes for tests when the source directory has unusual characters in
   its path, e.g. whitespaces, double-quotes, etc.

 * "git mktree --missing" lazily fetched objects that are missing from
   the local object store, which was totally unnecessary for the purpose
   of creating the tree object(s) from its input.

 * Give _() markings to fatal/warning/usage: labels that are shown in
   front of these messages.

 * References to commands-to-be-typed-literally in "git rebase"
   documentation mark-up have been corrected.

 * In a non-bare repository, the behavior of Git when the
   core.worktree configuration variable points at a directory that has
   a repository as its subdirectory, regressed in Git 2.27 days.

 * Recent update to vimdiff layout code has been made more robust
   against different end-user vim settings.

 * Plug various memory leaks, both in the main code and in test-tool
   commands.

 * Fixes a long-standing corner case bug around directory renames in
   the merge-ort strategy.

 * The resolve-undo information in the index was not protected against
   GC, which has been corrected.

 * A corner case bug where lazily fetching objects from a promisor
   remote resulted in infinite recursion has been corrected.

 * "git clone" from a repository with some ref whose HEAD is unborn
   did not set the HEAD in the resulting repository correctly, which
   has been corrected.

 * An earlier attempt to plug leaks placed a clean-up label to jump to
   at a bogus place, which as been corrected.

 * Variable quoting fix in the vimdiff driver of "git mergetool"

 * "git shortlog -n" relied on the underlying qsort() to be stable,
   which shouldn't have.  Fixed.

 * A fix for a regression in test framework.

 * mkstemp() emulation on Windows has been improved.

 * Add missing documentation for "include" and "includeIf" features in
   "git config" file format, which incidentally teaches the command
   line completion to include them in its offerings.

 * Avoid "white/black-list" in documentation and code comments.

 * Workaround for a compiler warning against use of die() in
   osx-keychain (in contrib/).

 * Workaround for a false positive compiler warning.

 * "git p4" working on UTF-16 files on Windows did not implement
   CRLF-to-LF conversion correctly, which has been corrected.

 * "git p4" did not handle non-ASCII client name well, which has been
   corrected.

 * "rerere-train" script (in contrib/) used to honor commit.gpgSign
   while recreating the throw-away merges.

 * "git checkout" miscounted the paths it updated, which has been
   corrected.

 * Fix for a bug that makes write-tree to fail to write out a
   non-existent index as a tree, introduced in 2.37.

 * There was a bug in the codepath to upgrade generation information
   in commit-graph from v1 to v2 format, which has been corrected.

 * Gitweb had legacy URL shortener that is specific to the way
   projects hosted on kernel.org used to (but no longer) work, which
   has been removed.

 * Fix build procedure for Windows that uses CMake so that it can pick
   up the shell interpreter from local installation location.

 * Conditionally allow building Python interpreter on Windows

 * Fix to lstat() emulation on Windows.

 * Older gcc with -Wall complains about the universal zero initializer
   "struct s = { 0 };" idiom, which makes developers' lives
   inconvenient (as -Werror is enabled by DEVELOPER=YesPlease).  The
   build procedure has been tweaked to help these compilers.

 * Plug memory leaks in the failure code path in the "merge-ort" merge
   strategy backend.

 * "git symbolic-ref symref non..sen..se" is now diagnosed as an error.

 * A follow-up fix to a fix for a regression in 2.36 around hooks.

 * Avoid repeatedly running getconf to ask libc version in the test
   suite, and instead just as it once per script.

 * Platform-specific code that determines if a directory is OK to use
   as a repository has been taught to report more details, especially
   on Windows.

 * "vimdiff3" regression fix.

 * "git fsck" reads mode from tree objects but canonicalizes the mode
   before passing it to the logic to check object sanity, which has
   hid broken tree objects from the checking logic.  This has been
   corrected, but to help existing projects with broken tree objects
   that they cannot fix retroactively, the severity of anomalies this
   code detects has been demoted to "info" for now.

 * Fixes to sparse index compatibility work for "reset" and "checkout"
   commands.

 * An earlier optimization discarded a tree-object buffer that is
   still in use, which has been corrected.

 * Fix deadlocks between main Git process and subprocess spawned via
   the pipe_command() API, that can kill "git add -p" that was
   reimplemented in C recently.

 * The sequencer machinery translated messages left in the reflog by
   mistake, which has been corrected.

 * xcalloc(), imitating calloc(), takes "number of elements of the
   array", and "size of a single element", in this order.  A call that
   does not follow this ordering has been corrected.

 * The preload-index codepath made copies of pathspec to give to
   multiple threads, which were left leaked.

 * Update the version of Ubuntu used for GitHub Actions CI from 18.04
   to 22.04.

 * The auto-stashed local changes created by "git merge --autostash"
   was mixed into a conflicted state left in the working tree, which
   has been corrected.

 * Multi-pack index got corrupted when preferred pack changed from one
   pack to another in a certain way, which has been corrected.
   (merge 99e4d084ff tb/midx-with-changing-preferred-pack-fix later to maint).

 * The clean-up of temporary files created via mks_tempfile_dt() was
   racy and attempted to unlink() the leading directory when signals
   are involved, which has been corrected.
   (merge babe2e0559 rs/tempfile-cleanup-race-fix later to maint).

 * FreeBSD portability fix for "git maintenance" that spawns "crontab"
   to schedule tasks.
   (merge ee69e7884e bc/gc-crontab-fix later to maint).

 * Those who use diff-so-fancy as the diff-filter noticed a regression
   or two in the code that parses the diff output in the built-in
   version of "add -p", which has been corrected.
   (merge 0a101676e5 js/add-p-diff-parsing-fix later to maint).

 * Segfault fix-up to an earlier fix to the topic to teach "git reset"
   and "git checkout" work better in a sparse checkout.
   (merge 037f8ea6d9 vd/sparse-reset-checkout-fixes later to maint).

 * "git diff --no-index A B" managed its the pathnames of its two
   input files rather haphazardly, sometimes leaking them.  The
   command line argument processing has been straightened out to clean
   it up.
   (merge 2b43dd0eb5 rs/diff-no-index-cleanup later to maint).

 * "git rev-list --verify-objects" ought to inspect the contents of
   objects and notice corrupted ones, but it didn't when the commit
   graph is in use, which has been corrected.
   (merge b27ccae34b jk/rev-list-verify-objects-fix later to maint).

 * More fixes to "add -p"
   (merge 64ec8efb83 js/builtin-add-p-portability-fix later to maint).

 * The parser in the script interface to parse-options in "git
   rev-parse" has been updated to diagnose a bogus input correctly.
   (merge f20b9c36d0 ow/rev-parse-parseopt-fix later to maint).

 * The code that manages list-object-filter structure, used in partial
   clones, leaked the instances, which has been plugged.
   (merge 66eede4a37 jk/plug-list-object-filter-leaks later to maint).

 * Fix another UI regression in the reimplemented "add -p".
   (merge f6f0ee247f rs/add-p-worktree-mode-prompt-fix later to maint).

 * "git fetch" over protocol v2 sent an incorrect ref prefix request
   to the server and made "git pull" with configured fetch refspec
   that does not cover the remote branch to merge with fail, which has
   been corrected.
   (merge 49ca2fba39 jk/proto-v2-ref-prefix-fix later to maint).

 * A result from opendir() was leaking in the commit-graph expiration
   codepath, which has been plugged.
   (merge 12f1ae5324 ml/commit-graph-expire-dir-leak-fix later to maint).

 * Just like we have coding guidelines, we now have guidelines for
   reviewers.
   (merge e01b851923 vd/doc-reviewing-guidelines later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 77b9e85c0f vd/fix-perf-tests later to maint).
   (merge 0682bc43f5 jk/test-crontab-fixes later to maint).
   (merge b46dd1726c cc/doc-trailer-whitespace-rules later to maint).

----------------------------------------------------------------

Changes since v2.37.0 are as follows:

Abhradeep Chakraborty (9):
      bitmap-format.txt: feed the file to asciidoc to generate html
      bitmap-format.txt: fix some formatting issues
      bitmap-format.txt: add information for trailing checksum
      Documentation/technical: describe bitmap lookup table extension
      bitmap: move `get commit positions` code to `bitmap_writer_finish`
      pack-bitmap-write.c: write lookup table extension
      pack-bitmap-write: learn pack.writeBitmapLookupTable and add tests
      pack-bitmap: prepare to read lookup table extension
      bitmap-lookup-table: add performance tests for lookup table

Adam Dinwoodie (1):
      t1800: correct test to handle Cygwin

Alex Henrie (3):
      gc: don't translate literal commands
      builtin/diagnose.c: don't translate the two mode values
      pack-bitmap: improve grammar of "xor chain" error message

Anthony Delannoy (1):
      preload-index: fix memleak

Calvin Wan (1):
      submodule merge: update conflict error message

Carlo Marcelo Arenas Belón (2):
      setup: tighten ownership checks post CVE-2022-24765
      cmake: support local installations of git

Carlos López (1):
      grep: add --max-count command line option

Celeste Liu (1):
      contrib/rerere-train: avoid useless gpg sign in training

Christian Couder (1):
      Documentation: clarify whitespace rules for trailers

Cleber Rosa (1):
      setup: fix function name in a BUG() message

Derrick Stolee (51):
      branch: add branch_checked_out() helper
      branch: check for bisects and rebases
      fetch: use new branch_checked_out() and add tests
      branch: use branch_checked_out() when deleting refs
      branch: fix branch_checked_out() leaks
      t5510: replace 'origin' with URL more carefully
      vscode: improve tab size and wrapping
      git-rebase.txt: use back-ticks consistently
      pack-bitmap-write: use const for hashes
      midx: extract bitmap write setup
      midx: reduce memory pressure while writing bitmaps
      daemon: clarify directory arguments
      git-cvsserver: clarify directory list
      git.txt: remove redundant language
      t: avoid "whitelist"
      transport.c: avoid "whitelist"
      t2407: test bisect and rebase as black-boxes
      t2407: test branches currently using apply backend
      branch: consider refs under 'update-refs'
      rebase-interactive: update 'merge' description
      sequencer: define array with enum values
      sequencer: add update-ref command
      rebase: add --update-refs option
      rebase: update refs from 'update-ref' commands
      sequencer: rewrite update-refs as user edits todo list
      rebase: add rebase.updateRefs config option
      sequencer: ignore HEAD ref under --update-refs
      sequencer: notify user of --update-refs activity
      compat/win32: correct for incorrect compiler warning
      refs: allow "HEAD" as decoration filter
      t4207: modernize test
      t4207: test coloring of grafted decorations
      refs: add array of ref namespaces
      refs: use ref_namespaces for replace refs base
      log-tree: use ref_namespaces instead of if/else-if
      log: add default decoration filter
      log: add --clear-decorations option
      log: create log.initialDecorationSet=all
      maintenance: stop writing log.excludeDecoration
      fetch: use ref_namespaces during prefetch
      docs: document bundle URI standard
      bundle-uri: add example bundle organization
      remote-curl: add 'get' capability
      bundle-uri: create basic file-copy logic
      clone: add --bundle-uri option
      bundle-uri: add support for http(s):// and file://
      clone: --bundle-uri cannot be combined with --depth
      t6019: modernize tests with helper
      clone: warn on failure to repo_init()
      ci: update 'static-analysis' to Ubuntu 22.04
      pack-bitmap: remove trace2 region from hot path

Dimitriy Ryazantcev (1):
      i18n: mark message helpers prefix for translation

Elijah Conners (1):
      reftable: use a pointer for pq_entry param

Elijah Newren (43):
      merge-tree: rename merge_trees() to trivial_merge_trees()
      merge-tree: move logic for existing merge into new function
      merge-tree: add option parsing and initial shell for real merge function
      merge-tree: implement real merges
      merge-ort: split out a separate display_update_messages() function
      merge-tree: support including merge messages in output
      merge-ort: provide a merge_get_conflicted_files() helper function
      merge-ort: remove command-line-centric submodule message from merge-ort
      merge-tree: provide a list of which files have conflicts
      merge-tree: provide easy access to `ls-files -u` style info
      merge-ort: store more specific conflict information
      merge-ort: optionally produce machine-readable output
      merge-tree: allow `ls-files -u` style info to be NUL terminated
      merge-tree: add a --allow-unrelated-histories flag
      git-merge-tree.txt: add a section on potentional usage mistakes
      t6429: fix use of non-existent function
      t6423: add tests of dual directory rename plus add/add conflict
      merge-ort: small cleanups of check_for_directory_rename
      merge-ort: make a separate function for freeing struct collisions
      merge-ort: shuffle the computation and cleanup of potential collisions
      merge-ort: fix issue with dual rename and add/add conflict
      merge-ort-wrappers: make printed message match the one from recursive
      merge-resolve: abort if index does not match HEAD
      merge: abort if index does not match HEAD for trivial merges
      merge: do not abort early if one strategy fails to handle the merge
      merge: fix save_state() to work when there are stat-dirty files
      merge: make restore_state() restore staged state too
      merge: ensure we can actually restore pre-merge state
      merge: do not exit restore_state() prematurely
      merge-ort: remove translator lego in new "submodule conflict suggestion"
      merge-ort: avoid surprise with new sub_flag variable
      merge-ort: provide helpful submodule update message when possible
      merge-ort: remove code obsoleted by other changes
      rev-list-options.txt: fix simple typo
      revision: allow --ancestry-path to take an argument
      merge: only apply autostash when appropriate
      merge: cleanup confusing logic for handling successful merges
      merge: small code readability improvement
      t4301: add more interesting merge-tree testcases
      t64xx: convert 'test_create_repo' to 'git init'
      diff: have submodule_format logic avoid additional diff headers
      diff: fix filtering of additional headers under --remerge-diff
      diff: fix filtering of merge commits under --remerge-diff

Eric DeCosta (1):
      fsmonitor: option to allow fsmonitor to run against network-mounted repos

Eric Sunshine (25):
      t2407: fix broken &&-chains in compound statement
      t1092: fix buggy sparse "blame" test
      t: detect and signal failure within loop
      t4301: account for behavior differences between sed implementations
      t4301: fix broken &&-chains and add missing loop termination
      t4301: emit blank line in more idiomatic fashion
      t: add skeleton chainlint.pl
      chainlint.pl: add POSIX shell lexical analyzer
      chainlint.pl: add POSIX shell parser
      chainlint.pl: add parser to validate tests
      chainlint.pl: add parser to identify test definitions
      chainlint.pl: validate test scripts in parallel
      chainlint.pl: don't require `return|exit|continue` to end with `&&`
      t/Makefile: apply chainlint.pl to existing self-tests
      chainlint.pl: don't require `&` background command to end with `&&`
      chainlint.pl: don't flag broken &&-chain if `$?` handled explicitly
      chainlint.pl: don't flag broken &&-chain if failure indicated explicitly
      chainlint.pl: complain about loops lacking explicit failure handling
      chainlint.pl: allow `|| echo` to signal failure upstream of a pipe
      t/chainlint: add more chainlint.pl self-tests
      test-lib: retire "lint harder" optimization hack
      test-lib: replace chainlint.sed with chainlint.pl
      t/Makefile: teach `make test` and `make prove` to run chainlint.pl
      t: retire unused chainlint.sed
      chainlint: colorize problem annotations and test delimiters

Fangyi Zhou (1):
      help: fix doubled words in explanation for developer interfaces

Felipe Contreras (7):
      mergetools: vimdiff: fix comment
      mergetools: vimdiff: make vimdiff3 actually work
      mergetools: vimdiff: silence annoying messages
      mergetools: vimdiff: fix for diffopt
      mergetools: vimdiff: rework tab logic
      mergetools: vimdiff: fix single window layouts
      mergetools: vimdiff: simplify tabfirst

Fernando Ramos (1):
      vimdiff: make layout engine more robust against user vim settings

Glen Choo (16):
      submodule--helper: eliminate internal "--update" option
      submodule--helper tests: add missing "display path" coverage
      submodule--helper update: use display path helper
      submodule--helper: don't recreate recursive prefix
      submodule--helper: use correct display path helper
      submodule--helper update: use --super-prefix
      submodule--helper: remove display path helper
      Documentation/git-config.txt: add SCOPES section
      Documentation: define protected configuration
      config: learn `git_protected_config()`
      safe.directory: use git_protected_config()
      setup.c: create `safe.bareRepository`
      config.c: NULL check when reading protected config
      Documentation/git-reflog: remove unneeded \ from \{
      submodule--helper: add "const" to copy of "update_data"
      submodule--helper: refactor "errmsg_str" to be a "struct strbuf"

Goss Geppert (2):
      dir: traverse into repository
      dir: minor refactoring / clean-up

Han Xin (6):
      unpack-objects: low memory footprint for get_data() in dry_run mode
      object-file.c: refactor write_loose_object() to several steps
      object-file.c: add "stream_loose_object()" to handle large object
      unpack-objects: use stream_loose_object() to unpack large objects
      commit-graph.c: no lazy fetch in lookup_commit_in_graph()
      t5330: remove run_with_limited_processses()

Jacob Keller (1):
      remote: handle negative refspecs in git remote show

Jacob Stopak (3):
      Documentation: fix various repeat word typos
      Documentation: clean up a few misspelled word typos
      Documentation: clean up various typos in technical docs

Jaydeep Das (1):
      gpg-interface: add function for converting trust level to string

Jeff King (64):
      is_promisor_object(): walk promisor packs in pack-order
      fetch: stop passing around unused worktrees variable
      branch: drop unused worktrees variable
      revisions.txt: escape "..." to avoid asciidoc horizontal ellipsis
      clone: drop extra newline from warning message
      clone: propagate empty remote HEAD even with other branches
      clone: use remote branch if it matches default HEAD
      clone: move unborn head creation to update_head()
      ref-filter: disable save_commit_buffer while traversing
      diff-files: move misplaced cleanup label
      write_midx_bitmap(): drop unused refs_snapshot parameter
      config.mak.dev: squelch -Wno-missing-braces for older gcc
      tree-walk: add a mechanism for getting non-canonicalized modes
      fsck: actually detect bad file modes in trees
      fsck: downgrade tree badFilemode to "info"
      is_promisor_object(): fix use-after-free of tree buffer
      compat: add function to enable nonblocking pipes
      git-compat-util: make MAX_IO_SIZE define globally available
      pipe_command(): avoid xwrite() for writing to pipe
      pipe_command(): handle ENOSPC when writing to a pipe
      pipe_command(): mark stdin descriptor as non-blocking
      git-compat-util: add UNUSED macro
      refs: mark unused each_ref_fn parameters
      refs: mark unused reflog callback parameters
      refs: mark unused virtual method parameters
      transport: mark bundle transport_options as unused
      streaming: mark unused virtual method parameters
      config: mark unused callback parameters
      hashmap: mark unused callback parameters
      mark unused read_tree_recursive() callback parameters
      run-command: mark unused async callback parameters
      is_path_owned_by_current_uid(): mark "report" parameter as unused
      xdiff: drop unused mmfile parameters from xdl_do_histogram_diff()
      log-tree: drop unused commit param in remerge_diff()
      match_pathname(): drop unused "flags" parameter
      verify_one_sparse(): drop unused parameters
      reftable: drop unused parameter from reader_seek_linear()
      reflog: assert PARSE_OPT_NONEG in parse-options callbacks
      xdiff: drop unused mmfile parameters from xdl_do_patience_diff()
      pass subcommand "prefix" arguments to parse_options()
      maintenance: add parse-options boilerplate for subcommands
      remote: run "remote rm" argv through parse_options()
      pack-bitmap-write: drop unused pack_idx_entry parameters
      tempfile: drop active flag
      tempfile: update comment describing state transitions
      test-crontab: minor memory and error handling fixes
      lookup_commit_in_graph(): use prepare_commit_graph() to check for graph
      rev-list: disable commit graph with --verify-objects
      parse_object(): allow skipping hash check
      upload-pack: skip parse-object re-hashing of "want" objects
      parse_object(): check commit-graph when skip_hash set
      t1060: check partial clone of misnamed blob
      list_objects_filter_copy(): deep-copy sparse_oid_name field
      transport: deep-copy object-filter struct for fetch-pack
      transport: free filter options in disconnect_git()
      list_objects_filter_options: plug leak of filter_spec strings
      prepare_repo_settings(): plug leak of config values
      fetch: stop checking for NULL transport->remote in do_fetch()
      fetch: add branch.*.merge to default ref-prefix extension
      list-objects-filter: don't memset after releasing filter struct
      list-objects-filter: handle null default filter spec
      list-objects-filter: add and use initializers
      list-objects-filter: convert filter_spec to a strbuf
      list-objects-filter: initialize sub-filter structs

Johannes Schindelin (38):
      merge-ort: store messages in a list, not in a single strbuf
      merge-ort: make `path_messages` a strmap to a string_list
      Git 2.30.5
      Git 2.31.4
      Git 2.32.3
      Git 2.33.4
      Git 2.34.4
      Git 2.35.4
      Git 2.36.2
      add --interactive: allow `update` to stage deleted files
      tests: fix incorrect --write-junit-xml code
      mergetool(vimdiff): allow paths to contain spaces again
      shortlog: use a stable sort
      t5351: avoid relying on `core.fsyncMethod = batch` to be supported
      t5351: avoid using `test_cmp` for binary data
      windows: include the Python bits when building Git for Windows
      mingw: remove unneeded `NO_GETTEXT` directive
      mingw: remove unneeded `NO_CURL` directive
      lstat(mingw): correctly detect ENOTDIR scenarios
      merge-ort: clean up after failed merge
      merge-ort: do leave trace2 region even if checkout fails
      setup: fix some formatting
      setup: prepare for more detailed "dubious ownership" messages
      mingw: provide details about unsafe directories' ownership
      mingw: be more informative when ownership check fails on FAT32
      mingw: handle a file owned by the Administrators group correctly
      scalar unregister: stop FSMonitor daemon
      range-diff: reorder argument handling
      range-diff: consistently validate the arguments
      range-diff: optionally accept pathspecs
      add -p: avoid ambiguous signed/unsigned comparison
      t3701: test the built-in `add -i` regardless of NO_PERL
      t6132(NO_PERL): do not run the scripted `add -p`
      add -p: detect more mismatches between plain vs colored diffs
      add -p: gracefully handle unparseable hunk headers in colored diffs
      add -p: ignore dirty submodules
      git help: special-case `scalar`
      scalar: implement the `help` subcommand

Jonathan Tan (1):
      fetch-pack: write effective filter to trace2

Josh Steadmon (1):
      fetch-pack: add tracing for negotiation rounds

Julien Rouhaud (1):
      gitweb: remove title shortening heuristics

Junio C Hamano (44):
      revision: mark blobs needed for resolve-undo as reachable
      A regression fix for 2.37
      Git 2.37.1
      builtin/mv.c: use the MOVE_ARRAY() macro instead of memmove()
      The first batch after Git 2.37
      fsck: do not dereference NULL while checking resolve-undo data
      The second batch
      The third batch
      The fourth batch
      The fifth batch
      builtin/remote.c: use the right kind of STRING_LIST_INIT
      The sixth batch
      The seventh batch
      Downmerge a handful of fixes for 2.37.x maintenance track
      The eighth batch
      The ninth batch
      doc: consolidate --rerere-autoupdate description
      doc: clarify rerere-autoupdate
      Downmerge a bit more for 2.37.x
      The tenth batch
      The eleventh batch
      Git 2.37.2
      The twelfth batch
      The thirteenth batch
      The fourteenth batch
      t5329: notice a failure within a loop
      The fifteenth batch
      A handful more topics from the 'master' front for 2.37.3
      pretty: separate out the logic to decide the use of in-body from
      format-patch: allow forcing the use of in-body From: header
      format-patch: learn format.forceInBodyFrom configuration variable
      The sixteenth batch
      Git 2.37.3
      The seventeenth batch
      The eighteenth batch
      The nineteenth batch
      The twentieth batch
      Merge a handful of topics from the 'master' front
      Prepare for 2.38-rc0
      Git 2.38-rc0
      A bit more of remaining topics before -rc1
      Final batch before -rc1
      Git 2.38-rc1
      Git 2.38-rc2

Justin Donnelly (1):
      git-prompt: show presence of unresolved conflicts at command prompt

Kilian Kilger (2):
      git-p4: fix bug with encoding of p4 client name
      git-p4: refactoring of p4CmdList()

Kyle Zhao (1):
      send-pack.c: add config push.useBitmaps

Lessley Dennington (1):
      osx-keychain: fix compiler warning

Li Linchao (3):
      ls-files: update test style
      remote-curl: send Accept-Language header to server
      rev-list: support human-readable output for `--disk-usage`

Linus Torvalds (1):
      symbolic-ref: refuse to set syntactically invalid target

Manuel Boni (1):
      config.txt: document include, includeIf

Martin Ågren (4):
      config/core.txt: fix minor issues for `core.sparseCheckoutCone`
      t4200: drop irrelevant code
      read-cache: make `do_read_index()` always set up `istate->repo`
      cmd-list.perl: fix identifying man sections

Matheus Tavares (7):
      checkout: document bug where delayed checkout counts entries twice
      checkout: show bug about failed entries being included in final report
      checkout: fix two bugs on the final count of updated entries
      pkt-line.h: move comment closer to the associated code
      t0021: avoid grepping for a Perl-specific string at filter output
      t0021: implementation the rot13-filter.pl script in C
      tests: use the new C rot13-filter helper to avoid PERL prereq

Matthew John Cheetham (1):
      scalar: enable built-in FSMonitor on `register`

Miaoqian Lin (1):
      commit-graph: Fix missing closedir in expire_commit_graphs

Michael J Gruber (3):
      sequencer: do not translate reflog messages
      sequencer: do not translate parameters to error_resolve_conflict()
      sequencer: do not translate command names

Moritz Baumann (3):
      git-p4: fix CR LF handling for utf16 files
      git-p4: fix typo in P4Submit.applyCommit()
      git-p4: fix error handling in P4Unshelve.renameBranch()

Philip Oakley (1):
      doc add: renormalize is not idempotent for CRCRLF

Philippe Blain (3):
      diff-format.txt: dst can be 0* SHA-1 when path is deleted, too
      diff-format.txt: correct misleading wording
      diff-index.txt: update raw output format in examples

Phillip Wood (5):
      xdiff: introduce XDL_ALLOC_ARRAY()
      xdiff: introduce xdl_calloc
      xdiff: introduce XDL_CALLOC_ARRAY()
      xdiff: introduce XDL_ALLOC_GROW()
      tests: cache glibc version check

René Scharfe (28):
      archive: update format documentation
      archive: rename archiver data field to filter_command
      archive-tar: factor out write_block()
      archive-tar: add internal gzip implementation
      archive-tar: use OS_CODE 3 (Unix) for internal gzip
      archive-tar: use internal gzip by default
      combine-diff: abort if --ignore-matching-lines is given
      combine-diff: abort if --output is given
      cocci: avoid normalization rules for memcpy
      mingw: avoid mktemp() in mkstemp() implementation
      mergesort: unify ranks loops
      mergesort: tighten merge loop
      mergesort: add macros for typed sort of linked lists
      test-mergesort: use DEFINE_LIST_SORT_DEBUG
      test-mergesort: use DEFINE_LIST_SORT
      blame: use DEFINE_LIST_SORT
      commit: use DEFINE_LIST_SORT
      fetch-pack: use DEFINE_LIST_SORT
      packfile: use DEFINE_LIST_SORT
      mergesort: remove llist_mergesort()
      nonblock: support Windows
      tempfile: avoid directory cleanup race
      test-mergesort: read sort input all at once
      test-mergesort: use mem_pool for sort input
      diff-no-index: release strbuf on queue error
      diff-no-index: release prefixed filenames
      diff-no-index: simplify argv index calculation
      add -p: fix worktree patch mode prompts

Richard Oliver (1):
      mktree: do not check type of remote objects

SZEDER Gábor (30):
      Makefile: build 'gitweb' in the default target
      multi-pack-index: simplify handling of unknown --options
      index-format.txt: remove outdated list of supported extensions
      git.c: update NO_PARSEOPT markings
      t3301-notes.sh: check that default operation mode doesn't take arguments
      t5505-remote.sh: check the behavior without a subcommand
      t0040-parse-options: test parse_options() with various 'parse_opt_flags'
      api-parse-options.txt: fix description of OPT_CMDMODE
      parse-options: PARSE_OPT_KEEP_UNKNOWN only applies to --options
      parse-options: clarify the limitations of PARSE_OPT_NODASH
      parse-options: drop leading space from '--git-completion-helper' output
      parse-options: add support for parsing subcommands
      builtin/bundle.c: let parse-options parse subcommands
      builtin/commit-graph.c: let parse-options parse subcommands
      builtin/gc.c: let parse-options parse 'git maintenance's subcommands
      builtin/hook.c: let parse-options parse subcommands
      builtin/multi-pack-index.c: let parse-options parse subcommands
      builtin/notes.c: let parse-options parse subcommands
      builtin/reflog.c: let parse-options parse subcommands
      builtin/remote.c: let parse-options parse subcommands
      builtin/sparse-checkout.c: let parse-options parse subcommands
      builtin/stash.c: let parse-options parse subcommands
      builtin/worktree.c: let parse-options parse subcommands
      promisor-remote: fix xcalloc() argument order
      t0040-parse-options: remove leftover debugging
      test-parse-options.c: don't use for loop initial declaration
      test-parse-options.c: fix style of comparison with zero
      notes: simplify default operation mode arguments check
      notes, remote: show unknown subcommands between `'
      t/Makefile: remove 'test-results' on 'make clean'

Shaoxuan Yuan (22):
      t7002: add tests for moving out-of-cone file/directory
      t1092: mv directory from out-of-cone to in-cone
      mv: update sparsity after moving from out-of-cone to in-cone
      mv: decouple if/else-if checks using goto
      mv: check if out-of-cone file exists in index with SKIP_WORKTREE bit
      mv: check if <destination> exists in index to handle overwriting
      mv: use flags mode for update_mode
      mv: add check_dir_in_index() and solve general dir check issue
      t1092: add tests for `git-rm`
      pathspec.h: move pathspec_needs_expanded_index() from reset.c to here
      rm: expand the index only when necessary
      rm: integrate with sparse-index
      t7002: add tests for moving from in-cone to out-of-cone
      mv: rename check_dir_in_index() to empty_dir_has_sparse_contents()
      mv: free the with_slash in check_dir_in_index()
      mv: check if <destination> is a SKIP_WORKTREE_DIR
      mv: remove BOTH from enum update_mode
      mv: from in-cone to out-of-cone
      mv: cleanup empty WORKING_DIRECTORY
      advice.h: add advise_on_moving_dirty_path()
      mv: check overwrite for in-to-out move
      builtin/mv.c: fix possible segfault in add_slash()

Siddharth Asthana (4):
      revision: improve commit_rewrite_person()
      ident: move commit_rewrite_person() to ident.c
      ident: rename commit_rewrite_person() to apply_mailmap_to_header()
      cat-file: add mailmap support

Tao Klerks (1):
      rev-parse: documentation adjustment - mention remote tracking with @{u}

Taylor Blau (14):
      pack-objects.h: remove outdated pahole results
      commit-graph: pass repo_settings instead of repository
      t5318: demonstrate commit-graph generation v2 corruption
      commit-graph: introduce `repo_find_commit_pos_in_graph()`
      commit-graph: fix corrupt upgrade from generation v1 to v2
      t1006: extract --batch-command inputs to variables
      builtin/cat-file.c: support NUL-delimited input with `-z`
      t5326: demonstrate potential bitmap corruption
      t/lib-bitmap.sh: avoid silencing stderr
      midx.c: extract `struct midx_fanout`
      midx.c: extract `midx_fanout_add_midx_fanout()`
      midx.c: extract `midx_fanout_add_pack_fanout()`
      midx.c: include preferred pack correctly with existing MIDX
      midx.c: avoid adding preferred objects twice

Teng Long (8):
      pack-bitmap.c: fix formatting of error messages
      pack-bitmap.c: mark more strings for translations
      pack-bitmap.c: rename "idx_name" to "bitmap_name"
      pack-bitmap.c: do not ignore error when opening a bitmap file
      pack-bitmap.c: using error() instead of silently returning -1
      pack-bitmap.c: continue looping when first MIDX bitmap is found
      api-trace2.txt: print config key-value pair
      tr2: shows scope unconditionally in addition to key-value pair

Todd Zullinger (2):
      docs: fix a few recently broken links
      api docs: link to html version of api-trace2

Victoria Dye (37):
      scalar: reword command documentation to clarify purpose
      scalar: convert README.md into a technical design doc
      checkout: fix nested sparse directory diff in sparse index
      oneway_diff: handle removed sparse directories
      cache.h: create 'index_name_pos_sparse()'
      unpack-trees: unpack new trees as sparse directories
      scalar-diagnose: use "$GIT_UNZIP" in test
      scalar-diagnose: avoid 32-bit overflow of size_t
      scalar-diagnose: add directory to archiver more gently
      scalar-diagnose: move 'get_disk_info()' to 'compat/'
      scalar-diagnose: move functionality to common location
      diagnose.c: add option to configure archive contents
      builtin/diagnose.c: create 'git diagnose' builtin
      builtin/diagnose.c: add '--mode' option
      builtin/bugreport.c: create '--diagnose' option
      scalar-diagnose: use 'git diagnose --mode=all'
      scalar: update technical doc roadmap
      scalar: constrain enlistment search
      scalar-unregister: handle error codes greater than 0
      scalar-[un]register: clearly indicate source of error
      scalar-delete: do not 'die()' in 'delete_enlistment()'
      scalar: move config setting logic into its own function
      scalar: update technical doc roadmap with FSMonitor support
      p0004: fix prereq declaration
      p0006: fix 'read-tree' argument ordering
      unpack-trees: fix sparse directory recursion check
      scalar: fix command documentation section header
      scalar: include in standard Git build & installation
      scalar: add to 'git help -a' command list
      scalar-clone: add test coverage
      t/perf: add Scalar performance tests
      t/perf: add 'GIT_PERF_USE_SCALAR' run option
      Documentation/technical: include Scalar technical doc
      diagnose.c: refactor to safely use 'd_type'
      Documentation: add ReviewingGuidelines
      diagnose: add to command-list.txt
      version: fix builtin linking & documentation

ZheNing Hu (2):
      ls-files: introduce "--format" option
      ls-files: fix black space in error message

brian m. carlson (2):
      sha256: add support for Nettle
      gc: use temporary file for editing crontab

Ævar Arnfjörð Bjarmason (153):
      t0008: don't rely on default ".git/info/exclude"
      tests: don't depend on template-created .git/branches
      tests: don't assume a .git/info for .git/info/grafts
      tests: don't assume a .git/info for .git/info/attributes
      tests: don't assume a .git/info for .git/info/refs
      tests: don't assume a .git/info for .git/info/exclude
      tests: don't assume a .git/info for .git/info/sparse-checkout
      object-file.c: factor out deflate part of write_loose_object()
      core doc: modernize core.bigFileThreshold documentation
      git-submodule.sh: remove unused sanitize_submodule_env()
      git-submodule.sh: remove unused $prefix variable
      git-submodule.sh: make the "$cached" variable a boolean
      git-submodule.sh: remove unused top-level "--branch" argument
      submodule--helper: have --require-init imply --init
      submodule update: remove "-v" option
      submodule--helper: rename "absorb-git-dirs" to "absorbgitdirs"
      submodule--helper: report "submodule" as our name in some "-h" output
      submodule--helper: understand --checkout, --merge and --rebase synonyms
      git-submodule.sh: use "$quiet", not "$GIT_QUIET"
      git-sh-setup.sh: remove "say" function, change last users
      gitweb/Makefile: define all .PHONY prerequisites inline
      gitweb/Makefile: add a $(GITWEB_ALL) variable
      gitweb/Makefile: clear up and de-duplicate the gitweb.{css,js} vars
      gitweb/Makefile: prepare to merge into top-level Makefile
      gitweb: remove "test" and "test-installed" targets
      gitweb/Makefile: include in top-level Makefile
      gitweb/Makefile: add a "NO_GITWEB" parameter
      tests: add missing double quotes to included library paths
      test-lib.sh: fix prepend_var() quoting issue
      config tests: fix harmless but broken "rm -r" cleanup
      submodule--helper: remove unused SUPPORT_SUPER_PREFIX flags
      check-ref-format: fix trivial memory leak
      clone: fix memory leak in wanted_peer_refs()
      submodule.c: free() memory from xgetcwd()
      revert: free "struct replay_opts" members
      cat-file: fix a memory leak in --batch-command mode
      merge-file: refactor for subsequent memory leak fix
      merge-file: fix memory leaks on error path
      checkout: avoid "struct unpack_trees_options" leak
      gc: fix a memory leak
      cat-file: fix a common "struct object_context" memory leak
      pull: fix a "struct oid_array" memory leak
      test-tool test-hash: fix a memory leak
      test-tool path-utils: fix a memory leak
      test-tool {dump,scrap}-cache-tree: fix memory leaks
      test-tool urlmatch-normalization: fix a memory leak
      test-tool regex: call regfree(), fix memory leaks
      test-tool json-writer: fix memory leaks
      test-tool bloom: fix memory leaks
      test-tool ref-store: fix a memory leak
      test-tool delta: fix a memory leak
      Makefile: remove mandatory "spatch" arguments from SPATCH_FLAGS
      Makefile & .gitignore: ignore & clean "git.res", not "*.res"
      cocci: add a "coccicheck-test" target and test *.cocci rules
      cocci: have "coccicheck{,-pending}" depend on "coccicheck-test"
      cocci: add and apply a rule to find "unused" strbufs
      cocci: generalize "unused" rule to cover more than "strbuf"
      trace2: only include "fsync" events if we git_fsync()
      test-lib: use $1, not $@ in test_known_broken_{ok,failure}_
      test-lib: don't set GIT_EXIT_OK before calling test_atexit_handler
      test-lib: fix GIT_EXIT_OK logic errors, use BAIL_OUT
      test-lib: add a --invert-exit-code switch
      t/README: reword the "GIT_TEST_PASSING_SANITIZE_LEAK" description
      test-lib: add a SANITIZE=leak logging mode
      t/Makefile: don't remove test-results in "clean-except-prove-cache"
      tests: move copy/pasted PERL + Test::More checks to a lib-perl.sh
      test-lib: simplify by removing test_external
      test-lib: add a GIT_TEST_PASSING_SANITIZE_LEAK=check mode
      test-lib: have the "check" mode for SANITIZE=leak consider leak logs
      leak tests: don't skip some tests under SANITIZE=leak
      leak tests: mark passing SANITIZE=leak tests as leak-free
      upload-pack: fix a memory leak in create_pack_file()
      CI: use "GIT_TEST_SANITIZE_LEAK_LOG=true" in linux-leaks
      bisect.c: add missing "goto" for release_revisions()
      test-fast-rebase helper: use release_revisions() (again)
      log: fix a memory leak in "git show <revision>..."
      log: refactor "rev.pending" code in cmd_show()
      bisect.c: partially fix bisect_rev_setup() memory leak
      revisions API: don't leak memory on argv elements that need free()-ing
      help.c: refactor drop_prefix() to use a "switch" statement"
      help.c: remove common category behavior from drop_prefix() behavior
      git help doc: use "<doc>" instead of "<guide>"
      git docs: add a category for user-facing file, repo and command UX
      git docs: add a category for file formats, protocols and interfaces
      docs: move commit-graph format docs to man section 5
      docs: move protocol-related docs to man section 5
      docs: move index format docs to man section 5
      docs: move signature docs to man section 5
      docs: move pack format docs to man section 5
      docs: move cruft pack docs to gitformat-pack
      docs: move http-protocol docs to man section 5
      hook API: don't segfault on strbuf_addf() to NULL "out"
      Makefile + hash.h: remove PPC_SHA1 implementation
      Makefile: use $(OBJECTS) instead of $(C_OBJ)
      git-compat-util.h: use "UNUSED", not "UNUSED(var)"
      git-compat-util.h: use "deprecated" for UNUSED variables
      submodule tests: test usage behavior
      submodule tests: test for "add <repository> <abs-path>"
      submodule--helper: remove unused "name" helper
      submodule--helper: remove unused "list" helper
      test-tool submodule-config: remove unused "--url" handling
      submodule--helper: move "is-active" to a test-tool
      submodule--helper: move "check-name" to a test-tool
      submodule--helper: move "resolve-relative-url-test" to a test-tool
      submodule--helper style: don't separate declared variables with \n\n
      submodule--helper style: add \n\n after variable declarations
      submodule--helper: replace memset() with { 0 }-initialization
      submodule--helper: use xstrfmt() in clone_submodule()
      submodule--helper: move "sb" in clone_submodule() to its own scope
      submodule--helper: add "const" to passed "module_clone_data"
      submodule--helper: add "const" to passed "struct update_data"
      submodule--helper: don't redundantly check "else if (res)"
      submodule--helper: rename "int res" to "int ret"
      submodule--helper: return "ret", not "1" from update_submodule()
      submodule--helper: add missing braces to "else" arm
      submodule--helper: don't call submodule_strategy_to_string() in BUG()
      submodule API: don't handle SM_..{UNSPECIFIED,COMMAND} in to_string()
      submodule--helper: use "code" in run_update_command()
      submodule--helper: don't exit() on failure, return
      submodule--helper: libify determine_submodule_update_strategy()
      submodule--helper: libify "must_die_on_failure" code paths
      submodule--helper update: don't override 'checkout' exit code
      submodule--helper: libify "must_die_on_failure" code paths (for die)
      submodule--helper: check repo{_submodule,}_init() return values
      submodule--helper: libify more "die" paths for module_update()
      submodule--helper: libify even more "die" paths for module_update()
      submodule--helper: fix bad config API usage
      submodule--helper: fix a leak in "clone_submodule"
      submodule--helper: fix trivial get_default_remote_submodule() leak
      submodule--helper: fix most "struct pathspec" memory leaks
      submodule--helper: "struct pathspec" memory leak in module_update()
      submodule--helper: don't leak {run,capture}_command() cp.dir argument
      submodule--helper: add and use *_release() functions
      submodule--helper: fix "errmsg_str" memory leak
      submodule--helper: fix "sm_path" and other "module_cb_list" leaks
      submodule--helper: fix a leak with repo_clear()
      submodule--helper: fix a memory leak in get_default_remote_submodule()
      submodule--helper: fix "reference" leak
      submodule--helper: fix obscure leak in module_add()
      submodule--helper: fix a leak in module_add()
      submodule--helper: fix a memory leak in print_status()
      submodule--helper: free some "displaypath" in "struct update_data"
      submodule--helper: free rest of "displaypath" in "struct update_data"
      submodule--helper: fix a configure_added_submodule() leak
      docs: add and use include template for config/* includes
      grep docs: de-duplicate configuration sections
      send-email docs: de-duplicate configuration sections
      apply docs: de-duplicate configuration sections
      notes docs: de-duplicate and combine configuration sections
      difftool docs: de-duplicate configuration sections
      log docs: de-duplicate configuration sections
      docs: add CONFIGURATION sections that map to a built-in
      docs: add CONFIGURATION sections that fuzzy map to built-ins

Øystein Walle (1):
      rev-parse --parseopt: detect missing opt-spec


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.38.0-rc1
@ 2022-09-22  0:11  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2022-09-22  0:11 UTC (permalink / raw)
  To: git; +Cc: git-packagers

A release candidate Git v2.38.0-rc1 is now available for testing at
the usual places.  It is comprised of 668 non-merge commits since
v2.37.0, contributed by 81 people, 23 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.38.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.37.0 are as follows.
Welcome to the Git development community!

  Andrew Olsen, Anthony Delannoy, Carlos López, Celeste Liu,
  Cleber Rosa, David Plumpton, Elijah Conners, Eric DeCosta, Goss
  Geppert, Ilya K, Ingy dot Net, Jacob Stopak, Julien Rouhaud,
  Kilian Kilger, Lana Deere, Manuel Boni, Matthew Klein, Miaoqian
  Lin, Moritz Baumann, Pavel Rappo, Pierre Garnier, Richard Oliver,
  and Xavier Morel.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Abhradeep Chakraborty, Adam Dinwoodie, Ævar Arnfjörð
  Bjarmason, Alex Henrie, Arthur Milchior, brian m. carlson,
  Calvin Wan, Carlo Marcelo Arenas Belón, Christian Couder,
  Christoph Reiter, Derrick Stolee, Dimitriy Ryazantcev, Đoàn
  Trần Công Danh, Elijah Newren, Emily Shaffer, Eric Sunshine,
  Fangyi Zhou, Felipe Contreras, Fernando Ramos, Glen Choo,
  Han Xin, Hariom Verma, Jacob Keller, Jaydeep Das, Jeff King,
  Jiang Xin, Joey Hess, Johannes Schindelin, John Cai, Jonathan
  Tan, Josh Steadmon, Junio C Hamano, Justin Donnelly, Kyle Zhao,
  Lessley Dennington, Li Linchao, Linus Torvalds, Martin Ågren,
  Matheus Tavares, Matthew John Cheetham, Michael J Gruber,
  Øystein Walle, Philip Oakley, Philippe Blain, Phillip Wood,
  Randall S. Becker, Renato Botelho, René Scharfe, Shaoxuan Yuan,
  Siddharth Asthana, SZEDER Gábor, Tao Klerks, Taylor Blau,
  Teng Long, Todd Zullinger, Torsten Bögershausen, Victoria Dye,
  and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.38 Release Notes (draft)
===============================

UI, Workflows & Features

 * "git remote show [-n] frotz" now pays attention to negative
   pathspec.

 * "git push" sometimes performs poorly when reachability bitmaps are
   used, even in a repository where other operations are helped by
   bitmaps.  The push.useBitmaps configuration variable is introduced
   to allow disabling use of reachability bitmaps only for "git push".

 * "git grep -m<max-hits>" is a way to limit the hits shown per file.

 * "git merge-tree" learned a new mode where it takes two commits and
   computes a tree that would result in the merge commit, if the
   histories leading to these two commits were to be merged.

 * "git mv A B" in a sparsely populated working tree can be asked to
   move a path between directories that are "in cone" (i.e. expected
   to be materialized in the working tree) and "out of cone"
   (i.e. expected to be hidden).  The handling of such cases has been
   improved.

 * Earlier, HTTP transport clients learned to tell the server side
   what locale they are in by sending Accept-Language HTTP header, but
   this was done only for some requests but not others.

 * Introduce a safe.barerepository configuration variable that
   allows users to forbid discovery of bare repositories.

 * Various messages that come from the pack-bitmap codepaths have been
   tweaked.

 * "git rebase -i" learns to update branches whose tip appear in the
   rebased range with "--update-refs" option.

 * "git ls-files" learns the "--format" option to tweak its output.

 * "git cat-file" learned an option to use the mailmap when showing
   commit and tag objects.

 * When "git merge" finds that it cannot perform a merge, it should
   restore the working tree to the state before the command was
   initiated, but in some corner cases it didn't.

 * Operating modes like "--batch" of "git cat-file" command learned to
   take NUL-terminated input, instead of one-item-per-line.

 * "git rm" has become more aware of the sparse-index feature.

 * "git rev-list --disk-usage" learned to take an optional value
   "human" to show the reported value in human-readable format, like
   "3.40MiB".

 * The "diagnose" feature to create a zip archive for diagnostic
   material has been lifted from "scalar" and made into a feature of
   "git bugreport".

 * The namespaces used by "log --decorate" from "refs/" hierarchy by
   default has been tightened.

 * "git rev-list --ancestry-path=C A..B" is a natural extension of
   "git rev-list A..B"; instead of choosing a subset of A..B to those
   that have ancestry relationship with A, it lets a subset with
   ancestry relationship with C.

 * "scalar" now enables built-in fsmonitor on enlisted repositories,
   when able.

 * The bash prompt (in contrib/) learned to optionally indicate when
   the index is unmerged.

 * "git clone" command learned the "--bundle-uri" option to coordinate
   with hosting sites the use of pre-prepared bundle files.

 * "git range-diff" learned to honor pathspec argument if given.

 * "git format-patch --from=<ident>" can be told to add an in-body
   "From:" line even for commits that are authored by the given
   <ident> with "--force-in-body-from" option.

 * The built-in fsmonitor refuses to work on a network mounted
   repositories; a configuration knob for users to override this has
   been introduced.

 * The "scalar" addition from Microsoft is now part of the core Git
   installation.


Performance, Internal Implementation, Development Support etc.

 * Collection of what is referenced by objects in promisor packs have
   been optimized to inspect these objects in the in-pack order.

 * Introduce a helper to see if a branch is already being worked on
   (hence should not be newly checked out in a working tree), which
   performs much better than the existing find_shared_symref() to
   replace many uses of the latter.

 * Teach "git archive" to (optionally and then by default) avoid
   spawning an external "gzip" process when creating ".tar.gz" (and
   ".tgz") archives.

 * Allow large objects read from a packstream to be streamed into a
   loose object file straight, without having to keep it in-core as a
   whole.

 * Further preparation to turn git-submodule.sh into a builtin
   continues.

 * Apply Coccinelle rule to turn raw memmove() into MOVE_ARRAY() cpp
   macro, which would improve maintainability and readability.

 * Teach "make all" to build gitweb as well.

 * Tweak tests so that they still work when the "git init" template
   did not create .git/info directory.

 * Add Coccinelle rules to detect the pattern of initializing and then
   finalizing a structure without using it in between at all, which
   happens after code restructuring and the compilers fail to
   recognize as an unused variable.

 * The code to convert between GPG trust level strings and internal
   constants we use to represent them have been cleaned up.

 * Support for libnettle as SHA256 implementation has been added.

 * The way "git multi-pack" uses parse-options API has been improved.

 * A Coccinelle rule (in contrib/) to encourage use of COPY_ARRAY
   macro has been improved.

 * API tweak to make it easier to run fuzz testing on commit-graph parser.

 * Omit fsync-related trace2 entries when their values are all zero.

 * The codepath to write multi-pack index has been taught to release a
   large chunk of memory that holds an array of objects in the packs,
   as soon as it is done with the array, to reduce memory consumption.

 * Add a level of redirection to array allocation API in xdiff part,
   to make it easier to share with the libgit2 project.

 * "git fetch" client logs the partial clone filter used in the trace2
   output.

 * The "bundle URI" design gets documented.

 * The common ancestor negotiation exchange during a "git fetch"
   session now leaves trace log.

 * Test portability improvements.
   (merge 4d1d843be7 mt/rot13-in-c later to maint).

 * The "subcommand" mode is introduced to parse-options API and update
   the command line parser of Git commands with subcommands.

 * The pack bitmap file gained a bitmap-lookup table to speed up
   locating the necessary bitmap for a given commit.

 * The assembly version of SHA-1 implementation for PPC has been
   removed.

 * The server side that responds to "git fetch" and "git clone"
   request has been optimized by allowing it to send objects in its
   object store without recomputing and validating the object names.

 * Annotate function parameters that are not used (but cannot be
   removed for structural reasons), to prepare us to later compile
   with -Wunused warning turned on.

 * Share the text used to explain configuration variables used by "git
   <subcmd>" in "git help <subcmd>" with the text from "git help config".

 * "git mv A B" in a sparsely populated working tree can be asked to
   move a path from a directory that is "in cone" to another directory
   that is "out of cone".  Handling of such a case has been improved.

 * The chainlint script for our tests has been revamped.


Fixes since v2.37
-----------------

 * Rewrite of "git add -i" in C that appeared in Git 2.25 didn't
   correctly record a removed file to the index, which was fixed.

 * Certain diff options are currently ignored when combined-diff is
   shown; mark them as incompatible with the feature.

 * Adjust technical/bitmap-format to be formatted by AsciiDoc, and
   add some missing information to the documentation.

 * Fixes for tests when the source directory has unusual characters in
   its path, e.g. whitespaces, double-quotes, etc.

 * "git mktree --missing" lazily fetched objects that are missing from
   the local object store, which was totally unnecessary for the purpose
   of creating the tree object(s) from its input.

 * Give _() markings to fatal/warning/usage: labels that are shown in
   front of these messages.

 * References to commands-to-be-typed-literally in "git rebase"
   documentation mark-up have been corrected.

 * In a non-bare repository, the behavior of Git when the
   core.worktree configuration variable points at a directory that has
   a repository as its subdirectory, regressed in Git 2.27 days.

 * Recent update to vimdiff layout code has been made more robust
   against different end-user vim settings.

 * Plug various memory leaks, both in the main code and in test-tool
   commands.

 * Fixes a long-standing corner case bug around directory renames in
   the merge-ort strategy.

 * The resolve-undo information in the index was not protected against
   GC, which has been corrected.

 * A corner case bug where lazily fetching objects from a promisor
   remote resulted in infinite recursion has been corrected.

 * "git clone" from a repository with some ref whose HEAD is unborn
   did not set the HEAD in the resulting repository correctly, which
   has been corrected.

 * An earlier attempt to plug leaks placed a clean-up label to jump to
   at a bogus place, which as been corrected.

 * Variable quoting fix in the vimdiff driver of "git mergetool"

 * "git shortlog -n" relied on the underlying qsort() to be stable,
   which shouldn't have.  Fixed.

 * A fix for a regression in test framework.

 * mkstemp() emulation on Windows has been improved.

 * Add missing documentation for "include" and "includeIf" features in
   "git config" file format, which incidentally teaches the command
   line completion to include them in its offerings.

 * Avoid "white/black-list" in documentation and code comments.

 * Workaround for a compiler warning against use of die() in
   osx-keychain (in contrib/).

 * Workaround for a false positive compiler warning.

 * "git p4" working on UTF-16 files on Windows did not implement
   CRLF-to-LF conversion correctly, which has been corrected.

 * "git p4" did not handle non-ASCII client name well, which has been
   corrected.

 * "rerere-train" script (in contrib/) used to honor commit.gpgSign
   while recreating the throw-away merges.

 * "git checkout" miscounted the paths it updated, which has been
   corrected.

 * Fix for a bug that makes write-tree to fail to write out a
   non-existent index as a tree, introduced in 2.37.

 * There was a bug in the codepath to upgrade generation information
   in commit-graph from v1 to v2 format, which has been corrected.

 * Gitweb had legacy URL shortener that is specific to the way
   projects hosted on kernel.org used to (but no longer) work, which
   has been removed.

 * Fix build procedure for Windows that uses CMake so that it can pick
   up the shell interpreter from local installation location.

 * Conditionally allow building Python interpreter on Windows

 * Fix to lstat() emulation on Windows.

 * Older gcc with -Wall complains about the universal zero initializer
   "struct s = { 0 };" idiom, which makes developers' lives
   inconvenient (as -Werror is enabled by DEVELOPER=YesPlease).  The
   build procedure has been tweaked to help these compilers.

 * Plug memory leaks in the failure code path in the "merge-ort" merge
   strategy backend.

 * "git symbolic-ref symref non..sen..se" is now diagnosed as an error.

 * A follow-up fix to a fix for a regression in 2.36 around hooks.

 * Avoid repeatedly running getconf to ask libc version in the test
   suite, and instead just as it once per script.

 * Platform-specific code that determines if a directory is OK to use
   as a repository has been taught to report more details, especially
   on Windows.

 * "vimdiff3" regression fix.

 * "git fsck" reads mode from tree objects but canonicalizes the mode
   before passing it to the logic to check object sanity, which has
   hid broken tree objects from the checking logic.  This has been
   corrected, but to help existing projects with broken tree objects
   that they cannot fix retroactively, the severity of anomalies this
   code detects has been demoted to "info" for now.

 * Fixes to sparse index compatibility work for "reset" and "checkout"
   commands.

 * An earlier optimization discarded a tree-object buffer that is
   still in use, which has been corrected.

 * Fix deadlocks between main Git process and subprocess spawned via
   the pipe_command() API, that can kill "git add -p" that was
   reimplemented in C recently.

 * The sequencer machinery translated messages left in the reflog by
   mistake, which has been corrected.

 * xcalloc(), imitating calloc(), takes "number of elements of the
   array", and "size of a single element", in this order.  A call that
   does not follow this ordering has been corrected.

 * The preload-index codepath made copies of pathspec to give to
   multiple threads, which were left leaked.

 * Update the version of Ubuntu used for GitHub Actions CI from 18.04
   to 22.04.

 * The auto-stashed local changes created by "git merge --autostash"
   was mixed into a conflicted state left in the working tree, which
   has been corrected.

 * Multi-pack index got corrupted when preferred pack changed from one
   pack to another in a certain way, which has been corrected.
   (merge 99e4d084ff tb/midx-with-changing-preferred-pack-fix later to maint).

 * The clean-up of temporary files created via mks_tempfile_dt() was
   racy and attempted to unlink() the leading directory when signals
   are involved, which has been corrected.
   (merge babe2e0559 rs/tempfile-cleanup-race-fix later to maint).

 * FreeBSD portability fix for "git maintenance" that spawns "crontab"
   to schedule tasks.
   (merge ee69e7884e bc/gc-crontab-fix later to maint).

 * Those who use diff-so-fancy as the diff-filter noticed a regression
   or two in the code that parses the diff output in the built-in
   version of "add -p", which has been corrected.
   (merge 0a101676e5 js/add-p-diff-parsing-fix later to maint).

 * Segfault fix-up to an earlier fix to the topic to teach "git reset"
   and "git checkout" work better in a sparse checkout.
   (merge 037f8ea6d9 vd/sparse-reset-checkout-fixes later to maint).

 * "git diff --no-index A B" managed its the pathnames of its two
   input files rather haphazardly, sometimes leaking them.  The
   command line argument processing has been straightened out to clean
   it up.
   (merge 2b43dd0eb5 rs/diff-no-index-cleanup later to maint).

 * "git rev-list --verify-objects" ought to inspect the contents of
   objects and notice corrupted ones, but it didn't when the commit
   graph is in use, which has been corrected.
   (merge b27ccae34b jk/rev-list-verify-objects-fix later to maint).

 * More fixes to "add -p"
   (merge 64ec8efb83 js/builtin-add-p-portability-fix later to maint).

 * The parser in the script interface to parse-options in "git
   rev-parse" has been updated to diagnose a bogus input correctly.
   (merge f20b9c36d0 ow/rev-parse-parseopt-fix later to maint).

 * The code that manages list-object-filter structure, used in partial
   clones, leaked the instances, which has been plugged.
   (merge 66eede4a37 jk/plug-list-object-filter-leaks later to maint).

 * Fix another UI regression in the reimplemented "add -p".
   (merge f6f0ee247f rs/add-p-worktree-mode-prompt-fix later to maint).

 * "git fetch" over protocol v2 sent an incorrect ref prefix request
   to the server and made "git pull" with configured fetch refspec
   that does not cover the remote branch to merge with fail, which has
   been corrected.
   (merge 49ca2fba39 jk/proto-v2-ref-prefix-fix later to maint).

 * A result from opendir() was leaking in the commit-graph expiration
   codepath, which has been plugged.
   (merge 12f1ae5324 ml/commit-graph-expire-dir-leak-fix later to maint).

 * Just like we have coding guidelines, we now have guidelines for
   reviewers.
   (merge e01b851923 vd/doc-reviewing-guidelines later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 77b9e85c0f vd/fix-perf-tests later to maint).
   (merge 0682bc43f5 jk/test-crontab-fixes later to maint).
   (merge b46dd1726c cc/doc-trailer-whitespace-rules later to maint).

----------------------------------------------------------------

Changes since v2.37.0 are as follows:

Abhradeep Chakraborty (9):
      bitmap-format.txt: feed the file to asciidoc to generate html
      bitmap-format.txt: fix some formatting issues
      bitmap-format.txt: add information for trailing checksum
      Documentation/technical: describe bitmap lookup table extension
      bitmap: move `get commit positions` code to `bitmap_writer_finish`
      pack-bitmap-write.c: write lookup table extension
      pack-bitmap-write: learn pack.writeBitmapLookupTable and add tests
      pack-bitmap: prepare to read lookup table extension
      bitmap-lookup-table: add performance tests for lookup table

Adam Dinwoodie (1):
      t1800: correct test to handle Cygwin

Alex Henrie (2):
      gc: don't translate literal commands
      builtin/diagnose.c: don't translate the two mode values

Anthony Delannoy (1):
      preload-index: fix memleak

Calvin Wan (1):
      submodule merge: update conflict error message

Carlo Marcelo Arenas Belón (2):
      setup: tighten ownership checks post CVE-2022-24765
      cmake: support local installations of git

Carlos López (1):
      grep: add --max-count command line option

Celeste Liu (1):
      contrib/rerere-train: avoid useless gpg sign in training

Christian Couder (1):
      Documentation: clarify whitespace rules for trailers

Cleber Rosa (1):
      setup: fix function name in a BUG() message

Derrick Stolee (50):
      branch: add branch_checked_out() helper
      branch: check for bisects and rebases
      fetch: use new branch_checked_out() and add tests
      branch: use branch_checked_out() when deleting refs
      branch: fix branch_checked_out() leaks
      t5510: replace 'origin' with URL more carefully
      vscode: improve tab size and wrapping
      git-rebase.txt: use back-ticks consistently
      pack-bitmap-write: use const for hashes
      midx: extract bitmap write setup
      midx: reduce memory pressure while writing bitmaps
      daemon: clarify directory arguments
      git-cvsserver: clarify directory list
      git.txt: remove redundant language
      t: avoid "whitelist"
      transport.c: avoid "whitelist"
      t2407: test bisect and rebase as black-boxes
      t2407: test branches currently using apply backend
      branch: consider refs under 'update-refs'
      rebase-interactive: update 'merge' description
      sequencer: define array with enum values
      sequencer: add update-ref command
      rebase: add --update-refs option
      rebase: update refs from 'update-ref' commands
      sequencer: rewrite update-refs as user edits todo list
      rebase: add rebase.updateRefs config option
      sequencer: ignore HEAD ref under --update-refs
      sequencer: notify user of --update-refs activity
      compat/win32: correct for incorrect compiler warning
      refs: allow "HEAD" as decoration filter
      t4207: modernize test
      t4207: test coloring of grafted decorations
      refs: add array of ref namespaces
      refs: use ref_namespaces for replace refs base
      log-tree: use ref_namespaces instead of if/else-if
      log: add default decoration filter
      log: add --clear-decorations option
      log: create log.initialDecorationSet=all
      maintenance: stop writing log.excludeDecoration
      fetch: use ref_namespaces during prefetch
      docs: document bundle URI standard
      bundle-uri: add example bundle organization
      remote-curl: add 'get' capability
      bundle-uri: create basic file-copy logic
      clone: add --bundle-uri option
      bundle-uri: add support for http(s):// and file://
      clone: --bundle-uri cannot be combined with --depth
      t6019: modernize tests with helper
      clone: warn on failure to repo_init()
      ci: update 'static-analysis' to Ubuntu 22.04

Dimitriy Ryazantcev (1):
      i18n: mark message helpers prefix for translation

Elijah Conners (1):
      reftable: use a pointer for pq_entry param

Elijah Newren (43):
      merge-tree: rename merge_trees() to trivial_merge_trees()
      merge-tree: move logic for existing merge into new function
      merge-tree: add option parsing and initial shell for real merge function
      merge-tree: implement real merges
      merge-ort: split out a separate display_update_messages() function
      merge-tree: support including merge messages in output
      merge-ort: provide a merge_get_conflicted_files() helper function
      merge-ort: remove command-line-centric submodule message from merge-ort
      merge-tree: provide a list of which files have conflicts
      merge-tree: provide easy access to `ls-files -u` style info
      merge-ort: store more specific conflict information
      merge-ort: optionally produce machine-readable output
      merge-tree: allow `ls-files -u` style info to be NUL terminated
      merge-tree: add a --allow-unrelated-histories flag
      git-merge-tree.txt: add a section on potentional usage mistakes
      t6429: fix use of non-existent function
      t6423: add tests of dual directory rename plus add/add conflict
      merge-ort: small cleanups of check_for_directory_rename
      merge-ort: make a separate function for freeing struct collisions
      merge-ort: shuffle the computation and cleanup of potential collisions
      merge-ort: fix issue with dual rename and add/add conflict
      merge-ort-wrappers: make printed message match the one from recursive
      merge-resolve: abort if index does not match HEAD
      merge: abort if index does not match HEAD for trivial merges
      merge: do not abort early if one strategy fails to handle the merge
      merge: fix save_state() to work when there are stat-dirty files
      merge: make restore_state() restore staged state too
      merge: ensure we can actually restore pre-merge state
      merge: do not exit restore_state() prematurely
      merge-ort: remove translator lego in new "submodule conflict suggestion"
      merge-ort: avoid surprise with new sub_flag variable
      merge-ort: provide helpful submodule update message when possible
      merge-ort: remove code obsoleted by other changes
      rev-list-options.txt: fix simple typo
      revision: allow --ancestry-path to take an argument
      merge: only apply autostash when appropriate
      merge: cleanup confusing logic for handling successful merges
      merge: small code readability improvement
      t4301: add more interesting merge-tree testcases
      t64xx: convert 'test_create_repo' to 'git init'
      diff: have submodule_format logic avoid additional diff headers
      diff: fix filtering of additional headers under --remerge-diff
      diff: fix filtering of merge commits under --remerge-diff

Eric DeCosta (1):
      fsmonitor: option to allow fsmonitor to run against network-mounted repos

Eric Sunshine (25):
      t2407: fix broken &&-chains in compound statement
      t1092: fix buggy sparse "blame" test
      t: detect and signal failure within loop
      t4301: account for behavior differences between sed implementations
      t4301: fix broken &&-chains and add missing loop termination
      t4301: emit blank line in more idiomatic fashion
      t: add skeleton chainlint.pl
      chainlint.pl: add POSIX shell lexical analyzer
      chainlint.pl: add POSIX shell parser
      chainlint.pl: add parser to validate tests
      chainlint.pl: add parser to identify test definitions
      chainlint.pl: validate test scripts in parallel
      chainlint.pl: don't require `return|exit|continue` to end with `&&`
      t/Makefile: apply chainlint.pl to existing self-tests
      chainlint.pl: don't require `&` background command to end with `&&`
      chainlint.pl: don't flag broken &&-chain if `$?` handled explicitly
      chainlint.pl: don't flag broken &&-chain if failure indicated explicitly
      chainlint.pl: complain about loops lacking explicit failure handling
      chainlint.pl: allow `|| echo` to signal failure upstream of a pipe
      t/chainlint: add more chainlint.pl self-tests
      test-lib: retire "lint harder" optimization hack
      test-lib: replace chainlint.sed with chainlint.pl
      t/Makefile: teach `make test` and `make prove` to run chainlint.pl
      t: retire unused chainlint.sed
      chainlint: colorize problem annotations and test delimiters

Fangyi Zhou (1):
      help: fix doubled words in explanation for developer interfaces

Felipe Contreras (7):
      mergetools: vimdiff: fix comment
      mergetools: vimdiff: make vimdiff3 actually work
      mergetools: vimdiff: silence annoying messages
      mergetools: vimdiff: fix for diffopt
      mergetools: vimdiff: rework tab logic
      mergetools: vimdiff: fix single window layouts
      mergetools: vimdiff: simplify tabfirst

Fernando Ramos (1):
      vimdiff: make layout engine more robust against user vim settings

Glen Choo (16):
      submodule--helper: eliminate internal "--update" option
      submodule--helper tests: add missing "display path" coverage
      submodule--helper update: use display path helper
      submodule--helper: don't recreate recursive prefix
      submodule--helper: use correct display path helper
      submodule--helper update: use --super-prefix
      submodule--helper: remove display path helper
      Documentation/git-config.txt: add SCOPES section
      Documentation: define protected configuration
      config: learn `git_protected_config()`
      safe.directory: use git_protected_config()
      setup.c: create `safe.bareRepository`
      config.c: NULL check when reading protected config
      Documentation/git-reflog: remove unneeded \ from \{
      submodule--helper: add "const" to copy of "update_data"
      submodule--helper: refactor "errmsg_str" to be a "struct strbuf"

Goss Geppert (2):
      dir: traverse into repository
      dir: minor refactoring / clean-up

Han Xin (6):
      unpack-objects: low memory footprint for get_data() in dry_run mode
      object-file.c: refactor write_loose_object() to several steps
      object-file.c: add "stream_loose_object()" to handle large object
      unpack-objects: use stream_loose_object() to unpack large objects
      commit-graph.c: no lazy fetch in lookup_commit_in_graph()
      t5330: remove run_with_limited_processses()

Jacob Keller (1):
      remote: handle negative refspecs in git remote show

Jacob Stopak (3):
      Documentation: fix various repeat word typos
      Documentation: clean up a few misspelled word typos
      Documentation: clean up various typos in technical docs

Jaydeep Das (1):
      gpg-interface: add function for converting trust level to string

Jeff King (63):
      is_promisor_object(): walk promisor packs in pack-order
      fetch: stop passing around unused worktrees variable
      branch: drop unused worktrees variable
      revisions.txt: escape "..." to avoid asciidoc horizontal ellipsis
      clone: drop extra newline from warning message
      clone: propagate empty remote HEAD even with other branches
      clone: use remote branch if it matches default HEAD
      clone: move unborn head creation to update_head()
      ref-filter: disable save_commit_buffer while traversing
      diff-files: move misplaced cleanup label
      write_midx_bitmap(): drop unused refs_snapshot parameter
      config.mak.dev: squelch -Wno-missing-braces for older gcc
      tree-walk: add a mechanism for getting non-canonicalized modes
      fsck: actually detect bad file modes in trees
      fsck: downgrade tree badFilemode to "info"
      is_promisor_object(): fix use-after-free of tree buffer
      compat: add function to enable nonblocking pipes
      git-compat-util: make MAX_IO_SIZE define globally available
      pipe_command(): avoid xwrite() for writing to pipe
      pipe_command(): handle ENOSPC when writing to a pipe
      pipe_command(): mark stdin descriptor as non-blocking
      git-compat-util: add UNUSED macro
      refs: mark unused each_ref_fn parameters
      refs: mark unused reflog callback parameters
      refs: mark unused virtual method parameters
      transport: mark bundle transport_options as unused
      streaming: mark unused virtual method parameters
      config: mark unused callback parameters
      hashmap: mark unused callback parameters
      mark unused read_tree_recursive() callback parameters
      run-command: mark unused async callback parameters
      is_path_owned_by_current_uid(): mark "report" parameter as unused
      xdiff: drop unused mmfile parameters from xdl_do_histogram_diff()
      log-tree: drop unused commit param in remerge_diff()
      match_pathname(): drop unused "flags" parameter
      verify_one_sparse(): drop unused parameters
      reftable: drop unused parameter from reader_seek_linear()
      reflog: assert PARSE_OPT_NONEG in parse-options callbacks
      xdiff: drop unused mmfile parameters from xdl_do_patience_diff()
      pass subcommand "prefix" arguments to parse_options()
      maintenance: add parse-options boilerplate for subcommands
      remote: run "remote rm" argv through parse_options()
      pack-bitmap-write: drop unused pack_idx_entry parameters
      tempfile: drop active flag
      tempfile: update comment describing state transitions
      test-crontab: minor memory and error handling fixes
      lookup_commit_in_graph(): use prepare_commit_graph() to check for graph
      rev-list: disable commit graph with --verify-objects
      parse_object(): allow skipping hash check
      upload-pack: skip parse-object re-hashing of "want" objects
      parse_object(): check commit-graph when skip_hash set
      t1060: check partial clone of misnamed blob
      list_objects_filter_copy(): deep-copy sparse_oid_name field
      transport: deep-copy object-filter struct for fetch-pack
      transport: free filter options in disconnect_git()
      list_objects_filter_options: plug leak of filter_spec strings
      prepare_repo_settings(): plug leak of config values
      fetch: stop checking for NULL transport->remote in do_fetch()
      fetch: add branch.*.merge to default ref-prefix extension
      list-objects-filter: don't memset after releasing filter struct
      list-objects-filter: handle null default filter spec
      list-objects-filter: add and use initializers
      list-objects-filter: convert filter_spec to a strbuf

Johannes Schindelin (38):
      merge-ort: store messages in a list, not in a single strbuf
      merge-ort: make `path_messages` a strmap to a string_list
      Git 2.30.5
      Git 2.31.4
      Git 2.32.3
      Git 2.33.4
      Git 2.34.4
      Git 2.35.4
      Git 2.36.2
      add --interactive: allow `update` to stage deleted files
      tests: fix incorrect --write-junit-xml code
      mergetool(vimdiff): allow paths to contain spaces again
      shortlog: use a stable sort
      t5351: avoid relying on `core.fsyncMethod = batch` to be supported
      t5351: avoid using `test_cmp` for binary data
      windows: include the Python bits when building Git for Windows
      mingw: remove unneeded `NO_GETTEXT` directive
      mingw: remove unneeded `NO_CURL` directive
      lstat(mingw): correctly detect ENOTDIR scenarios
      merge-ort: clean up after failed merge
      merge-ort: do leave trace2 region even if checkout fails
      setup: fix some formatting
      setup: prepare for more detailed "dubious ownership" messages
      mingw: provide details about unsafe directories' ownership
      mingw: be more informative when ownership check fails on FAT32
      mingw: handle a file owned by the Administrators group correctly
      scalar unregister: stop FSMonitor daemon
      range-diff: reorder argument handling
      range-diff: consistently validate the arguments
      range-diff: optionally accept pathspecs
      add -p: avoid ambiguous signed/unsigned comparison
      t3701: test the built-in `add -i` regardless of NO_PERL
      t6132(NO_PERL): do not run the scripted `add -p`
      add -p: detect more mismatches between plain vs colored diffs
      add -p: gracefully handle unparseable hunk headers in colored diffs
      add -p: ignore dirty submodules
      git help: special-case `scalar`
      scalar: implement the `help` subcommand

Jonathan Tan (1):
      fetch-pack: write effective filter to trace2

Josh Steadmon (1):
      fetch-pack: add tracing for negotiation rounds

Julien Rouhaud (1):
      gitweb: remove title shortening heuristics

Junio C Hamano (43):
      revision: mark blobs needed for resolve-undo as reachable
      A regression fix for 2.37
      Git 2.37.1
      builtin/mv.c: use the MOVE_ARRAY() macro instead of memmove()
      The first batch after Git 2.37
      fsck: do not dereference NULL while checking resolve-undo data
      The second batch
      The third batch
      The fourth batch
      The fifth batch
      builtin/remote.c: use the right kind of STRING_LIST_INIT
      The sixth batch
      The seventh batch
      Downmerge a handful of fixes for 2.37.x maintenance track
      The eighth batch
      The ninth batch
      doc: consolidate --rerere-autoupdate description
      doc: clarify rerere-autoupdate
      Downmerge a bit more for 2.37.x
      The tenth batch
      The eleventh batch
      Git 2.37.2
      The twelfth batch
      The thirteenth batch
      The fourteenth batch
      t5329: notice a failure within a loop
      The fifteenth batch
      A handful more topics from the 'master' front for 2.37.3
      pretty: separate out the logic to decide the use of in-body from
      format-patch: allow forcing the use of in-body From: header
      format-patch: learn format.forceInBodyFrom configuration variable
      The sixteenth batch
      Git 2.37.3
      The seventeenth batch
      The eighteenth batch
      The nineteenth batch
      The twentieth batch
      Merge a handful of topics from the 'master' front
      Prepare for 2.38-rc0
      Git 2.38-rc0
      A bit more of remaining topics before -rc1
      Final batch before -rc1
      Git 2.38-rc1

Justin Donnelly (1):
      git-prompt: show presence of unresolved conflicts at command prompt

Kilian Kilger (2):
      git-p4: fix bug with encoding of p4 client name
      git-p4: refactoring of p4CmdList()

Kyle Zhao (1):
      send-pack.c: add config push.useBitmaps

Lessley Dennington (1):
      osx-keychain: fix compiler warning

Li Linchao (3):
      ls-files: update test style
      remote-curl: send Accept-Language header to server
      rev-list: support human-readable output for `--disk-usage`

Linus Torvalds (1):
      symbolic-ref: refuse to set syntactically invalid target

Manuel Boni (1):
      config.txt: document include, includeIf

Martin Ågren (3):
      config/core.txt: fix minor issues for `core.sparseCheckoutCone`
      t4200: drop irrelevant code
      read-cache: make `do_read_index()` always set up `istate->repo`

Matheus Tavares (7):
      checkout: document bug where delayed checkout counts entries twice
      checkout: show bug about failed entries being included in final report
      checkout: fix two bugs on the final count of updated entries
      pkt-line.h: move comment closer to the associated code
      t0021: avoid grepping for a Perl-specific string at filter output
      t0021: implementation the rot13-filter.pl script in C
      tests: use the new C rot13-filter helper to avoid PERL prereq

Matthew John Cheetham (1):
      scalar: enable built-in FSMonitor on `register`

Miaoqian Lin (1):
      commit-graph: Fix missing closedir in expire_commit_graphs

Michael J Gruber (3):
      sequencer: do not translate reflog messages
      sequencer: do not translate parameters to error_resolve_conflict()
      sequencer: do not translate command names

Moritz Baumann (3):
      git-p4: fix CR LF handling for utf16 files
      git-p4: fix typo in P4Submit.applyCommit()
      git-p4: fix error handling in P4Unshelve.renameBranch()

Philip Oakley (1):
      doc add: renormalize is not idempotent for CRCRLF

Philippe Blain (3):
      diff-format.txt: dst can be 0* SHA-1 when path is deleted, too
      diff-format.txt: correct misleading wording
      diff-index.txt: update raw output format in examples

Phillip Wood (5):
      xdiff: introduce XDL_ALLOC_ARRAY()
      xdiff: introduce xdl_calloc
      xdiff: introduce XDL_CALLOC_ARRAY()
      xdiff: introduce XDL_ALLOC_GROW()
      tests: cache glibc version check

René Scharfe (28):
      archive: update format documentation
      archive: rename archiver data field to filter_command
      archive-tar: factor out write_block()
      archive-tar: add internal gzip implementation
      archive-tar: use OS_CODE 3 (Unix) for internal gzip
      archive-tar: use internal gzip by default
      combine-diff: abort if --ignore-matching-lines is given
      combine-diff: abort if --output is given
      cocci: avoid normalization rules for memcpy
      mingw: avoid mktemp() in mkstemp() implementation
      mergesort: unify ranks loops
      mergesort: tighten merge loop
      mergesort: add macros for typed sort of linked lists
      test-mergesort: use DEFINE_LIST_SORT_DEBUG
      test-mergesort: use DEFINE_LIST_SORT
      blame: use DEFINE_LIST_SORT
      commit: use DEFINE_LIST_SORT
      fetch-pack: use DEFINE_LIST_SORT
      packfile: use DEFINE_LIST_SORT
      mergesort: remove llist_mergesort()
      nonblock: support Windows
      tempfile: avoid directory cleanup race
      test-mergesort: read sort input all at once
      test-mergesort: use mem_pool for sort input
      diff-no-index: release strbuf on queue error
      diff-no-index: release prefixed filenames
      diff-no-index: simplify argv index calculation
      add -p: fix worktree patch mode prompts

Richard Oliver (1):
      mktree: do not check type of remote objects

SZEDER Gábor (30):
      Makefile: build 'gitweb' in the default target
      multi-pack-index: simplify handling of unknown --options
      index-format.txt: remove outdated list of supported extensions
      git.c: update NO_PARSEOPT markings
      t3301-notes.sh: check that default operation mode doesn't take arguments
      t5505-remote.sh: check the behavior without a subcommand
      t0040-parse-options: test parse_options() with various 'parse_opt_flags'
      api-parse-options.txt: fix description of OPT_CMDMODE
      parse-options: PARSE_OPT_KEEP_UNKNOWN only applies to --options
      parse-options: clarify the limitations of PARSE_OPT_NODASH
      parse-options: drop leading space from '--git-completion-helper' output
      parse-options: add support for parsing subcommands
      builtin/bundle.c: let parse-options parse subcommands
      builtin/commit-graph.c: let parse-options parse subcommands
      builtin/gc.c: let parse-options parse 'git maintenance's subcommands
      builtin/hook.c: let parse-options parse subcommands
      builtin/multi-pack-index.c: let parse-options parse subcommands
      builtin/notes.c: let parse-options parse subcommands
      builtin/reflog.c: let parse-options parse subcommands
      builtin/remote.c: let parse-options parse subcommands
      builtin/sparse-checkout.c: let parse-options parse subcommands
      builtin/stash.c: let parse-options parse subcommands
      builtin/worktree.c: let parse-options parse subcommands
      promisor-remote: fix xcalloc() argument order
      t0040-parse-options: remove leftover debugging
      test-parse-options.c: don't use for loop initial declaration
      test-parse-options.c: fix style of comparison with zero
      notes: simplify default operation mode arguments check
      notes, remote: show unknown subcommands between `'
      t/Makefile: remove 'test-results' on 'make clean'

Shaoxuan Yuan (22):
      t7002: add tests for moving out-of-cone file/directory
      t1092: mv directory from out-of-cone to in-cone
      mv: update sparsity after moving from out-of-cone to in-cone
      mv: decouple if/else-if checks using goto
      mv: check if out-of-cone file exists in index with SKIP_WORKTREE bit
      mv: check if <destination> exists in index to handle overwriting
      mv: use flags mode for update_mode
      mv: add check_dir_in_index() and solve general dir check issue
      t1092: add tests for `git-rm`
      pathspec.h: move pathspec_needs_expanded_index() from reset.c to here
      rm: expand the index only when necessary
      rm: integrate with sparse-index
      t7002: add tests for moving from in-cone to out-of-cone
      mv: rename check_dir_in_index() to empty_dir_has_sparse_contents()
      mv: free the with_slash in check_dir_in_index()
      mv: check if <destination> is a SKIP_WORKTREE_DIR
      mv: remove BOTH from enum update_mode
      mv: from in-cone to out-of-cone
      mv: cleanup empty WORKING_DIRECTORY
      advice.h: add advise_on_moving_dirty_path()
      mv: check overwrite for in-to-out move
      builtin/mv.c: fix possible segfault in add_slash()

Siddharth Asthana (4):
      revision: improve commit_rewrite_person()
      ident: move commit_rewrite_person() to ident.c
      ident: rename commit_rewrite_person() to apply_mailmap_to_header()
      cat-file: add mailmap support

Tao Klerks (1):
      rev-parse: documentation adjustment - mention remote tracking with @{u}

Taylor Blau (14):
      pack-objects.h: remove outdated pahole results
      commit-graph: pass repo_settings instead of repository
      t5318: demonstrate commit-graph generation v2 corruption
      commit-graph: introduce `repo_find_commit_pos_in_graph()`
      commit-graph: fix corrupt upgrade from generation v1 to v2
      t1006: extract --batch-command inputs to variables
      builtin/cat-file.c: support NUL-delimited input with `-z`
      t5326: demonstrate potential bitmap corruption
      t/lib-bitmap.sh: avoid silencing stderr
      midx.c: extract `struct midx_fanout`
      midx.c: extract `midx_fanout_add_midx_fanout()`
      midx.c: extract `midx_fanout_add_pack_fanout()`
      midx.c: include preferred pack correctly with existing MIDX
      midx.c: avoid adding preferred objects twice

Teng Long (8):
      pack-bitmap.c: fix formatting of error messages
      pack-bitmap.c: mark more strings for translations
      pack-bitmap.c: rename "idx_name" to "bitmap_name"
      pack-bitmap.c: do not ignore error when opening a bitmap file
      pack-bitmap.c: using error() instead of silently returning -1
      pack-bitmap.c: continue looping when first MIDX bitmap is found
      api-trace2.txt: print config key-value pair
      tr2: shows scope unconditionally in addition to key-value pair

Todd Zullinger (2):
      docs: fix a few recently broken links
      api docs: link to html version of api-trace2

Victoria Dye (37):
      scalar: reword command documentation to clarify purpose
      scalar: convert README.md into a technical design doc
      checkout: fix nested sparse directory diff in sparse index
      oneway_diff: handle removed sparse directories
      cache.h: create 'index_name_pos_sparse()'
      unpack-trees: unpack new trees as sparse directories
      scalar-diagnose: use "$GIT_UNZIP" in test
      scalar-diagnose: avoid 32-bit overflow of size_t
      scalar-diagnose: add directory to archiver more gently
      scalar-diagnose: move 'get_disk_info()' to 'compat/'
      scalar-diagnose: move functionality to common location
      diagnose.c: add option to configure archive contents
      builtin/diagnose.c: create 'git diagnose' builtin
      builtin/diagnose.c: add '--mode' option
      builtin/bugreport.c: create '--diagnose' option
      scalar-diagnose: use 'git diagnose --mode=all'
      scalar: update technical doc roadmap
      scalar: constrain enlistment search
      scalar-unregister: handle error codes greater than 0
      scalar-[un]register: clearly indicate source of error
      scalar-delete: do not 'die()' in 'delete_enlistment()'
      scalar: move config setting logic into its own function
      scalar: update technical doc roadmap with FSMonitor support
      p0004: fix prereq declaration
      p0006: fix 'read-tree' argument ordering
      unpack-trees: fix sparse directory recursion check
      scalar: fix command documentation section header
      scalar: include in standard Git build & installation
      scalar: add to 'git help -a' command list
      scalar-clone: add test coverage
      t/perf: add Scalar performance tests
      t/perf: add 'GIT_PERF_USE_SCALAR' run option
      Documentation/technical: include Scalar technical doc
      diagnose.c: refactor to safely use 'd_type'
      Documentation: add ReviewingGuidelines
      diagnose: add to command-list.txt
      version: fix builtin linking & documentation

ZheNing Hu (2):
      ls-files: introduce "--format" option
      ls-files: fix black space in error message

brian m. carlson (2):
      sha256: add support for Nettle
      gc: use temporary file for editing crontab

Ævar Arnfjörð Bjarmason (153):
      t0008: don't rely on default ".git/info/exclude"
      tests: don't depend on template-created .git/branches
      tests: don't assume a .git/info for .git/info/grafts
      tests: don't assume a .git/info for .git/info/attributes
      tests: don't assume a .git/info for .git/info/refs
      tests: don't assume a .git/info for .git/info/exclude
      tests: don't assume a .git/info for .git/info/sparse-checkout
      object-file.c: factor out deflate part of write_loose_object()
      core doc: modernize core.bigFileThreshold documentation
      git-submodule.sh: remove unused sanitize_submodule_env()
      git-submodule.sh: remove unused $prefix variable
      git-submodule.sh: make the "$cached" variable a boolean
      git-submodule.sh: remove unused top-level "--branch" argument
      submodule--helper: have --require-init imply --init
      submodule update: remove "-v" option
      submodule--helper: rename "absorb-git-dirs" to "absorbgitdirs"
      submodule--helper: report "submodule" as our name in some "-h" output
      submodule--helper: understand --checkout, --merge and --rebase synonyms
      git-submodule.sh: use "$quiet", not "$GIT_QUIET"
      git-sh-setup.sh: remove "say" function, change last users
      gitweb/Makefile: define all .PHONY prerequisites inline
      gitweb/Makefile: add a $(GITWEB_ALL) variable
      gitweb/Makefile: clear up and de-duplicate the gitweb.{css,js} vars
      gitweb/Makefile: prepare to merge into top-level Makefile
      gitweb: remove "test" and "test-installed" targets
      gitweb/Makefile: include in top-level Makefile
      gitweb/Makefile: add a "NO_GITWEB" parameter
      tests: add missing double quotes to included library paths
      test-lib.sh: fix prepend_var() quoting issue
      config tests: fix harmless but broken "rm -r" cleanup
      submodule--helper: remove unused SUPPORT_SUPER_PREFIX flags
      check-ref-format: fix trivial memory leak
      clone: fix memory leak in wanted_peer_refs()
      submodule.c: free() memory from xgetcwd()
      revert: free "struct replay_opts" members
      cat-file: fix a memory leak in --batch-command mode
      merge-file: refactor for subsequent memory leak fix
      merge-file: fix memory leaks on error path
      checkout: avoid "struct unpack_trees_options" leak
      gc: fix a memory leak
      cat-file: fix a common "struct object_context" memory leak
      pull: fix a "struct oid_array" memory leak
      test-tool test-hash: fix a memory leak
      test-tool path-utils: fix a memory leak
      test-tool {dump,scrap}-cache-tree: fix memory leaks
      test-tool urlmatch-normalization: fix a memory leak
      test-tool regex: call regfree(), fix memory leaks
      test-tool json-writer: fix memory leaks
      test-tool bloom: fix memory leaks
      test-tool ref-store: fix a memory leak
      test-tool delta: fix a memory leak
      Makefile: remove mandatory "spatch" arguments from SPATCH_FLAGS
      Makefile & .gitignore: ignore & clean "git.res", not "*.res"
      cocci: add a "coccicheck-test" target and test *.cocci rules
      cocci: have "coccicheck{,-pending}" depend on "coccicheck-test"
      cocci: add and apply a rule to find "unused" strbufs
      cocci: generalize "unused" rule to cover more than "strbuf"
      trace2: only include "fsync" events if we git_fsync()
      test-lib: use $1, not $@ in test_known_broken_{ok,failure}_
      test-lib: don't set GIT_EXIT_OK before calling test_atexit_handler
      test-lib: fix GIT_EXIT_OK logic errors, use BAIL_OUT
      test-lib: add a --invert-exit-code switch
      t/README: reword the "GIT_TEST_PASSING_SANITIZE_LEAK" description
      test-lib: add a SANITIZE=leak logging mode
      t/Makefile: don't remove test-results in "clean-except-prove-cache"
      tests: move copy/pasted PERL + Test::More checks to a lib-perl.sh
      test-lib: simplify by removing test_external
      test-lib: add a GIT_TEST_PASSING_SANITIZE_LEAK=check mode
      test-lib: have the "check" mode for SANITIZE=leak consider leak logs
      leak tests: don't skip some tests under SANITIZE=leak
      leak tests: mark passing SANITIZE=leak tests as leak-free
      upload-pack: fix a memory leak in create_pack_file()
      CI: use "GIT_TEST_SANITIZE_LEAK_LOG=true" in linux-leaks
      bisect.c: add missing "goto" for release_revisions()
      test-fast-rebase helper: use release_revisions() (again)
      log: fix a memory leak in "git show <revision>..."
      log: refactor "rev.pending" code in cmd_show()
      bisect.c: partially fix bisect_rev_setup() memory leak
      revisions API: don't leak memory on argv elements that need free()-ing
      help.c: refactor drop_prefix() to use a "switch" statement"
      help.c: remove common category behavior from drop_prefix() behavior
      git help doc: use "<doc>" instead of "<guide>"
      git docs: add a category for user-facing file, repo and command UX
      git docs: add a category for file formats, protocols and interfaces
      docs: move commit-graph format docs to man section 5
      docs: move protocol-related docs to man section 5
      docs: move index format docs to man section 5
      docs: move signature docs to man section 5
      docs: move pack format docs to man section 5
      docs: move cruft pack docs to gitformat-pack
      docs: move http-protocol docs to man section 5
      hook API: don't segfault on strbuf_addf() to NULL "out"
      Makefile + hash.h: remove PPC_SHA1 implementation
      Makefile: use $(OBJECTS) instead of $(C_OBJ)
      git-compat-util.h: use "UNUSED", not "UNUSED(var)"
      git-compat-util.h: use "deprecated" for UNUSED variables
      submodule tests: test usage behavior
      submodule tests: test for "add <repository> <abs-path>"
      submodule--helper: remove unused "name" helper
      submodule--helper: remove unused "list" helper
      test-tool submodule-config: remove unused "--url" handling
      submodule--helper: move "is-active" to a test-tool
      submodule--helper: move "check-name" to a test-tool
      submodule--helper: move "resolve-relative-url-test" to a test-tool
      submodule--helper style: don't separate declared variables with \n\n
      submodule--helper style: add \n\n after variable declarations
      submodule--helper: replace memset() with { 0 }-initialization
      submodule--helper: use xstrfmt() in clone_submodule()
      submodule--helper: move "sb" in clone_submodule() to its own scope
      submodule--helper: add "const" to passed "module_clone_data"
      submodule--helper: add "const" to passed "struct update_data"
      submodule--helper: don't redundantly check "else if (res)"
      submodule--helper: rename "int res" to "int ret"
      submodule--helper: return "ret", not "1" from update_submodule()
      submodule--helper: add missing braces to "else" arm
      submodule--helper: don't call submodule_strategy_to_string() in BUG()
      submodule API: don't handle SM_..{UNSPECIFIED,COMMAND} in to_string()
      submodule--helper: use "code" in run_update_command()
      submodule--helper: don't exit() on failure, return
      submodule--helper: libify determine_submodule_update_strategy()
      submodule--helper: libify "must_die_on_failure" code paths
      submodule--helper update: don't override 'checkout' exit code
      submodule--helper: libify "must_die_on_failure" code paths (for die)
      submodule--helper: check repo{_submodule,}_init() return values
      submodule--helper: libify more "die" paths for module_update()
      submodule--helper: libify even more "die" paths for module_update()
      submodule--helper: fix bad config API usage
      submodule--helper: fix a leak in "clone_submodule"
      submodule--helper: fix trivial get_default_remote_submodule() leak
      submodule--helper: fix most "struct pathspec" memory leaks
      submodule--helper: "struct pathspec" memory leak in module_update()
      submodule--helper: don't leak {run,capture}_command() cp.dir argument
      submodule--helper: add and use *_release() functions
      submodule--helper: fix "errmsg_str" memory leak
      submodule--helper: fix "sm_path" and other "module_cb_list" leaks
      submodule--helper: fix a leak with repo_clear()
      submodule--helper: fix a memory leak in get_default_remote_submodule()
      submodule--helper: fix "reference" leak
      submodule--helper: fix obscure leak in module_add()
      submodule--helper: fix a leak in module_add()
      submodule--helper: fix a memory leak in print_status()
      submodule--helper: free some "displaypath" in "struct update_data"
      submodule--helper: free rest of "displaypath" in "struct update_data"
      submodule--helper: fix a configure_added_submodule() leak
      docs: add and use include template for config/* includes
      grep docs: de-duplicate configuration sections
      send-email docs: de-duplicate configuration sections
      apply docs: de-duplicate configuration sections
      notes docs: de-duplicate and combine configuration sections
      difftool docs: de-duplicate configuration sections
      log docs: de-duplicate configuration sections
      docs: add CONFIGURATION sections that map to a built-in
      docs: add CONFIGURATION sections that fuzzy map to built-ins

Øystein Walle (1):
      rev-parse --parseopt: detect missing opt-spec


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.38.0-rc0
@ 2022-09-16  2:37  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2022-09-16  2:37 UTC (permalink / raw)
  To: git

An early preview release Git v2.38.0-rc0 is now available for
testing at the usual places.  It is comprised of 607 non-merge
commits since v2.37.0, contributed by 75 people, 21 of which are
new faces [*].

Since many contributors are travelling for Git Merge conference this
week, I do not expect a lot of activities around this one.  Just
treat it as one of the normal updates to the tip of the 'master'
branch.  The real fun will begin with -rc1, where we enter feature
freeze for the upcoming release, which is expected to happen mid
next week.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.38.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.37.0 are as follows.
Welcome to the Git development community!

  Andrew Olsen, Anthony Delannoy, Carlos López, Celeste Liu,
  Cleber Rosa, David Plumpton, Eric DeCosta, Goss Geppert, Ilya
  K, Ingy dot Net, Jacob Stopak, Julien Rouhaud, Kilian Kilger,
  Lana Deere, Manuel Boni, Matthew Klein, Moritz Baumann, Pavel
  Rappo, Pierre Garnier, Richard Oliver, and Xavier Morel.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Abhradeep Chakraborty, Ævar Arnfjörð Bjarmason, Arthur
  Milchior, brian m. carlson, Calvin Wan, Carlo Marcelo Arenas
  Belón, Christian Couder, Christoph Reiter, Derrick Stolee,
  Dimitriy Ryazantcev, Đoàn Trần Công Danh, Elijah Newren,
  Emily Shaffer, Eric Sunshine, Felipe Contreras, Fernando Ramos,
  Glen Choo, Han Xin, Hariom Verma, Jacob Keller, Jaydeep Das,
  Jeff King, Jiang Xin, Joey Hess, Johannes Schindelin, John Cai,
  Jonathan Tan, Josh Steadmon, Junio C Hamano, Justin Donnelly,
  Kyle Zhao, Lessley Dennington, Li Linchao, Linus Torvalds,
  Martin Ågren, Matheus Tavares, Matthew John Cheetham, Michael
  J Gruber, Øystein Walle, Philip Oakley, Philippe Blain, Phillip
  Wood, Randall S. Becker, Renato Botelho, René Scharfe, Shaoxuan
  Yuan, Siddharth Asthana, SZEDER Gábor, Tao Klerks, Taylor Blau,
  Teng Long, Torsten Bögershausen, Victoria Dye, and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.38 Release Notes (draft)
===============================

UI, Workflows & Features

 * "git remote show [-n] frotz" now pays attention to negative
   pathspec.

 * "git push" sometimes perform poorly when reachability bitmaps are
   used, even in a repository where other operations are helped by
   bitmaps.  The push.useBitmaps configuration variable is introduced
   to allow disabling use of reachability bitmaps only for "git push".

 * "git grep -m<max-hits>" is a way to limit the hits shown per file.

 * "git merge-tree" learned a new mode where it takes two commits and
   computes a tree that would result in the merge commit, if the
   histories leading to these two commits were to be merged.

 * "git mv A B" in a sparsely populated working tree can be asked to
   move a path between directories that are "in cone" (i.e. expected
   to be materialized in the working tree) and "out of cone"
   (i.e. expected to be hidden).  The handling of such cases has been
   improved.

 * Earlier, HTTP transport clients learned to tell the server side
   what locale they are in by sending Accept-Language HTTP header, but
   this was done only for some requests but not others.

 * Introduce a discovery.barerepository configuration variable that
   allows users to forbid discovery of bare repositories.

 * Various messages that come from the pack-bitmap codepaths have been
   tweaked.

 * "git rebase -i" learns to update branches whose tip appear in the
   rebased range with "--update-refs" option.

 * "git ls-files" learns the "--format" option to tweak its output.

 * "git cat-file" learned an option to use the mailmap when showing
   commit and tag objects.

 * When "git merge" finds that it cannot perform a merge, it should
   restore the working tree to the state before the command was
   initiated, but in some corner cases it didn't.

 * Operating modes like "--batch" of "git cat-file" command learned to
   take NUL-terminated input, instead of one-item-per-line.

 * "git rm" has become more aware of the sparse-index feature.

 * "git rev-list --disk-usage" learned to take an optional value
   "human" to show the reported value in human-readable format, like
   "3.40MiB".

 * The "diagnose" feature to create a zip archive for diagnostic
   material has been lifted from "scalar" and made into a feature of
   "git bugreport".

 * The namespaces used by "log --decorate" from "refs/" hierarchy by
   default has been tightened.

 * "git rev-list --ancestry-path=C A..B" is a natural extension of
   "git rev-list A..B"; instead of choosing a subset of A..B to those
   that have ancestry relationship with A, it lets a subset with
   ancestry relationship with C.

 * "scalar" now enables built-in fsmonitor on enlisted repositories,
   when able.

 * The bash prompt (in contrib/) learned to optionally indicate when
   the index is unmerged.

 * "git clone" command learned the "--bundle-uri" option to coordinate
   with hosting sites the use of pre-prepared bundle files.

 * "git range-diff" learned to honor pathspec argument if given.

 * "git format-patch --from=<ident>" can be told to add an in-body
   "From:" line even for commits that are authored by the given
   <ident> with "--force-in-body-from"option.

 * The built-in fsmonitor refuses to work on a network mounted
   repositories; a configuration knob for users to override this has
   been introduced.


Performance, Internal Implementation, Development Support etc.

 * Collection of what is referenced by objects in promisor packs have
   been optimized to inspect these objects in the in-pack order.

 * Introduce a helper to see if a branch is already being worked on
   (hence should not be newly checked out in a working tree), which
   performs much better than the existing find_shared_symref() to
   replace many uses of the latter.

 * Teach "git archive" to (optionally and then by default) avoid
   spawning an external "gzip" process when creating ".tar.gz" (and
   ".tgz") archives.

 * Allow large objects read from a packstream to be streamed into a
   loose object file straight, without having to keep it in-core as a
   whole.

 * Further preparation to turn git-submodule.sh into a builtin
   continues.

 * Apply Coccinelle rule to turn raw memmove() into MOVE_ARRAY() cpp
   macro, which would improve maintainability and readability.

 * Teach "make all" to build gitweb as well.

 * Tweak tests so that they still work when the "git init" template
   did not create .git/info directory.

 * Add Coccinelle rules to detect the pattern of initializing and then
   finalizing a structure without using it in between at all, which
   happens after code restructuring and the compilers fail to
   recognize as an unused variable.

 * The code to convert between GPG trust level strings and internal
   constants we use to represent them have been cleaned up.

 * Support for libnettle as SHA256 implementation has been added.

 * The way "git multi-pack" uses parse-options API has been improved.

 * A coccinelle rule (in contrib/) to encourage use of COPY_ARRAY
   macro has been improved.

 * API tweak to make it easier to run fuzz testing on commit-graph parser.

 * Omit fsync-related trace2 entries when their values are all zero.

 * The codepath to write multi-pack index has been taught to release a
   large chunk of memory that holds an array of objects in the packs,
   as soon as it is done with the array, to reduce memory consumption.

 * Add a level of redirection to array allocation API in xdiff part,
   to make it easier to share with the libgit2 project.

 * "git fetch" client logs the partial clone filter used in the trace2
   output.

 * The "bundle URI" design gets documented.

 * The common ancestor negotiation exchange during a "git fetch"
   session now leaves trace log.

 * Test portability improvements.
   (merge 4d1d843be7 mt/rot13-in-c later to maint).

 * The "subcommand" mode is introduced to parse-options API and update
   the command line parser of Git commands with subcommands.

 * The pack bitmap file gained a bitmap-lookup table to speed up
   locating the necessary bitmap for a given commit.

 * The assembly version of SHA-1 implementation for PPC has been
   removed.

 * The server side that responds to "git fetch" and "git clone"
   request has been optimized by allowing it to send objects in its
   object store without recomputing and validating the object names.

 * Annotate function parameters that are not used (but cannot be
   removed for structural reasons), to prepare us to later compile
   with -Wunused warning turned on.

 * Share the text used to explain configuration variables used by "git
   <subcmd>" in "git help <subcmd>" with the text from "git help config".


Fixes since v2.37
-----------------

 * Rewrite of "git add -i" in C that appeared in Git 2.25 didn't
   correctly record a removed file to the index, which was fixed.

 * Certain diff options are currently ignored when combined-diff is
   shown; mark them as incompatible with the feature.

 * Adjust technical/bitmap-format to be formatted by AsciiDoc, and
   add some missing information to the documentation.

 * Fixes for tests when the source directory has unusual characters in
   its path, e.g. whitespaces, double-quotes, etc.

 * "git mktree --missing" lazily fetched objects that are missing from
   the local object store, which was totally unnecessary for the purpose
   of creating the tree object(s) from its input.

 * Give _() markings to fatal/warning/usage: labels that are shown in
   front of these messages.

 * References to commands-to-be-typed-literally in "git rebase"
   documentation mark-up have been corrected.

 * In a non-bare repository, the behavior of Git when the
   core.worktree configuration variable points at a directory that has
   a repository as its subdirectory, regressed in Git 2.27 days.

 * Recent update to vimdiff layout code has been made more robust
   against different end-user vim settings.

 * Plug various memory leaks, both in the main code and in test-tool
   commands.

 * Fixes a long-standing corner case bug around directory renames in
   the merge-ort strategy.

 * The resolve-undo information in the index was not protected against
   GC, which has been corrected.

 * A corner case bug where lazily fetching objects from a promisor
   remote resulted in infinite recursion has been corrected.

 * "git clone" from a repository with some ref whose HEAD is unborn
   did not set the HEAD in the resulting repository correctly, which
   has been corrected.

 * An earlier attempt to plug leaks placed a clean-up label to jump to
   at a bogus place, which as been corrected.

 * Variable quoting fix in the vimdiff driver of "git mergetool"

 * "git shortlog -n" relied on the underlying qsort() to be stable,
   which shouldn't have.  Fixed.

 * A fix for a regression in test framework.

 * mkstemp() emulation on Windows has been improved.

 * Add missing documentation for "include" and "includeIf" features in
   "git config" file format, which incidentally teaches the command
   line completion to include them in its offerings.

 * Avoid "white/black-list" in documentation and code comments.

 * Workaround for a compiler warning against use of die() in
   osx-keychain (in contrib/).

 * Workaround for a false positive compiler warning.

 * "git p4" working on UTF-16 files on Windows did not implement
   CRLF-to-LF conversion correctly, which has been corrected.

 * "git p4" did not handle non-ASCII client name well, which has been
   corrected.

 * "rerere-train" script (in contrib/) used to honor commit.gpgSign
   while recreating the throw-away merges.

 * "git checkout" miscounted the paths it updated, which has been
   corrected.

 * Fix for a bug that makes write-tree to fail to write out a
   non-existent index as a tree, introduced in 2.37.

 * There was a bug in the codepath to upgrade generation information
   in commit-graph from v1 to v2 format, which has been corrected.

 * Gitweb had legacy URL shortener that is specific to the way
   projects hosted on kernel.org used to (but no longer) work, which
   has been removed.

 * Fix build procedure for Windows that uses CMake so that it can pick
   up the shell interpreter from local installation location.

 * Conditionally allow building Python interpreter on Windows

 * Fix to lstat() emulation on Windows.

 * Older gcc with -Wall complains about the universal zero initializer
   "struct s = { 0 };" idiom, which makes developers' lives
   inconvenient (as -Werror is enabled by DEVELOPER=YesPlease).  The
   build procedure has been tweaked to help these compilers.

 * Plug memory leaks in the failure code path in the "merge-ort" merge
   strategy backend.

 * "git symbolic-ref symref non..sen..se" is now diagnosed as an error.

 * A follow-up fix to a fix for a regression in 2.36 around hooks.

 * Avoid repeatedly running getconf to ask libc version in the test
   suite, and instead just as it once per script.

 * Platform-specific code that determines if a directory is OK to use
   as a repository has been taught to report more details, especially
   on Windows.

 * "vimdiff3" regression fix.

 * "git fsck" reads mode from tree objects but canonicalizes the mode
   before passing it to the logic to check object sanity, which has
   hid broken tree objects from the checking logic.  This has been
   corrected, but to help exiting projects with broken tree objects
   that they cannot fix retroactively, the severity of anomalies this
   code detects has been demoted to "info" for now.

 * Fixes to sparse index compatibility work for "reset" and "checkout"
   commands.

 * An earlier optimization discarded a tree-object buffer that is
   still in use, which has been corrected.
   (merge 1490d7d82d jk/is-promisor-object-keep-tree-in-use later to maint).

 * Fix deadlocks between main Git process and subprocess spawned via
   the pipe_command() API, that can kill "git add -p" that was
   reimplemented in C recently.
   (merge 716c1f649e jk/pipe-command-nonblock later to maint).

 * The sequencer machinery translated messages left in the reflog by
   mistake, which has been corrected.

 * xcalloc(), imitating calloc(), takes "number of elements of the
   array", and "size of a single element", in this order.  A call that
   does not follow this ordering has been corrected.
   (merge c4bbd9bb8f sg/xcalloc-cocci-fix later to maint).

 * The preload-index codepath made copies of pathspec to give to
   multiple threads, which were left leaked.
   (merge 23578904da ad/preload-plug-memleak later to maint).

 * Update the version of Ubuntu used for GitHub Actions CI from 18.04
   to 22.04.
   (merge ef46584831 ds/github-actions-use-newer-ubuntu later to maint).

 * The auto-stashed local changes created by "git merge --autostash"
   was mixed into a conflicted state left in the working tree, which
   has been corrected.
   (merge d3a9295ada en/merge-unstash-only-on-clean-merge later to maint).

 * Multi-pack index got corrupted when preferred pack changed from one
   pack to another in a certain way, which has been corrected.
   (merge 99e4d084ff tb/midx-with-changing-preferred-pack-fix later to maint).

 * The clean-up of temporary files created via mks_tempfile_dt() was
   racy and attempted to unlink() the leading directory when signals
   are involved, which has been corrected.
   (merge babe2e0559 rs/tempfile-cleanup-race-fix later to maint).

 * FreeBSD portability fix for "git maintenance" that spawns "crontab"
   to schedule tasks.
   (merge ee69e7884e bc/gc-crontab-fix later to maint).

 * Those who use diff-so-fancy as the diff-filter noticed a regression
   or two in the code that parses the diff output in the built-in
   version of "add -p", which has been corrected.
   (merge 0a101676e5 js/add-p-diff-parsing-fix later to maint).

 * Segfault fix-up to an earlier fix to the topic to teach "git reset"
   and "git checkout" work better in a sparse checkout.
   (merge 037f8ea6d9 vd/sparse-reset-checkout-fixes later to maint).

 * "git diff --no-index A B" managed its the pathnames of its two
   input files rather haphazardly, sometimes leaking them.  The
   command line argument processing has been straightened out to clean
   it up.
   (merge 2b43dd0eb5 rs/diff-no-index-cleanup later to maint).

 * "git rev-list --verify-objects" ought to inspect the contents of
   objects and notice corrupted ones, but it didn't when the commit
   graph is in use, which has been corrected.
   (merge b27ccae34b jk/rev-list-verify-objects-fix later to maint).

 * More fixes to "add -p"
   (merge 64ec8efb83 js/builtin-add-p-portability-fix later to maint).

 * The parser in the script interface to parse-options in "git
   rev-parse" has been updated to diagnose a bogus input correctly.
   (merge f20b9c36d0 ow/rev-parse-parseopt-fix later to maint).

 * The code that manages list-object-filter structure, used in partial
   clones, leaked the instances, which has been plugged.
   (merge 66eede4a37 jk/plug-list-object-filter-leaks later to maint).

 * Fix another UI regression in the reimplemented "add -p".
   (merge f6f0ee247f rs/add-p-worktree-mode-prompt-fix later to maint).

 * "git fetch" over protocol v2 sent an incorrect ref prefix request
   to the server and made "git pull" with configured fetch refspec
   that does not cover the remote branch to merge with fail, which has
   been corrected.
   (merge 49ca2fba39 jk/proto-v2-ref-prefix-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 77b9e85c0f vd/fix-perf-tests later to maint).
   (merge 0682bc43f5 jk/test-crontab-fixes later to maint).
   (merge b46dd1726c cc/doc-trailer-whitespace-rules later to maint).

----------------------------------------------------------------

Changes since v2.37.0 are as follows:

Abhradeep Chakraborty (9):
      bitmap-format.txt: feed the file to asciidoc to generate html
      bitmap-format.txt: fix some formatting issues
      bitmap-format.txt: add information for trailing checksum
      Documentation/technical: describe bitmap lookup table extension
      bitmap: move `get commit positions` code to `bitmap_writer_finish`
      pack-bitmap-write.c: write lookup table extension
      pack-bitmap-write: learn pack.writeBitmapLookupTable and add tests
      pack-bitmap: prepare to read lookup table extension
      bitmap-lookup-table: add performance tests for lookup table

Anthony Delannoy (1):
      preload-index: fix memleak

Calvin Wan (1):
      submodule merge: update conflict error message

Carlo Marcelo Arenas Belón (2):
      setup: tighten ownership checks post CVE-2022-24765
      cmake: support local installations of git

Carlos López (1):
      grep: add --max-count command line option

Celeste Liu (1):
      contrib/rerere-train: avoid useless gpg sign in training

Christian Couder (1):
      Documentation: clarify whitespace rules for trailers

Cleber Rosa (1):
      setup: fix function name in a BUG() message

Derrick Stolee (50):
      branch: add branch_checked_out() helper
      branch: check for bisects and rebases
      fetch: use new branch_checked_out() and add tests
      branch: use branch_checked_out() when deleting refs
      branch: fix branch_checked_out() leaks
      t5510: replace 'origin' with URL more carefully
      vscode: improve tab size and wrapping
      git-rebase.txt: use back-ticks consistently
      pack-bitmap-write: use const for hashes
      midx: extract bitmap write setup
      midx: reduce memory pressure while writing bitmaps
      daemon: clarify directory arguments
      git-cvsserver: clarify directory list
      git.txt: remove redundant language
      t: avoid "whitelist"
      transport.c: avoid "whitelist"
      t2407: test bisect and rebase as black-boxes
      t2407: test branches currently using apply backend
      branch: consider refs under 'update-refs'
      rebase-interactive: update 'merge' description
      sequencer: define array with enum values
      sequencer: add update-ref command
      rebase: add --update-refs option
      rebase: update refs from 'update-ref' commands
      sequencer: rewrite update-refs as user edits todo list
      rebase: add rebase.updateRefs config option
      sequencer: ignore HEAD ref under --update-refs
      sequencer: notify user of --update-refs activity
      compat/win32: correct for incorrect compiler warning
      refs: allow "HEAD" as decoration filter
      t4207: modernize test
      t4207: test coloring of grafted decorations
      refs: add array of ref namespaces
      refs: use ref_namespaces for replace refs base
      log-tree: use ref_namespaces instead of if/else-if
      log: add default decoration filter
      log: add --clear-decorations option
      log: create log.initialDecorationSet=all
      maintenance: stop writing log.excludeDecoration
      fetch: use ref_namespaces during prefetch
      docs: document bundle URI standard
      bundle-uri: add example bundle organization
      remote-curl: add 'get' capability
      bundle-uri: create basic file-copy logic
      clone: add --bundle-uri option
      bundle-uri: add support for http(s):// and file://
      clone: --bundle-uri cannot be combined with --depth
      t6019: modernize tests with helper
      clone: warn on failure to repo_init()
      ci: update 'static-analysis' to Ubuntu 22.04

Dimitriy Ryazantcev (1):
      i18n: mark message helpers prefix for translation

Elijah Newren (43):
      merge-tree: rename merge_trees() to trivial_merge_trees()
      merge-tree: move logic for existing merge into new function
      merge-tree: add option parsing and initial shell for real merge function
      merge-tree: implement real merges
      merge-ort: split out a separate display_update_messages() function
      merge-tree: support including merge messages in output
      merge-ort: provide a merge_get_conflicted_files() helper function
      merge-ort: remove command-line-centric submodule message from merge-ort
      merge-tree: provide a list of which files have conflicts
      merge-tree: provide easy access to `ls-files -u` style info
      merge-ort: store more specific conflict information
      merge-ort: optionally produce machine-readable output
      merge-tree: allow `ls-files -u` style info to be NUL terminated
      merge-tree: add a --allow-unrelated-histories flag
      git-merge-tree.txt: add a section on potentional usage mistakes
      t6429: fix use of non-existent function
      t6423: add tests of dual directory rename plus add/add conflict
      merge-ort: small cleanups of check_for_directory_rename
      merge-ort: make a separate function for freeing struct collisions
      merge-ort: shuffle the computation and cleanup of potential collisions
      merge-ort: fix issue with dual rename and add/add conflict
      merge-ort-wrappers: make printed message match the one from recursive
      merge-resolve: abort if index does not match HEAD
      merge: abort if index does not match HEAD for trivial merges
      merge: do not abort early if one strategy fails to handle the merge
      merge: fix save_state() to work when there are stat-dirty files
      merge: make restore_state() restore staged state too
      merge: ensure we can actually restore pre-merge state
      merge: do not exit restore_state() prematurely
      merge-ort: remove translator lego in new "submodule conflict suggestion"
      merge-ort: avoid surprise with new sub_flag variable
      merge-ort: provide helpful submodule update message when possible
      merge-ort: remove code obsoleted by other changes
      rev-list-options.txt: fix simple typo
      revision: allow --ancestry-path to take an argument
      merge: only apply autostash when appropriate
      merge: cleanup confusing logic for handling successful merges
      merge: small code readability improvement
      t4301: add more interesting merge-tree testcases
      t64xx: convert 'test_create_repo' to 'git init'
      diff: have submodule_format logic avoid additional diff headers
      diff: fix filtering of additional headers under --remerge-diff
      diff: fix filtering of merge commits under --remerge-diff

Eric DeCosta (1):
      fsmonitor: option to allow fsmonitor to run against network-mounted repos

Eric Sunshine (6):
      t2407: fix broken &&-chains in compound statement
      t1092: fix buggy sparse "blame" test
      t: detect and signal failure within loop
      t4301: account for behavior differences between sed implementations
      t4301: fix broken &&-chains and add missing loop termination
      t4301: emit blank line in more idiomatic fashion

Felipe Contreras (7):
      mergetools: vimdiff: fix comment
      mergetools: vimdiff: make vimdiff3 actually work
      mergetools: vimdiff: silence annoying messages
      mergetools: vimdiff: fix for diffopt
      mergetools: vimdiff: rework tab logic
      mergetools: vimdiff: fix single window layouts
      mergetools: vimdiff: simplify tabfirst

Fernando Ramos (1):
      vimdiff: make layout engine more robust against user vim settings

Glen Choo (16):
      submodule--helper: eliminate internal "--update" option
      submodule--helper tests: add missing "display path" coverage
      submodule--helper update: use display path helper
      submodule--helper: don't recreate recursive prefix
      submodule--helper: use correct display path helper
      submodule--helper update: use --super-prefix
      submodule--helper: remove display path helper
      Documentation/git-config.txt: add SCOPES section
      Documentation: define protected configuration
      config: learn `git_protected_config()`
      safe.directory: use git_protected_config()
      setup.c: create `safe.bareRepository`
      config.c: NULL check when reading protected config
      Documentation/git-reflog: remove unneeded \ from \{
      submodule--helper: add "const" to copy of "update_data"
      submodule--helper: refactor "errmsg_str" to be a "struct strbuf"

Goss Geppert (2):
      dir: traverse into repository
      dir: minor refactoring / clean-up

Han Xin (6):
      unpack-objects: low memory footprint for get_data() in dry_run mode
      object-file.c: refactor write_loose_object() to several steps
      object-file.c: add "stream_loose_object()" to handle large object
      unpack-objects: use stream_loose_object() to unpack large objects
      commit-graph.c: no lazy fetch in lookup_commit_in_graph()
      t5330: remove run_with_limited_processses()

Jacob Keller (1):
      remote: handle negative refspecs in git remote show

Jacob Stopak (1):
      Documentation: fix various repeat word typos

Jaydeep Das (1):
      gpg-interface: add function for converting trust level to string

Jeff King (59):
      is_promisor_object(): walk promisor packs in pack-order
      fetch: stop passing around unused worktrees variable
      branch: drop unused worktrees variable
      revisions.txt: escape "..." to avoid asciidoc horizontal ellipsis
      clone: drop extra newline from warning message
      clone: propagate empty remote HEAD even with other branches
      clone: use remote branch if it matches default HEAD
      clone: move unborn head creation to update_head()
      ref-filter: disable save_commit_buffer while traversing
      diff-files: move misplaced cleanup label
      write_midx_bitmap(): drop unused refs_snapshot parameter
      config.mak.dev: squelch -Wno-missing-braces for older gcc
      tree-walk: add a mechanism for getting non-canonicalized modes
      fsck: actually detect bad file modes in trees
      fsck: downgrade tree badFilemode to "info"
      is_promisor_object(): fix use-after-free of tree buffer
      compat: add function to enable nonblocking pipes
      git-compat-util: make MAX_IO_SIZE define globally available
      pipe_command(): avoid xwrite() for writing to pipe
      pipe_command(): handle ENOSPC when writing to a pipe
      pipe_command(): mark stdin descriptor as non-blocking
      git-compat-util: add UNUSED macro
      refs: mark unused each_ref_fn parameters
      refs: mark unused reflog callback parameters
      refs: mark unused virtual method parameters
      transport: mark bundle transport_options as unused
      streaming: mark unused virtual method parameters
      config: mark unused callback parameters
      hashmap: mark unused callback parameters
      mark unused read_tree_recursive() callback parameters
      run-command: mark unused async callback parameters
      is_path_owned_by_current_uid(): mark "report" parameter as unused
      xdiff: drop unused mmfile parameters from xdl_do_histogram_diff()
      log-tree: drop unused commit param in remerge_diff()
      match_pathname(): drop unused "flags" parameter
      verify_one_sparse(): drop unused parameters
      reftable: drop unused parameter from reader_seek_linear()
      reflog: assert PARSE_OPT_NONEG in parse-options callbacks
      xdiff: drop unused mmfile parameters from xdl_do_patience_diff()
      pass subcommand "prefix" arguments to parse_options()
      maintenance: add parse-options boilerplate for subcommands
      remote: run "remote rm" argv through parse_options()
      pack-bitmap-write: drop unused pack_idx_entry parameters
      tempfile: drop active flag
      tempfile: update comment describing state transitions
      test-crontab: minor memory and error handling fixes
      lookup_commit_in_graph(): use prepare_commit_graph() to check for graph
      rev-list: disable commit graph with --verify-objects
      parse_object(): allow skipping hash check
      upload-pack: skip parse-object re-hashing of "want" objects
      parse_object(): check commit-graph when skip_hash set
      t1060: check partial clone of misnamed blob
      list_objects_filter_copy(): deep-copy sparse_oid_name field
      transport: deep-copy object-filter struct for fetch-pack
      transport: free filter options in disconnect_git()
      list_objects_filter_options: plug leak of filter_spec strings
      prepare_repo_settings(): plug leak of config values
      fetch: stop checking for NULL transport->remote in do_fetch()
      fetch: add branch.*.merge to default ref-prefix extension

Johannes Schindelin (36):
      merge-ort: store messages in a list, not in a single strbuf
      merge-ort: make `path_messages` a strmap to a string_list
      Git 2.30.5
      Git 2.31.4
      Git 2.32.3
      Git 2.33.4
      Git 2.34.4
      Git 2.35.4
      Git 2.36.2
      add --interactive: allow `update` to stage deleted files
      tests: fix incorrect --write-junit-xml code
      mergetool(vimdiff): allow paths to contain spaces again
      shortlog: use a stable sort
      t5351: avoid relying on `core.fsyncMethod = batch` to be supported
      t5351: avoid using `test_cmp` for binary data
      windows: include the Python bits when building Git for Windows
      mingw: remove unneeded `NO_GETTEXT` directive
      mingw: remove unneeded `NO_CURL` directive
      lstat(mingw): correctly detect ENOTDIR scenarios
      merge-ort: clean up after failed merge
      merge-ort: do leave trace2 region even if checkout fails
      setup: fix some formatting
      setup: prepare for more detailed "dubious ownership" messages
      mingw: provide details about unsafe directories' ownership
      mingw: be more informative when ownership check fails on FAT32
      mingw: handle a file owned by the Administrators group correctly
      scalar unregister: stop FSMonitor daemon
      range-diff: reorder argument handling
      range-diff: consistently validate the arguments
      range-diff: optionally accept pathspecs
      add -p: avoid ambiguous signed/unsigned comparison
      t3701: test the built-in `add -i` regardless of NO_PERL
      t6132(NO_PERL): do not run the scripted `add -p`
      add -p: detect more mismatches between plain vs colored diffs
      add -p: gracefully handle unparseable hunk headers in colored diffs
      add -p: ignore dirty submodules

Jonathan Tan (1):
      fetch-pack: write effective filter to trace2

Josh Steadmon (1):
      fetch-pack: add tracing for negotiation rounds

Julien Rouhaud (1):
      gitweb: remove title shortening heuristics

Junio C Hamano (40):
      revision: mark blobs needed for resolve-undo as reachable
      A regression fix for 2.37
      Git 2.37.1
      builtin/mv.c: use the MOVE_ARRAY() macro instead of memmove()
      The first batch after Git 2.37
      fsck: do not dereference NULL while checking resolve-undo data
      The second batch
      The third batch
      The fourth batch
      The fifth batch
      builtin/remote.c: use the right kind of STRING_LIST_INIT
      The sixth batch
      The seventh batch
      Downmerge a handful of fixes for 2.37.x maintenance track
      The eighth batch
      The ninth batch
      doc: consolidate --rerere-autoupdate description
      doc: clarify rerere-autoupdate
      Downmerge a bit more for 2.37.x
      The tenth batch
      The eleventh batch
      Git 2.37.2
      The twelfth batch
      The thirteenth batch
      The fourteenth batch
      t5329: notice a failure within a loop
      The fifteenth batch
      A handful more topics from the 'master' front for 2.37.3
      pretty: separate out the logic to decide the use of in-body from
      format-patch: allow forcing the use of in-body From: header
      format-patch: learn format.forceInBodyFrom configuration variable
      The sixteenth batch
      Git 2.37.3
      The seventeenth batch
      The eighteenth batch
      The nineteenth batch
      The twentieth batch
      Merge a handful of topics from the 'master' front
      Prepare for 2.38-rc0
      Git 2.38-rc0

Justin Donnelly (1):
      git-prompt: show presence of unresolved conflicts at command prompt

Kilian Kilger (2):
      git-p4: fix bug with encoding of p4 client name
      git-p4: refactoring of p4CmdList()

Kyle Zhao (1):
      send-pack.c: add config push.useBitmaps

Lessley Dennington (1):
      osx-keychain: fix compiler warning

Li Linchao (3):
      ls-files: update test style
      remote-curl: send Accept-Language header to server
      rev-list: support human-readable output for `--disk-usage`

Linus Torvalds (1):
      symbolic-ref: refuse to set syntactically invalid target

Manuel Boni (1):
      config.txt: document include, includeIf

Martin Ågren (3):
      config/core.txt: fix minor issues for `core.sparseCheckoutCone`
      t4200: drop irrelevant code
      read-cache: make `do_read_index()` always set up `istate->repo`

Matheus Tavares (7):
      checkout: document bug where delayed checkout counts entries twice
      checkout: show bug about failed entries being included in final report
      checkout: fix two bugs on the final count of updated entries
      pkt-line.h: move comment closer to the associated code
      t0021: avoid grepping for a Perl-specific string at filter output
      t0021: implementation the rot13-filter.pl script in C
      tests: use the new C rot13-filter helper to avoid PERL prereq

Matthew John Cheetham (1):
      scalar: enable built-in FSMonitor on `register`

Michael J Gruber (3):
      sequencer: do not translate reflog messages
      sequencer: do not translate parameters to error_resolve_conflict()
      sequencer: do not translate command names

Moritz Baumann (3):
      git-p4: fix CR LF handling for utf16 files
      git-p4: fix typo in P4Submit.applyCommit()
      git-p4: fix error handling in P4Unshelve.renameBranch()

Philip Oakley (1):
      doc add: renormalize is not idempotent for CRCRLF

Philippe Blain (3):
      diff-format.txt: dst can be 0* SHA-1 when path is deleted, too
      diff-format.txt: correct misleading wording
      diff-index.txt: update raw output format in examples

Phillip Wood (5):
      xdiff: introduce XDL_ALLOC_ARRAY()
      xdiff: introduce xdl_calloc
      xdiff: introduce XDL_CALLOC_ARRAY()
      xdiff: introduce XDL_ALLOC_GROW()
      tests: cache glibc version check

René Scharfe (28):
      archive: update format documentation
      archive: rename archiver data field to filter_command
      archive-tar: factor out write_block()
      archive-tar: add internal gzip implementation
      archive-tar: use OS_CODE 3 (Unix) for internal gzip
      archive-tar: use internal gzip by default
      combine-diff: abort if --ignore-matching-lines is given
      combine-diff: abort if --output is given
      cocci: avoid normalization rules for memcpy
      mingw: avoid mktemp() in mkstemp() implementation
      mergesort: unify ranks loops
      mergesort: tighten merge loop
      mergesort: add macros for typed sort of linked lists
      test-mergesort: use DEFINE_LIST_SORT_DEBUG
      test-mergesort: use DEFINE_LIST_SORT
      blame: use DEFINE_LIST_SORT
      commit: use DEFINE_LIST_SORT
      fetch-pack: use DEFINE_LIST_SORT
      packfile: use DEFINE_LIST_SORT
      mergesort: remove llist_mergesort()
      nonblock: support Windows
      tempfile: avoid directory cleanup race
      test-mergesort: read sort input all at once
      test-mergesort: use mem_pool for sort input
      diff-no-index: release strbuf on queue error
      diff-no-index: release prefixed filenames
      diff-no-index: simplify argv index calculation
      add -p: fix worktree patch mode prompts

Richard Oliver (1):
      mktree: do not check type of remote objects

SZEDER Gábor (29):
      Makefile: build 'gitweb' in the default target
      multi-pack-index: simplify handling of unknown --options
      index-format.txt: remove outdated list of supported extensions
      git.c: update NO_PARSEOPT markings
      t3301-notes.sh: check that default operation mode doesn't take arguments
      t5505-remote.sh: check the behavior without a subcommand
      t0040-parse-options: test parse_options() with various 'parse_opt_flags'
      api-parse-options.txt: fix description of OPT_CMDMODE
      parse-options: PARSE_OPT_KEEP_UNKNOWN only applies to --options
      parse-options: clarify the limitations of PARSE_OPT_NODASH
      parse-options: drop leading space from '--git-completion-helper' output
      parse-options: add support for parsing subcommands
      builtin/bundle.c: let parse-options parse subcommands
      builtin/commit-graph.c: let parse-options parse subcommands
      builtin/gc.c: let parse-options parse 'git maintenance's subcommands
      builtin/hook.c: let parse-options parse subcommands
      builtin/multi-pack-index.c: let parse-options parse subcommands
      builtin/notes.c: let parse-options parse subcommands
      builtin/reflog.c: let parse-options parse subcommands
      builtin/remote.c: let parse-options parse subcommands
      builtin/sparse-checkout.c: let parse-options parse subcommands
      builtin/stash.c: let parse-options parse subcommands
      builtin/worktree.c: let parse-options parse subcommands
      promisor-remote: fix xcalloc() argument order
      t0040-parse-options: remove leftover debugging
      test-parse-options.c: don't use for loop initial declaration
      test-parse-options.c: fix style of comparison with zero
      notes: simplify default operation mode arguments check
      notes, remote: show unknown subcommands between `'

Shaoxuan Yuan (12):
      t7002: add tests for moving out-of-cone file/directory
      t1092: mv directory from out-of-cone to in-cone
      mv: update sparsity after moving from out-of-cone to in-cone
      mv: decouple if/else-if checks using goto
      mv: check if out-of-cone file exists in index with SKIP_WORKTREE bit
      mv: check if <destination> exists in index to handle overwriting
      mv: use flags mode for update_mode
      mv: add check_dir_in_index() and solve general dir check issue
      t1092: add tests for `git-rm`
      pathspec.h: move pathspec_needs_expanded_index() from reset.c to here
      rm: expand the index only when necessary
      rm: integrate with sparse-index

Siddharth Asthana (4):
      revision: improve commit_rewrite_person()
      ident: move commit_rewrite_person() to ident.c
      ident: rename commit_rewrite_person() to apply_mailmap_to_header()
      cat-file: add mailmap support

Tao Klerks (1):
      rev-parse: documentation adjustment - mention remote tracking with @{u}

Taylor Blau (14):
      pack-objects.h: remove outdated pahole results
      commit-graph: pass repo_settings instead of repository
      t5318: demonstrate commit-graph generation v2 corruption
      commit-graph: introduce `repo_find_commit_pos_in_graph()`
      commit-graph: fix corrupt upgrade from generation v1 to v2
      t1006: extract --batch-command inputs to variables
      builtin/cat-file.c: support NUL-delimited input with `-z`
      t5326: demonstrate potential bitmap corruption
      t/lib-bitmap.sh: avoid silencing stderr
      midx.c: extract `struct midx_fanout`
      midx.c: extract `midx_fanout_add_midx_fanout()`
      midx.c: extract `midx_fanout_add_pack_fanout()`
      midx.c: include preferred pack correctly with existing MIDX
      midx.c: avoid adding preferred objects twice

Teng Long (8):
      pack-bitmap.c: fix formatting of error messages
      pack-bitmap.c: mark more strings for translations
      pack-bitmap.c: rename "idx_name" to "bitmap_name"
      pack-bitmap.c: do not ignore error when opening a bitmap file
      pack-bitmap.c: using error() instead of silently returning -1
      pack-bitmap.c: continue looping when first MIDX bitmap is found
      api-trace2.txt: print config key-value pair
      tr2: shows scope unconditionally in addition to key-value pair

Victoria Dye (26):
      scalar: reword command documentation to clarify purpose
      scalar: convert README.md into a technical design doc
      checkout: fix nested sparse directory diff in sparse index
      oneway_diff: handle removed sparse directories
      cache.h: create 'index_name_pos_sparse()'
      unpack-trees: unpack new trees as sparse directories
      scalar-diagnose: use "$GIT_UNZIP" in test
      scalar-diagnose: avoid 32-bit overflow of size_t
      scalar-diagnose: add directory to archiver more gently
      scalar-diagnose: move 'get_disk_info()' to 'compat/'
      scalar-diagnose: move functionality to common location
      diagnose.c: add option to configure archive contents
      builtin/diagnose.c: create 'git diagnose' builtin
      builtin/diagnose.c: add '--mode' option
      builtin/bugreport.c: create '--diagnose' option
      scalar-diagnose: use 'git diagnose --mode=all'
      scalar: update technical doc roadmap
      scalar: constrain enlistment search
      scalar-unregister: handle error codes greater than 0
      scalar-[un]register: clearly indicate source of error
      scalar-delete: do not 'die()' in 'delete_enlistment()'
      scalar: move config setting logic into its own function
      scalar: update technical doc roadmap with FSMonitor support
      p0004: fix prereq declaration
      p0006: fix 'read-tree' argument ordering
      unpack-trees: fix sparse directory recursion check

ZheNing Hu (1):
      ls-files: introduce "--format" option

brian m. carlson (2):
      sha256: add support for Nettle
      gc: use temporary file for editing crontab

Ævar Arnfjörð Bjarmason (153):
      t0008: don't rely on default ".git/info/exclude"
      tests: don't depend on template-created .git/branches
      tests: don't assume a .git/info for .git/info/grafts
      tests: don't assume a .git/info for .git/info/attributes
      tests: don't assume a .git/info for .git/info/refs
      tests: don't assume a .git/info for .git/info/exclude
      tests: don't assume a .git/info for .git/info/sparse-checkout
      object-file.c: factor out deflate part of write_loose_object()
      core doc: modernize core.bigFileThreshold documentation
      git-submodule.sh: remove unused sanitize_submodule_env()
      git-submodule.sh: remove unused $prefix variable
      git-submodule.sh: make the "$cached" variable a boolean
      git-submodule.sh: remove unused top-level "--branch" argument
      submodule--helper: have --require-init imply --init
      submodule update: remove "-v" option
      submodule--helper: rename "absorb-git-dirs" to "absorbgitdirs"
      submodule--helper: report "submodule" as our name in some "-h" output
      submodule--helper: understand --checkout, --merge and --rebase synonyms
      git-submodule.sh: use "$quiet", not "$GIT_QUIET"
      git-sh-setup.sh: remove "say" function, change last users
      gitweb/Makefile: define all .PHONY prerequisites inline
      gitweb/Makefile: add a $(GITWEB_ALL) variable
      gitweb/Makefile: clear up and de-duplicate the gitweb.{css,js} vars
      gitweb/Makefile: prepare to merge into top-level Makefile
      gitweb: remove "test" and "test-installed" targets
      gitweb/Makefile: include in top-level Makefile
      gitweb/Makefile: add a "NO_GITWEB" parameter
      tests: add missing double quotes to included library paths
      test-lib.sh: fix prepend_var() quoting issue
      config tests: fix harmless but broken "rm -r" cleanup
      submodule--helper: remove unused SUPPORT_SUPER_PREFIX flags
      check-ref-format: fix trivial memory leak
      clone: fix memory leak in wanted_peer_refs()
      submodule.c: free() memory from xgetcwd()
      revert: free "struct replay_opts" members
      cat-file: fix a memory leak in --batch-command mode
      merge-file: refactor for subsequent memory leak fix
      merge-file: fix memory leaks on error path
      checkout: avoid "struct unpack_trees_options" leak
      gc: fix a memory leak
      cat-file: fix a common "struct object_context" memory leak
      pull: fix a "struct oid_array" memory leak
      test-tool test-hash: fix a memory leak
      test-tool path-utils: fix a memory leak
      test-tool {dump,scrap}-cache-tree: fix memory leaks
      test-tool urlmatch-normalization: fix a memory leak
      test-tool regex: call regfree(), fix memory leaks
      test-tool json-writer: fix memory leaks
      test-tool bloom: fix memory leaks
      test-tool ref-store: fix a memory leak
      test-tool delta: fix a memory leak
      Makefile: remove mandatory "spatch" arguments from SPATCH_FLAGS
      Makefile & .gitignore: ignore & clean "git.res", not "*.res"
      cocci: add a "coccicheck-test" target and test *.cocci rules
      cocci: have "coccicheck{,-pending}" depend on "coccicheck-test"
      cocci: add and apply a rule to find "unused" strbufs
      cocci: generalize "unused" rule to cover more than "strbuf"
      trace2: only include "fsync" events if we git_fsync()
      test-lib: use $1, not $@ in test_known_broken_{ok,failure}_
      test-lib: don't set GIT_EXIT_OK before calling test_atexit_handler
      test-lib: fix GIT_EXIT_OK logic errors, use BAIL_OUT
      test-lib: add a --invert-exit-code switch
      t/README: reword the "GIT_TEST_PASSING_SANITIZE_LEAK" description
      test-lib: add a SANITIZE=leak logging mode
      t/Makefile: don't remove test-results in "clean-except-prove-cache"
      tests: move copy/pasted PERL + Test::More checks to a lib-perl.sh
      test-lib: simplify by removing test_external
      test-lib: add a GIT_TEST_PASSING_SANITIZE_LEAK=check mode
      test-lib: have the "check" mode for SANITIZE=leak consider leak logs
      leak tests: don't skip some tests under SANITIZE=leak
      leak tests: mark passing SANITIZE=leak tests as leak-free
      upload-pack: fix a memory leak in create_pack_file()
      CI: use "GIT_TEST_SANITIZE_LEAK_LOG=true" in linux-leaks
      bisect.c: add missing "goto" for release_revisions()
      test-fast-rebase helper: use release_revisions() (again)
      log: fix a memory leak in "git show <revision>..."
      log: refactor "rev.pending" code in cmd_show()
      bisect.c: partially fix bisect_rev_setup() memory leak
      revisions API: don't leak memory on argv elements that need free()-ing
      help.c: refactor drop_prefix() to use a "switch" statement"
      help.c: remove common category behavior from drop_prefix() behavior
      git help doc: use "<doc>" instead of "<guide>"
      git docs: add a category for user-facing file, repo and command UX
      git docs: add a category for file formats, protocols and interfaces
      docs: move commit-graph format docs to man section 5
      docs: move protocol-related docs to man section 5
      docs: move index format docs to man section 5
      docs: move signature docs to man section 5
      docs: move pack format docs to man section 5
      docs: move cruft pack docs to gitformat-pack
      docs: move http-protocol docs to man section 5
      hook API: don't segfault on strbuf_addf() to NULL "out"
      Makefile + hash.h: remove PPC_SHA1 implementation
      Makefile: use $(OBJECTS) instead of $(C_OBJ)
      git-compat-util.h: use "UNUSED", not "UNUSED(var)"
      git-compat-util.h: use "deprecated" for UNUSED variables
      submodule tests: test usage behavior
      submodule tests: test for "add <repository> <abs-path>"
      submodule--helper: remove unused "name" helper
      submodule--helper: remove unused "list" helper
      test-tool submodule-config: remove unused "--url" handling
      submodule--helper: move "is-active" to a test-tool
      submodule--helper: move "check-name" to a test-tool
      submodule--helper: move "resolve-relative-url-test" to a test-tool
      submodule--helper style: don't separate declared variables with \n\n
      submodule--helper style: add \n\n after variable declarations
      submodule--helper: replace memset() with { 0 }-initialization
      submodule--helper: use xstrfmt() in clone_submodule()
      submodule--helper: move "sb" in clone_submodule() to its own scope
      submodule--helper: add "const" to passed "module_clone_data"
      submodule--helper: add "const" to passed "struct update_data"
      submodule--helper: don't redundantly check "else if (res)"
      submodule--helper: rename "int res" to "int ret"
      submodule--helper: return "ret", not "1" from update_submodule()
      submodule--helper: add missing braces to "else" arm
      submodule--helper: don't call submodule_strategy_to_string() in BUG()
      submodule API: don't handle SM_..{UNSPECIFIED,COMMAND} in to_string()
      submodule--helper: use "code" in run_update_command()
      submodule--helper: don't exit() on failure, return
      submodule--helper: libify determine_submodule_update_strategy()
      submodule--helper: libify "must_die_on_failure" code paths
      submodule--helper update: don't override 'checkout' exit code
      submodule--helper: libify "must_die_on_failure" code paths (for die)
      submodule--helper: check repo{_submodule,}_init() return values
      submodule--helper: libify more "die" paths for module_update()
      submodule--helper: libify even more "die" paths for module_update()
      submodule--helper: fix bad config API usage
      submodule--helper: fix a leak in "clone_submodule"
      submodule--helper: fix trivial get_default_remote_submodule() leak
      submodule--helper: fix most "struct pathspec" memory leaks
      submodule--helper: "struct pathspec" memory leak in module_update()
      submodule--helper: don't leak {run,capture}_command() cp.dir argument
      submodule--helper: add and use *_release() functions
      submodule--helper: fix "errmsg_str" memory leak
      submodule--helper: fix "sm_path" and other "module_cb_list" leaks
      submodule--helper: fix a leak with repo_clear()
      submodule--helper: fix a memory leak in get_default_remote_submodule()
      submodule--helper: fix "reference" leak
      submodule--helper: fix obscure leak in module_add()
      submodule--helper: fix a leak in module_add()
      submodule--helper: fix a memory leak in print_status()
      submodule--helper: free some "displaypath" in "struct update_data"
      submodule--helper: free rest of "displaypath" in "struct update_data"
      submodule--helper: fix a configure_added_submodule() leak
      docs: add and use include template for config/* includes
      grep docs: de-duplicate configuration sections
      send-email docs: de-duplicate configuration sections
      apply docs: de-duplicate configuration sections
      notes docs: de-duplicate and combine configuration sections
      difftool docs: de-duplicate configuration sections
      log docs: de-duplicate configuration sections
      docs: add CONFIGURATION sections that map to a built-in
      docs: add CONFIGURATION sections that fuzzy map to built-ins

Øystein Walle (1):
      rev-parse --parseopt: detect missing opt-spec


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.37.0
@ 2022-06-27 18:22  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2022-06-27 18:22 UTC (permalink / raw)
  To: git; +Cc: git-packagers

The latest feature release Git v2.37.0 is now available at the
usual places.  It is comprised of 395 non-merge commits since
v2.36.0, contributed by 75 people, 20 of which are new faces [*].
As this cycle was shorter than usual, it is a smaller release than
usual, but the size of tarballs are about the same ;-).

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.37.0'
tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.36.0 are as follows.
Welcome to the Git development community!

  Arthur Milchior, Chris Down, Daniel Li, Fernando Ramos, Frantisek
  Hrbata, Garrit Franke, Gregory David, Guy Maurel, halilsen,
  Huang Zou, "Ing. Martin Prantl Ph.D.", Joakim Petersen, Kevin
  Locke, Khalid Masum, Kirill Frolov, Kleber Tarcísio, Laurent
  Lyaudet, Siddharth Asthana, Thomas Hurst, and Yuyi Wang.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Abhradeep Chakraborty, Ævar Arnfjörð Bjarmason, Alexander
  Shopov, Alex Henrie, Anthony Sottile, Bagas Sanjaya, BRESSAT
  Jonathan, Carlo Arenas, Carlo Marcelo Arenas Belón, Christian
  Couder, COGONI Guillaume, Derrick Stolee, Dimitriy Ryazantcev,
  Edmundo Carmona Antoranz, Elia Pinto, Elijah Newren, Emir SARI,
  Eric Sunshine, Fabian Stelzer, Fangyi Zhou, Glen Choo, Jason
  Yundt, Jean-Noël Avila, Jeff Hostetler, Jeff King, Jiang Xin,
  Joel Holdsworth, Johannes Schindelin, Jonathan Tan, Jordi Mas,
  Josh Steadmon, Junio C Hamano, Matthew John Cheetham, Matthias
  Aßhauer, Matthias Rüster, Matthieu Moy, Michael J Gruber,
  Miklos Vajna, Neeraj Singh, Orgad Shaneh, Peter Krefting,
  Philip Oakley, Philippe Blain, Phillip Wood, Ralf Thielow,
  Randall S. Becker, René Scharfe, Son Luong Ngoc, SZEDER Gábor,
  Tao Klerks, Taylor Blau, Trần Ngọc Quân, Victoria Dye,
  Yi-Jyun Pan, and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.37 Release Notes
=======================

UI, Workflows & Features

 * "vimdiff[123]" mergetool drivers have been reimplemented with a
   more generic layout mechanism.

 * "git -v" and "git -h" are now understood as "git --version" and
   "git --help".

 * The temporary files fed to external diff command are now generated
   inside a new temporary directory under the same basename.

 * "git log --since=X" will stop traversal upon seeing a commit that
   is older than X, but there may be commits behind it that is younger
   than X when the commit was created with a faulty clock.  A new
   option is added to keep digging without stopping, and instead
   filter out commits with timestamp older than X.

 * "git -c branch.autosetupmerge=simple branch $A $B" will set the $B
   as $A's upstream only when $A and $B shares the same name, and "git
   -c push.default=simple" on branch $A would push to update the
   branch $A at the remote $B came from.  Also more places use the
   sole remote, if exists, before defaulting to 'origin'.

 * A new doc has been added that lists tips for tools to work with
   Git's codebase.

 * "git remote -v" now shows the list-objects-filter used during
   fetching from the remote, if available.

 * With the new http.curloptResolve configuration, the CURLOPT_RESOLVE
   mechanism that allows cURL based applications to use pre-resolved
   IP addresses for the requests is exposed to the scripts.

 * "git add -i" was rewritten in C some time ago and has been in
   testing; the reimplementation is now exposed to general public by
   default.

 * Deprecate non-cone mode of the sparse-checkout feature.

 * Introduce a filesystem-dependent mechanism to optimize the way the
   bits for many loose object files are ensured to hit the disk
   platter.

 * The "do not remove the directory the user started Git in" logic,
   when Git cannot tell where that directory is, is disabled.  Earlier
   we refused to run in such a case.

 * A mechanism to pack unreachable objects into a "cruft pack",
   instead of ejecting them into loose form to be reclaimed later, has
   been introduced.

 * Update the doctype written in gitweb output to xhtml5.

 * The "transfer.credentialsInURL" configuration variable controls what
   happens when a URL with embedded login credential is used on either
   "fetch" or "push". Credentials are currently only detected in
   `remote.<name>.url` config, not `remote.<name>.pushurl`.

 * "git revert" learns "--reference" option to use more human-readable
   reference to the commit it reverts in the message template it
   prepares for the user.

 * Various error messages that talk about the removal of
   "--preserve-merges" in "rebase" have been strengthened, and "rebase
   --abort" learned to get out of a state that was left by an earlier
   use of the option.


Performance, Internal Implementation, Development Support etc.

 * The performance of the "untracked cache" feature has been improved
   when "--untracked-files=<mode>" and "status.showUntrackedFiles"
   are combined.

 * "git stash" works better with sparse index entries.

 * "git show :<path>" learned to work better with the sparse-index
   feature.

 * Introduce and apply coccinelle rule to discourage an explicit
   comparison between a pointer and NULL, and applies the clean-up to
   the maintenance track.

 * Preliminary code refactoring around transport and bundle code.

 * "sparse-checkout" learns to work better with the sparse-index
   feature.

 * A workflow change for translators are being proposed.  git.pot is
   no longer version controlled and it is local responsibility of
   translators to generate it.

 * Plug the memory leaks from the trickiest API of all, the revision
   walker.

 * Rename .env_array member to .env in the child_process structure.

  * The fsmonitor--daemon handles even more corner cases when
    watching filesystem events.

 * A new bug() and BUG_if_bug() API is introduced to make it easier to
   uniformly log "detect multiple bugs and abort in the end" pattern.


Fixes since v2.36
-----------------

 * "git submodule update" without pathspec should silently skip an
   uninitialized submodule, but it started to become noisy by mistake.
   (merge 4f1ccef87c gc/submodule-update-part2 later to maint).

 * "diff-tree --stdin" has been broken for about a year, but 2.36
   release broke it even worse by breaking running the command with
   <pathspec>, which in turn broke "gitk" and got noticed.  This has
   been corrected by aligning its behaviour to that of "log".
   (merge f8781bfda3 jc/diff-tree-stdin-fix later to maint).

 * Regression fix for 2.36 where "git name-rev" started to sometimes
   reference strings after they are freed.
   (merge 45a14f578e rs/name-rev-fix-free-after-use later to maint).

 * "git show <commit1> <commit2>... -- <pathspec>" lost the pathspec
   when showing the second and subsequent commits, which has been
   corrected.
   (merge 5cdb38458e jc/show-pathspec-fix later to maint).

 * "git fast-export -- <pathspec>" lost the pathspec when showing the
   second and subsequent commits, which has been corrected.
   (merge d1c25272f5 rs/fast-export-pathspec-fix later to maint).

 * "git format-patch <args> -- <pathspec>" lost the pathspec when
   showing the second and subsequent commits, which has been
   corrected.
   (merge 91f8f7e46f rs/format-patch-pathspec-fix later to maint).

 * "git clone --origin X" leaked piece of memory that held value read
   from the clone.defaultRemoteName configuration variable, which has
   been plugged.
   (merge 6dfadc8981 jc/clone-remote-name-leak-fix later to maint).

 * Get rid of a bogus and over-eager coccinelle rule.
   (merge 08bdd3a185 jc/cocci-xstrdup-or-null-fix later to maint).

 * The path taken by "git multi-pack-index" command from the end user
   was compared with path internally prepared by the tool without first
   normalizing, which lead to duplicated paths not being noticed,
   which has been corrected.
   (merge 11f9e8de3d ds/midx-normalize-pathname-before-comparison later to maint).

 * Correct choices of C compilers used in various CI jobs.
   (merge 3506cae04f ab/cc-package-fixes later to maint).

 * Various cleanups to "git p4".
   (merge 4ff0108d9e jh/p4-various-fixups later to maint).

 * The progress meter of "git blame" was showing incorrect numbers
   when processing only parts of the file.
   (merge e5f5d7d42e ea/progress-partial-blame later to maint).

 * "git rebase --keep-base <upstream> <branch-to-rebase>" computed the
   commit to rebase onto incorrectly, which has been corrected.
   (merge 9e5ebe9668 ah/rebase-keep-base-fix later to maint).

 * Fix a leak of FILE * in an error codepath.
   (merge c0befa0c03 kt/commit-graph-plug-fp-leak-on-error later to maint).

 * Avoid problems from interaction between malloc_check and address
   sanitizer.
   (merge 067109a5e7 pw/test-malloc-with-sanitize-address later to maint).

 * The commit summary shown after making a commit is matched to what
   is given in "git status" not to use the break-rewrite heuristics.
   (merge 84792322ed rs/commit-summary-wo-break-rewrite later to maint).

 * Update a few end-user facing messages around EOL conversion.
   (merge c970d30c2c ah/convert-warning-message later to maint).

 * Trace2 documentation updates.
   (merge a6c80c313c js/trace2-doc-fixes later to maint).

 * Build procedure fixup.
   (merge 1fbfd96f50 mg/detect-compiler-in-c-locale later to maint).

 * "git pull" without "--recurse-submodules=<arg>" made
   submodule.recurse take precedence over fetch.recurseSubmodules by
   mistake, which has been corrected.
   (merge 5819417365 gc/pull-recurse-submodules later to maint).

 * "git bisect" was too silent before it is ready to start computing
   the actual bisection, which has been corrected.
   (merge f11046e6de cd/bisect-messages-from-pre-flight-states later to maint).

 * macOS CI jobs have been occasionally flaky due to tentative version
   skew between perforce and the homebrew packager.  Instead of
   failing the whole CI job, just let it skip the p4 tests when this
   happens.
   (merge f15e00b463 cb/ci-make-p4-optional later to maint).

 * A bit of test framework fixes with a few fixes to issues found by
   valgrind.
   (merge 7c898554d7 ab/valgrind-fixes later to maint).

 * "git archive --add-file=<path>" picked up the raw permission bits
   from the path and propagated to zip output in some cases, without
   normalization, which has been corrected (tar output did not have
   this issue).
   (merge 6a61661967 jc/archive-add-file-normalize-mode later to maint).

 * "make coverage-report" without first running "make coverage" did
   not produce any meaningful result, which has been corrected.
   (merge 96ddfecc5b ep/coverage-report-wants-test-to-have-run later to maint).

 * The "--current" option of "git show-branch" should have been made
   incompatible with the "--reflog" mode, but this was not enforced,
   which has been corrected.
   (merge 41c64ae0e7 jc/show-branch-g-current later to maint).

 * "git fetch" unnecessarily failed when an unexpected optional
   section appeared in the output, which has been corrected.
   (merge 7709acf7be jt/fetch-peek-optional-section later to maint).

 * The way "git fetch" without "--update-head-ok" ensures that HEAD in
   no worktree points at any ref being updated was too wasteful, which
   has been optimized a bit.
   (merge f7400da800 os/fetch-check-not-current-branch later to maint).

 * "git fetch --recurse-submodules" from multiple remotes (either from
   a remote group, or "--all") used to make one extra "git fetch" in
   the submodules, which has been corrected.
   (merge 0353c68818 jc/avoid-redundant-submodule-fetch later to maint).

 * With a recent update to refuse access to repositories of other
   people by default, "sudo make install" and "sudo git describe"
   stopped working, which has been corrected.
   (merge 6b11e3d52e cb/path-owner-check-with-sudo-plus later to maint).

 * The tests that ensured merges stop when interfering local changes
   are present did not make sure that local changes are preserved; now
   they do.
   (merge 4b317450ce jc/t6424-failing-merge-preserve-local-changes later to maint).

 * Some real problems noticed by gcc 12 have been fixed, while false
   positives have been worked around.

 * Update the version of FreeBSD image used in Cirrus CI.
   (merge c58bebd4c6 pb/use-freebsd-12.3-in-cirrus-ci later to maint).

 * The multi-pack-index code did not protect the packfile it is going
   to depend on from getting removed while in use, which has been
   corrected.
   (merge 4090511e40 tb/midx-race-in-pack-objects later to maint).

 * Teach "git repack --geometric" work better with "--keep-pack" and
   avoid corrupting the repository when packsize limit is used.
   (merge 66731ff921 tb/geom-repack-with-keep-and-max later to maint).

 * The documentation on the interaction between "--add-file" and
   "--prefix" options of "git archive" has been improved.
   (merge a75910602a rs/document-archive-prefix later to maint).

 * A git subcommand like "git add -p" spawns a separate git process
   while relaying its command line arguments.  A pathspec with only
   negative elements was mistakenly passed with an empty string, which
   has been corrected.
   (merge b02fdbc80a jc/all-negative-pathspec later to maint).

 * With a more targeted workaround in http.c in another topic, we may
   be able to lift this blanket "GCC12 dangling-pointer warning is
   broken and unsalvageable" workaround.
   (merge 419141e495 cb/buggy-gcc-12-workaround later to maint).

 * A misconfigured 'branch..remote' led to a bug in configuration
   parsing.
   (merge f1dfbd9ee0 gc/zero-length-branch-config-fix later to maint).

 * "git -c diff.submodule=log range-diff" did not show anything for
   submodules that changed in the ranges being compared, and
   "git -c diff.submodule=diff range-diff" did not work correctly.
   Fix this by including the "--submodule=short" output
   unconditionally to be compared.

 * In Git 2.36 we revamped the way how hooks are invoked.  One change
   that is end-user visible is that the output of a hook is no longer
   directly connected to the standard output of "git" that spawns the
   hook, which was noticed post release.  This is getting corrected.
   (merge a082345372 ab/hooks-regression-fix later to maint).

 * Updating the graft information invalidates the list of parents of
   in-core commit objects that used to be in the graft file.

 * "git show-ref --heads" (and "--tags") still iterated over all the
   refs only to discard refs outside the specified area, which has
   been corrected.
   (merge c0c9d35e27 tb/show-ref-optim later to maint).

 * Remove redundant copying (with index v3 and older) or possible
   over-reading beyond end of mmapped memory (with index v4) has been
   corrected.
   (merge 6d858341d2 zh/read-cache-copy-name-entry-fix later to maint).

 * Sample watchman interface hook sometimes failed to produce
   correctly formatted JSON message, which has been corrected.
   (merge 134047b500 sn/fsmonitor-missing-clock later to maint).

 * Use-after-free (with another forget-to-free) fix.
   (merge 323822c72b ab/remote-free-fix later to maint).

 * Remove a coccinelle rule that is no longer relevant.
   (merge b1299de4a1 jc/cocci-cleanup later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge e6b2582da3 cm/reftable-0-length-memset later to maint).
   (merge 0b75e5bf22 ab/misc-cleanup later to maint).
   (merge 52e1ab8a76 ea/rebase-code-simplify later to maint).
   (merge 756d15923b sg/safe-directory-tests-and-docs later to maint).
   (merge d097a23bfa ds/do-not-call-bug-on-bad-refs later to maint).
   (merge c36c27e75c rs/t7812-pcre2-ws-bug-test later to maint).
   (merge 1da312742d gf/unused-includes later to maint).
   (merge 465b30a92d pb/submodule-recurse-mode-enum later to maint).
   (merge 82b28c4ed8 km/t3501-use-test-helpers later to maint).
   (merge 72315e431b sa/t1011-use-helpers later to maint).
   (merge 95b3002201 cg/vscode-with-gdb later to maint).
   (merge fbe5f6b804 tk/p4-utf8-bom later to maint).
   (merge 17f273ffba tk/p4-with-explicity-sync later to maint).
   (merge 944db25c60 kf/p4-multiple-remotes later to maint).
   (merge b014cee8de jc/update-ozlabs-url later to maint).
   (merge 4ec5008062 pb/ggg-in-mfc-doc later to maint).
   (merge af845a604d tb/receive-pack-code-cleanup later to maint).
   (merge 2acf4cf001 js/ci-gcc-12-fixes later to maint).
   (merge 05e280c0a6 jc/http-clear-finished-pointer later to maint).
   (merge 8c49d704ef fh/transport-push-leakfix later to maint).
   (merge 1d232d38bd tl/ls-tree-oid-only later to maint).
   (merge db7961e6a6 gc/document-config-worktree-scope later to maint).
   (merge ce18a30bb7 fs/ssh-default-key-command-doc later to maint).

----------------------------------------------------------------

Changes since v2.36.0 are as follows:

Abhradeep Chakraborty (1):
      builtin/remote.c: teach `-v` to list filters for promisor remotes

Alex Henrie (3):
      convert: clarify line ending conversion warning
      rebase: use correct base for --keep-base when a branch is given
      l10n: es: update translation

Alexander Shopov (2):
      name-rev: prefix annotate-stdin with '--' in message
      l10n: bg.po: Updated Bulgarian translation (5367t)

Arthur Milchior (1):
      l10n: README: fix typo

Bagas Sanjaya (1):
      l10n: po-id for 2.37 (first batch)

COGONI Guillaume (2):
      contrib/vscode/: debugging with VS Code and gdb
      Documentation/ToolsForGit.txt: Tools for developing Git

Carlo Marcelo Arenas Belón (8):
      reftable: avoid undefined behaviour breaking t0032
      ci: make failure to find perforce more user friendly
      ci: avoid brew for installing perforce
      ci: reintroduce prevention from perforce being quarantined in macOS
      t: regression git needs safe.directory when using sudo
      git-compat-util: avoid failing dir ownership checks if running privileged
      t0034: add negative tests and allow git init to mostly work under sudo
      git-compat-util: allow root to access both SUDO_UID and root owned

Chris Down (2):
      bisect: output state before we are ready to compute bisection
      bisect: output bisect setup status in bisect log

Christian Couder (1):
      http: add custom hostname to IP address resolutions

Derrick Stolee (28):
      clone: die() instead of BUG() on bad refs
      midx: use real paths in lookup_multi_pack_index()
      multi-pack-index: use --object-dir real path
      cache: use const char * for get_object_directory()
      t1092: add compatibility tests for 'git show'
      show: integrate with the sparse index
      object-name: reject trees found in the index
      object-name: diagnose trees in index properly
      rev-parse: integrate with sparse index
      http: make http_get_file() external
      remote: move relative_url()
      remote: allow relative_url() to return an absolute url
      object-file: convert 'switch' back to 'if'
      t1092: refactor 'sparse-index contents' test
      t1092: stress test 'git sparse-checkout set'
      sparse-index: create expand_index()
      sparse-index: introduce partially-sparse indexes
      cache-tree: implement cache_tree_find_path()
      sparse-checkout: --no-sparse-index needs a full index
      sparse-index: partially expand directories
      sparse-index: complete partial expansion
      p2000: add test for 'git sparse-checkout [add|set]'
      sparse-checkout: integrate with sparse index
      remote: create fetch.credentialsInUrl config
      t2107: test 'git update-index --verbose'
      t5329: test 'git gc --cruft' without '--prune=now'
      pack-write: drop always-NULL parameter
      cache-tree: remove cache_tree_find_path()

Dimitriy Ryazantcev (1):
      l10n: ru.po: update Russian translation

Edmundo Carmona Antoranz (2):
      blame: report correct number of lines in progress when using ranges
      rebase: simplify an assignment of options.type in cmd_rebase

Elia Pinto (2):
      Makefile: add a prerequisite to the coverage-report target
      contrib/coccinnelle: add equals-null.cocci

Elijah Newren (9):
      tests: stop assuming --no-cone is the default mode for sparse-checkout
      sparse-checkout: make --cone the default
      git-sparse-checkout.txt: wording updates for the cone mode default
      git-sparse-checkout.txt: update docs for deprecation of 'init'
      git-sparse-checkout.txt: shuffle some sections and mark as internal
      git-sparse-checkout.txt: add a new EXAMPLES section
      git-sparse-checkout.txt: flesh out pattern set sections a bit
      git-sparse-checkout.txt: mark non-cone mode as deprecated
      Documentation: some sparsity wording clarifications

Emir SARI (1):
      l10n: tr: v2.37.0 round #1

Fabian Stelzer (1):
      gpg docs: explain better use of ssh.defaultKeyCommand

Fangyi Zhou (3):
      push: fix capitalisation of the option name autoSetupMerge
      builtin/rebase: remove a redundant space in l10n string
      l10n: zh_CN: v2.37.0 round 1

Fernando Ramos (4):
      vimdiff: new implementation with layout support
      vimdiff: integrate layout tests in the unit tests framework ('t' folder)
      vimdiff: add tool documentation
      mergetools: add description to all diff/merge tools

Frantisek Hrbata (3):
      transport: remove unnecessary indenting in transport_push()
      transport: unify return values and exit point from transport_push()
      transport: free local and remote refs in transport_push()

Garrit Franke (3):
      cli: add -v and -h shorthands
      serve.c: remove unnecessary include
      apply.c: remove unnecessary include

Glen Choo (4):
      pull: do not let submodule.recurse override fetch.recurseSubmodules
      remote.c: don't BUG() on 0-length branch names
      remote.c: reject 0-length branch names
      config: document and test the 'worktree' scope

Jason Yundt (1):
      gitweb: switch to an XHTML5 DOCTYPE

Jean-Noël Avila (1):
      l10n: fr v2.37 round 1

Jeff Hostetler (30):
      fsm-listen-win32: handle shortnames
      t7527: test FSMonitor on repos with Unicode root paths
      t/helper/fsmonitor-client: create stress test
      fsmonitor-settings: bare repos are incompatible with FSMonitor
      fsmonitor-settings: stub in Win32-specific incompatibility checking
      fsmonitor-settings: VFS for Git virtual repos are incompatible
      fsmonitor-settings: stub in macOS-specific incompatibility checking
      fsmonitor-settings: remote repos on macOS are incompatible
      fsmonitor-settings: remote repos on Windows are incompatible
      fsmonitor-settings: NTFS and FAT32 on MacOS are incompatible
      unpack-trees: initialize fsmonitor_has_run_once in o->result
      fsm-listen-darwin: ignore FSEvents caused by xattr changes on macOS
      fsmonitor--daemon: cd out of worktree root
      fsmonitor--daemon: prepare for adding health thread
      fsmonitor--daemon: rename listener thread related variables
      fsmonitor--daemon: stub in health thread
      fsm-health-win32: add polling framework to monitor daemon health
      fsm-health-win32: force shutdown daemon if worktree root moves
      fsm-listen-darwin: shutdown daemon if worktree root is moved/renamed
      fsmonitor: optimize processing of directory events
      t7527: FSMonitor tests for directory moves
      t/perf/p7527: add perf test for builtin FSMonitor
      fsmonitor: never set CE_FSMONITOR_VALID on submodules
      t7527: test FSMonitor on case insensitive+preserving file system
      fsmonitor: on macOS also emit NFC spelling for NFD pathname
      t/helper/hexdump: add helper to print hexdump of stdin
      t/lib-unicode-nfc-nfd: helper prereqs for testing unicode nfc/nfd
      t7527: test Unicode NFC/NFD handling on MacOS
      fsmonitor--daemon: allow --super-prefix argument
      t7527: improve implicit shutdown testing in fsmonitor--daemon

Jeff King (2):
      perf-lib: fix missing test titles in output
      bug_fl(): correctly initialize trace2 va_list

Jiang Xin (6):
      Makefile: sort source files before feeding to xgettext
      Makefile: generate "po/git.pot" from stable LOCALIZED_C
      Makefile: remove duplicate and unwanted files in FOUND_SOURCE_FILES
      po/git.pot: this is now a generated file
      Makefile: add "po-update" rule to update po/XX.po
      i18n: fix mismatched camelCase config variables

Joakim Petersen (2):
      git-prompt: make colourization consistent
      git-prompt: fix expansion of branch colour codes

Joel Holdsworth (22):
      git-p4: add blank lines between functions and class definitions
      git-p4: remove unneeded semicolons from statements
      git-p4: indent with 4-spaces
      git-p4: improve consistency of docstring formatting
      git-p4: convert descriptive class and function comments into docstrings
      git-p4: remove commented code
      git-p4: sort and de-duplcate pylint disable list
      git-p4: remove padding from lists, tuples and function arguments
      git-p4: remove spaces around default arguments
      git-p4: removed brackets when assigning multiple return values
      git-p4: place a single space after every comma
      git-p4: remove extraneous spaces before function arguments
      git-p4: remove redundant backslash-continuations inside brackets
      git-p4: remove spaces between dictionary keys and colons
      git-p4: ensure every comment has a single #
      git-p4: ensure there is a single space around all operators
      git-p4: normalize indentation of lines in conditionals
      git-p4: compare to singletons with "is" and "is not"
      git-p4: only seperate code blocks by a single empty line
      git-p4: move inline comments to line above
      git-p4: seperate multiple statements onto seperate lines
      git-p4: sort imports

Johannes Schindelin (36):
      t2016: require the PERL prereq only when necessary
      add -i: default to the built-in implementation
      trace2 docs: a couple of grammar fixes
      trace2 docs: "printf" is not an English word
      trace2 docs: surround more terms in backticks
      trace2 docs: fix a JSON formatted example
      trace2 docs: clarify what `varargs` is all about
      trace2 docs: add missing full stop
      ci: fix code style
      tests: refactor --write-junit-xml code
      test(junit): avoid line feeds in XML attributes
      ci/run-build-and-tests: take a more high-level view
      ci: make it easier to find failed tests' logs in the GitHub workflow
      ci/run-build-and-tests: add some structure to the GitHub workflow output
      ci: optionally mark up output in the GitHub workflow
      ci(github): skip the logs of the successful test cases
      ci: use `--github-workflow-markup` in the GitHub workflow
      ci(github): mention where the full logs can be found
      ci: call `finalize_test_case_output` a little later
      compat/win32/syslog: fix use-after-realloc
      nedmalloc: avoid new compile error
      dir.c: avoid "exceeds maximum object size" error with GCC v12.x
      archive: optionally add "virtual" files
      archive --add-virtual-file: allow paths containing colons
      scalar: validate the optional enlistment argument
      scalar: implement `scalar diagnose`
      scalar diagnose: include disk space information
      ci(github): bring back the 'print test failures' step
      ci(github): use grouping also in the `win-build` job
      ci(github): also mark up compile errors
      fsmonitor: avoid memory leak in `fsm_settings__get_incompatible_msg()`
      submodule-config: avoid memory leak
      submodule--helper: avoid memory leak when fetching submodules
      read_index_from(): avoid memory leak
      pack-mtimes: avoid closing a bogus file descriptor
      relative_url(): fix incorrect condition

Jonathan Tan (2):
      fetch-pack: make unexpected peek result non-fatal
      commit,shallow: unparse commits if grafts changed

Jordi Mas (1):
      l10n: Update Catalan translation

Josh Steadmon (1):
      run-command: don't spam trace2_child_exit()

Junio C Hamano (40):
      show-branch: -g and --current are incompatible
      2.36 gitk/diff-tree --stdin regression fix
      Some regression fixes for 2.36
      2.36 show regression fix
      clone: plug a miniscule leak
      cocci: drop bogus xstrdup_or_null() rule
      tree-wide: apply equals-null.cocci
      tree-wide: apply equals-null.cocci
      tree-wide: apply equals-null.cocci
      A bit more regression fixes for 2.36
      Git 2.36.1
      0th batch for topics from the previous cycle
      SubmittingPatches: use more stable git.ozlabs.org URL
      second 0th batch of topics from the previous cycle
      archive: do not let on-disk mode leak to zip archives
      commit: fix "author_ident" leak
      fetch: do not run a redundant fetch from submodule
      t6424: make sure a failed merge preserves local changes
      First batch for 2.37
      Second batch
      Third batch
      Fourth batch
      revert: optionally refer to commit in the "reference" format
      http.c: clear the 'finished' member once we are done with it
      pathspec: correct an empty string used as a pathspec element
      Fifth batch
      revert: --reference should apply only to 'revert', not 'cherry-pick'
      Sixth batch
      Revert -Wno-error=dangling-pointer
      Seventh batch
      Eighth batch
      cocci: retire is_null_sha1() rule
      Prepare for 2.36.2
      Ninth batch
      Git 2.37-rc0
      Fixes and updates post -rc0
      Another batch of fixes before -rc1
      Git 2.37-rc1
      Git 2.37-rc2
      Git 2.37

Kevin Locke (1):
      setup: don't die if realpath(3) fails on getcwd(3)

Khalid Masum (1):
      t3501: remove test -f and stop ignoring git <cmd> exit code

Kirill Frolov (1):
      git-p4: fix issue with multiple perforce remotes

Kleber Tarcísio (1):
      commit-graph: close file before returning NULL

Matthew John Cheetham (2):
      scalar: teach `diagnose` to gather packfile info
      scalar: teach `diagnose` to gather loose objects information

Matthias Rüster (2):
      l10n: de.po: Update German translation
      l10n: TEAMS: Change German translation team leader

Michael J Gruber (1):
      detect-compiler: make detection independent of locale

Miklos Vajna (1):
      log: "--since-as-filter" option is a non-terminating "--since" variant

Neeraj Singh (12):
      bulk-checkin: rename 'state' variable and separate 'plugged' boolean
      bulk-checkin: rebrand plug/unplug APIs as 'odb transactions'
      core.fsyncmethod: batched disk flushes for loose-objects
      cache-tree: use ODB transaction around writing a tree
      builtin/add: add ODB transaction around add_files_to_cache
      update-index: use the bulk-checkin infrastructure
      unpack-objects: use the bulk-checkin infrastructure
      core.fsync: use batch mode and sync loose objects by default on Windows
      test-lib-functions: add parsing helpers for ls-files and ls-tree
      core.fsyncmethod: tests for batch mode
      core.fsyncmethod: performance tests for batch mode
      t/perf: add iteration setup mechanism to perf-lib

Orgad Shaneh (2):
      submodule--helper: fix initialization of warn_if_uninitialized
      fetch: limit shared symref check only for local branches

Peter Krefting (1):
      l10n: sv.po: Update Swedish translation (5367t0f0u)

Philip Oakley (4):
      rebase.c: state preserve-merges has been removed
      rebase: help users when dying with `preserve-merges`
      rebase: note `preserve` merges may be a pull config option
      rebase: translate a die(preserve-merges) message

Philippe Blain (8):
      submodule.h: use a named enum for RECURSE_SUBMODULES_*
      MyFirstContribution: add "Anatomy of a Patch Series" section
      MyFirstContribution: add standalone section on cover letter
      MyFirstContribution: reference "The cover letter" in "Preparing Email"
      MyFirstContribution: reference "The cover letter" in GitGitGadget section
      MyFirstContribution: drop PR description for GGG single-patch contributions
      ci: update Cirrus-CI image to FreeBSD 12.3
      range-diff: show submodule changes irrespective of diff.submodule

Phillip Wood (1):
      tests: make SANITIZE=address imply TEST_NO_MALLOC_CHECK

René Scharfe (10):
      commit, sequencer: turn off break_opt for commit summary
      t7812: test PCRE2 whitespace bug
      tempfile: add mks_tempfile_dt()
      diff: use mks_tempfile_dt()
      Revert "name-rev: release unused name strings"
      2.36 format-patch regression fix
      2.36 fast-export regression fix
      archive: improve documentation of --prefix
      gc: simplify --cruft description
      revert: config documentation fixes

SZEDER Gábor (3):
      t0033-safe-directory: check the error message without matching the trash dir
      t0033-safe-directory: check when 'safe.directory' is ignored
      safe.directory: document and check that it's ignored in the environment

Siddharth Asthana (1):
      t1011: replace test -f with test_path_is_file

Son Luong Ngoc (1):
      fsmonitor: query watchman with right valid json

Tao Klerks (8):
      untracked-cache: test untracked-cache-bypassing behavior with -uall
      untracked-cache: support '--untracked-files=all' if configured
      git-p4: support explicit sync of arbitrary existing git-p4 refs
      git-p4: preserve utf8 BOM when importing from p4 to git
      branch: new autosetupmerge option 'simple' for matching branches
      push: default to single remote even when not named origin
      push: new config option "push.autoSetupRemote" supports "simple" push
      git-p4: improve encoding handling to support inconsistent encodings

Taylor Blau (26):
      builtin/receive-pack.c: remove redundant 'if'
      t7703: demonstrate object corruption with pack.packSizeLimit
      builtin/repack.c: ensure that `names` is sorted
      Documentation/technical: add cruft-packs.txt
      pack-bitmap.c: check preferred pack validity when opening MIDX bitmap
      builtin/pack-objects.c: avoid redundant NULL check
      builtin/pack-objects.c: ensure included `--stdin-packs` exist
      builtin/pack-objects.c: ensure pack validity from MIDX bitmap objects
      pack-mtimes: support reading .mtimes files
      pack-write: pass 'struct packing_data' to 'stage_tmp_packfiles'
      chunk-format.h: extract oid_version()
      pack-mtimes: support writing pack .mtimes files
      t/helper: add 'pack-mtimes' test-tool
      builtin/pack-objects.c: return from create_object_entry()
      builtin/pack-objects.c: --cruft without expiration
      reachable: add options to add_unseen_recent_objects_to_traversal
      reachable: report precise timestamps from objects in cruft packs
      builtin/pack-objects.c: --cruft with expiration
      builtin/repack.c: support generating a cruft pack
      builtin/repack.c: allow configuring cruft pack generation
      builtin/repack.c: use named flags for existing_packs
      builtin/repack.c: add cruft packs to MIDX during geometric repack
      builtin/gc.c: conditionally avoid pruning objects via loose
      sha1-file.c: don't freshen cruft packs
      builtin/show-ref.c: avoid over-iterating with --heads, --tags
      Documentation/config/transfer.txt: fix typo

Trần Ngọc Quân (1):
      l10n: vi(5367t): Updated translation

Victoria Dye (8):
      stash: expand sparse-checkout compatibility testing
      stash: integrate with sparse index
      sparse-index: expose 'is_sparse_index_allowed()'
      read-cache: set sparsity when index is new
      stash: apply stash using 'merge_ort_nonrecursive()'
      unpack-trees: preserve index sparsity
      repack: respect --keep-pack with geometric repack
      ci(github): avoid printing test case preamble twice

Yi-Jyun Pan (1):
      l10n: zh_TW: v2.37.0 round 1

Yuyi Wang (3):
      cmake: fix CMakeLists.txt on Linux
      cmake: add pcre2 support
      cmake: remove (_)UNICODE def on Windows in CMakeLists.txt

ZheNing Hu (1):
      read-cache.c: reduce unnecessary cache entry name copying

halilsen (2):
      gitk: trivial indentation fix
      gitk: include y coord in recorded sash position

Ævar Arnfjörð Bjarmason (66):
      run-command.h: remove always unused "clean_on_exit_handler_cbdata"
      configure.ac: remove USE_PIC comment
      xdiff/xmacros.h: remove unused XDL_PTRFREE
      pack-bitmap-write: remove unused bitmap_reset() function
      object-store.h: remove unused has_sha1_file*()
      alloc.[ch]: remove alloc_report() function
      t/helper/test-fast-rebase.c: don't leak "struct strbuf"
      blame: use "goto cleanup" for cleanup_scoreboard()
      string_list API users: use string_list_init_{no,}dup
      format-patch: don't leak "extra_headers" or "ref_message_ids"
      cocci: add and apply free_commit_list() rules
      revision.[ch]: provide and start using a release_revisions()
      revisions API users: add straightforward release_revisions()
      revision.[ch]: document and move code declared around "init"
      revisions API users: use release_revisions() needing REV_INFO_INIT
      stash: always have the owner of "stash_info" free it
      revisions API users: add "goto cleanup" for release_revisions()
      revisions API users: use release_revisions() in http-push.c
      revisions API users: use release_revisions() in builtin/log.c
      revisions API users: use release_revisions() with UNLEAK()
      revisions API users: use release_revisions() for "prune_data" users
      revisions API: have release_revisions() release "commits"
      revisions API: have release_revisions() release "mailmap"
      revisions API: have release_revisions() release "cmdline"
      revisions API: have release_revisions() release "filter"
      revisions API: have release_revisions() release "grep_filter"
      revisions API: have release_revisions() release "prune_data"
      revisions API: clear "boundary_commits" in release_revisions()
      revisions API: release "reflog_info" in release revisions()
      revisions API: call diff_free(&revs->pruning) in revisions_release()
      revisions API: have release_revisions() release "date_mode"
      revisions API: have release_revisions() release "topo_walk_info"
      revisions API: add a TODO for diff_free(&revs->diffopt)
      CI: select CC based on CC_PACKAGE (again)
      tests: using custom GIT_EXEC_PATH breaks --valgrind tests
      log test: skip a failing mkstemp() test under valgrind
      object-file: fix a unpack_loose_header() regression in 3b6a8db3b03
      commit-graph.c: don't assume that stat() succeeds
      ci: use https, not http to download binaries from perforce.com
      connect.c: refactor sending of agent & object-format
      dir API: add a generalized path_match_flags() function
      fetch-pack: add a deref_without_lazy_fetch_extended()
      fetch-pack: move --keep=* option filling to a function
      bundle.h: make "fd" version of read_bundle_header() public
      Makefile: have "make pot" not "reset --hard"
      i18n CI: stop allowing non-ASCII source messages in po/git.pot
      po/git.pot: don't check in result of "make pot"
      Makefile: add "po-init" rule to initialize po/XX.po
      l10n: Document the new l10n workflow
      common-main.c: move non-trace2 exit() behavior out of trace2.c
      usage.c: add a non-fatal bug() function to go with BUG()
      parse-options.c: use new bug() API for optbug()
      parse-options.c: use optbug() instead of BUG() "opts" check
      receive-pack: use bug() and BUG_if_bug()
      cache-tree.c: use bug() and BUG_if_bug()
      run-command API: rename "env_array" to "env"
      run-command API users: use "env" not "env_array" in comments & names
      ls-tree: test for the regression in 9c4d58ff2c3
      run-command: add an "ungroup" option to run_process_parallel()
      remote.c: remove braces from one-statement "for"-loops
      remote.c: don't dereference NULL in freeing loop
      hook API: fix v2.36.0 regression: hooks should be connected to a TTY
      add -i tests: mark "TODO" depending on GIT_TEST_ADD_I_USE_BUILTIN
      fetch doc: note "pushurl" caveat about "credentialsInUrl", elaborate
      transfer doc: move fetch.credentialsInUrl to "transfer" config namespace
      tests: add LIBCURL prerequisite to tests needing libcurl


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.37.0-rc2
@ 2022-06-22 19:32  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2022-06-22 19:32 UTC (permalink / raw)
  To: git; +Cc: git-packagers

A release candidate Git v2.37.0-rc2 is now available for testing at
the usual places.  It is comprised of 378 non-merge commits since
v2.36.0, contributed by 64 people, 19 of which are new faces [*].

Due to summer vacation season in the northern hemisphere, this cycle
is shorter than usual.  We expect to tag the final 2.37 release
early next week.  Hopefully we fixed all the known regressions in
2.36 without adding too many new ones.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.37.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.36.0 are as follows.
Welcome to the Git development community!

  Chris Down, Daniel Li, Fernando Ramos, Frantisek Hrbata,
  Garrit Franke, Gregory David, Guy Maurel, halilsen, Huang Zou,
  "Ing. Martin Prantl Ph.D.", Joakim Petersen, Kevin Locke,
  Khalid Masum, Kirill Frolov, Kleber Tarcísio, Laurent Lyaudet,
  Siddharth Asthana, Thomas Hurst, and Yuyi Wang.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Abhradeep Chakraborty, Ævar Arnfjörð Bjarmason, Alexander
  Shopov, Alex Henrie, Anthony Sottile, BRESSAT Jonathan, Carlo
  Arenas, Carlo Marcelo Arenas Belón, Christian Couder, COGONI
  Guillaume, Derrick Stolee, Edmundo Carmona Antoranz, Elia Pinto,
  Elijah Newren, Eric Sunshine, Fabian Stelzer, Fangyi Zhou, Glen
  Choo, Jason Yundt, Jeff Hostetler, Jeff King, Jiang Xin, Joel
  Holdsworth, Johannes Schindelin, Jonathan Tan, Josh Steadmon,
  Junio C Hamano, Matthew John Cheetham, Matthias Aßhauer,
  Matthieu Moy, Michael J Gruber, Miklos Vajna, Neeraj Singh,
  Orgad Shaneh, Philip Oakley, Philippe Blain, Phillip Wood,
  Randall S. Becker, René Scharfe, Son Luong Ngoc, SZEDER Gábor,
  Tao Klerks, Taylor Blau, Victoria Dye, and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.37 Release Notes (draft)
===============================

UI, Workflows & Features

 * "vimdiff[123]" mergetool drivers have been reimplemented with a
   more generic layout mechanism.

 * "git -v" and "git -h" are now understood as "git --version" and
   "git --help".

 * The temporary files fed to external diff command are now generated
   inside a new temporary directory under the same basename.

 * "git log --since=X" will stop traversal upon seeing a commit that
   is older than X, but there may be commits behind it that is younger
   than X when the commit was created with a faulty clock.  A new
   option is added to keep digging without stopping, and instead
   filter out commits with timestamp older than X.

 * "git -c branch.autosetupmerge=simple branch $A $B" will set the $B
   as $A's upstream only when $A and $B shares the same name, and "git
   -c push.default=simple" on branch $A would push to update the
   branch $A at the remote $B came from.  Also more places use the
   sole remote, if exists, before defaulting to 'origin'.

 * A new doc has been added that lists tips for tools to work with
   Git's codebase.

 * "git remote -v" now shows the list-objects-filter used during
   fetching from the remote, if available.

 * With the new http.curloptResolve configuration, the CURLOPT_RESOLVE
   mechanism that allows cURL based applications to use pre-resolved
   IP addresses for the requests is exposed to the scripts.

 * "git add -i" was rewritten in C some time ago and has been in
   testing; the reimplementation is now exposed to general public by
   default.

 * Deprecate non-cone mode of the sparse-checkout feature.

 * Introduce a filesystem-dependent mechanism to optimize the way the
   bits for many loose object files are ensured to hit the disk
   platter.

 * The "do not remove the directory the user started Git in" logic,
   when Git cannot tell where that directory is, is disabled.  Earlier
   we refused to run in such a case.

 * A mechanism to pack unreachable objects into a "cruft pack",
   instead of ejecting them into loose form to be reclaimed later, has
   been introduced.

 * Update the doctype written in gitweb output to xhtml5.

 * The "transfer.credentialsInURL" configuration variable controls what
   happens when a URL with embedded login credential is used on either
   "fetch" or "push". Credentials are currently only detected in
   `remote.<name>.url` config, not `remote.<name>.pushurl`.

 * "git revert" learns "--reference" option to use more human-readable
   reference to the commit it reverts in the message template it
   prepares for the user.

 * Various error messages that talk about the removal of
   "--preserve-merges" in "rebase" have been strengthened, and "rebase
   --abort" learned to get out of a state that was left by an earlier
   use of the option.


Performance, Internal Implementation, Development Support etc.

 * The performance of the "untracked cache" feature has been improved
   when "--untracked-files=<mode>" and "status.showUntrackedFiles"
   are combined.

 * "git stash" works better with sparse index entries.

 * "git show :<path>" learned to work better with the sparse-index
   feature.

 * Introduce and apply coccinelle rule to discourage an explicit
   comparison between a pointer and NULL, and applies the clean-up to
   the maintenance track.

 * Preliminary code refactoring around transport and bundle code.

 * "sparse-checkout" learns to work better with the sparse-index
   feature.

 * A workflow change for translators are being proposed.  git.pot is
   no longer version controlled and it is local responsibility of
   translators to generate it.

 * Plug the memory leaks from the trickiest API of all, the revision
   walker.

 * Rename .env_array member to .env in the child_process structure.

  * The fsmonitor--daemon handles even more corner cases when
    watching filesystem events.

 * A new bug() and BUG_if_bug() API is introduced to make it easier to
   uniformly log "detect multiple bugs and abort in the end" pattern.


Fixes since v2.36
-----------------

 * "git submodule update" without pathspec should silently skip an
   uninitialized submodule, but it started to become noisy by mistake.
   (merge 4f1ccef87c gc/submodule-update-part2 later to maint).

 * "diff-tree --stdin" has been broken for about a year, but 2.36
   release broke it even worse by breaking running the command with
   <pathspec>, which in turn broke "gitk" and got noticed.  This has
   been corrected by aligning its behaviour to that of "log".
   (merge f8781bfda3 jc/diff-tree-stdin-fix later to maint).

 * Regression fix for 2.36 where "git name-rev" started to sometimes
   reference strings after they are freed.
   (merge 45a14f578e rs/name-rev-fix-free-after-use later to maint).

 * "git show <commit1> <commit2>... -- <pathspec>" lost the pathspec
   when showing the second and subsequent commits, which has been
   corrected.
   (merge 5cdb38458e jc/show-pathspec-fix later to maint).

 * "git fast-export -- <pathspec>" lost the pathspec when showing the
   second and subsequent commits, which has been corrected.
   (merge d1c25272f5 rs/fast-export-pathspec-fix later to maint).

 * "git format-patch <args> -- <pathspec>" lost the pathspec when
   showing the second and subsequent commits, which has been
   corrected.
   (merge 91f8f7e46f rs/format-patch-pathspec-fix later to maint).

 * "git clone --origin X" leaked piece of memory that held value read
   from the clone.defaultRemoteName configuration variable, which has
   been plugged.
   (merge 6dfadc8981 jc/clone-remote-name-leak-fix later to maint).

 * Get rid of a bogus and over-eager coccinelle rule.
   (merge 08bdd3a185 jc/cocci-xstrdup-or-null-fix later to maint).

 * The path taken by "git multi-pack-index" command from the end user
   was compared with path internally prepared by the tool without first
   normalizing, which lead to duplicated paths not being noticed,
   which has been corrected.
   (merge 11f9e8de3d ds/midx-normalize-pathname-before-comparison later to maint).

 * Correct choices of C compilers used in various CI jobs.
   (merge 3506cae04f ab/cc-package-fixes later to maint).

 * Various cleanups to "git p4".
   (merge 4ff0108d9e jh/p4-various-fixups later to maint).

 * The progress meter of "git blame" was showing incorrect numbers
   when processing only parts of the file.
   (merge e5f5d7d42e ea/progress-partial-blame later to maint).

 * "git rebase --keep-base <upstream> <branch-to-rebase>" computed the
   commit to rebase onto incorrectly, which has been corrected.
   (merge 9e5ebe9668 ah/rebase-keep-base-fix later to maint).

 * Fix a leak of FILE * in an error codepath.
   (merge c0befa0c03 kt/commit-graph-plug-fp-leak-on-error later to maint).

 * Avoid problems from interaction between malloc_check and address
   sanitizer.
   (merge 067109a5e7 pw/test-malloc-with-sanitize-address later to maint).

 * The commit summary shown after making a commit is matched to what
   is given in "git status" not to use the break-rewrite heuristics.
   (merge 84792322ed rs/commit-summary-wo-break-rewrite later to maint).

 * Update a few end-user facing messages around EOL conversion.
   (merge c970d30c2c ah/convert-warning-message later to maint).

 * Trace2 documentation updates.
   (merge a6c80c313c js/trace2-doc-fixes later to maint).

 * Build procedure fixup.
   (merge 1fbfd96f50 mg/detect-compiler-in-c-locale later to maint).

 * "git pull" without "--recurse-submodules=<arg>" made
   submodule.recurse take precedence over fetch.recurseSubmodules by
   mistake, which has been corrected.
   (merge 5819417365 gc/pull-recurse-submodules later to maint).

 * "git bisect" was too silent before it is ready to start computing
   the actual bisection, which has been corrected.
   (merge f11046e6de cd/bisect-messages-from-pre-flight-states later to maint).

 * macOS CI jobs have been occasionally flaky due to tentative version
   skew between perforce and the homebrew packager.  Instead of
   failing the whole CI job, just let it skip the p4 tests when this
   happens.
   (merge f15e00b463 cb/ci-make-p4-optional later to maint).

 * A bit of test framework fixes with a few fixes to issues found by
   valgrind.
   (merge 7c898554d7 ab/valgrind-fixes later to maint).

 * "git archive --add-file=<path>" picked up the raw permission bits
   from the path and propagated to zip output in some cases, without
   normalization, which has been corrected (tar output did not have
   this issue).
   (merge 6a61661967 jc/archive-add-file-normalize-mode later to maint).

 * "make coverage-report" without first running "make coverage" did
   not produce any meaningful result, which has been corrected.
   (merge 96ddfecc5b ep/coverage-report-wants-test-to-have-run later to maint).

 * The "--current" option of "git show-branch" should have been made
   incompatible with the "--reflog" mode, but this was not enforced,
   which has been corrected.
   (merge 41c64ae0e7 jc/show-branch-g-current later to maint).

 * "git fetch" unnecessarily failed when an unexpected optional
   section appeared in the output, which has been corrected.
   (merge 7709acf7be jt/fetch-peek-optional-section later to maint).

 * The way "git fetch" without "--update-head-ok" ensures that HEAD in
   no worktree points at any ref being updated was too wasteful, which
   has been optimized a bit.
   (merge f7400da800 os/fetch-check-not-current-branch later to maint).

 * "git fetch --recurse-submodules" from multiple remotes (either from
   a remote group, or "--all") used to make one extra "git fetch" in
   the submodules, which has been corrected.
   (merge 0353c68818 jc/avoid-redundant-submodule-fetch later to maint).

 * With a recent update to refuse access to repositories of other
   people by default, "sudo make install" and "sudo git describe"
   stopped working, which has been corrected.
   (merge 6b11e3d52e cb/path-owner-check-with-sudo-plus later to maint).

 * The tests that ensured merges stop when interfering local changes
   are present did not make sure that local changes are preserved; now
   they do.
   (merge 4b317450ce jc/t6424-failing-merge-preserve-local-changes later to maint).

 * Some real problems noticed by gcc 12 have been fixed, while false
   positives have been worked around.

 * Update the version of FreeBSD image used in Cirrus CI.
   (merge c58bebd4c6 pb/use-freebsd-12.3-in-cirrus-ci later to maint).

 * The multi-pack-index code did not protect the packfile it is going
   to depend on from getting removed while in use, which has been
   corrected.
   (merge 4090511e40 tb/midx-race-in-pack-objects later to maint).

 * Teach "git repack --geometric" work better with "--keep-pack" and
   avoid corrupting the repository when packsize limit is used.
   (merge 66731ff921 tb/geom-repack-with-keep-and-max later to maint).

 * The documentation on the interaction between "--add-file" and
   "--prefix" options of "git archive" has been improved.
   (merge a75910602a rs/document-archive-prefix later to maint).

 * A git subcommand like "git add -p" spawns a separate git process
   while relaying its command line arguments.  A pathspec with only
   negative elements was mistakenly passed with an empty string, which
   has been corrected.
   (merge b02fdbc80a jc/all-negative-pathspec later to maint).

 * With a more targeted workaround in http.c in another topic, we may
   be able to lift this blanket "GCC12 dangling-pointer warning is
   broken and unsalvageable" workaround.
   (merge 419141e495 cb/buggy-gcc-12-workaround later to maint).

 * A misconfigured 'branch..remote' led to a bug in configuration
   parsing.
   (merge f1dfbd9ee0 gc/zero-length-branch-config-fix later to maint).

 * "git -c diff.submodule=log range-diff" did not show anything for
   submodules that changed in the ranges being compared, and
   "git -c diff.submodule=diff range-diff" did not work correctly.
   Fix this by including the "--submodule=short" output
   unconditionally to be compared.

 * In Git 2.36 we revamped the way how hooks are invoked.  One change
   that is end-user visible is that the output of a hook is no longer
   directly connected to the standard output of "git" that spawns the
   hook, which was noticed post release.  This is getting corrected.
   (merge a082345372 ab/hooks-regression-fix later to maint).

 * Updating the graft information invalidates the list of parents of
   in-core commit objects that used to be in the graft file.

 * "git show-ref --heads" (and "--tags") still iterated over all the
   refs only to discard refs outside the specified area, which has
   been corrected.
   (merge c0c9d35e27 tb/show-ref-optim later to maint).

 * Remove redundant copying (with index v3 and older) or possible
   over-reading beyond end of mmapped memory (with index v4) has been
   corrected.
   (merge 6d858341d2 zh/read-cache-copy-name-entry-fix later to maint).

 * Sample watchman interface hook sometimes failed to produce
   correctly formatted JSON message, which has been corrected.
   (merge 134047b500 sn/fsmonitor-missing-clock later to maint).

 * Use-after-free (with another forget-to-free) fix.
   (merge 323822c72b ab/remote-free-fix later to maint).

 * Remove a coccinelle rule that is no longer relevant.
   (merge b1299de4a1 jc/cocci-cleanup later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge e6b2582da3 cm/reftable-0-length-memset later to maint).
   (merge 0b75e5bf22 ab/misc-cleanup later to maint).
   (merge 52e1ab8a76 ea/rebase-code-simplify later to maint).
   (merge 756d15923b sg/safe-directory-tests-and-docs later to maint).
   (merge d097a23bfa ds/do-not-call-bug-on-bad-refs later to maint).
   (merge c36c27e75c rs/t7812-pcre2-ws-bug-test later to maint).
   (merge 1da312742d gf/unused-includes later to maint).
   (merge 465b30a92d pb/submodule-recurse-mode-enum later to maint).
   (merge 82b28c4ed8 km/t3501-use-test-helpers later to maint).
   (merge 72315e431b sa/t1011-use-helpers later to maint).
   (merge 95b3002201 cg/vscode-with-gdb later to maint).
   (merge fbe5f6b804 tk/p4-utf8-bom later to maint).
   (merge 17f273ffba tk/p4-with-explicity-sync later to maint).
   (merge 944db25c60 kf/p4-multiple-remotes later to maint).
   (merge b014cee8de jc/update-ozlabs-url later to maint).
   (merge 4ec5008062 pb/ggg-in-mfc-doc later to maint).
   (merge af845a604d tb/receive-pack-code-cleanup later to maint).
   (merge 2acf4cf001 js/ci-gcc-12-fixes later to maint).
   (merge 05e280c0a6 jc/http-clear-finished-pointer later to maint).
   (merge 8c49d704ef fh/transport-push-leakfix later to maint).
   (merge 1d232d38bd tl/ls-tree-oid-only later to maint).
   (merge db7961e6a6 gc/document-config-worktree-scope later to maint).
   (merge ce18a30bb7 fs/ssh-default-key-command-doc later to maint).

----------------------------------------------------------------

Changes since v2.36.0 are as follows:

Abhradeep Chakraborty (1):
      builtin/remote.c: teach `-v` to list filters for promisor remotes

Alex Henrie (2):
      convert: clarify line ending conversion warning
      rebase: use correct base for --keep-base when a branch is given

Alexander Shopov (1):
      name-rev: prefix annotate-stdin with '--' in message

COGONI Guillaume (2):
      contrib/vscode/: debugging with VS Code and gdb
      Documentation/ToolsForGit.txt: Tools for developing Git

Carlo Marcelo Arenas Belón (8):
      reftable: avoid undefined behaviour breaking t0032
      ci: make failure to find perforce more user friendly
      ci: avoid brew for installing perforce
      ci: reintroduce prevention from perforce being quarantined in macOS
      t: regression git needs safe.directory when using sudo
      git-compat-util: avoid failing dir ownership checks if running privileged
      t0034: add negative tests and allow git init to mostly work under sudo
      git-compat-util: allow root to access both SUDO_UID and root owned

Chris Down (2):
      bisect: output state before we are ready to compute bisection
      bisect: output bisect setup status in bisect log

Christian Couder (1):
      http: add custom hostname to IP address resolutions

Derrick Stolee (28):
      clone: die() instead of BUG() on bad refs
      midx: use real paths in lookup_multi_pack_index()
      multi-pack-index: use --object-dir real path
      cache: use const char * for get_object_directory()
      t1092: add compatibility tests for 'git show'
      show: integrate with the sparse index
      object-name: reject trees found in the index
      object-name: diagnose trees in index properly
      rev-parse: integrate with sparse index
      http: make http_get_file() external
      remote: move relative_url()
      remote: allow relative_url() to return an absolute url
      object-file: convert 'switch' back to 'if'
      t1092: refactor 'sparse-index contents' test
      t1092: stress test 'git sparse-checkout set'
      sparse-index: create expand_index()
      sparse-index: introduce partially-sparse indexes
      cache-tree: implement cache_tree_find_path()
      sparse-checkout: --no-sparse-index needs a full index
      sparse-index: partially expand directories
      sparse-index: complete partial expansion
      p2000: add test for 'git sparse-checkout [add|set]'
      sparse-checkout: integrate with sparse index
      remote: create fetch.credentialsInUrl config
      t2107: test 'git update-index --verbose'
      t5329: test 'git gc --cruft' without '--prune=now'
      pack-write: drop always-NULL parameter
      cache-tree: remove cache_tree_find_path()

Edmundo Carmona Antoranz (2):
      blame: report correct number of lines in progress when using ranges
      rebase: simplify an assignment of options.type in cmd_rebase

Elia Pinto (2):
      Makefile: add a prerequisite to the coverage-report target
      contrib/coccinnelle: add equals-null.cocci

Elijah Newren (9):
      tests: stop assuming --no-cone is the default mode for sparse-checkout
      sparse-checkout: make --cone the default
      git-sparse-checkout.txt: wording updates for the cone mode default
      git-sparse-checkout.txt: update docs for deprecation of 'init'
      git-sparse-checkout.txt: shuffle some sections and mark as internal
      git-sparse-checkout.txt: add a new EXAMPLES section
      git-sparse-checkout.txt: flesh out pattern set sections a bit
      git-sparse-checkout.txt: mark non-cone mode as deprecated
      Documentation: some sparsity wording clarifications

Fabian Stelzer (1):
      gpg docs: explain better use of ssh.defaultKeyCommand

Fangyi Zhou (2):
      push: fix capitalisation of the option name autoSetupMerge
      builtin/rebase: remove a redundant space in l10n string

Fernando Ramos (4):
      vimdiff: new implementation with layout support
      vimdiff: integrate layout tests in the unit tests framework ('t' folder)
      vimdiff: add tool documentation
      mergetools: add description to all diff/merge tools

Frantisek Hrbata (3):
      transport: remove unnecessary indenting in transport_push()
      transport: unify return values and exit point from transport_push()
      transport: free local and remote refs in transport_push()

Garrit Franke (3):
      cli: add -v and -h shorthands
      serve.c: remove unnecessary include
      apply.c: remove unnecessary include

Glen Choo (4):
      pull: do not let submodule.recurse override fetch.recurseSubmodules
      remote.c: don't BUG() on 0-length branch names
      remote.c: reject 0-length branch names
      config: document and test the 'worktree' scope

Jason Yundt (1):
      gitweb: switch to an XHTML5 DOCTYPE

Jeff Hostetler (30):
      fsm-listen-win32: handle shortnames
      t7527: test FSMonitor on repos with Unicode root paths
      t/helper/fsmonitor-client: create stress test
      fsmonitor-settings: bare repos are incompatible with FSMonitor
      fsmonitor-settings: stub in Win32-specific incompatibility checking
      fsmonitor-settings: VFS for Git virtual repos are incompatible
      fsmonitor-settings: stub in macOS-specific incompatibility checking
      fsmonitor-settings: remote repos on macOS are incompatible
      fsmonitor-settings: remote repos on Windows are incompatible
      fsmonitor-settings: NTFS and FAT32 on MacOS are incompatible
      unpack-trees: initialize fsmonitor_has_run_once in o->result
      fsm-listen-darwin: ignore FSEvents caused by xattr changes on macOS
      fsmonitor--daemon: cd out of worktree root
      fsmonitor--daemon: prepare for adding health thread
      fsmonitor--daemon: rename listener thread related variables
      fsmonitor--daemon: stub in health thread
      fsm-health-win32: add polling framework to monitor daemon health
      fsm-health-win32: force shutdown daemon if worktree root moves
      fsm-listen-darwin: shutdown daemon if worktree root is moved/renamed
      fsmonitor: optimize processing of directory events
      t7527: FSMonitor tests for directory moves
      t/perf/p7527: add perf test for builtin FSMonitor
      fsmonitor: never set CE_FSMONITOR_VALID on submodules
      t7527: test FSMonitor on case insensitive+preserving file system
      fsmonitor: on macOS also emit NFC spelling for NFD pathname
      t/helper/hexdump: add helper to print hexdump of stdin
      t/lib-unicode-nfc-nfd: helper prereqs for testing unicode nfc/nfd
      t7527: test Unicode NFC/NFD handling on MacOS
      fsmonitor--daemon: allow --super-prefix argument
      t7527: improve implicit shutdown testing in fsmonitor--daemon

Jeff King (2):
      perf-lib: fix missing test titles in output
      bug_fl(): correctly initialize trace2 va_list

Jiang Xin (6):
      Makefile: sort source files before feeding to xgettext
      Makefile: generate "po/git.pot" from stable LOCALIZED_C
      Makefile: remove duplicate and unwanted files in FOUND_SOURCE_FILES
      po/git.pot: this is now a generated file
      Makefile: add "po-update" rule to update po/XX.po
      i18n: fix mismatched camelCase config variables

Joakim Petersen (2):
      git-prompt: make colourization consistent
      git-prompt: fix expansion of branch colour codes

Joel Holdsworth (22):
      git-p4: add blank lines between functions and class definitions
      git-p4: remove unneeded semicolons from statements
      git-p4: indent with 4-spaces
      git-p4: improve consistency of docstring formatting
      git-p4: convert descriptive class and function comments into docstrings
      git-p4: remove commented code
      git-p4: sort and de-duplcate pylint disable list
      git-p4: remove padding from lists, tuples and function arguments
      git-p4: remove spaces around default arguments
      git-p4: removed brackets when assigning multiple return values
      git-p4: place a single space after every comma
      git-p4: remove extraneous spaces before function arguments
      git-p4: remove redundant backslash-continuations inside brackets
      git-p4: remove spaces between dictionary keys and colons
      git-p4: ensure every comment has a single #
      git-p4: ensure there is a single space around all operators
      git-p4: normalize indentation of lines in conditionals
      git-p4: compare to singletons with "is" and "is not"
      git-p4: only seperate code blocks by a single empty line
      git-p4: move inline comments to line above
      git-p4: seperate multiple statements onto seperate lines
      git-p4: sort imports

Johannes Schindelin (36):
      t2016: require the PERL prereq only when necessary
      add -i: default to the built-in implementation
      trace2 docs: a couple of grammar fixes
      trace2 docs: "printf" is not an English word
      trace2 docs: surround more terms in backticks
      trace2 docs: fix a JSON formatted example
      trace2 docs: clarify what `varargs` is all about
      trace2 docs: add missing full stop
      ci: fix code style
      tests: refactor --write-junit-xml code
      test(junit): avoid line feeds in XML attributes
      ci/run-build-and-tests: take a more high-level view
      ci: make it easier to find failed tests' logs in the GitHub workflow
      ci/run-build-and-tests: add some structure to the GitHub workflow output
      ci: optionally mark up output in the GitHub workflow
      ci(github): skip the logs of the successful test cases
      ci: use `--github-workflow-markup` in the GitHub workflow
      ci(github): mention where the full logs can be found
      ci: call `finalize_test_case_output` a little later
      compat/win32/syslog: fix use-after-realloc
      nedmalloc: avoid new compile error
      dir.c: avoid "exceeds maximum object size" error with GCC v12.x
      archive: optionally add "virtual" files
      archive --add-virtual-file: allow paths containing colons
      scalar: validate the optional enlistment argument
      scalar: implement `scalar diagnose`
      scalar diagnose: include disk space information
      ci(github): bring back the 'print test failures' step
      ci(github): use grouping also in the `win-build` job
      ci(github): also mark up compile errors
      fsmonitor: avoid memory leak in `fsm_settings__get_incompatible_msg()`
      submodule-config: avoid memory leak
      submodule--helper: avoid memory leak when fetching submodules
      read_index_from(): avoid memory leak
      pack-mtimes: avoid closing a bogus file descriptor
      relative_url(): fix incorrect condition

Jonathan Tan (2):
      fetch-pack: make unexpected peek result non-fatal
      commit,shallow: unparse commits if grafts changed

Josh Steadmon (1):
      run-command: don't spam trace2_child_exit()

Junio C Hamano (39):
      show-branch: -g and --current are incompatible
      2.36 gitk/diff-tree --stdin regression fix
      Some regression fixes for 2.36
      2.36 show regression fix
      clone: plug a miniscule leak
      cocci: drop bogus xstrdup_or_null() rule
      tree-wide: apply equals-null.cocci
      tree-wide: apply equals-null.cocci
      tree-wide: apply equals-null.cocci
      A bit more regression fixes for 2.36
      Git 2.36.1
      0th batch for topics from the previous cycle
      SubmittingPatches: use more stable git.ozlabs.org URL
      second 0th batch of topics from the previous cycle
      archive: do not let on-disk mode leak to zip archives
      commit: fix "author_ident" leak
      fetch: do not run a redundant fetch from submodule
      t6424: make sure a failed merge preserves local changes
      First batch for 2.37
      Second batch
      Third batch
      Fourth batch
      revert: optionally refer to commit in the "reference" format
      http.c: clear the 'finished' member once we are done with it
      pathspec: correct an empty string used as a pathspec element
      Fifth batch
      revert: --reference should apply only to 'revert', not 'cherry-pick'
      Sixth batch
      Revert -Wno-error=dangling-pointer
      Seventh batch
      Eighth batch
      cocci: retire is_null_sha1() rule
      Prepare for 2.36.2
      Ninth batch
      Git 2.37-rc0
      Fixes and updates post -rc0
      Another batch of fixes before -rc1
      Git 2.37-rc1
      Git 2.37-rc2

Kevin Locke (1):
      setup: don't die if realpath(3) fails on getcwd(3)

Khalid Masum (1):
      t3501: remove test -f and stop ignoring git <cmd> exit code

Kirill Frolov (1):
      git-p4: fix issue with multiple perforce remotes

Kleber Tarcísio (1):
      commit-graph: close file before returning NULL

Matthew John Cheetham (2):
      scalar: teach `diagnose` to gather packfile info
      scalar: teach `diagnose` to gather loose objects information

Michael J Gruber (1):
      detect-compiler: make detection independent of locale

Miklos Vajna (1):
      log: "--since-as-filter" option is a non-terminating "--since" variant

Neeraj Singh (12):
      bulk-checkin: rename 'state' variable and separate 'plugged' boolean
      bulk-checkin: rebrand plug/unplug APIs as 'odb transactions'
      core.fsyncmethod: batched disk flushes for loose-objects
      cache-tree: use ODB transaction around writing a tree
      builtin/add: add ODB transaction around add_files_to_cache
      update-index: use the bulk-checkin infrastructure
      unpack-objects: use the bulk-checkin infrastructure
      core.fsync: use batch mode and sync loose objects by default on Windows
      test-lib-functions: add parsing helpers for ls-files and ls-tree
      core.fsyncmethod: tests for batch mode
      core.fsyncmethod: performance tests for batch mode
      t/perf: add iteration setup mechanism to perf-lib

Orgad Shaneh (2):
      submodule--helper: fix initialization of warn_if_uninitialized
      fetch: limit shared symref check only for local branches

Philip Oakley (4):
      rebase.c: state preserve-merges has been removed
      rebase: help users when dying with `preserve-merges`
      rebase: note `preserve` merges may be a pull config option
      rebase: translate a die(preserve-merges) message

Philippe Blain (8):
      submodule.h: use a named enum for RECURSE_SUBMODULES_*
      MyFirstContribution: add "Anatomy of a Patch Series" section
      MyFirstContribution: add standalone section on cover letter
      MyFirstContribution: reference "The cover letter" in "Preparing Email"
      MyFirstContribution: reference "The cover letter" in GitGitGadget section
      MyFirstContribution: drop PR description for GGG single-patch contributions
      ci: update Cirrus-CI image to FreeBSD 12.3
      range-diff: show submodule changes irrespective of diff.submodule

Phillip Wood (1):
      tests: make SANITIZE=address imply TEST_NO_MALLOC_CHECK

René Scharfe (9):
      commit, sequencer: turn off break_opt for commit summary
      t7812: test PCRE2 whitespace bug
      tempfile: add mks_tempfile_dt()
      diff: use mks_tempfile_dt()
      Revert "name-rev: release unused name strings"
      2.36 format-patch regression fix
      2.36 fast-export regression fix
      archive: improve documentation of --prefix
      gc: simplify --cruft description

SZEDER Gábor (3):
      t0033-safe-directory: check the error message without matching the trash dir
      t0033-safe-directory: check when 'safe.directory' is ignored
      safe.directory: document and check that it's ignored in the environment

Siddharth Asthana (1):
      t1011: replace test -f with test_path_is_file

Son Luong Ngoc (1):
      fsmonitor: query watchman with right valid json

Tao Klerks (8):
      untracked-cache: test untracked-cache-bypassing behavior with -uall
      untracked-cache: support '--untracked-files=all' if configured
      git-p4: support explicit sync of arbitrary existing git-p4 refs
      git-p4: preserve utf8 BOM when importing from p4 to git
      branch: new autosetupmerge option 'simple' for matching branches
      push: default to single remote even when not named origin
      push: new config option "push.autoSetupRemote" supports "simple" push
      git-p4: improve encoding handling to support inconsistent encodings

Taylor Blau (25):
      builtin/receive-pack.c: remove redundant 'if'
      t7703: demonstrate object corruption with pack.packSizeLimit
      builtin/repack.c: ensure that `names` is sorted
      Documentation/technical: add cruft-packs.txt
      pack-bitmap.c: check preferred pack validity when opening MIDX bitmap
      builtin/pack-objects.c: avoid redundant NULL check
      builtin/pack-objects.c: ensure included `--stdin-packs` exist
      builtin/pack-objects.c: ensure pack validity from MIDX bitmap objects
      pack-mtimes: support reading .mtimes files
      pack-write: pass 'struct packing_data' to 'stage_tmp_packfiles'
      chunk-format.h: extract oid_version()
      pack-mtimes: support writing pack .mtimes files
      t/helper: add 'pack-mtimes' test-tool
      builtin/pack-objects.c: return from create_object_entry()
      builtin/pack-objects.c: --cruft without expiration
      reachable: add options to add_unseen_recent_objects_to_traversal
      reachable: report precise timestamps from objects in cruft packs
      builtin/pack-objects.c: --cruft with expiration
      builtin/repack.c: support generating a cruft pack
      builtin/repack.c: allow configuring cruft pack generation
      builtin/repack.c: use named flags for existing_packs
      builtin/repack.c: add cruft packs to MIDX during geometric repack
      builtin/gc.c: conditionally avoid pruning objects via loose
      sha1-file.c: don't freshen cruft packs
      builtin/show-ref.c: avoid over-iterating with --heads, --tags

Victoria Dye (8):
      stash: expand sparse-checkout compatibility testing
      stash: integrate with sparse index
      sparse-index: expose 'is_sparse_index_allowed()'
      read-cache: set sparsity when index is new
      stash: apply stash using 'merge_ort_nonrecursive()'
      unpack-trees: preserve index sparsity
      repack: respect --keep-pack with geometric repack
      ci(github): avoid printing test case preamble twice

Yuyi Wang (3):
      cmake: fix CMakeLists.txt on Linux
      cmake: add pcre2 support
      cmake: remove (_)UNICODE def on Windows in CMakeLists.txt

ZheNing Hu (1):
      read-cache.c: reduce unnecessary cache entry name copying

halilsen (2):
      gitk: trivial indentation fix
      gitk: include y coord in recorded sash position

Ævar Arnfjörð Bjarmason (66):
      run-command.h: remove always unused "clean_on_exit_handler_cbdata"
      configure.ac: remove USE_PIC comment
      xdiff/xmacros.h: remove unused XDL_PTRFREE
      pack-bitmap-write: remove unused bitmap_reset() function
      object-store.h: remove unused has_sha1_file*()
      alloc.[ch]: remove alloc_report() function
      t/helper/test-fast-rebase.c: don't leak "struct strbuf"
      blame: use "goto cleanup" for cleanup_scoreboard()
      string_list API users: use string_list_init_{no,}dup
      format-patch: don't leak "extra_headers" or "ref_message_ids"
      cocci: add and apply free_commit_list() rules
      revision.[ch]: provide and start using a release_revisions()
      revisions API users: add straightforward release_revisions()
      revision.[ch]: document and move code declared around "init"
      revisions API users: use release_revisions() needing REV_INFO_INIT
      stash: always have the owner of "stash_info" free it
      revisions API users: add "goto cleanup" for release_revisions()
      revisions API users: use release_revisions() in http-push.c
      revisions API users: use release_revisions() in builtin/log.c
      revisions API users: use release_revisions() with UNLEAK()
      revisions API users: use release_revisions() for "prune_data" users
      revisions API: have release_revisions() release "commits"
      revisions API: have release_revisions() release "mailmap"
      revisions API: have release_revisions() release "cmdline"
      revisions API: have release_revisions() release "filter"
      revisions API: have release_revisions() release "grep_filter"
      revisions API: have release_revisions() release "prune_data"
      revisions API: clear "boundary_commits" in release_revisions()
      revisions API: release "reflog_info" in release revisions()
      revisions API: call diff_free(&revs->pruning) in revisions_release()
      revisions API: have release_revisions() release "date_mode"
      revisions API: have release_revisions() release "topo_walk_info"
      revisions API: add a TODO for diff_free(&revs->diffopt)
      CI: select CC based on CC_PACKAGE (again)
      tests: using custom GIT_EXEC_PATH breaks --valgrind tests
      log test: skip a failing mkstemp() test under valgrind
      object-file: fix a unpack_loose_header() regression in 3b6a8db3b03
      commit-graph.c: don't assume that stat() succeeds
      ci: use https, not http to download binaries from perforce.com
      connect.c: refactor sending of agent & object-format
      dir API: add a generalized path_match_flags() function
      fetch-pack: add a deref_without_lazy_fetch_extended()
      fetch-pack: move --keep=* option filling to a function
      bundle.h: make "fd" version of read_bundle_header() public
      Makefile: have "make pot" not "reset --hard"
      i18n CI: stop allowing non-ASCII source messages in po/git.pot
      po/git.pot: don't check in result of "make pot"
      Makefile: add "po-init" rule to initialize po/XX.po
      l10n: Document the new l10n workflow
      common-main.c: move non-trace2 exit() behavior out of trace2.c
      usage.c: add a non-fatal bug() function to go with BUG()
      parse-options.c: use new bug() API for optbug()
      parse-options.c: use optbug() instead of BUG() "opts" check
      receive-pack: use bug() and BUG_if_bug()
      cache-tree.c: use bug() and BUG_if_bug()
      run-command API: rename "env_array" to "env"
      run-command API users: use "env" not "env_array" in comments & names
      ls-tree: test for the regression in 9c4d58ff2c3
      run-command: add an "ungroup" option to run_process_parallel()
      remote.c: remove braces from one-statement "for"-loops
      remote.c: don't dereference NULL in freeing loop
      hook API: fix v2.36.0 regression: hooks should be connected to a TTY
      add -i tests: mark "TODO" depending on GIT_TEST_ADD_I_USE_BUILTIN
      fetch doc: note "pushurl" caveat about "credentialsInUrl", elaborate
      transfer doc: move fetch.credentialsInUrl to "transfer" config namespace
      tests: add LIBCURL prerequisite to tests needing libcurl


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.37.0-rc1
@ 2022-06-18  1:55  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2022-06-18  1:55 UTC (permalink / raw)
  To: git; +Cc: git-packagers

A release candidate Git v2.37.0-rc1 is now available for testing at
the usual places.  It is comprised of 373 non-merge commits since
v2.36.0, contributed by 62 people, 18 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.37.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.36.0 are as follows.
Welcome to the Git development community!

  Chris Down, Daniel Li, Fernando Ramos, Frantisek Hrbata,
  Garrit Franke, Gregory David, Guy Maurel, halilsen, Huang Zou,
  "Ing. Martin Prantl Ph.D.", Kevin Locke, Khalid Masum, Kirill
  Frolov, Kleber Tarcísio, Laurent Lyaudet, Siddharth Asthana,
  Thomas Hurst, and Yuyi Wang.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Abhradeep Chakraborty, Ævar Arnfjörð Bjarmason, Alex Henrie,
  Anthony Sottile, BRESSAT Jonathan, Carlo Arenas, Carlo Marcelo
  Arenas Belón, Christian Couder, COGONI Guillaume, Derrick
  Stolee, Edmundo Carmona Antoranz, Elia Pinto, Elijah Newren,
  Eric Sunshine, Fabian Stelzer, Fangyi Zhou, Glen Choo, Jason
  Yundt, Jeff Hostetler, Jeff King, Jiang Xin, Joel Holdsworth,
  Johannes Schindelin, Jonathan Tan, Josh Steadmon, Junio C Hamano,
  Matthew John Cheetham, Matthias Aßhauer, Matthieu Moy, Michael J
  Gruber, Miklos Vajna, Neeraj Singh, Orgad Shaneh, Philip Oakley,
  Philippe Blain, Phillip Wood, Randall S. Becker, René Scharfe,
  Son Luong Ngoc, SZEDER Gábor, Tao Klerks, Taylor Blau, Victoria
  Dye, and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.37 Release Notes (draft)
===============================

UI, Workflows & Features

 * "vimdiff[123]" mergetool drivers have been reimplemented with a
   more generic layout mechanism.

 * "git -v" and "git -h" are now understood as "git --version" and
   "git --help".

 * The temporary files fed to external diff command are now generated
   inside a new temporary directory under the same basename.

 * "git log --since=X" will stop traversal upon seeing a commit that
   is older than X, but there may be commits behind it that is younger
   than X when the commit was created with a faulty clock.  A new
   option is added to keep digging without stopping, and instead
   filter out commits with timestamp older than X.

 * "git -c branch.autosetupmerge=simple branch $A $B" will set the $B
   as $A's upstream only when $A and $B shares the same name, and "git
   -c push.default=simple" on branch $A would push to update the
   branch $A at the remote $B came from.  Also more places use the
   sole remote, if exists, before defaulting to 'origin'.

 * A new doc has been added that lists tips for tools to work with
   Git's codebase.

 * "git remote -v" now shows the list-objects-filter used during
   fetching from the remote, if available.

 * With the new http.curloptResolve configuration, the CURLOPT_RESOLVE
   mechanism that allows cURL based applications to use pre-resolved
   IP addresses for the requests is exposed to the scripts.

 * "git add -i" was rewritten in C some time ago and has been in
   testing; the reimplementation is now exposed to general public by
   default.

 * Deprecate non-cone mode of the sparse-checkout feature.

 * Introduce a filesystem-dependent mechanism to optimize the way the
   bits for many loose object files are ensured to hit the disk
   platter.

 * The "do not remove the directory the user started Git in" logic,
   when Git cannot tell where that directory is, is disabled.  Earlier
   we refused to run in such a case.

 * A mechanism to pack unreachable objects into a "cruft pack",
   instead of ejecting them into loose form to be reclaimed later, has
   been introduced.

 * Update the doctype written in gitweb output to xhtml5.

 * The "transfer.credentialsInURL" configuration variable controls what
   happens when a URL with embedded login credential is used on either
   "fetch" or "push". Credentials are currently only detected in
   `remote.<name>.url` config, not `remote.<name>.pushurl`.

 * "git revert" learns "--reference" option to use more human-readable
   reference to the commit it reverts in the message template it
   prepares for the user.

 * Various error messages that talk about the removal of
   "--preserve-merges" in "rebase" have been strengthened, and "rebase
   --abort" learned to get out of a state that was left by an earlier
   use of the option.


Performance, Internal Implementation, Development Support etc.

 * The performance of the "untracked cache" feature has been improved
   when "--untracked-files=<mode>" and "status.showUntrackedFiles"
   are combined.

 * "git stash" works better with sparse index entries.

 * "git show :<path>" learned to work better with the sparse-index
   feature.

 * Introduce and apply coccinelle rule to discourage an explicit
   comparison between a pointer and NULL, and applies the clean-up to
   the maintenance track.

 * Preliminary code refactoring around transport and bundle code.

 * "sparse-checkout" learns to work better with the sparse-index
   feature.

 * A workflow change for translators are being proposed.  git.pot is
   no longer version controlled and it is local responsibility of
   translators to generate it.

 * Plug the memory leaks from the trickiest API of all, the revision
   walker.

 * Rename .env_array member to .env in the child_process structure.

  * The fsmonitor--daemon handles even more corner cases when
    watching filesystem events.

 * A new bug() and BUG_if_bug() API is introduced to make it easier to
   uniformly log "detect multiple bugs and abort in the end" pattern.


Fixes since v2.36
-----------------

 * "git submodule update" without pathspec should silently skip an
   uninitialized submodule, but it started to become noisy by mistake.
   (merge 4f1ccef87c gc/submodule-update-part2 later to maint).

 * "diff-tree --stdin" has been broken for about a year, but 2.36
   release broke it even worse by breaking running the command with
   <pathspec>, which in turn broke "gitk" and got noticed.  This has
   been corrected by aligning its behaviour to that of "log".
   (merge f8781bfda3 jc/diff-tree-stdin-fix later to maint).

 * Regression fix for 2.36 where "git name-rev" started to sometimes
   reference strings after they are freed.
   (merge 45a14f578e rs/name-rev-fix-free-after-use later to maint).

 * "git show <commit1> <commit2>... -- <pathspec>" lost the pathspec
   when showing the second and subsequent commits, which has been
   corrected.
   (merge 5cdb38458e jc/show-pathspec-fix later to maint).

 * "git fast-export -- <pathspec>" lost the pathspec when showing the
   second and subsequent commits, which has been corrected.
   (merge d1c25272f5 rs/fast-export-pathspec-fix later to maint).

 * "git format-patch <args> -- <pathspec>" lost the pathspec when
   showing the second and subsequent commits, which has been
   corrected.
   (merge 91f8f7e46f rs/format-patch-pathspec-fix later to maint).

 * "git clone --origin X" leaked piece of memory that held value read
   from the clone.defaultRemoteName configuration variable, which has
   been plugged.
   (merge 6dfadc8981 jc/clone-remote-name-leak-fix later to maint).

 * Get rid of a bogus and over-eager coccinelle rule.
   (merge 08bdd3a185 jc/cocci-xstrdup-or-null-fix later to maint).

 * The path taken by "git multi-pack-index" command from the end user
   was compared with path internally prepared by the tool without first
   normalizing, which lead to duplicated paths not being noticed,
   which has been corrected.
   (merge 11f9e8de3d ds/midx-normalize-pathname-before-comparison later to maint).

 * Correct choices of C compilers used in various CI jobs.
   (merge 3506cae04f ab/cc-package-fixes later to maint).

 * Various cleanups to "git p4".
   (merge 4ff0108d9e jh/p4-various-fixups later to maint).

 * The progress meter of "git blame" was showing incorrect numbers
   when processing only parts of the file.
   (merge e5f5d7d42e ea/progress-partial-blame later to maint).

 * "git rebase --keep-base <upstream> <branch-to-rebase>" computed the
   commit to rebase onto incorrectly, which has been corrected.
   (merge 9e5ebe9668 ah/rebase-keep-base-fix later to maint).

 * Fix a leak of FILE * in an error codepath.
   (merge c0befa0c03 kt/commit-graph-plug-fp-leak-on-error later to maint).

 * Avoid problems from interaction between malloc_check and address
   sanitizer.
   (merge 067109a5e7 pw/test-malloc-with-sanitize-address later to maint).

 * The commit summary shown after making a commit is matched to what
   is given in "git status" not to use the break-rewrite heuristics.
   (merge 84792322ed rs/commit-summary-wo-break-rewrite later to maint).

 * Update a few end-user facing messages around EOL conversion.
   (merge c970d30c2c ah/convert-warning-message later to maint).

 * Trace2 documentation updates.
   (merge a6c80c313c js/trace2-doc-fixes later to maint).

 * Build procedure fixup.
   (merge 1fbfd96f50 mg/detect-compiler-in-c-locale later to maint).

 * "git pull" without "--recurse-submodules=<arg>" made
   submodule.recurse take precedence over fetch.recurseSubmodules by
   mistake, which has been corrected.
   (merge 5819417365 gc/pull-recurse-submodules later to maint).

 * "git bisect" was too silent before it is ready to start computing
   the actual bisection, which has been corrected.
   (merge f11046e6de cd/bisect-messages-from-pre-flight-states later to maint).

 * macOS CI jobs have been occasionally flaky due to tentative version
   skew between perforce and the homebrew packager.  Instead of
   failing the whole CI job, just let it skip the p4 tests when this
   happens.
   (merge f15e00b463 cb/ci-make-p4-optional later to maint).

 * A bit of test framework fixes with a few fixes to issues found by
   valgrind.
   (merge 7c898554d7 ab/valgrind-fixes later to maint).

 * "git archive --add-file=<path>" picked up the raw permission bits
   from the path and propagated to zip output in some cases, without
   normalization, which has been corrected (tar output did not have
   this issue).
   (merge 6a61661967 jc/archive-add-file-normalize-mode later to maint).

 * "make coverage-report" without first running "make coverage" did
   not produce any meaningful result, which has been corrected.
   (merge 96ddfecc5b ep/coverage-report-wants-test-to-have-run later to maint).

 * The "--current" option of "git show-branch" should have been made
   incompatible with the "--reflog" mode, but this was not enforced,
   which has been corrected.
   (merge 41c64ae0e7 jc/show-branch-g-current later to maint).

 * "git fetch" unnecessarily failed when an unexpected optional
   section appeared in the output, which has been corrected.
   (merge 7709acf7be jt/fetch-peek-optional-section later to maint).

 * The way "git fetch" without "--update-head-ok" ensures that HEAD in
   no worktree points at any ref being updated was too wasteful, which
   has been optimized a bit.
   (merge f7400da800 os/fetch-check-not-current-branch later to maint).

 * "git fetch --recurse-submodules" from multiple remotes (either from
   a remote group, or "--all") used to make one extra "git fetch" in
   the submodules, which has been corrected.
   (merge 0353c68818 jc/avoid-redundant-submodule-fetch later to maint).

 * With a recent update to refuse access to repositories of other
   people by default, "sudo make install" and "sudo git describe"
   stopped working, which has been corrected.
   (merge 6b11e3d52e cb/path-owner-check-with-sudo-plus later to maint).

 * The tests that ensured merges stop when interfering local changes
   are present did not make sure that local changes are preserved; now
   they do.
   (merge 4b317450ce jc/t6424-failing-merge-preserve-local-changes later to maint).

 * Some real problems noticed by gcc 12 have been fixed, while false
   positives have been worked around.

 * Update the version of FreeBSD image used in Cirrus CI.
   (merge c58bebd4c6 pb/use-freebsd-12.3-in-cirrus-ci later to maint).

 * The multi-pack-index code did not protect the packfile it is going
   to depend on from getting removed while in use, which has been
   corrected.
   (merge 4090511e40 tb/midx-race-in-pack-objects later to maint).

 * Teach "git repack --geometric" work better with "--keep-pack" and
   avoid corrupting the repository when packsize limit is used.
   (merge 66731ff921 tb/geom-repack-with-keep-and-max later to maint).

 * The documentation on the interaction between "--add-file" and
   "--prefix" options of "git archive" has been improved.
   (merge a75910602a rs/document-archive-prefix later to maint).

 * A git subcommand like "git add -p" spawns a separate git process
   while relaying its command line arguments.  A pathspec with only
   negative elements was mistakenly passed with an empty string, which
   has been corrected.
   (merge b02fdbc80a jc/all-negative-pathspec later to maint).

 * With a more targeted workaround in http.c in another topic, we may
   be able to lift this blanket "GCC12 dangling-pointer warning is
   broken and unsalvageable" workaround.
   (merge 419141e495 cb/buggy-gcc-12-workaround later to maint).

 * A misconfigured 'branch..remote' led to a bug in configuration
   parsing.
   (merge f1dfbd9ee0 gc/zero-length-branch-config-fix later to maint).

 * "git -c diff.submodule=log range-diff" did not show anything for
   submodules that changed in the ranges being compared, and
   "git -c diff.submodule=diff range-diff" did not work correctly.
   Fix this by including the "--submodule=short" output
   unconditionally to be compared.

 * In Git 2.36 we revamped the way how hooks are invoked.  One change
   that is end-user visible is that the output of a hook is no longer
   directly connected to the standard output of "git" that spawns the
   hook, which was noticed post release.  This is getting corrected.
   (merge a082345372 ab/hooks-regression-fix later to maint).

 * Updating the graft information invalidates the list of parents of
   in-core commit objects that used to be in the graft file.

 * "git show-ref --heads" (and "--tags") still iterated over all the
   refs only to discard refs outside the specified area, which has
   been corrected.
   (merge c0c9d35e27 tb/show-ref-optim later to maint).

 * Remove redundant copying (with index v3 and older) or possible
   over-reading beyond end of mmapped memory (with index v4) has been
   corrected.
   (merge 6d858341d2 zh/read-cache-copy-name-entry-fix later to maint).

 * Sample watchman interface hook sometimes failed to produce
   correctly formatted JSON message, which has been corrected.
   (merge 134047b500 sn/fsmonitor-missing-clock later to maint).

 * Use-after-free (with another forget-to-free) fix.
   (merge 323822c72b ab/remote-free-fix later to maint).

 * Remove a coccinelle rule that is no longer relevant.
   (merge b1299de4a1 jc/cocci-cleanup later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge e6b2582da3 cm/reftable-0-length-memset later to maint).
   (merge 0b75e5bf22 ab/misc-cleanup later to maint).
   (merge 52e1ab8a76 ea/rebase-code-simplify later to maint).
   (merge 756d15923b sg/safe-directory-tests-and-docs later to maint).
   (merge d097a23bfa ds/do-not-call-bug-on-bad-refs later to maint).
   (merge c36c27e75c rs/t7812-pcre2-ws-bug-test later to maint).
   (merge 1da312742d gf/unused-includes later to maint).
   (merge 465b30a92d pb/submodule-recurse-mode-enum later to maint).
   (merge 82b28c4ed8 km/t3501-use-test-helpers later to maint).
   (merge 72315e431b sa/t1011-use-helpers later to maint).
   (merge 95b3002201 cg/vscode-with-gdb later to maint).
   (merge fbe5f6b804 tk/p4-utf8-bom later to maint).
   (merge 17f273ffba tk/p4-with-explicity-sync later to maint).
   (merge 944db25c60 kf/p4-multiple-remotes later to maint).
   (merge b014cee8de jc/update-ozlabs-url later to maint).
   (merge 4ec5008062 pb/ggg-in-mfc-doc later to maint).
   (merge af845a604d tb/receive-pack-code-cleanup later to maint).
   (merge 2acf4cf001 js/ci-gcc-12-fixes later to maint).
   (merge 05e280c0a6 jc/http-clear-finished-pointer later to maint).
   (merge 8c49d704ef fh/transport-push-leakfix later to maint).
   (merge 1d232d38bd tl/ls-tree-oid-only later to maint).
   (merge db7961e6a6 gc/document-config-worktree-scope later to maint).
   (merge ce18a30bb7 fs/ssh-default-key-command-doc later to maint).

----------------------------------------------------------------

Changes since v2.36.0 are as follows:

Abhradeep Chakraborty (1):
      builtin/remote.c: teach `-v` to list filters for promisor remotes

Alex Henrie (2):
      convert: clarify line ending conversion warning
      rebase: use correct base for --keep-base when a branch is given

COGONI Guillaume (2):
      contrib/vscode/: debugging with VS Code and gdb
      Documentation/ToolsForGit.txt: Tools for developing Git

Carlo Marcelo Arenas Belón (8):
      reftable: avoid undefined behaviour breaking t0032
      ci: make failure to find perforce more user friendly
      ci: avoid brew for installing perforce
      ci: reintroduce prevention from perforce being quarantined in macOS
      t: regression git needs safe.directory when using sudo
      git-compat-util: avoid failing dir ownership checks if running privileged
      t0034: add negative tests and allow git init to mostly work under sudo
      git-compat-util: allow root to access both SUDO_UID and root owned

Chris Down (2):
      bisect: output state before we are ready to compute bisection
      bisect: output bisect setup status in bisect log

Christian Couder (1):
      http: add custom hostname to IP address resolutions

Derrick Stolee (28):
      clone: die() instead of BUG() on bad refs
      midx: use real paths in lookup_multi_pack_index()
      multi-pack-index: use --object-dir real path
      cache: use const char * for get_object_directory()
      t1092: add compatibility tests for 'git show'
      show: integrate with the sparse index
      object-name: reject trees found in the index
      object-name: diagnose trees in index properly
      rev-parse: integrate with sparse index
      http: make http_get_file() external
      remote: move relative_url()
      remote: allow relative_url() to return an absolute url
      object-file: convert 'switch' back to 'if'
      t1092: refactor 'sparse-index contents' test
      t1092: stress test 'git sparse-checkout set'
      sparse-index: create expand_index()
      sparse-index: introduce partially-sparse indexes
      cache-tree: implement cache_tree_find_path()
      sparse-checkout: --no-sparse-index needs a full index
      sparse-index: partially expand directories
      sparse-index: complete partial expansion
      p2000: add test for 'git sparse-checkout [add|set]'
      sparse-checkout: integrate with sparse index
      remote: create fetch.credentialsInUrl config
      t2107: test 'git update-index --verbose'
      t5329: test 'git gc --cruft' without '--prune=now'
      pack-write: drop always-NULL parameter
      cache-tree: remove cache_tree_find_path()

Edmundo Carmona Antoranz (2):
      blame: report correct number of lines in progress when using ranges
      rebase: simplify an assignment of options.type in cmd_rebase

Elia Pinto (2):
      Makefile: add a prerequisite to the coverage-report target
      contrib/coccinnelle: add equals-null.cocci

Elijah Newren (9):
      tests: stop assuming --no-cone is the default mode for sparse-checkout
      sparse-checkout: make --cone the default
      git-sparse-checkout.txt: wording updates for the cone mode default
      git-sparse-checkout.txt: update docs for deprecation of 'init'
      git-sparse-checkout.txt: shuffle some sections and mark as internal
      git-sparse-checkout.txt: add a new EXAMPLES section
      git-sparse-checkout.txt: flesh out pattern set sections a bit
      git-sparse-checkout.txt: mark non-cone mode as deprecated
      Documentation: some sparsity wording clarifications

Fabian Stelzer (1):
      gpg docs: explain better use of ssh.defaultKeyCommand

Fangyi Zhou (2):
      push: fix capitalisation of the option name autoSetupMerge
      builtin/rebase: remove a redundant space in l10n string

Fernando Ramos (4):
      vimdiff: new implementation with layout support
      vimdiff: integrate layout tests in the unit tests framework ('t' folder)
      vimdiff: add tool documentation
      mergetools: add description to all diff/merge tools

Frantisek Hrbata (3):
      transport: remove unnecessary indenting in transport_push()
      transport: unify return values and exit point from transport_push()
      transport: free local and remote refs in transport_push()

Garrit Franke (3):
      cli: add -v and -h shorthands
      serve.c: remove unnecessary include
      apply.c: remove unnecessary include

Glen Choo (4):
      pull: do not let submodule.recurse override fetch.recurseSubmodules
      remote.c: don't BUG() on 0-length branch names
      remote.c: reject 0-length branch names
      config: document and test the 'worktree' scope

Jason Yundt (1):
      gitweb: switch to an XHTML5 DOCTYPE

Jeff Hostetler (30):
      fsm-listen-win32: handle shortnames
      t7527: test FSMonitor on repos with Unicode root paths
      t/helper/fsmonitor-client: create stress test
      fsmonitor-settings: bare repos are incompatible with FSMonitor
      fsmonitor-settings: stub in Win32-specific incompatibility checking
      fsmonitor-settings: VFS for Git virtual repos are incompatible
      fsmonitor-settings: stub in macOS-specific incompatibility checking
      fsmonitor-settings: remote repos on macOS are incompatible
      fsmonitor-settings: remote repos on Windows are incompatible
      fsmonitor-settings: NTFS and FAT32 on MacOS are incompatible
      unpack-trees: initialize fsmonitor_has_run_once in o->result
      fsm-listen-darwin: ignore FSEvents caused by xattr changes on macOS
      fsmonitor--daemon: cd out of worktree root
      fsmonitor--daemon: prepare for adding health thread
      fsmonitor--daemon: rename listener thread related variables
      fsmonitor--daemon: stub in health thread
      fsm-health-win32: add polling framework to monitor daemon health
      fsm-health-win32: force shutdown daemon if worktree root moves
      fsm-listen-darwin: shutdown daemon if worktree root is moved/renamed
      fsmonitor: optimize processing of directory events
      t7527: FSMonitor tests for directory moves
      t/perf/p7527: add perf test for builtin FSMonitor
      fsmonitor: never set CE_FSMONITOR_VALID on submodules
      t7527: test FSMonitor on case insensitive+preserving file system
      fsmonitor: on macOS also emit NFC spelling for NFD pathname
      t/helper/hexdump: add helper to print hexdump of stdin
      t/lib-unicode-nfc-nfd: helper prereqs for testing unicode nfc/nfd
      t7527: test Unicode NFC/NFD handling on MacOS
      fsmonitor--daemon: allow --super-prefix argument
      t7527: improve implicit shutdown testing in fsmonitor--daemon

Jeff King (2):
      perf-lib: fix missing test titles in output
      bug_fl(): correctly initialize trace2 va_list

Jiang Xin (6):
      Makefile: sort source files before feeding to xgettext
      Makefile: generate "po/git.pot" from stable LOCALIZED_C
      Makefile: remove duplicate and unwanted files in FOUND_SOURCE_FILES
      po/git.pot: this is now a generated file
      Makefile: add "po-update" rule to update po/XX.po
      i18n: fix mismatched camelCase config variables

Joel Holdsworth (22):
      git-p4: add blank lines between functions and class definitions
      git-p4: remove unneeded semicolons from statements
      git-p4: indent with 4-spaces
      git-p4: improve consistency of docstring formatting
      git-p4: convert descriptive class and function comments into docstrings
      git-p4: remove commented code
      git-p4: sort and de-duplcate pylint disable list
      git-p4: remove padding from lists, tuples and function arguments
      git-p4: remove spaces around default arguments
      git-p4: removed brackets when assigning multiple return values
      git-p4: place a single space after every comma
      git-p4: remove extraneous spaces before function arguments
      git-p4: remove redundant backslash-continuations inside brackets
      git-p4: remove spaces between dictionary keys and colons
      git-p4: ensure every comment has a single #
      git-p4: ensure there is a single space around all operators
      git-p4: normalize indentation of lines in conditionals
      git-p4: compare to singletons with "is" and "is not"
      git-p4: only seperate code blocks by a single empty line
      git-p4: move inline comments to line above
      git-p4: seperate multiple statements onto seperate lines
      git-p4: sort imports

Johannes Schindelin (36):
      t2016: require the PERL prereq only when necessary
      add -i: default to the built-in implementation
      trace2 docs: a couple of grammar fixes
      trace2 docs: "printf" is not an English word
      trace2 docs: surround more terms in backticks
      trace2 docs: fix a JSON formatted example
      trace2 docs: clarify what `varargs` is all about
      trace2 docs: add missing full stop
      ci: fix code style
      tests: refactor --write-junit-xml code
      test(junit): avoid line feeds in XML attributes
      ci/run-build-and-tests: take a more high-level view
      ci: make it easier to find failed tests' logs in the GitHub workflow
      ci/run-build-and-tests: add some structure to the GitHub workflow output
      ci: optionally mark up output in the GitHub workflow
      ci(github): skip the logs of the successful test cases
      ci: use `--github-workflow-markup` in the GitHub workflow
      ci(github): mention where the full logs can be found
      ci: call `finalize_test_case_output` a little later
      compat/win32/syslog: fix use-after-realloc
      nedmalloc: avoid new compile error
      dir.c: avoid "exceeds maximum object size" error with GCC v12.x
      archive: optionally add "virtual" files
      archive --add-virtual-file: allow paths containing colons
      scalar: validate the optional enlistment argument
      scalar: implement `scalar diagnose`
      scalar diagnose: include disk space information
      ci(github): bring back the 'print test failures' step
      ci(github): use grouping also in the `win-build` job
      ci(github): also mark up compile errors
      fsmonitor: avoid memory leak in `fsm_settings__get_incompatible_msg()`
      submodule-config: avoid memory leak
      submodule--helper: avoid memory leak when fetching submodules
      read_index_from(): avoid memory leak
      pack-mtimes: avoid closing a bogus file descriptor
      relative_url(): fix incorrect condition

Jonathan Tan (2):
      fetch-pack: make unexpected peek result non-fatal
      commit,shallow: unparse commits if grafts changed

Josh Steadmon (1):
      run-command: don't spam trace2_child_exit()

Junio C Hamano (38):
      show-branch: -g and --current are incompatible
      2.36 gitk/diff-tree --stdin regression fix
      Some regression fixes for 2.36
      2.36 show regression fix
      clone: plug a miniscule leak
      cocci: drop bogus xstrdup_or_null() rule
      tree-wide: apply equals-null.cocci
      tree-wide: apply equals-null.cocci
      tree-wide: apply equals-null.cocci
      A bit more regression fixes for 2.36
      Git 2.36.1
      0th batch for topics from the previous cycle
      SubmittingPatches: use more stable git.ozlabs.org URL
      second 0th batch of topics from the previous cycle
      archive: do not let on-disk mode leak to zip archives
      commit: fix "author_ident" leak
      fetch: do not run a redundant fetch from submodule
      t6424: make sure a failed merge preserves local changes
      First batch for 2.37
      Second batch
      Third batch
      Fourth batch
      revert: optionally refer to commit in the "reference" format
      http.c: clear the 'finished' member once we are done with it
      pathspec: correct an empty string used as a pathspec element
      Fifth batch
      revert: --reference should apply only to 'revert', not 'cherry-pick'
      Sixth batch
      Revert -Wno-error=dangling-pointer
      Seventh batch
      Eighth batch
      cocci: retire is_null_sha1() rule
      Prepare for 2.36.2
      Ninth batch
      Git 2.37-rc0
      Fixes and updates post -rc0
      Another batch of fixes before -rc1
      Git 2.37-rc1

Kevin Locke (1):
      setup: don't die if realpath(3) fails on getcwd(3)

Khalid Masum (1):
      t3501: remove test -f and stop ignoring git <cmd> exit code

Kirill Frolov (1):
      git-p4: fix issue with multiple perforce remotes

Kleber Tarcísio (1):
      commit-graph: close file before returning NULL

Matthew John Cheetham (2):
      scalar: teach `diagnose` to gather packfile info
      scalar: teach `diagnose` to gather loose objects information

Michael J Gruber (1):
      detect-compiler: make detection independent of locale

Miklos Vajna (1):
      log: "--since-as-filter" option is a non-terminating "--since" variant

Neeraj Singh (12):
      bulk-checkin: rename 'state' variable and separate 'plugged' boolean
      bulk-checkin: rebrand plug/unplug APIs as 'odb transactions'
      core.fsyncmethod: batched disk flushes for loose-objects
      cache-tree: use ODB transaction around writing a tree
      builtin/add: add ODB transaction around add_files_to_cache
      update-index: use the bulk-checkin infrastructure
      unpack-objects: use the bulk-checkin infrastructure
      core.fsync: use batch mode and sync loose objects by default on Windows
      test-lib-functions: add parsing helpers for ls-files and ls-tree
      core.fsyncmethod: tests for batch mode
      core.fsyncmethod: performance tests for batch mode
      t/perf: add iteration setup mechanism to perf-lib

Orgad Shaneh (2):
      submodule--helper: fix initialization of warn_if_uninitialized
      fetch: limit shared symref check only for local branches

Philip Oakley (4):
      rebase.c: state preserve-merges has been removed
      rebase: help users when dying with `preserve-merges`
      rebase: note `preserve` merges may be a pull config option
      rebase: translate a die(preserve-merges) message

Philippe Blain (8):
      submodule.h: use a named enum for RECURSE_SUBMODULES_*
      MyFirstContribution: add "Anatomy of a Patch Series" section
      MyFirstContribution: add standalone section on cover letter
      MyFirstContribution: reference "The cover letter" in "Preparing Email"
      MyFirstContribution: reference "The cover letter" in GitGitGadget section
      MyFirstContribution: drop PR description for GGG single-patch contributions
      ci: update Cirrus-CI image to FreeBSD 12.3
      range-diff: show submodule changes irrespective of diff.submodule

Phillip Wood (1):
      tests: make SANITIZE=address imply TEST_NO_MALLOC_CHECK

René Scharfe (8):
      commit, sequencer: turn off break_opt for commit summary
      t7812: test PCRE2 whitespace bug
      tempfile: add mks_tempfile_dt()
      diff: use mks_tempfile_dt()
      Revert "name-rev: release unused name strings"
      2.36 format-patch regression fix
      2.36 fast-export regression fix
      archive: improve documentation of --prefix

SZEDER Gábor (3):
      t0033-safe-directory: check the error message without matching the trash dir
      t0033-safe-directory: check when 'safe.directory' is ignored
      safe.directory: document and check that it's ignored in the environment

Siddharth Asthana (1):
      t1011: replace test -f with test_path_is_file

Son Luong Ngoc (1):
      fsmonitor: query watchman with right valid json

Tao Klerks (8):
      untracked-cache: test untracked-cache-bypassing behavior with -uall
      untracked-cache: support '--untracked-files=all' if configured
      git-p4: support explicit sync of arbitrary existing git-p4 refs
      git-p4: preserve utf8 BOM when importing from p4 to git
      branch: new autosetupmerge option 'simple' for matching branches
      push: default to single remote even when not named origin
      push: new config option "push.autoSetupRemote" supports "simple" push
      git-p4: improve encoding handling to support inconsistent encodings

Taylor Blau (25):
      builtin/receive-pack.c: remove redundant 'if'
      t7703: demonstrate object corruption with pack.packSizeLimit
      builtin/repack.c: ensure that `names` is sorted
      Documentation/technical: add cruft-packs.txt
      pack-bitmap.c: check preferred pack validity when opening MIDX bitmap
      builtin/pack-objects.c: avoid redundant NULL check
      builtin/pack-objects.c: ensure included `--stdin-packs` exist
      builtin/pack-objects.c: ensure pack validity from MIDX bitmap objects
      pack-mtimes: support reading .mtimes files
      pack-write: pass 'struct packing_data' to 'stage_tmp_packfiles'
      chunk-format.h: extract oid_version()
      pack-mtimes: support writing pack .mtimes files
      t/helper: add 'pack-mtimes' test-tool
      builtin/pack-objects.c: return from create_object_entry()
      builtin/pack-objects.c: --cruft without expiration
      reachable: add options to add_unseen_recent_objects_to_traversal
      reachable: report precise timestamps from objects in cruft packs
      builtin/pack-objects.c: --cruft with expiration
      builtin/repack.c: support generating a cruft pack
      builtin/repack.c: allow configuring cruft pack generation
      builtin/repack.c: use named flags for existing_packs
      builtin/repack.c: add cruft packs to MIDX during geometric repack
      builtin/gc.c: conditionally avoid pruning objects via loose
      sha1-file.c: don't freshen cruft packs
      builtin/show-ref.c: avoid over-iterating with --heads, --tags

Victoria Dye (8):
      stash: expand sparse-checkout compatibility testing
      stash: integrate with sparse index
      sparse-index: expose 'is_sparse_index_allowed()'
      read-cache: set sparsity when index is new
      stash: apply stash using 'merge_ort_nonrecursive()'
      unpack-trees: preserve index sparsity
      repack: respect --keep-pack with geometric repack
      ci(github): avoid printing test case preamble twice

Yuyi Wang (3):
      cmake: fix CMakeLists.txt on Linux
      cmake: add pcre2 support
      cmake: remove (_)UNICODE def on Windows in CMakeLists.txt

ZheNing Hu (1):
      read-cache.c: reduce unnecessary cache entry name copying

halilsen (2):
      gitk: trivial indentation fix
      gitk: include y coord in recorded sash position

Ævar Arnfjörð Bjarmason (66):
      run-command.h: remove always unused "clean_on_exit_handler_cbdata"
      configure.ac: remove USE_PIC comment
      xdiff/xmacros.h: remove unused XDL_PTRFREE
      pack-bitmap-write: remove unused bitmap_reset() function
      object-store.h: remove unused has_sha1_file*()
      alloc.[ch]: remove alloc_report() function
      t/helper/test-fast-rebase.c: don't leak "struct strbuf"
      blame: use "goto cleanup" for cleanup_scoreboard()
      string_list API users: use string_list_init_{no,}dup
      format-patch: don't leak "extra_headers" or "ref_message_ids"
      cocci: add and apply free_commit_list() rules
      revision.[ch]: provide and start using a release_revisions()
      revisions API users: add straightforward release_revisions()
      revision.[ch]: document and move code declared around "init"
      revisions API users: use release_revisions() needing REV_INFO_INIT
      stash: always have the owner of "stash_info" free it
      revisions API users: add "goto cleanup" for release_revisions()
      revisions API users: use release_revisions() in http-push.c
      revisions API users: use release_revisions() in builtin/log.c
      revisions API users: use release_revisions() with UNLEAK()
      revisions API users: use release_revisions() for "prune_data" users
      revisions API: have release_revisions() release "commits"
      revisions API: have release_revisions() release "mailmap"
      revisions API: have release_revisions() release "cmdline"
      revisions API: have release_revisions() release "filter"
      revisions API: have release_revisions() release "grep_filter"
      revisions API: have release_revisions() release "prune_data"
      revisions API: clear "boundary_commits" in release_revisions()
      revisions API: release "reflog_info" in release revisions()
      revisions API: call diff_free(&revs->pruning) in revisions_release()
      revisions API: have release_revisions() release "date_mode"
      revisions API: have release_revisions() release "topo_walk_info"
      revisions API: add a TODO for diff_free(&revs->diffopt)
      CI: select CC based on CC_PACKAGE (again)
      tests: using custom GIT_EXEC_PATH breaks --valgrind tests
      log test: skip a failing mkstemp() test under valgrind
      object-file: fix a unpack_loose_header() regression in 3b6a8db3b03
      commit-graph.c: don't assume that stat() succeeds
      ci: use https, not http to download binaries from perforce.com
      connect.c: refactor sending of agent & object-format
      dir API: add a generalized path_match_flags() function
      fetch-pack: add a deref_without_lazy_fetch_extended()
      fetch-pack: move --keep=* option filling to a function
      bundle.h: make "fd" version of read_bundle_header() public
      Makefile: have "make pot" not "reset --hard"
      i18n CI: stop allowing non-ASCII source messages in po/git.pot
      po/git.pot: don't check in result of "make pot"
      Makefile: add "po-init" rule to initialize po/XX.po
      l10n: Document the new l10n workflow
      common-main.c: move non-trace2 exit() behavior out of trace2.c
      usage.c: add a non-fatal bug() function to go with BUG()
      parse-options.c: use new bug() API for optbug()
      parse-options.c: use optbug() instead of BUG() "opts" check
      receive-pack: use bug() and BUG_if_bug()
      cache-tree.c: use bug() and BUG_if_bug()
      run-command API: rename "env_array" to "env"
      run-command API users: use "env" not "env_array" in comments & names
      ls-tree: test for the regression in 9c4d58ff2c3
      run-command: add an "ungroup" option to run_process_parallel()
      remote.c: remove braces from one-statement "for"-loops
      remote.c: don't dereference NULL in freeing loop
      hook API: fix v2.36.0 regression: hooks should be connected to a TTY
      add -i tests: mark "TODO" depending on GIT_TEST_ADD_I_USE_BUILTIN
      fetch doc: note "pushurl" caveat about "credentialsInUrl", elaborate
      transfer doc: move fetch.credentialsInUrl to "transfer" config namespace
      tests: add LIBCURL prerequisite to tests needing libcurl


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.37.0-rc0
@ 2022-06-14  1:46  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2022-06-14  1:46 UTC (permalink / raw)
  To: git; +Cc: git-packagers

An early preview release Git v2.37.0-rc0 is now available for
testing at the usual places.  It is comprised of 339 non-merge
commits since v2.36.0, contributed by 59 people, 18 of which are
new faces [*].  There are a few topics that we may want to merge
before the final release, which will be in -rc1 that is planned to
be tagged at around the end of the week.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.37.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.36.0 are as follows.
Welcome to the Git development community!

  Chris Down, Daniel Li, Fernando Ramos, Frantisek Hrbata,
  Garrit Franke, Gregory David, Guy Maurel, halilsen, Huang Zou,
  "Ing. Martin Prantl Ph.D.", Kevin Locke, Khalid Masum, Kirill
  Frolov, Kleber Tarcísio, Laurent Lyaudet, Siddharth Asthana,
  Thomas Hurst, and Yuyi Wang.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Abhradeep Chakraborty, Ævar Arnfjörð Bjarmason, Alex Henrie,
  Anthony Sottile, BRESSAT Jonathan, Carlo Arenas, Carlo Marcelo
  Arenas Belón, Christian Couder, COGONI Guillaume, Derrick
  Stolee, Edmundo Carmona Antoranz, Elia Pinto, Elijah Newren,
  Eric Sunshine, Glen Choo, Jason Yundt, Jeff Hostetler, Jeff King,
  Jiang Xin, Joel Holdsworth, Johannes Schindelin, Jonathan Tan,
  Josh Steadmon, Junio C Hamano, Matthew John Cheetham, Matthias
  Aßhauer, Matthieu Moy, Michael J Gruber, Miklos Vajna, Neeraj
  Singh, Orgad Shaneh, Philippe Blain, Phillip Wood, Randall
  S. Becker, René Scharfe, Son Luong Ngoc, SZEDER Gábor, Tao
  Klerks, Taylor Blau, Victoria Dye, and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git v2.37 Release Notes (draft)
===============================

UI, Workflows & Features

 * "vimdiff[123]" mergetool drivers have been reimplemented with a
   more generic layout mechanism.

 * "git -v" and "git -h" are now understood as "git --version" and
   "git --help".

 * The temporary files fed to external diff command are now generated
   inside a new temporary directory under the same basename.

 * "git log --since=X" will stop traversal upon seeing a commit that
   is older than X, but there may be commits behind it that is younger
   than X when the commit was created with a faulty clock.  A new
   option is added to keep digging without stopping, and instead
   filter out commits with timestamp older than X.

 * "git -c branch.autosetupmerge=simple branch $A $B" will set the $B
   as $A's upstream only when $A and $B shares the same name, and "git
   -c push.default=simple" on branch $A would push to update the
   branch $A at the remote $B came from.  Also more places use the
   sole remote, if exists, before defaulting to 'origin'.

 * A new doc has been added that lists tips for tools to work with
   Git's codebase.

 * "git remote -v" now shows the list-objects-filter used during
   fetching from the remote, if available.

 * With the new http.curloptResolve configuration, the CURLOPT_RESOLVE
   mechanism that allows cURL based applications to use pre-resolved
   IP addresses for the requests is exposed to the scripts.

 * "git add -i" was rewritten in C some time ago and has been in
   testing; the reimplementation is now exposed to general public by
   default.

 * Deprecate non-cone mode of the sparse-checkout feature.

 * Introduce a filesystem-dependent mechanism to optimize the way the
   bits for many loose object files are ensured to hit the disk
   platter.

 * The "do not remove the directory the user started Git in" logic,
   when Git cannot tell where that directory is, is disabled.  Earlier
   we refused to run in such a case.

 * A mechanism to pack unreachable objects into a "cruft pack",
   instead of ejecting them into loose form to be reclaimed later, has
   been introduced.

 * Update the doctype written in gitweb output to xhtml5.

 * The "fetch.credentialsInUrl" configuration variable controls what
   happens when a URL with embedded login credential is used.


Performance, Internal Implementation, Development Support etc.

 * The performance of the "untracked cache" feature has been improved
   when "--untracked-files=<mode>" and "status.showUntrackedFiles"
   are combined.

 * "git stash" works better with sparse index entries.

 * "git show :<path>" learned to work better with the sparse-index
   feature.

 * Introduce and apply coccinelle rule to discourage an explicit
   comparison between a pointer and NULL, and applies the clean-up to
   the maintenance track.

 * Preliminary code refactoring around transport and bundle code.

 * "sparse-checkout" learns to work better with the sparse-index
   feature.

 * A workflow change for translators are being proposed.  git.pot is
   no longer version controlled and it is local responsibility of
   translaters to generate it.

 * Plug the memory leaks from the trickiest API of all, the revision
   walker.

 * Rename .env_array member to .env in the child_process structure.

 * More fsmonitor--daemon.

 * A new bug() and BUG_if_bug() API is introduced to make it easier to
   uniformly log "detect multiple bugs and abort in the end" pattern.


Fixes since v2.36
-----------------

 * "git submodule update" without pathspec should silently skip an
   uninitialized submodule, but it started to become noisy by mistake.
   (merge 4f1ccef87c gc/submodule-update-part2 later to maint).

 * "diff-tree --stdin" has been broken for about a year, but 2.36
   release broke it even worse by breaking running the command with
   <pathspec>, which in turn broke "gitk" and got noticed.  This has
   been corrected by aligning its behaviour to that of "log".
   (merge f8781bfda3 jc/diff-tree-stdin-fix later to maint).

 * Regression fix for 2.36 where "git name-rev" started to sometimes
   reference strings after they are freed.
   (merge 45a14f578e rs/name-rev-fix-free-after-use later to maint).

 * "git show <commit1> <commit2>... -- <pathspec>" lost the pathspec
   when showing the second and subsequent commits, which has been
   corrected.
   (merge 5cdb38458e jc/show-pathspec-fix later to maint).

 * "git fast-export -- <pathspec>" lost the pathspec when showing the
   second and subsequent commits, which has been corrected.
   (merge d1c25272f5 rs/fast-export-pathspec-fix later to maint).

 * "git format-patch <args> -- <pathspec>" lost the pathspec when
   showing the second and subsequent commits, which has been
   corrected.
   (merge 91f8f7e46f rs/format-patch-pathspec-fix later to maint).

 * "git clone --origin X" leaked piece of memory that held value read
   from the clone.defaultRemoteName configuration variable, which has
   been plugged.
   (merge 6dfadc8981 jc/clone-remote-name-leak-fix later to maint).

 * Get rid of a bogus and over-eager coccinelle rule.
   (merge 08bdd3a185 jc/cocci-xstrdup-or-null-fix later to maint).

 * The path taken by "git multi-pack-index" command from the end user
   was compared with path internally prepared by the tool withut first
   normalizing, which lead to duplicated paths not being noticed,
   which has been corrected.
   (merge 11f9e8de3d ds/midx-normalize-pathname-before-comparison later to maint).

 * Correct choices of C compilers used in various CI jobs.
   (merge 3506cae04f ab/cc-package-fixes later to maint).

 * Various cleanups to "git p4".
   (merge 4ff0108d9e jh/p4-various-fixups later to maint).

 * The progress meter of "git blame" was showing incorrect numbers
   when processing only parts of the file.
   (merge e5f5d7d42e ea/progress-partial-blame later to maint).

 * "git rebase --keep-base <upstream> <branch-to-rebase>" computed the
   commit to rebase onto incorrectly, which has been corrected.
   (merge 9e5ebe9668 ah/rebase-keep-base-fix later to maint).

 * Fix a leak of FILE * in an error codepath.
   (merge c0befa0c03 kt/commit-graph-plug-fp-leak-on-error later to maint).

 * Avoid problems from interaction between malloc_check and address
   sanitizer.
   (merge 067109a5e7 pw/test-malloc-with-sanitize-address later to maint).

 * The commit summary shown after making a commit is matched to what
   is given in "git status" not to use the break-rewrite heuristics.
   (merge 84792322ed rs/commit-summary-wo-break-rewrite later to maint).

 * Update a few end-user facing messages around eol conversion.
   (merge c970d30c2c ah/convert-warning-message later to maint).

 * Trace2 documentation updates.
   (merge a6c80c313c js/trace2-doc-fixes later to maint).

 * Build procedure fixup.
   (merge 1fbfd96f50 mg/detect-compiler-in-c-locale later to maint).

 * "git pull" without "--recurse-submodules=<arg>" made
   submodule.recurse take precedence over fetch.recurseSubmodules by
   mistake, which has been corrected.
   (merge 5819417365 gc/pull-recurse-submodules later to maint).

 * "git bisect" was too silent before it is ready to start computing
   the actual bisection, which has been corrected.
   (merge f11046e6de cd/bisect-messages-from-pre-flight-states later to maint).

 * macOS CI jobs have been occasionally flaky due to tentative version
   skew between perforce and the homebrew packager.  Instead of
   failing the whole CI job, just let it skip the p4 tests when this
   happens.
   (merge f15e00b463 cb/ci-make-p4-optional later to maint).

 * A bit of test framework fixes with a few fixes to issues found by
   valgrind.
   (merge 7c898554d7 ab/valgrind-fixes later to maint).

 * "git archive --add-file=<path>" picked up the raw permission bits
   from the path and propagated to zip output in some cases, without
   normalization, which has been corrected (tar output did not have
   this issue).
   (merge 6a61661967 jc/archive-add-file-normalize-mode later to maint).

 * "make coverage-report" without first running "make coverage" did
   not produce any meaningful result, which has been corrected.
   (merge 96ddfecc5b ep/coverage-report-wants-test-to-have-run later to maint).

 * The "--current" option of "git show-branch" should have been made
   incompatible with the "--reflog" mode, but this was not enforced,
   which has been corrected.
   (merge 41c64ae0e7 jc/show-branch-g-current later to maint).

 * "git fetch" unnecessarily failed when an unexpected optional
   section appeared in the output, which has been corrected.
   (merge 7709acf7be jt/fetch-peek-optional-section later to maint).

 * The way "git fetch" without "--update-head-ok" ensures that HEAD in
   no worktree points at any ref being updated was too wasteful, which
   has been optimized a bit.
   (merge f7400da800 os/fetch-check-not-current-branch later to maint).

 * "git fetch --recurse-submodules" from multiple remotes (either from
   a remote group, or "--all") used to make one extra "git fetch" in
   the submodules, which has been corrected.
   (merge 0353c68818 jc/avoid-redundant-submodule-fetch later to maint).

 * With a recent update to refuse access to repositories of other
   people by default, "sudo make install" and "sudo git describe"
   stopped working.  This series intends to loosen it while keeping
   the safety.
   (merge b9063afda1 cb/path-owner-check-with-sudo later to maint).

 * The tests that ensured merges stop when interfering local changes
   are present did not make sure that local changes are preserved; now
   they do.
   (merge 4b317450ce jc/t6424-failing-merge-preserve-local-changes later to maint).

 * Some real problems noticed by gcc 12 have been fixed, while false
   positives have been worked around.

 * Update the version of FreeBSD image used in Cirrus CI.
   (merge c58bebd4c6 pb/use-freebsd-12.3-in-cirrus-ci later to maint).

 * The multi-pack-index code did not protect the packfile it is going
   to depend on from getting removed while in use, which has been
   corrected.
   (merge 4090511e40 tb/midx-race-in-pack-objects later to maint).

 * Teach "git repack --geometric" work better with "--keep-pack" and
   avoid corrupting the repository when packsize limit is used.
   (merge 66731ff921 tb/geom-repack-with-keep-and-max later to maint).

 * The documentation on the interaction between "--add-file" and
   "--prefix" options of "git archive" has been improved.
   (merge a75910602a rs/document-archive-prefix later to maint).

 * A git subcommand like "git add -p" spawns a separate git process
   while relaying its command line arguments.  A pathspec with only
   negative elements was mistakenly passed with an empty string, which
   has been corrected.
   (merge b02fdbc80a jc/all-negative-pathspec later to maint).

 * With a more targetted workaround in http.c in another topic, we may
   be able to lift this blanket "GCC12 dangling-pointer warning is
   broken and unsalvageable" workaround.
   (merge 419141e495 cb/buggy-gcc-12-workaround later to maint).

 * A misconfigured 'branch..remote' led to a bug in configuration
   parsing.
   (merge f1dfbd9ee0 gc/zero-length-branch-config-fix later to maint).

 * "git -c diff.submodule=log range-diff" did not show anything for
   submodules that changed in the ranges being compared, and
   "git -c diff.submodule=diff range-diff" did not work correctly.
   Fix this by including the "--submodule=short" output
   unconditionally to be compared.

 * In Git 2.36 we revamped the way how hooks are invoked.  One change
   that is end-user visible is that the output of a hook is no longer
   directly connected to the standard output of "git" that spawns the
   hook, which was noticed post release.  This is getting corrected.
   (merge a082345372 ab/hooks-regression-fix later to maint).

 * Updating the graft information invalidates the list of parents of
   in-core commit objects that used to be in the graft file.

 * "git show-ref --heads" (and "--tags") still iterated over all the
   refs only to discard refs outside the specified area, which has
   been corrected.
   (merge c0c9d35e27 tb/show-ref-optim later to maint).

 * Remove redundant copying (with index v3 and older) or possible
   over-reading beyond end of mmapped memory (with index v4) has been
   corrected.
   (merge 6d858341d2 zh/read-cache-copy-name-entry-fix later to maint).

 * Sample watchman interface hook sometimes failed to produce
   correctly formatted JSON message, which has been corrected.
   (merge 134047b500 sn/fsmonitor-missing-clock later to maint).

 * Use-after-free (with another forget-to-free) fix.
   (merge 323822c72b ab/remote-free-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge e6b2582da3 cm/reftable-0-length-memset later to maint).
   (merge 0b75e5bf22 ab/misc-cleanup later to maint).
   (merge 52e1ab8a76 ea/rebase-code-simplify later to maint).
   (merge 756d15923b sg/safe-directory-tests-and-docs later to maint).
   (merge d097a23bfa ds/do-not-call-bug-on-bad-refs later to maint).
   (merge c36c27e75c rs/t7812-pcre2-ws-bug-test later to maint).
   (merge 1da312742d gf/unused-includes later to maint).
   (merge 465b30a92d pb/submodule-recurse-mode-enum later to maint).
   (merge 82b28c4ed8 km/t3501-use-test-helpers later to maint).
   (merge 72315e431b sa/t1011-use-helpers later to maint).
   (merge 95b3002201 cg/vscode-with-gdb later to maint).
   (merge fbe5f6b804 tk/p4-utf8-bom later to maint).
   (merge 17f273ffba tk/p4-with-explicity-sync later to maint).
   (merge 944db25c60 kf/p4-multiple-remotes later to maint).
   (merge b014cee8de jc/update-ozlabs-url later to maint).
   (merge 4ec5008062 pb/ggg-in-mfc-doc later to maint).
   (merge af845a604d tb/receive-pack-code-cleanup later to maint).
   (merge 2acf4cf001 js/ci-gcc-12-fixes later to maint).
   (merge 05e280c0a6 jc/http-clear-finished-pointer later to maint).
   (merge 8c49d704ef fh/transport-push-leakfix later to maint).
   (merge 1d232d38bd tl/ls-tree-oid-only later to maint).
   (merge db7961e6a6 gc/document-config-worktree-scope later to maint).

----------------------------------------------------------------

Changes since v2.36.0 are as follows:

Abhradeep Chakraborty (1):
      builtin/remote.c: teach `-v` to list filters for promisor remotes

Alex Henrie (2):
      convert: clarify line ending conversion warning
      rebase: use correct base for --keep-base when a branch is given

COGONI Guillaume (2):
      contrib/vscode/: debugging with VS Code and gdb
      Documentation/ToolsForGit.txt: Tools for developing Git

Carlo Marcelo Arenas Belón (7):
      reftable: avoid undefined behaviour breaking t0032
      ci: make failure to find perforce more user friendly
      ci: avoid brew for installing perforce
      ci: reintroduce prevention from perforce being quarantined in macOS
      t: regression git needs safe.directory when using sudo
      git-compat-util: avoid failing dir ownership checks if running privileged
      t0034: add negative tests and allow git init to mostly work under sudo

Chris Down (2):
      bisect: output state before we are ready to compute bisection
      bisect: output bisect setup status in bisect log

Christian Couder (1):
      http: add custom hostname to IP address resolutions

Derrick Stolee (24):
      clone: die() instead of BUG() on bad refs
      midx: use real paths in lookup_multi_pack_index()
      multi-pack-index: use --object-dir real path
      cache: use const char * for get_object_directory()
      t1092: add compatibility tests for 'git show'
      show: integrate with the sparse index
      object-name: reject trees found in the index
      object-name: diagnose trees in index properly
      rev-parse: integrate with sparse index
      http: make http_get_file() external
      remote: move relative_url()
      remote: allow relative_url() to return an absolute url
      object-file: convert 'switch' back to 'if'
      t1092: refactor 'sparse-index contents' test
      t1092: stress test 'git sparse-checkout set'
      sparse-index: create expand_index()
      sparse-index: introduce partially-sparse indexes
      cache-tree: implement cache_tree_find_path()
      sparse-checkout: --no-sparse-index needs a full index
      sparse-index: partially expand directories
      sparse-index: complete partial expansion
      p2000: add test for 'git sparse-checkout [add|set]'
      sparse-checkout: integrate with sparse index
      remote: create fetch.credentialsInUrl config

Edmundo Carmona Antoranz (2):
      blame: report correct number of lines in progress when using ranges
      rebase: simplify an assignment of options.type in cmd_rebase

Elia Pinto (2):
      Makefile: add a prerequisite to the coverage-report target
      contrib/coccinnelle: add equals-null.cocci

Elijah Newren (9):
      tests: stop assuming --no-cone is the default mode for sparse-checkout
      sparse-checkout: make --cone the default
      git-sparse-checkout.txt: wording updates for the cone mode default
      git-sparse-checkout.txt: update docs for deprecation of 'init'
      git-sparse-checkout.txt: shuffle some sections and mark as internal
      git-sparse-checkout.txt: add a new EXAMPLES section
      git-sparse-checkout.txt: flesh out pattern set sections a bit
      git-sparse-checkout.txt: mark non-cone mode as deprecated
      Documentation: some sparsity wording clarifications

Fernando Ramos (4):
      vimdiff: new implementation with layout support
      vimdiff: integrate layout tests in the unit tests framework ('t' folder)
      vimdiff: add tool documentation
      mergetools: add description to all diff/merge tools

Frantisek Hrbata (3):
      transport: remove unnecessary indenting in transport_push()
      transport: unify return values and exit point from transport_push()
      transport: free local and remote refs in transport_push()

Garrit Franke (3):
      cli: add -v and -h shorthands
      serve.c: remove unnecessary include
      apply.c: remove unnecessary include

Glen Choo (4):
      pull: do not let submodule.recurse override fetch.recurseSubmodules
      remote.c: don't BUG() on 0-length branch names
      remote.c: reject 0-length branch names
      config: document and test the 'worktree' scope

Jason Yundt (1):
      gitweb: switch to an XHTML5 DOCTYPE

Jeff Hostetler (30):
      fsm-listen-win32: handle shortnames
      t7527: test FSMonitor on repos with Unicode root paths
      t/helper/fsmonitor-client: create stress test
      fsmonitor-settings: bare repos are incompatible with FSMonitor
      fsmonitor-settings: stub in Win32-specific incompatibility checking
      fsmonitor-settings: VFS for Git virtual repos are incompatible
      fsmonitor-settings: stub in macOS-specific incompatibility checking
      fsmonitor-settings: remote repos on macOS are incompatible
      fsmonitor-settings: remote repos on Windows are incompatible
      fsmonitor-settings: NTFS and FAT32 on MacOS are incompatible
      unpack-trees: initialize fsmonitor_has_run_once in o->result
      fsm-listen-darwin: ignore FSEvents caused by xattr changes on macOS
      fsmonitor--daemon: cd out of worktree root
      fsmonitor--daemon: prepare for adding health thread
      fsmonitor--daemon: rename listener thread related variables
      fsmonitor--daemon: stub in health thread
      fsm-health-win32: add polling framework to monitor daemon health
      fsm-health-win32: force shutdown daemon if worktree root moves
      fsm-listen-darwin: shutdown daemon if worktree root is moved/renamed
      fsmonitor: optimize processing of directory events
      t7527: FSMonitor tests for directory moves
      t/perf/p7527: add perf test for builtin FSMonitor
      fsmonitor: never set CE_FSMONITOR_VALID on submodules
      t7527: test FSMonitor on case insensitive+preserving file system
      fsmonitor: on macOS also emit NFC spelling for NFD pathname
      t/helper/hexdump: add helper to print hexdump of stdin
      t/lib-unicode-nfc-nfd: helper prereqs for testing unicode nfc/nfd
      t7527: test Unicode NFC/NFD handling on MacOS
      fsmonitor--daemon: allow --super-prefix argument
      t7527: improve implicit shutdown testing in fsmonitor--daemon

Jiang Xin (5):
      Makefile: sort source files before feeding to xgettext
      Makefile: generate "po/git.pot" from stable LOCALIZED_C
      Makefile: remove duplicate and unwanted files in FOUND_SOURCE_FILES
      po/git.pot: this is now a generated file
      Makefile: add "po-update" rule to update po/XX.po

Joel Holdsworth (22):
      git-p4: add blank lines between functions and class definitions
      git-p4: remove unneeded semicolons from statements
      git-p4: indent with 4-spaces
      git-p4: improve consistency of docstring formatting
      git-p4: convert descriptive class and function comments into docstrings
      git-p4: remove commented code
      git-p4: sort and de-duplcate pylint disable list
      git-p4: remove padding from lists, tuples and function arguments
      git-p4: remove spaces around default arguments
      git-p4: removed brackets when assigning multiple return values
      git-p4: place a single space after every comma
      git-p4: remove extraneous spaces before function arguments
      git-p4: remove redundant backslash-continuations inside brackets
      git-p4: remove spaces between dictionary keys and colons
      git-p4: ensure every comment has a single #
      git-p4: ensure there is a single space around all operators
      git-p4: normalize indentation of lines in conditionals
      git-p4: compare to singletons with "is" and "is not"
      git-p4: only seperate code blocks by a single empty line
      git-p4: move inline comments to line above
      git-p4: seperate multiple statements onto seperate lines
      git-p4: sort imports

Johannes Schindelin (27):
      t2016: require the PERL prereq only when necessary
      add -i: default to the built-in implementation
      trace2 docs: a couple of grammar fixes
      trace2 docs: "printf" is not an English word
      trace2 docs: surround more terms in backticks
      trace2 docs: fix a JSON formatted example
      trace2 docs: clarify what `varargs` is all about
      trace2 docs: add missing full stop
      ci: fix code style
      tests: refactor --write-junit-xml code
      test(junit): avoid line feeds in XML attributes
      ci/run-build-and-tests: take a more high-level view
      ci: make it easier to find failed tests' logs in the GitHub workflow
      ci/run-build-and-tests: add some structure to the GitHub workflow output
      ci: optionally mark up output in the GitHub workflow
      ci(github): skip the logs of the successful test cases
      ci: use `--github-workflow-markup` in the GitHub workflow
      ci(github): mention where the full logs can be found
      ci: call `finalize_test_case_output` a little later
      compat/win32/syslog: fix use-after-realloc
      nedmalloc: avoid new compile error
      dir.c: avoid "exceeds maximum object size" error with GCC v12.x
      archive: optionally add "virtual" files
      archive --add-virtual-file: allow paths containing colons
      scalar: validate the optional enlistment argument
      scalar: implement `scalar diagnose`
      scalar diagnose: include disk space information

Jonathan Tan (2):
      fetch-pack: make unexpected peek result non-fatal
      commit,shallow: unparse commits if grafts changed

Josh Steadmon (1):
      run-command: don't spam trace2_child_exit()

Junio C Hamano (32):
      show-branch: -g and --current are incompatible
      2.36 gitk/diff-tree --stdin regression fix
      Some regression fixes for 2.36
      2.36 show regression fix
      clone: plug a miniscule leak
      cocci: drop bogus xstrdup_or_null() rule
      tree-wide: apply equals-null.cocci
      tree-wide: apply equals-null.cocci
      tree-wide: apply equals-null.cocci
      A bit more regression fixes for 2.36
      Git 2.36.1
      0th batch for topics from the previous cycle
      SubmittingPatches: use more stable git.ozlabs.org URL
      second 0th batch of topics from the previous cycle
      archive: do not let on-disk mode leak to zip archives
      commit: fix "author_ident" leak
      fetch: do not run a redundant fetch from submodule
      t6424: make sure a failed merge preserves local changes
      First batch for 2.37
      Second batch
      Third batch
      Fourth batch
      http.c: clear the 'finished' member once we are done with it
      pathspec: correct an empty string used as a pathspec element
      Fifth batch
      Sixth batch
      Revert -Wno-error=dangling-pointer
      Seventh batch
      Eighth batch
      Prepare for 2.36.2
      Ninth batch
      Git 2.37-rc0

Kevin Locke (1):
      setup: don't die if realpath(3) fails on getcwd(3)

Khalid Masum (1):
      t3501: remove test -f and stop ignoring git <cmd> exit code

Kirill Frolov (1):
      git-p4: fix issue with multiple perforce remotes

Kleber Tarcísio (1):
      commit-graph: close file before returning NULL

Matthew John Cheetham (2):
      scalar: teach `diagnose` to gather packfile info
      scalar: teach `diagnose` to gather loose objects information

Michael J Gruber (1):
      detect-compiler: make detection independent of locale

Miklos Vajna (1):
      log: "--since-as-filter" option is a non-terminating "--since" variant

Neeraj Singh (12):
      bulk-checkin: rename 'state' variable and separate 'plugged' boolean
      bulk-checkin: rebrand plug/unplug APIs as 'odb transactions'
      core.fsyncmethod: batched disk flushes for loose-objects
      cache-tree: use ODB transaction around writing a tree
      builtin/add: add ODB transaction around add_files_to_cache
      update-index: use the bulk-checkin infrastructure
      unpack-objects: use the bulk-checkin infrastructure
      core.fsync: use batch mode and sync loose objects by default on Windows
      test-lib-functions: add parsing helpers for ls-files and ls-tree
      core.fsyncmethod: tests for batch mode
      t/perf: add iteration setup mechanism to perf-lib
      core.fsyncmethod: performance tests for batch mode

Orgad Shaneh (2):
      submodule--helper: fix initialization of warn_if_uninitialized
      fetch: limit shared symref check only for local branches

Philippe Blain (8):
      submodule.h: use a named enum for RECURSE_SUBMODULES_*
      MyFirstContribution: add "Anatomy of a Patch Series" section
      MyFirstContribution: add standalone section on cover letter
      MyFirstContribution: reference "The cover letter" in "Preparing Email"
      MyFirstContribution: reference "The cover letter" in GitGitGadget section
      MyFirstContribution: drop PR description for GGG single-patch contributions
      ci: update Cirrus-CI image to FreeBSD 12.3
      range-diff: show submodule changes irrespective of diff.submodule

Phillip Wood (1):
      tests: make SANITIZE=address imply TEST_NO_MALLOC_CHECK

René Scharfe (8):
      commit, sequencer: turn off break_opt for commit summary
      t7812: test PCRE2 whitespace bug
      tempfile: add mks_tempfile_dt()
      diff: use mks_tempfile_dt()
      Revert "name-rev: release unused name strings"
      2.36 format-patch regression fix
      2.36 fast-export regression fix
      archive: improve documentation of --prefix

SZEDER Gábor (3):
      t0033-safe-directory: check the error message without matching the trash dir
      t0033-safe-directory: check when 'safe.directory' is ignored
      safe.directory: document and check that it's ignored in the environment

Siddharth Asthana (1):
      t1011: replace test -f with test_path_is_file

Son Luong Ngoc (1):
      fsmonitor: query watchman with right valid json

Tao Klerks (8):
      untracked-cache: test untracked-cache-bypassing behavior with -uall
      untracked-cache: support '--untracked-files=all' if configured
      git-p4: support explicit sync of arbitrary existing git-p4 refs
      git-p4: preserve utf8 BOM when importing from p4 to git
      branch: new autosetupmerge option 'simple' for matching branches
      push: default to single remote even when not named origin
      push: new config option "push.autoSetupRemote" supports "simple" push
      git-p4: improve encoding handling to support inconsistent encodings

Taylor Blau (25):
      builtin/receive-pack.c: remove redundant 'if'
      t7703: demonstrate object corruption with pack.packSizeLimit
      builtin/repack.c: ensure that `names` is sorted
      Documentation/technical: add cruft-packs.txt
      pack-bitmap.c: check preferred pack validity when opening MIDX bitmap
      builtin/pack-objects.c: avoid redundant NULL check
      builtin/pack-objects.c: ensure included `--stdin-packs` exist
      builtin/pack-objects.c: ensure pack validity from MIDX bitmap objects
      pack-mtimes: support reading .mtimes files
      pack-write: pass 'struct packing_data' to 'stage_tmp_packfiles'
      chunk-format.h: extract oid_version()
      pack-mtimes: support writing pack .mtimes files
      t/helper: add 'pack-mtimes' test-tool
      builtin/pack-objects.c: return from create_object_entry()
      builtin/pack-objects.c: --cruft without expiration
      reachable: add options to add_unseen_recent_objects_to_traversal
      reachable: report precise timestamps from objects in cruft packs
      builtin/pack-objects.c: --cruft with expiration
      builtin/repack.c: support generating a cruft pack
      builtin/repack.c: allow configuring cruft pack generation
      builtin/repack.c: use named flags for existing_packs
      builtin/repack.c: add cruft packs to MIDX during geometric repack
      builtin/gc.c: conditionally avoid pruning objects via loose
      sha1-file.c: don't freshen cruft packs
      builtin/show-ref.c: avoid over-iterating with --heads, --tags

Victoria Dye (8):
      stash: expand sparse-checkout compatibility testing
      stash: integrate with sparse index
      sparse-index: expose 'is_sparse_index_allowed()'
      read-cache: set sparsity when index is new
      stash: apply stash using 'merge_ort_nonrecursive()'
      unpack-trees: preserve index sparsity
      repack: respect --keep-pack with geometric repack
      ci(github): avoid printing test case preamble twice

Yuyi Wang (3):
      cmake: fix CMakeLists.txt on Linux
      cmake: add pcre2 support
      cmake: remove (_)UNICODE def on Windows in CMakeLists.txt

ZheNing Hu (1):
      read-cache.c: reduce unnecessary cache entry name copying

halilsen (2):
      gitk: trivial indentation fix
      gitk: include y coord in recorded sash position

Ævar Arnfjörð Bjarmason (62):
      run-command.h: remove always unused "clean_on_exit_handler_cbdata"
      configure.ac: remove USE_PIC comment
      xdiff/xmacros.h: remove unused XDL_PTRFREE
      pack-bitmap-write: remove unused bitmap_reset() function
      object-store.h: remove unused has_sha1_file*()
      alloc.[ch]: remove alloc_report() function
      t/helper/test-fast-rebase.c: don't leak "struct strbuf"
      blame: use "goto cleanup" for cleanup_scoreboard()
      string_list API users: use string_list_init_{no,}dup
      format-patch: don't leak "extra_headers" or "ref_message_ids"
      cocci: add and apply free_commit_list() rules
      revision.[ch]: provide and start using a release_revisions()
      revisions API users: add straightforward release_revisions()
      revision.[ch]: document and move code declared around "init"
      revisions API users: use release_revisions() needing REV_INFO_INIT
      stash: always have the owner of "stash_info" free it
      revisions API users: add "goto cleanup" for release_revisions()
      revisions API users: use release_revisions() in http-push.c
      revisions API users: use release_revisions() in builtin/log.c
      revisions API users: use release_revisions() with UNLEAK()
      revisions API users: use release_revisions() for "prune_data" users
      revisions API: have release_revisions() release "commits"
      revisions API: have release_revisions() release "mailmap"
      revisions API: have release_revisions() release "cmdline"
      revisions API: have release_revisions() release "filter"
      revisions API: have release_revisions() release "grep_filter"
      revisions API: have release_revisions() release "prune_data"
      revisions API: clear "boundary_commits" in release_revisions()
      revisions API: release "reflog_info" in release revisions()
      revisions API: call diff_free(&revs->pruning) in revisions_release()
      revisions API: have release_revisions() release "date_mode"
      revisions API: have release_revisions() release "topo_walk_info"
      revisions API: add a TODO for diff_free(&revs->diffopt)
      CI: select CC based on CC_PACKAGE (again)
      tests: using custom GIT_EXEC_PATH breaks --valgrind tests
      log test: skip a failing mkstemp() test under valgrind
      object-file: fix a unpack_loose_header() regression in 3b6a8db3b03
      commit-graph.c: don't assume that stat() succeeds
      ci: use https, not http to download binaries from perforce.com
      connect.c: refactor sending of agent & object-format
      dir API: add a generalized path_match_flags() function
      fetch-pack: add a deref_without_lazy_fetch_extended()
      fetch-pack: move --keep=* option filling to a function
      bundle.h: make "fd" version of read_bundle_header() public
      Makefile: have "make pot" not "reset --hard"
      i18n CI: stop allowing non-ASCII source messages in po/git.pot
      po/git.pot: don't check in result of "make pot"
      Makefile: add "po-init" rule to initialize po/XX.po
      l10n: Document the new l10n workflow
      common-main.c: move non-trace2 exit() behavior out of trace2.c
      usage.c: add a non-fatal bug() function to go with BUG()
      parse-options.c: use new bug() API for optbug()
      parse-options.c: use optbug() instead of BUG() "opts" check
      receive-pack: use bug() and BUG_if_bug()
      cache-tree.c: use bug() and BUG_if_bug()
      run-command API: rename "env_array" to "env"
      run-command API users: use "env" not "env_array" in comments & names
      ls-tree: test for the regression in 9c4d58ff2c3
      run-command: add an "ungroup" option to run_process_parallel()
      remote.c: remove braces from one-statement "for"-loops
      remote.c: don't dereference NULL in freeing loop
      hook API: fix v2.36.0 regression: hooks should be connected to a TTY


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.36.0
@ 2022-04-18 16:27  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2022-04-18 16:27 UTC (permalink / raw)
  To: git; +Cc: git-packagers

The latest feature release Git v2.36.0 is now available at the
usual places.  It is comprised of 717 non-merge commits since
v2.35.0, contributed by 96 people, 26 of which are new faces [*].

This release contains the same fixes as the recent maintenance
releases to address CVE-2022-24765 as well.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.36.0'
tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.35.0 are as follows.
Welcome to the Git development community!

  Abhradeep Chakraborty, BRESSAT Jonathan, Chen Bojun, COGONI
  Guillaume, David Cantrell, Des Preston, Hongyi Zhao, Jason Yundt,
  Jayati Shrivastava, Jaydeep Das, Jaydeep P Das, Jose Lopes,
  Justin Donnelly, Kraymer, Liginity Lee, Matheus Felipe, Matheus
  Valadares, Maximilian Reichel, Michael McClimon, Nihal Jere,
  Pedro Martelletto, Robert Coup, Sean Allred, Shaoxuan Yuan,
  Shubham Mishra, and Waleed Khan.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alex Henrie,
  Atharva Raykar, Bagas Sanjaya, Beat Bolli, brian m. carlson,
  Carlo Marcelo Arenas Belón, Christian Couder, Daniel Hahler,
  Daniel Santos, Derrick Stolee, Elia Pinto, Elijah Newren,
  Emily Shaffer, Emir SARI, Eric Sunshine, Fabian Stelzer,
  Fangyi Zhou, Glen Choo, Greg Hurrell, Han-Wen Nienhuys, Jacob
  Keller, Jean-Noël Avila, Jeff Hostetler, Jeff King, Jerry
  Zhang, Jessica Clarke, Jiang Xin, Joel Holdsworth, Johannes
  Altmanninger, Johannes Schindelin, Johannes Sixt, John Cai,
  Jonathan Nieder, Jonathan Tan, Jordi Mas, Josh Steadmon, Junio
  C Hamano, Kevin Willford, Lessley Dennington, Marc Strapetz,
  Martin Ågren, Matt Cooper, Matthias Rüster, Michael J Gruber,
  Neeraj Singh, Patrick Steinhardt, Peter Krefting, Philip Oakley,
  Philippe Blain, Phillip Szelat, Phillip Wood, Ralf Thielow,
  Ramkumar Ramachandra, Randall S. Becker, René Scharfe, Shourya
  Shukla, SZEDER Gábor, Tao Klerks, Taylor Blau, Teng Long,
  Thomas Gummerer, Thomas Koutcher, Tilman Vogel, Todd Zullinger,
  Trần Ngọc Quân, Victoria Dye, Yi-Jyun Pan, and 依云.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git 2.36 Release Notes
======================

Updates since Git 2.35
----------------------

Backward compatibility warts

 * "git name-rev --stdin" has been deprecated and issues a warning
   when used; use "git name-rev --annotate-stdin" instead.

 * "git clone --filter=... --recurse-submodules" only makes the
   top-level a partial clone, while submodules are fully cloned.  This
   behaviour is changed to pass the same filter down to the submodules.

 * With the fixes for CVE-2022-24765 that are common with versions of
   Git 2.30.4, 2.31.3, 2.32.2, 2.33.3, 2.34.3, and 2.35.3, Git has
   been taught not to recognise repositories owned by other users, in
   order to avoid getting affected by their config files and hooks.
   You can list the path to the safe/trusted repositories that may be
   owned by others on a multi-valued configuration variable
   `safe.directory` to override this behaviour, or use '*' to declare
   that you trust anything.


Note to those who build from the source

 * Since Git 2.31, our source assumed that the compiler you use to
   build Git supports variadic macros, with an easy-to-use escape
   hatch to allow compilation without variadic macros with an request
   to report that you had to use the escape hatch to the list.
   Because we haven't heard from anybody who actually needed to use
   the escape hatch, it has been removed, making support of variadic
   macros a hard requirement.


UI, Workflows & Features

 * Assorted updates to "git cat-file", especially "-h".

 * The command line completion (in contrib/) learns to complete
   arguments to give to "git sparse-checkout" command.

 * "git log --remerge-diff" shows the difference from mechanical merge
   result and the result that is actually recorded in a merge commit.

 * "git log" and friends learned an option --exclude-first-parent-only
   to propagate UNINTERESTING bit down only along the first-parent
   chain, just like --first-parent option shows commits that lack the
   UNINTERESTING bit only along the first-parent chain.

 * The command line completion script (in contrib/) learned to
   complete all Git subcommands, including the ones that are normally
   hidden, when GIT_COMPLETION_SHOW_ALL_COMMANDS is used.

 * "git branch" learned the "--recurse-submodules" option.

 * A user can forget to make a script file executable before giving
   it to "git bisect run".  In such a case, all tests will exit with
   126 or 127 error codes, even on revisions that are marked as good.
   Try to recognize this situation and stop iteration early.

 * When "index-pack" dies due to incoming data exceeding the maximum
   allowed input size, include the value of the limit in the error
   message.

 * The error message given by "git switch HEAD~4" has been clarified
   to suggest the "--detach" option that is required.

 * In sparse-checkouts, files mis-marked as missing from the working tree
   could lead to later problems.  Such files were hard to discover, and
   harder to correct.  Automatically detecting and correcting the marking
   of such files has been added to avoid these problems.

 * "git cat-file" learns "--batch-command" mode, which is a more
   flexible interface than the existing "--batch" or "--batch-check"
   modes, to allow different kinds of inquiries made.

 * The level of verbose output from the ort backend during inner merge
   has been aligned to that of the recursive backend.

 * "git remote rename A B", depending on the number of remote-tracking
   refs involved, takes long time renaming them.  The command has been
   taught to show progress bar while making the user wait.

 * Bundle file format gets extended to allow a partial bundle,
   filtered by similar criteria you would give when making a
   partial/lazy clone.

 * A new built-in userdiff driver for kotlin has been added.

 * "git repack" learned a new configuration to disable triggering of
   age-old "update-server-info" command, which is rarely useful these
   days.

 * "git stash" does not allow subcommands it internally runs as its
   implementation detail, except for "git reset", to emit messages;
   now "git reset" part has also been squelched.

 * "git ls-tree" learns "--oid-only" option, similar to "--name-only",
   and more generalized "--format" option.

 * "git fetch --refetch" learned to fetch everything without telling
   the other side what we already have, which is useful when you
   cannot trust what you have in the local object store.

 * "git branch" gives hint when branch tracking cannot be established
   because fetch refspecs from multiple remote repositories overlap.

 * "git worktree list --porcelain" did not c-quote pathnames and lock
   reasons with unsafe bytes correctly, which is worked around by
   introducing NUL terminated output format with "-z".


Performance, Internal Implementation, Development Support etc.

 * "git apply" (ab)used the util pointer of the string-list to keep
   track of how each symbolic link needs to be handled, which has been
   simplified by using strset.

 * Fix a hand-rolled alloca() imitation that may have violated
   alignment requirement of data being sorted in compatibility
   implementation of qsort_s() and stable qsort().

 * Use the parse-options API in "git reflog" command.

 * The conditional inclusion mechanism of configuration files using
   "[includeIf <condition>]" learns to base its decision on the
   URL of the remote repository the repository interacts with.
   (merge 399b198489 jt/conditional-config-on-remote-url later to maint).

 * "git name-rev --stdin" does not behave like usual "--stdin" at
   all.  Start the process of renaming it to "--annotate-stdin".
   (merge a2585719b3 jc/name-rev-stdin later to maint).

 * "git update-index", "git checkout-index", and "git clean" are
   taught to work better with the sparse checkout feature.

 * Use an internal call to reset_head() helper function instead of
   spawning "git checkout" in "rebase", and update code paths that are
   involved in the change.

 * Messages "ort" merge backend prepares while dealing with conflicted
   paths were unnecessarily confusing since it did not differentiate
   inner merges and outer merges.

 * Small modernization of the rerere-train script (in contrib/).

 * Use designated initializers we started using in mid 2017 in more
   parts of the codebase that are relatively quiescent.

 * Improve failure case behaviour of xdiff library when memory
   allocation fails.

 * General clean-up in reftable implementation, including
   clarification of the API documentation, tightening the code to
   honor documented length limit, etc.

 * Remove the escape hatch we added when we introduced the weather
   balloon to use variadic macros unconditionally, to make it official
   that we now have a hard dependency on the feature.

 * Makefile refactoring with a bit of suffixes rule stripping to
   optimize the runtime overhead.

 * "git stash drop" is reimplemented as an internal call to
   reflog_delete() function, instead of invoking "git reflog delete"
   via run_command() API.

 * Count string_list items in size_t, not "unsigned int".

 * The single-key interactive operation used by "git add -p" has been
   made more robust.

 * Remove unneeded <meta http-equiv=content-type...> from gitweb
   output.

 * "git name-rev" learned to use the generation numbers when setting
   the lower bound of searching commits used to explain the revision,
   when available, instead of committer time.

 * Replace core.fsyncObjectFiles with two new configuration variables,
   core.fsync and core.fsyncMethod.

 * Updates to refs traditionally weren't fsync'ed, but we can
   configure using core.fsync variable to do so.

 * "git reflog" command now uses parse-options API to parse its
   command line options.


Fixes since v2.35
-----------------

 * "rebase" and "stash" in secondary worktrees are broken in
   Git 2.35.0, which has been corrected.

 * "git pull --rebase" ignored the rebase.autostash configuration
   variable when the remote history is a descendant of our history,
   which has been corrected.
   (merge 3013d98d7a pb/pull-rebase-autostash-fix later to maint).

 * "git update-index --refresh" has been taught to deal better with
   racy timestamps (just like "git status" already does).
   (merge 2ede073fd2 ms/update-index-racy later to maint).

 * Avoid tests that are run under GIT_TRACE2 set from failing
   unnecessarily.
   (merge 944d808e42 js/test-unset-trace2-parents later to maint).

 * The merge-ort misbehaved when merge.renameLimit configuration is
   set too low and failed to find all renames.
   (merge 9ae39fef7f en/merge-ort-restart-optim-fix later to maint).

 * We explain that revs come first before the pathspec among command
   line arguments, but did not spell out that dashed options come
   before other args, which has been corrected.
   (merge c11f95010c tl/doc-cli-options-first later to maint).

 * "git add -p" rewritten in C regressed hunk splitting in some cases,
   which has been corrected.
   (merge 7008ddc645 pw/add-p-hunk-split-fix later to maint).

 * "git fetch --negotiate-only" is an internal command used by "git
   push" to figure out which part of our history is missing from the
   other side.  It should never recurse into submodules even when
   fetch.recursesubmodules configuration variable is set, nor it
   should trigger "gc".  The code has been tightened up to ensure it
   only does common ancestry discovery and nothing else.
   (merge de4eaae63a gc/fetch-negotiate-only-early-return later to maint).

 * The code path that verifies signatures made with ssh were made to
   work better on a system with CRLF line endings.
   (merge caeef01ea7 fs/ssh-signing-crlf later to maint).

 * "git sparse-checkout init" failed to write into $GIT_DIR/info
   directory when the repository was created without one, which has
   been corrected to auto-create it.
   (merge 7f44842ac1 jt/sparse-checkout-leading-dir-fix later to maint).

 * Cloning from a repository that does not yet have any branches or
   tags but has other refs resulted in a "remote transport reported
   error", which has been corrected.
   (merge dccea605b6 jt/clone-not-quite-empty later to maint).

 * Mark in various places in the code that the sparse index and the
   split index features are mutually incompatible.
   (merge 451b66c533 js/sparse-vs-split-index later to maint).

 * Update the logic to compute alignment requirement for our mem-pool.
   (merge e38bcc66d8 jc/mem-pool-alignment later to maint).

 * Pick a better random number generator and use it when we prepare
   temporary filenames.
   (merge 47efda967c bc/csprng-mktemps later to maint).

 * Update the contributor-facing documents on proposed log messages.
   (merge cdba0295b0 jc/doc-log-messages later to maint).

 * When "git fetch --prune" failed to prune the refs it wanted to
   prune, the command issued error messages but exited with exit
   status 0, which has been corrected.
   (merge c9e04d905e tg/fetch-prune-exit-code-fix later to maint).

 * Problems identified by Coverity in the reftable code have been
   corrected.
   (merge 01033de49f hn/reftable-coverity-fixes later to maint).

 * A bug that made multi-pack bitmap and the object order out-of-sync,
   making the .midx data corrupt, has been fixed.
   (merge f8b60cf99b tb/midx-bitmap-corruption-fix later to maint).

 * The build procedure has been taught to notice older version of zlib
   and enable our replacement uncompress2() automatically.
   (merge 07564773c2 ab/auto-detect-zlib-compress2 later to maint).

 * Interaction between fetch.negotiationAlgorithm and
   feature.experimental configuration variables has been corrected.
   (merge 714edc620c en/fetch-negotiation-default-fix later to maint).

 * "git diff --diff-filter=aR" is now parsed correctly.
   (merge 75408ca949 js/diff-filter-negation-fix later to maint).

 * When "git subtree" wants to create a merge, it used "git merge" and
   let it be affected by end-user's "merge.ff" configuration, which
   has been corrected.
   (merge 9158a3564a tk/subtree-merge-not-ff-only later to maint).

 * Unlike "git apply", "git patch-id" did not handle patches with
   hunks that has only 1 line in either preimage or postimage, which
   has been corrected.
   (merge 757e75c81e jz/patch-id-hunk-header-parsing-fix later to maint).

 * "receive-pack" checks if it will do any ref updates (various
   conditions could reject a push) before received objects are taken
   out of the temporary directory used for quarantine purposes, so
   that a push that is known-to-fail will not leave crufts that a
   future "gc" needs to clean up.
   (merge 5407764069 cb/clear-quarantine-early-on-all-ref-update-errors later to maint).

 * When there is no object to write .bitmap file for, "git
   multi-pack-index" triggered an error, instead of just skipping,
   which has been corrected.
   (merge eb57277ba3 tb/midx-no-bitmap-for-no-objects later to maint).

 * "git cmd -h" outside a repository should error out cleanly for many
   commands, but instead it hit a BUG(), which has been corrected.
   (merge 87ad07d735 js/short-help-outside-repo-fix later to maint).

 * "working tree" and "per-worktree ref" were in glossary, but
   "worktree" itself wasn't, which has been corrected.
   (merge 2df5387ed0 jc/glossary-worktree later to maint).

 * L10n support for a few error messages.
   (merge 3d3c23b3a7 bs/forbid-i18n-of-protocol-token-in-fetch-pack later to maint).

 * Test modernization.
   (merge d4fe066e4b sy/t0001-use-path-is-helper later to maint).

 * "git log --graph --graph" used to leak a graph structure, and there
   was no way to countermand "--graph" that appear earlier on the
   command line.  A "--no-graph" option has been added and resource
   leakage has been plugged.

 * Error output given in response to an ambiguous object name has been
   improved.
   (merge 3a73c1dfaf ab/ambiguous-object-name later to maint).

 * "git sparse-checkout" wants to work with per-worktree configuration,
   but did not work well in a worktree attached to a bare repository.
   (merge 3ce1138272 ds/sparse-checkout-requires-per-worktree-config later to maint).

 * Setting core.untrackedCache to true failed to add the untracked
   cache extension to the index.

 * Workaround we have for versions of PCRE2 before their version 10.36
   were in effect only for their versions newer than 10.36 by mistake,
   which has been corrected.
   (merge 97169fc361 rs/pcre-invalid-utf8-fix-fix later to maint).

 * Document Taylor as a new member of Git PLC at SFC.  Welcome.
   (merge e8d56ca863 tb/coc-plc-update later to maint).

 * "git checkout -b branch/with/multi/level/name && git stash" only
   recorded the last level component of the branch name, which has
   been corrected.

 * Check the return value from parse_tree_indirect() to turn segfaults
   into calls to die().
   (merge 8d2eaf649a gc/parse-tree-indirect-errors later to maint).

 * Newer version of GPGSM changed its output in a backward
   incompatible way to break our code that parses its output.  It also
   added more processes our tests need to kill when cleaning up.
   Adjustments have been made to accommodate these changes.
   (merge b0b70d54c4 fs/gpgsm-update later to maint).

 * The untracked cache newly computed weren't written back to the
   on-disk index file when there is no other change to the index,
   which has been corrected.

 * "git config -h" did not describe the "--type" option correctly.
   (merge 5445124fad mf/fix-type-in-config-h later to maint).

 * The way generation number v2 in the commit-graph files are
   (not) handled has been corrected.
   (merge 6dbf4b8172 ds/commit-graph-gen-v2-fixes later to maint).

 * The method to trigger malloc check used in our tests no longer work
   with newer versions of glibc.
   (merge baedc59543 ep/test-malloc-check-with-glibc-2.34 later to maint).

 * When "git fetch --recurse-submodules" grabbed submodule commits
   that would be needed to recursively check out newly fetched commits
   in the superproject, it only paid attention to submodules that are
   in the current checkout of the superproject.  We now do so for all
   submodules that have been run "git submodule init" on.

 * "git rebase $base $non_branch_commit", when $base is an ancestor or
   the $non_branch_commit, modified the current branch, which has been
   corrected.

 * When "shallow" information is updated, we forgot to update the
   in-core equivalent, which has been corrected.

 * When creating a loose object file, we didn't report the exact
   filename of the file we failed to fsync, even though the
   information was readily available, which has been corrected.

 * "git am" can read from the standard input when no mailbox is given
   on the command line, but the end-user gets no indication when it
   happens, making Git appear stuck.
   (merge 7b20af6a06 jc/mailsplit-warn-on-tty later to maint).

 * "git mv" failed to refresh the cached stat information for the
   entry it moved.
   (merge b7f9130a06 vd/mv-refresh-stat later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge cfc5cf428b jc/find-header later to maint).
   (merge 40e7cfdd46 jh/p4-fix-use-of-process-error-exception later to maint).
   (merge 727e6ea350 jh/p4-spawning-external-commands-cleanup later to maint).
   (merge 0a6adc26e2 rs/grep-expr-cleanup later to maint).
   (merge 4ed7dfa713 po/readme-mention-contributor-hints later to maint).
   (merge 6046f7a91c en/plug-leaks-in-merge later to maint).
   (merge 8c591dbfce bc/clarify-eol-attr later to maint).
   (merge 518e15db74 rs/parse-options-lithelp-help later to maint).
   (merge cbac0076ef gh/doc-typos later to maint).
   (merge ce14de03db ab/no-errno-from-resolve-ref-unsafe later to maint).
   (merge 2826ffad8c rc/negotiate-only-typofix later to maint).
   (merge 0f03f04c5c en/sparse-checkout-leakfix later to maint).
   (merge 74f3390dde sy/diff-usage-typofix later to maint).
   (merge 45d0212a71 ll/doc-mktree-typofix later to maint).
   (merge e9b272e4c1 js/no-more-legacy-stash later to maint).
   (merge 6798b08e84 ab/do-not-hide-failures-in-git-dot-pm later to maint).
   (merge 9325285df4 po/doc-check-ignore-markup-fix later to maint).
   (merge cd26cd6c7c sy/modernize-t-lib-read-tree-m-3way later to maint).
   (merge d17294a05e ab/hash-object-leakfix later to maint).
   (merge b8403129d3 jd/t0015-modernize later to maint).
   (merge 332acc248d ds/mailmap later to maint).
   (merge 04bf052eef ab/grep-patterntype later to maint).
   (merge 6ee36364eb ab/diff-free-more later to maint).
   (merge 63a36017fe nj/read-tree-doc-reffix later to maint).
   (merge eed36fce38 sm/no-git-in-upstream-of-pipe-in-tests later to maint).
   (merge c614beb933 ep/t6423-modernize later to maint).
   (merge 57be9c6dee ab/reflog-prep-fix later to maint).
   (merge 5327d8982a js/in-place-reverse-in-sequencer later to maint).
   (merge 2e2c0be51e dp/worktree-repair-in-usage later to maint).
   (merge 6563706568 jc/coding-guidelines-decl-in-for-loop later to maint).

----------------------------------------------------------------

Changes since v2.35.0 are as follows:

Abhradeep Chakraborty (2):
      amend remaining usage strings according to style guide
      partial-clone: add a partial-clone test case

Adam Dinwoodie (2):
      configure.ac: fix HAVE_SYNC_FILE_RANGE definition
      t9902: split test to run on appropriate systems

Alex Henrie (3):
      log: fix memory leak if --graph is passed multiple times
      log: add a --no-graph option
      switch: mention the --detach option when dying due to lack of a branch

Atharva Raykar (5):
      submodule--helper: get remote names from any repository
      submodule--helper: refactor get_submodule_displaypath()
      submodule--helper: allow setting superprefix for init_submodule()
      submodule--helper: run update using child process struct
      submodule: move core cmd_update() logic to C

Bagas Sanjaya (3):
      fetch-pack: parameterize message containing 'ready' keyword
      l10n: po-id for 2.36 (round 1)
      l10n: po-id for 2.36 (round 2)

COGONI Guillaume (3):
      t/t3903-stash.sh: replace test [-d|-f] with test_path_is_*
      tests: allow testing if a path is truly a file or a directory
      tests: make the code more readable

Carlo Marcelo Arenas Belón (4):
      mingw: avoid fallback for {local,gm}time_r()
      git-compat-util: really support openssl as a source of entropy
      config.mak.dev: workaround gcc 12 bug affecting "pedantic" CI job
      config.mak.dev: alternative workaround to gcc 12 warning in http.c

Chen Bojun (1):
      receive-pack: purge temporary data if no command is ready to run

Daniel Santos (3):
      l10n: pt_PT: update Portuguese translation
      l10n: pt_PT: update TEAMS file
      l10n: pt_PT: update Portuguese translation

David Cantrell (1):
      completion: tab completion of filenames for 'git restore'

Derrick Stolee (47):
      Documentation: add extensions.worktreeConfig details
      worktree: create init_worktree_config()
      config: add repo_config_set_worktree_gently()
      sparse-checkout: set worktree-config correctly
      worktree: copy sparse-checkout patterns and config on add
      config: make git_configset_get_string_tmp() private
      mailmap: change primary address for Derrick Stolee
      dir: force untracked cache with core.untrackedCache
      worktree: combine two translatable messages
      worktree: extract copy_filtered_worktree_config()
      worktree: extract copy_sparse_checkout()
      worktree: extract checkout_worktree()
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      test-read-graph: include extra post-parse info
      t5318: extract helpers to lib-commit-graph.sh
      commit-graph: fix ordering bug in generation numbers
      commit-graph: start parsing generation v2 (again)
      commit-graph: fix generation number v2 overflow values
      commit-graph: declare bankruptcy on GDAT chunks
      index-pack: document and test the --promisor option
      list-objects-filter-options: create copy helper
      revision: put object filter into struct rev_info
      pack-objects: use rev.filter when possible
      pack-bitmap: drop filter in prepare_bitmap_walk()
      list-objects: consolidate traverse_commit_list[_filtered]
      MyFirstObjectWalk: update recommended usage
      bundle: parse filter capability
      rev-list: move --filter parsing into revision.c
      bundle: create filtered bundles
      bundle: unbundle promisor packs
      clone: fail gracefully when cloning filtered bundle
      maintenance: fix synopsis in documentation
      list-objects-filter: remove CL_ARG__FILTER
      pack-objects: move revs out of get_object_list()
      pack-objects: parse --filter directly into revs.filter
      bundle: move capabilities to end of 'verify'
      bundle: output hash information in 'verify'
      t7700: check post-condition in kept-pack test
      test-lib-functions: remove test_subcommand_inexact
      t0033: add tests for safe.directory
      setup: opt-out of check with safe.directory=*

Des Preston (1):
      worktree: include repair cmd in usage

Elia Pinto (8):
      test-lib.sh: Use GLIBC_TUNABLES instead of MALLOC_CHECK_ on glibc >= 2.34
      t6423-merge-rename-directories.sh: use the $(...) construct
      attr.c: delete duplicate include
      builtin/gc.c: delete duplicate include
      builtin/sparse-checkout.c: delete duplicate include
      builtin/stash.c: delete duplicate include
      t/helper/test-run-command.c: delete duplicate include
      attr.h: remove duplicate struct definition

Elijah Newren (33):
      t1011: add testcase demonstrating accidental loss of user modifications
      unpack-trees: fix accidental loss of user changes
      repo_read_index: clear SKIP_WORKTREE bit from files present in worktree
      Update documentation related to sparsity and the skip-worktree bit
      Accelerate clear_skip_worktree_from_present_files() by caching
      merge-ort: avoid assuming all renames detected
      merge-ort: fix memory leak in merge_ort_internal()
      merge: fix memory leaks in cmd_merge()
      sequencer, stash: fix running from worktree subdir
      sparse-checkout: fix a couple minor memory leaks
      repo-settings: fix checking for fetch.negotiationAlgorithm=default
      repo-settings: fix error handling for unknown values
      repo-settings: rename the traditional default fetch.negotiationAlgorithm
      show, log: provide a --remerge-diff capability
      log: clean unneeded objects during `log --remerge-diff`
      ll-merge: make callers responsible for showing warnings
      merge-ort: capture and print ll-merge warnings in our preferred fashion
      merge-ort: mark a few more conflict messages as omittable
      merge-ort: format messages slightly different for use in headers
      diff: add ability to insert additional headers for paths
      show, log: include conflict/warning messages in --remerge-diff headers
      merge-ort: mark conflict/warning messages from inner merges as omittable
      diff-merges: avoid history simplifications when diffing merges
      merge-ort: make informational messages from recursive merges clearer
      sparse-checkout: correct reapply's handling of options
      sparse-checkout: correctly set non-cone mode when expected
      sparse-checkout: pay attention to prefix for {set, add}
      sparse-checkout: error or warn when given individual files
      sparse-checkout: reject arguments in cone-mode that look like patterns
      merge-ort: fix small memory leak in detect_and_process_renames()
      merge-ort: fix small memory leak in unique_path()
      merge-ort: exclude messages from inner merges by default
      repo_read_index: add config to expect files outside sparse patterns

Emily Shaffer (14):
      hook: add 'run' subcommand
      gc: use hook library for pre-auto-gc hook
      am: convert {pre,post}-applypatch to use hook.h
      rebase: convert pre-rebase to use hook.h
      am: convert applypatch-msg to use hook.h
      merge: convert post-merge to use hook.h
      hooks: convert non-worktree 'post-checkout' hook to hook library
      hooks: convert worktree 'post-checkout' hook to hook library
      send-email: use 'git hook run' for 'sendemail-validate'
      git-p4: use 'git hook' to run hooks
      commit: convert {pre-commit,prepare-commit-msg} hook to hook.h
      read-cache: convert post-index-change to use hook.h
      receive-pack: convert push-to-checkout hook to hook.h
      run-command: remove old run_hook_{le,ve}() hook API

Emir SARI (2):
      l10n: tr: v2.36.0 round 1
      l10n: tr: v2.36.0 round 2

Fabian Stelzer (2):
      gpg-interface: trim CR from ssh-keygen
      gpg-interface/gpgsm: fix for v2.3

Fangyi Zhou (4):
      submodule-helper: fix usage string
      l10n: Update zh_CN repo link
      l10n: zh_CN v2.36.0 round 1
      l10n: zh_CN v2.36.0 round 2

Glen Choo (39):
      fetch: use goto cleanup in cmd_fetch()
      fetch: skip tasks related to fetching objects
      fetch --negotiate-only: do not update submodules
      branch: move --set-upstream-to behavior to dwim_and_setup_tracking()
      branch: make create_branch() always create a branch
      branch: add a dry_run parameter to create_branch()
      builtin/branch: consolidate action-picking logic in cmd_branch()
      branch: add --recurse-submodules option for branch creation
      branch.c: use 'goto cleanup' in setup_tracking() to fix memory leaks
      stash: strip "refs/heads/" with skip_prefix
      checkout, clone: die if tree cannot be parsed
      submodule--helper: remove update-module-mode
      submodule--helper: reorganize code for sh to C conversion
      submodule--helper run-update-procedure: remove --suboid
      submodule--helper run-update-procedure: learn --remote
      submodule--helper update-clone: learn --init
      submodule--helper: remove ensure-core-worktree
      submodule update: add tests for --filter
      submodule--helper update-clone: check for --filter and --init
      t5526: introduce test helper to assert on fetches
      t5526: stop asserting on stderr literally
      t5526: create superproject commits with test helper
      submodule: make static functions read submodules from commits
      submodule: inline submodule_commits() into caller
      submodule: store new submodule commits oid_array in a struct
      submodule: extract get_fetch_task()
      submodule: move logic into fetch_task_create()
      submodule update: use die_message()
      submodule--helper: teach update_data more options
      submodule--helper: reduce logic in run_update_procedure()
      submodule--helper: remove forward declaration
      fetch: fetch unpopulated, changed submodules
      submodule: fix latent check_has_commit() bug
      branch: support more tracking modes when recursing
      branch: give submodule updating advice before exit
      branch --set-upstream-to: be consistent when advising
      branch: remove negative exit code
      branch: rework comments for future developers
      branch.c: simplify advice-and-die sequence

Greg Hurrell (2):
      Documentation/config/pgp.txt: replace stray <TAB> character with <SPC>
      Documentation/config/pgp.txt: add missing apostrophe

Han-Wen Nienhuys (27):
      reftable: fix OOB stack write in print functions
      reftable: fix resource leak in block.c error path
      reftable: fix resource leak blocksource.c
      reftable: check reftable_stack_auto_compact() return value
      reftable: ignore remove() return value in stack_test.c
      reftable: fix resource warning
      reftable: all xxx_free() functions accept NULL arguments
      reftable: order unittests by complexity
      reftable: drop stray printf in readwrite_test
      reftable: handle null refnames in reftable_ref_record_equal
      reftable: make reftable-record.h function signatures const correct
      reftable: implement record equality generically
      reftable: remove outdated file reftable.c
      reftable: make reftable_record a tagged union
      reftable: add print functions to the record types
      t1405: explictly delete reflogs for reftable
      t1405: mark test that checks existence as REFFILES
      t5312: prepare for reftable
      t1410: use test-tool ref-store to inspect reflogs
      t1410: mark bufsize boundary test as REFFILES
      Documentation: object_id_len goes up to 31
      reftable: reject 0 object_id_len
      reftable: add a test that verifies that writing empty keys fails
      reftable: avoid writing empty keys at the block layer
      reftable: ensure that obj_id_len is >= 2 on writing
      reftable: add test for length of disambiguating prefix
      reftable: rename writer_stats to reftable_writer_stats

Jacob Keller (1):
      name-rev: use generation numbers if available

Jason Yundt (2):
      comment: fix typo
      gitweb: remove invalid http-equiv="content-type"

Jayati Shrivastava (1):
      sequencer: use reverse_commit_list() helper

Jaydeep Das (1):
      t/t0015-hash.sh: remove unnecessary '\' at line end

Jaydeep P Das (1):
      userdiff: add builtin diff driver for kotlin language.

Jean-Noël Avila (7):
      i18n: factorize more 'incompatible options' messages
      i18n: factorize "invalid value" messages
      i18n: remove from i18n strings that do not hold translatable parts
      i18n: fix some misformated placeholders in command synopsis
      l10n: fr: v2.36 round 1
      i18n: fix some badly formatted i18n strings
      l10n: fr: v2.36 round 2

Jeff Hostetler (30):
      fsmonitor: enhance existing comments, clarify trivial response handling
      fsmonitor-ipc: create client routines for git-fsmonitor--daemon
      fsmonitor: config settings are repository-specific
      fsmonitor: use IPC to query the builtin FSMonitor daemon
      fsmonitor: document builtin fsmonitor
      fsmonitor--daemon: add a built-in fsmonitor daemon
      fsmonitor--daemon: implement 'stop' and 'status' commands
      compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
      compat/fsmonitor/fsm-listen-darwin: stub in backend for Darwin
      fsmonitor--daemon: implement 'run' command
      fsmonitor--daemon: implement 'start' command
      fsmonitor--daemon: add pathname classification
      fsmonitor--daemon: define token-ids
      fsmonitor--daemon: create token-based changed path cache
      compat/fsmonitor/fsm-listen-win32: implement FSMonitor backend on Windows
      compat/fsmonitor/fsm-listen-darwin: add MacOS header files for FSEvent
      compat/fsmonitor/fsm-listen-darwin: implement FSEvent listener on MacOS
      fsmonitor--daemon: implement handle_client callback
      help: include fsmonitor--daemon feature flag in version info
      t/helper/fsmonitor-client: create IPC client to talk to FSMonitor Daemon
      t7527: create test for fsmonitor--daemon
      t/perf: avoid copying builtin fsmonitor files into test repo
      t/helper/test-chmtime: skip directories on Windows
      t/perf/p7519: fix coding style
      t/perf/p7519: speed up test on Windows
      t/perf/p7519: add fsmonitor--daemon test cases
      fsmonitor--daemon: periodically truncate list of modified files
      fsmonitor--daemon: use a cookie file to sync with file system
      fsmonitor: force update index after large responses
      t7527: test status with untracked-cache and fsmonitor--daemon

Jerry Zhang (3):
      git-rev-list: add --exclude-first-parent-only flag
      patch-id: fix antipatterns in tests
      patch-id: fix scan_hunk_header on diffs with 1 line of before/after

Jessica Clarke (1):
      mem-pool: don't assume uintmax_t is aligned enough for all types

Jiang Xin (2):
      l10n: git.pot: v2.36.0 round 1 (192 new, 106 removed)
      l10n: git.pot: v2.36.0 round 2 (4 new, 3 removed)

Joel Holdsworth (4):
      git-p4: don't select shell mode using the type of the command argument
      git-p4: pass command arguments as lists instead of using shell
      git-p4: don't print shell commands as python lists
      git-p4: fix instantiation of CalledProcessError

Johannes Schindelin (24):
      sparse-index: sparse index is disallowed when split index is active
      t1091: disable split index
      split-index: it really is incompatible with the sparse index
      git-sh-setup: remove remnant bits referring to `git-legacy-stash`
      add: remove support for `git-legacy-stash`
      stash: remove documentation for `stash.useBuiltin`
      stash: stop warning about the obsolete `stash.useBuiltin` config setting
      docs(diff): lose incorrect claim about `diff-files --diff-filter=A`
      diff.c: move the diff filter bits definitions up a bit
      diff-filter: be more careful when looking for negative bits
      scalar: accept -C and -c options before the subcommand
      checkout/fetch/pull/pack-objects: allow `-h` outside a repository
      t0012: verify that built-ins handle `-h` even without gitdir
      GIT-VERSION-GEN: bump to v2.33.1
      Add a function to determine whether a path is owned by the current user
      setup_git_directory(): add an owner check for the top-level directory
      cocci: allow padding with `strbuf_addf()`
      Fix `GIT_CEILING_DIRECTORIES` with `C:\` and the likes
      Git 2.30.3
      Git 2.31.2
      Git 2.32.1
      Git 2.33.2
      Git 2.34.2
      Git 2.35.2

John Cai (15):
      receive-pack.c: consolidate find header logic
      name-rev: deprecate --stdin in favor of --annotate-stdin
      name-rev.c: use strbuf_getline instead of limited size buffer
      builtin/reflog.c: use parse-options api for expire, delete subcommands
      name-rev: replace --stdin with --annotate-stdin in synopsis
      cat-file: rename cmdmode to transform_mode
      cat-file: introduce batch_mode enum to replace print_contents
      cat-file: add remove_timestamp helper
      cat-file: add --batch-command mode
      stash: add tests to ensure reflog --rewrite --updatref behavior
      reflog: libify delete reflog function and helpers
      stash: call reflog_delete() in reflog.c
      cat-file: skip expanding default format
      rebase: use test_commit helper in setup
      rebase: set REF_HEAD_DETACH in checkout_up_to_date()

Jonathan Tan (6):
      config: make git_config_include() static
      config: include file if remote URL matches a glob
      sparse-checkout: create leading directory
      clone: support unusual remote ref configurations
      ls-files: support --recurse-submodules --stage
      shallow: reset commit grafts when shallow is reset

Jordi Mas (1):
      l10n: Update Catalan translation

Josh Steadmon (3):
      test-lib: unset trace2 parent envvars
      clone, submodule: pass partial clone filters to submodules
      ls-tree: `-l` should not imply recursive listing

Junio C Hamano (40):
      compat/qsort_s.c: avoid using potentially unaligned access
      fetch: help translators by reusing the same message template
      Start post 2.35 cycle
      SubmittingPatches: write problem statement in the log in the present tense
      CodingGuidelines: hint why we value clearly written log messages
      SubmittingPatches: explain why we care about log messages
      Git 2.35.1
      Name the next one 2.36 to prepare for 2.35.1
      The first batch
      The second batch for 2.36
      glossary: describe "worktree"
      The third batch
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      rerere-train: two fixes to the use of "git show -s"
      am/apply: warn if we end up reading patches from terminal
      The ninth batch
      The tenth batch
      The eleventh batch
      The twelfth batch
      The thirteenth batch
      The 14th batch
      reset: show --no-refresh in the short-help
      The 15th batch
      The 16th batch
      The 17th batch
      CodingGuidelines: give deadline for "for (int i = 0; ..."
      Git 2.36-rc0
      Git 2.36-rc1
      Git 2.36-rc2
      Git 2.30.4
      Revert "Merge branch 'ps/avoid-unnecessary-hook-invocation-with-packed-refs'"
      Revert "fetch: increase test coverage of fetches"
      RelNotes: clarify "bisect run unexecutable" tweak
      RelNotes: mention safe.directory
      RelNotes: revert the description on the reverted topics
      Git 2.36

Justin Donnelly (4):
      git-prompt: rename `upstream` to `upstream_type`
      git-prompt: make upstream state indicator location consistent
      git-prompt: make long upstream state indicator consistent
      git-prompt: put upstream comments together

Lessley Dennington (3):
      completion: address sparse-checkout issues
      completion: improve sparse-checkout cone mode directory completion
      completion: handle unusual characters for sparse-checkout

Liginity Lee (1):
      fix typo in git-mktree.txt

Marc Strapetz (4):
      test-lib: introduce API for verifying file mtime
      t7508: fix bogus mtime verification
      t7508: add tests capturing racy timestamp handling
      update-index: refresh should rewrite index in case of racy timestamps

Martin Ågren (1):
      git-ls-tree.txt: fix the name of "%(objectsize:padded)"

Matheus Felipe (1):
      config: correct "--type" option in "git config -h" output

Matheus Valadares (1):
      setup: fix safe.directory key not being checked

Matt Cooper (1):
      index-pack: clarify the breached limit

Matthias Rüster (1):
      l10n: de.po: Update German translation

Michael J Gruber (2):
      test-lib: declare local variables as local
      tests: demonstrate "show --word-diff --color-moved" regression

Neeraj Singh (10):
      wrapper: make inclusion of Windows csprng header tightly scoped
      core.fsyncmethod: add writeout-only mode
      core.fsync: introduce granular fsync control infrastructure
      core.fsync: add configuration parsing
      core.fsync: new option to harden the index
      core.fsync: documentation and user-friendly aggregate options
      core.fsync: fix incorrect expression for default configuration
      trace2: add stats for fsync operations
      core.fsyncmethod: correctly camel-case warning message
      object-file: pass filename to fsync_or_die

Nihal Jere (1):
      Documentation: git-read-tree: separate links using commas

Patrick Steinhardt (24):
      refs: extract packed_refs_delete_refs() to allow control of transaction
      refs: allow passing flags when beginning transactions
      refs: allow skipping the reference-transaction hook
      refs: demonstrate excessive execution of the reference-transaction hook
      refs: do not execute reference-transaction hook on packing refs
      refs: skip hooks when deleting uncovered packed refs
      fetch-pack: use commit-graph when computing cutoff
      fetch: skip computing output width when not printing anything
      fetch: increase test coverage of fetches
      fetch: backfill tags before setting upstream
      fetch: control lifecycle of FETCH_HEAD in a single place
      fetch: report errors when backfilling tags fails
      refs: add interface to iterate over queued transactional updates
      fetch: make `--atomic` flag cover backfilling of tags
      fetch: make `--atomic` flag cover pruning of refs
      upload-pack: look up "want" lines via commit-graph
      fetch: avoid lookup of commits when not appending to FETCH_HEAD
      refs: add ability for backends to special-case reading of symbolic refs
      remote: read symbolic refs via `refs_read_symbolic_ref()`
      refs/files-backend: optimize reading of symbolic refs
      t5503: simplify setup of test which exercises failure of backfill
      repack: refactor to avoid double-negation of update-server-info
      repack: add config to skip updating server info
      core.fsync: new option to harden references

Peter Krefting (1):
      l10n: sv.po: Update Swedish translation (5282t0f0u)

Philip Oakley (2):
      README.md: add CodingGuidelines and a link for Translators
      doc: check-ignore: code-quote an exclamation mark

Philippe Blain (1):
      pull --rebase: honor rebase.autostash when fast-forwarding

Phillip Wood (29):
      t3701: clean up hunk splitting tests
      builtin add -p: fix hunk splitting
      rebase: factor out checkout for up to date branch
      t5403: refactor rebase post-checkout hook tests
      rebase: pass correct arguments to post-checkout hook
      rebase: do not remove untracked files on checkout
      rebase --apply: don't run post-checkout hook if there is an error
      reset_head(): remove action parameter
      reset_head(): factor out ref updates
      reset_head(): make default_reflog_action optional
      create_autostash(): remove unneeded parameter
      rebase: cleanup reset_head() calls
      reset_head(): take struct rebase_head_opts
      rebase --apply: fix reflog
      rebase --apply: set ORIG_HEAD correctly
      rebase -m: don't fork git checkout
      xdiff: fix a memory leak
      xdiff: handle allocation failure in patience diff
      xdiff: refactor a function
      xdiff: handle allocation failure when merging
      terminal: always reset terminal when reading without echo
      terminal: pop signal handler when terminal is restored
      terminal: set VMIN and VTIME in non-canonical mode
      add -p: disable stdin buffering when interactive.singlekey is set
      terminal: use flags for save_term()
      terminal: don't assume stdin is /dev/tty
      terminal: work around macos poll() bug
      terminal: restore settings on SIGTSTP
      worktree: add -z option for list subcommand

René Scharfe (10):
      grep: use grep_or_expr() in compile_pattern_or()
      grep: use grep_not_expr() in compile_pattern_not()
      apply: use strsets to track symlinks
      stable-qsort: avoid using potentially unaligned access
      bisect--helper: report actual bisect_state() argument on error
      bisect--helper: release strbuf and strvec on run error
      bisect: document run behavior with exit codes 126 and 127
      bisect--helper: double-check run command on exit code 126 and 127
      parse-options: document bracketing of argh
      grep: fix triggering PCRE2_NO_START_OPTIMIZE workaround

Robert Coup (8):
      fetch: fix negotiate-only error message
      fetch-negotiator: add specific noop initializer
      fetch-pack: add refetch
      builtin/fetch-pack: add --refetch option
      fetch: add --refetch option
      t5615-partial-clone: add test for fetch --refetch
      fetch: after refetch, encourage auto gc repacking
      docs: mention --refetch fetch option

SZEDER Gábor (1):
      reflog: fix 'show' subcommand's argv

Shaoxuan Yuan (4):
      builtin/diff.c: fix "git-diff" usage string typo
      t/lib-read-tree-m-3way: modernize style
      t/lib-read-tree-m-3way: indent with tabs
      t0001: replace "test [-d|-f]" with test_path_is_* functions

Shubham Mishra (3):
      t0003: avoid pipes with Git on LHS
      t0001-t0028: avoid pipes with Git on LHS
      t0030-t0050: avoid pipes with Git on LHS

Tao Klerks (6):
      t7519: avoid file to index mtime race for untracked cache
      t7519: populate untracked cache before test
      untracked-cache: write index when populating empty untracked cache
      t/helper/test-chmtime: update mingw to support chmtime on directories
      t7063: mtime-mangling instead of delays in untracked cache testing
      tracking branches: add advice to ambiguous refspec error

Taylor Blau (15):
      grep: extract grep_binexp() from grep_or_expr()
      grep: use grep_and_expr() in compile_pattern_and()
      t5326: demonstrate bitmap corruption after permutation
      midx.c: make changing the preferred pack safe
      pack-revindex.c: instrument loading on-disk reverse index
      t5326: drop unnecessary setup
      t5326: extract `test_rev_exists`
      t5326: move tests to t/lib-bitmap.sh
      t/lib-bitmap.sh: parameterize tests over reverse index source
      midx: read `RIDX` chunk when present
      pack-bitmap.c: gracefully fallback after opening pack/MIDX
      midx: prevent writing a .bitmap without any objects
      CODE_OF_CONDUCT.md: update PLC members list
      builtin/remote.c: parse options in 'rename'
      builtin/remote.c: show progress when renaming remote references

Teng Long (6):
      git-cli.txt: clarify "options first and then args"
      ls-tree: rename "retval" to "recurse" in "show_tree()"
      ls-tree: simplify nesting if/else logic in "show_tree()"
      ls-tree: fix "--name-only" and "--long" combined use bug
      ls-tree: slightly refactor `show_tree()`
      ls-tree: support --object-only option for "git-ls-tree"

Thomas Gummerer (1):
      fetch --prune: exit with error if pruning fails

Thomas Koutcher (1):
      subtree: force merge commit

Todd Zullinger (3):
      t/lib-gpg: reload gpg components after updating trustlist
      t/lib-gpg: kill all gpg components, not just gpg-agent
      doc: replace "--" with {litdd} in credential-cache/fsmonitor

Trần Ngọc Quân (1):
      l10n: vi(5285t): v2.36.0 round 2

Victoria Dye (30):
      reset: fix validation in sparse index test
      reset: reorder wildcard pathspec conditions
      clean: integrate with sparse index
      checkout-index: expand sparse checkout compatibility tests
      checkout-index: add --ignore-skip-worktree-bits option
      checkout-index: integrate with sparse index
      update-index: add tests for sparse-checkout compatibility
      update-index: integrate with sparse index
      update-index: reduce scope of index expansion in do_reupdate
      sparse-index: prevent repo root from becoming sparse
      status: fix nested sparse directory diff in sparse index
      read-tree: explicitly disallow prefixes with a leading '/'
      read-tree: expand sparse checkout test coverage
      read-tree: integrate with sparse index
      read-tree: narrow scope of index expansion for '--prefix'
      read-tree: make two-way merge sparse-aware
      read-tree: make three-way merge sparse-aware
      reset: revise index refresh advice
      reset: introduce --[no-]refresh option to --mixed
      reset: replace '--quiet' with '--no-refresh' in performance advice
      reset: suppress '--no-refresh' advice if logging is silenced
      stash: make internal resets quiet and refresh index
      t1092: add sparse directory before cone in test repo
      unpack-trees: increment cache_bottom for sparse directories
      Revert "unpack-trees: improve performance of next_cache_entry"
      reset: do not make '--quiet' disable index refresh
      reset: remove 'reset.quiet' config option
      reset: remove 'reset.refresh' config option
      mv: refresh stat info for moved entry
      contrib/scalar: fix 'all' target in Makefile

Yi-Jyun Pan (1):
      l10n: zh_TW: v2.36.0 round 2

brian m. carlson (6):
      t0027: add tests for eol without text in .gitattributes
      docs: correct documentation about eol attribute
      wrapper: add a helper to generate numbers from a CSPRNG
      wrapper: use a CSPRNG to generate random file names
      doc: clarify interaction between 'eol' and text=auto
      block-sha1: remove use of obsolete x86 assembly

Ævar Arnfjörð Bjarmason (186):
      cat-file tests: test bad usage
      cat-file tests: test messaging on bad objects/paths
      parse-options API: add a usage_msg_optf()
      cat-file docs: fix SYNOPSIS and "-h" output
      cat-file: move "usage" variable to cmd_cat_file()
      cat-file: make --batch-all-objects a CMDMODE
      cat-file: fix remaining usage bugs
      cat-file: correct and improve usage information
      object-name.c: don't have GET_OID_ONLY_TO_DIE imply *_QUIETLY
      cat-file: use GET_OID_ONLY_TO_DIE in --(textconv|filters)
      hook API: add a run_hooks() wrapper
      hook API: add a run_hooks_l() wrapper
      git hook run: add an --ignore-missing flag
      cat-file: don't whitespace-pad "(...)" in SYNOPSIS and usage output
      cat-file: s/_/-/ in typo'd usage_msg_optf() message
      compat: auto-detect if zlib has uncompress2()
      sequencer: don't use die_errno() on refs_resolve_ref_unsafe() failure
      refs API: remove "failure_errno" from refs_resolve_ref_unsafe()
      object-name tests: add tests for ambiguous object blind spots
      object-name: explicitly handle OBJ_BAD in show_ambiguous_object()
      object-name: explicitly handle bad tags in show_ambiguous_object()
      object-name: make ambiguous object output translatable
      object-name: show date for ambiguous tag objects
      object-name: iterate ambiguous objects before showing header
      object-name: re-use "struct strbuf" in show_ambiguous_object()
      perl Git.pm: don't ignore signalled failure in _cmd_close()
      completion tests: re-source git-completion.bash in a subshell
      completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS
      leak tests: fix a memory leak in "test-progress" helper
      progress.c test helper: add missing braces
      progress.c tests: make start/stop commands on stdin
      progress.c tests: test some invalid usage
      progress.h: format and be consistent with progress.c naming
      progress.c: use dereferenced "progress" variable, not "(*p_progress)"
      progress.c: refactor stop_progress{,_msg}() to use helpers
      progress API: unify stop_progress{,_msg}(), fix trace2 bug
      pack-bitmap-write.c: don't return without stop_progress()
      t0051: use "skip_all" under !MINGW in single-test file
      hash-object: fix a trivial leak in --path
      ls-remote & transport API: release "struct transport_ls_refs_options"
      grep.h: remove unused "regex_t regexp" from grep_opt
      log tests: check if grep_config() is called by "log"-like cmds
      grep tests: create a helper function for "BRE" or "ERE"
      grep tests: add missing "grep.patternType" config tests
      built-ins: trust the "prefix" from run_builtin()
      grep.c: don't pass along NULL callback value
      grep API: call grep_config() after grep_init()
      grep.h: make "grep_opt.pattern_type_option" use its enum
      grep.c: do "if (bool && memchr())" not "if (memchr() && bool)"
      grep: simplify config parsing and option parsing
      cache.h: remove always unused show_date_human() declaration
      date API: create a date.h, split from cache.h
      date API: provide and use a DATE_MODE_INIT
      date API: add basic API docs
      date API: add and use a date_mode_release()
      diff.[ch]: have diff_free() call clear_pathspec(opts.pathspec)
      diff.[ch]: have diff_free() free options->parseopts
      hook tests: test for exact "pre-push" hook input
      hook tests: use a modern style for "pre-push" tests
      git-compat-util.h: clarify GCC v.s. C99-specific in comment
      C99: remove hardcoded-out !HAVE_VARIADIC_MACROS code
      help doc: add missing "]" to "[-a|--all]"
      help.c: use puts() instead of printf{,_ln}() for consistency
      help tests: test "git" and "git help [-a|-g] spacing
      help.c: split up list_all_cmds_help() function
      help: note the option name on option incompatibility
      help: correct usage & behavior of "git help --all"
      help: error if [-a|-g|-c] and [-i|-m|-w] are combined
      help: add --no-[external-commands|aliases] for use with --all
      help: don't print "\n" before single-section output
      imap-send.c: use designated initializers for "struct imap_server_conf"
      trace2: use designated initializers for "struct tr2_tgt"
      trace2: use designated initializers for "struct tr2_dst"
      object-file: use designated initializers for "struct git_hash_algo"
      archive-*.c: use designated initializers for "struct archiver"
      userdiff.c: use designated initializers for "struct userdiff_driver"
      convert.c: use designated initializers for "struct stream_filter*"
      refspec.c: use designated initializers for "struct refspec_item"
      fast-import.c: use designated initializers for "partial" struct assignments
      object-file.c: split up declaration of unrelated variables
      object-file API: return "void", not "int" from hash_object_file()
      object-file API: add a format_object_header() function
      object-file API: have write_object_file() take "enum object_type"
      object API: correct "buf" v.s. "map" mismatch in *.c and *.h
      object API docs: move check_object_signature() docs to cache.h
      object API users + docs: check <0, not !0 with check_object_signature()
      object-file API: split up and simplify check_object_signature()
      object API: rename hash_object_file_literally() to write_*()
      object-file API: have hash_object_file() take "enum object_type"
      object-file.c: add a literal version of write_object_file_prepare()
      object-file API: pass an enum to read_object_with_reference()
      test-lib: add GIT_SAN_OPTIONS, inherit [AL]SAN_OPTIONS
      test-lib: correct and assert TEST_DIRECTORY overriding
      test-lib: make $GIT_BUILD_DIR an absolute path
      test-lib: add "fast_unwind_on_malloc=0" to LSAN_OPTIONS
      scalar Makefile: use "The default target of..." pattern
      Makefiles: add "shared.mak", move ".DELETE_ON_ERROR" to it
      Makefile: disable GNU make built-in wildcard rules
      Makefile: define $(LIB_H) in terms of $(FIND_SOURCE_FILES)
      Makefile: move ".SUFFIXES" rule to shared.mak
      Makefile: move $(comma), $(empty) and $(space) to shared.mak
      Makefile: add "$(QUIET)" boilerplate to shared.mak
      Makefiles: add and use wildcard "mkdir -p" template
      log tests: fix "abort tests early" regression in ff37a60c369
      index-pack: fix memory leaks
      merge-base: free() allocated "struct commit **" list
      diff.c: free "buf" in diff_words_flush()
      urlmatch.c: add and use a *_release() function
      remote-curl.c: free memory in cmd_main()
      bundle: call strvec_clear() on allocated strvec
      transport: stop needlessly copying bundle header references
      submodule--helper: fix trivial leak in module_add()
      commit-graph: fix memory leak in misused string_list API
      commit-graph: stop fill_oids_from_packs() progress on error and free()
      lockfile API users: simplify and don't leak "path"
      range-diff: plug memory leak in common invocation
      range-diff: plug memory leak in read_patches()
      repository.c: free the "path cache" in repo_clear()
      submodule tests: test for init and update failure output
      submodule--helper: don't use bitfield indirection for parse_options()
      gettext API users: don't explicitly cast ngettext()'s "n"
      string-list API: change "nr" and "alloc" to "size_t"
      merge: don't run post-hook logic on --no-verify
      hooks: fix an obscure TOCTOU "did we just run a hook?" race
      tests: change some 'test $(git) = "x"' to test_cmp
      tests: use "test_stdout_line_count", not "test $(git [...] | wc -l)"
      read-tree tests: check "diff-files" exit code on failure
      diff tests: don't ignore "git diff" exit code
      diff tests: don't ignore "git diff" exit code in "read" loop
      apply tests: use "test_must_fail" instead of ad-hoc pattern
      merge tests: use "test_must_fail" instead of ad-hoc pattern
      rev-parse tests: don't ignore "git reflog" exit code
      notes tests: don't ignore "git" exit code
      diff tests: don't ignore "git rev-list" exit code
      rev-list tests: don't hide abort() in "test_expect_failure"
      gettext tests: don't ignore "test-tool regex" exit code
      apply tests: don't ignore "git ls-files" exit code, drop sub-shell
      checkout tests: don't ignore "git <cmd>" exit code
      rev-list simplify tests: don't ignore "git" exit code
      list-objects: handle NULL function pointers
      reflog: don't be noisy on empty reflogs
      builtin/submodule--helper.c: rename option struct to "opt"
      test-lib-functions: add and use a "test_hook" wrapper
      hook tests: turn exit code assertions into a loop
      http tests: don't rely on "hook/post-update.sample"
      tests: assume the hooks are disabled by default
      bugreport tests: tighten up "git bugreport -s hooks" test
      fetch+push tests: use "test_hook" and "test_when_finished" pattern
      gc + p4 tests: use "test_hook", remove sub-shells
      tests: change "cat && chmod +x" to use "test_hook"
      tests: change "mkdir -p && write_script" to use "test_hook"
      tests: use "test_hook" for misc "mkdir -p" and "chmod" cases
      diff.c: fix a double-free regression in a18d66cefb
      refs: use designated initializers for "struct ref_storage_be"
      refs: use designated initializers for "struct ref_iterator_vtable"
      misc *.c: use designated initializers for struct assignments
      packed-backend: remove stub BUG(...) functions
      refs debug: add a wrapper for "read_symbolic_ref"
      tests: extend "test_hook" for "rm" and "chmod -x", convert "$HOOK"
      proc-receive hook tests: use "test_hook" instead of "write_script"
      http tests: use "test_hook" for "smart" and "dumb" http tests
      reflog.c: indent argument lists
      reflog: refactor cmd_reflog() to "if" branches
      reflog tests: add missing "git reflog exists" tests
      reflog: move "usage" variables and use macros
      git reflog [expire|delete]: make -h output consistent with SYNOPSIS
      reflog exists: use parse_options() API
      Makefile: use ' ', not non-existing $(wspfx_SQ)
      ls-tree tests: add tests for --name-status
      ls-tree: remove commented-out code
      ls-tree: add missing braces to "else" arms
      ls-tree: use "enum object_type", not {blob,tree,commit}_type
      ls-tree: use "size_t", not "int" for "struct strbuf"'s "len"
      ls-tree: introduce struct "show_tree_data"
      ls-tree: introduce "--format" option
      ls-tree: detect and error on --name-only --name-status
      ls-tree: split up "fast path" callbacks
      hooks: fix "invoked hook" regression in a8cc5943338
      reflog: convert to parse_options() API
      reflog [show]: display sensible -h output
      test-lib: have --immediate emit valid TAP on failure
      pack-objects: lazily set up "struct rev_info", don't leak
      reftable: make assignments portable to AIX xlc v12.01
      Documentation/Makefile: fix "make info" regression in dad9cd7d518
      Documentation: add --batch-command to cat-file synopsis
      ls-tree doc: document interaction with submodules


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.36.0-rc2
@ 2022-04-12 17:03  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2022-04-12 17:03 UTC (permalink / raw)
  To: git; +Cc: git-packagers

A release candidate Git v2.36.0-rc2 is now available for testing at
the usual places.  It is comprised of 673 non-merge commits since
v2.35.2, contributed by 85 people, 25 of which are new faces [*].

It is a day earlier than scheduled; it contains the same fix for
CVE-2022-24765 in the maintenance releases released today.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.36.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.35.2 are as follows.
Welcome to the Git development community!

  Abhradeep Chakraborty, BRESSAT Jonathan, Chen Bojun,
  COGONI Guillaume, David Cantrell, Des Preston, Hongyi Zhao,
  Jason Yundt, Jayati Shrivastava, Jaydeep Das, Jaydeep P Das,
  Jose Lopes, Justin Donnelly, Kraymer, Liginity Lee, Matheus
  Felipe, Maximilian Reichel, Michael McClimon, Nihal Jere,
  Pedro Martelletto, Robert Coup, Sean Allred, Shaoxuan Yuan,
  Shubham Mishra, and Waleed Khan.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alex Henrie,
  Atharva Raykar, Bagas Sanjaya, Beat Bolli, brian m. carlson,
  Carlo Marcelo Arenas Belón, Christian Couder, Daniel Hahler,
  Derrick Stolee, Elia Pinto, Elijah Newren, Emily Shaffer,
  Eric Sunshine, Fabian Stelzer, Fangyi Zhou, Glen Choo, Greg
  Hurrell, Han-Wen Nienhuys, Jacob Keller, Jean-Noël Avila, Jeff
  Hostetler, Jeff King, Jerry Zhang, Jessica Clarke, Jiang Xin,
  Joel Holdsworth, Johannes Altmanninger, Johannes Schindelin,
  Johannes Sixt, John Cai, Jonathan Nieder, Jonathan Tan, Josh
  Steadmon, Junio C Hamano, Kevin Willford, Lessley Dennington,
  Marc Strapetz, Martin Ågren, Matt Cooper, Michael J Gruber,
  Neeraj Singh, Patrick Steinhardt, Philip Oakley, Philippe Blain,
  Phillip Wood, Ramkumar Ramachandra, Randall S. Becker, René
  Scharfe, Shourya Shukla, SZEDER Gábor, Tao Klerks, Taylor Blau,
  Teng Long, Thomas Gummerer, Thomas Koutcher, Tilman Vogel,
  Todd Zullinger, and Victoria Dye.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git 2.36 Release Notes (draft)
==============================

Updates since Git 2.35
----------------------

Backward compatibility warts

 * "git name-rev --stdin" has been deprecated and issues a warning
   when used; use "git name-rev --annotate-stdin" instead.

 * "git clone --filter=... --recurse-submodules" only makes the
   top-level a partial clone, while submodules are fully cloned.  This
   behaviour is changed to pass the same filter down to the submodules.


Note to those who build from the source

 * Since Git 2.31, our source assumed that the compiler you use to
   build Git supports variadic macros, with an easy-to-use escape
   hatch to allow compilation without variadic macros with an request
   to report that you had to use the escape hatch to the list.
   Because we haven't heard from anybody who actually needed to use
   the escape hatch, it has been removed, making support of variadic
   macros a hard requirement.


UI, Workflows & Features

 * Assorted updates to "git cat-file", especially "-h".

 * The command line completion (in contrib/) learns to complete
   arguments to give to "git sparse-checkout" command.

 * "git log --remerge-diff" shows the difference from mechanical merge
   result and the result that is actually recorded in a merge commit.

 * "git log" and friends learned an option --exclude-first-parent-only
   to propagate UNINTERESTING bit down only along the first-parent
   chain, just like --first-parent option shows commits that lack the
   UNINTERESTING bit only along the first-parent chain.

 * The command line completion script (in contrib/) learned to
   complete all Git subcommands, including the ones that are normally
   hidden, when GIT_COMPLETION_SHOW_ALL_COMMANDS is used.

 * "git branch" learned the "--recurse-submodules" option.

 * A not-so-common mistake is to write a script to feed "git bisect
   run" without making it executable, in which case all tests will
   exit with 126 or 127 error codes, even on revisions that are marked
   as good.  Try to recognize this situation and stop iteration early.

 * When "index-pack" dies due to incoming data exceeding the maximum
   allowed input size, include the value of the limit in the error
   message.

 * The error message given by "git switch HEAD~4" has been clarified
   to suggest the "--detach" option that is required.

 * In sparse-checkouts, files mis-marked as missing from the working tree
   could lead to later problems.  Such files were hard to discover, and
   harder to correct.  Automatically detecting and correcting the marking
   of such files has been added to avoid these problems.

 * "git cat-file" learns "--batch-command" mode, which is a more
   flexible interface than the existing "--batch" or "--batch-check"
   modes, to allow different kinds of inquiries made.

 * The level of verbose output from the ort backend during inner merge
   has been aligned to that of the recursive backend.

 * "git remote rename A B", depending on the number of remote-tracking
   refs involved, takes long time renaming them.  The command has been
   taught to show progress bar while making the user wait.

 * Bundle file format gets extended to allow a partial bundle,
   filtered by similar criteria you would give when making a
   partial/lazy clone.

 * A new built-in userdiff driver for kotlin has been added.

 * "git repack" learned a new configuration to disable triggering of
   age-old "update-server-info" command, which is rarely useful these
   days.

 * "git stash" does not allow subcommands it internally runs as its
   implementation detail, except for "git reset", to emit messages;
   now "git reset" part has also been squelched.

 * "git ls-tree" learns "--oid-only" option, similar to "--name-only",
   and more generalized "--format" option.

 * "git fetch --refetch" learned to fetch everything without telling
   the other side what we already have, which is useful when you
   cannot trust what you have in the local object store.

 * "git branch" gives hint when branch tracking cannot be established
   because fetch refspecs from multiple remote repositories overlap.

 * "git worktree list --porcelain" did not c-quote pathnames and lock
   reasons with unsafe bytes correctly, which is worked around by
   introducing NUL terminated output format with "-z".


Performance, Internal Implementation, Development Support etc.

 * "git apply" (ab)used the util pointer of the string-list to keep
   track of how each symbolic link needs to be handled, which has been
   simplified by using strset.

 * Fix a hand-rolled alloca() imitation that may have violated
   alignment requirement of data being sorted in compatibility
   implementation of qsort_s() and stable qsort().

 * Use the parse-options API in "git reflog" command.

 * The conditional inclusion mechanism of configuration files using
   "[includeIf <condition>]" learns to base its decision on the
   URL of the remote repository the repository interacts with.
   (merge 399b198489 jt/conditional-config-on-remote-url later to maint).

 * "git name-rev --stdin" does not behave like usual "--stdin" at
   all.  Start the process of renaming it to "--annotate-stdin".
   (merge a2585719b3 jc/name-rev-stdin later to maint).

 * "git update-index", "git checkout-index", and "git clean" are
   taught to work better with the sparse checkout feature.

 * Use an internal call to reset_head() helper function instead of
   spawning "git checkout" in "rebase", and update code paths that are
   involved in the change.

 * Messages "ort" merge backend prepares while dealing with conflicted
   paths were unnecessarily confusing since it did not differentiate
   inner merges and outer merges.

 * Small modernization of the rerere-train script (in contrib/).

 * Use designated initializers we started using in mid 2017 in more
   parts of the codebase that are relatively quiescent.

 * Improve failure case behaviour of xdiff library when memory
   allocation fails.

 * General clean-up in reftable implementation, including
   clarification of the API documentation, tightening the code to
   honor documented length limit, etc.

 * Remove the escape hatch we added when we introduced the weather
   balloon to use variadic macros unconditionally, to make it official
   that we now have a hard dependency on the feature.

 * Makefile refactoring with a bit of suffixes rule stripping to
   optimize the runtime overhead.

 * "git stash drop" is reimplemented as an internal call to
   reflog_delete() function, instead of invoking "git reflog delete"
   via run_command() API.

 * Count string_list items in size_t, not "unsigned int".

 * The single-key interactive operation used by "git add -p" has been
   made more robust.

 * Remove unneeded <meta http-equiv=content-type...> from gitweb
   output.

 * "git name-rev" learned to use the generation numbers when setting
   the lower bound of searching commits used to explain the revision,
   when available, instead of committer time.

 * Replace core.fsyncObjectFiles with two new configuration variables,
   core.fsync and core.fsyncMethod.

 * Updates to refs traditionally weren't fsync'ed, but we can
   configure using core.fsync variable to do so.

 * "git reflog" command now uses parse-options API to parse its
   command line options.


Fixes since v2.35
-----------------

 * "rebase" and "stash" in secondary worktrees are broken in
   Git 2.35.0, which has been corrected.

 * "git pull --rebase" ignored the rebase.autostash configuration
   variable when the remote history is a descendant of our history,
   which has been corrected.
   (merge 3013d98d7a pb/pull-rebase-autostash-fix later to maint).

 * "git update-index --refresh" has been taught to deal better with
   racy timestamps (just like "git status" already does).
   (merge 2ede073fd2 ms/update-index-racy later to maint).

 * Avoid tests that are run under GIT_TRACE2 set from failing
   unnecessarily.
   (merge 944d808e42 js/test-unset-trace2-parents later to maint).

 * The merge-ort misbehaved when merge.renameLimit configuration is
   set too low and failed to find all renames.
   (merge 9ae39fef7f en/merge-ort-restart-optim-fix later to maint).

 * We explain that revs come first before the pathspec among command
   line arguments, but did not spell out that dashed options come
   before other args, which has been corrected.
   (merge c11f95010c tl/doc-cli-options-first later to maint).

 * "git add -p" rewritten in C regressed hunk splitting in some cases,
   which has been corrected.
   (merge 7008ddc645 pw/add-p-hunk-split-fix later to maint).

 * "git fetch --negotiate-only" is an internal command used by "git
   push" to figure out which part of our history is missing from the
   other side.  It should never recurse into submodules even when
   fetch.recursesubmodules configuration variable is set, nor it
   should trigger "gc".  The code has been tightened up to ensure it
   only does common ancestry discovery and nothing else.
   (merge de4eaae63a gc/fetch-negotiate-only-early-return later to maint).

 * The code path that verifies signatures made with ssh were made to
   work better on a system with CRLF line endings.
   (merge caeef01ea7 fs/ssh-signing-crlf later to maint).

 * "git sparse-checkout init" failed to write into $GIT_DIR/info
   directory when the repository was created without one, which has
   been corrected to auto-create it.
   (merge 7f44842ac1 jt/sparse-checkout-leading-dir-fix later to maint).

 * Cloning from a repository that does not yet have any branches or
   tags but has other refs resulted in a "remote transport reported
   error", which has been corrected.
   (merge dccea605b6 jt/clone-not-quite-empty later to maint).

 * Mark in various places in the code that the sparse index and the
   split index features are mutually incompatible.
   (merge 451b66c533 js/sparse-vs-split-index later to maint).

 * Update the logic to compute alignment requirement for our mem-pool.
   (merge e38bcc66d8 jc/mem-pool-alignment later to maint).

 * Pick a better random number generator and use it when we prepare
   temporary filenames.
   (merge 47efda967c bc/csprng-mktemps later to maint).

 * Update the contributor-facing documents on proposed log messages.
   (merge cdba0295b0 jc/doc-log-messages later to maint).

 * When "git fetch --prune" failed to prune the refs it wanted to
   prune, the command issued error messages but exited with exit
   status 0, which has been corrected.
   (merge c9e04d905e tg/fetch-prune-exit-code-fix later to maint).

 * Problems identified by Coverity in the reftable code have been
   corrected.
   (merge 01033de49f hn/reftable-coverity-fixes later to maint).

 * A bug that made multi-pack bitmap and the object order out-of-sync,
   making the .midx data corrupt, has been fixed.
   (merge f8b60cf99b tb/midx-bitmap-corruption-fix later to maint).

 * The build procedure has been taught to notice older version of zlib
   and enable our replacement uncompress2() automatically.
   (merge 07564773c2 ab/auto-detect-zlib-compress2 later to maint).

 * Interaction between fetch.negotiationAlgorithm and
   feature.experimental configuration variables has been corrected.
   (merge 714edc620c en/fetch-negotiation-default-fix later to maint).

 * "git diff --diff-filter=aR" is now parsed correctly.
   (merge 75408ca949 js/diff-filter-negation-fix later to maint).

 * When "git subtree" wants to create a merge, it used "git merge" and
   let it be affected by end-user's "merge.ff" configuration, which
   has been corrected.
   (merge 9158a3564a tk/subtree-merge-not-ff-only later to maint).

 * Unlike "git apply", "git patch-id" did not handle patches with
   hunks that has only 1 line in either preimage or postimage, which
   has been corrected.
   (merge 757e75c81e jz/patch-id-hunk-header-parsing-fix later to maint).

 * "receive-pack" checks if it will do any ref updates (various
   conditions could reject a push) before received objects are taken
   out of the temporary directory used for quarantine purposes, so
   that a push that is known-to-fail will not leave crufts that a
   future "gc" needs to clean up.
   (merge 5407764069 cb/clear-quarantine-early-on-all-ref-update-errors later to maint).

 * Because a deletion of ref would need to remove it from both the
   loose ref store and the packed ref store, a delete-ref operation
   that logically removes one ref may end up invoking ref-transaction
   hook twice, which has been corrected.
   (merge 2ed1b64ebd ps/avoid-unnecessary-hook-invocation-with-packed-refs later to maint).

 * When there is no object to write .bitmap file for, "git
   multi-pack-index" triggered an error, instead of just skipping,
   which has been corrected.
   (merge eb57277ba3 tb/midx-no-bitmap-for-no-objects later to maint).

 * "git cmd -h" outside a repository should error out cleanly for many
   commands, but instead it hit a BUG(), which has been corrected.
   (merge 87ad07d735 js/short-help-outside-repo-fix later to maint).

 * "working tree" and "per-worktree ref" were in glossary, but
   "worktree" itself wasn't, which has been corrected.
   (merge 2df5387ed0 jc/glossary-worktree later to maint).

 * L10n support for a few error messages.
   (merge 3d3c23b3a7 bs/forbid-i18n-of-protocol-token-in-fetch-pack later to maint).

 * Test modernization.
   (merge d4fe066e4b sy/t0001-use-path-is-helper later to maint).

 * "git log --graph --graph" used to leak a graph structure, and there
   was no way to countermand "--graph" that appear earlier on the
   command line.  A "--no-graph" option has been added and resource
   leakage has been plugged.

 * Error output given in response to an ambiguous object name has been
   improved.
   (merge 3a73c1dfaf ab/ambiguous-object-name later to maint).

 * "git sparse-checkout" wants to work with per-worktree configuration,
   but did not work well in a worktree attached to a bare repository.
   (merge 3ce1138272 ds/sparse-checkout-requires-per-worktree-config later to maint).

 * Setting core.untrackedCache to true failed to add the untracked
   cache extension to the index.

 * Workaround we have for versions of PCRE2 before their version 10.36
   were in effect only for their versions newer than 10.36 by mistake,
   which has been corrected.
   (merge 97169fc361 rs/pcre-invalid-utf8-fix-fix later to maint).

 * Document Taylor as a new member of Git PLC at SFC.  Welcome.
   (merge e8d56ca863 tb/coc-plc-update later to maint).

 * "git checkout -b branch/with/multi/level/name && git stash" only
   recorded the last level component of the branch name, which has
   been corrected.

 * "git fetch" can make two separate fetches, but ref updates coming
   from them were in two separate ref transactions under "--atomic",
   which has been corrected.

 * Check the return value from parse_tree_indirect() to turn segfaults
   into calls to die().
   (merge 8d2eaf649a gc/parse-tree-indirect-errors later to maint).

 * Newer version of GPGSM changed its output in a backward
   incompatible way to break our code that parses its output.  It also
   added more processes our tests need to kill when cleaning up.
   Adjustments have been made to accommodate these changes.
   (merge b0b70d54c4 fs/gpgsm-update later to maint).

 * The untracked cache newly computed weren't written back to the
   on-disk index file when there is no other change to the index,
   which has been corrected.

 * "git config -h" did not describe the "--type" option correctly.
   (merge 5445124fad mf/fix-type-in-config-h later to maint).

 * The way generation number v2 in the commit-graph files are
   (not) handled has been corrected.
   (merge 6dbf4b8172 ds/commit-graph-gen-v2-fixes later to maint).

 * The method to trigger malloc check used in our tests no longer work
   with newer versions of glibc.
   (merge baedc59543 ep/test-malloc-check-with-glibc-2.34 later to maint).

 * When "git fetch --recurse-submodules" grabbed submodule commits
   that would be needed to recursively check out newly fetched commits
   in the superproject, it only paid attention to submodules that are
   in the current checkout of the superproject.  We now do so for all
   submodules that have been run "git submodule init" on.

 * "git rebase $base $non_branch_commit", when $base is an ancestor or
   the $non_branch_commit, modified the current branch, which has been
   corrected.

 * When "shallow" information is updated, we forgot to update the
   in-core equivalent, which has been corrected.

 * When creating a loose object file, we didn't report the exact
   filename of the file we failed to fsync, even though the
   information was readily available, which has been corrected.

 * "git am" can read from the standard input when no mailbox is given
   on the command line, but the end-user gets no indication when it
   happens, making Git appear stuck.
   (merge 7b20af6a06 jc/mailsplit-warn-on-tty later to maint).

 * "git mv" failed to refresh the cached stat information for the
   entry it moved.
   (merge b7f9130a06 vd/mv-refresh-stat later to maint).

 * Fix for CVE-2022-24765 has been merged up from 2.35.2 and others.

 * Other code cleanup, docfix, build fix, etc.
   (merge cfc5cf428b jc/find-header later to maint).
   (merge 40e7cfdd46 jh/p4-fix-use-of-process-error-exception later to maint).
   (merge 727e6ea350 jh/p4-spawning-external-commands-cleanup later to maint).
   (merge 0a6adc26e2 rs/grep-expr-cleanup later to maint).
   (merge 4ed7dfa713 po/readme-mention-contributor-hints later to maint).
   (merge 6046f7a91c en/plug-leaks-in-merge later to maint).
   (merge 8c591dbfce bc/clarify-eol-attr later to maint).
   (merge 518e15db74 rs/parse-options-lithelp-help later to maint).
   (merge cbac0076ef gh/doc-typos later to maint).
   (merge ce14de03db ab/no-errno-from-resolve-ref-unsafe later to maint).
   (merge 2826ffad8c rc/negotiate-only-typofix later to maint).
   (merge 0f03f04c5c en/sparse-checkout-leakfix later to maint).
   (merge 74f3390dde sy/diff-usage-typofix later to maint).
   (merge 45d0212a71 ll/doc-mktree-typofix later to maint).
   (merge e9b272e4c1 js/no-more-legacy-stash later to maint).
   (merge 6798b08e84 ab/do-not-hide-failures-in-git-dot-pm later to maint).
   (merge 9325285df4 po/doc-check-ignore-markup-fix later to maint).
   (merge cd26cd6c7c sy/modernize-t-lib-read-tree-m-3way later to maint).
   (merge d17294a05e ab/hash-object-leakfix later to maint).
   (merge b8403129d3 jd/t0015-modernize later to maint).
   (merge 332acc248d ds/mailmap later to maint).
   (merge 04bf052eef ab/grep-patterntype later to maint).
   (merge 6ee36364eb ab/diff-free-more later to maint).
   (merge 63a36017fe nj/read-tree-doc-reffix later to maint).
   (merge eed36fce38 sm/no-git-in-upstream-of-pipe-in-tests later to maint).
   (merge c614beb933 ep/t6423-modernize later to maint).
   (merge 57be9c6dee ab/reflog-prep-fix later to maint).
   (merge 5327d8982a js/in-place-reverse-in-sequencer later to maint).
   (merge 2e2c0be51e dp/worktree-repair-in-usage later to maint).
   (merge 6563706568 jc/coding-guidelines-decl-in-for-loop later to maint).

----------------------------------------------------------------

Changes since v2.35.2 are as follows:

Abhradeep Chakraborty (2):
      amend remaining usage strings according to style guide
      partial-clone: add a partial-clone test case

Adam Dinwoodie (2):
      configure.ac: fix HAVE_SYNC_FILE_RANGE definition
      t9902: split test to run on appropriate systems

Alex Henrie (3):
      log: fix memory leak if --graph is passed multiple times
      log: add a --no-graph option
      switch: mention the --detach option when dying due to lack of a branch

Atharva Raykar (5):
      submodule--helper: get remote names from any repository
      submodule--helper: refactor get_submodule_displaypath()
      submodule--helper: allow setting superprefix for init_submodule()
      submodule--helper: run update using child process struct
      submodule: move core cmd_update() logic to C

Bagas Sanjaya (1):
      fetch-pack: parameterize message containing 'ready' keyword

COGONI Guillaume (3):
      t/t3903-stash.sh: replace test [-d|-f] with test_path_is_*
      tests: allow testing if a path is truly a file or a directory
      tests: make the code more readable

Carlo Marcelo Arenas Belón (1):
      git-compat-util: really support openssl as a source of entropy

Chen Bojun (1):
      receive-pack: purge temporary data if no command is ready to run

David Cantrell (1):
      completion: tab completion of filenames for 'git restore'

Derrick Stolee (45):
      Documentation: add extensions.worktreeConfig details
      worktree: create init_worktree_config()
      config: add repo_config_set_worktree_gently()
      sparse-checkout: set worktree-config correctly
      worktree: copy sparse-checkout patterns and config on add
      config: make git_configset_get_string_tmp() private
      mailmap: change primary address for Derrick Stolee
      dir: force untracked cache with core.untrackedCache
      worktree: combine two translatable messages
      worktree: extract copy_filtered_worktree_config()
      worktree: extract copy_sparse_checkout()
      worktree: extract checkout_worktree()
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      test-read-graph: include extra post-parse info
      t5318: extract helpers to lib-commit-graph.sh
      commit-graph: fix ordering bug in generation numbers
      commit-graph: start parsing generation v2 (again)
      commit-graph: fix generation number v2 overflow values
      commit-graph: declare bankruptcy on GDAT chunks
      index-pack: document and test the --promisor option
      list-objects-filter-options: create copy helper
      revision: put object filter into struct rev_info
      pack-objects: use rev.filter when possible
      pack-bitmap: drop filter in prepare_bitmap_walk()
      list-objects: consolidate traverse_commit_list[_filtered]
      MyFirstObjectWalk: update recommended usage
      bundle: parse filter capability
      rev-list: move --filter parsing into revision.c
      bundle: create filtered bundles
      bundle: unbundle promisor packs
      clone: fail gracefully when cloning filtered bundle
      maintenance: fix synopsis in documentation
      list-objects-filter: remove CL_ARG__FILTER
      pack-objects: move revs out of get_object_list()
      pack-objects: parse --filter directly into revs.filter
      bundle: move capabilities to end of 'verify'
      bundle: output hash information in 'verify'
      t7700: check post-condition in kept-pack test
      test-lib-functions: remove test_subcommand_inexact

Des Preston (1):
      worktree: include repair cmd in usage

Elia Pinto (8):
      test-lib.sh: Use GLIBC_TUNABLES instead of MALLOC_CHECK_ on glibc >= 2.34
      t6423-merge-rename-directories.sh: use the $(...) construct
      attr.c: delete duplicate include
      builtin/gc.c: delete duplicate include
      builtin/sparse-checkout.c: delete duplicate include
      builtin/stash.c: delete duplicate include
      t/helper/test-run-command.c: delete duplicate include
      attr.h: remove duplicate struct definition

Elijah Newren (32):
      t1011: add testcase demonstrating accidental loss of user modifications
      unpack-trees: fix accidental loss of user changes
      repo_read_index: clear SKIP_WORKTREE bit from files present in worktree
      Update documentation related to sparsity and the skip-worktree bit
      Accelerate clear_skip_worktree_from_present_files() by caching
      merge-ort: avoid assuming all renames detected
      merge-ort: fix memory leak in merge_ort_internal()
      merge: fix memory leaks in cmd_merge()
      sparse-checkout: fix a couple minor memory leaks
      repo-settings: fix checking for fetch.negotiationAlgorithm=default
      repo-settings: fix error handling for unknown values
      repo-settings: rename the traditional default fetch.negotiationAlgorithm
      show, log: provide a --remerge-diff capability
      log: clean unneeded objects during `log --remerge-diff`
      ll-merge: make callers responsible for showing warnings
      merge-ort: capture and print ll-merge warnings in our preferred fashion
      merge-ort: mark a few more conflict messages as omittable
      merge-ort: format messages slightly different for use in headers
      diff: add ability to insert additional headers for paths
      show, log: include conflict/warning messages in --remerge-diff headers
      merge-ort: mark conflict/warning messages from inner merges as omittable
      diff-merges: avoid history simplifications when diffing merges
      merge-ort: make informational messages from recursive merges clearer
      sparse-checkout: correct reapply's handling of options
      sparse-checkout: correctly set non-cone mode when expected
      sparse-checkout: pay attention to prefix for {set, add}
      sparse-checkout: error or warn when given individual files
      sparse-checkout: reject arguments in cone-mode that look like patterns
      merge-ort: fix small memory leak in detect_and_process_renames()
      merge-ort: fix small memory leak in unique_path()
      merge-ort: exclude messages from inner merges by default
      repo_read_index: add config to expect files outside sparse patterns

Emily Shaffer (14):
      hook: add 'run' subcommand
      gc: use hook library for pre-auto-gc hook
      am: convert {pre,post}-applypatch to use hook.h
      rebase: convert pre-rebase to use hook.h
      am: convert applypatch-msg to use hook.h
      merge: convert post-merge to use hook.h
      hooks: convert non-worktree 'post-checkout' hook to hook library
      hooks: convert worktree 'post-checkout' hook to hook library
      send-email: use 'git hook run' for 'sendemail-validate'
      git-p4: use 'git hook' to run hooks
      commit: convert {pre-commit,prepare-commit-msg} hook to hook.h
      read-cache: convert post-index-change to use hook.h
      receive-pack: convert push-to-checkout hook to hook.h
      run-command: remove old run_hook_{le,ve}() hook API

Fabian Stelzer (2):
      gpg-interface: trim CR from ssh-keygen
      gpg-interface/gpgsm: fix for v2.3

Fangyi Zhou (1):
      submodule-helper: fix usage string

Glen Choo (39):
      fetch: use goto cleanup in cmd_fetch()
      fetch: skip tasks related to fetching objects
      fetch --negotiate-only: do not update submodules
      branch: move --set-upstream-to behavior to dwim_and_setup_tracking()
      branch: make create_branch() always create a branch
      branch: add a dry_run parameter to create_branch()
      builtin/branch: consolidate action-picking logic in cmd_branch()
      branch: add --recurse-submodules option for branch creation
      branch.c: use 'goto cleanup' in setup_tracking() to fix memory leaks
      stash: strip "refs/heads/" with skip_prefix
      checkout, clone: die if tree cannot be parsed
      submodule--helper: remove update-module-mode
      submodule--helper: reorganize code for sh to C conversion
      submodule--helper run-update-procedure: remove --suboid
      submodule--helper run-update-procedure: learn --remote
      submodule--helper update-clone: learn --init
      submodule--helper: remove ensure-core-worktree
      submodule update: add tests for --filter
      submodule--helper update-clone: check for --filter and --init
      t5526: introduce test helper to assert on fetches
      t5526: stop asserting on stderr literally
      t5526: create superproject commits with test helper
      submodule: make static functions read submodules from commits
      submodule: inline submodule_commits() into caller
      submodule: store new submodule commits oid_array in a struct
      submodule: extract get_fetch_task()
      submodule: move logic into fetch_task_create()
      submodule update: use die_message()
      submodule--helper: teach update_data more options
      submodule--helper: reduce logic in run_update_procedure()
      submodule--helper: remove forward declaration
      fetch: fetch unpopulated, changed submodules
      submodule: fix latent check_has_commit() bug
      branch: support more tracking modes when recursing
      branch: give submodule updating advice before exit
      branch --set-upstream-to: be consistent when advising
      branch: remove negative exit code
      branch: rework comments for future developers
      branch.c: simplify advice-and-die sequence

Greg Hurrell (2):
      Documentation/config/pgp.txt: replace stray <TAB> character with <SPC>
      Documentation/config/pgp.txt: add missing apostrophe

Han-Wen Nienhuys (27):
      reftable: fix OOB stack write in print functions
      reftable: fix resource leak in block.c error path
      reftable: fix resource leak blocksource.c
      reftable: check reftable_stack_auto_compact() return value
      reftable: ignore remove() return value in stack_test.c
      reftable: fix resource warning
      reftable: all xxx_free() functions accept NULL arguments
      reftable: order unittests by complexity
      reftable: drop stray printf in readwrite_test
      reftable: handle null refnames in reftable_ref_record_equal
      reftable: make reftable-record.h function signatures const correct
      reftable: implement record equality generically
      reftable: remove outdated file reftable.c
      reftable: make reftable_record a tagged union
      reftable: add print functions to the record types
      t1405: explictly delete reflogs for reftable
      t1405: mark test that checks existence as REFFILES
      t5312: prepare for reftable
      t1410: use test-tool ref-store to inspect reflogs
      t1410: mark bufsize boundary test as REFFILES
      Documentation: object_id_len goes up to 31
      reftable: reject 0 object_id_len
      reftable: add a test that verifies that writing empty keys fails
      reftable: avoid writing empty keys at the block layer
      reftable: ensure that obj_id_len is >= 2 on writing
      reftable: add test for length of disambiguating prefix
      reftable: rename writer_stats to reftable_writer_stats

Jacob Keller (1):
      name-rev: use generation numbers if available

Jason Yundt (2):
      comment: fix typo
      gitweb: remove invalid http-equiv="content-type"

Jayati Shrivastava (1):
      sequencer: use reverse_commit_list() helper

Jaydeep Das (1):
      t/t0015-hash.sh: remove unnecessary '\' at line end

Jaydeep P Das (1):
      userdiff: add builtin diff driver for kotlin language.

Jean-Noël Avila (5):
      i18n: factorize more 'incompatible options' messages
      i18n: factorize "invalid value" messages
      i18n: remove from i18n strings that do not hold translatable parts
      i18n: fix some misformated placeholders in command synopsis
      i18n: fix some badly formatted i18n strings

Jeff Hostetler (30):
      fsmonitor: enhance existing comments, clarify trivial response handling
      fsmonitor-ipc: create client routines for git-fsmonitor--daemon
      fsmonitor: config settings are repository-specific
      fsmonitor: use IPC to query the builtin FSMonitor daemon
      fsmonitor: document builtin fsmonitor
      fsmonitor--daemon: add a built-in fsmonitor daemon
      fsmonitor--daemon: implement 'stop' and 'status' commands
      compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
      compat/fsmonitor/fsm-listen-darwin: stub in backend for Darwin
      fsmonitor--daemon: implement 'run' command
      fsmonitor--daemon: implement 'start' command
      fsmonitor--daemon: add pathname classification
      fsmonitor--daemon: define token-ids
      fsmonitor--daemon: create token-based changed path cache
      compat/fsmonitor/fsm-listen-win32: implement FSMonitor backend on Windows
      compat/fsmonitor/fsm-listen-darwin: add MacOS header files for FSEvent
      compat/fsmonitor/fsm-listen-darwin: implement FSEvent listener on MacOS
      fsmonitor--daemon: implement handle_client callback
      help: include fsmonitor--daemon feature flag in version info
      t/helper/fsmonitor-client: create IPC client to talk to FSMonitor Daemon
      t7527: create test for fsmonitor--daemon
      t/perf: avoid copying builtin fsmonitor files into test repo
      t/helper/test-chmtime: skip directories on Windows
      t/perf/p7519: fix coding style
      t/perf/p7519: speed up test on Windows
      t/perf/p7519: add fsmonitor--daemon test cases
      fsmonitor--daemon: periodically truncate list of modified files
      fsmonitor--daemon: use a cookie file to sync with file system
      fsmonitor: force update index after large responses
      t7527: test status with untracked-cache and fsmonitor--daemon

Jerry Zhang (3):
      git-rev-list: add --exclude-first-parent-only flag
      patch-id: fix antipatterns in tests
      patch-id: fix scan_hunk_header on diffs with 1 line of before/after

Jessica Clarke (1):
      mem-pool: don't assume uintmax_t is aligned enough for all types

Joel Holdsworth (4):
      git-p4: don't select shell mode using the type of the command argument
      git-p4: pass command arguments as lists instead of using shell
      git-p4: don't print shell commands as python lists
      git-p4: fix instantiation of CalledProcessError

Johannes Schindelin (14):
      sparse-index: sparse index is disallowed when split index is active
      t1091: disable split index
      split-index: it really is incompatible with the sparse index
      git-sh-setup: remove remnant bits referring to `git-legacy-stash`
      add: remove support for `git-legacy-stash`
      stash: remove documentation for `stash.useBuiltin`
      stash: stop warning about the obsolete `stash.useBuiltin` config setting
      docs(diff): lose incorrect claim about `diff-files --diff-filter=A`
      diff.c: move the diff filter bits definitions up a bit
      diff-filter: be more careful when looking for negative bits
      scalar: accept -C and -c options before the subcommand
      checkout/fetch/pull/pack-objects: allow `-h` outside a repository
      t0012: verify that built-ins handle `-h` even without gitdir
      cocci: allow padding with `strbuf_addf()`

John Cai (15):
      receive-pack.c: consolidate find header logic
      name-rev: deprecate --stdin in favor of --annotate-stdin
      name-rev.c: use strbuf_getline instead of limited size buffer
      builtin/reflog.c: use parse-options api for expire, delete subcommands
      name-rev: replace --stdin with --annotate-stdin in synopsis
      cat-file: rename cmdmode to transform_mode
      cat-file: introduce batch_mode enum to replace print_contents
      cat-file: add remove_timestamp helper
      cat-file: add --batch-command mode
      stash: add tests to ensure reflog --rewrite --updatref behavior
      reflog: libify delete reflog function and helpers
      stash: call reflog_delete() in reflog.c
      cat-file: skip expanding default format
      rebase: use test_commit helper in setup
      rebase: set REF_HEAD_DETACH in checkout_up_to_date()

Jonathan Tan (6):
      config: make git_config_include() static
      config: include file if remote URL matches a glob
      sparse-checkout: create leading directory
      clone: support unusual remote ref configurations
      ls-files: support --recurse-submodules --stage
      shallow: reset commit grafts when shallow is reset

Josh Steadmon (3):
      test-lib: unset trace2 parent envvars
      clone, submodule: pass partial clone filters to submodules
      ls-tree: `-l` should not imply recursive listing

Junio C Hamano (32):
      compat/qsort_s.c: avoid using potentially unaligned access
      fetch: help translators by reusing the same message template
      Start post 2.35 cycle
      SubmittingPatches: write problem statement in the log in the present tense
      CodingGuidelines: hint why we value clearly written log messages
      SubmittingPatches: explain why we care about log messages
      Name the next one 2.36 to prepare for 2.35.1
      The first batch
      The second batch for 2.36
      glossary: describe "worktree"
      The third batch
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      rerere-train: two fixes to the use of "git show -s"
      am/apply: warn if we end up reading patches from terminal
      The ninth batch
      The tenth batch
      The eleventh batch
      The twelfth batch
      The thirteenth batch
      The 14th batch
      reset: show --no-refresh in the short-help
      The 15th batch
      The 16th batch
      The 17th batch
      CodingGuidelines: give deadline for "for (int i = 0; ..."
      Git 2.36-rc0
      Git 2.36-rc1
      Git 2.36-rc2

Justin Donnelly (4):
      git-prompt: rename `upstream` to `upstream_type`
      git-prompt: make upstream state indicator location consistent
      git-prompt: make long upstream state indicator consistent
      git-prompt: put upstream comments together

Lessley Dennington (3):
      completion: address sparse-checkout issues
      completion: improve sparse-checkout cone mode directory completion
      completion: handle unusual characters for sparse-checkout

Liginity Lee (1):
      fix typo in git-mktree.txt

Marc Strapetz (4):
      test-lib: introduce API for verifying file mtime
      t7508: fix bogus mtime verification
      t7508: add tests capturing racy timestamp handling
      update-index: refresh should rewrite index in case of racy timestamps

Martin Ågren (1):
      git-ls-tree.txt: fix the name of "%(objectsize:padded)"

Matheus Felipe (1):
      config: correct "--type" option in "git config -h" output

Matt Cooper (1):
      index-pack: clarify the breached limit

Michael J Gruber (2):
      test-lib: declare local variables as local
      tests: demonstrate "show --word-diff --color-moved" regression

Neeraj Singh (10):
      wrapper: make inclusion of Windows csprng header tightly scoped
      core.fsyncmethod: add writeout-only mode
      core.fsync: introduce granular fsync control infrastructure
      core.fsync: add configuration parsing
      core.fsync: new option to harden the index
      core.fsync: documentation and user-friendly aggregate options
      core.fsync: fix incorrect expression for default configuration
      trace2: add stats for fsync operations
      core.fsyncmethod: correctly camel-case warning message
      object-file: pass filename to fsync_or_die

Nihal Jere (1):
      Documentation: git-read-tree: separate links using commas

Patrick Steinhardt (24):
      refs: extract packed_refs_delete_refs() to allow control of transaction
      refs: allow passing flags when beginning transactions
      refs: allow skipping the reference-transaction hook
      refs: demonstrate excessive execution of the reference-transaction hook
      refs: do not execute reference-transaction hook on packing refs
      refs: skip hooks when deleting uncovered packed refs
      fetch-pack: use commit-graph when computing cutoff
      fetch: skip computing output width when not printing anything
      fetch: increase test coverage of fetches
      fetch: backfill tags before setting upstream
      fetch: control lifecycle of FETCH_HEAD in a single place
      fetch: report errors when backfilling tags fails
      refs: add interface to iterate over queued transactional updates
      fetch: make `--atomic` flag cover backfilling of tags
      fetch: make `--atomic` flag cover pruning of refs
      upload-pack: look up "want" lines via commit-graph
      fetch: avoid lookup of commits when not appending to FETCH_HEAD
      refs: add ability for backends to special-case reading of symbolic refs
      remote: read symbolic refs via `refs_read_symbolic_ref()`
      refs/files-backend: optimize reading of symbolic refs
      t5503: simplify setup of test which exercises failure of backfill
      repack: refactor to avoid double-negation of update-server-info
      repack: add config to skip updating server info
      core.fsync: new option to harden references

Philip Oakley (2):
      README.md: add CodingGuidelines and a link for Translators
      doc: check-ignore: code-quote an exclamation mark

Philippe Blain (1):
      pull --rebase: honor rebase.autostash when fast-forwarding

Phillip Wood (29):
      t3701: clean up hunk splitting tests
      builtin add -p: fix hunk splitting
      rebase: factor out checkout for up to date branch
      t5403: refactor rebase post-checkout hook tests
      rebase: pass correct arguments to post-checkout hook
      rebase: do not remove untracked files on checkout
      rebase --apply: don't run post-checkout hook if there is an error
      reset_head(): remove action parameter
      reset_head(): factor out ref updates
      reset_head(): make default_reflog_action optional
      create_autostash(): remove unneeded parameter
      rebase: cleanup reset_head() calls
      reset_head(): take struct rebase_head_opts
      rebase --apply: fix reflog
      rebase --apply: set ORIG_HEAD correctly
      rebase -m: don't fork git checkout
      xdiff: fix a memory leak
      xdiff: handle allocation failure in patience diff
      xdiff: refactor a function
      xdiff: handle allocation failure when merging
      terminal: always reset terminal when reading without echo
      terminal: pop signal handler when terminal is restored
      terminal: set VMIN and VTIME in non-canonical mode
      add -p: disable stdin buffering when interactive.singlekey is set
      terminal: use flags for save_term()
      terminal: don't assume stdin is /dev/tty
      terminal: work around macos poll() bug
      terminal: restore settings on SIGTSTP
      worktree: add -z option for list subcommand

René Scharfe (10):
      grep: use grep_or_expr() in compile_pattern_or()
      grep: use grep_not_expr() in compile_pattern_not()
      apply: use strsets to track symlinks
      stable-qsort: avoid using potentially unaligned access
      bisect--helper: report actual bisect_state() argument on error
      bisect--helper: release strbuf and strvec on run error
      bisect: document run behavior with exit codes 126 and 127
      bisect--helper: double-check run command on exit code 126 and 127
      parse-options: document bracketing of argh
      grep: fix triggering PCRE2_NO_START_OPTIMIZE workaround

Robert Coup (8):
      fetch: fix negotiate-only error message
      fetch-negotiator: add specific noop initializer
      fetch-pack: add refetch
      builtin/fetch-pack: add --refetch option
      fetch: add --refetch option
      t5615-partial-clone: add test for fetch --refetch
      fetch: after refetch, encourage auto gc repacking
      docs: mention --refetch fetch option

SZEDER Gábor (1):
      reflog: fix 'show' subcommand's argv

Shaoxuan Yuan (4):
      builtin/diff.c: fix "git-diff" usage string typo
      t/lib-read-tree-m-3way: modernize style
      t/lib-read-tree-m-3way: indent with tabs
      t0001: replace "test [-d|-f]" with test_path_is_* functions

Shubham Mishra (3):
      t0003: avoid pipes with Git on LHS
      t0001-t0028: avoid pipes with Git on LHS
      t0030-t0050: avoid pipes with Git on LHS

Tao Klerks (6):
      t7519: avoid file to index mtime race for untracked cache
      t7519: populate untracked cache before test
      untracked-cache: write index when populating empty untracked cache
      t/helper/test-chmtime: update mingw to support chmtime on directories
      t7063: mtime-mangling instead of delays in untracked cache testing
      tracking branches: add advice to ambiguous refspec error

Taylor Blau (15):
      grep: extract grep_binexp() from grep_or_expr()
      grep: use grep_and_expr() in compile_pattern_and()
      t5326: demonstrate bitmap corruption after permutation
      midx.c: make changing the preferred pack safe
      pack-revindex.c: instrument loading on-disk reverse index
      t5326: drop unnecessary setup
      t5326: extract `test_rev_exists`
      t5326: move tests to t/lib-bitmap.sh
      t/lib-bitmap.sh: parameterize tests over reverse index source
      midx: read `RIDX` chunk when present
      pack-bitmap.c: gracefully fallback after opening pack/MIDX
      midx: prevent writing a .bitmap without any objects
      CODE_OF_CONDUCT.md: update PLC members list
      builtin/remote.c: parse options in 'rename'
      builtin/remote.c: show progress when renaming remote references

Teng Long (6):
      git-cli.txt: clarify "options first and then args"
      ls-tree: rename "retval" to "recurse" in "show_tree()"
      ls-tree: simplify nesting if/else logic in "show_tree()"
      ls-tree: fix "--name-only" and "--long" combined use bug
      ls-tree: slightly refactor `show_tree()`
      ls-tree: support --object-only option for "git-ls-tree"

Thomas Gummerer (1):
      fetch --prune: exit with error if pruning fails

Thomas Koutcher (1):
      subtree: force merge commit

Todd Zullinger (3):
      t/lib-gpg: reload gpg components after updating trustlist
      t/lib-gpg: kill all gpg components, not just gpg-agent
      doc: replace "--" with {litdd} in credential-cache/fsmonitor

Victoria Dye (30):
      reset: fix validation in sparse index test
      reset: reorder wildcard pathspec conditions
      clean: integrate with sparse index
      checkout-index: expand sparse checkout compatibility tests
      checkout-index: add --ignore-skip-worktree-bits option
      checkout-index: integrate with sparse index
      update-index: add tests for sparse-checkout compatibility
      update-index: integrate with sparse index
      update-index: reduce scope of index expansion in do_reupdate
      sparse-index: prevent repo root from becoming sparse
      status: fix nested sparse directory diff in sparse index
      read-tree: explicitly disallow prefixes with a leading '/'
      read-tree: expand sparse checkout test coverage
      read-tree: integrate with sparse index
      read-tree: narrow scope of index expansion for '--prefix'
      read-tree: make two-way merge sparse-aware
      read-tree: make three-way merge sparse-aware
      reset: revise index refresh advice
      reset: introduce --[no-]refresh option to --mixed
      reset: replace '--quiet' with '--no-refresh' in performance advice
      reset: suppress '--no-refresh' advice if logging is silenced
      stash: make internal resets quiet and refresh index
      t1092: add sparse directory before cone in test repo
      unpack-trees: increment cache_bottom for sparse directories
      Revert "unpack-trees: improve performance of next_cache_entry"
      reset: do not make '--quiet' disable index refresh
      reset: remove 'reset.quiet' config option
      reset: remove 'reset.refresh' config option
      mv: refresh stat info for moved entry
      contrib/scalar: fix 'all' target in Makefile

brian m. carlson (6):
      t0027: add tests for eol without text in .gitattributes
      docs: correct documentation about eol attribute
      wrapper: add a helper to generate numbers from a CSPRNG
      wrapper: use a CSPRNG to generate random file names
      doc: clarify interaction between 'eol' and text=auto
      block-sha1: remove use of obsolete x86 assembly

Ævar Arnfjörð Bjarmason (186):
      cat-file tests: test bad usage
      cat-file tests: test messaging on bad objects/paths
      parse-options API: add a usage_msg_optf()
      cat-file docs: fix SYNOPSIS and "-h" output
      cat-file: move "usage" variable to cmd_cat_file()
      cat-file: make --batch-all-objects a CMDMODE
      cat-file: fix remaining usage bugs
      cat-file: correct and improve usage information
      object-name.c: don't have GET_OID_ONLY_TO_DIE imply *_QUIETLY
      cat-file: use GET_OID_ONLY_TO_DIE in --(textconv|filters)
      hook API: add a run_hooks() wrapper
      hook API: add a run_hooks_l() wrapper
      git hook run: add an --ignore-missing flag
      cat-file: don't whitespace-pad "(...)" in SYNOPSIS and usage output
      cat-file: s/_/-/ in typo'd usage_msg_optf() message
      compat: auto-detect if zlib has uncompress2()
      sequencer: don't use die_errno() on refs_resolve_ref_unsafe() failure
      refs API: remove "failure_errno" from refs_resolve_ref_unsafe()
      object-name tests: add tests for ambiguous object blind spots
      object-name: explicitly handle OBJ_BAD in show_ambiguous_object()
      object-name: explicitly handle bad tags in show_ambiguous_object()
      object-name: make ambiguous object output translatable
      object-name: show date for ambiguous tag objects
      object-name: iterate ambiguous objects before showing header
      object-name: re-use "struct strbuf" in show_ambiguous_object()
      perl Git.pm: don't ignore signalled failure in _cmd_close()
      completion tests: re-source git-completion.bash in a subshell
      completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS
      leak tests: fix a memory leak in "test-progress" helper
      progress.c test helper: add missing braces
      progress.c tests: make start/stop commands on stdin
      progress.c tests: test some invalid usage
      progress.h: format and be consistent with progress.c naming
      progress.c: use dereferenced "progress" variable, not "(*p_progress)"
      progress.c: refactor stop_progress{,_msg}() to use helpers
      progress API: unify stop_progress{,_msg}(), fix trace2 bug
      pack-bitmap-write.c: don't return without stop_progress()
      t0051: use "skip_all" under !MINGW in single-test file
      hash-object: fix a trivial leak in --path
      ls-remote & transport API: release "struct transport_ls_refs_options"
      grep.h: remove unused "regex_t regexp" from grep_opt
      log tests: check if grep_config() is called by "log"-like cmds
      grep tests: create a helper function for "BRE" or "ERE"
      grep tests: add missing "grep.patternType" config tests
      built-ins: trust the "prefix" from run_builtin()
      grep.c: don't pass along NULL callback value
      grep API: call grep_config() after grep_init()
      grep.h: make "grep_opt.pattern_type_option" use its enum
      grep.c: do "if (bool && memchr())" not "if (memchr() && bool)"
      grep: simplify config parsing and option parsing
      cache.h: remove always unused show_date_human() declaration
      date API: create a date.h, split from cache.h
      date API: provide and use a DATE_MODE_INIT
      date API: add basic API docs
      date API: add and use a date_mode_release()
      diff.[ch]: have diff_free() call clear_pathspec(opts.pathspec)
      diff.[ch]: have diff_free() free options->parseopts
      hook tests: test for exact "pre-push" hook input
      hook tests: use a modern style for "pre-push" tests
      git-compat-util.h: clarify GCC v.s. C99-specific in comment
      C99: remove hardcoded-out !HAVE_VARIADIC_MACROS code
      help doc: add missing "]" to "[-a|--all]"
      help.c: use puts() instead of printf{,_ln}() for consistency
      help tests: test "git" and "git help [-a|-g] spacing
      help.c: split up list_all_cmds_help() function
      help: note the option name on option incompatibility
      help: correct usage & behavior of "git help --all"
      help: error if [-a|-g|-c] and [-i|-m|-w] are combined
      help: add --no-[external-commands|aliases] for use with --all
      help: don't print "\n" before single-section output
      imap-send.c: use designated initializers for "struct imap_server_conf"
      trace2: use designated initializers for "struct tr2_tgt"
      trace2: use designated initializers for "struct tr2_dst"
      object-file: use designated initializers for "struct git_hash_algo"
      archive-*.c: use designated initializers for "struct archiver"
      userdiff.c: use designated initializers for "struct userdiff_driver"
      convert.c: use designated initializers for "struct stream_filter*"
      refspec.c: use designated initializers for "struct refspec_item"
      fast-import.c: use designated initializers for "partial" struct assignments
      object-file.c: split up declaration of unrelated variables
      object-file API: return "void", not "int" from hash_object_file()
      object-file API: add a format_object_header() function
      object-file API: have write_object_file() take "enum object_type"
      object API: correct "buf" v.s. "map" mismatch in *.c and *.h
      object API docs: move check_object_signature() docs to cache.h
      object API users + docs: check <0, not !0 with check_object_signature()
      object-file API: split up and simplify check_object_signature()
      object API: rename hash_object_file_literally() to write_*()
      object-file API: have hash_object_file() take "enum object_type"
      object-file.c: add a literal version of write_object_file_prepare()
      object-file API: pass an enum to read_object_with_reference()
      test-lib: add GIT_SAN_OPTIONS, inherit [AL]SAN_OPTIONS
      test-lib: correct and assert TEST_DIRECTORY overriding
      test-lib: make $GIT_BUILD_DIR an absolute path
      test-lib: add "fast_unwind_on_malloc=0" to LSAN_OPTIONS
      scalar Makefile: use "The default target of..." pattern
      Makefiles: add "shared.mak", move ".DELETE_ON_ERROR" to it
      Makefile: disable GNU make built-in wildcard rules
      Makefile: define $(LIB_H) in terms of $(FIND_SOURCE_FILES)
      Makefile: move ".SUFFIXES" rule to shared.mak
      Makefile: move $(comma), $(empty) and $(space) to shared.mak
      Makefile: add "$(QUIET)" boilerplate to shared.mak
      Makefiles: add and use wildcard "mkdir -p" template
      log tests: fix "abort tests early" regression in ff37a60c369
      index-pack: fix memory leaks
      merge-base: free() allocated "struct commit **" list
      diff.c: free "buf" in diff_words_flush()
      urlmatch.c: add and use a *_release() function
      remote-curl.c: free memory in cmd_main()
      bundle: call strvec_clear() on allocated strvec
      transport: stop needlessly copying bundle header references
      submodule--helper: fix trivial leak in module_add()
      commit-graph: fix memory leak in misused string_list API
      commit-graph: stop fill_oids_from_packs() progress on error and free()
      lockfile API users: simplify and don't leak "path"
      range-diff: plug memory leak in common invocation
      range-diff: plug memory leak in read_patches()
      repository.c: free the "path cache" in repo_clear()
      submodule tests: test for init and update failure output
      submodule--helper: don't use bitfield indirection for parse_options()
      gettext API users: don't explicitly cast ngettext()'s "n"
      string-list API: change "nr" and "alloc" to "size_t"
      merge: don't run post-hook logic on --no-verify
      hooks: fix an obscure TOCTOU "did we just run a hook?" race
      tests: change some 'test $(git) = "x"' to test_cmp
      tests: use "test_stdout_line_count", not "test $(git [...] | wc -l)"
      read-tree tests: check "diff-files" exit code on failure
      diff tests: don't ignore "git diff" exit code
      diff tests: don't ignore "git diff" exit code in "read" loop
      apply tests: use "test_must_fail" instead of ad-hoc pattern
      merge tests: use "test_must_fail" instead of ad-hoc pattern
      rev-parse tests: don't ignore "git reflog" exit code
      notes tests: don't ignore "git" exit code
      diff tests: don't ignore "git rev-list" exit code
      rev-list tests: don't hide abort() in "test_expect_failure"
      gettext tests: don't ignore "test-tool regex" exit code
      apply tests: don't ignore "git ls-files" exit code, drop sub-shell
      checkout tests: don't ignore "git <cmd>" exit code
      rev-list simplify tests: don't ignore "git" exit code
      list-objects: handle NULL function pointers
      reflog: don't be noisy on empty reflogs
      builtin/submodule--helper.c: rename option struct to "opt"
      test-lib-functions: add and use a "test_hook" wrapper
      hook tests: turn exit code assertions into a loop
      http tests: don't rely on "hook/post-update.sample"
      tests: assume the hooks are disabled by default
      bugreport tests: tighten up "git bugreport -s hooks" test
      fetch+push tests: use "test_hook" and "test_when_finished" pattern
      gc + p4 tests: use "test_hook", remove sub-shells
      tests: change "cat && chmod +x" to use "test_hook"
      tests: change "mkdir -p && write_script" to use "test_hook"
      tests: use "test_hook" for misc "mkdir -p" and "chmod" cases
      diff.c: fix a double-free regression in a18d66cefb
      refs: use designated initializers for "struct ref_storage_be"
      refs: use designated initializers for "struct ref_iterator_vtable"
      misc *.c: use designated initializers for struct assignments
      packed-backend: remove stub BUG(...) functions
      refs debug: add a wrapper for "read_symbolic_ref"
      tests: extend "test_hook" for "rm" and "chmod -x", convert "$HOOK"
      proc-receive hook tests: use "test_hook" instead of "write_script"
      http tests: use "test_hook" for "smart" and "dumb" http tests
      reflog.c: indent argument lists
      reflog: refactor cmd_reflog() to "if" branches
      reflog tests: add missing "git reflog exists" tests
      reflog: move "usage" variables and use macros
      git reflog [expire|delete]: make -h output consistent with SYNOPSIS
      reflog exists: use parse_options() API
      Makefile: use ' ', not non-existing $(wspfx_SQ)
      ls-tree tests: add tests for --name-status
      ls-tree: remove commented-out code
      ls-tree: add missing braces to "else" arms
      ls-tree: use "enum object_type", not {blob,tree,commit}_type
      ls-tree: use "size_t", not "int" for "struct strbuf"'s "len"
      ls-tree: introduce struct "show_tree_data"
      ls-tree: introduce "--format" option
      ls-tree: detect and error on --name-only --name-status
      ls-tree: split up "fast path" callbacks
      hooks: fix "invoked hook" regression in a8cc5943338
      reflog: convert to parse_options() API
      reflog [show]: display sensible -h output
      test-lib: have --immediate emit valid TAP on failure
      pack-objects: lazily set up "struct rev_info", don't leak
      reftable: make assignments portable to AIX xlc v12.01
      Documentation/Makefile: fix "make info" regression in dad9cd7d518
      Documentation: add --batch-command to cat-file synopsis
      ls-tree doc: document interaction with submodules



^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.36.0-rc1
@ 2022-04-08 23:30  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2022-04-08 23:30 UTC (permalink / raw)
  To: git; +Cc: git-packagers

A release candidate Git v2.36.0-rc1 is now available for testing at
the usual places.  It is comprised of 673 non-merge commits since
v2.35.0, contributed by 85 people, 25 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.36.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.35.0 are as follows.
Welcome to the Git development community!

  Abhradeep Chakraborty, BRESSAT Jonathan, Chen Bojun,
  COGONI Guillaume, David Cantrell, Des Preston, Hongyi Zhao,
  Jason Yundt, Jayati Shrivastava, Jaydeep Das, Jaydeep P Das,
  Jose Lopes, Justin Donnelly, Kraymer, Liginity Lee, Matheus
  Felipe, Maximilian Reichel, Michael McClimon, Nihal Jere,
  Pedro Martelletto, Robert Coup, Sean Allred, Shaoxuan Yuan,
  Shubham Mishra, and Waleed Khan.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alex Henrie,
  Atharva Raykar, Bagas Sanjaya, Beat Bolli, brian m. carlson,
  Carlo Marcelo Arenas Belón, Christian Couder, Daniel Hahler,
  Derrick Stolee, Elia Pinto, Elijah Newren, Emily Shaffer,
  Eric Sunshine, Fabian Stelzer, Fangyi Zhou, Glen Choo, Greg
  Hurrell, Han-Wen Nienhuys, Jacob Keller, Jean-Noël Avila, Jeff
  Hostetler, Jeff King, Jerry Zhang, Jessica Clarke, Jiang Xin,
  Joel Holdsworth, Johannes Altmanninger, Johannes Schindelin,
  Johannes Sixt, John Cai, Jonathan Nieder, Jonathan Tan, Josh
  Steadmon, Junio C Hamano, Kevin Willford, Lessley Dennington,
  Marc Strapetz, Martin Ågren, Matt Cooper, Michael J Gruber,
  Neeraj Singh, Patrick Steinhardt, Philip Oakley, Philippe Blain,
  Phillip Wood, Ramkumar Ramachandra, Randall S. Becker, René
  Scharfe, Shourya Shukla, SZEDER Gábor, Tao Klerks, Taylor Blau,
  Teng Long, Thomas Gummerer, Thomas Koutcher, Tilman Vogel,
  Todd Zullinger, and Victoria Dye.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git 2.36 Release Notes (draft)
==============================

Updates since Git 2.35
----------------------

Backward compatibility warts

 * "git name-rev --stdin" has been deprecated and issues a warning
   when used; use "git name-rev --annotate-stdin" instead.

 * "git clone --filter=... --recurse-submodules" only makes the
   top-level a partial clone, while submodules are fully cloned.  This
   behaviour is changed to pass the same filter down to the submodules.


Note to those who build from the source

 * Since Git 2.31, our source assumed that the compiler you use to
   build Git supports variadic macros, with an easy-to-use escape
   hatch to allow compilation without variadic macros with an request
   to report that you had to use the escape hatch to the list.
   Because we haven't heard from anybody who actually needed to use
   the escape hatch, it has been removed, making support of variadic
   macros a hard requirement.


UI, Workflows & Features

 * Assorted updates to "git cat-file", especially "-h".

 * The command line completion (in contrib/) learns to complete
   arguments to give to "git sparse-checkout" command.

 * "git log --remerge-diff" shows the difference from mechanical merge
   result and the result that is actually recorded in a merge commit.

 * "git log" and friends learned an option --exclude-first-parent-only
   to propagate UNINTERESTING bit down only along the first-parent
   chain, just like --first-parent option shows commits that lack the
   UNINTERESTING bit only along the first-parent chain.

 * The command line completion script (in contrib/) learned to
   complete all Git subcommands, including the ones that are normally
   hidden, when GIT_COMPLETION_SHOW_ALL_COMMANDS is used.

 * "git branch" learned the "--recurse-submodules" option.

 * A not-so-common mistake is to write a script to feed "git bisect
   run" without making it executable, in which case all tests will
   exit with 126 or 127 error codes, even on revisions that are marked
   as good.  Try to recognize this situation and stop iteration early.

 * When "index-pack" dies due to incoming data exceeding the maximum
   allowed input size, include the value of the limit in the error
   message.

 * The error message given by "git switch HEAD~4" has been clarified
   to suggest the "--detach" option that is required.

 * In sparse-checkouts, files mis-marked as missing from the working tree
   could lead to later problems.  Such files were hard to discover, and
   harder to correct.  Automatically detecting and correcting the marking
   of such files has been added to avoid these problems.

 * "git cat-file" learns "--batch-command" mode, which is a more
   flexible interface than the existing "--batch" or "--batch-check"
   modes, to allow different kinds of inquiries made.

 * The level of verbose output from the ort backend during inner merge
   has been aligned to that of the recursive backend.

 * "git remote rename A B", depending on the number of remote-tracking
   refs involved, takes long time renaming them.  The command has been
   taught to show progress bar while making the user wait.

 * Bundle file format gets extended to allow a partial bundle,
   filtered by similar criteria you would give when making a
   partial/lazy clone.

 * A new built-in userdiff driver for kotlin has been added.

 * "git repack" learned a new configuration to disable triggering of
   age-old "update-server-info" command, which is rarely useful these
   days.

 * "git stash" does not allow subcommands it internally runs as its
   implementation detail, except for "git reset", to emit messages;
   now "git reset" part has also been squelched.

 * "git ls-tree" learns "--oid-only" option, similar to "--name-only",
   and more generalized "--format" option.

 * "git fetch --refetch" learned to fetch everything without telling
   the other side what we already have, which is useful when you
   cannot trust what you have in the local object store.

 * "git branch" gives hint when branch tracking cannot be established
   because fetch refspecs from multiple remote repositories overlap.

 * "git worktree list --porcelain" did not c-quote pathnames and lock
   reasons with unsafe bytes correctly, which is worked around by
   introducing NUL terminated output format with "-z".


Performance, Internal Implementation, Development Support etc.

 * "git apply" (ab)used the util pointer of the string-list to keep
   track of how each symbolic link needs to be handled, which has been
   simplified by using strset.

 * Fix a hand-rolled alloca() imitation that may have violated
   alignment requirement of data being sorted in compatibility
   implementation of qsort_s() and stable qsort().

 * Use the parse-options API in "git reflog" command.

 * The conditional inclusion mechanism of configuration files using
   "[includeIf <condition>]" learns to base its decision on the
   URL of the remote repository the repository interacts with.
   (merge 399b198489 jt/conditional-config-on-remote-url later to maint).

 * "git name-rev --stdin" does not behave like usual "--stdin" at
   all.  Start the process of renaming it to "--annotate-stdin".
   (merge a2585719b3 jc/name-rev-stdin later to maint).

 * "git update-index", "git checkout-index", and "git clean" are
   taught to work better with the sparse checkout feature.

 * Use an internal call to reset_head() helper function instead of
   spawning "git checkout" in "rebase", and update code paths that are
   involved in the change.

 * Messages "ort" merge backend prepares while dealing with conflicted
   paths were unnecessarily confusing since it did not differentiate
   inner merges and outer merges.

 * Small modernization of the rerere-train script (in contrib/).

 * Use designated initializers we started using in mid 2017 in more
   parts of the codebase that are relatively quiescent.

 * Improve failure case behaviour of xdiff library when memory
   allocation fails.

 * General clean-up in reftable implementation, including
   clarification of the API documentation, tightening the code to
   honor documented length limit, etc.

 * Remove the escape hatch we added when we introduced the weather
   balloon to use variadic macros unconditionally, to make it official
   that we now have a hard dependency on the feature.

 * Makefile refactoring with a bit of suffixes rule stripping to
   optimize the runtime overhead.

 * "git stash drop" is reimplemented as an internal call to
   reflog_delete() function, instead of invoking "git reflog delete"
   via run_command() API.

 * Count string_list items in size_t, not "unsigned int".

 * The single-key interactive operation used by "git add -p" has been
   made more robust.

 * Remove unneeded <meta http-equiv=content-type...> from gitweb
   output.

 * "git name-rev" learned to use the generation numbers when setting
   the lower bound of searching commits used to explain the revision,
   when available, instead of committer time.

 * Replace core.fsyncObjectFiles with two new configuration variables,
   core.fsync and core.fsyncMethod.

 * Updates to refs traditionally weren't fsync'ed, but we can
   configure using core.fsync variable to do so.

 * "git reflog" command now uses parse-options API to parse its
   command line options.


Fixes since v2.35
-----------------

 * "rebase" and "stash" in secondary worktrees are broken in
   Git 2.35.0, which has been corrected.

 * "git pull --rebase" ignored the rebase.autostash configuration
   variable when the remote history is a descendant of our history,
   which has been corrected.
   (merge 3013d98d7a pb/pull-rebase-autostash-fix later to maint).

 * "git update-index --refresh" has been taught to deal better with
   racy timestamps (just like "git status" already does).
   (merge 2ede073fd2 ms/update-index-racy later to maint).

 * Avoid tests that are run under GIT_TRACE2 set from failing
   unnecessarily.
   (merge 944d808e42 js/test-unset-trace2-parents later to maint).

 * The merge-ort misbehaved when merge.renameLimit configuration is
   set too low and failed to find all renames.
   (merge 9ae39fef7f en/merge-ort-restart-optim-fix later to maint).

 * We explain that revs come first before the pathspec among command
   line arguments, but did not spell out that dashed options come
   before other args, which has been corrected.
   (merge c11f95010c tl/doc-cli-options-first later to maint).

 * "git add -p" rewritten in C regressed hunk splitting in some cases,
   which has been corrected.
   (merge 7008ddc645 pw/add-p-hunk-split-fix later to maint).

 * "git fetch --negotiate-only" is an internal command used by "git
   push" to figure out which part of our history is missing from the
   other side.  It should never recurse into submodules even when
   fetch.recursesubmodules configuration variable is set, nor it
   should trigger "gc".  The code has been tightened up to ensure it
   only does common ancestry discovery and nothing else.
   (merge de4eaae63a gc/fetch-negotiate-only-early-return later to maint).

 * The code path that verifies signatures made with ssh were made to
   work better on a system with CRLF line endings.
   (merge caeef01ea7 fs/ssh-signing-crlf later to maint).

 * "git sparse-checkout init" failed to write into $GIT_DIR/info
   directory when the repository was created without one, which has
   been corrected to auto-create it.
   (merge 7f44842ac1 jt/sparse-checkout-leading-dir-fix later to maint).

 * Cloning from a repository that does not yet have any branches or
   tags but has other refs resulted in a "remote transport reported
   error", which has been corrected.
   (merge dccea605b6 jt/clone-not-quite-empty later to maint).

 * Mark in various places in the code that the sparse index and the
   split index features are mutually incompatible.
   (merge 451b66c533 js/sparse-vs-split-index later to maint).

 * Update the logic to compute alignment requirement for our mem-pool.
   (merge e38bcc66d8 jc/mem-pool-alignment later to maint).

 * Pick a better random number generator and use it when we prepare
   temporary filenames.
   (merge 47efda967c bc/csprng-mktemps later to maint).

 * Update the contributor-facing documents on proposed log messages.
   (merge cdba0295b0 jc/doc-log-messages later to maint).

 * When "git fetch --prune" failed to prune the refs it wanted to
   prune, the command issued error messages but exited with exit
   status 0, which has been corrected.
   (merge c9e04d905e tg/fetch-prune-exit-code-fix later to maint).

 * Problems identified by Coverity in the reftable code have been
   corrected.
   (merge 01033de49f hn/reftable-coverity-fixes later to maint).

 * A bug that made multi-pack bitmap and the object order out-of-sync,
   making the .midx data corrupt, has been fixed.
   (merge f8b60cf99b tb/midx-bitmap-corruption-fix later to maint).

 * The build procedure has been taught to notice older version of zlib
   and enable our replacement uncompress2() automatically.
   (merge 07564773c2 ab/auto-detect-zlib-compress2 later to maint).

 * Interaction between fetch.negotiationAlgorithm and
   feature.experimental configuration variables has been corrected.
   (merge 714edc620c en/fetch-negotiation-default-fix later to maint).

 * "git diff --diff-filter=aR" is now parsed correctly.
   (merge 75408ca949 js/diff-filter-negation-fix later to maint).

 * When "git subtree" wants to create a merge, it used "git merge" and
   let it be affected by end-user's "merge.ff" configuration, which
   has been corrected.
   (merge 9158a3564a tk/subtree-merge-not-ff-only later to maint).

 * Unlike "git apply", "git patch-id" did not handle patches with
   hunks that has only 1 line in either preimage or postimage, which
   has been corrected.
   (merge 757e75c81e jz/patch-id-hunk-header-parsing-fix later to maint).

 * "receive-pack" checks if it will do any ref updates (various
   conditions could reject a push) before received objects are taken
   out of the temporary directory used for quarantine purposes, so
   that a push that is known-to-fail will not leave crufts that a
   future "gc" needs to clean up.
   (merge 5407764069 cb/clear-quarantine-early-on-all-ref-update-errors later to maint).

 * Because a deletion of ref would need to remove it from both the
   loose ref store and the packed ref store, a delete-ref operation
   that logically removes one ref may end up invoking ref-transaction
   hook twice, which has been corrected.
   (merge 2ed1b64ebd ps/avoid-unnecessary-hook-invocation-with-packed-refs later to maint).

 * When there is no object to write .bitmap file for, "git
   multi-pack-index" triggered an error, instead of just skipping,
   which has been corrected.
   (merge eb57277ba3 tb/midx-no-bitmap-for-no-objects later to maint).

 * "git cmd -h" outside a repository should error out cleanly for many
   commands, but instead it hit a BUG(), which has been corrected.
   (merge 87ad07d735 js/short-help-outside-repo-fix later to maint).

 * "working tree" and "per-worktree ref" were in glossary, but
   "worktree" itself wasn't, which has been corrected.
   (merge 2df5387ed0 jc/glossary-worktree later to maint).

 * L10n support for a few error messages.
   (merge 3d3c23b3a7 bs/forbid-i18n-of-protocol-token-in-fetch-pack later to maint).

 * Test modernization.
   (merge d4fe066e4b sy/t0001-use-path-is-helper later to maint).

 * "git log --graph --graph" used to leak a graph structure, and there
   was no way to countermand "--graph" that appear earlier on the
   command line.  A "--no-graph" option has been added and resource
   leakage has been plugged.

 * Error output given in response to an ambiguous object name has been
   improved.
   (merge 3a73c1dfaf ab/ambiguous-object-name later to maint).

 * "git sparse-checkout" wants to work with per-worktree configuration,
   but did not work well in a worktree attached to a bare repository.
   (merge 3ce1138272 ds/sparse-checkout-requires-per-worktree-config later to maint).

 * Setting core.untrackedCache to true failed to add the untracked
   cache extension to the index.

 * Workaround we have for versions of PCRE2 before their version 10.36
   were in effect only for their versions newer than 10.36 by mistake,
   which has been corrected.
   (merge 97169fc361 rs/pcre-invalid-utf8-fix-fix later to maint).

 * Document Taylor as a new member of Git PLC at SFC.  Welcome.
   (merge e8d56ca863 tb/coc-plc-update later to maint).

 * "git checkout -b branch/with/multi/level/name && git stash" only
   recorded the last level component of the branch name, which has
   been corrected.

 * "git fetch" can make two separate fetches, but ref updates coming
   from them were in two separate ref transactions under "--atomic",
   which has been corrected.

 * Check the return value from parse_tree_indirect() to turn segfaults
   into calls to die().
   (merge 8d2eaf649a gc/parse-tree-indirect-errors later to maint).

 * Newer version of GPGSM changed its output in a backward
   incompatible way to break our code that parses its output.  It also
   added more processes our tests need to kill when cleaning up.
   Adjustments have been made to accommodate these changes.
   (merge b0b70d54c4 fs/gpgsm-update later to maint).

 * The untracked cache newly computed weren't written back to the
   on-disk index file when there is no other change to the index,
   which has been corrected.

 * "git config -h" did not describe the "--type" option correctly.
   (merge 5445124fad mf/fix-type-in-config-h later to maint).

 * The way generation number v2 in the commit-graph files are
   (not) handled has been corrected.
   (merge 6dbf4b8172 ds/commit-graph-gen-v2-fixes later to maint).

 * The method to trigger malloc check used in our tests no longer work
   with newer versions of glibc.
   (merge baedc59543 ep/test-malloc-check-with-glibc-2.34 later to maint).

 * When "git fetch --recurse-submodules" grabbed submodule commits
   that would be needed to recursively check out newly fetched commits
   in the superproject, it only paid attention to submodules that are
   in the current checkout of the superproject.  We now do so for all
   submodules that have been run "git submodule init" on.

 * "git rebase $base $non_branch_commit", when $base is an ancestor or
   the $non_branch_commit, modified the current branch, which has been
   corrected.

 * When "shallow" information is updated, we forgot to update the
   in-core equivalent, which has been corrected.

 * When creating a loose object file, we didn't report the exact
   filename of the file we failed to fsync, even though the
   information was readily available, which has been corrected.

 * "git am" can read from the standard input when no mailbox is given
   on the command line, but the end-user gets no indication when it
   happens, making Git appear stuck.
   (merge 7b20af6a06 jc/mailsplit-warn-on-tty later to maint).

 * "git mv" failed to refresh the cached stat information for the
   entry it moved.
   (merge b7f9130a06 vd/mv-refresh-stat later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge cfc5cf428b jc/find-header later to maint).
   (merge 40e7cfdd46 jh/p4-fix-use-of-process-error-exception later to maint).
   (merge 727e6ea350 jh/p4-spawning-external-commands-cleanup later to maint).
   (merge 0a6adc26e2 rs/grep-expr-cleanup later to maint).
   (merge 4ed7dfa713 po/readme-mention-contributor-hints later to maint).
   (merge 6046f7a91c en/plug-leaks-in-merge later to maint).
   (merge 8c591dbfce bc/clarify-eol-attr later to maint).
   (merge 518e15db74 rs/parse-options-lithelp-help later to maint).
   (merge cbac0076ef gh/doc-typos later to maint).
   (merge ce14de03db ab/no-errno-from-resolve-ref-unsafe later to maint).
   (merge 2826ffad8c rc/negotiate-only-typofix later to maint).
   (merge 0f03f04c5c en/sparse-checkout-leakfix later to maint).
   (merge 74f3390dde sy/diff-usage-typofix later to maint).
   (merge 45d0212a71 ll/doc-mktree-typofix later to maint).
   (merge e9b272e4c1 js/no-more-legacy-stash later to maint).
   (merge 6798b08e84 ab/do-not-hide-failures-in-git-dot-pm later to maint).
   (merge 9325285df4 po/doc-check-ignore-markup-fix later to maint).
   (merge cd26cd6c7c sy/modernize-t-lib-read-tree-m-3way later to maint).
   (merge d17294a05e ab/hash-object-leakfix later to maint).
   (merge b8403129d3 jd/t0015-modernize later to maint).
   (merge 332acc248d ds/mailmap later to maint).
   (merge 04bf052eef ab/grep-patterntype later to maint).
   (merge 6ee36364eb ab/diff-free-more later to maint).
   (merge 63a36017fe nj/read-tree-doc-reffix later to maint).
   (merge eed36fce38 sm/no-git-in-upstream-of-pipe-in-tests later to maint).
   (merge c614beb933 ep/t6423-modernize later to maint).
   (merge 57be9c6dee ab/reflog-prep-fix later to maint).
   (merge 5327d8982a js/in-place-reverse-in-sequencer later to maint).
   (merge 2e2c0be51e dp/worktree-repair-in-usage later to maint).
   (merge 6563706568 jc/coding-guidelines-decl-in-for-loop later to maint).

----------------------------------------------------------------

Changes since v2.35.0 are as follows:

Abhradeep Chakraborty (2):
      amend remaining usage strings according to style guide
      partial-clone: add a partial-clone test case

Adam Dinwoodie (2):
      configure.ac: fix HAVE_SYNC_FILE_RANGE definition
      t9902: split test to run on appropriate systems

Alex Henrie (3):
      log: fix memory leak if --graph is passed multiple times
      log: add a --no-graph option
      switch: mention the --detach option when dying due to lack of a branch

Atharva Raykar (5):
      submodule--helper: get remote names from any repository
      submodule--helper: refactor get_submodule_displaypath()
      submodule--helper: allow setting superprefix for init_submodule()
      submodule--helper: run update using child process struct
      submodule: move core cmd_update() logic to C

Bagas Sanjaya (1):
      fetch-pack: parameterize message containing 'ready' keyword

COGONI Guillaume (3):
      t/t3903-stash.sh: replace test [-d|-f] with test_path_is_*
      tests: allow testing if a path is truly a file or a directory
      tests: make the code more readable

Carlo Marcelo Arenas Belón (1):
      git-compat-util: really support openssl as a source of entropy

Chen Bojun (1):
      receive-pack: purge temporary data if no command is ready to run

David Cantrell (1):
      completion: tab completion of filenames for 'git restore'

Derrick Stolee (45):
      Documentation: add extensions.worktreeConfig details
      worktree: create init_worktree_config()
      config: add repo_config_set_worktree_gently()
      sparse-checkout: set worktree-config correctly
      worktree: copy sparse-checkout patterns and config on add
      config: make git_configset_get_string_tmp() private
      mailmap: change primary address for Derrick Stolee
      dir: force untracked cache with core.untrackedCache
      worktree: combine two translatable messages
      worktree: extract copy_filtered_worktree_config()
      worktree: extract copy_sparse_checkout()
      worktree: extract checkout_worktree()
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      test-read-graph: include extra post-parse info
      t5318: extract helpers to lib-commit-graph.sh
      commit-graph: fix ordering bug in generation numbers
      commit-graph: start parsing generation v2 (again)
      commit-graph: fix generation number v2 overflow values
      commit-graph: declare bankruptcy on GDAT chunks
      index-pack: document and test the --promisor option
      list-objects-filter-options: create copy helper
      revision: put object filter into struct rev_info
      pack-objects: use rev.filter when possible
      pack-bitmap: drop filter in prepare_bitmap_walk()
      list-objects: consolidate traverse_commit_list[_filtered]
      MyFirstObjectWalk: update recommended usage
      bundle: parse filter capability
      rev-list: move --filter parsing into revision.c
      bundle: create filtered bundles
      bundle: unbundle promisor packs
      clone: fail gracefully when cloning filtered bundle
      maintenance: fix synopsis in documentation
      list-objects-filter: remove CL_ARG__FILTER
      pack-objects: move revs out of get_object_list()
      pack-objects: parse --filter directly into revs.filter
      bundle: move capabilities to end of 'verify'
      bundle: output hash information in 'verify'
      t7700: check post-condition in kept-pack test
      test-lib-functions: remove test_subcommand_inexact

Des Preston (1):
      worktree: include repair cmd in usage

Elia Pinto (8):
      test-lib.sh: Use GLIBC_TUNABLES instead of MALLOC_CHECK_ on glibc >= 2.34
      t6423-merge-rename-directories.sh: use the $(...) construct
      attr.c: delete duplicate include
      builtin/gc.c: delete duplicate include
      builtin/sparse-checkout.c: delete duplicate include
      builtin/stash.c: delete duplicate include
      t/helper/test-run-command.c: delete duplicate include
      attr.h: remove duplicate struct definition

Elijah Newren (33):
      t1011: add testcase demonstrating accidental loss of user modifications
      unpack-trees: fix accidental loss of user changes
      repo_read_index: clear SKIP_WORKTREE bit from files present in worktree
      Update documentation related to sparsity and the skip-worktree bit
      Accelerate clear_skip_worktree_from_present_files() by caching
      merge-ort: avoid assuming all renames detected
      merge-ort: fix memory leak in merge_ort_internal()
      merge: fix memory leaks in cmd_merge()
      sequencer, stash: fix running from worktree subdir
      sparse-checkout: fix a couple minor memory leaks
      repo-settings: fix checking for fetch.negotiationAlgorithm=default
      repo-settings: fix error handling for unknown values
      repo-settings: rename the traditional default fetch.negotiationAlgorithm
      show, log: provide a --remerge-diff capability
      log: clean unneeded objects during `log --remerge-diff`
      ll-merge: make callers responsible for showing warnings
      merge-ort: capture and print ll-merge warnings in our preferred fashion
      merge-ort: mark a few more conflict messages as omittable
      merge-ort: format messages slightly different for use in headers
      diff: add ability to insert additional headers for paths
      show, log: include conflict/warning messages in --remerge-diff headers
      merge-ort: mark conflict/warning messages from inner merges as omittable
      diff-merges: avoid history simplifications when diffing merges
      merge-ort: make informational messages from recursive merges clearer
      sparse-checkout: correct reapply's handling of options
      sparse-checkout: correctly set non-cone mode when expected
      sparse-checkout: pay attention to prefix for {set, add}
      sparse-checkout: error or warn when given individual files
      sparse-checkout: reject arguments in cone-mode that look like patterns
      merge-ort: fix small memory leak in detect_and_process_renames()
      merge-ort: fix small memory leak in unique_path()
      merge-ort: exclude messages from inner merges by default
      repo_read_index: add config to expect files outside sparse patterns

Emily Shaffer (14):
      hook: add 'run' subcommand
      gc: use hook library for pre-auto-gc hook
      am: convert {pre,post}-applypatch to use hook.h
      rebase: convert pre-rebase to use hook.h
      am: convert applypatch-msg to use hook.h
      merge: convert post-merge to use hook.h
      hooks: convert non-worktree 'post-checkout' hook to hook library
      hooks: convert worktree 'post-checkout' hook to hook library
      send-email: use 'git hook run' for 'sendemail-validate'
      git-p4: use 'git hook' to run hooks
      commit: convert {pre-commit,prepare-commit-msg} hook to hook.h
      read-cache: convert post-index-change to use hook.h
      receive-pack: convert push-to-checkout hook to hook.h
      run-command: remove old run_hook_{le,ve}() hook API

Fabian Stelzer (2):
      gpg-interface: trim CR from ssh-keygen
      gpg-interface/gpgsm: fix for v2.3

Fangyi Zhou (1):
      submodule-helper: fix usage string

Glen Choo (39):
      fetch: use goto cleanup in cmd_fetch()
      fetch: skip tasks related to fetching objects
      fetch --negotiate-only: do not update submodules
      branch: move --set-upstream-to behavior to dwim_and_setup_tracking()
      branch: make create_branch() always create a branch
      branch: add a dry_run parameter to create_branch()
      builtin/branch: consolidate action-picking logic in cmd_branch()
      branch: add --recurse-submodules option for branch creation
      branch.c: use 'goto cleanup' in setup_tracking() to fix memory leaks
      stash: strip "refs/heads/" with skip_prefix
      checkout, clone: die if tree cannot be parsed
      submodule--helper: remove update-module-mode
      submodule--helper: reorganize code for sh to C conversion
      submodule--helper run-update-procedure: remove --suboid
      submodule--helper run-update-procedure: learn --remote
      submodule--helper update-clone: learn --init
      submodule--helper: remove ensure-core-worktree
      submodule update: add tests for --filter
      submodule--helper update-clone: check for --filter and --init
      t5526: introduce test helper to assert on fetches
      t5526: stop asserting on stderr literally
      t5526: create superproject commits with test helper
      submodule: make static functions read submodules from commits
      submodule: inline submodule_commits() into caller
      submodule: store new submodule commits oid_array in a struct
      submodule: extract get_fetch_task()
      submodule: move logic into fetch_task_create()
      submodule update: use die_message()
      submodule--helper: teach update_data more options
      submodule--helper: reduce logic in run_update_procedure()
      submodule--helper: remove forward declaration
      fetch: fetch unpopulated, changed submodules
      submodule: fix latent check_has_commit() bug
      branch: support more tracking modes when recursing
      branch: give submodule updating advice before exit
      branch --set-upstream-to: be consistent when advising
      branch: remove negative exit code
      branch: rework comments for future developers
      branch.c: simplify advice-and-die sequence

Greg Hurrell (2):
      Documentation/config/pgp.txt: replace stray <TAB> character with <SPC>
      Documentation/config/pgp.txt: add missing apostrophe

Han-Wen Nienhuys (27):
      reftable: fix OOB stack write in print functions
      reftable: fix resource leak in block.c error path
      reftable: fix resource leak blocksource.c
      reftable: check reftable_stack_auto_compact() return value
      reftable: ignore remove() return value in stack_test.c
      reftable: fix resource warning
      reftable: all xxx_free() functions accept NULL arguments
      reftable: order unittests by complexity
      reftable: drop stray printf in readwrite_test
      reftable: handle null refnames in reftable_ref_record_equal
      reftable: make reftable-record.h function signatures const correct
      reftable: implement record equality generically
      reftable: remove outdated file reftable.c
      reftable: make reftable_record a tagged union
      reftable: add print functions to the record types
      t1405: explictly delete reflogs for reftable
      t1405: mark test that checks existence as REFFILES
      t5312: prepare for reftable
      t1410: use test-tool ref-store to inspect reflogs
      t1410: mark bufsize boundary test as REFFILES
      Documentation: object_id_len goes up to 31
      reftable: reject 0 object_id_len
      reftable: add a test that verifies that writing empty keys fails
      reftable: avoid writing empty keys at the block layer
      reftable: ensure that obj_id_len is >= 2 on writing
      reftable: add test for length of disambiguating prefix
      reftable: rename writer_stats to reftable_writer_stats

Jacob Keller (1):
      name-rev: use generation numbers if available

Jason Yundt (2):
      comment: fix typo
      gitweb: remove invalid http-equiv="content-type"

Jayati Shrivastava (1):
      sequencer: use reverse_commit_list() helper

Jaydeep Das (1):
      t/t0015-hash.sh: remove unnecessary '\' at line end

Jaydeep P Das (1):
      userdiff: add builtin diff driver for kotlin language.

Jean-Noël Avila (4):
      i18n: factorize more 'incompatible options' messages
      i18n: factorize "invalid value" messages
      i18n: remove from i18n strings that do not hold translatable parts
      i18n: fix some misformated placeholders in command synopsis

Jeff Hostetler (30):
      fsmonitor: enhance existing comments, clarify trivial response handling
      fsmonitor-ipc: create client routines for git-fsmonitor--daemon
      fsmonitor: config settings are repository-specific
      fsmonitor: use IPC to query the builtin FSMonitor daemon
      fsmonitor: document builtin fsmonitor
      fsmonitor--daemon: add a built-in fsmonitor daemon
      fsmonitor--daemon: implement 'stop' and 'status' commands
      compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
      compat/fsmonitor/fsm-listen-darwin: stub in backend for Darwin
      fsmonitor--daemon: implement 'run' command
      fsmonitor--daemon: implement 'start' command
      fsmonitor--daemon: add pathname classification
      fsmonitor--daemon: define token-ids
      fsmonitor--daemon: create token-based changed path cache
      compat/fsmonitor/fsm-listen-win32: implement FSMonitor backend on Windows
      compat/fsmonitor/fsm-listen-darwin: add MacOS header files for FSEvent
      compat/fsmonitor/fsm-listen-darwin: implement FSEvent listener on MacOS
      fsmonitor--daemon: implement handle_client callback
      help: include fsmonitor--daemon feature flag in version info
      t/helper/fsmonitor-client: create IPC client to talk to FSMonitor Daemon
      t7527: create test for fsmonitor--daemon
      t/perf: avoid copying builtin fsmonitor files into test repo
      t/helper/test-chmtime: skip directories on Windows
      t/perf/p7519: fix coding style
      t/perf/p7519: speed up test on Windows
      t/perf/p7519: add fsmonitor--daemon test cases
      fsmonitor--daemon: periodically truncate list of modified files
      fsmonitor--daemon: use a cookie file to sync with file system
      fsmonitor: force update index after large responses
      t7527: test status with untracked-cache and fsmonitor--daemon

Jerry Zhang (3):
      git-rev-list: add --exclude-first-parent-only flag
      patch-id: fix antipatterns in tests
      patch-id: fix scan_hunk_header on diffs with 1 line of before/after

Jessica Clarke (1):
      mem-pool: don't assume uintmax_t is aligned enough for all types

Joel Holdsworth (4):
      git-p4: don't select shell mode using the type of the command argument
      git-p4: pass command arguments as lists instead of using shell
      git-p4: don't print shell commands as python lists
      git-p4: fix instantiation of CalledProcessError

Johannes Schindelin (14):
      sparse-index: sparse index is disallowed when split index is active
      t1091: disable split index
      split-index: it really is incompatible with the sparse index
      git-sh-setup: remove remnant bits referring to `git-legacy-stash`
      add: remove support for `git-legacy-stash`
      stash: remove documentation for `stash.useBuiltin`
      stash: stop warning about the obsolete `stash.useBuiltin` config setting
      docs(diff): lose incorrect claim about `diff-files --diff-filter=A`
      diff.c: move the diff filter bits definitions up a bit
      diff-filter: be more careful when looking for negative bits
      scalar: accept -C and -c options before the subcommand
      checkout/fetch/pull/pack-objects: allow `-h` outside a repository
      t0012: verify that built-ins handle `-h` even without gitdir
      cocci: allow padding with `strbuf_addf()`

John Cai (15):
      receive-pack.c: consolidate find header logic
      name-rev: deprecate --stdin in favor of --annotate-stdin
      name-rev.c: use strbuf_getline instead of limited size buffer
      builtin/reflog.c: use parse-options api for expire, delete subcommands
      name-rev: replace --stdin with --annotate-stdin in synopsis
      cat-file: rename cmdmode to transform_mode
      cat-file: introduce batch_mode enum to replace print_contents
      cat-file: add remove_timestamp helper
      cat-file: add --batch-command mode
      stash: add tests to ensure reflog --rewrite --updatref behavior
      reflog: libify delete reflog function and helpers
      stash: call reflog_delete() in reflog.c
      cat-file: skip expanding default format
      rebase: use test_commit helper in setup
      rebase: set REF_HEAD_DETACH in checkout_up_to_date()

Jonathan Tan (6):
      config: make git_config_include() static
      config: include file if remote URL matches a glob
      sparse-checkout: create leading directory
      clone: support unusual remote ref configurations
      ls-files: support --recurse-submodules --stage
      shallow: reset commit grafts when shallow is reset

Josh Steadmon (3):
      test-lib: unset trace2 parent envvars
      clone, submodule: pass partial clone filters to submodules
      ls-tree: `-l` should not imply recursive listing

Junio C Hamano (32):
      compat/qsort_s.c: avoid using potentially unaligned access
      fetch: help translators by reusing the same message template
      Start post 2.35 cycle
      SubmittingPatches: write problem statement in the log in the present tense
      CodingGuidelines: hint why we value clearly written log messages
      SubmittingPatches: explain why we care about log messages
      Git 2.35.1
      Name the next one 2.36 to prepare for 2.35.1
      The first batch
      The second batch for 2.36
      glossary: describe "worktree"
      The third batch
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      rerere-train: two fixes to the use of "git show -s"
      am/apply: warn if we end up reading patches from terminal
      The ninth batch
      The tenth batch
      The eleventh batch
      The twelfth batch
      The thirteenth batch
      The 14th batch
      reset: show --no-refresh in the short-help
      The 15th batch
      The 16th batch
      The 17th batch
      CodingGuidelines: give deadline for "for (int i = 0; ..."
      Git 2.36-rc0
      Git 2.36-rc1

Justin Donnelly (4):
      git-prompt: rename `upstream` to `upstream_type`
      git-prompt: make upstream state indicator location consistent
      git-prompt: make long upstream state indicator consistent
      git-prompt: put upstream comments together

Lessley Dennington (3):
      completion: address sparse-checkout issues
      completion: improve sparse-checkout cone mode directory completion
      completion: handle unusual characters for sparse-checkout

Liginity Lee (1):
      fix typo in git-mktree.txt

Marc Strapetz (4):
      test-lib: introduce API for verifying file mtime
      t7508: fix bogus mtime verification
      t7508: add tests capturing racy timestamp handling
      update-index: refresh should rewrite index in case of racy timestamps

Martin Ågren (1):
      git-ls-tree.txt: fix the name of "%(objectsize:padded)"

Matheus Felipe (1):
      config: correct "--type" option in "git config -h" output

Matt Cooper (1):
      index-pack: clarify the breached limit

Michael J Gruber (2):
      test-lib: declare local variables as local
      tests: demonstrate "show --word-diff --color-moved" regression

Neeraj Singh (10):
      wrapper: make inclusion of Windows csprng header tightly scoped
      core.fsyncmethod: add writeout-only mode
      core.fsync: introduce granular fsync control infrastructure
      core.fsync: add configuration parsing
      core.fsync: new option to harden the index
      core.fsync: documentation and user-friendly aggregate options
      core.fsync: fix incorrect expression for default configuration
      trace2: add stats for fsync operations
      core.fsyncmethod: correctly camel-case warning message
      object-file: pass filename to fsync_or_die

Nihal Jere (1):
      Documentation: git-read-tree: separate links using commas

Patrick Steinhardt (24):
      refs: extract packed_refs_delete_refs() to allow control of transaction
      refs: allow passing flags when beginning transactions
      refs: allow skipping the reference-transaction hook
      refs: demonstrate excessive execution of the reference-transaction hook
      refs: do not execute reference-transaction hook on packing refs
      refs: skip hooks when deleting uncovered packed refs
      fetch-pack: use commit-graph when computing cutoff
      fetch: skip computing output width when not printing anything
      fetch: increase test coverage of fetches
      fetch: backfill tags before setting upstream
      fetch: control lifecycle of FETCH_HEAD in a single place
      fetch: report errors when backfilling tags fails
      refs: add interface to iterate over queued transactional updates
      fetch: make `--atomic` flag cover backfilling of tags
      fetch: make `--atomic` flag cover pruning of refs
      upload-pack: look up "want" lines via commit-graph
      fetch: avoid lookup of commits when not appending to FETCH_HEAD
      refs: add ability for backends to special-case reading of symbolic refs
      remote: read symbolic refs via `refs_read_symbolic_ref()`
      refs/files-backend: optimize reading of symbolic refs
      t5503: simplify setup of test which exercises failure of backfill
      repack: refactor to avoid double-negation of update-server-info
      repack: add config to skip updating server info
      core.fsync: new option to harden references

Philip Oakley (2):
      README.md: add CodingGuidelines and a link for Translators
      doc: check-ignore: code-quote an exclamation mark

Philippe Blain (1):
      pull --rebase: honor rebase.autostash when fast-forwarding

Phillip Wood (29):
      t3701: clean up hunk splitting tests
      builtin add -p: fix hunk splitting
      rebase: factor out checkout for up to date branch
      t5403: refactor rebase post-checkout hook tests
      rebase: pass correct arguments to post-checkout hook
      rebase: do not remove untracked files on checkout
      rebase --apply: don't run post-checkout hook if there is an error
      reset_head(): remove action parameter
      reset_head(): factor out ref updates
      reset_head(): make default_reflog_action optional
      create_autostash(): remove unneeded parameter
      rebase: cleanup reset_head() calls
      reset_head(): take struct rebase_head_opts
      rebase --apply: fix reflog
      rebase --apply: set ORIG_HEAD correctly
      rebase -m: don't fork git checkout
      xdiff: fix a memory leak
      xdiff: handle allocation failure in patience diff
      xdiff: refactor a function
      xdiff: handle allocation failure when merging
      terminal: always reset terminal when reading without echo
      terminal: pop signal handler when terminal is restored
      terminal: set VMIN and VTIME in non-canonical mode
      add -p: disable stdin buffering when interactive.singlekey is set
      terminal: use flags for save_term()
      terminal: don't assume stdin is /dev/tty
      terminal: work around macos poll() bug
      terminal: restore settings on SIGTSTP
      worktree: add -z option for list subcommand

René Scharfe (10):
      grep: use grep_or_expr() in compile_pattern_or()
      grep: use grep_not_expr() in compile_pattern_not()
      apply: use strsets to track symlinks
      stable-qsort: avoid using potentially unaligned access
      bisect--helper: report actual bisect_state() argument on error
      bisect--helper: release strbuf and strvec on run error
      bisect: document run behavior with exit codes 126 and 127
      bisect--helper: double-check run command on exit code 126 and 127
      parse-options: document bracketing of argh
      grep: fix triggering PCRE2_NO_START_OPTIMIZE workaround

Robert Coup (8):
      fetch: fix negotiate-only error message
      fetch-negotiator: add specific noop initializer
      fetch-pack: add refetch
      builtin/fetch-pack: add --refetch option
      fetch: add --refetch option
      t5615-partial-clone: add test for fetch --refetch
      fetch: after refetch, encourage auto gc repacking
      docs: mention --refetch fetch option

SZEDER Gábor (1):
      reflog: fix 'show' subcommand's argv

Shaoxuan Yuan (4):
      builtin/diff.c: fix "git-diff" usage string typo
      t/lib-read-tree-m-3way: modernize style
      t/lib-read-tree-m-3way: indent with tabs
      t0001: replace "test [-d|-f]" with test_path_is_* functions

Shubham Mishra (3):
      t0003: avoid pipes with Git on LHS
      t0001-t0028: avoid pipes with Git on LHS
      t0030-t0050: avoid pipes with Git on LHS

Tao Klerks (6):
      t7519: avoid file to index mtime race for untracked cache
      t7519: populate untracked cache before test
      untracked-cache: write index when populating empty untracked cache
      t/helper/test-chmtime: update mingw to support chmtime on directories
      t7063: mtime-mangling instead of delays in untracked cache testing
      tracking branches: add advice to ambiguous refspec error

Taylor Blau (15):
      grep: extract grep_binexp() from grep_or_expr()
      grep: use grep_and_expr() in compile_pattern_and()
      t5326: demonstrate bitmap corruption after permutation
      midx.c: make changing the preferred pack safe
      pack-revindex.c: instrument loading on-disk reverse index
      t5326: drop unnecessary setup
      t5326: extract `test_rev_exists`
      t5326: move tests to t/lib-bitmap.sh
      t/lib-bitmap.sh: parameterize tests over reverse index source
      midx: read `RIDX` chunk when present
      pack-bitmap.c: gracefully fallback after opening pack/MIDX
      midx: prevent writing a .bitmap without any objects
      CODE_OF_CONDUCT.md: update PLC members list
      builtin/remote.c: parse options in 'rename'
      builtin/remote.c: show progress when renaming remote references

Teng Long (6):
      git-cli.txt: clarify "options first and then args"
      ls-tree: rename "retval" to "recurse" in "show_tree()"
      ls-tree: simplify nesting if/else logic in "show_tree()"
      ls-tree: fix "--name-only" and "--long" combined use bug
      ls-tree: slightly refactor `show_tree()`
      ls-tree: support --object-only option for "git-ls-tree"

Thomas Gummerer (1):
      fetch --prune: exit with error if pruning fails

Thomas Koutcher (1):
      subtree: force merge commit

Todd Zullinger (3):
      t/lib-gpg: reload gpg components after updating trustlist
      t/lib-gpg: kill all gpg components, not just gpg-agent
      doc: replace "--" with {litdd} in credential-cache/fsmonitor

Victoria Dye (30):
      reset: fix validation in sparse index test
      reset: reorder wildcard pathspec conditions
      clean: integrate with sparse index
      checkout-index: expand sparse checkout compatibility tests
      checkout-index: add --ignore-skip-worktree-bits option
      checkout-index: integrate with sparse index
      update-index: add tests for sparse-checkout compatibility
      update-index: integrate with sparse index
      update-index: reduce scope of index expansion in do_reupdate
      sparse-index: prevent repo root from becoming sparse
      status: fix nested sparse directory diff in sparse index
      read-tree: explicitly disallow prefixes with a leading '/'
      read-tree: expand sparse checkout test coverage
      read-tree: integrate with sparse index
      read-tree: narrow scope of index expansion for '--prefix'
      read-tree: make two-way merge sparse-aware
      read-tree: make three-way merge sparse-aware
      reset: revise index refresh advice
      reset: introduce --[no-]refresh option to --mixed
      reset: replace '--quiet' with '--no-refresh' in performance advice
      reset: suppress '--no-refresh' advice if logging is silenced
      stash: make internal resets quiet and refresh index
      t1092: add sparse directory before cone in test repo
      unpack-trees: increment cache_bottom for sparse directories
      Revert "unpack-trees: improve performance of next_cache_entry"
      reset: do not make '--quiet' disable index refresh
      reset: remove 'reset.quiet' config option
      reset: remove 'reset.refresh' config option
      mv: refresh stat info for moved entry
      contrib/scalar: fix 'all' target in Makefile

brian m. carlson (6):
      t0027: add tests for eol without text in .gitattributes
      docs: correct documentation about eol attribute
      wrapper: add a helper to generate numbers from a CSPRNG
      wrapper: use a CSPRNG to generate random file names
      doc: clarify interaction between 'eol' and text=auto
      block-sha1: remove use of obsolete x86 assembly

Ævar Arnfjörð Bjarmason (186):
      cat-file tests: test bad usage
      cat-file tests: test messaging on bad objects/paths
      parse-options API: add a usage_msg_optf()
      cat-file docs: fix SYNOPSIS and "-h" output
      cat-file: move "usage" variable to cmd_cat_file()
      cat-file: make --batch-all-objects a CMDMODE
      cat-file: fix remaining usage bugs
      cat-file: correct and improve usage information
      object-name.c: don't have GET_OID_ONLY_TO_DIE imply *_QUIETLY
      cat-file: use GET_OID_ONLY_TO_DIE in --(textconv|filters)
      hook API: add a run_hooks() wrapper
      hook API: add a run_hooks_l() wrapper
      git hook run: add an --ignore-missing flag
      cat-file: don't whitespace-pad "(...)" in SYNOPSIS and usage output
      cat-file: s/_/-/ in typo'd usage_msg_optf() message
      compat: auto-detect if zlib has uncompress2()
      sequencer: don't use die_errno() on refs_resolve_ref_unsafe() failure
      refs API: remove "failure_errno" from refs_resolve_ref_unsafe()
      object-name tests: add tests for ambiguous object blind spots
      object-name: explicitly handle OBJ_BAD in show_ambiguous_object()
      object-name: explicitly handle bad tags in show_ambiguous_object()
      object-name: make ambiguous object output translatable
      object-name: show date for ambiguous tag objects
      object-name: iterate ambiguous objects before showing header
      object-name: re-use "struct strbuf" in show_ambiguous_object()
      perl Git.pm: don't ignore signalled failure in _cmd_close()
      completion tests: re-source git-completion.bash in a subshell
      completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS
      leak tests: fix a memory leak in "test-progress" helper
      progress.c test helper: add missing braces
      progress.c tests: make start/stop commands on stdin
      progress.c tests: test some invalid usage
      progress.h: format and be consistent with progress.c naming
      progress.c: use dereferenced "progress" variable, not "(*p_progress)"
      progress.c: refactor stop_progress{,_msg}() to use helpers
      progress API: unify stop_progress{,_msg}(), fix trace2 bug
      pack-bitmap-write.c: don't return without stop_progress()
      t0051: use "skip_all" under !MINGW in single-test file
      hash-object: fix a trivial leak in --path
      ls-remote & transport API: release "struct transport_ls_refs_options"
      grep.h: remove unused "regex_t regexp" from grep_opt
      log tests: check if grep_config() is called by "log"-like cmds
      grep tests: create a helper function for "BRE" or "ERE"
      grep tests: add missing "grep.patternType" config tests
      built-ins: trust the "prefix" from run_builtin()
      grep.c: don't pass along NULL callback value
      grep API: call grep_config() after grep_init()
      grep.h: make "grep_opt.pattern_type_option" use its enum
      grep.c: do "if (bool && memchr())" not "if (memchr() && bool)"
      grep: simplify config parsing and option parsing
      cache.h: remove always unused show_date_human() declaration
      date API: create a date.h, split from cache.h
      date API: provide and use a DATE_MODE_INIT
      date API: add basic API docs
      date API: add and use a date_mode_release()
      diff.[ch]: have diff_free() call clear_pathspec(opts.pathspec)
      diff.[ch]: have diff_free() free options->parseopts
      hook tests: test for exact "pre-push" hook input
      hook tests: use a modern style for "pre-push" tests
      git-compat-util.h: clarify GCC v.s. C99-specific in comment
      C99: remove hardcoded-out !HAVE_VARIADIC_MACROS code
      help doc: add missing "]" to "[-a|--all]"
      help.c: use puts() instead of printf{,_ln}() for consistency
      help tests: test "git" and "git help [-a|-g] spacing
      help.c: split up list_all_cmds_help() function
      help: note the option name on option incompatibility
      help: correct usage & behavior of "git help --all"
      help: error if [-a|-g|-c] and [-i|-m|-w] are combined
      help: add --no-[external-commands|aliases] for use with --all
      help: don't print "\n" before single-section output
      imap-send.c: use designated initializers for "struct imap_server_conf"
      trace2: use designated initializers for "struct tr2_tgt"
      trace2: use designated initializers for "struct tr2_dst"
      object-file: use designated initializers for "struct git_hash_algo"
      archive-*.c: use designated initializers for "struct archiver"
      userdiff.c: use designated initializers for "struct userdiff_driver"
      convert.c: use designated initializers for "struct stream_filter*"
      refspec.c: use designated initializers for "struct refspec_item"
      fast-import.c: use designated initializers for "partial" struct assignments
      object-file.c: split up declaration of unrelated variables
      object-file API: return "void", not "int" from hash_object_file()
      object-file API: add a format_object_header() function
      object-file API: have write_object_file() take "enum object_type"
      object API: correct "buf" v.s. "map" mismatch in *.c and *.h
      object API docs: move check_object_signature() docs to cache.h
      object API users + docs: check <0, not !0 with check_object_signature()
      object-file API: split up and simplify check_object_signature()
      object API: rename hash_object_file_literally() to write_*()
      object-file API: have hash_object_file() take "enum object_type"
      object-file.c: add a literal version of write_object_file_prepare()
      object-file API: pass an enum to read_object_with_reference()
      test-lib: add GIT_SAN_OPTIONS, inherit [AL]SAN_OPTIONS
      test-lib: correct and assert TEST_DIRECTORY overriding
      test-lib: make $GIT_BUILD_DIR an absolute path
      test-lib: add "fast_unwind_on_malloc=0" to LSAN_OPTIONS
      scalar Makefile: use "The default target of..." pattern
      Makefiles: add "shared.mak", move ".DELETE_ON_ERROR" to it
      Makefile: disable GNU make built-in wildcard rules
      Makefile: define $(LIB_H) in terms of $(FIND_SOURCE_FILES)
      Makefile: move ".SUFFIXES" rule to shared.mak
      Makefile: move $(comma), $(empty) and $(space) to shared.mak
      Makefile: add "$(QUIET)" boilerplate to shared.mak
      Makefiles: add and use wildcard "mkdir -p" template
      log tests: fix "abort tests early" regression in ff37a60c369
      index-pack: fix memory leaks
      merge-base: free() allocated "struct commit **" list
      diff.c: free "buf" in diff_words_flush()
      urlmatch.c: add and use a *_release() function
      remote-curl.c: free memory in cmd_main()
      bundle: call strvec_clear() on allocated strvec
      transport: stop needlessly copying bundle header references
      submodule--helper: fix trivial leak in module_add()
      commit-graph: fix memory leak in misused string_list API
      commit-graph: stop fill_oids_from_packs() progress on error and free()
      lockfile API users: simplify and don't leak "path"
      range-diff: plug memory leak in common invocation
      range-diff: plug memory leak in read_patches()
      repository.c: free the "path cache" in repo_clear()
      submodule tests: test for init and update failure output
      submodule--helper: don't use bitfield indirection for parse_options()
      gettext API users: don't explicitly cast ngettext()'s "n"
      string-list API: change "nr" and "alloc" to "size_t"
      merge: don't run post-hook logic on --no-verify
      hooks: fix an obscure TOCTOU "did we just run a hook?" race
      tests: change some 'test $(git) = "x"' to test_cmp
      tests: use "test_stdout_line_count", not "test $(git [...] | wc -l)"
      read-tree tests: check "diff-files" exit code on failure
      diff tests: don't ignore "git diff" exit code
      diff tests: don't ignore "git diff" exit code in "read" loop
      apply tests: use "test_must_fail" instead of ad-hoc pattern
      merge tests: use "test_must_fail" instead of ad-hoc pattern
      rev-parse tests: don't ignore "git reflog" exit code
      notes tests: don't ignore "git" exit code
      diff tests: don't ignore "git rev-list" exit code
      rev-list tests: don't hide abort() in "test_expect_failure"
      gettext tests: don't ignore "test-tool regex" exit code
      apply tests: don't ignore "git ls-files" exit code, drop sub-shell
      checkout tests: don't ignore "git <cmd>" exit code
      rev-list simplify tests: don't ignore "git" exit code
      list-objects: handle NULL function pointers
      reflog: don't be noisy on empty reflogs
      builtin/submodule--helper.c: rename option struct to "opt"
      test-lib-functions: add and use a "test_hook" wrapper
      hook tests: turn exit code assertions into a loop
      http tests: don't rely on "hook/post-update.sample"
      tests: assume the hooks are disabled by default
      bugreport tests: tighten up "git bugreport -s hooks" test
      fetch+push tests: use "test_hook" and "test_when_finished" pattern
      gc + p4 tests: use "test_hook", remove sub-shells
      tests: change "cat && chmod +x" to use "test_hook"
      tests: change "mkdir -p && write_script" to use "test_hook"
      tests: use "test_hook" for misc "mkdir -p" and "chmod" cases
      diff.c: fix a double-free regression in a18d66cefb
      refs: use designated initializers for "struct ref_storage_be"
      refs: use designated initializers for "struct ref_iterator_vtable"
      misc *.c: use designated initializers for struct assignments
      packed-backend: remove stub BUG(...) functions
      refs debug: add a wrapper for "read_symbolic_ref"
      tests: extend "test_hook" for "rm" and "chmod -x", convert "$HOOK"
      proc-receive hook tests: use "test_hook" instead of "write_script"
      http tests: use "test_hook" for "smart" and "dumb" http tests
      reflog.c: indent argument lists
      reflog: refactor cmd_reflog() to "if" branches
      reflog tests: add missing "git reflog exists" tests
      reflog: move "usage" variables and use macros
      git reflog [expire|delete]: make -h output consistent with SYNOPSIS
      reflog exists: use parse_options() API
      Makefile: use ' ', not non-existing $(wspfx_SQ)
      ls-tree tests: add tests for --name-status
      ls-tree: remove commented-out code
      ls-tree: add missing braces to "else" arms
      ls-tree: use "enum object_type", not {blob,tree,commit}_type
      ls-tree: use "size_t", not "int" for "struct strbuf"'s "len"
      ls-tree: introduce struct "show_tree_data"
      ls-tree: introduce "--format" option
      ls-tree: detect and error on --name-only --name-status
      ls-tree: split up "fast path" callbacks
      hooks: fix "invoked hook" regression in a8cc5943338
      reflog: convert to parse_options() API
      reflog [show]: display sensible -h output
      test-lib: have --immediate emit valid TAP on failure
      pack-objects: lazily set up "struct rev_info", don't leak
      reftable: make assignments portable to AIX xlc v12.01
      Documentation/Makefile: fix "make info" regression in dad9cd7d518
      Documentation: add --batch-command to cat-file synopsis
      ls-tree doc: document interaction with submodules


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.36.0-rc0
@ 2022-04-04 20:43  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2022-04-04 20:43 UTC (permalink / raw)
  To: git; +Cc: git-packagers

An early preview release Git v2.36.0-rc0 is now available for
testing at the usual places.  It is comprised of 661 non-merge
commits since v2.35.0, contributed by 80 people, 25 of which are
new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.36.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.35.0 are as follows.
Welcome to the Git development community!

  Abhradeep Chakraborty, BRESSAT Jonathan, Chen Bojun,
  COGONI Guillaume, David Cantrell, Des Preston, Hongyi Zhao,
  Jason Yundt, Jayati Shrivastava, Jaydeep Das, Jaydeep P Das,
  Jose Lopes, Justin Donnelly, Kraymer, Liginity Lee, Matheus
  Felipe, Maximilian Reichel, Michael McClimon, Nihal Jere,
  Pedro Martelletto, Robert Coup, Sean Allred, Shaoxuan Yuan,
  Shubham Mishra, and Waleed Khan.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alex Henrie, Atharva Raykar,
  Bagas Sanjaya, Beat Bolli, brian m. carlson, Christian Couder,
  Daniel Hahler, Derrick Stolee, Elia Pinto, Elijah Newren,
  Emily Shaffer, Eric Sunshine, Fabian Stelzer, Glen Choo, Greg
  Hurrell, Han-Wen Nienhuys, Jacob Keller, Jean-Noël Avila, Jeff
  Hostetler, Jeff King, Jerry Zhang, Jessica Clarke, Jiang Xin,
  Joel Holdsworth, Johannes Altmanninger, Johannes Schindelin,
  Johannes Sixt, John Cai, Jonathan Nieder, Jonathan Tan, Josh
  Steadmon, Junio C Hamano, Kevin Willford, Lessley Dennington,
  Marc Strapetz, Matt Cooper, Michael J Gruber, Neeraj Singh,
  Patrick Steinhardt, Philip Oakley, Philippe Blain, Phillip Wood,
  Ramkumar Ramachandra, René Scharfe, Shourya Shukla, SZEDER
  Gábor, Tao Klerks, Taylor Blau, Teng Long, Thomas Gummerer,
  Thomas Koutcher, Tilman Vogel, Todd Zullinger, and Victoria Dye.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git 2.36 Release Notes (draft)
==============================

Updates since Git 2.35
----------------------

Backward compatibility warts

 * "git name-rev --stdin" has been deprecated and issues a warning
   when used; use "git name-rev --annotate-stdin" instead.

 * "git clone --filter=... --recurse-submodules" only makes the
   top-level a partial clone, while submodules are fully cloned.  This
   behaviour is changed to pass the same filter down to the submodules.


Note to those who build from the source

 * Since Git 2.31, our source assumed that the compiler you use to
   build Git supports variadic macros, with an easy-to-use escape
   hatch to allow compilation without variadic macros with an request
   to report that you had to use the escape hatch to the list.
   Because we haven't heard from anybody who actually needed to use
   the escape hatch, it has been removed, making support of variadic
   macros a hard requirement.


UI, Workflows & Features

 * Assorted updates to "git cat-file", especially "-h".

 * The command line completion (in contrib/) learns to complete
   arguments to give to "git sparse-checkout" command.

 * "git log --remerge-diff" shows the difference from mechanical merge
   result and the result that is actually recorded in a merge commit.

 * "git log" and friends learned an option --exclude-first-parent-only
   to propagate UNINTERESTING bit down only along the first-parent
   chain, just like --first-parent option shows commits that lack the
   UNINTERESTING bit only along the first-parent chain.

 * The command line completion script (in contrib/) learned to
   complete all Git subcommands, including the ones that are normally
   hidden, when GIT_COMPLETION_SHOW_ALL_COMMANDS is used.

 * "git branch" learned the "--recurse-submodules" option.

 * A not-so-common mistake is to write a script to feed "git bisect
   run" without making it executable, in which case all tests will
   exit with 126 or 127 error codes, even on revisions that are marked
   as good.  Try to recognize this situation and stop iteration early.

 * When "index-pack" dies due to incoming data exceeding the maximum
   allowed input size, include the value of the limit in the error
   message.

 * The error message given by "git switch HEAD~4" has been clarified
   to suggest the "--detach" option that is required.

 * In sparse-checkouts, files mis-marked as missing from the working tree
   could lead to later problems.  Such files were hard to discover, and
   harder to correct.  Automatically detecting and correcting the marking
   of such files has been added to avoid these problems.

 * "git cat-file" learns "--batch-command" mode, which is a more
   flexible interface than the existing "--batch" or "--batch-check"
   modes, to allow different kinds of inquiries made.

 * The level of verbose output from the ort backend during inner merge
   has been aligned to that of the recursive backend.

 * "git remote rename A B", depending on the number of remote-tracking
   refs involved, takes long time renaming them.  The command has been
   taught to show progress bar while making the user wait.

 * Bundle file format gets extended to allow a partial bundle,
   filtered by similar criteria you would give when making a
   partial/lazy clone.

 * A new built-in userdiff driver for kotlin has been added.

 * "git repack" learned a new configuration to disable triggering of
   age-old "update-server-info" command, which is rarely useful these
   days.

 * "git stash" does not allow subcommands it internally runs as its
   implementation detail, except for "git reset", to emit messages;
   now "git reset" part has also been squelched.

 * "git ls-tree" learns "--oid-only" option, similar to "--name-only",
   and more generalized "--format" option.

 * "git fetch --refetch" learned to fetch everything without telling
   the other side what we already have, which is useful when you
   cannot trust what you have in the local object store.

 * "git branch" gives hint when branch tracking cannot be established
   because fetch refspecs from multiple remote repositories overlap.

 * "git worktree list --porcelain" did not c-quote pathnames and lock
   reasons with unsafe bytes correctly, which is worked around by
   introducing NUL terminated output format with "-z".


Performance, Internal Implementation, Development Support etc.

 * "git apply" (ab)used the util pointer of the string-list to keep
   track of how each symbolic link needs to be handled, which has been
   simplified by using strset.

 * Fix a hand-rolled alloca() imitation that may have violated
   alignment requirement of data being sorted in compatibility
   implementation of qsort_s() and stable qsort().

 * Use the parse-options API in "git reflog" command.

 * The conditional inclusion mechanism of configuration files using
   "[includeIf <condition>]" learns to base its decision on the
   URL of the remote repository the repository interacts with.
   (merge 399b198489 jt/conditional-config-on-remote-url later to maint).

 * "git name-rev --stdin" does not behave like usual "--stdin" at
   all.  Start the process of renaming it to "--annotate-stdin".
   (merge a2585719b3 jc/name-rev-stdin later to maint).

 * "git update-index", "git checkout-index", and "git clean" are
   taught to work better with the sparse checkout feature.

 * Use an internal call to reset_head() helper function instead of
   spawning "git checkout" in "rebase", and update code paths that are
   involved in the change.

 * Messages "ort" merge backend prepares while dealing with conflicted
   paths were unnecessarily confusing since it did not differentiate
   inner merges and outer merges.

 * Small modernization of the rerere-train script (in contrib/).

 * Use designated initializers we started using in mid 2017 in more
   parts of the codebase that are relatively quiescent.

 * Improve failure case behaviour of xdiff library when memory
   allocation fails.

 * General clean-up in reftable implementation, including
   clarification of the API documentation, tightening the code to
   honor documented length limit, etc.

 * Remove the escape hatch we added when we introduced the weather
   balloon to use variadic macros unconditionally, to make it official
   that we now have a hard dependency on the feature.

 * Makefile refactoring with a bit of suffixes rule stripping to
   optimize the runtime overhead.

 * "git stash drop" is reimplemented as an internal call to
   reflog_delete() function, instead of invoking "git reflog delete"
   via run_command() API.

 * Count string_list items in size_t, not "unsigned int".

 * The single-key interactive operation used by "git add -p" has been
   made more robust.

 * Remove unneeded <meta http-equiv=content-type...> from gitweb
   output.

 * "git name-rev" learned to use the generation numbers when setting
   the lower bound of searching commits used to explain the revision,
   when available, instead of committer time.

 * Replace core.fsyncObjectFiles with two new configuration variables,
   core.fsync and core.fsyncMethod.

 * Updates to refs traditionally weren't fsync'ed, but we can
   configure using core.fsync variable to do so.

 * "git reflog" command now uses parse-options API to parse its
   command line options.


Fixes since v2.35
-----------------

 * "rebase" and "stash" in secondary worktrees are broken in
   Git 2.35.0, which has been corrected.

 * "git pull --rebase" ignored the rebase.autostash configuration
   variable when the remote history is a descendant of our history,
   which has been corrected.
   (merge 3013d98d7a pb/pull-rebase-autostash-fix later to maint).

 * "git update-index --refresh" has been taught to deal better with
   racy timestamps (just like "git status" already does).
   (merge 2ede073fd2 ms/update-index-racy later to maint).

 * Avoid tests that are run under GIT_TRACE2 set from failing
   unnecessarily.
   (merge 944d808e42 js/test-unset-trace2-parents later to maint).

 * The merge-ort misbehaved when merge.renameLimit configuration is
   set too low and failed to find all renames.
   (merge 9ae39fef7f en/merge-ort-restart-optim-fix later to maint).

 * We explain that revs come first before the pathspec among command
   line arguments, but did not spell out that dashed options come
   before other args, which has been corrected.
   (merge c11f95010c tl/doc-cli-options-first later to maint).

 * "git add -p" rewritten in C regressed hunk splitting in some cases,
   which has been corrected.
   (merge 7008ddc645 pw/add-p-hunk-split-fix later to maint).

 * "git fetch --negotiate-only" is an internal command used by "git
   push" to figure out which part of our history is missing from the
   other side.  It should never recurse into submodules even when
   fetch.recursesubmodules configuration variable is set, nor it
   should trigger "gc".  The code has been tightened up to ensure it
   only does common ancestry discovery and nothing else.
   (merge de4eaae63a gc/fetch-negotiate-only-early-return later to maint).

 * The code path that verifies signatures made with ssh were made to
   work better on a system with CRLF line endings.
   (merge caeef01ea7 fs/ssh-signing-crlf later to maint).

 * "git sparse-checkout init" failed to write into $GIT_DIR/info
   directory when the repository was created without one, which has
   been corrected to auto-create it.
   (merge 7f44842ac1 jt/sparse-checkout-leading-dir-fix later to maint).

 * Cloning from a repository that does not yet have any branches or
   tags but has other refs resulted in a "remote transport reported
   error", which has been corrected.
   (merge dccea605b6 jt/clone-not-quite-empty later to maint).

 * Mark in various places in the code that the sparse index and the
   split index features are mutually incompatible.
   (merge 451b66c533 js/sparse-vs-split-index later to maint).

 * Update the logic to compute alignment requirement for our mem-pool.
   (merge e38bcc66d8 jc/mem-pool-alignment later to maint).

 * Pick a better random number generator and use it when we prepare
   temporary filenames.
   (merge 47efda967c bc/csprng-mktemps later to maint).

 * Update the contributor-facing documents on proposed log messages.
   (merge cdba0295b0 jc/doc-log-messages later to maint).

 * When "git fetch --prune" failed to prune the refs it wanted to
   prune, the command issued error messages but exited with exit
   status 0, which has been corrected.
   (merge c9e04d905e tg/fetch-prune-exit-code-fix later to maint).

 * Problems identified by Coverity in the reftable code have been
   corrected.
   (merge 01033de49f hn/reftable-coverity-fixes later to maint).

 * A bug that made multi-pack bitmap and the object order out-of-sync,
   making the .midx data corrupt, has been fixed.
   (merge f8b60cf99b tb/midx-bitmap-corruption-fix later to maint).

 * The build procedure has been taught to notice older version of zlib
   and enable our replacement uncompress2() automatically.
   (merge 07564773c2 ab/auto-detect-zlib-compress2 later to maint).

 * Interaction between fetch.negotiationAlgorithm and
   feature.experimental configuration variables has been corrected.
   (merge 714edc620c en/fetch-negotiation-default-fix later to maint).

 * "git diff --diff-filter=aR" is now parsed correctly.
   (merge 75408ca949 js/diff-filter-negation-fix later to maint).

 * When "git subtree" wants to create a merge, it used "git merge" and
   let it be affected by end-user's "merge.ff" configuration, which
   has been corrected.
   (merge 9158a3564a tk/subtree-merge-not-ff-only later to maint).

 * Unlike "git apply", "git patch-id" did not handle patches with
   hunks that has only 1 line in either preimage or postimage, which
   has been corrected.
   (merge 757e75c81e jz/patch-id-hunk-header-parsing-fix later to maint).

 * "receive-pack" checks if it will do any ref updates (various
   conditions could reject a push) before received objects are taken
   out of the temporary directory used for quarantine purposes, so
   that a push that is known-to-fail will not leave crufts that a
   future "gc" needs to clean up.
   (merge 5407764069 cb/clear-quarantine-early-on-all-ref-update-errors later to maint).

 * Because a deletion of ref would need to remove it from both the
   loose ref store and the packed ref store, a delete-ref operation
   that logically removes one ref may end up invoking ref-transaction
   hook twice, which has been corrected.
   (merge 2ed1b64ebd ps/avoid-unnecessary-hook-invocation-with-packed-refs later to maint).

 * When there is no object to write .bitmap file for, "git
   multi-pack-index" triggered an error, instead of just skipping,
   which has been corrected.
   (merge eb57277ba3 tb/midx-no-bitmap-for-no-objects later to maint).

 * "git cmd -h" outside a repository should error out cleanly for many
   commands, but instead it hit a BUG(), which has been corrected.
   (merge 87ad07d735 js/short-help-outside-repo-fix later to maint).

 * "working tree" and "per-worktree ref" were in glossary, but
   "worktree" itself wasn't, which has been corrected.
   (merge 2df5387ed0 jc/glossary-worktree later to maint).

 * L10n support for a few error messages.
   (merge 3d3c23b3a7 bs/forbid-i18n-of-protocol-token-in-fetch-pack later to maint).

 * Test modernization.
   (merge d4fe066e4b sy/t0001-use-path-is-helper later to maint).

 * "git log --graph --graph" used to leak a graph structure, and there
   was no way to countermand "--graph" that appear earlier on the
   command line.  A "--no-graph" option has been added and resource
   leakage has been plugged.

 * Error output given in response to an ambiguous object name has been
   improved.
   (merge 3a73c1dfaf ab/ambiguous-object-name later to maint).

 * "git sparse-checkout" wants to work with per-worktree configuration,
   but did not work well in a worktree attached to a bare repository.
   (merge 3ce1138272 ds/sparse-checkout-requires-per-worktree-config later to maint).

 * Setting core.untrackedCache to true failed to add the untracked
   cache extension to the index.

 * Workaround we have for versions of PCRE2 before their version 10.36
   were in effect only for their versions newer than 10.36 by mistake,
   which has been corrected.
   (merge 97169fc361 rs/pcre-invalid-utf8-fix-fix later to maint).

 * Document Taylor as a new member of Git PLC at SFC.  Welcome.
   (merge e8d56ca863 tb/coc-plc-update later to maint).

 * "git checkout -b branch/with/multi/level/name && git stash" only
   recorded the last level component of the branch name, which has
   been corrected.

 * "git fetch" can make two separate fetches, but ref updates coming
   from them were in two separate ref transactions under "--atomic",
   which has been corrected.

 * Check the return value from parse_tree_indirect() to turn segfaults
   into calls to die().
   (merge 8d2eaf649a gc/parse-tree-indirect-errors later to maint).

 * Newer version of GPGSM changed its output in a backward
   incompatible way to break our code that parses its output.  It also
   added more processes our tests need to kill when cleaning up.
   Adjustments have been made to accommodate these changes.
   (merge b0b70d54c4 fs/gpgsm-update later to maint).

 * The untracked cache newly computed weren't written back to the
   on-disk index file when there is no other change to the index,
   which has been corrected.

 * "git config -h" did not describe the "--type" option correctly.
   (merge 5445124fad mf/fix-type-in-config-h later to maint).

 * The way generation number v2 in the commit-graph files are
   (not) handled has been corrected.
   (merge 6dbf4b8172 ds/commit-graph-gen-v2-fixes later to maint).

 * The method to trigger malloc check used in our tests no longer work
   with newer versions of glibc.
   (merge baedc59543 ep/test-malloc-check-with-glibc-2.34 later to maint).

 * When "git fetch --recurse-submodules" grabbed submodule commits
   that would be needed to recursively check out newly fetched commits
   in the superproject, it only paid attention to submodules that are
   in the current checkout of the superproject.  We now do so for all
   submodules that have been run "git submodule init" on.

 * "git rebase $base $non_branch_commit", when $base is an ancestor or
   the $non_branch_commit, modified the current branch, which has been
   corrected.

 * When "shallow" information is updated, we forgot to update the
   in-core equivalent, which has been corrected.

 * When creating a loose object file, we didn't report the exact
   filename of the file we failed to fsync, even though the
   information was readily available, which has been corrected.

 * "git am" can read from the standard input when no mailbox is given
   on the command line, but the end-user gets no indication when it
   happens, making Git appear stuck.
   (merge 7b20af6a06 jc/mailsplit-warn-on-tty later to maint).

 * "git mv" failed to refresh the cached stat information for the
   entry it moved.
   (merge b7f9130a06 vd/mv-refresh-stat later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge cfc5cf428b jc/find-header later to maint).
   (merge 40e7cfdd46 jh/p4-fix-use-of-process-error-exception later to maint).
   (merge 727e6ea350 jh/p4-spawning-external-commands-cleanup later to maint).
   (merge 0a6adc26e2 rs/grep-expr-cleanup later to maint).
   (merge 4ed7dfa713 po/readme-mention-contributor-hints later to maint).
   (merge 6046f7a91c en/plug-leaks-in-merge later to maint).
   (merge 8c591dbfce bc/clarify-eol-attr later to maint).
   (merge 518e15db74 rs/parse-options-lithelp-help later to maint).
   (merge cbac0076ef gh/doc-typos later to maint).
   (merge ce14de03db ab/no-errno-from-resolve-ref-unsafe later to maint).
   (merge 2826ffad8c rc/negotiate-only-typofix later to maint).
   (merge 0f03f04c5c en/sparse-checkout-leakfix later to maint).
   (merge 74f3390dde sy/diff-usage-typofix later to maint).
   (merge 45d0212a71 ll/doc-mktree-typofix later to maint).
   (merge e9b272e4c1 js/no-more-legacy-stash later to maint).
   (merge 6798b08e84 ab/do-not-hide-failures-in-git-dot-pm later to maint).
   (merge 9325285df4 po/doc-check-ignore-markup-fix later to maint).
   (merge cd26cd6c7c sy/modernize-t-lib-read-tree-m-3way later to maint).
   (merge d17294a05e ab/hash-object-leakfix later to maint).
   (merge b8403129d3 jd/t0015-modernize later to maint).
   (merge 332acc248d ds/mailmap later to maint).
   (merge 04bf052eef ab/grep-patterntype later to maint).
   (merge 6ee36364eb ab/diff-free-more later to maint).
   (merge 63a36017fe nj/read-tree-doc-reffix later to maint).
   (merge eed36fce38 sm/no-git-in-upstream-of-pipe-in-tests later to maint).
   (merge c614beb933 ep/t6423-modernize later to maint).
   (merge 57be9c6dee ab/reflog-prep-fix later to maint).
   (merge 5327d8982a js/in-place-reverse-in-sequencer later to maint).
   (merge 2e2c0be51e dp/worktree-repair-in-usage later to maint).
   (merge 6563706568 jc/coding-guidelines-decl-in-for-loop later to maint).

----------------------------------------------------------------

Changes since v2.35.0 are as follows:

Abhradeep Chakraborty (2):
      amend remaining usage strings according to style guide
      partial-clone: add a partial-clone test case

Alex Henrie (3):
      log: fix memory leak if --graph is passed multiple times
      log: add a --no-graph option
      switch: mention the --detach option when dying due to lack of a branch

Atharva Raykar (5):
      submodule--helper: get remote names from any repository
      submodule--helper: refactor get_submodule_displaypath()
      submodule--helper: allow setting superprefix for init_submodule()
      submodule--helper: run update using child process struct
      submodule: move core cmd_update() logic to C

Bagas Sanjaya (1):
      fetch-pack: parameterize message containing 'ready' keyword

COGONI Guillaume (3):
      t/t3903-stash.sh: replace test [-d|-f] with test_path_is_*
      tests: allow testing if a path is truly a file or a directory
      tests: make the code more readable

Chen Bojun (1):
      receive-pack: purge temporary data if no command is ready to run

David Cantrell (1):
      completion: tab completion of filenames for 'git restore'

Derrick Stolee (45):
      Documentation: add extensions.worktreeConfig details
      worktree: create init_worktree_config()
      config: add repo_config_set_worktree_gently()
      sparse-checkout: set worktree-config correctly
      worktree: copy sparse-checkout patterns and config on add
      config: make git_configset_get_string_tmp() private
      mailmap: change primary address for Derrick Stolee
      dir: force untracked cache with core.untrackedCache
      worktree: combine two translatable messages
      worktree: extract copy_filtered_worktree_config()
      worktree: extract copy_sparse_checkout()
      worktree: extract checkout_worktree()
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      worktree: use 'worktree' over 'working tree'
      test-read-graph: include extra post-parse info
      t5318: extract helpers to lib-commit-graph.sh
      commit-graph: fix ordering bug in generation numbers
      commit-graph: start parsing generation v2 (again)
      commit-graph: fix generation number v2 overflow values
      commit-graph: declare bankruptcy on GDAT chunks
      index-pack: document and test the --promisor option
      list-objects-filter-options: create copy helper
      revision: put object filter into struct rev_info
      pack-objects: use rev.filter when possible
      pack-bitmap: drop filter in prepare_bitmap_walk()
      list-objects: consolidate traverse_commit_list[_filtered]
      MyFirstObjectWalk: update recommended usage
      bundle: parse filter capability
      rev-list: move --filter parsing into revision.c
      bundle: create filtered bundles
      bundle: unbundle promisor packs
      clone: fail gracefully when cloning filtered bundle
      maintenance: fix synopsis in documentation
      list-objects-filter: remove CL_ARG__FILTER
      pack-objects: move revs out of get_object_list()
      pack-objects: parse --filter directly into revs.filter
      bundle: move capabilities to end of 'verify'
      bundle: output hash information in 'verify'
      t7700: check post-condition in kept-pack test
      test-lib-functions: remove test_subcommand_inexact

Des Preston (1):
      worktree: include repair cmd in usage

Elia Pinto (8):
      test-lib.sh: Use GLIBC_TUNABLES instead of MALLOC_CHECK_ on glibc >= 2.34
      t6423-merge-rename-directories.sh: use the $(...) construct
      attr.c: delete duplicate include
      builtin/gc.c: delete duplicate include
      builtin/sparse-checkout.c: delete duplicate include
      builtin/stash.c: delete duplicate include
      t/helper/test-run-command.c: delete duplicate include
      attr.h: remove duplicate struct definition

Elijah Newren (33):
      t1011: add testcase demonstrating accidental loss of user modifications
      unpack-trees: fix accidental loss of user changes
      repo_read_index: clear SKIP_WORKTREE bit from files present in worktree
      Update documentation related to sparsity and the skip-worktree bit
      Accelerate clear_skip_worktree_from_present_files() by caching
      merge-ort: avoid assuming all renames detected
      merge-ort: fix memory leak in merge_ort_internal()
      merge: fix memory leaks in cmd_merge()
      sequencer, stash: fix running from worktree subdir
      sparse-checkout: fix a couple minor memory leaks
      repo-settings: fix checking for fetch.negotiationAlgorithm=default
      repo-settings: fix error handling for unknown values
      repo-settings: rename the traditional default fetch.negotiationAlgorithm
      show, log: provide a --remerge-diff capability
      log: clean unneeded objects during `log --remerge-diff`
      ll-merge: make callers responsible for showing warnings
      merge-ort: capture and print ll-merge warnings in our preferred fashion
      merge-ort: mark a few more conflict messages as omittable
      merge-ort: format messages slightly different for use in headers
      diff: add ability to insert additional headers for paths
      show, log: include conflict/warning messages in --remerge-diff headers
      merge-ort: mark conflict/warning messages from inner merges as omittable
      diff-merges: avoid history simplifications when diffing merges
      merge-ort: make informational messages from recursive merges clearer
      sparse-checkout: correct reapply's handling of options
      sparse-checkout: correctly set non-cone mode when expected
      sparse-checkout: pay attention to prefix for {set, add}
      sparse-checkout: error or warn when given individual files
      sparse-checkout: reject arguments in cone-mode that look like patterns
      merge-ort: fix small memory leak in detect_and_process_renames()
      merge-ort: fix small memory leak in unique_path()
      merge-ort: exclude messages from inner merges by default
      repo_read_index: add config to expect files outside sparse patterns

Emily Shaffer (14):
      hook: add 'run' subcommand
      gc: use hook library for pre-auto-gc hook
      am: convert {pre,post}-applypatch to use hook.h
      rebase: convert pre-rebase to use hook.h
      am: convert applypatch-msg to use hook.h
      merge: convert post-merge to use hook.h
      hooks: convert non-worktree 'post-checkout' hook to hook library
      hooks: convert worktree 'post-checkout' hook to hook library
      send-email: use 'git hook run' for 'sendemail-validate'
      git-p4: use 'git hook' to run hooks
      commit: convert {pre-commit,prepare-commit-msg} hook to hook.h
      read-cache: convert post-index-change to use hook.h
      receive-pack: convert push-to-checkout hook to hook.h
      run-command: remove old run_hook_{le,ve}() hook API

Fabian Stelzer (2):
      gpg-interface: trim CR from ssh-keygen
      gpg-interface/gpgsm: fix for v2.3

Glen Choo (39):
      fetch: use goto cleanup in cmd_fetch()
      fetch: skip tasks related to fetching objects
      fetch --negotiate-only: do not update submodules
      branch: move --set-upstream-to behavior to dwim_and_setup_tracking()
      branch: make create_branch() always create a branch
      branch: add a dry_run parameter to create_branch()
      builtin/branch: consolidate action-picking logic in cmd_branch()
      branch: add --recurse-submodules option for branch creation
      branch.c: use 'goto cleanup' in setup_tracking() to fix memory leaks
      stash: strip "refs/heads/" with skip_prefix
      checkout, clone: die if tree cannot be parsed
      submodule--helper: remove update-module-mode
      submodule--helper: reorganize code for sh to C conversion
      submodule--helper run-update-procedure: remove --suboid
      submodule--helper run-update-procedure: learn --remote
      submodule--helper update-clone: learn --init
      submodule--helper: remove ensure-core-worktree
      submodule update: add tests for --filter
      submodule--helper update-clone: check for --filter and --init
      t5526: introduce test helper to assert on fetches
      t5526: stop asserting on stderr literally
      t5526: create superproject commits with test helper
      submodule: make static functions read submodules from commits
      submodule: inline submodule_commits() into caller
      submodule: store new submodule commits oid_array in a struct
      submodule: extract get_fetch_task()
      submodule: move logic into fetch_task_create()
      submodule update: use die_message()
      submodule--helper: teach update_data more options
      submodule--helper: reduce logic in run_update_procedure()
      submodule--helper: remove forward declaration
      fetch: fetch unpopulated, changed submodules
      submodule: fix latent check_has_commit() bug
      branch: support more tracking modes when recursing
      branch: give submodule updating advice before exit
      branch --set-upstream-to: be consistent when advising
      branch: remove negative exit code
      branch: rework comments for future developers
      branch.c: simplify advice-and-die sequence

Greg Hurrell (2):
      Documentation/config/pgp.txt: replace stray <TAB> character with <SPC>
      Documentation/config/pgp.txt: add missing apostrophe

Han-Wen Nienhuys (27):
      reftable: fix OOB stack write in print functions
      reftable: fix resource leak in block.c error path
      reftable: fix resource leak blocksource.c
      reftable: check reftable_stack_auto_compact() return value
      reftable: ignore remove() return value in stack_test.c
      reftable: fix resource warning
      reftable: all xxx_free() functions accept NULL arguments
      reftable: order unittests by complexity
      reftable: drop stray printf in readwrite_test
      reftable: handle null refnames in reftable_ref_record_equal
      reftable: make reftable-record.h function signatures const correct
      reftable: implement record equality generically
      reftable: remove outdated file reftable.c
      reftable: make reftable_record a tagged union
      reftable: add print functions to the record types
      t1405: explictly delete reflogs for reftable
      t1405: mark test that checks existence as REFFILES
      t5312: prepare for reftable
      t1410: use test-tool ref-store to inspect reflogs
      t1410: mark bufsize boundary test as REFFILES
      Documentation: object_id_len goes up to 31
      reftable: reject 0 object_id_len
      reftable: add a test that verifies that writing empty keys fails
      reftable: avoid writing empty keys at the block layer
      reftable: ensure that obj_id_len is >= 2 on writing
      reftable: add test for length of disambiguating prefix
      reftable: rename writer_stats to reftable_writer_stats

Jacob Keller (1):
      name-rev: use generation numbers if available

Jason Yundt (2):
      comment: fix typo
      gitweb: remove invalid http-equiv="content-type"

Jayati Shrivastava (1):
      sequencer: use reverse_commit_list() helper

Jaydeep Das (1):
      t/t0015-hash.sh: remove unnecessary '\' at line end

Jaydeep P Das (1):
      userdiff: add builtin diff driver for kotlin language.

Jean-Noël Avila (4):
      i18n: factorize more 'incompatible options' messages
      i18n: factorize "invalid value" messages
      i18n: remove from i18n strings that do not hold translatable parts
      i18n: fix some misformated placeholders in command synopsis

Jeff Hostetler (30):
      fsmonitor: enhance existing comments, clarify trivial response handling
      fsmonitor-ipc: create client routines for git-fsmonitor--daemon
      fsmonitor: config settings are repository-specific
      fsmonitor: use IPC to query the builtin FSMonitor daemon
      fsmonitor: document builtin fsmonitor
      fsmonitor--daemon: add a built-in fsmonitor daemon
      fsmonitor--daemon: implement 'stop' and 'status' commands
      compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
      compat/fsmonitor/fsm-listen-darwin: stub in backend for Darwin
      fsmonitor--daemon: implement 'run' command
      fsmonitor--daemon: implement 'start' command
      fsmonitor--daemon: add pathname classification
      fsmonitor--daemon: define token-ids
      fsmonitor--daemon: create token-based changed path cache
      compat/fsmonitor/fsm-listen-win32: implement FSMonitor backend on Windows
      compat/fsmonitor/fsm-listen-darwin: add MacOS header files for FSEvent
      compat/fsmonitor/fsm-listen-darwin: implement FSEvent listener on MacOS
      fsmonitor--daemon: implement handle_client callback
      help: include fsmonitor--daemon feature flag in version info
      t/helper/fsmonitor-client: create IPC client to talk to FSMonitor Daemon
      t7527: create test for fsmonitor--daemon
      t/perf: avoid copying builtin fsmonitor files into test repo
      t/helper/test-chmtime: skip directories on Windows
      t/perf/p7519: fix coding style
      t/perf/p7519: speed up test on Windows
      t/perf/p7519: add fsmonitor--daemon test cases
      fsmonitor--daemon: periodically truncate list of modified files
      fsmonitor--daemon: use a cookie file to sync with file system
      fsmonitor: force update index after large responses
      t7527: test status with untracked-cache and fsmonitor--daemon

Jerry Zhang (3):
      git-rev-list: add --exclude-first-parent-only flag
      patch-id: fix antipatterns in tests
      patch-id: fix scan_hunk_header on diffs with 1 line of before/after

Jessica Clarke (1):
      mem-pool: don't assume uintmax_t is aligned enough for all types

Joel Holdsworth (4):
      git-p4: don't select shell mode using the type of the command argument
      git-p4: pass command arguments as lists instead of using shell
      git-p4: don't print shell commands as python lists
      git-p4: fix instantiation of CalledProcessError

Johannes Schindelin (14):
      sparse-index: sparse index is disallowed when split index is active
      t1091: disable split index
      split-index: it really is incompatible with the sparse index
      git-sh-setup: remove remnant bits referring to `git-legacy-stash`
      add: remove support for `git-legacy-stash`
      stash: remove documentation for `stash.useBuiltin`
      stash: stop warning about the obsolete `stash.useBuiltin` config setting
      docs(diff): lose incorrect claim about `diff-files --diff-filter=A`
      diff.c: move the diff filter bits definitions up a bit
      diff-filter: be more careful when looking for negative bits
      scalar: accept -C and -c options before the subcommand
      checkout/fetch/pull/pack-objects: allow `-h` outside a repository
      t0012: verify that built-ins handle `-h` even without gitdir
      cocci: allow padding with `strbuf_addf()`

John Cai (15):
      receive-pack.c: consolidate find header logic
      name-rev: deprecate --stdin in favor of --annotate-stdin
      name-rev.c: use strbuf_getline instead of limited size buffer
      builtin/reflog.c: use parse-options api for expire, delete subcommands
      name-rev: replace --stdin with --annotate-stdin in synopsis
      cat-file: rename cmdmode to transform_mode
      cat-file: introduce batch_mode enum to replace print_contents
      cat-file: add remove_timestamp helper
      cat-file: add --batch-command mode
      stash: add tests to ensure reflog --rewrite --updatref behavior
      reflog: libify delete reflog function and helpers
      stash: call reflog_delete() in reflog.c
      cat-file: skip expanding default format
      rebase: use test_commit helper in setup
      rebase: set REF_HEAD_DETACH in checkout_up_to_date()

Jonathan Tan (6):
      config: make git_config_include() static
      config: include file if remote URL matches a glob
      sparse-checkout: create leading directory
      clone: support unusual remote ref configurations
      ls-files: support --recurse-submodules --stage
      shallow: reset commit grafts when shallow is reset

Josh Steadmon (2):
      test-lib: unset trace2 parent envvars
      clone, submodule: pass partial clone filters to submodules

Junio C Hamano (31):
      compat/qsort_s.c: avoid using potentially unaligned access
      fetch: help translators by reusing the same message template
      Start post 2.35 cycle
      SubmittingPatches: write problem statement in the log in the present tense
      CodingGuidelines: hint why we value clearly written log messages
      SubmittingPatches: explain why we care about log messages
      Git 2.35.1
      Name the next one 2.36 to prepare for 2.35.1
      The first batch
      The second batch for 2.36
      glossary: describe "worktree"
      The third batch
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      rerere-train: two fixes to the use of "git show -s"
      am/apply: warn if we end up reading patches from terminal
      The ninth batch
      The tenth batch
      The eleventh batch
      The twelfth batch
      The thirteenth batch
      The 14th batch
      reset: show --no-refresh in the short-help
      The 15th batch
      The 16th batch
      The 17th batch
      CodingGuidelines: give deadline for "for (int i = 0; ..."
      Git 2.36-rc0

Justin Donnelly (4):
      git-prompt: rename `upstream` to `upstream_type`
      git-prompt: make upstream state indicator location consistent
      git-prompt: make long upstream state indicator consistent
      git-prompt: put upstream comments together

Lessley Dennington (3):
      completion: address sparse-checkout issues
      completion: improve sparse-checkout cone mode directory completion
      completion: handle unusual characters for sparse-checkout

Liginity Lee (1):
      fix typo in git-mktree.txt

Marc Strapetz (4):
      test-lib: introduce API for verifying file mtime
      t7508: fix bogus mtime verification
      t7508: add tests capturing racy timestamp handling
      update-index: refresh should rewrite index in case of racy timestamps

Matheus Felipe (1):
      config: correct "--type" option in "git config -h" output

Matt Cooper (1):
      index-pack: clarify the breached limit

Michael J Gruber (2):
      test-lib: declare local variables as local
      tests: demonstrate "show --word-diff --color-moved" regression

Neeraj Singh (10):
      wrapper: make inclusion of Windows csprng header tightly scoped
      core.fsyncmethod: add writeout-only mode
      core.fsync: introduce granular fsync control infrastructure
      core.fsync: add configuration parsing
      core.fsync: new option to harden the index
      core.fsync: documentation and user-friendly aggregate options
      core.fsync: fix incorrect expression for default configuration
      trace2: add stats for fsync operations
      core.fsyncmethod: correctly camel-case warning message
      object-file: pass filename to fsync_or_die

Nihal Jere (1):
      Documentation: git-read-tree: separate links using commas

Patrick Steinhardt (24):
      refs: extract packed_refs_delete_refs() to allow control of transaction
      refs: allow passing flags when beginning transactions
      refs: allow skipping the reference-transaction hook
      refs: demonstrate excessive execution of the reference-transaction hook
      refs: do not execute reference-transaction hook on packing refs
      refs: skip hooks when deleting uncovered packed refs
      fetch-pack: use commit-graph when computing cutoff
      fetch: skip computing output width when not printing anything
      fetch: increase test coverage of fetches
      fetch: backfill tags before setting upstream
      fetch: control lifecycle of FETCH_HEAD in a single place
      fetch: report errors when backfilling tags fails
      refs: add interface to iterate over queued transactional updates
      fetch: make `--atomic` flag cover backfilling of tags
      fetch: make `--atomic` flag cover pruning of refs
      upload-pack: look up "want" lines via commit-graph
      fetch: avoid lookup of commits when not appending to FETCH_HEAD
      refs: add ability for backends to special-case reading of symbolic refs
      remote: read symbolic refs via `refs_read_symbolic_ref()`
      refs/files-backend: optimize reading of symbolic refs
      t5503: simplify setup of test which exercises failure of backfill
      repack: refactor to avoid double-negation of update-server-info
      repack: add config to skip updating server info
      core.fsync: new option to harden references

Philip Oakley (2):
      README.md: add CodingGuidelines and a link for Translators
      doc: check-ignore: code-quote an exclamation mark

Philippe Blain (1):
      pull --rebase: honor rebase.autostash when fast-forwarding

Phillip Wood (29):
      t3701: clean up hunk splitting tests
      builtin add -p: fix hunk splitting
      rebase: factor out checkout for up to date branch
      t5403: refactor rebase post-checkout hook tests
      rebase: pass correct arguments to post-checkout hook
      rebase: do not remove untracked files on checkout
      rebase --apply: don't run post-checkout hook if there is an error
      reset_head(): remove action parameter
      reset_head(): factor out ref updates
      reset_head(): make default_reflog_action optional
      create_autostash(): remove unneeded parameter
      rebase: cleanup reset_head() calls
      reset_head(): take struct rebase_head_opts
      rebase --apply: fix reflog
      rebase --apply: set ORIG_HEAD correctly
      rebase -m: don't fork git checkout
      xdiff: fix a memory leak
      xdiff: handle allocation failure in patience diff
      xdiff: refactor a function
      xdiff: handle allocation failure when merging
      terminal: always reset terminal when reading without echo
      terminal: pop signal handler when terminal is restored
      terminal: set VMIN and VTIME in non-canonical mode
      add -p: disable stdin buffering when interactive.singlekey is set
      terminal: use flags for save_term()
      terminal: don't assume stdin is /dev/tty
      terminal: work around macos poll() bug
      terminal: restore settings on SIGTSTP
      worktree: add -z option for list subcommand

René Scharfe (10):
      grep: use grep_or_expr() in compile_pattern_or()
      grep: use grep_not_expr() in compile_pattern_not()
      apply: use strsets to track symlinks
      stable-qsort: avoid using potentially unaligned access
      bisect--helper: report actual bisect_state() argument on error
      bisect--helper: release strbuf and strvec on run error
      bisect: document run behavior with exit codes 126 and 127
      bisect--helper: double-check run command on exit code 126 and 127
      parse-options: document bracketing of argh
      grep: fix triggering PCRE2_NO_START_OPTIMIZE workaround

Robert Coup (8):
      fetch: fix negotiate-only error message
      fetch-negotiator: add specific noop initializer
      fetch-pack: add refetch
      builtin/fetch-pack: add --refetch option
      fetch: add --refetch option
      t5615-partial-clone: add test for fetch --refetch
      fetch: after refetch, encourage auto gc repacking
      docs: mention --refetch fetch option

SZEDER Gábor (1):
      reflog: fix 'show' subcommand's argv

Shaoxuan Yuan (4):
      builtin/diff.c: fix "git-diff" usage string typo
      t/lib-read-tree-m-3way: modernize style
      t/lib-read-tree-m-3way: indent with tabs
      t0001: replace "test [-d|-f]" with test_path_is_* functions

Shubham Mishra (3):
      t0003: avoid pipes with Git on LHS
      t0001-t0028: avoid pipes with Git on LHS
      t0030-t0050: avoid pipes with Git on LHS

Tao Klerks (6):
      t7519: avoid file to index mtime race for untracked cache
      t7519: populate untracked cache before test
      untracked-cache: write index when populating empty untracked cache
      t/helper/test-chmtime: update mingw to support chmtime on directories
      t7063: mtime-mangling instead of delays in untracked cache testing
      tracking branches: add advice to ambiguous refspec error

Taylor Blau (15):
      grep: extract grep_binexp() from grep_or_expr()
      grep: use grep_and_expr() in compile_pattern_and()
      t5326: demonstrate bitmap corruption after permutation
      midx.c: make changing the preferred pack safe
      pack-revindex.c: instrument loading on-disk reverse index
      t5326: drop unnecessary setup
      t5326: extract `test_rev_exists`
      t5326: move tests to t/lib-bitmap.sh
      t/lib-bitmap.sh: parameterize tests over reverse index source
      midx: read `RIDX` chunk when present
      pack-bitmap.c: gracefully fallback after opening pack/MIDX
      midx: prevent writing a .bitmap without any objects
      CODE_OF_CONDUCT.md: update PLC members list
      builtin/remote.c: parse options in 'rename'
      builtin/remote.c: show progress when renaming remote references

Teng Long (6):
      git-cli.txt: clarify "options first and then args"
      ls-tree: rename "retval" to "recurse" in "show_tree()"
      ls-tree: simplify nesting if/else logic in "show_tree()"
      ls-tree: fix "--name-only" and "--long" combined use bug
      ls-tree: slightly refactor `show_tree()`
      ls-tree: support --object-only option for "git-ls-tree"

Thomas Gummerer (1):
      fetch --prune: exit with error if pruning fails

Thomas Koutcher (1):
      subtree: force merge commit

Todd Zullinger (2):
      t/lib-gpg: reload gpg components after updating trustlist
      t/lib-gpg: kill all gpg components, not just gpg-agent

Victoria Dye (29):
      reset: fix validation in sparse index test
      reset: reorder wildcard pathspec conditions
      clean: integrate with sparse index
      checkout-index: expand sparse checkout compatibility tests
      checkout-index: add --ignore-skip-worktree-bits option
      checkout-index: integrate with sparse index
      update-index: add tests for sparse-checkout compatibility
      update-index: integrate with sparse index
      update-index: reduce scope of index expansion in do_reupdate
      sparse-index: prevent repo root from becoming sparse
      status: fix nested sparse directory diff in sparse index
      read-tree: explicitly disallow prefixes with a leading '/'
      read-tree: expand sparse checkout test coverage
      read-tree: integrate with sparse index
      read-tree: narrow scope of index expansion for '--prefix'
      read-tree: make two-way merge sparse-aware
      read-tree: make three-way merge sparse-aware
      reset: revise index refresh advice
      reset: introduce --[no-]refresh option to --mixed
      reset: replace '--quiet' with '--no-refresh' in performance advice
      reset: suppress '--no-refresh' advice if logging is silenced
      stash: make internal resets quiet and refresh index
      t1092: add sparse directory before cone in test repo
      unpack-trees: increment cache_bottom for sparse directories
      Revert "unpack-trees: improve performance of next_cache_entry"
      reset: do not make '--quiet' disable index refresh
      reset: remove 'reset.quiet' config option
      reset: remove 'reset.refresh' config option
      mv: refresh stat info for moved entry

brian m. carlson (6):
      t0027: add tests for eol without text in .gitattributes
      docs: correct documentation about eol attribute
      wrapper: add a helper to generate numbers from a CSPRNG
      wrapper: use a CSPRNG to generate random file names
      doc: clarify interaction between 'eol' and text=auto
      block-sha1: remove use of obsolete x86 assembly

Ævar Arnfjörð Bjarmason (183):
      cat-file tests: test bad usage
      cat-file tests: test messaging on bad objects/paths
      parse-options API: add a usage_msg_optf()
      cat-file docs: fix SYNOPSIS and "-h" output
      cat-file: move "usage" variable to cmd_cat_file()
      cat-file: make --batch-all-objects a CMDMODE
      cat-file: fix remaining usage bugs
      cat-file: correct and improve usage information
      object-name.c: don't have GET_OID_ONLY_TO_DIE imply *_QUIETLY
      cat-file: use GET_OID_ONLY_TO_DIE in --(textconv|filters)
      hook API: add a run_hooks() wrapper
      hook API: add a run_hooks_l() wrapper
      git hook run: add an --ignore-missing flag
      cat-file: don't whitespace-pad "(...)" in SYNOPSIS and usage output
      cat-file: s/_/-/ in typo'd usage_msg_optf() message
      compat: auto-detect if zlib has uncompress2()
      sequencer: don't use die_errno() on refs_resolve_ref_unsafe() failure
      refs API: remove "failure_errno" from refs_resolve_ref_unsafe()
      object-name tests: add tests for ambiguous object blind spots
      object-name: explicitly handle OBJ_BAD in show_ambiguous_object()
      object-name: explicitly handle bad tags in show_ambiguous_object()
      object-name: make ambiguous object output translatable
      object-name: show date for ambiguous tag objects
      object-name: iterate ambiguous objects before showing header
      object-name: re-use "struct strbuf" in show_ambiguous_object()
      perl Git.pm: don't ignore signalled failure in _cmd_close()
      completion tests: re-source git-completion.bash in a subshell
      completion: add a GIT_COMPLETION_SHOW_ALL_COMMANDS
      leak tests: fix a memory leak in "test-progress" helper
      progress.c test helper: add missing braces
      progress.c tests: make start/stop commands on stdin
      progress.c tests: test some invalid usage
      progress.h: format and be consistent with progress.c naming
      progress.c: use dereferenced "progress" variable, not "(*p_progress)"
      progress.c: refactor stop_progress{,_msg}() to use helpers
      progress API: unify stop_progress{,_msg}(), fix trace2 bug
      pack-bitmap-write.c: don't return without stop_progress()
      t0051: use "skip_all" under !MINGW in single-test file
      hash-object: fix a trivial leak in --path
      ls-remote & transport API: release "struct transport_ls_refs_options"
      grep.h: remove unused "regex_t regexp" from grep_opt
      log tests: check if grep_config() is called by "log"-like cmds
      grep tests: create a helper function for "BRE" or "ERE"
      grep tests: add missing "grep.patternType" config tests
      built-ins: trust the "prefix" from run_builtin()
      grep.c: don't pass along NULL callback value
      grep API: call grep_config() after grep_init()
      grep.h: make "grep_opt.pattern_type_option" use its enum
      grep.c: do "if (bool && memchr())" not "if (memchr() && bool)"
      grep: simplify config parsing and option parsing
      cache.h: remove always unused show_date_human() declaration
      date API: create a date.h, split from cache.h
      date API: provide and use a DATE_MODE_INIT
      date API: add basic API docs
      date API: add and use a date_mode_release()
      diff.[ch]: have diff_free() call clear_pathspec(opts.pathspec)
      diff.[ch]: have diff_free() free options->parseopts
      hook tests: test for exact "pre-push" hook input
      hook tests: use a modern style for "pre-push" tests
      git-compat-util.h: clarify GCC v.s. C99-specific in comment
      C99: remove hardcoded-out !HAVE_VARIADIC_MACROS code
      help doc: add missing "]" to "[-a|--all]"
      help.c: use puts() instead of printf{,_ln}() for consistency
      help tests: test "git" and "git help [-a|-g] spacing
      help.c: split up list_all_cmds_help() function
      help: note the option name on option incompatibility
      help: correct usage & behavior of "git help --all"
      help: error if [-a|-g|-c] and [-i|-m|-w] are combined
      help: add --no-[external-commands|aliases] for use with --all
      help: don't print "\n" before single-section output
      imap-send.c: use designated initializers for "struct imap_server_conf"
      trace2: use designated initializers for "struct tr2_tgt"
      trace2: use designated initializers for "struct tr2_dst"
      object-file: use designated initializers for "struct git_hash_algo"
      archive-*.c: use designated initializers for "struct archiver"
      userdiff.c: use designated initializers for "struct userdiff_driver"
      convert.c: use designated initializers for "struct stream_filter*"
      refspec.c: use designated initializers for "struct refspec_item"
      fast-import.c: use designated initializers for "partial" struct assignments
      object-file.c: split up declaration of unrelated variables
      object-file API: return "void", not "int" from hash_object_file()
      object-file API: add a format_object_header() function
      object-file API: have write_object_file() take "enum object_type"
      object API: correct "buf" v.s. "map" mismatch in *.c and *.h
      object API docs: move check_object_signature() docs to cache.h
      object API users + docs: check <0, not !0 with check_object_signature()
      object-file API: split up and simplify check_object_signature()
      object API: rename hash_object_file_literally() to write_*()
      object-file API: have hash_object_file() take "enum object_type"
      object-file.c: add a literal version of write_object_file_prepare()
      object-file API: pass an enum to read_object_with_reference()
      test-lib: add GIT_SAN_OPTIONS, inherit [AL]SAN_OPTIONS
      test-lib: correct and assert TEST_DIRECTORY overriding
      test-lib: make $GIT_BUILD_DIR an absolute path
      test-lib: add "fast_unwind_on_malloc=0" to LSAN_OPTIONS
      scalar Makefile: use "The default target of..." pattern
      Makefiles: add "shared.mak", move ".DELETE_ON_ERROR" to it
      Makefile: disable GNU make built-in wildcard rules
      Makefile: define $(LIB_H) in terms of $(FIND_SOURCE_FILES)
      Makefile: move ".SUFFIXES" rule to shared.mak
      Makefile: move $(comma), $(empty) and $(space) to shared.mak
      Makefile: add "$(QUIET)" boilerplate to shared.mak
      Makefiles: add and use wildcard "mkdir -p" template
      log tests: fix "abort tests early" regression in ff37a60c369
      index-pack: fix memory leaks
      merge-base: free() allocated "struct commit **" list
      diff.c: free "buf" in diff_words_flush()
      urlmatch.c: add and use a *_release() function
      remote-curl.c: free memory in cmd_main()
      bundle: call strvec_clear() on allocated strvec
      transport: stop needlessly copying bundle header references
      submodule--helper: fix trivial leak in module_add()
      commit-graph: fix memory leak in misused string_list API
      commit-graph: stop fill_oids_from_packs() progress on error and free()
      lockfile API users: simplify and don't leak "path"
      range-diff: plug memory leak in common invocation
      range-diff: plug memory leak in read_patches()
      repository.c: free the "path cache" in repo_clear()
      submodule tests: test for init and update failure output
      submodule--helper: don't use bitfield indirection for parse_options()
      gettext API users: don't explicitly cast ngettext()'s "n"
      string-list API: change "nr" and "alloc" to "size_t"
      merge: don't run post-hook logic on --no-verify
      hooks: fix an obscure TOCTOU "did we just run a hook?" race
      tests: change some 'test $(git) = "x"' to test_cmp
      tests: use "test_stdout_line_count", not "test $(git [...] | wc -l)"
      read-tree tests: check "diff-files" exit code on failure
      diff tests: don't ignore "git diff" exit code
      diff tests: don't ignore "git diff" exit code in "read" loop
      apply tests: use "test_must_fail" instead of ad-hoc pattern
      merge tests: use "test_must_fail" instead of ad-hoc pattern
      rev-parse tests: don't ignore "git reflog" exit code
      notes tests: don't ignore "git" exit code
      diff tests: don't ignore "git rev-list" exit code
      rev-list tests: don't hide abort() in "test_expect_failure"
      gettext tests: don't ignore "test-tool regex" exit code
      apply tests: don't ignore "git ls-files" exit code, drop sub-shell
      checkout tests: don't ignore "git <cmd>" exit code
      rev-list simplify tests: don't ignore "git" exit code
      list-objects: handle NULL function pointers
      reflog: don't be noisy on empty reflogs
      builtin/submodule--helper.c: rename option struct to "opt"
      test-lib-functions: add and use a "test_hook" wrapper
      hook tests: turn exit code assertions into a loop
      http tests: don't rely on "hook/post-update.sample"
      tests: assume the hooks are disabled by default
      bugreport tests: tighten up "git bugreport -s hooks" test
      fetch+push tests: use "test_hook" and "test_when_finished" pattern
      gc + p4 tests: use "test_hook", remove sub-shells
      tests: change "cat && chmod +x" to use "test_hook"
      tests: change "mkdir -p && write_script" to use "test_hook"
      tests: use "test_hook" for misc "mkdir -p" and "chmod" cases
      diff.c: fix a double-free regression in a18d66cefb
      refs: use designated initializers for "struct ref_storage_be"
      refs: use designated initializers for "struct ref_iterator_vtable"
      misc *.c: use designated initializers for struct assignments
      packed-backend: remove stub BUG(...) functions
      refs debug: add a wrapper for "read_symbolic_ref"
      tests: extend "test_hook" for "rm" and "chmod -x", convert "$HOOK"
      proc-receive hook tests: use "test_hook" instead of "write_script"
      http tests: use "test_hook" for "smart" and "dumb" http tests
      reflog.c: indent argument lists
      reflog: refactor cmd_reflog() to "if" branches
      reflog tests: add missing "git reflog exists" tests
      reflog: move "usage" variables and use macros
      git reflog [expire|delete]: make -h output consistent with SYNOPSIS
      reflog exists: use parse_options() API
      Makefile: use ' ', not non-existing $(wspfx_SQ)
      ls-tree tests: add tests for --name-status
      ls-tree: remove commented-out code
      ls-tree: add missing braces to "else" arms
      ls-tree: use "enum object_type", not {blob,tree,commit}_type
      ls-tree: use "size_t", not "int" for "struct strbuf"'s "len"
      ls-tree: introduce struct "show_tree_data"
      ls-tree: introduce "--format" option
      ls-tree: detect and error on --name-only --name-status
      ls-tree: split up "fast path" callbacks
      hooks: fix "invoked hook" regression in a8cc5943338
      reflog: convert to parse_options() API
      reflog [show]: display sensible -h output
      test-lib: have --immediate emit valid TAP on failure
      pack-objects: lazily set up "struct rev_info", don't leak
      reftable: make assignments portable to AIX xlc v12.01


^ permalink raw reply	[relevance 3%]

* [PATCH v9 00/30] Builtin FSMonitor Part 2
  2022-03-24 16:49  2%   ` [PATCH v8 00/30] " Jeff Hostetler via GitGitGadget
@ 2022-03-25 18:02  3%     ` Jeff Hostetler via GitGitGadget
  2022-03-25 19:02  0%       ` rsbecker
  0 siblings, 1 reply; 162+ results
From: Jeff Hostetler via GitGitGadget @ 2022-03-25 18:02 UTC (permalink / raw)
  To: git
  Cc: Bagas Sanjaya, Ævar Arnfjörð Bjarmason,
	Jeff Hostetler, Eric Sunshine, Johannes Schindelin, Tao Klerks,
	rsbecker, Jeff Hostetler

Here is V9 of Part 2 of my builtin FSMonitor series. This version addresses
bash style issues in t7527 raised on V8. These changes do not require a new
version of Part 3.

Here is a range-diff from V8 to V9 relative to 715d08a9e5 (The eighth batch,
2022-02-25).

 1:  e98373f997 =  1:  e98373f997 fsmonitor: enhance existing comments, clarify trivial response handling
 2:  ab68b94417 =  2:  ab68b94417 fsmonitor-ipc: create client routines for git-fsmonitor--daemon
 3:  e04c7301f2 =  3:  e04c7301f2 fsmonitor: config settings are repository-specific
 4:  ea02ba25d8 =  4:  ea02ba25d8 fsmonitor: use IPC to query the builtin FSMonitor daemon
 5:  6ab7db9cb7 =  5:  6ab7db9cb7 fsmonitor: document builtin fsmonitor
 6:  0ce8ae3f2c =  6:  0ce8ae3f2c fsmonitor--daemon: add a built-in fsmonitor daemon
 7:  4624ce2fa4 =  7:  4624ce2fa4 fsmonitor--daemon: implement 'stop' and 'status' commands
 8:  a29fe7266a =  8:  a29fe7266a compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
 9:  2f8a42fdb9 =  9:  2f8a42fdb9 compat/fsmonitor/fsm-listen-darwin: stub in backend for Darwin
10:  f07800690e = 10:  f07800690e fsmonitor--daemon: implement 'run' command
11:  a6a39a3306 = 11:  a6a39a3306 fsmonitor--daemon: implement 'start' command
12:  d62e338d00 = 12:  d62e338d00 fsmonitor--daemon: add pathname classification
13:  53e06b4ae5 = 13:  53e06b4ae5 fsmonitor--daemon: define token-ids
14:  39f43fabe0 = 14:  39f43fabe0 fsmonitor--daemon: create token-based changed path cache
15:  239558e34f = 15:  239558e34f compat/fsmonitor/fsm-listen-win32: implement FSMonitor backend on Windows
16:  14b775e9d8 = 16:  14b775e9d8 compat/fsmonitor/fsm-listen-darwin: add MacOS header files for FSEvent
17:  55bd7aee06 = 17:  55bd7aee06 compat/fsmonitor/fsm-listen-darwin: implement FSEvent listener on MacOS
18:  c43009124f = 18:  c43009124f fsmonitor--daemon: implement handle_client callback
19:  ed338777b5 = 19:  ed338777b5 help: include fsmonitor--daemon feature flag in version info
20:  c99bac29d4 = 20:  c99bac29d4 t/helper/fsmonitor-client: create IPC client to talk to FSMonitor Daemon
21:  c8709da945 ! 21:  bc94e379b0 t7527: create test for fsmonitor--daemon
    @@ Commit message
         t7527: create test for fsmonitor--daemon
     
         Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
    -    Signed-off-by: Junio C Hamano <gitster@pobox.com>
     
      ## t/t7527-builtin-fsmonitor.sh (new) ##
     @@
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +    rm -rf $1
     +}
     +
    -+is_value () {
    -+    test -n "$1" && test "${1::1}" != "-"
    -+}
    -+
     +start_daemon () {
    -+    r= &&
    -+    tf= &&
    -+    t2= &&
    -+    tk= &&
    ++    r= tf= t2= tk= &&
     +
     +    while test "$#" -ne 0
     +    do
     +        case "$1" in
     +        -C)
    -+            shift;
    -+            is_value $1 || BUG "error: -C requires value"
    -+            r="-C $1"
    ++            r="-C ${2?}"
     +            shift
     +            ;;
     +        --tf)
    -+            shift;
    -+            is_value $1 || BUG "error: --tf requires value"
    -+            tf="$1"
    ++            tf="${2?}"
     +            shift
     +            ;;
     +        --t2)
    -+            shift;
    -+            is_value $1 || BUG "error: --t2 requires value"
    -+            t2="$1"
    ++            t2="${2?}"
     +            shift
     +            ;;
     +        --tk)
    -+            shift;
    -+            is_value $1 || BUG "error: --tk requires value"
    -+            tk="$1"
    ++            tk="${2?}"
     +            shift
     +            ;;
    -+        *)
    ++        -*)
     +            BUG "error: unknown option: '$1'"
     +            ;;
    ++        *)
    ++            BUG "error: unbound argument: '$1'"
    ++            ;;
     +        esac
    ++        shift
     +    done &&
     +
     +    (
22:  cc39ecf10a = 22:  06d56d3a73 t/perf: avoid copying builtin fsmonitor files into test repo
23:  2bb3eb8476 = 23:  2dd0215127 t/helper/test-chmtime: skip directories on Windows
24:  bab9a9b080 = 24:  bb88cddc13 t/perf/p7519: fix coding style
25:  2dd06ad2f7 = 25:  50c2afaa49 t/perf/p7519: speed up test on Windows
26:  6eaa5765ae = 26:  5b18e3b692 t/perf/p7519: add fsmonitor--daemon test cases
27:  30957f3930 = 27:  899c23f63c fsmonitor--daemon: periodically truncate list of modified files
28:  c8ca2a1727 = 28:  597a7192f9 fsmonitor--daemon: use a cookie file to sync with file system
29:  4caf1d89b8 = 29:  68a05fd289 fsmonitor: force update index after large responses
30:  f87a1eba69 = 30:  5eb696daba t7527: test status with untracked-cache and fsmonitor--daemon


Jeff Hostetler (30):
  fsmonitor: enhance existing comments, clarify trivial response
    handling
  fsmonitor-ipc: create client routines for git-fsmonitor--daemon
  fsmonitor: config settings are repository-specific
  fsmonitor: use IPC to query the builtin FSMonitor daemon
  fsmonitor: document builtin fsmonitor
  fsmonitor--daemon: add a built-in fsmonitor daemon
  fsmonitor--daemon: implement 'stop' and 'status' commands
  compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
  compat/fsmonitor/fsm-listen-darwin: stub in backend for Darwin
  fsmonitor--daemon: implement 'run' command
  fsmonitor--daemon: implement 'start' command
  fsmonitor--daemon: add pathname classification
  fsmonitor--daemon: define token-ids
  fsmonitor--daemon: create token-based changed path cache
  compat/fsmonitor/fsm-listen-win32: implement FSMonitor backend on
    Windows
  compat/fsmonitor/fsm-listen-darwin: add MacOS header files for FSEvent
  compat/fsmonitor/fsm-listen-darwin: implement FSEvent listener on
    MacOS
  fsmonitor--daemon: implement handle_client callback
  help: include fsmonitor--daemon feature flag in version info
  t/helper/fsmonitor-client: create IPC client to talk to FSMonitor
    Daemon
  t7527: create test for fsmonitor--daemon
  t/perf: avoid copying builtin fsmonitor files into test repo
  t/helper/test-chmtime: skip directories on Windows
  t/perf/p7519: fix coding style
  t/perf/p7519: speed up test on Windows
  t/perf/p7519: add fsmonitor--daemon test cases
  fsmonitor--daemon: periodically truncate list of modified files
  fsmonitor--daemon: use a cookie file to sync with file system
  fsmonitor: force update index after large responses
  t7527: test status with untracked-cache and fsmonitor--daemon

 .gitignore                              |    1 +
 Documentation/config/core.txt           |   60 +-
 Documentation/git-fsmonitor--daemon.txt |   75 ++
 Documentation/git-update-index.txt      |    8 +-
 Makefile                                |   17 +
 builtin.h                               |    1 +
 builtin/fsmonitor--daemon.c             | 1479 +++++++++++++++++++++++
 builtin/update-index.c                  |    7 +-
 cache.h                                 |    1 -
 compat/fsmonitor/fsm-darwin-gcc.h       |   92 ++
 compat/fsmonitor/fsm-listen-darwin.c    |  427 +++++++
 compat/fsmonitor/fsm-listen-win32.c     |  586 +++++++++
 compat/fsmonitor/fsm-listen.h           |   49 +
 config.c                                |   14 -
 config.h                                |    1 -
 config.mak.uname                        |   20 +
 contrib/buildsystems/CMakeLists.txt     |   10 +
 environment.c                           |    1 -
 fsmonitor--daemon.h                     |  166 +++
 fsmonitor-ipc.c                         |  171 +++
 fsmonitor-ipc.h                         |   48 +
 fsmonitor-settings.c                    |  114 ++
 fsmonitor-settings.h                    |   21 +
 fsmonitor.c                             |  216 +++-
 fsmonitor.h                             |   15 +-
 git.c                                   |    1 +
 help.c                                  |    4 +
 repo-settings.c                         |    1 +
 repository.h                            |    3 +
 t/README                                |    4 +-
 t/helper/test-chmtime.c                 |   15 +
 t/helper/test-fsmonitor-client.c        |  116 ++
 t/helper/test-tool.c                    |    1 +
 t/helper/test-tool.h                    |    1 +
 t/perf/p7519-fsmonitor.sh               |   68 +-
 t/perf/perf-lib.sh                      |    2 +-
 t/t7527-builtin-fsmonitor.sh            |  609 ++++++++++
 t/test-lib.sh                           |    7 +
 38 files changed, 4326 insertions(+), 106 deletions(-)
 create mode 100644 Documentation/git-fsmonitor--daemon.txt
 create mode 100644 builtin/fsmonitor--daemon.c
 create mode 100644 compat/fsmonitor/fsm-darwin-gcc.h
 create mode 100644 compat/fsmonitor/fsm-listen-darwin.c
 create mode 100644 compat/fsmonitor/fsm-listen-win32.c
 create mode 100644 compat/fsmonitor/fsm-listen.h
 create mode 100644 fsmonitor--daemon.h
 create mode 100644 fsmonitor-ipc.c
 create mode 100644 fsmonitor-ipc.h
 create mode 100644 fsmonitor-settings.c
 create mode 100644 fsmonitor-settings.h
 create mode 100644 t/helper/test-fsmonitor-client.c
 create mode 100755 t/t7527-builtin-fsmonitor.sh


base-commit: 715d08a9e51251ad8290b181b6ac3b9e1f9719d7
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1041%2Fjeffhostetler%2Fbuiltin-fsmonitor-part2-v9
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1041/jeffhostetler/builtin-fsmonitor-part2-v9
Pull-Request: https://github.com/gitgitgadget/git/pull/1041

Range-diff vs v8:

  1:  e98373f997f =  1:  e98373f997f fsmonitor: enhance existing comments, clarify trivial response handling
  2:  ab68b944173 =  2:  ab68b944173 fsmonitor-ipc: create client routines for git-fsmonitor--daemon
  3:  e04c7301f24 =  3:  e04c7301f24 fsmonitor: config settings are repository-specific
  4:  ea02ba25d8f =  4:  ea02ba25d8f fsmonitor: use IPC to query the builtin FSMonitor daemon
  5:  6ab7db9cb76 =  5:  6ab7db9cb76 fsmonitor: document builtin fsmonitor
  6:  0ce8ae3f2cf =  6:  0ce8ae3f2cf fsmonitor--daemon: add a built-in fsmonitor daemon
  7:  4624ce2fa47 =  7:  4624ce2fa47 fsmonitor--daemon: implement 'stop' and 'status' commands
  8:  a29fe7266a4 =  8:  a29fe7266a4 compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
  9:  2f8a42fdb93 =  9:  2f8a42fdb93 compat/fsmonitor/fsm-listen-darwin: stub in backend for Darwin
 10:  f07800690ee = 10:  f07800690ee fsmonitor--daemon: implement 'run' command
 11:  a6a39a3306d = 11:  a6a39a3306d fsmonitor--daemon: implement 'start' command
 12:  d62e338d008 = 12:  d62e338d008 fsmonitor--daemon: add pathname classification
 13:  53e06b4ae5d = 13:  53e06b4ae5d fsmonitor--daemon: define token-ids
 14:  39f43fabe02 = 14:  39f43fabe02 fsmonitor--daemon: create token-based changed path cache
 15:  239558e34ff = 15:  239558e34ff compat/fsmonitor/fsm-listen-win32: implement FSMonitor backend on Windows
 16:  14b775e9d8b = 16:  14b775e9d8b compat/fsmonitor/fsm-listen-darwin: add MacOS header files for FSEvent
 17:  55bd7aee06c = 17:  55bd7aee06c compat/fsmonitor/fsm-listen-darwin: implement FSEvent listener on MacOS
 18:  c43009124fb = 18:  c43009124fb fsmonitor--daemon: implement handle_client callback
 19:  ed338777b56 = 19:  ed338777b56 help: include fsmonitor--daemon feature flag in version info
 20:  c99bac29d42 = 20:  c99bac29d42 t/helper/fsmonitor-client: create IPC client to talk to FSMonitor Daemon
 21:  c8709da9457 ! 21:  bc94e379b03 t7527: create test for fsmonitor--daemon
     @@ Commit message
          t7527: create test for fsmonitor--daemon
      
          Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
     -    Signed-off-by: Junio C Hamano <gitster@pobox.com>
      
       ## t/t7527-builtin-fsmonitor.sh (new) ##
      @@
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +	rm -rf $1
      +}
      +
     -+is_value () {
     -+	test -n "$1" && test "${1::1}" != "-"
     -+}
     -+
      +start_daemon () {
     -+	r= &&
     -+	tf= &&
     -+	t2= &&
     -+	tk= &&
     ++	r= tf= t2= tk= &&
      +
      +	while test "$#" -ne 0
      +	do
      +		case "$1" in
      +		-C)
     -+			shift;
     -+			is_value $1 || BUG "error: -C requires value"
     -+			r="-C $1"
     ++			r="-C ${2?}"
      +			shift
      +			;;
      +		--tf)
     -+			shift;
     -+			is_value $1 || BUG "error: --tf requires value"
     -+			tf="$1"
     ++			tf="${2?}"
      +			shift
      +			;;
      +		--t2)
     -+			shift;
     -+			is_value $1 || BUG "error: --t2 requires value"
     -+			t2="$1"
     ++			t2="${2?}"
      +			shift
      +			;;
      +		--tk)
     -+			shift;
     -+			is_value $1 || BUG "error: --tk requires value"
     -+			tk="$1"
     ++			tk="${2?}"
      +			shift
      +			;;
     -+		*)
     ++		-*)
      +			BUG "error: unknown option: '$1'"
      +			;;
     ++		*)
     ++			BUG "error: unbound argument: '$1'"
     ++			;;
      +		esac
     ++		shift
      +	done &&
      +
      +	(
 22:  cc39ecf10ae = 22:  06d56d3a733 t/perf: avoid copying builtin fsmonitor files into test repo
 23:  2bb3eb84767 = 23:  2dd02151278 t/helper/test-chmtime: skip directories on Windows
 24:  bab9a9b0802 = 24:  bb88cddc137 t/perf/p7519: fix coding style
 25:  2dd06ad2f71 = 25:  50c2afaa49e t/perf/p7519: speed up test on Windows
 26:  6eaa5765ae1 = 26:  5b18e3b6926 t/perf/p7519: add fsmonitor--daemon test cases
 27:  30957f3930e = 27:  899c23f63c3 fsmonitor--daemon: periodically truncate list of modified files
 28:  c8ca2a17277 = 28:  597a7192f94 fsmonitor--daemon: use a cookie file to sync with file system
 29:  4caf1d89b84 = 29:  68a05fd2892 fsmonitor: force update index after large responses
 30:  f87a1eba693 = 30:  5eb696daba2 t7527: test status with untracked-cache and fsmonitor--daemon

-- 
gitgitgadget

^ permalink raw reply	[relevance 3%]

* RE: [PATCH v9 00/30] Builtin FSMonitor Part 2
  2022-03-25 18:02  3%     ` [PATCH v9 " Jeff Hostetler via GitGitGadget
@ 2022-03-25 19:02  0%       ` rsbecker
  0 siblings, 0 replies; 162+ results
From: rsbecker @ 2022-03-25 19:02 UTC (permalink / raw)
  To: 'Jeff Hostetler via GitGitGadget', git
  Cc: 'Bagas Sanjaya',
	'Ævar Arnfjörð Bjarmason',
	'Jeff Hostetler', 'Eric Sunshine',
	'Johannes Schindelin', 'Tao Klerks',
	'Jeff Hostetler'

On March 25, 2022 2:03 PM, Jeff Hostetler wrote:
>Here is V9 of Part 2 of my builtin FSMonitor series. This version addresses bash
>style issues in t7527 raised on V8. These changes do not require a new version of
>Part 3.
>
>Here is a range-diff from V8 to V9 relative to 715d08a9e5 (The eighth batch, 2022-
>02-25).
>
> 1:  e98373f997 =  1:  e98373f997 fsmonitor: enhance existing comments, clarify
>trivial response handling
> 2:  ab68b94417 =  2:  ab68b94417 fsmonitor-ipc: create client routines for git-
>fsmonitor--daemon
> 3:  e04c7301f2 =  3:  e04c7301f2 fsmonitor: config settings are repository-specific
> 4:  ea02ba25d8 =  4:  ea02ba25d8 fsmonitor: use IPC to query the builtin FSMonitor
>daemon
> 5:  6ab7db9cb7 =  5:  6ab7db9cb7 fsmonitor: document builtin fsmonitor
> 6:  0ce8ae3f2c =  6:  0ce8ae3f2c fsmonitor--daemon: add a built-in fsmonitor
>daemon
> 7:  4624ce2fa4 =  7:  4624ce2fa4 fsmonitor--daemon: implement 'stop' and 'status'
>commands
> 8:  a29fe7266a =  8:  a29fe7266a compat/fsmonitor/fsm-listen-win32: stub in
>backend for Windows
> 9:  2f8a42fdb9 =  9:  2f8a42fdb9 compat/fsmonitor/fsm-listen-darwin: stub in
>backend for Darwin
>10:  f07800690e = 10:  f07800690e fsmonitor--daemon: implement 'run' command
>11:  a6a39a3306 = 11:  a6a39a3306 fsmonitor--daemon: implement 'start' command
>12:  d62e338d00 = 12:  d62e338d00 fsmonitor--daemon: add pathname
>classification
>13:  53e06b4ae5 = 13:  53e06b4ae5 fsmonitor--daemon: define token-ids
>14:  39f43fabe0 = 14:  39f43fabe0 fsmonitor--daemon: create token-based
>changed path cache
>15:  239558e34f = 15:  239558e34f compat/fsmonitor/fsm-listen-win32: implement
>FSMonitor backend on Windows
>16:  14b775e9d8 = 16:  14b775e9d8 compat/fsmonitor/fsm-listen-darwin: add
>MacOS header files for FSEvent
>17:  55bd7aee06 = 17:  55bd7aee06 compat/fsmonitor/fsm-listen-darwin:
>implement FSEvent listener on MacOS
>18:  c43009124f = 18:  c43009124f fsmonitor--daemon: implement handle_client
>callback
>19:  ed338777b5 = 19:  ed338777b5 help: include fsmonitor--daemon feature flag in
>version info
>20:  c99bac29d4 = 20:  c99bac29d4 t/helper/fsmonitor-client: create IPC client to
>talk to FSMonitor Daemon
>21:  c8709da945 ! 21:  bc94e379b0 t7527: create test for fsmonitor--daemon
>    @@ Commit message
>         t7527: create test for fsmonitor--daemon
>
>         Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
>    -    Signed-off-by: Junio C Hamano <gitster@pobox.com>
>
>      ## t/t7527-builtin-fsmonitor.sh (new) ##
>     @@
>    @@ t/t7527-builtin-fsmonitor.sh (new)
>     +    rm -rf $1
>     +}
>     +
>    -+is_value () {
>    -+    test -n "$1" && test "${1::1}" != "-"
>    -+}
>    -+
>     +start_daemon () {
>    -+    r= &&
>    -+    tf= &&
>    -+    t2= &&
>    -+    tk= &&
>    ++    r= tf= t2= tk= &&
>     +
>     +    while test "$#" -ne 0
>     +    do
>     +        case "$1" in
>     +        -C)
>    -+            shift;
>    -+            is_value $1 || BUG "error: -C requires value"
>    -+            r="-C $1"
>    ++            r="-C ${2?}"
>     +            shift
>     +            ;;
>     +        --tf)
>    -+            shift;
>    -+            is_value $1 || BUG "error: --tf requires value"
>    -+            tf="$1"
>    ++            tf="${2?}"
>     +            shift
>     +            ;;
>     +        --t2)
>    -+            shift;
>    -+            is_value $1 || BUG "error: --t2 requires value"
>    -+            t2="$1"
>    ++            t2="${2?}"
>     +            shift
>     +            ;;
>     +        --tk)
>    -+            shift;
>    -+            is_value $1 || BUG "error: --tk requires value"
>    -+            tk="$1"
>    ++            tk="${2?}"
>     +            shift
>     +            ;;
>    -+        *)
>    ++        -*)
>     +            BUG "error: unknown option: '$1'"
>     +            ;;
>    ++        *)
>    ++            BUG "error: unbound argument: '$1'"
>    ++            ;;
>     +        esac
>    ++        shift
>     +    done &&
>     +
>     +    (
>22:  cc39ecf10a = 22:  06d56d3a73 t/perf: avoid copying builtin fsmonitor files into
>test repo
>23:  2bb3eb8476 = 23:  2dd0215127 t/helper/test-chmtime: skip directories on
>Windows
>24:  bab9a9b080 = 24:  bb88cddc13 t/perf/p7519: fix coding style
>25:  2dd06ad2f7 = 25:  50c2afaa49 t/perf/p7519: speed up test on Windows
>26:  6eaa5765ae = 26:  5b18e3b692 t/perf/p7519: add fsmonitor--daemon test
>cases
>27:  30957f3930 = 27:  899c23f63c fsmonitor--daemon: periodically truncate list of
>modified files
>28:  c8ca2a1727 = 28:  597a7192f9 fsmonitor--daemon: use a cookie file to sync with
>file system
>29:  4caf1d89b8 = 29:  68a05fd289 fsmonitor: force update index after large
>responses
>30:  f87a1eba69 = 30:  5eb696daba t7527: test status with untracked-cache and
>fsmonitor--daemon
>
>
>Jeff Hostetler (30):
>  fsmonitor: enhance existing comments, clarify trivial response
>    handling
>  fsmonitor-ipc: create client routines for git-fsmonitor--daemon
>  fsmonitor: config settings are repository-specific
>  fsmonitor: use IPC to query the builtin FSMonitor daemon
>  fsmonitor: document builtin fsmonitor
>  fsmonitor--daemon: add a built-in fsmonitor daemon
>  fsmonitor--daemon: implement 'stop' and 'status' commands
>  compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
>  compat/fsmonitor/fsm-listen-darwin: stub in backend for Darwin
>  fsmonitor--daemon: implement 'run' command
>  fsmonitor--daemon: implement 'start' command
>  fsmonitor--daemon: add pathname classification
>  fsmonitor--daemon: define token-ids
>  fsmonitor--daemon: create token-based changed path cache
>  compat/fsmonitor/fsm-listen-win32: implement FSMonitor backend on
>    Windows
>  compat/fsmonitor/fsm-listen-darwin: add MacOS header files for FSEvent
>  compat/fsmonitor/fsm-listen-darwin: implement FSEvent listener on
>    MacOS
>  fsmonitor--daemon: implement handle_client callback
>  help: include fsmonitor--daemon feature flag in version info
>  t/helper/fsmonitor-client: create IPC client to talk to FSMonitor
>    Daemon
>  t7527: create test for fsmonitor--daemon
>  t/perf: avoid copying builtin fsmonitor files into test repo
>  t/helper/test-chmtime: skip directories on Windows
>  t/perf/p7519: fix coding style
>  t/perf/p7519: speed up test on Windows
>  t/perf/p7519: add fsmonitor--daemon test cases
>  fsmonitor--daemon: periodically truncate list of modified files
>  fsmonitor--daemon: use a cookie file to sync with file system
>  fsmonitor: force update index after large responses
>  t7527: test status with untracked-cache and fsmonitor--daemon
>
> .gitignore                              |    1 +
> Documentation/config/core.txt           |   60 +-
> Documentation/git-fsmonitor--daemon.txt |   75 ++
> Documentation/git-update-index.txt      |    8 +-
> Makefile                                |   17 +
> builtin.h                               |    1 +
> builtin/fsmonitor--daemon.c             | 1479 +++++++++++++++++++++++
> builtin/update-index.c                  |    7 +-
> cache.h                                 |    1 -
> compat/fsmonitor/fsm-darwin-gcc.h       |   92 ++
> compat/fsmonitor/fsm-listen-darwin.c    |  427 +++++++
> compat/fsmonitor/fsm-listen-win32.c     |  586 +++++++++
> compat/fsmonitor/fsm-listen.h           |   49 +
> config.c                                |   14 -
> config.h                                |    1 -
> config.mak.uname                        |   20 +
> contrib/buildsystems/CMakeLists.txt     |   10 +
> environment.c                           |    1 -
> fsmonitor--daemon.h                     |  166 +++
> fsmonitor-ipc.c                         |  171 +++
> fsmonitor-ipc.h                         |   48 +
> fsmonitor-settings.c                    |  114 ++
> fsmonitor-settings.h                    |   21 +
> fsmonitor.c                             |  216 +++-
> fsmonitor.h                             |   15 +-
> git.c                                   |    1 +
> help.c                                  |    4 +
> repo-settings.c                         |    1 +
> repository.h                            |    3 +
> t/README                                |    4 +-
> t/helper/test-chmtime.c                 |   15 +
> t/helper/test-fsmonitor-client.c        |  116 ++
> t/helper/test-tool.c                    |    1 +
> t/helper/test-tool.h                    |    1 +
> t/perf/p7519-fsmonitor.sh               |   68 +-
> t/perf/perf-lib.sh                      |    2 +-
> t/t7527-builtin-fsmonitor.sh            |  609 ++++++++++
> t/test-lib.sh                           |    7 +
> 38 files changed, 4326 insertions(+), 106 deletions(-)  create mode 100644
>Documentation/git-fsmonitor--daemon.txt
> create mode 100644 builtin/fsmonitor--daemon.c  create mode 100644
>compat/fsmonitor/fsm-darwin-gcc.h  create mode 100644 compat/fsmonitor/fsm-
>listen-darwin.c
> create mode 100644 compat/fsmonitor/fsm-listen-win32.c
> create mode 100644 compat/fsmonitor/fsm-listen.h  create mode 100644
>fsmonitor--daemon.h  create mode 100644 fsmonitor-ipc.c  create mode 100644
>fsmonitor-ipc.h  create mode 100644 fsmonitor-settings.c  create mode 100644
>fsmonitor-settings.h  create mode 100644 t/helper/test-fsmonitor-client.c  create
>mode 100755 t/t7527-builtin-fsmonitor.sh
>
>
>base-commit: 715d08a9e51251ad8290b181b6ac3b9e1f9719d7
>Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-
>1041%2Fjeffhostetler%2Fbuiltin-fsmonitor-part2-v9
>Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-
>1041/jeffhostetler/builtin-fsmonitor-part2-v9
>Pull-Request: https://github.com/gitgitgadget/git/pull/1041
>
>Range-diff vs v8:
>
>  1:  e98373f997f =  1:  e98373f997f fsmonitor: enhance existing comments, clarify
>trivial response handling
>  2:  ab68b944173 =  2:  ab68b944173 fsmonitor-ipc: create client routines for git-
>fsmonitor--daemon
>  3:  e04c7301f24 =  3:  e04c7301f24 fsmonitor: config settings are repository-
>specific
>  4:  ea02ba25d8f =  4:  ea02ba25d8f fsmonitor: use IPC to query the builtin
>FSMonitor daemon
>  5:  6ab7db9cb76 =  5:  6ab7db9cb76 fsmonitor: document builtin fsmonitor
>  6:  0ce8ae3f2cf =  6:  0ce8ae3f2cf fsmonitor--daemon: add a built-in fsmonitor
>daemon
>  7:  4624ce2fa47 =  7:  4624ce2fa47 fsmonitor--daemon: implement 'stop' and
>'status' commands
>  8:  a29fe7266a4 =  8:  a29fe7266a4 compat/fsmonitor/fsm-listen-win32: stub in
>backend for Windows
>  9:  2f8a42fdb93 =  9:  2f8a42fdb93 compat/fsmonitor/fsm-listen-darwin: stub in
>backend for Darwin
> 10:  f07800690ee = 10:  f07800690ee fsmonitor--daemon: implement 'run'
>command
> 11:  a6a39a3306d = 11:  a6a39a3306d fsmonitor--daemon: implement 'start'
>command
> 12:  d62e338d008 = 12:  d62e338d008 fsmonitor--daemon: add pathname
>classification
> 13:  53e06b4ae5d = 13:  53e06b4ae5d fsmonitor--daemon: define token-ids
> 14:  39f43fabe02 = 14:  39f43fabe02 fsmonitor--daemon: create token-based
>changed path cache
> 15:  239558e34ff = 15:  239558e34ff compat/fsmonitor/fsm-listen-win32:
>implement FSMonitor backend on Windows
> 16:  14b775e9d8b = 16:  14b775e9d8b compat/fsmonitor/fsm-listen-darwin: add
>MacOS header files for FSEvent
> 17:  55bd7aee06c = 17:  55bd7aee06c compat/fsmonitor/fsm-listen-darwin:
>implement FSEvent listener on MacOS
> 18:  c43009124fb = 18:  c43009124fb fsmonitor--daemon: implement handle_client
>callback
> 19:  ed338777b56 = 19:  ed338777b56 help: include fsmonitor--daemon feature
>flag in version info
> 20:  c99bac29d42 = 20:  c99bac29d42 t/helper/fsmonitor-client: create IPC client to
>talk to FSMonitor Daemon
> 21:  c8709da9457 ! 21:  bc94e379b03 t7527: create test for fsmonitor--daemon
>     @@ Commit message
>          t7527: create test for fsmonitor--daemon
>
>          Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
>     -    Signed-off-by: Junio C Hamano <gitster@pobox.com>
>
>       ## t/t7527-builtin-fsmonitor.sh (new) ##
>      @@
>     @@ t/t7527-builtin-fsmonitor.sh (new)
>      +	rm -rf $1
>      +}
>      +
>     -+is_value () {
>     -+	test -n "$1" && test "${1::1}" != "-"
>     -+}
>     -+
>      +start_daemon () {
>     -+	r= &&
>     -+	tf= &&
>     -+	t2= &&
>     -+	tk= &&
>     ++	r= tf= t2= tk= &&
>      +
>      +	while test "$#" -ne 0
>      +	do
>      +		case "$1" in
>      +		-C)
>     -+			shift;
>     -+			is_value $1 || BUG "error: -C requires value"
>     -+			r="-C $1"
>     ++			r="-C ${2?}"
>      +			shift
>      +			;;
>      +		--tf)
>     -+			shift;
>     -+			is_value $1 || BUG "error: --tf requires value"
>     -+			tf="$1"
>     ++			tf="${2?}"
>      +			shift
>      +			;;
>      +		--t2)
>     -+			shift;
>     -+			is_value $1 || BUG "error: --t2 requires value"
>     -+			t2="$1"
>     ++			t2="${2?}"
>      +			shift
>      +			;;
>      +		--tk)
>     -+			shift;
>     -+			is_value $1 || BUG "error: --tk requires value"
>     -+			tk="$1"
>     ++			tk="${2?}"
>      +			shift
>      +			;;
>     -+		*)
>     ++		-*)
>      +			BUG "error: unknown option: '$1'"
>      +			;;
>     ++		*)
>     ++			BUG "error: unbound argument: '$1'"
>     ++			;;
>      +		esac
>     ++		shift
>      +	done &&
>      +
>      +	(
> 22:  cc39ecf10ae = 22:  06d56d3a733 t/perf: avoid copying builtin fsmonitor files
>into test repo
> 23:  2bb3eb84767 = 23:  2dd02151278 t/helper/test-chmtime: skip directories on
>Windows
> 24:  bab9a9b0802 = 24:  bb88cddc137 t/perf/p7519: fix coding style
> 25:  2dd06ad2f71 = 25:  50c2afaa49e t/perf/p7519: speed up test on Windows
> 26:  6eaa5765ae1 = 26:  5b18e3b6926 t/perf/p7519: add fsmonitor--daemon test
>cases
> 27:  30957f3930e = 27:  899c23f63c3 fsmonitor--daemon: periodically truncate list
>of modified files
> 28:  c8ca2a17277 = 28:  597a7192f94 fsmonitor--daemon: use a cookie file to sync
>with file system
> 29:  4caf1d89b84 = 29:  68a05fd2892 fsmonitor: force update index after large
>responses
> 30:  f87a1eba693 = 30:  5eb696daba2 t7527: test status with untracked-cache and
>fsmonitor--daemon

So that we can plan for next time, would you mind giving some thought to what would be required for Linux and whether it makes sense to extend this. No urgency, but I would not mind participating - assuming my $DAYJOB lets me. I have a backlog for git that I need to get done first anyway.

Kind Regards,
Randall


^ permalink raw reply	[relevance 0%]

* [PATCH v8 00/30] Builtin FSMonitor Part 2
  2022-03-22 17:59  1% ` [PATCH v7 00/29] " Jeff Hostetler via GitGitGadget
@ 2022-03-24 16:49  2%   ` Jeff Hostetler via GitGitGadget
  2022-03-25 18:02  3%     ` [PATCH v9 " Jeff Hostetler via GitGitGadget
  0 siblings, 1 reply; 162+ results
From: Jeff Hostetler via GitGitGadget @ 2022-03-24 16:49 UTC (permalink / raw)
  To: git
  Cc: Bagas Sanjaya, Ævar Arnfjörð Bjarmason,
	Jeff Hostetler, Eric Sunshine, Johannes Schindelin, Tao Klerks,
	Jeff Hostetler

Here is V8 of Part 2 of my builtin FSMonitor series. This contains last
minute comments on V7. I'll also send an updated version of Part 3 that
builds upon this version.

Here is a range-diff from V7 to V8 relative to 715d08a9e5 (The eighth batch,
2022-02-25). Changes since V7 can be summarized as:

 * [] Improved arg checking in start_daemon() in t7527.
 * [] Switch start_daemon() args to use double-dash keywords.
 * [] Split out coding style changes in p7519 into separate commit from
   speed up changes.
 * [] Disabled some of the matrix tests in t7527 concerning the untracked
   cache.
 * [] Other minor style cleanups.

 1:  e98373f997 =  1:  e98373f997 fsmonitor: enhance existing comments, clarify trivial response handling
 2:  ab68b94417 =  2:  ab68b94417 fsmonitor-ipc: create client routines for git-fsmonitor--daemon
 3:  e04c7301f2 =  3:  e04c7301f2 fsmonitor: config settings are repository-specific
 4:  ea02ba25d8 =  4:  ea02ba25d8 fsmonitor: use IPC to query the builtin FSMonitor daemon
 5:  6ab7db9cb7 =  5:  6ab7db9cb7 fsmonitor: document builtin fsmonitor
 6:  0ce8ae3f2c =  6:  0ce8ae3f2c fsmonitor--daemon: add a built-in fsmonitor daemon
 7:  4624ce2fa4 =  7:  4624ce2fa4 fsmonitor--daemon: implement 'stop' and 'status' commands
 8:  a29fe7266a =  8:  a29fe7266a compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
 9:  2f8a42fdb9 =  9:  2f8a42fdb9 compat/fsmonitor/fsm-listen-darwin: stub in backend for Darwin
10:  f07800690e = 10:  f07800690e fsmonitor--daemon: implement 'run' command
11:  a6a39a3306 = 11:  a6a39a3306 fsmonitor--daemon: implement 'start' command
12:  d62e338d00 = 12:  d62e338d00 fsmonitor--daemon: add pathname classification
13:  53e06b4ae5 = 13:  53e06b4ae5 fsmonitor--daemon: define token-ids
14:  39f43fabe0 = 14:  39f43fabe0 fsmonitor--daemon: create token-based changed path cache
15:  239558e34f = 15:  239558e34f compat/fsmonitor/fsm-listen-win32: implement FSMonitor backend on Windows
16:  14b775e9d8 = 16:  14b775e9d8 compat/fsmonitor/fsm-listen-darwin: add MacOS header files for FSEvent
17:  55bd7aee06 = 17:  55bd7aee06 compat/fsmonitor/fsm-listen-darwin: implement FSEvent listener on MacOS
18:  1f4b5209bf ! 18:  c43009124f fsmonitor--daemon: implement handle_client callback
    @@ builtin/fsmonitor--daemon.c: void fsmonitor_force_resync(struct fsmonitor_daemon
     +        trace2_data_intmax("fsmonitor", the_repository,
     +                   "response/trivial", 1);
     +
    -+        strbuf_release(&response_token);
    -+        strbuf_release(&requested_token_id);
    -+        return 0;
    ++        goto cleanup;
     +    }
     +
     +    /*
    @@ builtin/fsmonitor--daemon.c: void fsmonitor_force_resync(struct fsmonitor_daemon
     +    trace2_data_intmax("fsmonitor", the_repository, "response/count/files", count);
     +    trace2_data_intmax("fsmonitor", the_repository, "response/count/duplicates", duplicates);
     +
    ++cleanup:
     +    strbuf_release(&response_token);
     +    strbuf_release(&requested_token_id);
     +    strbuf_release(&payload);
19:  8cf62c9fc6 = 19:  ed338777b5 help: include fsmonitor--daemon feature flag in version info
20:  1bd74a8159 = 20:  c99bac29d4 t/helper/fsmonitor-client: create IPC client to talk to FSMonitor Daemon
21:  4a920d0b54 ! 21:  c8709da945 t7527: create test for fsmonitor--daemon
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +    rm -rf $1
     +}
     +
    ++is_value () {
    ++    test -n "$1" && test "${1::1}" != "-"
    ++}
    ++
     +start_daemon () {
     +    r= &&
     +    tf= &&
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +        case "$1" in
     +        -C)
     +            shift;
    -+            test "$#" -ne 0 || BUG "error: -C requires arg"
    ++            is_value $1 || BUG "error: -C requires value"
     +            r="-C $1"
     +            shift
     +            ;;
    -+        -tf)
    ++        --tf)
     +            shift;
    -+            test "$#" -ne 0 || BUG "error: -tf requires arg"
    ++            is_value $1 || BUG "error: --tf requires value"
     +            tf="$1"
     +            shift
     +            ;;
    -+        -t2)
    ++        --t2)
     +            shift;
    -+            test "$#" -ne 0 || BUG "error: -t2 requires arg"
    ++            is_value $1 || BUG "error: --t2 requires value"
     +            t2="$1"
     +            shift
     +            ;;
    -+        -tk)
    ++        --tk)
     +            shift;
    -+            test "$#" -ne 0 || BUG "error: -tk requires arg"
    ++            is_value $1 || BUG "error: --tk requires value"
     +            tk="$1"
     +            shift
     +            ;;
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +test_expect_success 'edit some files' '
     +    test_when_finished clean_up_repo_and_stop_daemon &&
     +
    -+    start_daemon -tf "$PWD/.git/trace" &&
    ++    start_daemon --tf "$PWD/.git/trace" &&
     +
     +    edit_files &&
     +
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +test_expect_success 'create some files' '
     +    test_when_finished clean_up_repo_and_stop_daemon &&
     +
    -+    start_daemon -tf "$PWD/.git/trace" &&
    ++    start_daemon --tf "$PWD/.git/trace" &&
     +
     +    create_files &&
     +
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +test_expect_success 'delete some files' '
     +    test_when_finished clean_up_repo_and_stop_daemon &&
     +
    -+    start_daemon -tf "$PWD/.git/trace" &&
    ++    start_daemon --tf "$PWD/.git/trace" &&
     +
     +    delete_files &&
     +
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +test_expect_success 'rename some files' '
     +    test_when_finished clean_up_repo_and_stop_daemon &&
     +
    -+    start_daemon -tf "$PWD/.git/trace" &&
    ++    start_daemon --tf "$PWD/.git/trace" &&
     +
     +    rename_files &&
     +
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +test_expect_success 'rename directory' '
     +    test_when_finished clean_up_repo_and_stop_daemon &&
     +
    -+    start_daemon -tf "$PWD/.git/trace" &&
    ++    start_daemon --tf "$PWD/.git/trace" &&
     +
     +    mv dirtorename dirrenamed &&
     +
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +test_expect_success 'file changes to directory' '
     +    test_when_finished clean_up_repo_and_stop_daemon &&
     +
    -+    start_daemon -tf "$PWD/.git/trace" &&
    ++    start_daemon --tf "$PWD/.git/trace" &&
     +
     +    file_to_directory &&
     +
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +test_expect_success 'directory changes to a file' '
     +    test_when_finished clean_up_repo_and_stop_daemon &&
     +
    -+    start_daemon -tf "$PWD/.git/trace" &&
    ++    start_daemon --tf "$PWD/.git/trace" &&
     +
     +    directory_to_file &&
     +
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +
     +    git init test_flush &&
     +
    -+    start_daemon -C test_flush -tf "$PWD/.git/trace_daemon" -tk true &&
    ++    start_daemon -C test_flush --tf "$PWD/.git/trace_daemon" --tk true &&
     +
     +    # The daemon should have an initial token with no events in _0 and
     +    # then a few (probably platform-specific number of) events in _1.
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +    git -C wt-base worktree add ../wt-secondary &&
     +
     +    start_daemon -C wt-secondary \
    -+        -tf "$PWD/trace_wt_secondary" \
    -+        -t2 "$PWD/trace2_wt_secondary" &&
    ++        --tf "$PWD/trace_wt_secondary" \
    ++        --t2 "$PWD/trace2_wt_secondary" &&
     +
     +    git -C wt-secondary fsmonitor--daemon stop &&
     +    test_must_fail git -C wt-secondary fsmonitor--daemon status
22:  c925a9a745 = 22:  cc39ecf10a t/perf: avoid copying builtin fsmonitor files into test repo
23:  5b3381c223 = 23:  2bb3eb8476 t/helper/test-chmtime: skip directories on Windows
 -:  ---------- > 24:  bab9a9b080 t/perf/p7519: fix coding style
24:  803a540cc0 ! 25:  2dd06ad2f7 t/perf/p7519: speed up test on Windows
    @@ Commit message
         Signed-off-by: Junio C Hamano <gitster@pobox.com>
     
      ## t/perf/p7519-fsmonitor.sh ##
    -@@ t/perf/p7519-fsmonitor.sh: then
    -     fi
    - fi
    - 
    --trace_start() {
    -+trace_start () {
    -     if test -n "$GIT_PERF_7519_TRACE"
    -     then
    -         name="$1"
    -@@ t/perf/p7519-fsmonitor.sh: trace_start() {
    -     fi
    - }
    - 
    --trace_stop() {
    -+trace_stop () {
    -     if test -n "$GIT_PERF_7519_TRACE"
    -     then
    -         unset GIT_TRACE2_PERF
    +@@ t/perf/p7519-fsmonitor.sh: trace_stop () {
          fi
      }
      
     +touch_files () {
    -+    n=$1
    -+    d="$n"_files
    ++    n=$1 &&
    ++    d="$n"_files &&
     +
    -+    (cd $d ; test_seq 1 $n | xargs touch )
    ++    (cd $d && test_seq 1 $n | xargs touch )
     +}
     +
      test_expect_success "one time repo setup" '
    @@ t/perf/p7519-fsmonitor.sh: test_expect_success "one time repo setup" '
          git add 1_file 10_files 100_files 1000_files 10000_files &&
          git commit -qm "Add files" &&
      
    -@@ t/perf/p7519-fsmonitor.sh: test_expect_success "one time repo setup" '
    -     fi
    - '
    - 
    --setup_for_fsmonitor() {
    -+setup_for_fsmonitor () {
    -     # set INTEGRATION_SCRIPT depending on the environment
    -     if test -n "$INTEGRATION_PATH"
    -     then
    -@@ t/perf/p7519-fsmonitor.sh: test_perf_w_drop_caches () {
    -     test_perf "$@"
    - }
    - 
    --test_fsmonitor_suite() {
    -+test_fsmonitor_suite () {
    -     if test -n "$INTEGRATION_SCRIPT"; then
    -         DESC="fsmonitor=$(basename $INTEGRATION_SCRIPT)"
    -     else
    -@@ t/perf/p7519-fsmonitor.sh: test_fsmonitor_suite() {
    +@@ t/perf/p7519-fsmonitor.sh: test_fsmonitor_suite () {
      
          # Update the mtimes on upto 100k files to make status think
          # that they are dirty.  For simplicity, omit any files with
25:  d5ca2df31c = 26:  6eaa5765ae t/perf/p7519: add fsmonitor--daemon test cases
26:  42631259e8 = 27:  30957f3930 fsmonitor--daemon: periodically truncate list of modified files
27:  f256c3cbe8 = 28:  c8ca2a1727 fsmonitor--daemon: use a cookie file to sync with file system
28:  08af8296f9 = 29:  4caf1d89b8 fsmonitor: force update index after large responses
29:  e6cf84dc8e ! 30:  f87a1eba69 t7527: test status with untracked-cache and fsmonitor--daemon
    @@ t/t7527-builtin-fsmonitor.sh: test_expect_success 'cleanup worktrees' '
     +    fsm=$2 &&
     +    fn=$3 &&
     +
    ++    if test $uc = true && test $fsm = false
    ++    then
    ++        # The untracked-cache is buggy when FSMonitor is
    ++        # DISABLED, so skip the tests for this matrix
    ++        # combination.
    ++        #
    ++        # We've observed random, occasional test failures on
    ++        # Windows and MacOS when the UC is turned on and FSM
    ++        # is turned off.  These are rare, but they do happen
    ++        # indicating that it is probably a race condition within
    ++        # the untracked cache itself.
    ++        #
    ++        # It usually happens when a test does F/D trickery and
    ++        # then the NEXT test fails because of extra status
    ++        # output from stale UC data from the previous test.
    ++        #
    ++        # Since FSMonitor is not involved in the error, skip
    ++        # the tests for this matrix combination.
    ++        #
    ++        return 0
    ++    fi &&
    ++
     +    test_expect_success "Matrix[uc:$uc][fsm:$fsm] $fn" '
     +        matrix_clean_up_repo &&
     +        $fn &&


Jeff Hostetler (30):
  fsmonitor: enhance existing comments, clarify trivial response
    handling
  fsmonitor-ipc: create client routines for git-fsmonitor--daemon
  fsmonitor: config settings are repository-specific
  fsmonitor: use IPC to query the builtin FSMonitor daemon
  fsmonitor: document builtin fsmonitor
  fsmonitor--daemon: add a built-in fsmonitor daemon
  fsmonitor--daemon: implement 'stop' and 'status' commands
  compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
  compat/fsmonitor/fsm-listen-darwin: stub in backend for Darwin
  fsmonitor--daemon: implement 'run' command
  fsmonitor--daemon: implement 'start' command
  fsmonitor--daemon: add pathname classification
  fsmonitor--daemon: define token-ids
  fsmonitor--daemon: create token-based changed path cache
  compat/fsmonitor/fsm-listen-win32: implement FSMonitor backend on
    Windows
  compat/fsmonitor/fsm-listen-darwin: add MacOS header files for FSEvent
  compat/fsmonitor/fsm-listen-darwin: implement FSEvent listener on
    MacOS
  fsmonitor--daemon: implement handle_client callback
  help: include fsmonitor--daemon feature flag in version info
  t/helper/fsmonitor-client: create IPC client to talk to FSMonitor
    Daemon
  t7527: create test for fsmonitor--daemon
  t/perf: avoid copying builtin fsmonitor files into test repo
  t/helper/test-chmtime: skip directories on Windows
  t/perf/p7519: fix coding style
  t/perf/p7519: speed up test on Windows
  t/perf/p7519: add fsmonitor--daemon test cases
  fsmonitor--daemon: periodically truncate list of modified files
  fsmonitor--daemon: use a cookie file to sync with file system
  fsmonitor: force update index after large responses
  t7527: test status with untracked-cache and fsmonitor--daemon

 .gitignore                              |    1 +
 Documentation/config/core.txt           |   60 +-
 Documentation/git-fsmonitor--daemon.txt |   75 ++
 Documentation/git-update-index.txt      |    8 +-
 Makefile                                |   17 +
 builtin.h                               |    1 +
 builtin/fsmonitor--daemon.c             | 1479 +++++++++++++++++++++++
 builtin/update-index.c                  |    7 +-
 cache.h                                 |    1 -
 compat/fsmonitor/fsm-darwin-gcc.h       |   92 ++
 compat/fsmonitor/fsm-listen-darwin.c    |  427 +++++++
 compat/fsmonitor/fsm-listen-win32.c     |  586 +++++++++
 compat/fsmonitor/fsm-listen.h           |   49 +
 config.c                                |   14 -
 config.h                                |    1 -
 config.mak.uname                        |   20 +
 contrib/buildsystems/CMakeLists.txt     |   10 +
 environment.c                           |    1 -
 fsmonitor--daemon.h                     |  166 +++
 fsmonitor-ipc.c                         |  171 +++
 fsmonitor-ipc.h                         |   48 +
 fsmonitor-settings.c                    |  114 ++
 fsmonitor-settings.h                    |   21 +
 fsmonitor.c                             |  216 +++-
 fsmonitor.h                             |   15 +-
 git.c                                   |    1 +
 help.c                                  |    4 +
 repo-settings.c                         |    1 +
 repository.h                            |    3 +
 t/README                                |    4 +-
 t/helper/test-chmtime.c                 |   15 +
 t/helper/test-fsmonitor-client.c        |  116 ++
 t/helper/test-tool.c                    |    1 +
 t/helper/test-tool.h                    |    1 +
 t/perf/p7519-fsmonitor.sh               |   68 +-
 t/perf/perf-lib.sh                      |    2 +-
 t/t7527-builtin-fsmonitor.sh            |  620 ++++++++++
 t/test-lib.sh                           |    7 +
 38 files changed, 4337 insertions(+), 106 deletions(-)
 create mode 100644 Documentation/git-fsmonitor--daemon.txt
 create mode 100644 builtin/fsmonitor--daemon.c
 create mode 100644 compat/fsmonitor/fsm-darwin-gcc.h
 create mode 100644 compat/fsmonitor/fsm-listen-darwin.c
 create mode 100644 compat/fsmonitor/fsm-listen-win32.c
 create mode 100644 compat/fsmonitor/fsm-listen.h
 create mode 100644 fsmonitor--daemon.h
 create mode 100644 fsmonitor-ipc.c
 create mode 100644 fsmonitor-ipc.h
 create mode 100644 fsmonitor-settings.c
 create mode 100644 fsmonitor-settings.h
 create mode 100644 t/helper/test-fsmonitor-client.c
 create mode 100755 t/t7527-builtin-fsmonitor.sh


base-commit: 715d08a9e51251ad8290b181b6ac3b9e1f9719d7
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1041%2Fjeffhostetler%2Fbuiltin-fsmonitor-part2-v8
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1041/jeffhostetler/builtin-fsmonitor-part2-v8
Pull-Request: https://github.com/gitgitgadget/git/pull/1041

Range-diff vs v7:

  1:  e98373f997f =  1:  e98373f997f fsmonitor: enhance existing comments, clarify trivial response handling
  2:  ab68b944173 =  2:  ab68b944173 fsmonitor-ipc: create client routines for git-fsmonitor--daemon
  3:  e04c7301f24 =  3:  e04c7301f24 fsmonitor: config settings are repository-specific
  4:  ea02ba25d8f =  4:  ea02ba25d8f fsmonitor: use IPC to query the builtin FSMonitor daemon
  5:  6ab7db9cb76 =  5:  6ab7db9cb76 fsmonitor: document builtin fsmonitor
  6:  0ce8ae3f2cf =  6:  0ce8ae3f2cf fsmonitor--daemon: add a built-in fsmonitor daemon
  7:  4624ce2fa47 =  7:  4624ce2fa47 fsmonitor--daemon: implement 'stop' and 'status' commands
  8:  a29fe7266a4 =  8:  a29fe7266a4 compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
  9:  2f8a42fdb93 =  9:  2f8a42fdb93 compat/fsmonitor/fsm-listen-darwin: stub in backend for Darwin
 10:  f07800690ee = 10:  f07800690ee fsmonitor--daemon: implement 'run' command
 11:  a6a39a3306d = 11:  a6a39a3306d fsmonitor--daemon: implement 'start' command
 12:  d62e338d008 = 12:  d62e338d008 fsmonitor--daemon: add pathname classification
 13:  53e06b4ae5d = 13:  53e06b4ae5d fsmonitor--daemon: define token-ids
 14:  39f43fabe02 = 14:  39f43fabe02 fsmonitor--daemon: create token-based changed path cache
 15:  239558e34ff = 15:  239558e34ff compat/fsmonitor/fsm-listen-win32: implement FSMonitor backend on Windows
 16:  14b775e9d8b = 16:  14b775e9d8b compat/fsmonitor/fsm-listen-darwin: add MacOS header files for FSEvent
 17:  55bd7aee06c = 17:  55bd7aee06c compat/fsmonitor/fsm-listen-darwin: implement FSEvent listener on MacOS
 18:  1f4b5209bf6 ! 18:  c43009124fb fsmonitor--daemon: implement handle_client callback
     @@ builtin/fsmonitor--daemon.c: void fsmonitor_force_resync(struct fsmonitor_daemon
      +		trace2_data_intmax("fsmonitor", the_repository,
      +				   "response/trivial", 1);
      +
     -+		strbuf_release(&response_token);
     -+		strbuf_release(&requested_token_id);
     -+		return 0;
     ++		goto cleanup;
      +	}
      +
      +	/*
     @@ builtin/fsmonitor--daemon.c: void fsmonitor_force_resync(struct fsmonitor_daemon
      +	trace2_data_intmax("fsmonitor", the_repository, "response/count/files", count);
      +	trace2_data_intmax("fsmonitor", the_repository, "response/count/duplicates", duplicates);
      +
     ++cleanup:
      +	strbuf_release(&response_token);
      +	strbuf_release(&requested_token_id);
      +	strbuf_release(&payload);
 19:  8cf62c9fc6f = 19:  ed338777b56 help: include fsmonitor--daemon feature flag in version info
 20:  1bd74a81593 = 20:  c99bac29d42 t/helper/fsmonitor-client: create IPC client to talk to FSMonitor Daemon
 21:  4a920d0b54a ! 21:  c8709da9457 t7527: create test for fsmonitor--daemon
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +	rm -rf $1
      +}
      +
     ++is_value () {
     ++	test -n "$1" && test "${1::1}" != "-"
     ++}
     ++
      +start_daemon () {
      +	r= &&
      +	tf= &&
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +		case "$1" in
      +		-C)
      +			shift;
     -+			test "$#" -ne 0 || BUG "error: -C requires arg"
     ++			is_value $1 || BUG "error: -C requires value"
      +			r="-C $1"
      +			shift
      +			;;
     -+		-tf)
     ++		--tf)
      +			shift;
     -+			test "$#" -ne 0 || BUG "error: -tf requires arg"
     ++			is_value $1 || BUG "error: --tf requires value"
      +			tf="$1"
      +			shift
      +			;;
     -+		-t2)
     ++		--t2)
      +			shift;
     -+			test "$#" -ne 0 || BUG "error: -t2 requires arg"
     ++			is_value $1 || BUG "error: --t2 requires value"
      +			t2="$1"
      +			shift
      +			;;
     -+		-tk)
     ++		--tk)
      +			shift;
     -+			test "$#" -ne 0 || BUG "error: -tk requires arg"
     ++			is_value $1 || BUG "error: --tk requires value"
      +			tk="$1"
      +			shift
      +			;;
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +test_expect_success 'edit some files' '
      +	test_when_finished clean_up_repo_and_stop_daemon &&
      +
     -+	start_daemon -tf "$PWD/.git/trace" &&
     ++	start_daemon --tf "$PWD/.git/trace" &&
      +
      +	edit_files &&
      +
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +test_expect_success 'create some files' '
      +	test_when_finished clean_up_repo_and_stop_daemon &&
      +
     -+	start_daemon -tf "$PWD/.git/trace" &&
     ++	start_daemon --tf "$PWD/.git/trace" &&
      +
      +	create_files &&
      +
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +test_expect_success 'delete some files' '
      +	test_when_finished clean_up_repo_and_stop_daemon &&
      +
     -+	start_daemon -tf "$PWD/.git/trace" &&
     ++	start_daemon --tf "$PWD/.git/trace" &&
      +
      +	delete_files &&
      +
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +test_expect_success 'rename some files' '
      +	test_when_finished clean_up_repo_and_stop_daemon &&
      +
     -+	start_daemon -tf "$PWD/.git/trace" &&
     ++	start_daemon --tf "$PWD/.git/trace" &&
      +
      +	rename_files &&
      +
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +test_expect_success 'rename directory' '
      +	test_when_finished clean_up_repo_and_stop_daemon &&
      +
     -+	start_daemon -tf "$PWD/.git/trace" &&
     ++	start_daemon --tf "$PWD/.git/trace" &&
      +
      +	mv dirtorename dirrenamed &&
      +
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +test_expect_success 'file changes to directory' '
      +	test_when_finished clean_up_repo_and_stop_daemon &&
      +
     -+	start_daemon -tf "$PWD/.git/trace" &&
     ++	start_daemon --tf "$PWD/.git/trace" &&
      +
      +	file_to_directory &&
      +
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +test_expect_success 'directory changes to a file' '
      +	test_when_finished clean_up_repo_and_stop_daemon &&
      +
     -+	start_daemon -tf "$PWD/.git/trace" &&
     ++	start_daemon --tf "$PWD/.git/trace" &&
      +
      +	directory_to_file &&
      +
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +
      +	git init test_flush &&
      +
     -+	start_daemon -C test_flush -tf "$PWD/.git/trace_daemon" -tk true &&
     ++	start_daemon -C test_flush --tf "$PWD/.git/trace_daemon" --tk true &&
      +
      +	# The daemon should have an initial token with no events in _0 and
      +	# then a few (probably platform-specific number of) events in _1.
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +	git -C wt-base worktree add ../wt-secondary &&
      +
      +	start_daemon -C wt-secondary \
     -+		-tf "$PWD/trace_wt_secondary" \
     -+		-t2 "$PWD/trace2_wt_secondary" &&
     ++		--tf "$PWD/trace_wt_secondary" \
     ++		--t2 "$PWD/trace2_wt_secondary" &&
      +
      +	git -C wt-secondary fsmonitor--daemon stop &&
      +	test_must_fail git -C wt-secondary fsmonitor--daemon status
 22:  c925a9a7459 = 22:  cc39ecf10ae t/perf: avoid copying builtin fsmonitor files into test repo
 23:  5b3381c223e = 23:  2bb3eb84767 t/helper/test-chmtime: skip directories on Windows
  -:  ----------- > 24:  bab9a9b0802 t/perf/p7519: fix coding style
 24:  803a540cc00 ! 25:  2dd06ad2f71 t/perf/p7519: speed up test on Windows
     @@ Commit message
          Signed-off-by: Junio C Hamano <gitster@pobox.com>
      
       ## t/perf/p7519-fsmonitor.sh ##
     -@@ t/perf/p7519-fsmonitor.sh: then
     - 	fi
     - fi
     - 
     --trace_start() {
     -+trace_start () {
     - 	if test -n "$GIT_PERF_7519_TRACE"
     - 	then
     - 		name="$1"
     -@@ t/perf/p7519-fsmonitor.sh: trace_start() {
     - 	fi
     - }
     - 
     --trace_stop() {
     -+trace_stop () {
     - 	if test -n "$GIT_PERF_7519_TRACE"
     - 	then
     - 		unset GIT_TRACE2_PERF
     +@@ t/perf/p7519-fsmonitor.sh: trace_stop () {
       	fi
       }
       
      +touch_files () {
     -+	n=$1
     -+	d="$n"_files
     ++	n=$1 &&
     ++	d="$n"_files &&
      +
     -+	(cd $d ; test_seq 1 $n | xargs touch )
     ++	(cd $d && test_seq 1 $n | xargs touch )
      +}
      +
       test_expect_success "one time repo setup" '
     @@ t/perf/p7519-fsmonitor.sh: test_expect_success "one time repo setup" '
       	git add 1_file 10_files 100_files 1000_files 10000_files &&
       	git commit -qm "Add files" &&
       
     -@@ t/perf/p7519-fsmonitor.sh: test_expect_success "one time repo setup" '
     - 	fi
     - '
     - 
     --setup_for_fsmonitor() {
     -+setup_for_fsmonitor () {
     - 	# set INTEGRATION_SCRIPT depending on the environment
     - 	if test -n "$INTEGRATION_PATH"
     - 	then
     -@@ t/perf/p7519-fsmonitor.sh: test_perf_w_drop_caches () {
     - 	test_perf "$@"
     - }
     - 
     --test_fsmonitor_suite() {
     -+test_fsmonitor_suite () {
     - 	if test -n "$INTEGRATION_SCRIPT"; then
     - 		DESC="fsmonitor=$(basename $INTEGRATION_SCRIPT)"
     - 	else
     -@@ t/perf/p7519-fsmonitor.sh: test_fsmonitor_suite() {
     +@@ t/perf/p7519-fsmonitor.sh: test_fsmonitor_suite () {
       
       	# Update the mtimes on upto 100k files to make status think
       	# that they are dirty.  For simplicity, omit any files with
 25:  d5ca2df31c8 = 26:  6eaa5765ae1 t/perf/p7519: add fsmonitor--daemon test cases
 26:  42631259e89 = 27:  30957f3930e fsmonitor--daemon: periodically truncate list of modified files
 27:  f256c3cbe8b = 28:  c8ca2a17277 fsmonitor--daemon: use a cookie file to sync with file system
 28:  08af8296f96 = 29:  4caf1d89b84 fsmonitor: force update index after large responses
 29:  e6cf84dc8eb ! 30:  f87a1eba693 t7527: test status with untracked-cache and fsmonitor--daemon
     @@ t/t7527-builtin-fsmonitor.sh: test_expect_success 'cleanup worktrees' '
      +	fsm=$2 &&
      +	fn=$3 &&
      +
     ++	if test $uc = true && test $fsm = false
     ++	then
     ++		# The untracked-cache is buggy when FSMonitor is
     ++		# DISABLED, so skip the tests for this matrix
     ++		# combination.
     ++		#
     ++		# We've observed random, occasional test failures on
     ++		# Windows and MacOS when the UC is turned on and FSM
     ++		# is turned off.  These are rare, but they do happen
     ++		# indicating that it is probably a race condition within
     ++		# the untracked cache itself.
     ++		#
     ++		# It usually happens when a test does F/D trickery and
     ++		# then the NEXT test fails because of extra status
     ++		# output from stale UC data from the previous test.
     ++		#
     ++		# Since FSMonitor is not involved in the error, skip
     ++		# the tests for this matrix combination.
     ++		#
     ++		return 0
     ++	fi &&
     ++
      +	test_expect_success "Matrix[uc:$uc][fsm:$fsm] $fn" '
      +		matrix_clean_up_repo &&
      +		$fn &&

-- 
gitgitgadget

^ permalink raw reply	[relevance 2%]

* [PATCH v7 00/29] Builtin FSMonitor Part 2
  @ 2022-03-22 17:59  1% ` Jeff Hostetler via GitGitGadget
  2022-03-24 16:49  2%   ` [PATCH v8 00/30] " Jeff Hostetler via GitGitGadget
  0 siblings, 1 reply; 162+ results
From: Jeff Hostetler via GitGitGadget @ 2022-03-22 17:59 UTC (permalink / raw)
  To: git
  Cc: Bagas Sanjaya, Ævar Arnfjörð Bjarmason,
	Jeff Hostetler, Eric Sunshine, Johannes Schindelin, Tao Klerks,
	Jeff Hostetler

Here is V7 of Part 2 of my builtin FSmonitor series. This version squashes
in the fixups from Part 2.5 and any other last minute suggestions. I'll send
an updated version of Part 3 that builds upon this version.

Here is a range-diff from V6 to V7 relative to 715d08a9e5 (The eighth batch,
2022-02-25). Changes since V6 can be summarized as: (1) Adding/removing
"_()" on die() and error() messages. (2) Splitting GCC-specific declarations
for MacOS FSEvents into a separate header file. (3) Enhancing the
"start_daemon()" function in t7527 to take keyword args and reduce some code
duplication in unit tests. (4) Fixing "&&" chains in the tests. (5) Other
minor style cleanups.

$ git range-diff eight..builtin-fsmonitor-part2-v6 eight..builtin-fsmonitor-part2
 1:  10a34082fc =  1:  e98373f997 fsmonitor: enhance existing comments, clarify trivial response handling
 2:  e1c946af2c !  2:  ab68b94417 fsmonitor-ipc: create client routines for git-fsmonitor--daemon
    @@ fsmonitor-ipc.c (new)
     +    state = ipc_client_try_connect(fsmonitor_ipc__get_path(), &options,
     +                       &connection);
     +    if (state != IPC_STATE__LISTENING) {
    -+        die("fsmonitor--daemon is not running");
    ++        die(_("fsmonitor--daemon is not running"));
     +        return -1;
     +    }
     +
    @@ fsmonitor-ipc.c (new)
     +    ipc_client_close_connection(connection);
     +
     +    if (ret == -1) {
    -+        die("could not send '%s' command to fsmonitor--daemon", c);
    ++        die(_("could not send '%s' command to fsmonitor--daemon"), c);
     +        return -1;
     +    }
     +
 3:  ae622a517c !  3:  e04c7301f2 fsmonitor: config settings are repository-specific
    @@ fsmonitor-settings.c (new)
     +        return;
     +
     +    CALLOC_ARRAY(s, 1);
    ++    s->mode = FSMONITOR_MODE_DISABLED;
     +
     +    r->settings.fsmonitor = s;
     +
    -+    fsm_settings__set_disabled(r);
    -+
     +    /*
     +     * Overload the existing "core.fsmonitor" config setting (which
     +     * has historically been either unset or a hook pathname) to
 4:  55974867da =  4:  ea02ba25d8 fsmonitor: use IPC to query the builtin FSMonitor daemon
 5:  ce42d5bbaf =  5:  6ab7db9cb7 fsmonitor: document builtin fsmonitor
 6:  9ce938c69b =  6:  0ce8ae3f2c fsmonitor--daemon: add a built-in fsmonitor daemon
 7:  3bd7e6a051 =  7:  4624ce2fa4 fsmonitor--daemon: implement 'stop' and 'status' commands
 8:  92d3e54da7 =  8:  a29fe7266a compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
 9:  f121922127 =  9:  2f8a42fdb9 compat/fsmonitor/fsm-listen-darwin: stub in backend for Darwin
10:  a3f94627cf ! 10:  f07800690e fsmonitor--daemon: implement 'run' command
    @@ builtin/fsmonitor--daemon.c: static int do_as_client__status(void)
     +     * common error case.
     +     */
     +    if (fsmonitor_ipc__get_state() == IPC_STATE__LISTENING)
    -+        die("fsmonitor--daemon is already running '%s'",
    ++        die(_("fsmonitor--daemon is already running '%s'"),
     +            the_repository->worktree);
     +
     +    if (fsmonitor__announce_startup) {
11:  8de40b0fe8 ! 11:  a6a39a3306 fsmonitor--daemon: implement 'start' command
    @@ builtin/fsmonitor--daemon.c: static int try_to_run_foreground_daemon(void)
     +     * immediately exited).
     +     */
     +    if (fsmonitor_ipc__get_state() == IPC_STATE__LISTENING)
    -+        die("fsmonitor--daemon is already running '%s'",
    ++        die(_("fsmonitor--daemon is already running '%s'"),
     +            the_repository->worktree);
     +
     +    if (fsmonitor__announce_startup) {
    @@ builtin/fsmonitor--daemon.c: static int try_to_run_foreground_daemon(void)
     +    default:
     +    case SBGR_ERROR:
     +    case SBGR_CB_ERROR:
    -+        return error("daemon failed to start");
    ++        return error(_("daemon failed to start"));
     +
     +    case SBGR_TIMEOUT:
    -+        return error("daemon not online yet");
    ++        return error(_("daemon not online yet"));
     +
     +    case SBGR_DIED:
    -+        return error("daemon terminated");
    ++        return error(_("daemon terminated"));
     +    }
     +}
     +
12:  e5d419b1ea = 12:  d62e338d00 fsmonitor--daemon: add pathname classification
13:  c2f3668a86 = 13:  53e06b4ae5 fsmonitor--daemon: define token-ids
14:  bd492d13fb = 14:  39f43fabe0 fsmonitor--daemon: create token-based changed path cache
15:  6b5b3d0822 ! 15:  239558e34f compat/fsmonitor/fsm-listen-win32: implement FSMonitor backend on Windows
    @@ compat/fsmonitor/fsm-listen-win32.c
     +        if (len > 0)
     +            goto normalize;
     +        if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
    -+            error("[GLE %ld] could not convert path to UTF-8: '%.*ls'",
    ++            error(_("[GLE %ld] could not convert path to UTF-8: '%.*ls'"),
     +                  GetLastError(),
     +                  (int)(info->FileNameLength / sizeof(WCHAR)),
     +                  info->FileName);
    @@ compat/fsmonitor/fsm-listen-win32.c
     +    if (watch->is_active)
     +        return 0;
     +
    -+    error("ReadDirectoryChangedW failed on '%s' [GLE %ld]",
    ++    error(_("ReadDirectoryChangedW failed on '%s' [GLE %ld]"),
     +          watch->path.buf, GetLastError());
     +    return -1;
     +}
    @@ compat/fsmonitor/fsm-listen-win32.c
     +     * sure it is worth it.
     +     */
     +
    -+    error("GetOverlappedResult failed on '%s' [GLE %ld]",
    ++    error(_("GetOverlappedResult failed on '%s' [GLE %ld]"),
     +          watch->path.buf, gle);
     +    return -1;
     +}
16:  cdef9730b3 ! 16:  14b775e9d8 compat/fsmonitor/fsm-listen-darwin: add MacOS header files for FSEvent
    @@ Commit message
         Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
         Signed-off-by: Junio C Hamano <gitster@pobox.com>
     
    - ## compat/fsmonitor/fsm-listen-darwin.c ##
    + ## compat/fsmonitor/fsm-darwin-gcc.h (new) ##
     @@
    ++#ifndef FSM_DARWIN_GCC_H
    ++#define FSM_DARWIN_GCC_H
    ++
     +#ifndef __clang__
     +/*
     + * It is possible to #include CoreFoundation/CoreFoundation.h when compiling
    @@ compat/fsmonitor/fsm-listen-darwin.c
     +void FSEventStreamStop(FSEventStreamRef stream);
     +void FSEventStreamInvalidate(FSEventStreamRef stream);
     +void FSEventStreamRelease(FSEventStreamRef stream);
    ++
    ++#endif /* !clang */
    ++#endif /* FSM_DARWIN_GCC_H */
    +
    + ## compat/fsmonitor/fsm-listen-darwin.c ##
    +@@
    ++#ifndef __clang__
    ++#include "fsm-darwin-gcc.h"
     +#else
    -+/*
    -+ * Let Apple's headers declare `isalnum()` first, before
    -+ * Git's headers override it via a constant
    -+ */
    -+#include <string.h>
     +#include <CoreFoundation/CoreFoundation.h>
     +#include <CoreServices/CoreServices.h>
    ++
    ++#ifndef AVAILABLE_MAC_OS_X_VERSION_10_13_AND_LATER
    ++/*
    ++ * This enum value was added in 10.13 to:
    ++ *
    ++ * /Applications/Xcode.app/Contents/Developer/Platforms/ \
    ++ *    MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/ \
    ++ *    Library/Frameworks/CoreServices.framework/Frameworks/ \
    ++ *    FSEvents.framework/Versions/Current/Headers/FSEvents.h
    ++ *
    ++ * If we're compiling against an older SDK, this symbol won't be
    ++ * present.  Silently define it here so that we don't have to ifdef
    ++ * the logging or masking below.  This should be harmless since older
    ++ * versions of macOS won't ever emit this FS event anyway.
    ++ */
    ++#define kFSEventStreamEventFlagItemCloned         0x00400000
    ++#endif
     +#endif
     +
      #include "cache.h"
17:  aabfebd3a4 ! 17:  55bd7aee06 compat/fsmonitor/fsm-listen-darwin: implement FSEvent listener on MacOS
    @@ Commit message
         Signed-off-by: Junio C Hamano <gitster@pobox.com>
     
      ## compat/fsmonitor/fsm-listen-darwin.c ##
    -@@ compat/fsmonitor/fsm-listen-darwin.c: void FSEventStreamRelease(FSEventStreamRef stream);
    +@@
      #include "cache.h"
      #include "fsmonitor.h"
      #include "fsm-listen.h"
    @@ compat/fsmonitor/fsm-listen-darwin.c: void FSEventStreamRelease(FSEventStreamRef
     +    return 0;
     +
     +failed:
    -+    error("Unable to create FSEventStream.");
    ++    error(_("Unable to create FSEventStream."));
     +
     +    FREE_AND_NULL(state->backend_data);
          return -1;
    @@ compat/fsmonitor/fsm-listen-darwin.c: void FSEventStreamRelease(FSEventStreamRef
     +    data->stream_scheduled = 1;
     +
     +    if (!FSEventStreamStart(data->stream)) {
    -+        error("Failed to start the FSEventStream");
    ++        error(_("Failed to start the FSEventStream"));
     +        goto force_error_stop_without_loop;
     +    }
     +    data->stream_started = 1;
18:  0896e72e2b = 18:  1f4b5209bf fsmonitor--daemon: implement handle_client callback
19:  bc240a9e66 ! 19:  8cf62c9fc6 help: include fsmonitor--daemon feature flag in version info
    @@ t/test-lib.sh: test_lazy_prereq SHA1 '
     +# Does this platform support `git fsmonitor--daemon`
     +#
     +test_lazy_prereq FSMONITOR_DAEMON '
    -+    git version --build-options | grep "feature:" | grep "fsmonitor--daemon"
    ++    git version --build-options >output &&
    ++    grep "feature: fsmonitor--daemon" output
     +'
20:  2b563c240e ! 20:  1bd74a8159 t/helper/fsmonitor-client: create IPC client to talk to FSMonitor Daemon
    @@ t/helper/test-fsmonitor-client.c (new)
     +
     +    ret = fsmonitor_ipc__send_query(token, &answer);
     +    if (ret < 0)
    -+        die(_("could not query fsmonitor--daemon"));
    ++        die("could not query fsmonitor--daemon");
     +
     +    write_in_full(1, answer.buf, answer.len);
     +    strbuf_release(&answer);
    @@ t/helper/test-fsmonitor-client.c (new)
     +    const char *token = NULL;
     +
     +    const char * const fsmonitor_client_usage[] = {
    -+        N_("test-helper fsmonitor-client query [<token>]"),
    -+        N_("test-helper fsmonitor-client flush"),
    ++        "test-tool fsmonitor-client query [<token>]",
    ++        "test-tool fsmonitor-client flush",
     +        NULL,
     +    };
     +
     +    struct option options[] = {
    -+        OPT_STRING(0, "token", &token, N_("token"),
    -+               N_("command token to send to the server")),
    ++        OPT_STRING(0, "token", &token, "token",
    ++               "command token to send to the server"),
     +        OPT_END()
     +    };
     +
    -+    if (argc < 2)
    -+        usage_with_options(fsmonitor_client_usage, options);
    ++    argc = parse_options(argc, argv, NULL, options, fsmonitor_client_usage, 0);
     +
    -+    if (argc == 2 && !strcmp(argv[1], "-h"))
    ++    if (argc != 1)
     +        usage_with_options(fsmonitor_client_usage, options);
     +
    -+    subcmd = argv[1];
    -+    argv--;
    -+    argc++;
    -+
    -+    argc = parse_options(argc, argv, NULL, options, fsmonitor_client_usage, 0);
    ++    subcmd = argv[0];
     +
     +    setup_git_directory();
     +
21:  db8809da08 ! 21:  4a920d0b54 t7527: create test for fsmonitor--daemon
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +fi
     +
     +stop_daemon_delete_repo () {
    -+    r=$1
    -+    git -C $r fsmonitor--daemon stop >/dev/null 2>/dev/null
    ++    r=$1 &&
    ++    test_might_fail git -C $r fsmonitor--daemon stop &&
     +    rm -rf $1
    -+    return 0
     +}
     +
     +start_daemon () {
    -+    case "$#" in
    -+        1) r="-C $1";;
    -+        *) r="";
    -+    esac
    ++    r= &&
    ++    tf= &&
    ++    t2= &&
    ++    tk= &&
    ++
    ++    while test "$#" -ne 0
    ++    do
    ++        case "$1" in
    ++        -C)
    ++            shift;
    ++            test "$#" -ne 0 || BUG "error: -C requires arg"
    ++            r="-C $1"
    ++            shift
    ++            ;;
    ++        -tf)
    ++            shift;
    ++            test "$#" -ne 0 || BUG "error: -tf requires arg"
    ++            tf="$1"
    ++            shift
    ++            ;;
    ++        -t2)
    ++            shift;
    ++            test "$#" -ne 0 || BUG "error: -t2 requires arg"
    ++            t2="$1"
    ++            shift
    ++            ;;
    ++        -tk)
    ++            shift;
    ++            test "$#" -ne 0 || BUG "error: -tk requires arg"
    ++            tk="$1"
    ++            shift
    ++            ;;
    ++        *)
    ++            BUG "error: unknown option: '$1'"
    ++            ;;
    ++        esac
    ++    done &&
     +
    -+    git $r fsmonitor--daemon start || return $?
    -+    git $r fsmonitor--daemon status || return $?
    -+
    -+    return 0
    ++    (
    ++        if test -n "$tf"
    ++        then
    ++            GIT_TRACE_FSMONITOR="$tf"
    ++            export GIT_TRACE_FSMONITOR
    ++        fi &&
    ++
    ++        if test -n "$t2"
    ++        then
    ++            GIT_TRACE2_PERF="$t2"
    ++            export GIT_TRACE2_PERF
    ++        fi &&
    ++
    ++        if test -n "$tk"
    ++        then
    ++            GIT_TEST_FSMONITOR_TOKEN="$tk"
    ++            export GIT_TEST_FSMONITOR_TOKEN
    ++        fi &&
    ++
    ++        git $r fsmonitor--daemon start &&
    ++        git $r fsmonitor--daemon status
    ++    )
     +}
     +
     +# Is a Trace2 data event present with the given catetory and key?
     +# We do not care what the value is.
     +#
     +have_t2_data_event () {
    -+    c=$1
    -+    k=$2
    ++    c=$1 &&
    ++    k=$2 &&
     +
     +    grep -e '"event":"data".*"category":"'"$c"'".*"key":"'"$k"'"'
     +}
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +    test_when_finished "stop_daemon_delete_repo test_explicit" &&
     +
     +    git init test_explicit &&
    -+    start_daemon test_explicit &&
    ++    start_daemon -C test_explicit &&
     +
     +    git -C test_explicit fsmonitor--daemon stop &&
     +    test_must_fail git -C test_explicit fsmonitor--daemon status
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +    # but this test case is only concerned with whether the daemon was
     +    # implicitly started.)
     +
    -+    GIT_TRACE2_EVENT="$(pwd)/.git/trace" \
    ++    GIT_TRACE2_EVENT="$PWD/.git/trace" \
     +        test-tool -C test_implicit fsmonitor-client query --token 0 >actual &&
     +    nul_to_q <actual >actual.filtered &&
     +    grep "builtin:" actual.filtered &&
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +
     +    git init test_implicit_1 &&
     +
    -+    start_daemon test_implicit_1 &&
    ++    start_daemon -C test_implicit_1 &&
     +
     +    # deleting the .git directory will implicitly stop the daemon.
     +    rm -rf test_implicit_1/.git &&
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +
     +    git init test_implicit_2 &&
     +
    -+    start_daemon test_implicit_2 &&
    ++    start_daemon -C test_implicit_2 &&
     +
     +    # renaming the .git directory will implicitly stop the daemon.
     +    mv test_implicit_2/.git test_implicit_2/.xxx &&
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +
     +    git init test_multiple &&
     +
    -+    start_daemon test_multiple &&
    ++    start_daemon -C test_multiple &&
     +
     +    test_must_fail git -C test_multiple fsmonitor--daemon start 2>actual &&
     +    grep "fsmonitor--daemon is already running" actual &&
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +# This is here in case something else fails first.
     +#
     +redundant_stop_daemon () {
    -+    git fsmonitor--daemon stop
    -+    return 0
    ++    test_might_fail git fsmonitor--daemon stop
     +}
     +
     +test_expect_success 'update-index implicitly starts daemon' '
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +
     +    test_must_fail git fsmonitor--daemon status &&
     +
    -+    GIT_TRACE2_EVENT="$(pwd)/.git/trace_implicit_1" \
    ++    GIT_TRACE2_EVENT="$PWD/.git/trace_implicit_1" \
     +        git update-index --fsmonitor &&
     +
     +    git fsmonitor--daemon status &&
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +
     +    test_must_fail git fsmonitor--daemon status &&
     +
    -+    GIT_TRACE2_EVENT="$(pwd)/.git/trace_implicit_2" \
    ++    GIT_TRACE2_EVENT="$PWD/.git/trace_implicit_2" \
     +        git status >actual &&
     +
     +    git fsmonitor--daemon status &&
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +'
     +
     +edit_files () {
    -+    echo 1 >modified
    -+    echo 2 >dir1/modified
    -+    echo 3 >dir2/modified
    ++    echo 1 >modified &&
    ++    echo 2 >dir1/modified &&
    ++    echo 3 >dir2/modified &&
     +    >dir1/untracked
     +}
     +
     +delete_files () {
    -+    rm -f delete
    -+    rm -f dir1/delete
    ++    rm -f delete &&
    ++    rm -f dir1/delete &&
     +    rm -f dir2/delete
     +}
     +
     +create_files () {
    -+    echo 1 >new
    -+    echo 2 >dir1/new
    ++    echo 1 >new &&
    ++    echo 2 >dir1/new &&
     +    echo 3 >dir2/new
     +}
     +
     +rename_files () {
    -+    mv rename renamed
    -+    mv dir1/rename dir1/renamed
    ++    mv rename renamed &&
    ++    mv dir1/rename dir1/renamed &&
     +    mv dir2/rename dir2/renamed
     +}
     +
     +file_to_directory () {
    -+    rm -f delete
    -+    mkdir delete
    ++    rm -f delete &&
    ++    mkdir delete &&
     +    echo 1 >delete/new
     +}
     +
     +directory_to_file () {
    -+    rm -rf dir1
    ++    rm -rf dir1 &&
     +    echo 1 >dir1
     +}
     +
    -+verify_status () {
    -+    git status >actual &&
    -+    GIT_INDEX_FILE=.git/fresh-index git read-tree master &&
    -+    GIT_INDEX_FILE=.git/fresh-index git -c core.fsmonitor=false status >expect &&
    -+    test_cmp expect actual &&
    -+    echo HELLO AFTER &&
    -+    cat .git/trace &&
    -+    echo HELLO AFTER
    -+}
    -+
     +# The next few test cases confirm that our fsmonitor daemon sees each type
     +# of OS filesystem notification that we care about.  At this layer we just
     +# ensure we are getting the OS notifications and do not try to confirm what
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +# daemon) because these commands might implicitly restart the daemon.
     +
     +clean_up_repo_and_stop_daemon () {
    -+    git reset --hard HEAD
    -+    git clean -fd
    -+    git fsmonitor--daemon stop
    ++    git reset --hard HEAD &&
    ++    git clean -fd &&
    ++    test_might_fail git fsmonitor--daemon stop &&
     +    rm -f .git/trace
     +}
     +
     +test_expect_success 'edit some files' '
     +    test_when_finished clean_up_repo_and_stop_daemon &&
     +
    -+    (
    -+        GIT_TRACE_FSMONITOR="$(pwd)/.git/trace" &&
    -+        export GIT_TRACE_FSMONITOR &&
    -+
    -+        start_daemon
    -+    ) &&
    ++    start_daemon -tf "$PWD/.git/trace" &&
     +
     +    edit_files &&
     +
    -+    test-tool fsmonitor-client query --token 0 >/dev/null 2>&1 &&
    ++    test-tool fsmonitor-client query --token 0 &&
     +
     +    grep "^event: dir1/modified$"  .git/trace &&
     +    grep "^event: dir2/modified$"  .git/trace &&
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +test_expect_success 'create some files' '
     +    test_when_finished clean_up_repo_and_stop_daemon &&
     +
    -+    (
    -+        GIT_TRACE_FSMONITOR="$(pwd)/.git/trace" &&
    -+        export GIT_TRACE_FSMONITOR &&
    -+
    -+        start_daemon
    -+    ) &&
    ++    start_daemon -tf "$PWD/.git/trace" &&
     +
     +    create_files &&
     +
    -+    test-tool fsmonitor-client query --token 0 >/dev/null 2>&1 &&
    ++    test-tool fsmonitor-client query --token 0 &&
     +
     +    grep "^event: dir1/new$" .git/trace &&
     +    grep "^event: dir2/new$" .git/trace &&
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +test_expect_success 'delete some files' '
     +    test_when_finished clean_up_repo_and_stop_daemon &&
     +
    -+    (
    -+        GIT_TRACE_FSMONITOR="$(pwd)/.git/trace" &&
    -+        export GIT_TRACE_FSMONITOR &&
    -+
    -+        start_daemon
    -+    ) &&
    ++    start_daemon -tf "$PWD/.git/trace" &&
     +
     +    delete_files &&
     +
    -+    test-tool fsmonitor-client query --token 0 >/dev/null 2>&1 &&
    ++    test-tool fsmonitor-client query --token 0 &&
     +
     +    grep "^event: dir1/delete$" .git/trace &&
     +    grep "^event: dir2/delete$" .git/trace &&
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +test_expect_success 'rename some files' '
     +    test_when_finished clean_up_repo_and_stop_daemon &&
     +
    -+    (
    -+        GIT_TRACE_FSMONITOR="$(pwd)/.git/trace" &&
    -+        export GIT_TRACE_FSMONITOR &&
    -+
    -+        start_daemon
    -+    ) &&
    ++    start_daemon -tf "$PWD/.git/trace" &&
     +
     +    rename_files &&
     +
    -+    test-tool fsmonitor-client query --token 0 >/dev/null 2>&1 &&
    ++    test-tool fsmonitor-client query --token 0 &&
     +
     +    grep "^event: dir1/rename$"  .git/trace &&
     +    grep "^event: dir2/rename$"  .git/trace &&
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +test_expect_success 'rename directory' '
     +    test_when_finished clean_up_repo_and_stop_daemon &&
     +
    -+    (
    -+        GIT_TRACE_FSMONITOR="$(pwd)/.git/trace" &&
    -+        export GIT_TRACE_FSMONITOR &&
    -+
    -+        start_daemon
    -+    ) &&
    ++    start_daemon -tf "$PWD/.git/trace" &&
     +
     +    mv dirtorename dirrenamed &&
     +
    -+    test-tool fsmonitor-client query --token 0 >/dev/null 2>&1 &&
    ++    test-tool fsmonitor-client query --token 0 &&
     +
     +    grep "^event: dirtorename/*$" .git/trace &&
     +    grep "^event: dirrenamed/*$"  .git/trace
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +test_expect_success 'file changes to directory' '
     +    test_when_finished clean_up_repo_and_stop_daemon &&
     +
    -+    (
    -+        GIT_TRACE_FSMONITOR="$(pwd)/.git/trace" &&
    -+        export GIT_TRACE_FSMONITOR &&
    -+
    -+        start_daemon
    -+    ) &&
    ++    start_daemon -tf "$PWD/.git/trace" &&
     +
     +    file_to_directory &&
     +
    -+    test-tool fsmonitor-client query --token 0 >/dev/null 2>&1 &&
    ++    test-tool fsmonitor-client query --token 0 &&
     +
     +    grep "^event: delete$"     .git/trace &&
     +    grep "^event: delete/new$" .git/trace
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +test_expect_success 'directory changes to a file' '
     +    test_when_finished clean_up_repo_and_stop_daemon &&
     +
    -+    (
    -+        GIT_TRACE_FSMONITOR="$(pwd)/.git/trace" &&
    -+        export GIT_TRACE_FSMONITOR &&
    -+
    -+        start_daemon
    -+    ) &&
    ++    start_daemon -tf "$PWD/.git/trace" &&
     +
     +    directory_to_file &&
     +
    -+    test-tool fsmonitor-client query --token 0 >/dev/null 2>&1 &&
    ++    test-tool fsmonitor-client query --token 0 &&
     +
     +    grep "^event: dir1$" .git/trace
     +'
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +
     +    git init test_flush &&
     +
    -+    (
    -+        GIT_TEST_FSMONITOR_TOKEN=true &&
    -+        export GIT_TEST_FSMONITOR_TOKEN &&
    -+
    -+        GIT_TRACE_FSMONITOR="$(pwd)/.git/trace_daemon" &&
    -+        export GIT_TRACE_FSMONITOR &&
    -+
    -+        start_daemon test_flush
    -+    ) &&
    ++    start_daemon -C test_flush -tf "$PWD/.git/trace_daemon" -tk true &&
     +
     +    # The daemon should have an initial token with no events in _0 and
     +    # then a few (probably platform-specific number of) events in _1.
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +    test-tool -C test_flush fsmonitor-client query --token "builtin:test_00000001:0" >actual_0 &&
     +    nul_to_q <actual_0 >actual_q0 &&
     +
    -+    touch test_flush/file_1 &&
    -+    touch test_flush/file_2 &&
    ++    >test_flush/file_1 &&
    ++    >test_flush/file_2 &&
     +
     +    test-tool -C test_flush fsmonitor-client query --token "builtin:test_00000001:0" >actual_1 &&
     +    nul_to_q <actual_1 >actual_q1 &&
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +
     +    grep "^builtin:test_00000002:0Q$" actual_q2 &&
     +
    -+    touch test_flush/file_3 &&
    ++    >test_flush/file_3 &&
     +
     +    test-tool -C test_flush fsmonitor-client query --token "builtin:test_00000002:0" >actual_3 &&
     +    nul_to_q <actual_3 >actual_q3 &&
    @@ t/t7527-builtin-fsmonitor.sh (new)
     +test_expect_success 'worktree with .git file' '
     +    git -C wt-base worktree add ../wt-secondary &&
     +
    -+    (
    -+        GIT_TRACE2_PERF="$(pwd)/trace2_wt_secondary" &&
    -+        export GIT_TRACE2_PERF &&
    -+
    -+        GIT_TRACE_FSMONITOR="$(pwd)/trace_wt_secondary" &&
    -+        export GIT_TRACE_FSMONITOR &&
    -+
    -+        start_daemon wt-secondary
    -+    ) &&
    ++    start_daemon -C wt-secondary \
    ++        -tf "$PWD/trace_wt_secondary" \
    ++        -t2 "$PWD/trace2_wt_secondary" &&
     +
     +    git -C wt-secondary fsmonitor--daemon stop &&
     +    test_must_fail git -C wt-secondary fsmonitor--daemon status
22:  15bd5aaff3 = 22:  c925a9a745 t/perf: avoid copying builtin fsmonitor files into test repo
23:  4cb97918d2 = 23:  5b3381c223 t/helper/test-chmtime: skip directories on Windows
24:  a70748b464 ! 24:  803a540cc0 t/perf/p7519: speed up test on Windows
    @@ t/perf/p7519-fsmonitor.sh: test_fsmonitor_suite() {
                  head -100000 | \
                  grep -v \" | \
     -            sed '\''s/\(.\)/\\\1/g'\'' | \
    -+            egrep -v " ." | \
    ++            grep -v " ." | \
                  xargs test-tool chmtime -300 &&
              git status
          '
25:  b0c9c9c7a4 ! 25:  d5ca2df31c t/perf/p7519: add fsmonitor--daemon test cases
    @@ Commit message
         Signed-off-by: Junio C Hamano <gitster@pobox.com>
     
      ## t/perf/p7519-fsmonitor.sh ##
    +@@ t/perf/p7519-fsmonitor.sh: test_expect_success "one time repo setup" '
    +     fi
    + '
    + 
    +-setup_for_fsmonitor () {
    ++setup_for_fsmonitor_hook () {
    +     # set INTEGRATION_SCRIPT depending on the environment
    +     if test -n "$INTEGRATION_PATH"
    +     then
     @@ t/perf/p7519-fsmonitor.sh: test_perf_w_drop_caches () {
      }
      
    @@ t/perf/p7519-fsmonitor.sh: test_perf_w_drop_caches () {
     +    if test -n "$USE_FSMONITOR_DAEMON"
     +    then
     +        DESC="builtin fsmonitor--daemon"
    -+    elif test -n "$INTEGRATION_SCRIPT"; then
    ++    elif test -n "$INTEGRATION_SCRIPT"
    ++    then
              DESC="fsmonitor=$(basename $INTEGRATION_SCRIPT)"
          else
              DESC="fsmonitor=disabled"
    +@@ t/perf/p7519-fsmonitor.sh: test_fsmonitor_suite () {
    + trace_start fsmonitor-watchman
    + if test -n "$GIT_PERF_7519_FSMONITOR"; then
    +     for INTEGRATION_PATH in $GIT_PERF_7519_FSMONITOR; do
    +-        test_expect_success "setup for fsmonitor $INTEGRATION_PATH" 'setup_for_fsmonitor'
    ++        test_expect_success "setup for fsmonitor $INTEGRATION_PATH" 'setup_for_fsmonitor_hook'
    +         test_fsmonitor_suite
    +     done
    + else
    +-    test_expect_success "setup for fsmonitor" 'setup_for_fsmonitor'
    ++    test_expect_success "setup for fsmonitor hook" 'setup_for_fsmonitor_hook'
    +     test_fsmonitor_suite
    + fi
    + 
     @@ t/perf/p7519-fsmonitor.sh: test_expect_success "setup without fsmonitor" '
      test_fsmonitor_suite
      trace_stop
    @@ t/perf/p7519-fsmonitor.sh: test_expect_success "setup without fsmonitor" '
     +then
     +    USE_FSMONITOR_DAEMON=t
     +
    -+    trace_start fsmonitor--daemon--server
    -+    git fsmonitor--daemon start
    ++    test_expect_success "setup for builtin fsmonitor" '
    ++        trace_start fsmonitor--daemon--server &&
    ++        git fsmonitor--daemon start &&
     +
    -+    trace_start fsmonitor--daemon--client
    ++        trace_start fsmonitor--daemon--client &&
     +
    -+    git config core.fsmonitor true
    -+    git update-index --fsmonitor
    ++        git config core.fsmonitor true &&
    ++        git update-index --fsmonitor
    ++    '
     +
     +    test_fsmonitor_suite
     +
26:  64a5b74167 = 26:  42631259e8 fsmonitor--daemon: periodically truncate list of modified files
27:  5b06eb5d0e ! 27:  f256c3cbe8 fsmonitor--daemon: use a cookie file to sync with file system
    @@ builtin/fsmonitor--daemon.c: static int do_as_client__status(void)
      
     +enum fsmonitor_cookie_item_result {
     +    FCIR_ERROR = -1, /* could not create cookie file ? */
    -+    FCIR_INIT = 0,
    ++    FCIR_INIT,
     +    FCIR_SEEN,
     +    FCIR_ABORT,
     +};
     +
     +struct fsmonitor_cookie_item {
     +    struct hashmap_entry entry;
    -+    const char *name;
    ++    char *name;
     +    enum fsmonitor_cookie_item_result result;
     +};
     +
    @@ builtin/fsmonitor--daemon.c: static int do_as_client__status(void)
     +     * that the listener thread has seen it.
     +     */
     +    fd = open(cookie_pathname.buf, O_WRONLY | O_CREAT | O_EXCL, 0600);
    -+    if (fd >= 0) {
    -+        close(fd);
    -+        unlink(cookie_pathname.buf);
    -+
    -+        /*
    -+         * Technically, this is an infinite wait (well, unless another
    -+         * thread sends us an abort).  I'd like to change this to
    -+         * use `pthread_cond_timedwait()` and return an error/timeout
    -+         * and let the caller do the trivial response thing, but we
    -+         * don't have that routine in our thread-utils.
    -+         *
    -+         * After extensive beta testing I'm not really worried about
    -+         * this.  Also note that the above open() and unlink() calls
    -+         * will cause at least two FS events on that path, so the odds
    -+         * of getting stuck are pretty slim.
    -+         */
    -+        while (cookie->result == FCIR_INIT)
    -+            pthread_cond_wait(&state->cookies_cond,
    -+                      &state->main_lock);
    -+    } else {
    ++    if (fd < 0) {
     +        error_errno(_("could not create fsmonitor cookie '%s'"),
     +                cookie->name);
     +
     +        cookie->result = FCIR_ERROR;
    ++        goto done;
     +    }
     +
    ++    /*
    ++     * Technically, close() and unlink() can fail, but we don't
    ++     * care here.  We only created the file to trigger a watch
    ++     * event from the FS to know that when we're up to date.
    ++     */
    ++    close(fd);
    ++    unlink(cookie_pathname.buf);
    ++
    ++    /*
    ++     * Technically, this is an infinite wait (well, unless another
    ++     * thread sends us an abort).  I'd like to change this to
    ++     * use `pthread_cond_timedwait()` and return an error/timeout
    ++     * and let the caller do the trivial response thing, but we
    ++     * don't have that routine in our thread-utils.
    ++     *
    ++     * After extensive beta testing I'm not really worried about
    ++     * this.  Also note that the above open() and unlink() calls
    ++     * will cause at least two FS events on that path, so the odds
    ++     * of getting stuck are pretty slim.
    ++     */
    ++    while (cookie->result == FCIR_INIT)
    ++        pthread_cond_wait(&state->cookies_cond,
    ++                  &state->main_lock);
    ++
    ++done:
     +    hashmap_remove(&state->cookies, &cookie->entry, NULL);
     +
     +    result = cookie->result;
     +
    -+    free((char*)cookie->name);
    ++    free(cookie->name);
     +    free(cookie);
     +    strbuf_release(&cookie_pathname);
     +
28:  1fd5439de0 = 28:  08af8296f9 fsmonitor: force update index after large responses
29:  6fc1430285 ! 29:  e6cf84dc8e t7527: test status with untracked-cache and fsmonitor--daemon
    @@ t/t7527-builtin-fsmonitor.sh: test_expect_success 'cleanup worktrees' '
     +}
     +
     +matrix_try () {
    -+    uc=$1
    -+    fsm=$2
    -+    fn=$3
    ++    uc=$1 &&
    ++    fsm=$2 &&
    ++    fn=$3 &&
     +
     +    test_expect_success "Matrix[uc:$uc][fsm:$fsm] $fn" '
     +        matrix_clean_up_repo &&
30:  b915b95cc2 <  -:  ---------- update-index: convert fsmonitor warnings to advise


Jeff Hostetler (29):
  fsmonitor: enhance existing comments, clarify trivial response
    handling
  fsmonitor-ipc: create client routines for git-fsmonitor--daemon
  fsmonitor: config settings are repository-specific
  fsmonitor: use IPC to query the builtin FSMonitor daemon
  fsmonitor: document builtin fsmonitor
  fsmonitor--daemon: add a built-in fsmonitor daemon
  fsmonitor--daemon: implement 'stop' and 'status' commands
  compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
  compat/fsmonitor/fsm-listen-darwin: stub in backend for Darwin
  fsmonitor--daemon: implement 'run' command
  fsmonitor--daemon: implement 'start' command
  fsmonitor--daemon: add pathname classification
  fsmonitor--daemon: define token-ids
  fsmonitor--daemon: create token-based changed path cache
  compat/fsmonitor/fsm-listen-win32: implement FSMonitor backend on
    Windows
  compat/fsmonitor/fsm-listen-darwin: add MacOS header files for FSEvent
  compat/fsmonitor/fsm-listen-darwin: implement FSEvent listener on
    MacOS
  fsmonitor--daemon: implement handle_client callback
  help: include fsmonitor--daemon feature flag in version info
  t/helper/fsmonitor-client: create IPC client to talk to FSMonitor
    Daemon
  t7527: create test for fsmonitor--daemon
  t/perf: avoid copying builtin fsmonitor files into test repo
  t/helper/test-chmtime: skip directories on Windows
  t/perf/p7519: speed up test on Windows
  t/perf/p7519: add fsmonitor--daemon test cases
  fsmonitor--daemon: periodically truncate list of modified files
  fsmonitor--daemon: use a cookie file to sync with file system
  fsmonitor: force update index after large responses
  t7527: test status with untracked-cache and fsmonitor--daemon

 .gitignore                              |    1 +
 Documentation/config/core.txt           |   60 +-
 Documentation/git-fsmonitor--daemon.txt |   75 ++
 Documentation/git-update-index.txt      |    8 +-
 Makefile                                |   17 +
 builtin.h                               |    1 +
 builtin/fsmonitor--daemon.c             | 1480 +++++++++++++++++++++++
 builtin/update-index.c                  |    7 +-
 cache.h                                 |    1 -
 compat/fsmonitor/fsm-darwin-gcc.h       |   92 ++
 compat/fsmonitor/fsm-listen-darwin.c    |  427 +++++++
 compat/fsmonitor/fsm-listen-win32.c     |  586 +++++++++
 compat/fsmonitor/fsm-listen.h           |   49 +
 config.c                                |   14 -
 config.h                                |    1 -
 config.mak.uname                        |   20 +
 contrib/buildsystems/CMakeLists.txt     |   10 +
 environment.c                           |    1 -
 fsmonitor--daemon.h                     |  166 +++
 fsmonitor-ipc.c                         |  171 +++
 fsmonitor-ipc.h                         |   48 +
 fsmonitor-settings.c                    |  114 ++
 fsmonitor-settings.h                    |   21 +
 fsmonitor.c                             |  216 +++-
 fsmonitor.h                             |   15 +-
 git.c                                   |    1 +
 help.c                                  |    4 +
 repo-settings.c                         |    1 +
 repository.h                            |    3 +
 t/README                                |    4 +-
 t/helper/test-chmtime.c                 |   15 +
 t/helper/test-fsmonitor-client.c        |  116 ++
 t/helper/test-tool.c                    |    1 +
 t/helper/test-tool.h                    |    1 +
 t/perf/p7519-fsmonitor.sh               |   68 +-
 t/perf/perf-lib.sh                      |    2 +-
 t/t7527-builtin-fsmonitor.sh            |  594 +++++++++
 t/test-lib.sh                           |    7 +
 38 files changed, 4312 insertions(+), 106 deletions(-)
 create mode 100644 Documentation/git-fsmonitor--daemon.txt
 create mode 100644 builtin/fsmonitor--daemon.c
 create mode 100644 compat/fsmonitor/fsm-darwin-gcc.h
 create mode 100644 compat/fsmonitor/fsm-listen-darwin.c
 create mode 100644 compat/fsmonitor/fsm-listen-win32.c
 create mode 100644 compat/fsmonitor/fsm-listen.h
 create mode 100644 fsmonitor--daemon.h
 create mode 100644 fsmonitor-ipc.c
 create mode 100644 fsmonitor-ipc.h
 create mode 100644 fsmonitor-settings.c
 create mode 100644 fsmonitor-settings.h
 create mode 100644 t/helper/test-fsmonitor-client.c
 create mode 100755 t/t7527-builtin-fsmonitor.sh


base-commit: 715d08a9e51251ad8290b181b6ac3b9e1f9719d7
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1041%2Fjeffhostetler%2Fbuiltin-fsmonitor-part2-v7
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1041/jeffhostetler/builtin-fsmonitor-part2-v7
Pull-Request: https://github.com/gitgitgadget/git/pull/1041

Range-diff vs v6:

  1:  10a34082fcc =  1:  e98373f997f fsmonitor: enhance existing comments, clarify trivial response handling
  2:  e1c946af2c5 !  2:  ab68b944173 fsmonitor-ipc: create client routines for git-fsmonitor--daemon
     @@ fsmonitor-ipc.c (new)
      +	state = ipc_client_try_connect(fsmonitor_ipc__get_path(), &options,
      +				       &connection);
      +	if (state != IPC_STATE__LISTENING) {
     -+		die("fsmonitor--daemon is not running");
     ++		die(_("fsmonitor--daemon is not running"));
      +		return -1;
      +	}
      +
     @@ fsmonitor-ipc.c (new)
      +	ipc_client_close_connection(connection);
      +
      +	if (ret == -1) {
     -+		die("could not send '%s' command to fsmonitor--daemon", c);
     ++		die(_("could not send '%s' command to fsmonitor--daemon"), c);
      +		return -1;
      +	}
      +
  3:  ae622a517cf !  3:  e04c7301f24 fsmonitor: config settings are repository-specific
     @@ fsmonitor-settings.c (new)
      +		return;
      +
      +	CALLOC_ARRAY(s, 1);
     ++	s->mode = FSMONITOR_MODE_DISABLED;
      +
      +	r->settings.fsmonitor = s;
      +
     -+	fsm_settings__set_disabled(r);
     -+
      +	/*
      +	 * Overload the existing "core.fsmonitor" config setting (which
      +	 * has historically been either unset or a hook pathname) to
  4:  55974867da5 =  4:  ea02ba25d8f fsmonitor: use IPC to query the builtin FSMonitor daemon
  5:  ce42d5bbaf6 =  5:  6ab7db9cb76 fsmonitor: document builtin fsmonitor
  6:  9ce938c69b5 =  6:  0ce8ae3f2cf fsmonitor--daemon: add a built-in fsmonitor daemon
  7:  3bd7e6a051e =  7:  4624ce2fa47 fsmonitor--daemon: implement 'stop' and 'status' commands
  8:  92d3e54da7f =  8:  a29fe7266a4 compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
  9:  f1219221270 =  9:  2f8a42fdb93 compat/fsmonitor/fsm-listen-darwin: stub in backend for Darwin
 10:  a3f94627cf6 ! 10:  f07800690ee fsmonitor--daemon: implement 'run' command
     @@ builtin/fsmonitor--daemon.c: static int do_as_client__status(void)
      +	 * common error case.
      +	 */
      +	if (fsmonitor_ipc__get_state() == IPC_STATE__LISTENING)
     -+		die("fsmonitor--daemon is already running '%s'",
     ++		die(_("fsmonitor--daemon is already running '%s'"),
      +		    the_repository->worktree);
      +
      +	if (fsmonitor__announce_startup) {
 11:  8de40b0fe8b ! 11:  a6a39a3306d fsmonitor--daemon: implement 'start' command
     @@ builtin/fsmonitor--daemon.c: static int try_to_run_foreground_daemon(void)
      +	 * immediately exited).
      +	 */
      +	if (fsmonitor_ipc__get_state() == IPC_STATE__LISTENING)
     -+		die("fsmonitor--daemon is already running '%s'",
     ++		die(_("fsmonitor--daemon is already running '%s'"),
      +		    the_repository->worktree);
      +
      +	if (fsmonitor__announce_startup) {
     @@ builtin/fsmonitor--daemon.c: static int try_to_run_foreground_daemon(void)
      +	default:
      +	case SBGR_ERROR:
      +	case SBGR_CB_ERROR:
     -+		return error("daemon failed to start");
     ++		return error(_("daemon failed to start"));
      +
      +	case SBGR_TIMEOUT:
     -+		return error("daemon not online yet");
     ++		return error(_("daemon not online yet"));
      +
      +	case SBGR_DIED:
     -+		return error("daemon terminated");
     ++		return error(_("daemon terminated"));
      +	}
      +}
      +
 12:  e5d419b1ea0 = 12:  d62e338d008 fsmonitor--daemon: add pathname classification
 13:  c2f3668a866 = 13:  53e06b4ae5d fsmonitor--daemon: define token-ids
 14:  bd492d13fb1 = 14:  39f43fabe02 fsmonitor--daemon: create token-based changed path cache
 15:  6b5b3d08227 ! 15:  239558e34ff compat/fsmonitor/fsm-listen-win32: implement FSMonitor backend on Windows
     @@ compat/fsmonitor/fsm-listen-win32.c
      +		if (len > 0)
      +			goto normalize;
      +		if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
     -+			error("[GLE %ld] could not convert path to UTF-8: '%.*ls'",
     ++			error(_("[GLE %ld] could not convert path to UTF-8: '%.*ls'"),
      +			      GetLastError(),
      +			      (int)(info->FileNameLength / sizeof(WCHAR)),
      +			      info->FileName);
     @@ compat/fsmonitor/fsm-listen-win32.c
      +	if (watch->is_active)
      +		return 0;
      +
     -+	error("ReadDirectoryChangedW failed on '%s' [GLE %ld]",
     ++	error(_("ReadDirectoryChangedW failed on '%s' [GLE %ld]"),
      +	      watch->path.buf, GetLastError());
      +	return -1;
      +}
     @@ compat/fsmonitor/fsm-listen-win32.c
      +	 * sure it is worth it.
      +	 */
      +
     -+	error("GetOverlappedResult failed on '%s' [GLE %ld]",
     ++	error(_("GetOverlappedResult failed on '%s' [GLE %ld]"),
      +	      watch->path.buf, gle);
      +	return -1;
      +}
 16:  cdef9730b3f ! 16:  14b775e9d8b compat/fsmonitor/fsm-listen-darwin: add MacOS header files for FSEvent
     @@ Commit message
          Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
          Signed-off-by: Junio C Hamano <gitster@pobox.com>
      
     - ## compat/fsmonitor/fsm-listen-darwin.c ##
     + ## compat/fsmonitor/fsm-darwin-gcc.h (new) ##
      @@
     ++#ifndef FSM_DARWIN_GCC_H
     ++#define FSM_DARWIN_GCC_H
     ++
      +#ifndef __clang__
      +/*
      + * It is possible to #include CoreFoundation/CoreFoundation.h when compiling
     @@ compat/fsmonitor/fsm-listen-darwin.c
      +void FSEventStreamStop(FSEventStreamRef stream);
      +void FSEventStreamInvalidate(FSEventStreamRef stream);
      +void FSEventStreamRelease(FSEventStreamRef stream);
     ++
     ++#endif /* !clang */
     ++#endif /* FSM_DARWIN_GCC_H */
     +
     + ## compat/fsmonitor/fsm-listen-darwin.c ##
     +@@
     ++#ifndef __clang__
     ++#include "fsm-darwin-gcc.h"
      +#else
     -+/*
     -+ * Let Apple's headers declare `isalnum()` first, before
     -+ * Git's headers override it via a constant
     -+ */
     -+#include <string.h>
      +#include <CoreFoundation/CoreFoundation.h>
      +#include <CoreServices/CoreServices.h>
     ++
     ++#ifndef AVAILABLE_MAC_OS_X_VERSION_10_13_AND_LATER
     ++/*
     ++ * This enum value was added in 10.13 to:
     ++ *
     ++ * /Applications/Xcode.app/Contents/Developer/Platforms/ \
     ++ *    MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/ \
     ++ *    Library/Frameworks/CoreServices.framework/Frameworks/ \
     ++ *    FSEvents.framework/Versions/Current/Headers/FSEvents.h
     ++ *
     ++ * If we're compiling against an older SDK, this symbol won't be
     ++ * present.  Silently define it here so that we don't have to ifdef
     ++ * the logging or masking below.  This should be harmless since older
     ++ * versions of macOS won't ever emit this FS event anyway.
     ++ */
     ++#define kFSEventStreamEventFlagItemCloned         0x00400000
     ++#endif
      +#endif
      +
       #include "cache.h"
 17:  aabfebd3a41 ! 17:  55bd7aee06c compat/fsmonitor/fsm-listen-darwin: implement FSEvent listener on MacOS
     @@ Commit message
          Signed-off-by: Junio C Hamano <gitster@pobox.com>
      
       ## compat/fsmonitor/fsm-listen-darwin.c ##
     -@@ compat/fsmonitor/fsm-listen-darwin.c: void FSEventStreamRelease(FSEventStreamRef stream);
     +@@
       #include "cache.h"
       #include "fsmonitor.h"
       #include "fsm-listen.h"
     @@ compat/fsmonitor/fsm-listen-darwin.c: void FSEventStreamRelease(FSEventStreamRef
      +	return 0;
      +
      +failed:
     -+	error("Unable to create FSEventStream.");
     ++	error(_("Unable to create FSEventStream."));
      +
      +	FREE_AND_NULL(state->backend_data);
       	return -1;
     @@ compat/fsmonitor/fsm-listen-darwin.c: void FSEventStreamRelease(FSEventStreamRef
      +	data->stream_scheduled = 1;
      +
      +	if (!FSEventStreamStart(data->stream)) {
     -+		error("Failed to start the FSEventStream");
     ++		error(_("Failed to start the FSEventStream"));
      +		goto force_error_stop_without_loop;
      +	}
      +	data->stream_started = 1;
 18:  0896e72e2b8 = 18:  1f4b5209bf6 fsmonitor--daemon: implement handle_client callback
 19:  bc240a9e665 ! 19:  8cf62c9fc6f help: include fsmonitor--daemon feature flag in version info
     @@ t/test-lib.sh: test_lazy_prereq SHA1 '
      +# Does this platform support `git fsmonitor--daemon`
      +#
      +test_lazy_prereq FSMONITOR_DAEMON '
     -+	git version --build-options | grep "feature:" | grep "fsmonitor--daemon"
     ++	git version --build-options >output &&
     ++	grep "feature: fsmonitor--daemon" output
      +'
 20:  2b563c240eb ! 20:  1bd74a81593 t/helper/fsmonitor-client: create IPC client to talk to FSMonitor Daemon
     @@ t/helper/test-fsmonitor-client.c (new)
      +
      +	ret = fsmonitor_ipc__send_query(token, &answer);
      +	if (ret < 0)
     -+		die(_("could not query fsmonitor--daemon"));
     ++		die("could not query fsmonitor--daemon");
      +
      +	write_in_full(1, answer.buf, answer.len);
      +	strbuf_release(&answer);
     @@ t/helper/test-fsmonitor-client.c (new)
      +	const char *token = NULL;
      +
      +	const char * const fsmonitor_client_usage[] = {
     -+		N_("test-helper fsmonitor-client query [<token>]"),
     -+		N_("test-helper fsmonitor-client flush"),
     ++		"test-tool fsmonitor-client query [<token>]",
     ++		"test-tool fsmonitor-client flush",
      +		NULL,
      +	};
      +
      +	struct option options[] = {
     -+		OPT_STRING(0, "token", &token, N_("token"),
     -+			   N_("command token to send to the server")),
     ++		OPT_STRING(0, "token", &token, "token",
     ++			   "command token to send to the server"),
      +		OPT_END()
      +	};
      +
     -+	if (argc < 2)
     -+		usage_with_options(fsmonitor_client_usage, options);
     ++	argc = parse_options(argc, argv, NULL, options, fsmonitor_client_usage, 0);
      +
     -+	if (argc == 2 && !strcmp(argv[1], "-h"))
     ++	if (argc != 1)
      +		usage_with_options(fsmonitor_client_usage, options);
      +
     -+	subcmd = argv[1];
     -+	argv--;
     -+	argc++;
     -+
     -+	argc = parse_options(argc, argv, NULL, options, fsmonitor_client_usage, 0);
     ++	subcmd = argv[0];
      +
      +	setup_git_directory();
      +
 21:  db8809da089 ! 21:  4a920d0b54a t7527: create test for fsmonitor--daemon
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +fi
      +
      +stop_daemon_delete_repo () {
     -+	r=$1
     -+	git -C $r fsmonitor--daemon stop >/dev/null 2>/dev/null
     ++	r=$1 &&
     ++	test_might_fail git -C $r fsmonitor--daemon stop &&
      +	rm -rf $1
     -+	return 0
      +}
      +
      +start_daemon () {
     -+	case "$#" in
     -+		1) r="-C $1";;
     -+		*) r="";
     -+	esac
     ++	r= &&
     ++	tf= &&
     ++	t2= &&
     ++	tk= &&
     ++
     ++	while test "$#" -ne 0
     ++	do
     ++		case "$1" in
     ++		-C)
     ++			shift;
     ++			test "$#" -ne 0 || BUG "error: -C requires arg"
     ++			r="-C $1"
     ++			shift
     ++			;;
     ++		-tf)
     ++			shift;
     ++			test "$#" -ne 0 || BUG "error: -tf requires arg"
     ++			tf="$1"
     ++			shift
     ++			;;
     ++		-t2)
     ++			shift;
     ++			test "$#" -ne 0 || BUG "error: -t2 requires arg"
     ++			t2="$1"
     ++			shift
     ++			;;
     ++		-tk)
     ++			shift;
     ++			test "$#" -ne 0 || BUG "error: -tk requires arg"
     ++			tk="$1"
     ++			shift
     ++			;;
     ++		*)
     ++			BUG "error: unknown option: '$1'"
     ++			;;
     ++		esac
     ++	done &&
      +
     -+	git $r fsmonitor--daemon start || return $?
     -+	git $r fsmonitor--daemon status || return $?
     -+
     -+	return 0
     ++	(
     ++		if test -n "$tf"
     ++		then
     ++			GIT_TRACE_FSMONITOR="$tf"
     ++			export GIT_TRACE_FSMONITOR
     ++		fi &&
     ++
     ++		if test -n "$t2"
     ++		then
     ++			GIT_TRACE2_PERF="$t2"
     ++			export GIT_TRACE2_PERF
     ++		fi &&
     ++
     ++		if test -n "$tk"
     ++		then
     ++			GIT_TEST_FSMONITOR_TOKEN="$tk"
     ++			export GIT_TEST_FSMONITOR_TOKEN
     ++		fi &&
     ++
     ++		git $r fsmonitor--daemon start &&
     ++		git $r fsmonitor--daemon status
     ++	)
      +}
      +
      +# Is a Trace2 data event present with the given catetory and key?
      +# We do not care what the value is.
      +#
      +have_t2_data_event () {
     -+	c=$1
     -+	k=$2
     ++	c=$1 &&
     ++	k=$2 &&
      +
      +	grep -e '"event":"data".*"category":"'"$c"'".*"key":"'"$k"'"'
      +}
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +	test_when_finished "stop_daemon_delete_repo test_explicit" &&
      +
      +	git init test_explicit &&
     -+	start_daemon test_explicit &&
     ++	start_daemon -C test_explicit &&
      +
      +	git -C test_explicit fsmonitor--daemon stop &&
      +	test_must_fail git -C test_explicit fsmonitor--daemon status
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +	# but this test case is only concerned with whether the daemon was
      +	# implicitly started.)
      +
     -+	GIT_TRACE2_EVENT="$(pwd)/.git/trace" \
     ++	GIT_TRACE2_EVENT="$PWD/.git/trace" \
      +		test-tool -C test_implicit fsmonitor-client query --token 0 >actual &&
      +	nul_to_q <actual >actual.filtered &&
      +	grep "builtin:" actual.filtered &&
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +
      +	git init test_implicit_1 &&
      +
     -+	start_daemon test_implicit_1 &&
     ++	start_daemon -C test_implicit_1 &&
      +
      +	# deleting the .git directory will implicitly stop the daemon.
      +	rm -rf test_implicit_1/.git &&
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +
      +	git init test_implicit_2 &&
      +
     -+	start_daemon test_implicit_2 &&
     ++	start_daemon -C test_implicit_2 &&
      +
      +	# renaming the .git directory will implicitly stop the daemon.
      +	mv test_implicit_2/.git test_implicit_2/.xxx &&
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +
      +	git init test_multiple &&
      +
     -+	start_daemon test_multiple &&
     ++	start_daemon -C test_multiple &&
      +
      +	test_must_fail git -C test_multiple fsmonitor--daemon start 2>actual &&
      +	grep "fsmonitor--daemon is already running" actual &&
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +# This is here in case something else fails first.
      +#
      +redundant_stop_daemon () {
     -+	git fsmonitor--daemon stop
     -+	return 0
     ++	test_might_fail git fsmonitor--daemon stop
      +}
      +
      +test_expect_success 'update-index implicitly starts daemon' '
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +
      +	test_must_fail git fsmonitor--daemon status &&
      +
     -+	GIT_TRACE2_EVENT="$(pwd)/.git/trace_implicit_1" \
     ++	GIT_TRACE2_EVENT="$PWD/.git/trace_implicit_1" \
      +		git update-index --fsmonitor &&
      +
      +	git fsmonitor--daemon status &&
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +
      +	test_must_fail git fsmonitor--daemon status &&
      +
     -+	GIT_TRACE2_EVENT="$(pwd)/.git/trace_implicit_2" \
     ++	GIT_TRACE2_EVENT="$PWD/.git/trace_implicit_2" \
      +		git status >actual &&
      +
      +	git fsmonitor--daemon status &&
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +'
      +
      +edit_files () {
     -+	echo 1 >modified
     -+	echo 2 >dir1/modified
     -+	echo 3 >dir2/modified
     ++	echo 1 >modified &&
     ++	echo 2 >dir1/modified &&
     ++	echo 3 >dir2/modified &&
      +	>dir1/untracked
      +}
      +
      +delete_files () {
     -+	rm -f delete
     -+	rm -f dir1/delete
     ++	rm -f delete &&
     ++	rm -f dir1/delete &&
      +	rm -f dir2/delete
      +}
      +
      +create_files () {
     -+	echo 1 >new
     -+	echo 2 >dir1/new
     ++	echo 1 >new &&
     ++	echo 2 >dir1/new &&
      +	echo 3 >dir2/new
      +}
      +
      +rename_files () {
     -+	mv rename renamed
     -+	mv dir1/rename dir1/renamed
     ++	mv rename renamed &&
     ++	mv dir1/rename dir1/renamed &&
      +	mv dir2/rename dir2/renamed
      +}
      +
      +file_to_directory () {
     -+	rm -f delete
     -+	mkdir delete
     ++	rm -f delete &&
     ++	mkdir delete &&
      +	echo 1 >delete/new
      +}
      +
      +directory_to_file () {
     -+	rm -rf dir1
     ++	rm -rf dir1 &&
      +	echo 1 >dir1
      +}
      +
     -+verify_status () {
     -+	git status >actual &&
     -+	GIT_INDEX_FILE=.git/fresh-index git read-tree master &&
     -+	GIT_INDEX_FILE=.git/fresh-index git -c core.fsmonitor=false status >expect &&
     -+	test_cmp expect actual &&
     -+	echo HELLO AFTER &&
     -+	cat .git/trace &&
     -+	echo HELLO AFTER
     -+}
     -+
      +# The next few test cases confirm that our fsmonitor daemon sees each type
      +# of OS filesystem notification that we care about.  At this layer we just
      +# ensure we are getting the OS notifications and do not try to confirm what
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +# daemon) because these commands might implicitly restart the daemon.
      +
      +clean_up_repo_and_stop_daemon () {
     -+	git reset --hard HEAD
     -+	git clean -fd
     -+	git fsmonitor--daemon stop
     ++	git reset --hard HEAD &&
     ++	git clean -fd &&
     ++	test_might_fail git fsmonitor--daemon stop &&
      +	rm -f .git/trace
      +}
      +
      +test_expect_success 'edit some files' '
      +	test_when_finished clean_up_repo_and_stop_daemon &&
      +
     -+	(
     -+		GIT_TRACE_FSMONITOR="$(pwd)/.git/trace" &&
     -+		export GIT_TRACE_FSMONITOR &&
     -+
     -+		start_daemon
     -+	) &&
     ++	start_daemon -tf "$PWD/.git/trace" &&
      +
      +	edit_files &&
      +
     -+	test-tool fsmonitor-client query --token 0 >/dev/null 2>&1 &&
     ++	test-tool fsmonitor-client query --token 0 &&
      +
      +	grep "^event: dir1/modified$"  .git/trace &&
      +	grep "^event: dir2/modified$"  .git/trace &&
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +test_expect_success 'create some files' '
      +	test_when_finished clean_up_repo_and_stop_daemon &&
      +
     -+	(
     -+		GIT_TRACE_FSMONITOR="$(pwd)/.git/trace" &&
     -+		export GIT_TRACE_FSMONITOR &&
     -+
     -+		start_daemon
     -+	) &&
     ++	start_daemon -tf "$PWD/.git/trace" &&
      +
      +	create_files &&
      +
     -+	test-tool fsmonitor-client query --token 0 >/dev/null 2>&1 &&
     ++	test-tool fsmonitor-client query --token 0 &&
      +
      +	grep "^event: dir1/new$" .git/trace &&
      +	grep "^event: dir2/new$" .git/trace &&
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +test_expect_success 'delete some files' '
      +	test_when_finished clean_up_repo_and_stop_daemon &&
      +
     -+	(
     -+		GIT_TRACE_FSMONITOR="$(pwd)/.git/trace" &&
     -+		export GIT_TRACE_FSMONITOR &&
     -+
     -+		start_daemon
     -+	) &&
     ++	start_daemon -tf "$PWD/.git/trace" &&
      +
      +	delete_files &&
      +
     -+	test-tool fsmonitor-client query --token 0 >/dev/null 2>&1 &&
     ++	test-tool fsmonitor-client query --token 0 &&
      +
      +	grep "^event: dir1/delete$" .git/trace &&
      +	grep "^event: dir2/delete$" .git/trace &&
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +test_expect_success 'rename some files' '
      +	test_when_finished clean_up_repo_and_stop_daemon &&
      +
     -+	(
     -+		GIT_TRACE_FSMONITOR="$(pwd)/.git/trace" &&
     -+		export GIT_TRACE_FSMONITOR &&
     -+
     -+		start_daemon
     -+	) &&
     ++	start_daemon -tf "$PWD/.git/trace" &&
      +
      +	rename_files &&
      +
     -+	test-tool fsmonitor-client query --token 0 >/dev/null 2>&1 &&
     ++	test-tool fsmonitor-client query --token 0 &&
      +
      +	grep "^event: dir1/rename$"  .git/trace &&
      +	grep "^event: dir2/rename$"  .git/trace &&
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +test_expect_success 'rename directory' '
      +	test_when_finished clean_up_repo_and_stop_daemon &&
      +
     -+	(
     -+		GIT_TRACE_FSMONITOR="$(pwd)/.git/trace" &&
     -+		export GIT_TRACE_FSMONITOR &&
     -+
     -+		start_daemon
     -+	) &&
     ++	start_daemon -tf "$PWD/.git/trace" &&
      +
      +	mv dirtorename dirrenamed &&
      +
     -+	test-tool fsmonitor-client query --token 0 >/dev/null 2>&1 &&
     ++	test-tool fsmonitor-client query --token 0 &&
      +
      +	grep "^event: dirtorename/*$" .git/trace &&
      +	grep "^event: dirrenamed/*$"  .git/trace
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +test_expect_success 'file changes to directory' '
      +	test_when_finished clean_up_repo_and_stop_daemon &&
      +
     -+	(
     -+		GIT_TRACE_FSMONITOR="$(pwd)/.git/trace" &&
     -+		export GIT_TRACE_FSMONITOR &&
     -+
     -+		start_daemon
     -+	) &&
     ++	start_daemon -tf "$PWD/.git/trace" &&
      +
      +	file_to_directory &&
      +
     -+	test-tool fsmonitor-client query --token 0 >/dev/null 2>&1 &&
     ++	test-tool fsmonitor-client query --token 0 &&
      +
      +	grep "^event: delete$"     .git/trace &&
      +	grep "^event: delete/new$" .git/trace
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +test_expect_success 'directory changes to a file' '
      +	test_when_finished clean_up_repo_and_stop_daemon &&
      +
     -+	(
     -+		GIT_TRACE_FSMONITOR="$(pwd)/.git/trace" &&
     -+		export GIT_TRACE_FSMONITOR &&
     -+
     -+		start_daemon
     -+	) &&
     ++	start_daemon -tf "$PWD/.git/trace" &&
      +
      +	directory_to_file &&
      +
     -+	test-tool fsmonitor-client query --token 0 >/dev/null 2>&1 &&
     ++	test-tool fsmonitor-client query --token 0 &&
      +
      +	grep "^event: dir1$" .git/trace
      +'
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +
      +	git init test_flush &&
      +
     -+	(
     -+		GIT_TEST_FSMONITOR_TOKEN=true &&
     -+		export GIT_TEST_FSMONITOR_TOKEN &&
     -+
     -+		GIT_TRACE_FSMONITOR="$(pwd)/.git/trace_daemon" &&
     -+		export GIT_TRACE_FSMONITOR &&
     -+
     -+		start_daemon test_flush
     -+	) &&
     ++	start_daemon -C test_flush -tf "$PWD/.git/trace_daemon" -tk true &&
      +
      +	# The daemon should have an initial token with no events in _0 and
      +	# then a few (probably platform-specific number of) events in _1.
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +	test-tool -C test_flush fsmonitor-client query --token "builtin:test_00000001:0" >actual_0 &&
      +	nul_to_q <actual_0 >actual_q0 &&
      +
     -+	touch test_flush/file_1 &&
     -+	touch test_flush/file_2 &&
     ++	>test_flush/file_1 &&
     ++	>test_flush/file_2 &&
      +
      +	test-tool -C test_flush fsmonitor-client query --token "builtin:test_00000001:0" >actual_1 &&
      +	nul_to_q <actual_1 >actual_q1 &&
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +
      +	grep "^builtin:test_00000002:0Q$" actual_q2 &&
      +
     -+	touch test_flush/file_3 &&
     ++	>test_flush/file_3 &&
      +
      +	test-tool -C test_flush fsmonitor-client query --token "builtin:test_00000002:0" >actual_3 &&
      +	nul_to_q <actual_3 >actual_q3 &&
     @@ t/t7527-builtin-fsmonitor.sh (new)
      +test_expect_success 'worktree with .git file' '
      +	git -C wt-base worktree add ../wt-secondary &&
      +
     -+	(
     -+		GIT_TRACE2_PERF="$(pwd)/trace2_wt_secondary" &&
     -+		export GIT_TRACE2_PERF &&
     -+
     -+		GIT_TRACE_FSMONITOR="$(pwd)/trace_wt_secondary" &&
     -+		export GIT_TRACE_FSMONITOR &&
     -+
     -+		start_daemon wt-secondary
     -+	) &&
     ++	start_daemon -C wt-secondary \
     ++		-tf "$PWD/trace_wt_secondary" \
     ++		-t2 "$PWD/trace2_wt_secondary" &&
      +
      +	git -C wt-secondary fsmonitor--daemon stop &&
      +	test_must_fail git -C wt-secondary fsmonitor--daemon status
 22:  15bd5aaff36 = 22:  c925a9a7459 t/perf: avoid copying builtin fsmonitor files into test repo
 23:  4cb97918d20 = 23:  5b3381c223e t/helper/test-chmtime: skip directories on Windows
 24:  a70748b4640 ! 24:  803a540cc00 t/perf/p7519: speed up test on Windows
     @@ t/perf/p7519-fsmonitor.sh: test_fsmonitor_suite() {
       			head -100000 | \
       			grep -v \" | \
      -			sed '\''s/\(.\)/\\\1/g'\'' | \
     -+			egrep -v " ." | \
     ++			grep -v " ." | \
       			xargs test-tool chmtime -300 &&
       		git status
       	'
 25:  b0c9c9c7a40 ! 25:  d5ca2df31c8 t/perf/p7519: add fsmonitor--daemon test cases
     @@ Commit message
          Signed-off-by: Junio C Hamano <gitster@pobox.com>
      
       ## t/perf/p7519-fsmonitor.sh ##
     +@@ t/perf/p7519-fsmonitor.sh: test_expect_success "one time repo setup" '
     + 	fi
     + '
     + 
     +-setup_for_fsmonitor () {
     ++setup_for_fsmonitor_hook () {
     + 	# set INTEGRATION_SCRIPT depending on the environment
     + 	if test -n "$INTEGRATION_PATH"
     + 	then
      @@ t/perf/p7519-fsmonitor.sh: test_perf_w_drop_caches () {
       }
       
     @@ t/perf/p7519-fsmonitor.sh: test_perf_w_drop_caches () {
      +	if test -n "$USE_FSMONITOR_DAEMON"
      +	then
      +		DESC="builtin fsmonitor--daemon"
     -+	elif test -n "$INTEGRATION_SCRIPT"; then
     ++	elif test -n "$INTEGRATION_SCRIPT"
     ++	then
       		DESC="fsmonitor=$(basename $INTEGRATION_SCRIPT)"
       	else
       		DESC="fsmonitor=disabled"
     +@@ t/perf/p7519-fsmonitor.sh: test_fsmonitor_suite () {
     + trace_start fsmonitor-watchman
     + if test -n "$GIT_PERF_7519_FSMONITOR"; then
     + 	for INTEGRATION_PATH in $GIT_PERF_7519_FSMONITOR; do
     +-		test_expect_success "setup for fsmonitor $INTEGRATION_PATH" 'setup_for_fsmonitor'
     ++		test_expect_success "setup for fsmonitor $INTEGRATION_PATH" 'setup_for_fsmonitor_hook'
     + 		test_fsmonitor_suite
     + 	done
     + else
     +-	test_expect_success "setup for fsmonitor" 'setup_for_fsmonitor'
     ++	test_expect_success "setup for fsmonitor hook" 'setup_for_fsmonitor_hook'
     + 	test_fsmonitor_suite
     + fi
     + 
      @@ t/perf/p7519-fsmonitor.sh: test_expect_success "setup without fsmonitor" '
       test_fsmonitor_suite
       trace_stop
     @@ t/perf/p7519-fsmonitor.sh: test_expect_success "setup without fsmonitor" '
      +then
      +	USE_FSMONITOR_DAEMON=t
      +
     -+	trace_start fsmonitor--daemon--server
     -+	git fsmonitor--daemon start
     ++	test_expect_success "setup for builtin fsmonitor" '
     ++		trace_start fsmonitor--daemon--server &&
     ++		git fsmonitor--daemon start &&
      +
     -+	trace_start fsmonitor--daemon--client
     ++		trace_start fsmonitor--daemon--client &&
      +
     -+	git config core.fsmonitor true
     -+	git update-index --fsmonitor
     ++		git config core.fsmonitor true &&
     ++		git update-index --fsmonitor
     ++	'
      +
      +	test_fsmonitor_suite
      +
 26:  64a5b741670 = 26:  42631259e89 fsmonitor--daemon: periodically truncate list of modified files
 27:  5b06eb5d0e6 ! 27:  f256c3cbe8b fsmonitor--daemon: use a cookie file to sync with file system
     @@ builtin/fsmonitor--daemon.c: static int do_as_client__status(void)
       
      +enum fsmonitor_cookie_item_result {
      +	FCIR_ERROR = -1, /* could not create cookie file ? */
     -+	FCIR_INIT = 0,
     ++	FCIR_INIT,
      +	FCIR_SEEN,
      +	FCIR_ABORT,
      +};
      +
      +struct fsmonitor_cookie_item {
      +	struct hashmap_entry entry;
     -+	const char *name;
     ++	char *name;
      +	enum fsmonitor_cookie_item_result result;
      +};
      +
     @@ builtin/fsmonitor--daemon.c: static int do_as_client__status(void)
      +	 * that the listener thread has seen it.
      +	 */
      +	fd = open(cookie_pathname.buf, O_WRONLY | O_CREAT | O_EXCL, 0600);
     -+	if (fd >= 0) {
     -+		close(fd);
     -+		unlink(cookie_pathname.buf);
     -+
     -+		/*
     -+		 * Technically, this is an infinite wait (well, unless another
     -+		 * thread sends us an abort).  I'd like to change this to
     -+		 * use `pthread_cond_timedwait()` and return an error/timeout
     -+		 * and let the caller do the trivial response thing, but we
     -+		 * don't have that routine in our thread-utils.
     -+		 *
     -+		 * After extensive beta testing I'm not really worried about
     -+		 * this.  Also note that the above open() and unlink() calls
     -+		 * will cause at least two FS events on that path, so the odds
     -+		 * of getting stuck are pretty slim.
     -+		 */
     -+		while (cookie->result == FCIR_INIT)
     -+			pthread_cond_wait(&state->cookies_cond,
     -+					  &state->main_lock);
     -+	} else {
     ++	if (fd < 0) {
      +		error_errno(_("could not create fsmonitor cookie '%s'"),
      +			    cookie->name);
      +
      +		cookie->result = FCIR_ERROR;
     ++		goto done;
      +	}
      +
     ++	/*
     ++	 * Technically, close() and unlink() can fail, but we don't
     ++	 * care here.  We only created the file to trigger a watch
     ++	 * event from the FS to know that when we're up to date.
     ++	 */
     ++	close(fd);
     ++	unlink(cookie_pathname.buf);
     ++
     ++	/*
     ++	 * Technically, this is an infinite wait (well, unless another
     ++	 * thread sends us an abort).  I'd like to change this to
     ++	 * use `pthread_cond_timedwait()` and return an error/timeout
     ++	 * and let the caller do the trivial response thing, but we
     ++	 * don't have that routine in our thread-utils.
     ++	 *
     ++	 * After extensive beta testing I'm not really worried about
     ++	 * this.  Also note that the above open() and unlink() calls
     ++	 * will cause at least two FS events on that path, so the odds
     ++	 * of getting stuck are pretty slim.
     ++	 */
     ++	while (cookie->result == FCIR_INIT)
     ++		pthread_cond_wait(&state->cookies_cond,
     ++				  &state->main_lock);
     ++
     ++done:
      +	hashmap_remove(&state->cookies, &cookie->entry, NULL);
      +
      +	result = cookie->result;
      +
     -+	free((char*)cookie->name);
     ++	free(cookie->name);
      +	free(cookie);
      +	strbuf_release(&cookie_pathname);
      +
 28:  1fd5439de03 = 28:  08af8296f96 fsmonitor: force update index after large responses
 29:  6fc1430285f ! 29:  e6cf84dc8eb t7527: test status with untracked-cache and fsmonitor--daemon
     @@ t/t7527-builtin-fsmonitor.sh: test_expect_success 'cleanup worktrees' '
      +}
      +
      +matrix_try () {
     -+	uc=$1
     -+	fsm=$2
     -+	fn=$3
     ++	uc=$1 &&
     ++	fsm=$2 &&
     ++	fn=$3 &&
      +
      +	test_expect_success "Matrix[uc:$uc][fsm:$fsm] $fn" '
      +		matrix_clean_up_repo &&
 30:  b915b95cc2f <  -:  ----------- update-index: convert fsmonitor warnings to advise

-- 
gitgitgadget

^ permalink raw reply	[relevance 1%]

* Re: [PATCH 3/7] commit-graph: start parsing generation v2 (again)
  2022-03-01 14:06  0%               ` Derrick Stolee
@ 2022-03-01 14:53  0%                 ` Patrick Steinhardt
  0 siblings, 0 replies; 162+ results
From: Patrick Steinhardt @ 2022-03-01 14:53 UTC (permalink / raw)
  To: Derrick Stolee
  Cc: Derrick Stolee via GitGitGadget, git, me, gitster,
	abhishekkumar8222

[-- Attachment #1: Type: text/plain, Size: 8014 bytes --]

On Tue, Mar 01, 2022 at 09:06:44AM -0500, Derrick Stolee wrote:
> On 3/1/2022 5:35 AM, Patrick Steinhardt wrote:
> > On Tue, Mar 01, 2022 at 10:46:14AM +0100, Patrick Steinhardt wrote:
> >> On Mon, Feb 28, 2022 at 01:44:01PM -0500, Derrick Stolee wrote:
> >>> On 2/28/2022 11:59 AM, Patrick Steinhardt wrote:
> >>>> On Mon, Feb 28, 2022 at 11:23:38AM -0500, Derrick Stolee wrote:
> >>>>> On 2/28/2022 10:18 AM, Patrick Steinhardt wrote:
> >>>>>> I haven't yet found the time to dig deeper into why this is happening.
> >>>>>> While the repository is publicly accessible at [1], unfortunately the
> >>>>>> bug seems to be triggered by a commit that's only kept alive by an
> >>>>>> internal reference.
> >>>>>>
> >>>>>> Patrick
> >>>>>>
> >>>>>> [1]: https://gitlab.com/gitlab-com/www-gitlab-com.git
> >>>>>
> >>>>> Thanks for including this information. Just to be clear: did you
> >>>>> include patch 4 in your tests, or not? Patch 4 includes a fix
> >>>>> related to overflow values, so it would be helpful to know if you
> >>>>> found a _different_ bug or if it is the same one.
> >>>>>
> >>>>> Thanks,
> >>>>> -Stolee
> >>>>
> >>>> I initially only applied the first three patches, but after having hit
> >>>> the fatal error I also applied the rest of this series to have a look at
> >>>> whether it is indeed fixed already by one of your later patches. The
> >>>> error remains the same though.
> >>>
> >>> Thanks for this extra context. Is this a commit-graph that you wrote
> >>> with the first three patches and then you get an error when reading it?
> >>>
> >>> Do you get the same error when deleting that file and rewriting it with
> >>> all patches included?
> >>>
> >>> Thanks,
> >>> -Stolee
> >>
> >> Yes, I do. I've applied all four patches from v2 on top of 715d08a9e5
> >> (The eighth batch, 2022-02-25) and still get the same results:
> >>
> >>     $ find objects/info/commit-graphs/
> >>     objects/info/commit-graphs/
> >>     objects/info/commit-graphs/graph-607e641165f3e83a82d5b14af4e611bf2a688f35.graph
> >>     objects/info/commit-graphs/commit-graph-chain
> >>     objects/info/commit-graphs/graph-5f357c7573c0075d42d82b28e660bc3eac01bfe8.graph
> >>     objects/info/commit-graphs/graph-e0c12ead1b61c7c30720ae372e8a9f98d95dfb2d.graph
> >>     objects/info/commit-graphs/graph-c96723b133c2d81106a01ecd7a8773bb2ef6c2e1.graph
> >>
> >>      $ git commit-graph verify
> >>     fatal: commit-graph requires overflow generation data but has none
> >>
> >>      $ git commit-graph write
> >>     Finding commits for commit graph among packed objects: 100% (10235119/10235119), done.
> >>     Expanding reachable commits in commit graph: 2197197, done.
> >>     Finding extra edges in commit graph: 100% (2197197/2197197), done.
> >>     fatal: commit-graph requires overflow generation data but has none
> >>
> >>      $ rm -rf objects/info/commit-graphs/
> >>
> >>      $ git commit-graph write
> >>     Finding commits for commit graph among packed objects: 100% (10235119/10235119), done.
> >>     Expanding reachable commits in commit graph: 2197197, done.
> >>     Finding extra edges in commit graph: 100% (2197197/2197197), done.
> >>     fatal: commit-graph requires overflow generation data but has none)
> >>
> >> So even generating them completely anew doesn't seem to generate the
> >> overflow generation data.
> >>
> >> Patrick
> > 
> > I stand corrected. I forgot that the repository at hand was connected to
> > another one via `objects/info/alternates`. If I prune commit-graphs from
> > that alternate, too, then it works alright with your patches.
> 
> OK, thanks. That clarifies the situation.
> 
> I ordered the patches such that the fix in patch 4 could be immediately
> testable, which is not the case without patch 3. However, it does leave
> this temporary state where information can be incorrect if only a subset
> of the series is applied.
> 
> > This makes me wonder how such a bugfix should be handled though. As this
> > series is right now, users will be faced with repository corruption as
> > soon as they upgrade their Git version to one that contains this patch
> > series. This corruption needs manual action: they have to go into the
> > repository, delete the commit-graphs and then optionally create new
> > ones.
> > 
> > This is not a good user experience, and it's worse on the server-side
> > where we now have a timeframe where all commit-graphs are potentially
> > corrupt. This effectively leads to us being unable to serve those repos
> > at all until we have rewritten the commit-graphs because all commands
> > which make use of the commit-graph will now die:
> > 
> >     $ git log
> >     fatal: commit-graph requires overflow generation data but has none
> > 
> > So the question is whether this is a change that needs to be rolled out
> > over multiple releases. First we'd get in the bug fix such that we write
> > correct commit-graphs, and after this fix has been released we can also
> > release the fix that starts to actually parse the generation. This
> > ensures there's a grace period during which we can hopefully correct the
> > data on-disk such that users are not faced with failures.
> 
> You are right that we need to be careful here, but I also think that
> previous versions of Git always wrote the correct data. Here is my
> thought process:
> 
> 1. To get this bug, we need to have parsed the corrected commit date
>    from an existing commit-graph in order to under-count the number
>    of overflow values.
> 
> 2. Before this series, Git versions were not parsing the corrected
>    commit date, so they recompute the corrected commit date every
>    time the commit-graph is written, getting the proper count of
>    overflow values.
> 
> For these reasons, data written by previous versions of Git are
> correct and can be trusted without a staged release.
> 
> Does this make sense? Or, do you experience a different result when
> you build commit-graphs with a released Git version and then when
> writing on top with all patches applied?

Just to verify my understanding: you claim that the bug I was hitting
shouldn't be encountered in the wild when the release , but
only if one were to write a commit-graph with the intermediate stafe
until patch 3/4 of your patch series?

Hum. I have re-verified, and this indeed seems to play out. So I must've
accidentally ran all my testing with the state generated without the
final patch which fixes the corruption. I do see lots of the following
warnings, but overall I can verify and write the commit-graph just fine:

    commit-graph generation for commit c80a42de8803e2d77818d0c82f88e748d7f9425f is 1623362063 < 1623362139

Thanks for your patience, and sorry for the noise :)

> > The better alternative would probably be to just gracefully handle
> > commit-graphs which are corrupted in such a way. Can we maybe just
> > continue to not parse generations in case we find that the commit-graph
> > doesn't have overflow generation data?
> >
> > This is more of a general issue though: commit-graphs are an auxiliary
> > cache that is not required for proper operation at all. If we fail to
> > parse it, then Git shouldn't die but instead fail gracefully just ignore
> > it. Furthermore, if we notice that graphs are corrupt when we try to
> > write new ones, we may just delete the corrupt versions automatically
> > and generate completely new ones.
> 
> You are right that we can be better about failures here and report
> and error instead of a die(). Especially in this case, we could just
> revert to topological levels instead of throwing out the commit-graph
> entirely.
> 
> This seems like something for another series, so we can be sure to
> audit all cases of fatal errors when parsing the commit-graph so we
> catch all of them and do the "best" thing in each case.

I agree.

Patrick

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[relevance 0%]

* Re: [PATCH 3/7] commit-graph: start parsing generation v2 (again)
  2022-03-01 10:35  0%             ` Patrick Steinhardt
@ 2022-03-01 14:06  0%               ` Derrick Stolee
  2022-03-01 14:53  0%                 ` Patrick Steinhardt
  0 siblings, 1 reply; 162+ results
From: Derrick Stolee @ 2022-03-01 14:06 UTC (permalink / raw)
  To: Patrick Steinhardt
  Cc: Derrick Stolee via GitGitGadget, git, me, gitster,
	abhishekkumar8222

On 3/1/2022 5:35 AM, Patrick Steinhardt wrote:
> On Tue, Mar 01, 2022 at 10:46:14AM +0100, Patrick Steinhardt wrote:
>> On Mon, Feb 28, 2022 at 01:44:01PM -0500, Derrick Stolee wrote:
>>> On 2/28/2022 11:59 AM, Patrick Steinhardt wrote:
>>>> On Mon, Feb 28, 2022 at 11:23:38AM -0500, Derrick Stolee wrote:
>>>>> On 2/28/2022 10:18 AM, Patrick Steinhardt wrote:
>>>>>> I haven't yet found the time to dig deeper into why this is happening.
>>>>>> While the repository is publicly accessible at [1], unfortunately the
>>>>>> bug seems to be triggered by a commit that's only kept alive by an
>>>>>> internal reference.
>>>>>>
>>>>>> Patrick
>>>>>>
>>>>>> [1]: https://gitlab.com/gitlab-com/www-gitlab-com.git
>>>>>
>>>>> Thanks for including this information. Just to be clear: did you
>>>>> include patch 4 in your tests, or not? Patch 4 includes a fix
>>>>> related to overflow values, so it would be helpful to know if you
>>>>> found a _different_ bug or if it is the same one.
>>>>>
>>>>> Thanks,
>>>>> -Stolee
>>>>
>>>> I initially only applied the first three patches, but after having hit
>>>> the fatal error I also applied the rest of this series to have a look at
>>>> whether it is indeed fixed already by one of your later patches. The
>>>> error remains the same though.
>>>
>>> Thanks for this extra context. Is this a commit-graph that you wrote
>>> with the first three patches and then you get an error when reading it?
>>>
>>> Do you get the same error when deleting that file and rewriting it with
>>> all patches included?
>>>
>>> Thanks,
>>> -Stolee
>>
>> Yes, I do. I've applied all four patches from v2 on top of 715d08a9e5
>> (The eighth batch, 2022-02-25) and still get the same results:
>>
>>     $ find objects/info/commit-graphs/
>>     objects/info/commit-graphs/
>>     objects/info/commit-graphs/graph-607e641165f3e83a82d5b14af4e611bf2a688f35.graph
>>     objects/info/commit-graphs/commit-graph-chain
>>     objects/info/commit-graphs/graph-5f357c7573c0075d42d82b28e660bc3eac01bfe8.graph
>>     objects/info/commit-graphs/graph-e0c12ead1b61c7c30720ae372e8a9f98d95dfb2d.graph
>>     objects/info/commit-graphs/graph-c96723b133c2d81106a01ecd7a8773bb2ef6c2e1.graph
>>
>>      $ git commit-graph verify
>>     fatal: commit-graph requires overflow generation data but has none
>>
>>      $ git commit-graph write
>>     Finding commits for commit graph among packed objects: 100% (10235119/10235119), done.
>>     Expanding reachable commits in commit graph: 2197197, done.
>>     Finding extra edges in commit graph: 100% (2197197/2197197), done.
>>     fatal: commit-graph requires overflow generation data but has none
>>
>>      $ rm -rf objects/info/commit-graphs/
>>
>>      $ git commit-graph write
>>     Finding commits for commit graph among packed objects: 100% (10235119/10235119), done.
>>     Expanding reachable commits in commit graph: 2197197, done.
>>     Finding extra edges in commit graph: 100% (2197197/2197197), done.
>>     fatal: commit-graph requires overflow generation data but has none)
>>
>> So even generating them completely anew doesn't seem to generate the
>> overflow generation data.
>>
>> Patrick
> 
> I stand corrected. I forgot that the repository at hand was connected to
> another one via `objects/info/alternates`. If I prune commit-graphs from
> that alternate, too, then it works alright with your patches.

OK, thanks. That clarifies the situation.

I ordered the patches such that the fix in patch 4 could be immediately
testable, which is not the case without patch 3. However, it does leave
this temporary state where information can be incorrect if only a subset
of the series is applied.

> This makes me wonder how such a bugfix should be handled though. As this
> series is right now, users will be faced with repository corruption as
> soon as they upgrade their Git version to one that contains this patch
> series. This corruption needs manual action: they have to go into the
> repository, delete the commit-graphs and then optionally create new
> ones.
> 
> This is not a good user experience, and it's worse on the server-side
> where we now have a timeframe where all commit-graphs are potentially
> corrupt. This effectively leads to us being unable to serve those repos
> at all until we have rewritten the commit-graphs because all commands
> which make use of the commit-graph will now die:
> 
>     $ git log
>     fatal: commit-graph requires overflow generation data but has none
> 
> So the question is whether this is a change that needs to be rolled out
> over multiple releases. First we'd get in the bug fix such that we write
> correct commit-graphs, and after this fix has been released we can also
> release the fix that starts to actually parse the generation. This
> ensures there's a grace period during which we can hopefully correct the
> data on-disk such that users are not faced with failures.

You are right that we need to be careful here, but I also think that
previous versions of Git always wrote the correct data. Here is my
thought process:

1. To get this bug, we need to have parsed the corrected commit date
   from an existing commit-graph in order to under-count the number
   of overflow values.

2. Before this series, Git versions were not parsing the corrected
   commit date, so they recompute the corrected commit date every
   time the commit-graph is written, getting the proper count of
   overflow values.

For these reasons, data written by previous versions of Git are
correct and can be trusted without a staged release.

Does this make sense? Or, do you experience a different result when
you build commit-graphs with a released Git version and then when
writing on top with all patches applied?

> The better alternative would probably be to just gracefully handle
> commit-graphs which are corrupted in such a way. Can we maybe just
> continue to not parse generations in case we find that the commit-graph
> doesn't have overflow generation data?
>
> This is more of a general issue though: commit-graphs are an auxiliary
> cache that is not required for proper operation at all. If we fail to
> parse it, then Git shouldn't die but instead fail gracefully just ignore
> it. Furthermore, if we notice that graphs are corrupt when we try to
> write new ones, we may just delete the corrupt versions automatically
> and generate completely new ones.

You are right that we can be better about failures here and report
and error instead of a die(). Especially in this case, we could just
revert to topological levels instead of throwing out the commit-graph
entirely.

This seems like something for another series, so we can be sure to
audit all cases of fatal errors when parsing the commit-graph so we
catch all of them and do the "best" thing in each case.

Thanks,
-Stolee

^ permalink raw reply	[relevance 0%]

* Re: [PATCH 3/7] commit-graph: start parsing generation v2 (again)
  2022-03-01  9:46  6%           ` Patrick Steinhardt
@ 2022-03-01 10:35  0%             ` Patrick Steinhardt
  2022-03-01 14:06  0%               ` Derrick Stolee
  0 siblings, 1 reply; 162+ results
From: Patrick Steinhardt @ 2022-03-01 10:35 UTC (permalink / raw)
  To: Derrick Stolee
  Cc: Derrick Stolee via GitGitGadget, git, me, gitster,
	abhishekkumar8222

[-- Attachment #1: Type: text/plain, Size: 5268 bytes --]

On Tue, Mar 01, 2022 at 10:46:14AM +0100, Patrick Steinhardt wrote:
> On Mon, Feb 28, 2022 at 01:44:01PM -0500, Derrick Stolee wrote:
> > On 2/28/2022 11:59 AM, Patrick Steinhardt wrote:
> > > On Mon, Feb 28, 2022 at 11:23:38AM -0500, Derrick Stolee wrote:
> > >> On 2/28/2022 10:18 AM, Patrick Steinhardt wrote:
> > >>> I haven't yet found the time to dig deeper into why this is happening.
> > >>> While the repository is publicly accessible at [1], unfortunately the
> > >>> bug seems to be triggered by a commit that's only kept alive by an
> > >>> internal reference.
> > >>>
> > >>> Patrick
> > >>>
> > >>> [1]: https://gitlab.com/gitlab-com/www-gitlab-com.git
> > >>
> > >> Thanks for including this information. Just to be clear: did you
> > >> include patch 4 in your tests, or not? Patch 4 includes a fix
> > >> related to overflow values, so it would be helpful to know if you
> > >> found a _different_ bug or if it is the same one.
> > >>
> > >> Thanks,
> > >> -Stolee
> > > 
> > > I initially only applied the first three patches, but after having hit
> > > the fatal error I also applied the rest of this series to have a look at
> > > whether it is indeed fixed already by one of your later patches. The
> > > error remains the same though.
> > 
> > Thanks for this extra context. Is this a commit-graph that you wrote
> > with the first three patches and then you get an error when reading it?
> > 
> > Do you get the same error when deleting that file and rewriting it with
> > all patches included?
> > 
> > Thanks,
> > -Stolee
> 
> Yes, I do. I've applied all four patches from v2 on top of 715d08a9e5
> (The eighth batch, 2022-02-25) and still get the same results:
> 
>     $ find objects/info/commit-graphs/
>     objects/info/commit-graphs/
>     objects/info/commit-graphs/graph-607e641165f3e83a82d5b14af4e611bf2a688f35.graph
>     objects/info/commit-graphs/commit-graph-chain
>     objects/info/commit-graphs/graph-5f357c7573c0075d42d82b28e660bc3eac01bfe8.graph
>     objects/info/commit-graphs/graph-e0c12ead1b61c7c30720ae372e8a9f98d95dfb2d.graph
>     objects/info/commit-graphs/graph-c96723b133c2d81106a01ecd7a8773bb2ef6c2e1.graph
> 
>      $ git commit-graph verify
>     fatal: commit-graph requires overflow generation data but has none
> 
>      $ git commit-graph write
>     Finding commits for commit graph among packed objects: 100% (10235119/10235119), done.
>     Expanding reachable commits in commit graph: 2197197, done.
>     Finding extra edges in commit graph: 100% (2197197/2197197), done.
>     fatal: commit-graph requires overflow generation data but has none
> 
>      $ rm -rf objects/info/commit-graphs/
> 
>      $ git commit-graph write
>     Finding commits for commit graph among packed objects: 100% (10235119/10235119), done.
>     Expanding reachable commits in commit graph: 2197197, done.
>     Finding extra edges in commit graph: 100% (2197197/2197197), done.
>     fatal: commit-graph requires overflow generation data but has none)
> 
> So even generating them completely anew doesn't seem to generate the
> overflow generation data.
> 
> Patrick

I stand corrected. I forgot that the repository at hand was connected to
another one via `objects/info/alternates`. If I prune commit-graphs from
that alternate, too, then it works alright with your patches.

This makes me wonder how such a bugfix should be handled though. As this
series is right now, users will be faced with repository corruption as
soon as they upgrade their Git version to one that contains this patch
series. This corruption needs manual action: they have to go into the
repository, delete the commit-graphs and then optionally create new
ones.

This is not a good user experience, and it's worse on the server-side
where we now have a timeframe where all commit-graphs are potentially
corrupt. This effectively leads to us being unable to serve those repos
at all until we have rewritten the commit-graphs because all commands
which make use of the commit-graph will now die:

    $ git log
    fatal: commit-graph requires overflow generation data but has none

So the question is whether this is a change that needs to be rolled out
over multiple releases. First we'd get in the bug fix such that we write
correct commit-graphs, and after this fix has been released we can also
release the fix that starts to actually parse the generation. This
ensures there's a grace period during which we can hopefully correct the
data on-disk such that users are not faced with failures.

The better alternative would probably be to just gracefully handle
commit-graphs which are corrupted in such a way. Can we maybe just
continue to not parse generations in case we find that the commit-graph
doesn't have overflow generation data?

This is more of a general issue though: commit-graphs are an auxiliary
cache that is not required for proper operation at all. If we fail to
parse it, then Git shouldn't die but instead fail gracefully just ignore
it. Furthermore, if we notice that graphs are corrupt when we try to
write new ones, we may just delete the corrupt versions automatically
and generate completely new ones.

Patrick

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[relevance 0%]

* Re: [PATCH 3/7] commit-graph: start parsing generation v2 (again)
  @ 2022-03-01  9:46  6%           ` Patrick Steinhardt
  2022-03-01 10:35  0%             ` Patrick Steinhardt
  0 siblings, 1 reply; 162+ results
From: Patrick Steinhardt @ 2022-03-01  9:46 UTC (permalink / raw)
  To: Derrick Stolee
  Cc: Derrick Stolee via GitGitGadget, git, me, gitster,
	abhishekkumar8222

[-- Attachment #1: Type: text/plain, Size: 2978 bytes --]

On Mon, Feb 28, 2022 at 01:44:01PM -0500, Derrick Stolee wrote:
> On 2/28/2022 11:59 AM, Patrick Steinhardt wrote:
> > On Mon, Feb 28, 2022 at 11:23:38AM -0500, Derrick Stolee wrote:
> >> On 2/28/2022 10:18 AM, Patrick Steinhardt wrote:
> >>> I haven't yet found the time to dig deeper into why this is happening.
> >>> While the repository is publicly accessible at [1], unfortunately the
> >>> bug seems to be triggered by a commit that's only kept alive by an
> >>> internal reference.
> >>>
> >>> Patrick
> >>>
> >>> [1]: https://gitlab.com/gitlab-com/www-gitlab-com.git
> >>
> >> Thanks for including this information. Just to be clear: did you
> >> include patch 4 in your tests, or not? Patch 4 includes a fix
> >> related to overflow values, so it would be helpful to know if you
> >> found a _different_ bug or if it is the same one.
> >>
> >> Thanks,
> >> -Stolee
> > 
> > I initially only applied the first three patches, but after having hit
> > the fatal error I also applied the rest of this series to have a look at
> > whether it is indeed fixed already by one of your later patches. The
> > error remains the same though.
> 
> Thanks for this extra context. Is this a commit-graph that you wrote
> with the first three patches and then you get an error when reading it?
> 
> Do you get the same error when deleting that file and rewriting it with
> all patches included?
> 
> Thanks,
> -Stolee

Yes, I do. I've applied all four patches from v2 on top of 715d08a9e5
(The eighth batch, 2022-02-25) and still get the same results:

    $ find objects/info/commit-graphs/
    objects/info/commit-graphs/
    objects/info/commit-graphs/graph-607e641165f3e83a82d5b14af4e611bf2a688f35.graph
    objects/info/commit-graphs/commit-graph-chain
    objects/info/commit-graphs/graph-5f357c7573c0075d42d82b28e660bc3eac01bfe8.graph
    objects/info/commit-graphs/graph-e0c12ead1b61c7c30720ae372e8a9f98d95dfb2d.graph
    objects/info/commit-graphs/graph-c96723b133c2d81106a01ecd7a8773bb2ef6c2e1.graph

     $ git commit-graph verify
    fatal: commit-graph requires overflow generation data but has none

     $ git commit-graph write
    Finding commits for commit graph among packed objects: 100% (10235119/10235119), done.
    Expanding reachable commits in commit graph: 2197197, done.
    Finding extra edges in commit graph: 100% (2197197/2197197), done.
    fatal: commit-graph requires overflow generation data but has none

     $ rm -rf objects/info/commit-graphs/

     $ git commit-graph write
    Finding commits for commit graph among packed objects: 100% (10235119/10235119), done.
    Expanding reachable commits in commit graph: 2197197, done.
    Finding extra edges in commit graph: 100% (2197197/2197197), done.
    fatal: commit-graph requires overflow generation data but has none)

So even generating them completely anew doesn't seem to generate the
overflow generation data.

Patrick

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[relevance 6%]

* Re: [PATCH 06/13] submodule--helper: get remote names from any repository
  2022-03-01  2:46  6%   ` Junio C Hamano
@ 2022-03-01  4:26  0%     ` Glen Choo
  0 siblings, 0 replies; 162+ results
From: Glen Choo @ 2022-03-01  4:26 UTC (permalink / raw)
  To: Junio C Hamano
  Cc: git, Atharva Raykar, Emily Shaffer,
	Ævar Arnfjörð Bjarmason, Josh Steadmon,
	Christian Couder, Shourya Shukla

Junio C Hamano <gitster@pobox.com> writes:

> Glen Choo <chooglen@google.com> writes:
>
>> +	struct ref_store *store = get_main_ref_store(repo);
>> +	int ignore_errno;
>> +	const char *refname = refs_resolve_ref_unsafe(store, "HEAD", 0, NULL,
>> +						      NULL, &ignore_errno);
>
> Given that 00/13 says this series is based on 715d08a9 (The eighth
> batch, 2022-02-25), which includes 03bdcfcc (Merge branch
> 'ab/no-errno-from-resolve-ref-unsafe', 2022-02-11), I think the
> above two lines are result of incorrect rebasing or something.
>
> Have you compiled after you rebased?

It turns out that I didn't.. I got complacent after doing this merge a
few times.

> It seems that after applying the band-aid below, t7406 seems to fail
> for two of its tests, too, but if this were not even compiled, that
> is to be expected X-<.

This is an even sillier mistake.. patch 12 accidentally includes some
tests from es/superproject-aware-submodules (probably a bad merge
conflict resolution).

>
>
>
>  builtin/submodule--helper.c | 4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)
>
> diff --git c/builtin/submodule--helper.c w/builtin/submodule--helper.c
> index ea88f39fb4..21401ad99e 100644
> --- c/builtin/submodule--helper.c
> +++ w/builtin/submodule--helper.c
> @@ -36,9 +36,7 @@ static char *repo_get_default_remote(struct repository *repo)
>  	char *dest = NULL, *ret;
>  	struct strbuf sb = STRBUF_INIT;
>  	struct ref_store *store = get_main_ref_store(repo);
> -	int ignore_errno;
> -	const char *refname = refs_resolve_ref_unsafe(store, "HEAD", 0, NULL,
> -						      NULL, &ignore_errno);
> +	const char *refname = refs_resolve_ref_unsafe(store, "HEAD", 0, NULL, NULL);
>  
>  	if (!refname)
>  		die(_("No such ref: %s"), "HEAD");

^ permalink raw reply	[relevance 0%]

* Re: [PATCH 06/13] submodule--helper: get remote names from any repository
  @ 2022-03-01  2:46  6%   ` Junio C Hamano
  2022-03-01  4:26  0%     ` Glen Choo
  0 siblings, 1 reply; 162+ results
From: Junio C Hamano @ 2022-03-01  2:46 UTC (permalink / raw)
  To: Glen Choo
  Cc: git, Atharva Raykar, Emily Shaffer,
	Ævar Arnfjörð Bjarmason, Josh Steadmon,
	Christian Couder, Shourya Shukla

Glen Choo <chooglen@google.com> writes:

> +	struct ref_store *store = get_main_ref_store(repo);
> +	int ignore_errno;
> +	const char *refname = refs_resolve_ref_unsafe(store, "HEAD", 0, NULL,
> +						      NULL, &ignore_errno);

Given that 00/13 says this series is based on 715d08a9 (The eighth
batch, 2022-02-25), which includes 03bdcfcc (Merge branch
'ab/no-errno-from-resolve-ref-unsafe', 2022-02-11), I think the
above two lines are result of incorrect rebasing or something.

Have you compiled after you rebased?

It seems that after applying the band-aid below, t7406 seems to fail
for two of its tests, too, but if this were not even compiled, that
is to be expected X-<.




 builtin/submodule--helper.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git c/builtin/submodule--helper.c w/builtin/submodule--helper.c
index ea88f39fb4..21401ad99e 100644
--- c/builtin/submodule--helper.c
+++ w/builtin/submodule--helper.c
@@ -36,9 +36,7 @@ static char *repo_get_default_remote(struct repository *repo)
 	char *dest = NULL, *ret;
 	struct strbuf sb = STRBUF_INIT;
 	struct ref_store *store = get_main_ref_store(repo);
-	int ignore_errno;
-	const char *refname = refs_resolve_ref_unsafe(store, "HEAD", 0, NULL,
-						      NULL, &ignore_errno);
+	const char *refname = refs_resolve_ref_unsafe(store, "HEAD", 0, NULL, NULL);
 
 	if (!refname)
 		die(_("No such ref: %s"), "HEAD");

^ permalink raw reply related	[relevance 6%]

* [ANNOUNCE] Git v2.34.0-rc1
@ 2021-11-03 23:17  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2021-11-03 23:17 UTC (permalink / raw)
  To: git; +Cc: git-packagers

A release candidate Git v2.34.0-rc1 is now available for testing at
the usual places.  It is comprised of 778 non-merge commits since
v2.33.0, contributed by 90 people, 27 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.34.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.33.0 are as follows.
Welcome to the Git development community!

  Alan Blotz, Azeem Bande-Ali, Dr. Matthias St. Pierre, Eli
  Schwartz, git.mexon@spamgourmet.com, Glen Choo, Hamza Mahfooz,
  Joel Klinghed, Johannes Altmanninger, Jonas Kittner, Kim
  Altintop, Kyle Zhao, Mahi Kolla, Marvin Häuser, Mickey Endito,
  Rob Browning, Robert Estelle, Robert Leftwich, Tal Kelrich,
  Tassilo Horn, Thomas De Zeeuw, USAMI Kenta, Victor Gambier,
  Victoria Dye, Wesley Schwengle, Xingman Chen, and Zoker.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alban Gruin, Alex Henrie, Andrzej
  Hunt, Atharva Raykar, Bagas Sanjaya, Ben Boeckel, brian
  m. carlson, Carlo Arenas, Carlo Marcelo Arenas Belón, Christian
  Couder, David Aguilar, David Turner, Derrick Stolee, Đoàn
  Trần Công Danh, Elijah Newren, Emily Shaffer, Emir Sarı,
  Eric Sunshine, Eric Wong, Fabian Stelzer, Felipe Contreras,
  Greg Hurrell, Han-Wen Nienhuys, Hariom Verma, Jacob Keller,
  Jacob Vosmaer, Jean-Noël Avila, Jeff Hostetler, Jeff King,
  Jiang Xin, Johannes Schindelin, Johannes Sixt, Jonathan Nieder,
  Jonathan Tan, Josh Steadmon, Junio C Hamano, Kaartic Sivaraam,
  Lénaïc Huard, Martin Ågren, Matheus Tavares, Matheus Tavares
  Bernardino, Matthias Aßhauer, Mike Hommey, Miriam Rubio, Orgad
  Shaneh, Patrick Steinhardt, Philip Oakley, Philippe Blain,
  Phillip Wood, Pranit Bauva, Randall S. Becker, René Scharfe,
  Sergey Organov, Shourya Shukla, SZEDER Gábor, Takashi Iwai,
  Tanushree Tumane, Taylor Blau, Teng Long, Todd Zullinger,
  Ulrich Windl, and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git 2.34 Release Notes (draft)
==============================

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

Backward compatibility notes

 * The "--preserve-merges" option of "git rebase" has been removed.


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.

 * "git rebase" by default skips changes that are equivalent to
   commits that are already in the history the branch is rebased onto;
   give messages when this happens to let the users be aware of
   skipped commits, and also teach them how to tell "rebase" to keep
   duplicated changes.

 * The advice message that "git cherry-pick" gives when it asks
   conflicted replay of a commit to be resolved by the end user has
   been updated.

 * After "git clone --recurse-submodules", all submodules are cloned
   but they are not by default recursed into by other commands.  With
   submodule.stickyRecursiveClone configuration set, submodule.recurse
   configuration is set to true in a repository created by "clone"
   with "--recurse-submodules" option.

 * The logic for auto-correction of misspelt subcommands learned to go
   interactive when the help.autocorrect configuration variable is set
   to 'prompt'.

 * "git maintenance" scheduler learned to use systemd timers as a
   possible backend.

 * "git diff --submodule=diff" showed failure from run_command() when
   trying to run diff inside a submodule, when the user manually
   removes the submodule directory.

 * "git bundle unbundle" learned to show progress display.

 * In cone mode, the sparse-index code path learned to remove ignored
   files (like build artifacts) outside the sparse cone, allowing the
   entire directory outside the sparse cone to be removed, which is
   especially useful when the sparse patterns change.

 * Taking advantage of the CGI interface, http-backend has been
   updated to enable protocol v2 automatically when the other side
   asks for it.

 * The credential-cache helper has been adjusted to Windows.

 * The error in "git help no-such-git-command" is handled better.

 * The unicode character width table (used for output alignment) has
   been updated.

 * The ref iteration code used to optionally allow dangling refs to be
   shown, which has been tightened up.

 * "git add", "git mv", and "git rm" have been adjusted to avoid
   updating paths outside of the sparse-checkout definition unless
   the user specifies a "--sparse" option.

 * "git repack" has been taught to generate multi-pack reachability
   bitmaps.

 * "git fsck" has been taught to report mismatch between expected and
   actual types of an object better.

 * Use ssh public crypto for object and push-cert signing.

 * "git log --grep=string --author=name" learns to highlight hits just
   like "git grep string" does.



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.

 * "git fetch --quiet" optimization to avoid useless computation of
   info that will never be displayed.

 * Callers from older advice_config[] based API has been updated to
   use the newer advice_if_enabled() and advice_enabled() API.

 * Teach "test_pause" and "debug" helpers to allow using the HOME and
   TERM environment variables the user usually uses.

 * "make INSTALL_STRIP=-s install" allows the installation step to use
   "install -s" to strip the binaries as they get installed.

 * Code that handles large number of refs in the "git fetch" code
   path has been optimized.

 * The reachability bitmap file used to be generated only for a single
   pack, but now we've learned to generate bitmaps for history that
   span across multiple packfiles.

 * The code to make "git grep" recurse into submodules has been
   updated to migrate away from the "add submodule's object store as
   an alternate object store" mechanism (which is suboptimal).

 * The tracing of process ancestry information has been enhanced.

 * Reduce number of write(2) system calls while sending the
   ref advertisement.

 * Update the build procedure to use the "-pedantic" build when
   DEVELOPER makefile macro is in effect.

 * Large part of "git submodule add" gets rewritten in C.

 * The run-command API has been updated so that the callers can easily
   ask the file descriptors open for packfiles to be closed immediately
   before spawning commands that may trigger auto-gc.

 * An oddball OPTION_ARGUMENT feature has been removed from the
   parse-options API.

 * The mergesort implementation used to sort linked list has been
   optimized.

 * Remove external declaration of functions that no longer exist.

 * "git multi-pack-index write --bitmap" learns to propagate the
   hashcache from original bitmap to resulting bitmap.

 * CI learns to run the leak sanitizer builds.

 * "git grep --recurse-submodules" takes trees and blobs from the
   submodule repository, but the textconv settings when processing a
   blob from the submodule is not taken from the submodule repository.
   A test is added to demonstrate the issue, without fixing it.

 * Teach "git help -c" into helping the command line completion of
   configuration variables.

 * When "git cmd -h" shows more than one line of usage text (e.g.
   the cmd subcommand may take sub-sub-command), parse-options API
   learned to align these lines, even across i18n/l10n.

 * Prevent "make sparse" from running for the source files that
   haven't been modified.

 * The codepath to write a new version of .midx multi-pack index files
   has learned to release the mmaped memory holding the current
   version of .midx before removing them from the disk, as some
   platforms do not allow removal of a file that still has mapping.

 * A new feature has been added to abort early in the test framework.


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

 * Input validation of "git pack-objects --stdin-packs" has been
   corrected.

 * Bugfix for common ancestor negotiation recently introduced in "git
   push" code path.

 * "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.

 * "git apply" miscounted the bytes and failed to read to the end of
   binary hunks.

 * "git range-diff" code clean-up.

 * "git commit --fixup" now works with "--edit" again, after it was
   broken in v2.32.

 * Use upload-artifacts v1 (instead of v2) for 32-bit linux, as the
   new version has a blocker bug for that architecture.

 * 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.

 * Various bugs in "git rebase -r" have been fixed.

 * 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.

 * "git diff --relative" segfaulted and/or produced incorrect result
   when there are unmerged paths.

 * The delayed checkout code path in "git checkout" etc. were chatty
   even when --quiet and/or --no-progress options were given.

 * "git branch -D <branch>" used to refuse to remove a broken branch
   ref that points at a missing commit, which has been corrected.

 * Build update for Apple clang.

 * The parser for the "--nl" option of "git column" has been
   corrected.

 * "git upload-pack" which runs on the other side of "git fetch"
   forgot to take the ref namespaces into account when handling
   want-ref requests.

 * The sparse-index support can corrupt the index structure by storing
   a stale and/or uninitialized data, which has been corrected.

 * Buggy tests could damage repositories outside the throw-away test
   area we created.  We now by default export GIT_CEILING_DIRECTORIES
   to limit the damage from such a stray test.

 * Even when running "git send-email" without its own threaded
   discussion support, a threading related header in one message is
   carried over to the subsequent message to result in an unwanted
   threading, which has been corrected.

 * The output from "git fast-export", when its anonymization feature
   is in use, showed an annotated tag incorrectly.

 * Doc update plus improved error reporting.

 * Recent "diff -m" changes broke "gitk", which has been corrected.

 * Regression fix.

 * The "git apply -3" code path learned not to bother the lower level
   merge machinery when the three-way merge can be trivially resolved
   without the content level merge.  This fixes a regression caused by
   recent "-3way first and fall back to direct application" change.

 * The code that optionally creates the *.rev reverse index file has
   been optimized to avoid needless computation when it is not writing
   the file out.

 * "git range-diff -I... <range> <range>" segfaulted, which has been
   corrected.

 * The order in which various files that make up a single (conceptual)
   packfile has been reevaluated and straightened up.  This matters in
   correctness, as an incomplete set of files must not be shown to a
   running Git.

 * The "mode" word is useless in a call to open(2) that does not
   create a new file.  Such a call in the files backend of the ref
   subsystem has been cleaned up.

 * "git update-ref --stdin" failed to flush its output as needed,
   which potentially led the conversation to a deadlock.

 * When "git am --abort" fails to abort correctly, it still exited
   with exit status of 0, which has been corrected.

 * Correct nr and alloc members of strvec struct to be of type size_t.

 * "git stash", where the tentative change involves changing a
   directory to a file (or vice versa), was confused, which has been
   corrected.

 * "git clone" from a repository whose HEAD is unborn into a bare
   repository didn't follow the branch name the other side used, which
   is corrected.

 * "git cvsserver" had a long-standing bug in its authentication code,
   which has finally been corrected (it is unclear and is a separate
   question if anybody is seriously using it, though).

 * "git difftool --dir-diff" mishandled symbolic links.

 * Sensitive data in the HTTP trace were supposed to be redacted, but
   we failed to do so in HTTP/2 requests.

 * "make clean" has been updated to remove leftover .depend/
   directories, even when it is not told to use them to compute header
   dependencies.

 * Protocol v0 clients can get stuck parsing a malformed feature line.

 * A few kinds of changes "git status" can show were not documented.
   (merge d2a534c515 ja/doc-status-types-and-copies later to maint).

 * The mergesort implementation used to sort linked list has been
   optimized.
   (merge c90cfc225b rs/mergesort later to maint).

 * An editor session launched during a Git operation (e.g. during 'git
   commit') can leave the terminal in a funny state.  The code path
   has updated to save the terminal state before, and restore it
   after, it spawns an editor.
   (merge 3d411afabc cm/save-restore-terminal later to maint).

 * "git cat-file --batch" with the "--batch-all-objects" option is
   supposed to iterate over all the objects found in a repository, but
   it used to translate these object names using the replace mechanism,
   which defeats the point of enumerating all objects in the repository.
   This has been corrected.
   (merge bf972896d7 jk/cat-file-batch-all-wo-replace later to maint).

 * Recent sparse-index work broke safety against attempts to add paths
   with trailing slashes to the index, which has been corrected.
   (merge c8ad9d04c6 rs/make-verify-path-really-verify-again later to maint).

 * The "--color-lines" and "--color-by-age" options of "git blame"
   have been missing, which are now documented.
   (merge 8c32856133 bs/doc-blame-color-lines later to maint).

 * The PATH used in CI job may be too wide and let incompatible dlls
   to be grabbed, which can cause the build&test to fail.  Tighten it.
   (merge 7491ef6198 js/windows-ci-path-fix later to maint).

 * Avoid performance measurements from getting ruined by gc and other
   housekeeping pauses interfering in the middle.
   (merge be79131a53 rs/disable-gc-during-perf-tests later to maint).

 * Stop "git add --dry-run" from creating new blob and tree objects.
   (merge e578d0311d rs/add-dry-run-without-objects later to maint).

 * "git commit" gave duplicated error message when the object store
   was unwritable, which has been corrected.
   (merge 4ef91a2d79 ab/fix-commit-error-message-upon-unwritable-object-store later to maint).

 * Recent sparse-index addition, namely any use of index_name_pos(),
   can expand sparse index entries and breaks any code that walks
   cache-tree or existing index entries.  One such instance of such a
   breakage has been corrected.

 * The xxdiff difftool backend can exit with status 128, which the
   difftool-helper that launches the backend takes as a significant
   failure, when it is not significant at all.  Work it around.
   (merge 571f4348dd da/mergetools-special-case-xxdiff-exit-128 later to maint).

 * Improve test framework around unwritable directories.
   (merge 5d22e18965 ab/test-cleanly-recreate-trash-directory later to maint).

 * "git push" client talking to an HTTP server did not diagnose the
   lack of the final status report from the other side correctly,
   which has been corrected.
   (merge c5c3486f38 jk/http-push-status-fix later to maint).

 * Update "git archive" documentation and give explicit mention on the
   compression level for both zip and tar.gz format.
   (merge c4b208c309 bs/archive-doc-compression-level later to maint).

 * Drop "git sparse-index" from the list of common commands.
   (merge 6a9a50a8af sg/sparse-index-not-that-common-a-command later to maint).

 * "git branch -c/-m new old" was not described to copy config, which
   has been corrected.
   (merge 8252ec300e jc/branch-copy-doc later to maint).

 * Squelch over-eager warning message added during this cycle.
   (merge 9e8fe7b1c7 jk/log-warn-on-bogus-encoding later to maint).

 * Fix long-standing shell syntax error in the completion script.
   (merge 46b0585286 re/completion-fix-test-equality later to maint).

 * Teach "git commit-graph" command not to allow using replace objects
   at all, as we do not use the commit-graph at runtime when we see
   object replacement.
   (merge 095d112f8c ab/ignore-replace-while-working-on-commit-graph later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge f188160be9 ab/bundle-remove-verbose-option later to maint).
   (merge 8c6b4332b4 rs/close-pack-leakfix later to maint).
   (merge 51b04c05b7 bs/difftool-msg-tweak later to maint).
   (merge dd20e4a6db ab/make-compdb-fix later to maint).
   (merge 6ffb990dc4 os/status-docfix later to maint).
   (merge 100c2da2d3 rs/p3400-lose-tac later to maint).
   (merge 76f3b69896 tb/aggregate-ignore-leading-whitespaces later to maint).
   (merge 6e4fd8bfcd tz/doc-link-to-bundle-format-fix later to maint).
   (merge f6c013dfa1 jc/doc-commit-header-continuation-line later to maint).
   (merge ec9a37d69b ab/pkt-line-cleanup later to maint).
   (merge 8650c6298c ab/fix-make-lint-docs later to maint).
   (merge 1c720357ce ab/test-lib-diff-cleanup later to maint).
   (merge 6b615dbece ks/submodule-add-message-fix later to maint).
   (merge 82a57cd13f ma/doc-git-version later to maint).
   (merge 203eb8381a jc/doc-format-patch-clarify-auto-base later to maint).
   (merge 559664c792 ab/test-lib later to maint).

----------------------------------------------------------------

Changes since v2.33.0 are as follows:

Alex Henrie (1):
      pull: abort if --ff-only is given and fast-forwarding is impossible

Andrzej Hunt (1):
      connect: also update offset for features without values

Atharva Raykar (11):
      submodule--helper: introduce add-config subcommand
      submodule--helper: add options for compute_submodule_clone_url()
      submodule--helper: refactor resolve_relative_url() helper
      submodule--helper: remove repeated code in sync_submodule()
      dir: libify and export helper functions from clone.c
      submodule--helper: convert the bulk of cmd_add() to C
      submodule--helper: remove add-clone subcommand
      submodule--helper: remove add-config subcommand
      submodule--helper: remove resolve-relative-url subcommand
      submodule--helper: rename compute_submodule_clone_url()
      submodule--helper: run update procedures from C

Azeem Bande-Ali (1):
      help.c: help.autocorrect=prompt waits for user action

Bagas Sanjaya (8):
      make: add INSTALL_STRIP option variable
      Documentation: fix default directory of git bugreport -o
      ls-files: use imperative mood for -X and -z option description
      difftool: fix word spacing in the usage strings
      blame: describe default output format
      bisect--helper: add space between colon and following sentence
      blame: document --color-* options
      archive: describe compression level option

Ben Boeckel (2):
      advice: add enum variants for missing advice variables
      advice: remove read uses of most global `advice_` variables

Carlo Marcelo Arenas Belón (23):
      build: update detect-compiler for newer Xcode version
      builtin/merge: avoid -Wformat-extra-args from ancient Xcode
      ci: run a pedantic build as part of the GitHub workflow
      ci: update freebsd 12 cirrus job
      ci: use upload-artifacts v1 for dockerized jobs
      remote: avoid -Wunused-but-set-variable in gcc with -DNDEBUG
      win32: allow building with pedantic mode enabled
      developer: enable pedantic by default
      t0301: fixes for windows compatibility
      credential-cache: check for windows specific errors
      git-compat-util: include declaration for unix sockets in windows
      tree-diff: fix leak when not HAVE_ALLOCA_H
      t0000: avoid masking git exit value through pipes
      git-cvsserver: use crypt correctly to compare password hashes
      git-cvsserver: protect against NULL in crypt(3)
      Documentation: cleanup git-cvsserver
      unicode: update the width tables to Unicode 14
      simple-ipc: move definition of ipc_active_state outside of ifdef
      lazyload.h: use an even more generic function pointer than FARPROC
      Makefile: restrict -Wpedantic and -Wno-pedantic-ms-format better
      terminal: teach git how to save/restore its terminal settings
      editor: save and reset terminal after calling EDITOR
      wrapper: remove xunsetenv()

David Aguilar (6):
      difftool: fix symlink-file writing in dir-diff mode
      difftool: create a tmpdir path without repeated slashes
      difftool: refactor dir-diff to write files using helper functions
      difftool: remove an unnecessary call to strbuf_release()
      difftool: add a missing space to the run_dir_diff() comments
      mergetools/xxdiff: prevent segfaults from stopping difftool

David Turner (3):
      t4060: remove unused variable
      diff --submodule=diff: do not fail on ever-initialied deleted submodules
      diff --submodule=diff: don't print failure message twice

Derrick Stolee (36):
      t1092: test merge conflicts outside cone
      add: allow operating on a sparse-only index
      pathspec: stop calling ensure_full_index
      add: ignore outside the sparse-checkout in refresh()
      add: remove ensure_full_index() with --renormalize
      maintenance: skip bootout/bootstrap when plist is registered
      t7519: rewrite sparse index test
      sparse-index: silently return when not using cone-mode patterns
      unpack-trees: fix nested sparse-dir search
      sparse-index: silently return when cache tree fails
      sparse-index: use WRITE_TREE_MISSING_OK
      sparse-checkout: create helper methods
      attr: be careful about sparse directories
      sparse-index: add SPARSE_INDEX_MEMORY_ONLY flag
      sparse-checkout: clear tracked sparse dirs
      diff: ignore sparse paths in diffstat
      merge: make sparse-aware with ORT
      merge-ort: expand only for out-of-cone conflicts
      t1092: add cherry-pick, rebase tests
      sequencer: ensure full index if not ORT strategy
      sparse-index: integrate with cherry-pick and rebase
      t/perf/run: fix bin-wrappers computation
      t3705: test that 'sparse_entry' is unstaged
      t1092: behavior for adding sparse files
      dir: select directories correctly
      dir: fix pattern matching on dirs
      add: fail when adding an untracked sparse file
      add: skip tracked paths outside sparse-checkout cone
      add: implement the --sparse option
      add: update --chmod to skip sparse paths
      add: update --renormalize to skip sparse paths
      rm: add --sparse option
      rm: skip sparse paths with missing SKIP_WORKTREE
      mv: refuse to move sparse paths
      advice: update message to suggest '--sparse'
      dir: fix directory-matching bug

Elijah Newren (48):
      t7601: test interaction of merge/rebase/fast-forward flags and options
      t7601: add tests of interactions with multiple merge heads and config
      pull: since --ff-only overrides, handle it first
      pull: make --rebase and --no-rebase override pull.ff=only
      pull: abort by default when fast-forwarding is not possible
      pull: update docs & code for option compatibility with rebasing
      pull: fix handling of multiple heads
      merge-ort: rename str{map,intmap,set}_func()
      diffcore-rename: use a mem_pool for exact rename detection's hashmap
      merge-ort: add pool_alloc, pool_calloc, and pool_strndup wrappers
      merge-ort: set up a memory pool
      merge-ort: switch our strmaps over to using memory pools
      diffcore-rename, merge-ort: add wrapper functions for filepair alloc/dealloc
      merge-ort: store filepairs and filespecs in our mem_pool
      merge-ort: reuse path strings in pool_alloc_filespec
      merge-ort: remove compile-time ability to turn off usage of memory pools
      git-rebase.txt: correct antiquated claims about --rebase-merges
      directory-rename-detection.txt: small updates due to merge-ort optimizations
      Documentation: edit awkward references to `git merge-recursive`
      merge-strategies.txt: update wording for the resolve strategy
      merge-strategies.txt: do not imply using copy detection is desired
      merge-strategies.txt: avoid giving special preference to patience algorithm
      merge-strategies.txt: fix simple capitalization error
      git-rebase.txt: correct out-of-date and misleading text about renames
      merge-strategies.txt: add coverage of the `ort` merge strategy
      Update error message and code comment
      Change default merge backend from recursive to ort
      Update docs for change of default merge backend
      t3903: document a pair of directory/file bugs
      stash: avoid feeding directories to update-index
      stash: restore untracked files AFTER restoring tracked files
      git-am.txt: clarify --abort behavior
      t4151: add a few am --abort tests
      am: fix incorrect exit status on am fail to abort
      tests: remove leftover untracked files
      trace2.h: fix trivial comment typo
      merge-ort: fix completely wrong comment
      t2500: add various tests for nuking untracked files
      checkout, read-tree: fix leak of unpack_trees_options.dir
      read-tree, merge-recursive: overwrite ignored files by default
      unpack-trees: introduce preserve_ignored to unpack_trees_options
      unpack-trees: make dir an internal-only struct
      Remove ignored files by default when they are in the way
      Change unpack_trees' 'reset' flag into an enum
      unpack-trees: avoid nuking untracked dir in way of unmerged file
      unpack-trees: avoid nuking untracked dir in way of locally deleted file
      Comment important codepaths regarding nuking untracked files/dirs
      Documentation: call out commands that nuke untracked files/directories

Emily Shaffer (3):
      tr2: make process info collection platform-generic
      tr2: log parent process name
      hook.c: add a hook_exists() wrapper and use it in bugreport.c

Eric Wong (1):
      doc/technical: update note about core.multiPackIndex

Fabian Stelzer (11):
      ssh signing: preliminary refactoring and clean-up
      ssh signing: add test prereqs
      ssh signing: add ssh key format and signing code
      ssh signing: retrieve a default key from ssh-agent
      ssh signing: provide a textual signing_key_id
      ssh signing: verify signatures using ssh-keygen
      ssh signing: duplicate t7510 tests for commits
      ssh signing: tests for logs, tags & push certs
      ssh signing: test that gpg fails for unknown keys
      ssh signing: fmt-merge-msg tests & config parse
      ssh signing: clarify trustlevel usage in docs

Felipe Contreras (4):
      completion: bash: fix prefix detection in branch.*
      completion: bash: fix for suboptions with value
      completion: bash: fix for multiple dash commands
      completion: bash: add correct suffix in variables

Glen Choo (4):
      MyFirstContribution: Document --range-diff option when writing v2
      fsck: verify commit graph when implicitly enabled
      fsck: verify multi-pack-index when implictly enabled
      gc: perform incremental repack when implictly enabled

Greg Hurrell (1):
      gitweb: use HEAD as secondary sort key in git_get_heads_list()

Hamza Mahfooz (3):
      grep: refactor next_match() and match_one_pattern() for external use
      pretty: colorize pattern matches in commit messages
      grep/pcre2: fix an edge case concerning ascii patterns and UTF-8 data

Han-Wen Nienhuys (14):
      t6050: use git-update-ref rather than filesystem access
      t1503: mark symlink test as REFFILES
      t6120: use git-update-ref rather than filesystem access
      t3320: use git-symbolic-ref rather than filesystem access
      t2402: use ref-store test helper to create broken symlink
      t1405: use 'git reflog exists' to check reflog existence
      t1405: mark test for 'git pack-refs' as REFFILES
      t1410: mark test as REFFILES
      t7064: use update-ref -d to remove upstream branch
      t6500: use "ls -1" to snapshot ref database state
      t6001: avoid direct file system access
      refs: remove EINVAL errno output from specification of read_raw_ref_fn
      refs/files-backend: stop setting errno from lock_ref_oid_basic
      refs: make errno output explicit for read_raw_ref_fn

Jacob Vosmaer (2):
      pkt-line: add stdio packet write functions
      upload-pack: use stdio in send_ref callbacks

Jeff Hostetler (8):
      sparse-index: copy dir_hash in ensure_full_index()
      trace2: add trace2_child_ready() to report on background children
      simple-ipc: preparations for supporting binary messages.
      simple-ipc/ipc-win32: add trace2 debugging
      simple-ipc/ipc-win32: add Windows ACL to named pipe
      run-command: create start_bg_command
      t/helper/simple-ipc: convert test-simple-ipc to use start_bg_command
      t/perf/perf-lib.sh: remove test_times.* at the end test_perf_()

Jeff King (73):
      http: drop support for curl < 7.11.1
      http: drop support for curl < 7.16.0
      http: drop support for curl < 7.19.4
      build: clang version may not be followed by extra words
      range-diff: drop useless "offset" variable from read_patches()
      range-diff: handle unterminated lines in read_patches()
      range-diff: use ssize_t for parsed "len" in read_patches()
      apply: keep buffer/size pair in sync when parsing binary hunks
      t5323: drop mentions of "master"
      refs: drop unused "flags" parameter to lock_ref_oid_basic()
      logmsg_reencode(): warn when iconv() fails
      docs: use "character encoding" to refer to commit-object encoding
      t0410: disable GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP
      t5310: disable GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP
      pack-bitmap: drop repository argument from prepare_midx_bitmap_git()
      pack-bitmap: drop bitmap_index argument from try_partial_reuse()
      t5562: use alarm() to interrupt timed child-wait
      t5551: test v2-to-v0 http protocol fallback
      http-backend: handle HTTP_GIT_PROTOCOL CGI variable
      docs/http-backend: mention v2 protocol
      docs/git: discuss server-side config for GIT_PROTOCOL
      docs/protocol-v2: point readers transport config discussion
      strvec: use size_t to store nr and alloc
      difftool: prepare "diff" cmdline in cmd_difftool()
      serve: rename is_command() to parse_command()
      serve: return capability "value" from get_capability()
      serve: add "receive" method for v2 capabilities table
      serve: provide "receive" function for object-format capability
      serve: provide "receive" function for session-id capability
      serve: drop "keys" strvec
      ls-refs: ignore very long ref-prefix counts
      docs/protocol-v2: clarify some ls-refs ref-prefix details
      serve: reject bogus v2 "command=ls-refs=foo"
      serve: reject commands used as capabilities
      ls-refs: reject unknown arguments
      t1400: avoid SIGPIPE race condition on fifo
      clone: handle unborn branch in bare repos
      grep: stop modifying buffer in strip_timestamp
      grep: stop modifying buffer in show_line()
      grep: stop modifying buffer in grep_source_1()
      grep: mark "haystack" buffers as const
      grep: store grep_source buffer as const
      http: match headers case-insensitively when redacting
      t7900: clean up some more broken refs
      t5516: don't use HEAD ref for invalid ref-deletion tests
      t5600: provide detached HEAD for corruption failures
      t5312: drop "verbose" helper
      t5312: create bogus ref as necessary
      t5312: test non-destructive repack
      t5312: be more assertive about command failure
      refs-internal.h: move DO_FOR_EACH_* flags next to each other
      refs-internal.h: reorganize DO_FOR_EACH_* flag documentation
      refs: add DO_FOR_EACH_OMIT_DANGLING_SYMREFS flag
      refs: omit dangling symrefs when using GIT_REF_PARANOIA
      refs: turn on GIT_REF_PARANOIA by default
      repack, prune: drop GIT_REF_PARANOIA settings
      ref-filter: stop setting FILTER_REFS_INCLUDE_BROKEN
      ref-filter: drop broken-ref code entirely
      refs: drop "broken" flag from for_each_fullref_in()
      test-read-midx: fix leak of bitmap_index struct
      t1006: clean up broken objects
      cat-file: mention --unordered along with --batch-all-objects
      cat-file: disable refs/replace with --batch-all-objects
      cat-file: split ordered/unordered batch-all-objects callbacks
      cat-file: use packed_object_info() for --batch-all-objects
      gpg-interface: fix leak of "line" in parse_ssh_output()
      gpg-interface: fix leak of strbufs in get_ssh_key_fingerprint()
      send-pack: complain about "expecting report" with --helper-status
      transport-helper: recognize "expecting report" error from send-pack
      submodule: drop unused sm_name parameter from append_fetch_remotes()
      Documentation/Makefile: fix lint-docs mkdir dependency
      t5310: drop lib-bundle.sh include
      log: document --encoding behavior on iconv() failure

Jiang Xin (2):
      ci: new github-action for git-l10n code review
      i18n: fix typos found during l10n for git 2.34.0

Joel Klinghed (1):
      commit: restore --edit when combined with --fixup

Johannes Altmanninger (4):
      Documentation/git-status: remove impossible porcelain status DR and DC
      Documentation/diff-format: state in which cases porcelain status is T
      Documentation/git-status: document porcelain status T (typechange)
      Documentation/git-status: mention how to detect copies

Johannes Schindelin (24):
      tests: exercise the RUNTIME_PREFIX feature
      expand_user_path(): remove stale part of the comment
      expand_user_path(): clarify the role of the `real_home` parameter
      Use a better name for the function interpolating paths
      interpolate_path(): allow specifying paths relative to the runtime prefix
      maintenance: create `launchctl` configuration using a lock file
      t5520: do not use `pull.rebase=preserve`
      remote: warn about unhandled branch.<name>.rebase values
      tests: stop testing `git rebase --preserve-merges`
      pull: remove support for `--rebase=preserve`
      rebase: drop support for `--preserve-merges`
      git-svn: drop support for `--preserve-merges`
      rebase: drop the internal `rebase--interactive` command
      rebase: remove obsolete code comment
      rebase: stop mentioning the -p option in comments
      rebase: remove a no-longer-used function
      sequencer: restrict scope of a formerly public function
      commit-graph: when closing the graph, also release the slab
      pull: release packs before fetching
      run-command: prettify the `RUN_COMMAND_*` flags
      run-command: offer to close the object store before running
      run_auto_maintenance(): implicitly close the object store
      Close object store closer to spawning child processes
      ci(windows): ensure that we do not pick up random executables

Johannes Sixt (9):
      t9001: PATH must not use Windows-style paths
      lazyload.h: fix warnings about mismatching function pointer types
      t4034/cpp: actually test that operator tokens are not split
      t4034: add tests showing problematic cpp tokenizations
      userdiff-cpp: tighten word regex
      userdiff-cpp: prepare test cases with yet unsupported features
      userdiff-cpp: permit the digit-separating single-quote in numbers
      userdiff-cpp: learn the C++ spaceship operator
      userdiff-cpp: back out the digit-separators in numbers

Jonathan Tan (22):
      send-pack: fix push.negotiate with remote helper
      send-pack: fix push nego. when remote has refs
      fetch: die on invalid --negotiation-tip hash
      submodule: lazily add submodule ODBs as alternates
      grep: use submodule-ODB-as-alternate lazy-addition
      grep: typesafe versions of grep_source_init
      grep: read submodule entry with explicit repo
      grep: allocate subrepos on heap
      grep: add repository to OID grep sources
      submodule-config: pass repo upon blob config read
      t7814: show lack of alternate ODB-adding
      submodule: remove unnecessary unabsorbed fallback
      repository: support unabsorbed in repo_submodule_init
      revision: remove "submodule" from opt struct
      submodule: extract path to submodule gitdir func
      refs: plumb repo into ref stores
      refs: teach arbitrary repo support to iterators
      refs: peeling non-the_repository iterators is BUG
      merge-{ort,recursive}: remove add_submodule_odb()
      object-file: only register submodule ODB if needed
      submodule: pass repo to check_has_commit()
      submodule: trace adding submodule ODB as alternate

Josh Steadmon (2):
      connect, protocol: log negotiated protocol version
      sequencer: advise if skipping cherry-picked commit

Junio C Hamano (30):
      expand_user_path: allow in-flight topics to keep using the old name
      bisect: do not run show-branch just to show the current commit
      bisect: simplify return code from bisect_checkout()
      build: catch clang that identifies itself as "$VENDOR clang"
      userdiff: comment on the builtin patterns
      The first batch post 2.33
      The second batch
      The third batch
      apply: resolve trivial merge without hitting ll-merge with "--3way"
      hash-object: prefix_filename() returns allocated memory these days
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      The ninth batch
      The tenth batch
      The eleventh batch
      Twelfth batch
      Git 2.33.1
      signature-format.txt: explain and illustrate multi-line headers
      Thirteenth batch
      The fourteenth batch
      format-patch (doc): clarify --base=auto
      branch (doc): -m/-c copies config and reflog
      The fifteenth batch
      Revert "logmsg_reencode(): warn when iconv() fails"
      Git 2.34-rc0
      A few more topics before -rc1
      Git 2.34-rc1

Kaartic Sivaraam (1):
      submodule--helper: fix incorrect newlines in an error message

Kim Altintop (3):
      t5730: introduce fetch command helper
      upload-pack.c: treat want-ref relative to namespace
      docs: clarify the interaction of transfer.hideRefs and namespaces

Kyle Zhao (1):
      pack-revindex.h: correct the time complexity descriptions

Lénaïc Huard (4):
      cache.h: Introduce a generic "xdg_config_home_for(…)" function
      maintenance: `git maintenance run` learned `--scheduler=<scheduler>`
      maintenance: add support for systemd timers on Linux
      maintenance: fix test t7900-maintenance.sh

Mahi Kolla (1):
      clone: set submodule.recurse=true if submodule.stickyRecursiveClone enabled

Martin Ågren (6):
      config.txt: fix typo
      git.txt: fix typo
      git-multi-pack-index.txt: change "folder" to "directory"
      gitignore.txt: change "folder" to "directory"
      gitweb.txt: change "folder" to "directory"
      git-bundle.txt: add missing words and punctuation

Marvin Häuser (1):
      send-email: avoid incorrect header propagation

Matheus Tavares (3):
      checkout: make delayed checkout respect --quiet and --no-progress
      grep: demonstrate bug with textconv attributes and submodules
      add, rm, mv: fix bug that prevents the update of non-sparse dirs

Matthias Aßhauer (2):
      help: make sure local html page exists before calling external processes
      documentation: add documentation for 'git version'

Mickey Endito (1):
      t5582: remove spurious 'cd "$D"' line

Mike Hommey (1):
      credential: fix leak in credential_apply_config()

Miriam Rubio (3):
      t6030-bisect-porcelain: add tests to control bisect run exit cases
      t6030-bisect-porcelain: add test for bisect visualize
      bisect--helper: retire `--bisect-next-check` subcommand

Orgad Shaneh (1):
      doc: fix capitalization in "git status --porcelain=v2" description

Patrick Steinhardt (16):
      fetch-pack: speed up loading of refs via commit graph
      revision: separate walk and unsorted flags
      connected: do not sort input revisions
      revision: stop retrieving reference twice
      commit-graph: split out function to search commit position
      revision: avoid hitting packfiles when commits are in commit-graph
      ls-refs: reuse buffer when sending refs
      fetch: skip formatting updated refs with `--quiet`
      fetch: speed up lookup of want refs via commit-graph
      fetch: avoid unpacking headers in object existence check
      connected: refactor iterator to return next object ID directly
      fetch-pack: optimize loading of refs via commit graph
      fetch: refactor fetch refs to be more extendable
      fetch: merge fetching and consuming refs
      fetch: avoid second connectivity check if we already have all objects
      update-ref: fix streaming of status updates

Philip Oakley (1):
      doc: config, tell readers of `git help --config`

Philippe Blain (3):
      test-lib-functions: use 'TEST_SHELL_PATH' in 'test_pause'
      test-lib-functions: optionally keep HOME, TERM and SHELL in 'test_pause'
      test-lib-functions: keep user's debugger config files and TERM in 'debug'

Phillip Wood (22):
      t3403: fix commit authorship
      rebase --apply: restore some tests
      rebase --continue: remove .git/MERGE_MSG
      rebase -r: make 'merge -c' behave like reword
      rebase -i: add another reword test
      rebase -r: don't write .git/MERGE_MSG when fast-forwarding
      rebase -r: fix merge -c with a merge strategy
      t3407: run tests in $TEST_DIRECTORY
      t3407: use test_commit
      t3407: use test_cmp_rev
      t3407: rename a variable
      t3407: use test_path_is_missing
      t3407: strengthen rebase --abort tests
      t3407: rework rebase --quit tests
      rebase: use our standard error return value
      rebase: use lookup_commit_reference_by_name()
      rebase: dereference tags
      sequencer.c: factor out a function
      rebase: fix todo-list rereading
      sparse index: fix use-after-free bug in cache_tree_verify()
      t1092: run "rebase --apply" without "-q" in testing
      rebase -i: fix rewording with --committer-date-is-author-date

Pranit Bauva (2):
      run-command: make `exists_in_PATH()` non-static
      bisect--helper: reimplement `bisect_visualize()` shell function in C

René Scharfe (36):
      compat: let git_mmap use malloc(3) directly
      xopen: explicitly report creation failures
      use xopen() to handle fatal open(2) failures
      show-branch: simplify rev_is_head()
      archive: convert queue_directory to struct object_id
      branch: allow deleting dangling branches with --force
      merge-recursive: use fspathcmp() in path_hashmap_cmp()
      range-diff: avoid segfault with -I
      setup: use xopen and xdup in sanitize_stdfds
      refs/files-backend: remove unused open mode parameter
      index-pack: use xopen in init_thread
      oidset: make oidset_size() an inline function
      midx: inline nth_midxed_pack_entry()
      packfile: convert mark_bad_packed_object() to object_id
      packfile: convert has_packed_and_bad() to object_id
      packfile: use oidset for bad objects
      compression: drop write-only core_compression_* variables
      packfile: release bad_objects in close_pack()
      test-mergesort: use strbuf_getline()
      test-mergesort: add sort subcommand
      test-mergesort: add test subcommand
      test-mergesort: add generate subcommand
      test-mergesort: add unriffle mode
      test-mergesort: add unriffle_skewed mode
      p0071: measure sorting of already sorted and reversed files
      p0071: test performance of llist_mergesort()
      mergesort: use ranks stack
      p3400: stop using tac(1)
      t3905: show failure to ignore sub-repo
      read-cache: add verify_path_internal()
      read-cache: let verify_path() reject trailing dir separators again
      test-mergesort: use repeatable random numbers
      perf: disable automatic housekeeping
      add: don't write objects with --dry-run
      gpg-interface: handle missing " with " gracefully in parse_ssh_output()
      gpg-interface: avoid buffer overrun in parse_ssh_output()

Robert Estelle (1):
      completion: fix incorrect bash/zsh string equality check

SZEDER Gábor (12):
      Makefile: remove archives before manipulating them with 'ar'
      column: fix parsing of the '--nl' option
      test-lib: set GIT_CEILING_DIRECTORIES to protect the surrounding repository
      t1600-index: remove unnecessary redirection
      t1600-index: don't run git commands upstream of a pipe
      t1600-index: disable GIT_TEST_SPLIT_INDEX
      read-cache: look for shared index files next to the index, too
      tests: disable GIT_TEST_SPLIT_INDEX for sparse index tests
      read-cache: fix GIT_TEST_SPLIT_INDEX
      commit-graph: fix bogus counter in "Scanning merged commits" progress line
      entry: show finer-grained counter in "Filtering content" progress line
      command-list.txt: remove 'sparse-index' from main help

Sergey Organov (1):
      diff-index: restore -c/--cc options handling

Takashi Iwai (1):
      completion: tcsh: Fix regression by drop of wrapper functions

Tal Kelrich (1):
      fast-export: fix anonymized tag using original length

Tanushree Tumane (1):
      bisect--helper: reimplement `bisect_run` shell function in C

Tassilo Horn (1):
      userdiff: improve java hunk header regex

Taylor Blau (55):
      pack-bitmap.c: harden 'test_bitmap_walk()' to check type bitmaps
      pack-bitmap-write.c: gracefully fail to write non-closed bitmaps
      pack-bitmap-write.c: free existing bitmaps
      Documentation: describe MIDX-based bitmaps
      object-store.h: teach for_each_packed_object to ignore kept packs
      builtin/pack-objects.c: simplify add_objects_in_unpacked_packs()
      builtin/pack-objects.c: remove duplicate hash lookup
      midx: disallow running outside of a repository
      midx: fix `*.rev` cleanups with `--object-dir`
      midx: clear auxiliary .rev after replacing the MIDX
      midx: reject empty `--preferred-pack`'s
      midx: infer preferred pack when not given one
      midx: close linked MIDXs, avoid leaking memory
      midx: avoid opening multiple MIDXs when writing
      pack-bitmap.c: introduce 'bitmap_num_objects()'
      pack-bitmap.c: introduce 'nth_bitmap_object_oid()'
      pack-bitmap.c: introduce 'bitmap_is_preferred_refname()'
      pack-bitmap.c: avoid redundant calls to try_partial_reuse
      pack-bitmap: read multi-pack bitmaps
      pack-bitmap: write multi-pack bitmaps
      t5310: move some tests to lib-bitmap.sh
      t/helper/test-read-midx.c: add --checksum mode
      t5326: test multi-pack bitmap behavior
      t5319: don't write MIDX bitmaps in t5319
      t7700: update to work with MIDX bitmap test knob
      midx: respect 'GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP'
      p5310: extract full and partial bitmap tests
      p5326: perf tests for MIDX bitmaps
      bulk-checkin.c: store checksum directly
      pack-write.c: rename `.idx` files after `*.rev`
      builtin/repack.c: move `.idx` files into place last
      builtin/index-pack.c: move `.idx` files into place last
      t/helper/test-bitmap.c: add 'dump-hashes' mode
      pack-bitmap.c: propagate namehash values from existing bitmaps
      midx.c: respect 'pack.writeBitmapHashcache' when writing bitmaps
      p5326: create missing 'perf-tag' tag
      p5326: don't set core.multiPackIndex unnecessarily
      p5326: generate pack bitmaps before writing the MIDX bitmap
      t5326: test propagating hashcache values
      builtin/commit-graph.c: don't accept common --[no-]progress
      builtin/multi-pack-index.c: disable top-level --[no-]progress
      midx: expose `write_midx_file_only()` publicly
      builtin/multi-pack-index.c: support `--stdin-packs` mode
      midx: preliminary support for `--refs-snapshot`
      builtin/repack.c: keep track of existing packs unconditionally
      builtin/repack.c: rename variables that deal with non-kept packs
      builtin/repack.c: extract showing progress to a variable
      builtin/repack.c: support writing a MIDX while repacking
      builtin/repack.c: make largest pack preferred
      builtin/repack.c: pass `--refs-snapshot` when writing bitmaps
      t/perf/aggregate.perl: tolerate leading spaces
      midx.c: extract MIDX lookup by object_dir
      midx.c: lookup MIDX by object directory during expire
      midx.c: lookup MIDX by object directory during repack
      midx.c: guard against commit_lock_file() failures

Teng Long (1):
      list-objects.c: rename "traverse_trees_and_blobs" to "traverse_non_commits"

Todd Zullinger (1):
      doc: add bundle-format to TECH_DOCS

USAMI Kenta (1):
      userdiff: support enum keyword in PHP hunk header

Wesley Schwengle (1):
      Document `rebase.forkpoint` in rebase man page

ZheNing Hu (6):
      ref-filter: add obj-type check in grab contents
      ref-filter: add %(raw) atom
      ref-filter: --format=%(raw) support --perl
      ref-filter: use non-const ref_format in *_atom_parser()
      ref-filter: add %(rest) atom
      cherry-pick: use better advice message

Zoker (1):
      doc: fix syntax error and the format of printf

brian m. carlson (1):
      t5607: avoid using prerequisites to select algorithm

Ævar Arnfjörð Bjarmason (224):
      pack-objects tests: cover blindspots in stdin handling
      Makefile: move ".PHONY: cscope" near its target
      Makefile: add QUIET_GEN to "cscope" target
      pack-objects: fix segfault in --stdin-packs option
      test-lib tests: move "run_sub_test" to a new lib-subtest.sh
      Makefile: don't use "FORCE" for tags targets
      http: drop support for curl < 7.19.3 and < 7.17.0 (again)
      http: rename CURLOPT_FILE to CURLOPT_WRITEDATA
      bundle doc: elaborate on object prerequisites
      bundle doc: elaborate on rev<->ref restriction
      bundle doc: rewrite the "DESCRIPTION" section
      bundle doc: replace "basis" with "prerequsite(s)"
      serve: mark has_capability() as static
      transport: rename "fetch" in transport_vtable to "fetch_refs"
      transport: use designated initializers
      serve: use designated initializers
      serve.[ch]: don't pass "struct strvec *keys" to commands
      serve: move transfer.advertiseSID check into session_id_advertise()
      serve.c: move version line to advertise_capabilities()
      {upload,receive}-pack tests: add --advertise-refs tests
      serve.[ch]: remove "serve_options", split up --advertise-refs code
      upload-pack: document and rename --advertise-refs
      Makefile: remove "cscope.out", not "cscope*" in cscope.out target
      Makefile: normalize clobbering & xargs for tags targets
      refs/packet: add missing BUG() invocations to reflog callbacks
      refs/files: remove unused REF_DELETING in lock_ref_oid_basic()
      ls-remote: set packet_trace_identity(<name>)
      rebase: emit one "fatal" in "fatal: fatal: <error>"
      advice: remove use of global advice_add_embedded_repo
      advice: move advice.graftFileDeprecated squashing to commit.[ch]
      refs/files: remove unused "extras/skip" in lock_ref_oid_basic()
      refs/files: remove unused "skip" in lock_raw_ref() too
      refs/debug: re-indent argument list for "prepare"
      refs: make repo_dwim_log() accept a NULL oid
      refs/files: add a comment about refs_reflog_exists() call
      reflog expire: don't lock reflogs using previously seen OID
      refs API: remove OID argument to reflog_expire()
      refs/files: remove unused "oid" in lock_ref_oid_basic()
      refs/files: remove unused "errno == EISDIR" code
      refs/files: remove unused "errno != ENOTDIR" condition
      refs file backend: move raceproof_create_file() here
      bundle API: start writing API documentation
      commit-graph: define common usage with a macro
      commit-graph: remove redundant handling of -h
      commit-graph: use parse_options_concat()
      multi-pack-index: refactor "goto usage" pattern
      commit-graph: early exit to "usage" on !argc
      commit-graph: show usage on "commit-graph [write|verify] garbage"
      commit-graph: show "unexpected subcommand" error
      protocol-caps.c: fix memory leak in send_info()
      mailmap.c: fix a memory leak in free_mailap_{info,entry}()
      gc: remove trailing dot from "gc.log" line
      gettext: remove optional non-standard parens in N_() definition
      bundle API: change "flags" to be "extra_index_pack_args"
      index-pack: add --progress-title option
      bundle: show progress on "unbundle"
      tr2: remove NEEDSWORK comment for "non-procfs" implementations
      tr2: clarify TRACE2_PROCESS_INFO_EXIT comment under Linux
      tr2: stop leaking "thread_name" memory
      tr2: leave the parent list empty upon failure & don't leak memory
      tr2: do compiler enum check in trace2_collect_process_info()
      tr2: log N parent process names on Linux
      send-email: fix a "first config key wins" regression in v2.33.0
      Makefile: remove the check_bindir script
      pack-write: skip *.rev work when not writing *.rev
      pack.h: line-wrap the definition of finish_tmp_packfile()
      pack-write: refactor renaming in finish_tmp_packfile()
      index-pack: refactor renaming in final()
      pack-write: split up finish_tmp_packfile() function
      pack-objects: rename .idx files into place after .bitmap files
      help: correct the usage string in -h and documentation
      INSTALL: don't mention the "curl" executable at all
      INSTALL: reword and copy-edit the "libcurl" section
      git-submodule: remove unused is_zero_oid() function
      git-sh-setup: remove unused "pull with rebase" message
      git-bisect: remove unused SHA-1 $x40 shell variable
      test-lib: remove unused $_x40 and $_z40 variables
      test-tool run-command: fix flip-flop init pattern
      gc: remove unused launchctl_get_uid() call
      parse-options API users: align usage output in C-strings
      send-pack: properly use parse_options() API for usage string
      git rev-parse --parseopt tests: add more usagestr tests
      difftool: prepare "struct child_process" in cmd_difftool()
      difftool: use run_command() API in run_file_diff()
      parse-options API: remove OPTION_ARGUMENT feature
      INSTALL: mention that we need libcurl 7.19.4 or newer to build
      Makefile: drop support for curl < 7.9.8 (again)
      http: drop support for curl < 7.18.0 (again)
      http: correct version check for CURL_HTTP_VERSION_2
      http: correct curl version check for CURLOPT_PINNEDPUBLICKEY
      http: centralize the accounting of libcurl dependencies
      http: don't hardcode the value of CURL_SOCKOPT_OK
      wrapper.c: add x{un,}setenv(), and use xsetenv() in environment.c
      environment.c: remove test-specific "ignore_untracked..." variable
      read-cache & fetch-negotiator: check "enum" values in switch()
      repo-settings.c: simplify the setup
      repository.h: don't use a mix of int and bitfields
      Makefile: clean .depend dirs under COMPUTE_HEADER_DEPENDENCIES != yes
      parse-options: properly align continued usage output
      test-lib tests: split up "write and run" into two functions
      test-lib tests: don't provide a description for the sub-tests
      test-lib tests: avoid subshell for "test_cmp" for readability
      test-lib tests: refactor common part of check_sub_test_lib_test*()
      test-lib tests: assert 1 exit code, not non-zero
      test-lib tests: get rid of copy/pasted mock test code
      Makefile: make the "sparse" target non-.PHONY
      Makefile: make COMPUTE_HEADER_DEPENDENCIES=auto work with DEVOPTS=pedantic
      help: correct usage & behavior of "git help --guides"
      help tests: add test for --config output
      help: correct logic error in combining --all and --config
      help: correct logic error in combining --all and --guides
      help: simplify by moving to OPT_CMDMODE()
      help tests: test --config-for-completion option & output
      help / completion: make "git help" do the hard work
      help: move column config discovery to help.c library
      Makefile: add SANITIZE=leak flag to GIT-BUILD-OPTIONS
      tests: add a test mode for SANITIZE=leak, run it in CI
      bundle: remove ignored & undocumented "--verbose" flag
      Makefile: mark "check" target as .PHONY
      Makefile: stop hardcoding {command,config}-list.h
      Makefile: don't perform "mv $@+ $@" dance for $(GENERATED_H)
      Makefile: remove an out-of-date comment
      hook.[ch]: move find_hook() from run-command.c to hook.c
      hook.c users: use "hook_exists()" instead of "find_hook()"
      hook-list.h: add a generated list of hooks, like config-list.h
      http: check CURLE_SSL_PINNEDPUBKEYNOTMATCH when emitting errors
      Makefile: pass -Wno-pendantic under GENERATE_COMPILATION_DATABASE=yes
      submodule-config.h: remove unused SUBMODULE_INIT macro
      *.[ch] *_INIT macros: use { 0 } for a "zero out" idiom
      *.h _INIT macros: don't specify fields equal to 0
      *.h: move some *_INIT to designated initializers
      cbtree.h: define cb_init() in terms of CBTREE_INIT
      daemon.c: refactor hostinfo_init() to HOSTINFO_INIT macro
      builtin/blame.c: refactor commit_info_init() to COMMIT_INFO_INIT macro
      string-list.[ch]: remove string_list_init() compatibility function
      config.c: remove unused git_config_key_is_valid()
      refs.[ch]: remove unused ref_storage_backend_exists()
      refs/ref-cache.[ch]: remove unused remove_entry_from_dir()
      refs/ref-cache.[ch]: remove unused add_ref_entry()
      refs/ref-cache.c: remove "mkdir" parameter from find_containing_dir()
      refs/ref-cache.[ch]: remove "incomplete" from create_dir_entry()
      parse-options.h: move PARSE_OPT_SHELL_EVAL between enums
      urlmatch.[ch]: add and use URLMATCH_CONFIG_INIT
      builtin/remote.c: add and use a REF_STATES_INIT
      builtin/remote.c: add and use SHOW_INFO_INIT
      builtin.h: remove cmd_tar_tree() declaration
      grep.h: remove unused grep_threads_ok() declaration
      log-tree.h: remove unused function declarations
      config.h: remove unused git_config_get_untracked_cache() declaration
      fsck tests: add test for fsck-ing an unknown type
      fsck tests: refactor one test to use a sub-repo
      fsck tests: test current hash/type mismatch behavior
      fsck tests: test for garbage appended to a loose object
      cat-file tests: move bogus_* variable declarations earlier
      cat-file tests: test for missing/bogus object with -t, -s and -p
      cat-file tests: add corrupt loose object test
      cat-file tests: test for current --allow-unknown-type behavior
      object-file.c: don't set "typep" when returning non-zero
      object-file.c: return -1, not "status" from unpack_loose_header()
      object-file.c: make parse_loose_header_extended() public
      object-file.c: simplify unpack_loose_short_header()
      object-file.c: use "enum" return type for unpack_loose_header()
      object-file.c: return ULHR_TOO_LONG on "header too long"
      object-file.c: stop dying in parse_loose_header()
      fsck: don't hard die on invalid object types
      fsck: report invalid object type-path combinations
      unpack-trees: don't leak memory in verify_clean_subdirectory()
      tests: fix a memory leak in test-prio-queue.c
      tests: fix a memory leak in test-parse-options.c
      tests: fix a memory leak in test-oidtree.c
      tests: fix test-oid-array leak, test in SANITIZE=leak
      ls-files: fix a trivial dir_clear() leak
      ls-files: add missing string_list_clear()
      merge: add missing strbuf_release()
      parse-options.[ch]: consistently use "enum parse_opt_flags"
      parse-options.[ch]: consistently use "enum parse_opt_result"
      parse-options.c: use exhaustive "case" arms for "enum parse_opt_result"
      parse-options.h: make the "flags" in "struct option" an enum
      parse-options.c: move optname() earlier in the file
      commit-graph: stop using optname()
      parse-options.[ch]: make opt{bug,name}() "static"
      parse-options tests: test optname() output
      parse-options: change OPT_{SHORT,UNSET} to an enum
      unwritable tests: assert exact error output
      commit: fix duplication regression in permission error output
      leak tests: run various built-in tests in t00*.sh SANITIZE=leak
      leak tests: run various "test-tool" tests in t00*.sh SANITIZE=leak
      leak tests: mark all ls-tree tests as passing with SANITIZE=leak
      leak tests: mark all trace2 tests as passing with SANITIZE=leak
      leak tests: mark all checkout-index tests as passing with SANITIZE=leak
      leak tests: mark some ls-files tests as passing with SANITIZE=leak
      leak tests: mark some read-tree tests as passing with SANITIZE=leak
      leak tests: mark various "generic" tests as passing with SANITIZE=leak
      leak tests: mark some misc tests as passing with SANITIZE=leak
      sequencer: add a "goto cleanup" to do_reset()
      sequencer: fix a memory leak in do_reset()
      test-lib.sh: de-duplicate error() teardown code
      test-lib.sh: use "Bail out!" syntax on bad SANITIZE=leak use
      test-lib.sh: try to re-chmod & retry on failed trash removal
      commit-graph tests: fix error-hiding graph_git_two_modes() helper
      commit-graph tests: fix another graph_git_two_modes() helper
      commit-graph: don't consider "replace" objects with "verify"
      "lib-diff" tests: make "README" and "COPYING" test data smaller
      tests: stop using top-level "README" and "COPYING" files
      doc lint: fix error-hiding regression
      doc lint: emit errors on STDERR
      doc build: speed up "make lint-docs"
      doc lint: make "lint-docs" non-.PHONY
      pkt-line.[ch]: remove unused packet_buf_write_len()
      pkt-line.[ch]: remove unused packet_read_line_buf()
      git config doc: fix recent ASCIIDOC formatting regression
      tag: use a "goto cleanup" pattern, leak less memory
      ref-filter API user: add and use a ref_sorting_release()
      branch: use ref_sorting_release()
      git-sh-i18n: remove unused eval_ngettext()
      git-sh-setup: remove messaging supporting --preserve-merges
      Makefile: remove redundant GIT-CFLAGS dependency from "sparse"
      config.c: don't leak memory in handle_path_include()
      grep: prefer "struct grep_opt" over its "void *" equivalent
      grep: use object_array_clear() in cmd_grep()
      grep: fix a "path_list" memory leak
      clone: fix a memory leak of the "git_dir" variable
      submodule--helper: fix small memory leaks
      reflog: free() ref given to us by dwim_log()

Đoàn Trần Công Danh (3):
      t6300: don't run cat-file on non-existent object
      t6300: check for cat-file exit status code
      diff-lib: ignore paths that are outside $cwd if --relative asked


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.34.0-rc0
@ 2021-10-30  0:17  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2021-10-30  0:17 UTC (permalink / raw)
  To: git; +Cc: git-packagers

An early preview release Git v2.34.0-rc0 is now available for
testing at the usual places.  It is comprised of 760 non-merge
commits since v2.33.0, contributed by 86 people, 25 of which are
new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.34.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.33.0 are as follows.
Welcome to the Git development community!

  Alan Blotz, Azeem Bande-Ali, Dr. Matthias St. Pierre, Eli
  Schwartz, git.mexon@spamgourmet.com, Glen Choo, Joel Klinghed,
  Johannes Altmanninger, Kim Altintop, Kyle Zhao, Mahi Kolla,
  Marvin Häuser, Mickey Endito, Rob Browning, Robert Estelle,
  Robert Leftwich, Tal Kelrich, Tassilo Horn, Thomas De Zeeuw,
  USAMI Kenta, Victor Gambier, Victoria Dye, Wesley Schwengle,
  Xingman Chen, and Zoker.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alban Gruin, Alex Henrie, Andrzej
  Hunt, Atharva Raykar, Bagas Sanjaya, Ben Boeckel, brian
  m. carlson, Carlo Arenas, Carlo Marcelo Arenas Belón, Christian
  Couder, David Aguilar, David Turner, Derrick Stolee, Đoàn
  Trần Công Danh, Elijah Newren, Emily Shaffer, Eric Sunshine,
  Eric Wong, Fabian Stelzer, Felipe Contreras, Greg Hurrell,
  Han-Wen Nienhuys, Hariom Verma, Jacob Keller, Jacob Vosmaer,
  Jeff Hostetler, Jeff King, Jiang Xin, Johannes Schindelin,
  Johannes Sixt, Jonathan Nieder, Jonathan Tan, Josh Steadmon,
  Junio C Hamano, Kaartic Sivaraam, Lénaïc Huard, Martin Ågren,
  Matheus Tavares, Matheus Tavares Bernardino, Matthias Aßhauer,
  Mike Hommey, Miriam Rubio, Orgad Shaneh, Patrick Steinhardt,
  Philip Oakley, Philippe Blain, Phillip Wood, Pranit Bauva,
  Randall S. Becker, René Scharfe, Sergey Organov, Shourya Shukla,
  SZEDER Gábor, Takashi Iwai, Tanushree Tumane, Taylor Blau,
  Teng Long, Todd Zullinger, Ulrich Windl, and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git 2.34 Release Notes (draft)
==============================

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

Backward compatibility notes

 * The "--preserve-merges" option of "git rebase" has been removed.


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.

 * "git rebase" by default skips changes that are equivalent to
   commits that are already in the history the branch is rebased onto;
   give messages when this happens to let the users be aware of
   skipped commits, and also teach them how to tell "rebase" to keep
   duplicated changes.

 * The advice message that "git cherry-pick" gives when it asks
   conflicted replay of a commit to be resolved by the end user has
   been updated.

 * After "git clone --recurse-submodules", all submodules are cloned
   but they are not by default recursed into by other commands.  With
   submodule.stickyRecursiveClone configuration set, submodule.recurse
   configuration is set to true in a repository created by "clone"
   with "--recurse-submodules" option.

 * The logic for auto-correction of misspelt subcommands learned to go
   interactive when the help.autocorrect configuration variable is set
   to 'prompt'.

 * "git maintenance" scheduler learned to use systemd timers as a
   possible backend.

 * "git diff --submodule=diff" showed failure from run_command() when
   trying to run diff inside a submodule, when the user manually
   removes the submodule directory.

 * "git bundle unbundle" learned to show progress display.

 * In cone mode, the sparse-index code path learned to remove ignored
   files (like build artifacts) outside the sparse cone, allowing the
   entire directory outside the sparse cone to be removed, which is
   especially useful when the sparse patterns change.

 * Taking advantage of the CGI interface, http-backend has been
   updated to enable protocol v2 automatically when the other side
   asks for it.

 * The credential-cache helper has been adjusted to Windows.

 * The error in "git help no-such-git-command" is handled better.

 * The unicode character width table (used for output alignment) has
   been updated.

 * The ref iteration code used to optionally allow dangling refs to be
   shown, which has been tightened up.

 * "git add", "git mv", and "git rm" have been adjusted to avoid
   updating paths outside of the sparse-checkout definition unless
   the user specifies a "--sparse" option.

 * "git repack" has been taught to generate multi-pack reachability
   bitmaps.

 * "git fsck" has been taught to report mismatch between expected and
   actual types of an object better.

 * Use ssh public crypto for object and push-cert signing.


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.

 * "git fetch --quiet" optimization to avoid useless computation of
   info that will never be displayed.

 * Callers from older advice_config[] based API has been updated to
   use the newer advice_if_enabled() and advice_enabled() API.

 * Teach "test_pause" and "debug" helpers to allow using the HOME and
   TERM environment variables the user usually uses.

 * "make INSTALL_STRIP=-s install" allows the installation step to use
   "install -s" to strip the binaries as they get installed.

 * Code that handles large number of refs in the "git fetch" code
   path has been optimized.

 * The reachability bitmap file used to be generated only for a single
   pack, but now we've learned to generate bitmaps for history that
   span across multiple packfiles.

 * The code to make "git grep" recurse into submodules has been
   updated to migrate away from the "add submodule's object store as
   an alternate object store" mechanism (which is suboptimal).

 * The tracing of process ancestry information has been enhanced.

 * Reduce number of write(2) system calls while sending the
   ref advertisement.

 * Update the build procedure to use the "-pedantic" build when
   DEVELOPER makefile macro is in effect.

 * Large part of "git submodule add" gets rewritten in C.

 * The run-command API has been updated so that the callers can easily
   ask the file descriptors open for packfiles to be closed immediately
   before spawning commands that may trigger auto-gc.

 * An oddball OPTION_ARGUMENT feature has been removed from the
   parse-options API.

 * The mergesort implementation used to sort linked list has been
   optimized.

 * Remove external declaration of functions that no longer exist.

 * "git multi-pack-index write --bitmap" learns to propagate the
   hashcache from original bitmap to resulting bitmap.

 * CI learns to run the leak sanitizer builds.

 * "git grep --recurse-submodules" takes trees and blobs from the
   submodule repository, but the textconv settings when processing a
   blob from the submodule is not taken from the submodule repository.
   A test is added to demonstrate the issue, without fixing it.

 * Teach "git help -c" into helping the command line completion of
   configuration variables.

 * When "git cmd -h" shows more than one line of usage text (e.g.
   the cmd subcommand may take sub-sub-command), parse-options API
   learned to align these lines, even across i18n/l10n.

 * Prevent "make sparse" from running for the source files that
   haven't been modified.

 * The codepath to write a new version of .midx multi-pack index files
   has learned to release the mmaped memory holding the current
   version of .midx before removing them from the disk, as some
   platforms do not allow removal of a file that still has mapping.

 * A new feature has been added to abort early in the test framework.


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

 * Input validation of "git pack-objects --stdin-packs" has been
   corrected.

 * Bugfix for common ancestor negotiation recently introduced in "git
   push" code path.

 * "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.

 * "git apply" miscounted the bytes and failed to read to the end of
   binary hunks.

 * "git range-diff" code clean-up.

 * "git commit --fixup" now works with "--edit" again, after it was
   broken in v2.32.

 * Use upload-artifacts v1 (instead of v2) for 32-bit linux, as the
   new version has a blocker bug for that architecture.

 * 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.

 * Various bugs in "git rebase -r" have been fixed.

 * 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.

 * "git diff --relative" segfaulted and/or produced incorrect result
   when there are unmerged paths.

 * The delayed checkout code path in "git checkout" etc. were chatty
   even when --quiet and/or --no-progress options were given.

 * "git branch -D <branch>" used to refuse to remove a broken branch
   ref that points at a missing commit, which has been corrected.

 * Build update for Apple clang.

 * The parser for the "--nl" option of "git column" has been
   corrected.

 * "git upload-pack" which runs on the other side of "git fetch"
   forgot to take the ref namespaces into account when handling
   want-ref requests.

 * The sparse-index support can corrupt the index structure by storing
   a stale and/or uninitialized data, which has been corrected.

 * Buggy tests could damage repositories outside the throw-away test
   area we created.  We now by default export GIT_CEILING_DIRECTORIES
   to limit the damage from such a stray test.

 * Even when running "git send-email" without its own threaded
   discussion support, a threading related header in one message is
   carried over to the subsequent message to result in an unwanted
   threading, which has been corrected.

 * The output from "git fast-export", when its anonymization feature
   is in use, showed an annotated tag incorrectly.

 * Doc update plus improved error reporting.

 * Recent "diff -m" changes broke "gitk", which has been corrected.

 * Regression fix.

 * The "git apply -3" code path learned not to bother the lower level
   merge machinery when the three-way merge can be trivially resolved
   without the content level merge.  This fixes a regression caused by
   recent "-3way first and fall back to direct application" change.

 * The code that optionally creates the *.rev reverse index file has
   been optimized to avoid needless computation when it is not writing
   the file out.

 * "git range-diff -I... <range> <range>" segfaulted, which has been
   corrected.

 * The order in which various files that make up a single (conceptual)
   packfile has been reevaluated and straightened up.  This matters in
   correctness, as an incomplete set of files must not be shown to a
   running Git.

 * The "mode" word is useless in a call to open(2) that does not
   create a new file.  Such a call in the files backend of the ref
   subsystem has been cleaned up.

 * "git update-ref --stdin" failed to flush its output as needed,
   which potentially led the conversation to a deadlock.

 * When "git am --abort" fails to abort correctly, it still exited
   with exit status of 0, which has been corrected.

 * Correct nr and alloc members of strvec struct to be of type size_t.

 * "git stash", where the tentative change involves changing a
   directory to a file (or vice versa), was confused, which has been
   corrected.

 * "git clone" from a repository whose HEAD is unborn into a bare
   repository didn't follow the branch name the other side used, which
   is corrected.

 * "git cvsserver" had a long-standing bug in its authentication code,
   which has finally been corrected (it is unclear and is a separate
   question if anybody is seriously using it, though).

 * "git difftool --dir-diff" mishandled symbolic links.

 * Sensitive data in the HTTP trace were supposed to be redacted, but
   we failed to do so in HTTP/2 requests.

 * "make clean" has been updated to remove leftover .depend/
   directories, even when it is not told to use them to compute header
   dependencies.

 * Protocol v0 clients can get stuck parsing a malformed feature line.

 * A few kinds of changes "git status" can show were not documented.
   (merge d2a534c515 ja/doc-status-types-and-copies later to maint).

 * The mergesort implementation used to sort linked list has been
   optimized.
   (merge c90cfc225b rs/mergesort later to maint).

 * An editor session launched during a Git operation (e.g. during 'git
   commit') can leave the terminal in a funny state.  The code path
   has updated to save the terminal state before, and restore it
   after, it spawns an editor.
   (merge 3d411afabc cm/save-restore-terminal later to maint).

 * "git cat-file --batch" with the "--batch-all-objects" option is
   supposed to iterate over all the objects found in a repository, but
   it used to translate these object names using the replace mechanism,
   which defeats the point of enumerating all objects in the repository.
   This has been corrected.
   (merge bf972896d7 jk/cat-file-batch-all-wo-replace later to maint).

 * Recent sparse-index work broke safety against attempts to add paths
   with trailing slashes to the index, which has been corrected.
   (merge c8ad9d04c6 rs/make-verify-path-really-verify-again later to maint).

 * The "--color-lines" and "--color-by-age" options of "git blame"
   have been missing, which are now documented.
   (merge 8c32856133 bs/doc-blame-color-lines later to maint).

 * The PATH used in CI job may be too wide and let incompatible dlls
   to be grabbed, which can cause the build&test to fail.  Tighten it.
   (merge 7491ef6198 js/windows-ci-path-fix later to maint).

 * Avoid performance measurements from getting ruined by gc and other
   housekeeping pauses interfering in the middle.
   (merge be79131a53 rs/disable-gc-during-perf-tests later to maint).

 * Stop "git add --dry-run" from creating new blob and tree objects.
   (merge e578d0311d rs/add-dry-run-without-objects later to maint).

 * "git commit" gave duplicated error message when the object store
   was unwritable, which has been corrected.
   (merge 4ef91a2d79 ab/fix-commit-error-message-upon-unwritable-object-store later to maint).

 * Recent sparse-index addition, namely any use of index_name_pos(),
   can expand sparse index entries and breaks any code that walks
   cache-tree or existing index entries.  One such instance of such a
   breakage has been corrected.

 * The xxdiff difftool backend can exit with status 128, which the
   difftool-helper that launches the backend takes as a significant
   failure, when it is not significant at all.  Work it around.
   (merge 571f4348dd da/mergetools-special-case-xxdiff-exit-128 later to maint).

 * Improve test framework around unwritable directories.
   (merge 5d22e18965 ab/test-cleanly-recreate-trash-directory later to maint).

 * "git push" client talking to an HTTP server did not diagnose the
   lack of the final status report from the other side correctly,
   which has been corrected.
   (merge c5c3486f38 jk/http-push-status-fix later to maint).

 * Update "git archive" documentation and give explicit mention on the
   compression level for both zip and tar.gz format.
   (merge c4b208c309 bs/archive-doc-compression-level later to maint).

 * Drop "git sparse-index" from the list of common commands.
   (merge 6a9a50a8af sg/sparse-index-not-that-common-a-command later to maint).

 * "git branch -c/-m new old" was not described to copy config, which
   has been corrected.
   (merge 8252ec300e jc/branch-copy-doc later to maint).

 * Squelch over-eager warning message added during this cycle.
   (merge 9e8fe7b1c7 jk/log-warn-on-bogus-encoding later to maint).

 * Fix long-standing shell syntax error in the completion script.
   (merge 46b0585286 re/completion-fix-test-equality later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge f188160be9 ab/bundle-remove-verbose-option later to maint).
   (merge 8c6b4332b4 rs/close-pack-leakfix later to maint).
   (merge 51b04c05b7 bs/difftool-msg-tweak later to maint).
   (merge dd20e4a6db ab/make-compdb-fix later to maint).
   (merge 6ffb990dc4 os/status-docfix later to maint).
   (merge 100c2da2d3 rs/p3400-lose-tac later to maint).
   (merge 76f3b69896 tb/aggregate-ignore-leading-whitespaces later to maint).
   (merge 6e4fd8bfcd tz/doc-link-to-bundle-format-fix later to maint).
   (merge f6c013dfa1 jc/doc-commit-header-continuation-line later to maint).
   (merge ec9a37d69b ab/pkt-line-cleanup later to maint).
   (merge 8650c6298c ab/fix-make-lint-docs later to maint).
   (merge 1c720357ce ab/test-lib-diff-cleanup later to maint).
   (merge 6b615dbece ks/submodule-add-message-fix later to maint).
   (merge 82a57cd13f ma/doc-git-version later to maint).

----------------------------------------------------------------

Changes since v2.33.0 are as follows:

Alex Henrie (1):
      pull: abort if --ff-only is given and fast-forwarding is impossible

Andrzej Hunt (1):
      connect: also update offset for features without values

Atharva Raykar (11):
      submodule--helper: introduce add-config subcommand
      submodule--helper: add options for compute_submodule_clone_url()
      submodule--helper: refactor resolve_relative_url() helper
      submodule--helper: remove repeated code in sync_submodule()
      dir: libify and export helper functions from clone.c
      submodule--helper: convert the bulk of cmd_add() to C
      submodule--helper: remove add-clone subcommand
      submodule--helper: remove add-config subcommand
      submodule--helper: remove resolve-relative-url subcommand
      submodule--helper: rename compute_submodule_clone_url()
      submodule--helper: run update procedures from C

Azeem Bande-Ali (1):
      help.c: help.autocorrect=prompt waits for user action

Bagas Sanjaya (8):
      make: add INSTALL_STRIP option variable
      Documentation: fix default directory of git bugreport -o
      ls-files: use imperative mood for -X and -z option description
      difftool: fix word spacing in the usage strings
      blame: describe default output format
      bisect--helper: add space between colon and following sentence
      blame: document --color-* options
      archive: describe compression level option

Ben Boeckel (2):
      advice: add enum variants for missing advice variables
      advice: remove read uses of most global `advice_` variables

Carlo Marcelo Arenas Belón (23):
      build: update detect-compiler for newer Xcode version
      builtin/merge: avoid -Wformat-extra-args from ancient Xcode
      ci: run a pedantic build as part of the GitHub workflow
      ci: update freebsd 12 cirrus job
      ci: use upload-artifacts v1 for dockerized jobs
      remote: avoid -Wunused-but-set-variable in gcc with -DNDEBUG
      win32: allow building with pedantic mode enabled
      developer: enable pedantic by default
      t0301: fixes for windows compatibility
      credential-cache: check for windows specific errors
      git-compat-util: include declaration for unix sockets in windows
      tree-diff: fix leak when not HAVE_ALLOCA_H
      t0000: avoid masking git exit value through pipes
      git-cvsserver: use crypt correctly to compare password hashes
      git-cvsserver: protect against NULL in crypt(3)
      Documentation: cleanup git-cvsserver
      unicode: update the width tables to Unicode 14
      simple-ipc: move definition of ipc_active_state outside of ifdef
      lazyload.h: use an even more generic function pointer than FARPROC
      Makefile: restrict -Wpedantic and -Wno-pedantic-ms-format better
      terminal: teach git how to save/restore its terminal settings
      editor: save and reset terminal after calling EDITOR
      wrapper: remove xunsetenv()

David Aguilar (6):
      difftool: fix symlink-file writing in dir-diff mode
      difftool: create a tmpdir path without repeated slashes
      difftool: refactor dir-diff to write files using helper functions
      difftool: remove an unnecessary call to strbuf_release()
      difftool: add a missing space to the run_dir_diff() comments
      mergetools/xxdiff: prevent segfaults from stopping difftool

David Turner (3):
      t4060: remove unused variable
      diff --submodule=diff: do not fail on ever-initialied deleted submodules
      diff --submodule=diff: don't print failure message twice

Derrick Stolee (35):
      t1092: test merge conflicts outside cone
      add: allow operating on a sparse-only index
      pathspec: stop calling ensure_full_index
      add: ignore outside the sparse-checkout in refresh()
      add: remove ensure_full_index() with --renormalize
      maintenance: skip bootout/bootstrap when plist is registered
      t7519: rewrite sparse index test
      sparse-index: silently return when not using cone-mode patterns
      unpack-trees: fix nested sparse-dir search
      sparse-index: silently return when cache tree fails
      sparse-index: use WRITE_TREE_MISSING_OK
      sparse-checkout: create helper methods
      attr: be careful about sparse directories
      sparse-index: add SPARSE_INDEX_MEMORY_ONLY flag
      sparse-checkout: clear tracked sparse dirs
      diff: ignore sparse paths in diffstat
      merge: make sparse-aware with ORT
      merge-ort: expand only for out-of-cone conflicts
      t1092: add cherry-pick, rebase tests
      sequencer: ensure full index if not ORT strategy
      sparse-index: integrate with cherry-pick and rebase
      t/perf/run: fix bin-wrappers computation
      t3705: test that 'sparse_entry' is unstaged
      t1092: behavior for adding sparse files
      dir: select directories correctly
      dir: fix pattern matching on dirs
      add: fail when adding an untracked sparse file
      add: skip tracked paths outside sparse-checkout cone
      add: implement the --sparse option
      add: update --chmod to skip sparse paths
      add: update --renormalize to skip sparse paths
      rm: add --sparse option
      rm: skip sparse paths with missing SKIP_WORKTREE
      mv: refuse to move sparse paths
      advice: update message to suggest '--sparse'

Elijah Newren (48):
      t7601: test interaction of merge/rebase/fast-forward flags and options
      t7601: add tests of interactions with multiple merge heads and config
      pull: since --ff-only overrides, handle it first
      pull: make --rebase and --no-rebase override pull.ff=only
      pull: abort by default when fast-forwarding is not possible
      pull: update docs & code for option compatibility with rebasing
      pull: fix handling of multiple heads
      merge-ort: rename str{map,intmap,set}_func()
      diffcore-rename: use a mem_pool for exact rename detection's hashmap
      merge-ort: add pool_alloc, pool_calloc, and pool_strndup wrappers
      merge-ort: set up a memory pool
      merge-ort: switch our strmaps over to using memory pools
      diffcore-rename, merge-ort: add wrapper functions for filepair alloc/dealloc
      merge-ort: store filepairs and filespecs in our mem_pool
      merge-ort: reuse path strings in pool_alloc_filespec
      merge-ort: remove compile-time ability to turn off usage of memory pools
      git-rebase.txt: correct antiquated claims about --rebase-merges
      directory-rename-detection.txt: small updates due to merge-ort optimizations
      Documentation: edit awkward references to `git merge-recursive`
      merge-strategies.txt: update wording for the resolve strategy
      merge-strategies.txt: do not imply using copy detection is desired
      merge-strategies.txt: avoid giving special preference to patience algorithm
      merge-strategies.txt: fix simple capitalization error
      git-rebase.txt: correct out-of-date and misleading text about renames
      merge-strategies.txt: add coverage of the `ort` merge strategy
      Update error message and code comment
      Change default merge backend from recursive to ort
      Update docs for change of default merge backend
      t3903: document a pair of directory/file bugs
      stash: avoid feeding directories to update-index
      stash: restore untracked files AFTER restoring tracked files
      git-am.txt: clarify --abort behavior
      t4151: add a few am --abort tests
      am: fix incorrect exit status on am fail to abort
      tests: remove leftover untracked files
      trace2.h: fix trivial comment typo
      merge-ort: fix completely wrong comment
      t2500: add various tests for nuking untracked files
      checkout, read-tree: fix leak of unpack_trees_options.dir
      read-tree, merge-recursive: overwrite ignored files by default
      unpack-trees: introduce preserve_ignored to unpack_trees_options
      unpack-trees: make dir an internal-only struct
      Remove ignored files by default when they are in the way
      Change unpack_trees' 'reset' flag into an enum
      unpack-trees: avoid nuking untracked dir in way of unmerged file
      unpack-trees: avoid nuking untracked dir in way of locally deleted file
      Comment important codepaths regarding nuking untracked files/dirs
      Documentation: call out commands that nuke untracked files/directories

Emily Shaffer (3):
      tr2: make process info collection platform-generic
      tr2: log parent process name
      hook.c: add a hook_exists() wrapper and use it in bugreport.c

Eric Wong (1):
      doc/technical: update note about core.multiPackIndex

Fabian Stelzer (11):
      ssh signing: preliminary refactoring and clean-up
      ssh signing: add test prereqs
      ssh signing: add ssh key format and signing code
      ssh signing: retrieve a default key from ssh-agent
      ssh signing: provide a textual signing_key_id
      ssh signing: verify signatures using ssh-keygen
      ssh signing: duplicate t7510 tests for commits
      ssh signing: tests for logs, tags & push certs
      ssh signing: test that gpg fails for unknown keys
      ssh signing: fmt-merge-msg tests & config parse
      ssh signing: clarify trustlevel usage in docs

Felipe Contreras (4):
      completion: bash: fix prefix detection in branch.*
      completion: bash: fix for suboptions with value
      completion: bash: fix for multiple dash commands
      completion: bash: add correct suffix in variables

Glen Choo (1):
      MyFirstContribution: Document --range-diff option when writing v2

Greg Hurrell (1):
      gitweb: use HEAD as secondary sort key in git_get_heads_list()

Han-Wen Nienhuys (14):
      t6050: use git-update-ref rather than filesystem access
      t1503: mark symlink test as REFFILES
      t6120: use git-update-ref rather than filesystem access
      t3320: use git-symbolic-ref rather than filesystem access
      t2402: use ref-store test helper to create broken symlink
      t1405: use 'git reflog exists' to check reflog existence
      t1405: mark test for 'git pack-refs' as REFFILES
      t1410: mark test as REFFILES
      t7064: use update-ref -d to remove upstream branch
      t6500: use "ls -1" to snapshot ref database state
      t6001: avoid direct file system access
      refs: remove EINVAL errno output from specification of read_raw_ref_fn
      refs/files-backend: stop setting errno from lock_ref_oid_basic
      refs: make errno output explicit for read_raw_ref_fn

Jacob Vosmaer (2):
      pkt-line: add stdio packet write functions
      upload-pack: use stdio in send_ref callbacks

Jeff Hostetler (8):
      sparse-index: copy dir_hash in ensure_full_index()
      trace2: add trace2_child_ready() to report on background children
      simple-ipc: preparations for supporting binary messages.
      simple-ipc/ipc-win32: add trace2 debugging
      simple-ipc/ipc-win32: add Windows ACL to named pipe
      run-command: create start_bg_command
      t/helper/simple-ipc: convert test-simple-ipc to use start_bg_command
      t/perf/perf-lib.sh: remove test_times.* at the end test_perf_()

Jeff King (72):
      http: drop support for curl < 7.11.1
      http: drop support for curl < 7.16.0
      http: drop support for curl < 7.19.4
      build: clang version may not be followed by extra words
      range-diff: drop useless "offset" variable from read_patches()
      range-diff: handle unterminated lines in read_patches()
      range-diff: use ssize_t for parsed "len" in read_patches()
      apply: keep buffer/size pair in sync when parsing binary hunks
      t5323: drop mentions of "master"
      refs: drop unused "flags" parameter to lock_ref_oid_basic()
      logmsg_reencode(): warn when iconv() fails
      docs: use "character encoding" to refer to commit-object encoding
      t0410: disable GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP
      t5310: disable GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP
      pack-bitmap: drop repository argument from prepare_midx_bitmap_git()
      pack-bitmap: drop bitmap_index argument from try_partial_reuse()
      t5562: use alarm() to interrupt timed child-wait
      t5551: test v2-to-v0 http protocol fallback
      http-backend: handle HTTP_GIT_PROTOCOL CGI variable
      docs/http-backend: mention v2 protocol
      docs/git: discuss server-side config for GIT_PROTOCOL
      docs/protocol-v2: point readers transport config discussion
      strvec: use size_t to store nr and alloc
      difftool: prepare "diff" cmdline in cmd_difftool()
      serve: rename is_command() to parse_command()
      serve: return capability "value" from get_capability()
      serve: add "receive" method for v2 capabilities table
      serve: provide "receive" function for object-format capability
      serve: provide "receive" function for session-id capability
      serve: drop "keys" strvec
      ls-refs: ignore very long ref-prefix counts
      docs/protocol-v2: clarify some ls-refs ref-prefix details
      serve: reject bogus v2 "command=ls-refs=foo"
      serve: reject commands used as capabilities
      ls-refs: reject unknown arguments
      t1400: avoid SIGPIPE race condition on fifo
      clone: handle unborn branch in bare repos
      grep: stop modifying buffer in strip_timestamp
      grep: stop modifying buffer in show_line()
      grep: stop modifying buffer in grep_source_1()
      grep: mark "haystack" buffers as const
      grep: store grep_source buffer as const
      http: match headers case-insensitively when redacting
      t7900: clean up some more broken refs
      t5516: don't use HEAD ref for invalid ref-deletion tests
      t5600: provide detached HEAD for corruption failures
      t5312: drop "verbose" helper
      t5312: create bogus ref as necessary
      t5312: test non-destructive repack
      t5312: be more assertive about command failure
      refs-internal.h: move DO_FOR_EACH_* flags next to each other
      refs-internal.h: reorganize DO_FOR_EACH_* flag documentation
      refs: add DO_FOR_EACH_OMIT_DANGLING_SYMREFS flag
      refs: omit dangling symrefs when using GIT_REF_PARANOIA
      refs: turn on GIT_REF_PARANOIA by default
      repack, prune: drop GIT_REF_PARANOIA settings
      ref-filter: stop setting FILTER_REFS_INCLUDE_BROKEN
      ref-filter: drop broken-ref code entirely
      refs: drop "broken" flag from for_each_fullref_in()
      test-read-midx: fix leak of bitmap_index struct
      t1006: clean up broken objects
      cat-file: mention --unordered along with --batch-all-objects
      cat-file: disable refs/replace with --batch-all-objects
      cat-file: split ordered/unordered batch-all-objects callbacks
      cat-file: use packed_object_info() for --batch-all-objects
      gpg-interface: fix leak of "line" in parse_ssh_output()
      gpg-interface: fix leak of strbufs in get_ssh_key_fingerprint()
      send-pack: complain about "expecting report" with --helper-status
      transport-helper: recognize "expecting report" error from send-pack
      submodule: drop unused sm_name parameter from append_fetch_remotes()
      Documentation/Makefile: fix lint-docs mkdir dependency
      log: document --encoding behavior on iconv() failure

Jiang Xin (1):
      ci: new github-action for git-l10n code review

Joel Klinghed (1):
      commit: restore --edit when combined with --fixup

Johannes Altmanninger (4):
      Documentation/git-status: remove impossible porcelain status DR and DC
      Documentation/diff-format: state in which cases porcelain status is T
      Documentation/git-status: document porcelain status T (typechange)
      Documentation/git-status: mention how to detect copies

Johannes Schindelin (24):
      tests: exercise the RUNTIME_PREFIX feature
      expand_user_path(): remove stale part of the comment
      expand_user_path(): clarify the role of the `real_home` parameter
      Use a better name for the function interpolating paths
      interpolate_path(): allow specifying paths relative to the runtime prefix
      maintenance: create `launchctl` configuration using a lock file
      t5520: do not use `pull.rebase=preserve`
      remote: warn about unhandled branch.<name>.rebase values
      tests: stop testing `git rebase --preserve-merges`
      pull: remove support for `--rebase=preserve`
      rebase: drop support for `--preserve-merges`
      git-svn: drop support for `--preserve-merges`
      rebase: drop the internal `rebase--interactive` command
      rebase: remove obsolete code comment
      rebase: stop mentioning the -p option in comments
      rebase: remove a no-longer-used function
      sequencer: restrict scope of a formerly public function
      commit-graph: when closing the graph, also release the slab
      pull: release packs before fetching
      run-command: prettify the `RUN_COMMAND_*` flags
      run-command: offer to close the object store before running
      run_auto_maintenance(): implicitly close the object store
      Close object store closer to spawning child processes
      ci(windows): ensure that we do not pick up random executables

Johannes Sixt (9):
      t9001: PATH must not use Windows-style paths
      lazyload.h: fix warnings about mismatching function pointer types
      t4034/cpp: actually test that operator tokens are not split
      t4034: add tests showing problematic cpp tokenizations
      userdiff-cpp: tighten word regex
      userdiff-cpp: prepare test cases with yet unsupported features
      userdiff-cpp: permit the digit-separating single-quote in numbers
      userdiff-cpp: learn the C++ spaceship operator
      userdiff-cpp: back out the digit-separators in numbers

Jonathan Tan (22):
      send-pack: fix push.negotiate with remote helper
      send-pack: fix push nego. when remote has refs
      fetch: die on invalid --negotiation-tip hash
      submodule: lazily add submodule ODBs as alternates
      grep: use submodule-ODB-as-alternate lazy-addition
      grep: typesafe versions of grep_source_init
      grep: read submodule entry with explicit repo
      grep: allocate subrepos on heap
      grep: add repository to OID grep sources
      submodule-config: pass repo upon blob config read
      t7814: show lack of alternate ODB-adding
      submodule: remove unnecessary unabsorbed fallback
      repository: support unabsorbed in repo_submodule_init
      revision: remove "submodule" from opt struct
      submodule: extract path to submodule gitdir func
      refs: plumb repo into ref stores
      refs: teach arbitrary repo support to iterators
      refs: peeling non-the_repository iterators is BUG
      merge-{ort,recursive}: remove add_submodule_odb()
      object-file: only register submodule ODB if needed
      submodule: pass repo to check_has_commit()
      submodule: trace adding submodule ODB as alternate

Josh Steadmon (2):
      connect, protocol: log negotiated protocol version
      sequencer: advise if skipping cherry-picked commit

Junio C Hamano (27):
      expand_user_path: allow in-flight topics to keep using the old name
      bisect: do not run show-branch just to show the current commit
      bisect: simplify return code from bisect_checkout()
      build: catch clang that identifies itself as "$VENDOR clang"
      userdiff: comment on the builtin patterns
      The first batch post 2.33
      The second batch
      The third batch
      apply: resolve trivial merge without hitting ll-merge with "--3way"
      hash-object: prefix_filename() returns allocated memory these days
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      The ninth batch
      The tenth batch
      The eleventh batch
      Twelfth batch
      Git 2.33.1
      signature-format.txt: explain and illustrate multi-line headers
      Thirteenth batch
      The fourteenth batch
      branch (doc): -m/-c copies config and reflog
      The fifteenth batch
      Revert "logmsg_reencode(): warn when iconv() fails"
      Git 2.34-rc0

Kaartic Sivaraam (1):
      submodule--helper: fix incorrect newlines in an error message

Kim Altintop (3):
      t5730: introduce fetch command helper
      upload-pack.c: treat want-ref relative to namespace
      docs: clarify the interaction of transfer.hideRefs and namespaces

Kyle Zhao (1):
      pack-revindex.h: correct the time complexity descriptions

Lénaïc Huard (4):
      cache.h: Introduce a generic "xdg_config_home_for(…)" function
      maintenance: `git maintenance run` learned `--scheduler=<scheduler>`
      maintenance: add support for systemd timers on Linux
      maintenance: fix test t7900-maintenance.sh

Mahi Kolla (1):
      clone: set submodule.recurse=true if submodule.stickyRecursiveClone enabled

Martin Ågren (6):
      config.txt: fix typo
      git.txt: fix typo
      git-multi-pack-index.txt: change "folder" to "directory"
      gitignore.txt: change "folder" to "directory"
      gitweb.txt: change "folder" to "directory"
      git-bundle.txt: add missing words and punctuation

Marvin Häuser (1):
      send-email: avoid incorrect header propagation

Matheus Tavares (3):
      checkout: make delayed checkout respect --quiet and --no-progress
      grep: demonstrate bug with textconv attributes and submodules
      add, rm, mv: fix bug that prevents the update of non-sparse dirs

Matthias Aßhauer (2):
      help: make sure local html page exists before calling external processes
      documentation: add documentation for 'git version'

Mickey Endito (1):
      t5582: remove spurious 'cd "$D"' line

Mike Hommey (1):
      credential: fix leak in credential_apply_config()

Miriam Rubio (3):
      t6030-bisect-porcelain: add tests to control bisect run exit cases
      t6030-bisect-porcelain: add test for bisect visualize
      bisect--helper: retire `--bisect-next-check` subcommand

Orgad Shaneh (1):
      doc: fix capitalization in "git status --porcelain=v2" description

Patrick Steinhardt (16):
      fetch-pack: speed up loading of refs via commit graph
      revision: separate walk and unsorted flags
      connected: do not sort input revisions
      revision: stop retrieving reference twice
      commit-graph: split out function to search commit position
      revision: avoid hitting packfiles when commits are in commit-graph
      ls-refs: reuse buffer when sending refs
      fetch: skip formatting updated refs with `--quiet`
      fetch: speed up lookup of want refs via commit-graph
      fetch: avoid unpacking headers in object existence check
      connected: refactor iterator to return next object ID directly
      fetch-pack: optimize loading of refs via commit graph
      fetch: refactor fetch refs to be more extendable
      fetch: merge fetching and consuming refs
      fetch: avoid second connectivity check if we already have all objects
      update-ref: fix streaming of status updates

Philip Oakley (1):
      doc: config, tell readers of `git help --config`

Philippe Blain (3):
      test-lib-functions: use 'TEST_SHELL_PATH' in 'test_pause'
      test-lib-functions: optionally keep HOME, TERM and SHELL in 'test_pause'
      test-lib-functions: keep user's debugger config files and TERM in 'debug'

Phillip Wood (21):
      t3403: fix commit authorship
      rebase --apply: restore some tests
      rebase --continue: remove .git/MERGE_MSG
      rebase -r: make 'merge -c' behave like reword
      rebase -i: add another reword test
      rebase -r: don't write .git/MERGE_MSG when fast-forwarding
      rebase -r: fix merge -c with a merge strategy
      t3407: run tests in $TEST_DIRECTORY
      t3407: use test_commit
      t3407: use test_cmp_rev
      t3407: rename a variable
      t3407: use test_path_is_missing
      t3407: strengthen rebase --abort tests
      t3407: rework rebase --quit tests
      rebase: use our standard error return value
      rebase: use lookup_commit_reference_by_name()
      rebase: dereference tags
      sequencer.c: factor out a function
      rebase: fix todo-list rereading
      sparse index: fix use-after-free bug in cache_tree_verify()
      t1092: run "rebase --apply" without "-q" in testing

Pranit Bauva (2):
      run-command: make `exists_in_PATH()` non-static
      bisect--helper: reimplement `bisect_visualize()` shell function in C

René Scharfe (34):
      compat: let git_mmap use malloc(3) directly
      xopen: explicitly report creation failures
      use xopen() to handle fatal open(2) failures
      show-branch: simplify rev_is_head()
      archive: convert queue_directory to struct object_id
      branch: allow deleting dangling branches with --force
      merge-recursive: use fspathcmp() in path_hashmap_cmp()
      range-diff: avoid segfault with -I
      setup: use xopen and xdup in sanitize_stdfds
      refs/files-backend: remove unused open mode parameter
      index-pack: use xopen in init_thread
      oidset: make oidset_size() an inline function
      midx: inline nth_midxed_pack_entry()
      packfile: convert mark_bad_packed_object() to object_id
      packfile: convert has_packed_and_bad() to object_id
      packfile: use oidset for bad objects
      compression: drop write-only core_compression_* variables
      packfile: release bad_objects in close_pack()
      test-mergesort: use strbuf_getline()
      test-mergesort: add sort subcommand
      test-mergesort: add test subcommand
      test-mergesort: add generate subcommand
      test-mergesort: add unriffle mode
      test-mergesort: add unriffle_skewed mode
      p0071: measure sorting of already sorted and reversed files
      p0071: test performance of llist_mergesort()
      mergesort: use ranks stack
      p3400: stop using tac(1)
      t3905: show failure to ignore sub-repo
      read-cache: add verify_path_internal()
      read-cache: let verify_path() reject trailing dir separators again
      test-mergesort: use repeatable random numbers
      perf: disable automatic housekeeping
      add: don't write objects with --dry-run

Robert Estelle (1):
      completion: fix incorrect bash/zsh string equality check

SZEDER Gábor (12):
      Makefile: remove archives before manipulating them with 'ar'
      column: fix parsing of the '--nl' option
      test-lib: set GIT_CEILING_DIRECTORIES to protect the surrounding repository
      t1600-index: remove unnecessary redirection
      t1600-index: don't run git commands upstream of a pipe
      t1600-index: disable GIT_TEST_SPLIT_INDEX
      read-cache: look for shared index files next to the index, too
      tests: disable GIT_TEST_SPLIT_INDEX for sparse index tests
      read-cache: fix GIT_TEST_SPLIT_INDEX
      commit-graph: fix bogus counter in "Scanning merged commits" progress line
      entry: show finer-grained counter in "Filtering content" progress line
      command-list.txt: remove 'sparse-index' from main help

Sergey Organov (1):
      diff-index: restore -c/--cc options handling

Takashi Iwai (1):
      completion: tcsh: Fix regression by drop of wrapper functions

Tal Kelrich (1):
      fast-export: fix anonymized tag using original length

Tanushree Tumane (1):
      bisect--helper: reimplement `bisect_run` shell function in C

Tassilo Horn (1):
      userdiff: improve java hunk header regex

Taylor Blau (55):
      pack-bitmap.c: harden 'test_bitmap_walk()' to check type bitmaps
      pack-bitmap-write.c: gracefully fail to write non-closed bitmaps
      pack-bitmap-write.c: free existing bitmaps
      Documentation: describe MIDX-based bitmaps
      object-store.h: teach for_each_packed_object to ignore kept packs
      builtin/pack-objects.c: simplify add_objects_in_unpacked_packs()
      builtin/pack-objects.c: remove duplicate hash lookup
      midx: disallow running outside of a repository
      midx: fix `*.rev` cleanups with `--object-dir`
      midx: clear auxiliary .rev after replacing the MIDX
      midx: reject empty `--preferred-pack`'s
      midx: infer preferred pack when not given one
      midx: close linked MIDXs, avoid leaking memory
      midx: avoid opening multiple MIDXs when writing
      pack-bitmap.c: introduce 'bitmap_num_objects()'
      pack-bitmap.c: introduce 'nth_bitmap_object_oid()'
      pack-bitmap.c: introduce 'bitmap_is_preferred_refname()'
      pack-bitmap.c: avoid redundant calls to try_partial_reuse
      pack-bitmap: read multi-pack bitmaps
      pack-bitmap: write multi-pack bitmaps
      t5310: move some tests to lib-bitmap.sh
      t/helper/test-read-midx.c: add --checksum mode
      t5326: test multi-pack bitmap behavior
      t5319: don't write MIDX bitmaps in t5319
      t7700: update to work with MIDX bitmap test knob
      midx: respect 'GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP'
      p5310: extract full and partial bitmap tests
      p5326: perf tests for MIDX bitmaps
      bulk-checkin.c: store checksum directly
      pack-write.c: rename `.idx` files after `*.rev`
      builtin/repack.c: move `.idx` files into place last
      builtin/index-pack.c: move `.idx` files into place last
      t/helper/test-bitmap.c: add 'dump-hashes' mode
      pack-bitmap.c: propagate namehash values from existing bitmaps
      midx.c: respect 'pack.writeBitmapHashcache' when writing bitmaps
      p5326: create missing 'perf-tag' tag
      p5326: don't set core.multiPackIndex unnecessarily
      p5326: generate pack bitmaps before writing the MIDX bitmap
      t5326: test propagating hashcache values
      builtin/commit-graph.c: don't accept common --[no-]progress
      builtin/multi-pack-index.c: disable top-level --[no-]progress
      midx: expose `write_midx_file_only()` publicly
      builtin/multi-pack-index.c: support `--stdin-packs` mode
      midx: preliminary support for `--refs-snapshot`
      builtin/repack.c: keep track of existing packs unconditionally
      builtin/repack.c: rename variables that deal with non-kept packs
      builtin/repack.c: extract showing progress to a variable
      builtin/repack.c: support writing a MIDX while repacking
      builtin/repack.c: make largest pack preferred
      builtin/repack.c: pass `--refs-snapshot` when writing bitmaps
      t/perf/aggregate.perl: tolerate leading spaces
      midx.c: extract MIDX lookup by object_dir
      midx.c: lookup MIDX by object directory during expire
      midx.c: lookup MIDX by object directory during repack
      midx.c: guard against commit_lock_file() failures

Teng Long (1):
      list-objects.c: rename "traverse_trees_and_blobs" to "traverse_non_commits"

Todd Zullinger (1):
      doc: add bundle-format to TECH_DOCS

USAMI Kenta (1):
      userdiff: support enum keyword in PHP hunk header

Wesley Schwengle (1):
      Document `rebase.forkpoint` in rebase man page

ZheNing Hu (6):
      ref-filter: add obj-type check in grab contents
      ref-filter: add %(raw) atom
      ref-filter: --format=%(raw) support --perl
      ref-filter: use non-const ref_format in *_atom_parser()
      ref-filter: add %(rest) atom
      cherry-pick: use better advice message

Zoker (1):
      doc: fix syntax error and the format of printf

brian m. carlson (1):
      t5607: avoid using prerequisites to select algorithm

Ævar Arnfjörð Bjarmason (221):
      pack-objects tests: cover blindspots in stdin handling
      Makefile: move ".PHONY: cscope" near its target
      Makefile: add QUIET_GEN to "cscope" target
      pack-objects: fix segfault in --stdin-packs option
      test-lib tests: move "run_sub_test" to a new lib-subtest.sh
      Makefile: don't use "FORCE" for tags targets
      http: drop support for curl < 7.19.3 and < 7.17.0 (again)
      http: rename CURLOPT_FILE to CURLOPT_WRITEDATA
      bundle doc: elaborate on object prerequisites
      bundle doc: elaborate on rev<->ref restriction
      bundle doc: rewrite the "DESCRIPTION" section
      bundle doc: replace "basis" with "prerequsite(s)"
      serve: mark has_capability() as static
      transport: rename "fetch" in transport_vtable to "fetch_refs"
      transport: use designated initializers
      serve: use designated initializers
      serve.[ch]: don't pass "struct strvec *keys" to commands
      serve: move transfer.advertiseSID check into session_id_advertise()
      serve.c: move version line to advertise_capabilities()
      {upload,receive}-pack tests: add --advertise-refs tests
      serve.[ch]: remove "serve_options", split up --advertise-refs code
      upload-pack: document and rename --advertise-refs
      Makefile: remove "cscope.out", not "cscope*" in cscope.out target
      Makefile: normalize clobbering & xargs for tags targets
      refs/packet: add missing BUG() invocations to reflog callbacks
      refs/files: remove unused REF_DELETING in lock_ref_oid_basic()
      ls-remote: set packet_trace_identity(<name>)
      rebase: emit one "fatal" in "fatal: fatal: <error>"
      advice: remove use of global advice_add_embedded_repo
      advice: move advice.graftFileDeprecated squashing to commit.[ch]
      refs/files: remove unused "extras/skip" in lock_ref_oid_basic()
      refs/files: remove unused "skip" in lock_raw_ref() too
      refs/debug: re-indent argument list for "prepare"
      refs: make repo_dwim_log() accept a NULL oid
      refs/files: add a comment about refs_reflog_exists() call
      reflog expire: don't lock reflogs using previously seen OID
      refs API: remove OID argument to reflog_expire()
      refs/files: remove unused "oid" in lock_ref_oid_basic()
      refs/files: remove unused "errno == EISDIR" code
      refs/files: remove unused "errno != ENOTDIR" condition
      refs file backend: move raceproof_create_file() here
      bundle API: start writing API documentation
      commit-graph: define common usage with a macro
      commit-graph: remove redundant handling of -h
      commit-graph: use parse_options_concat()
      multi-pack-index: refactor "goto usage" pattern
      commit-graph: early exit to "usage" on !argc
      commit-graph: show usage on "commit-graph [write|verify] garbage"
      commit-graph: show "unexpected subcommand" error
      protocol-caps.c: fix memory leak in send_info()
      mailmap.c: fix a memory leak in free_mailap_{info,entry}()
      gc: remove trailing dot from "gc.log" line
      gettext: remove optional non-standard parens in N_() definition
      bundle API: change "flags" to be "extra_index_pack_args"
      index-pack: add --progress-title option
      bundle: show progress on "unbundle"
      tr2: remove NEEDSWORK comment for "non-procfs" implementations
      tr2: clarify TRACE2_PROCESS_INFO_EXIT comment under Linux
      tr2: stop leaking "thread_name" memory
      tr2: leave the parent list empty upon failure & don't leak memory
      tr2: do compiler enum check in trace2_collect_process_info()
      tr2: log N parent process names on Linux
      send-email: fix a "first config key wins" regression in v2.33.0
      Makefile: remove the check_bindir script
      pack-write: skip *.rev work when not writing *.rev
      pack.h: line-wrap the definition of finish_tmp_packfile()
      pack-write: refactor renaming in finish_tmp_packfile()
      index-pack: refactor renaming in final()
      pack-write: split up finish_tmp_packfile() function
      pack-objects: rename .idx files into place after .bitmap files
      help: correct the usage string in -h and documentation
      INSTALL: don't mention the "curl" executable at all
      INSTALL: reword and copy-edit the "libcurl" section
      git-submodule: remove unused is_zero_oid() function
      git-sh-setup: remove unused "pull with rebase" message
      git-bisect: remove unused SHA-1 $x40 shell variable
      test-lib: remove unused $_x40 and $_z40 variables
      test-tool run-command: fix flip-flop init pattern
      gc: remove unused launchctl_get_uid() call
      parse-options API users: align usage output in C-strings
      send-pack: properly use parse_options() API for usage string
      git rev-parse --parseopt tests: add more usagestr tests
      difftool: prepare "struct child_process" in cmd_difftool()
      difftool: use run_command() API in run_file_diff()
      parse-options API: remove OPTION_ARGUMENT feature
      INSTALL: mention that we need libcurl 7.19.4 or newer to build
      Makefile: drop support for curl < 7.9.8 (again)
      http: drop support for curl < 7.18.0 (again)
      http: correct version check for CURL_HTTP_VERSION_2
      http: correct curl version check for CURLOPT_PINNEDPUBLICKEY
      http: centralize the accounting of libcurl dependencies
      http: don't hardcode the value of CURL_SOCKOPT_OK
      wrapper.c: add x{un,}setenv(), and use xsetenv() in environment.c
      environment.c: remove test-specific "ignore_untracked..." variable
      read-cache & fetch-negotiator: check "enum" values in switch()
      repo-settings.c: simplify the setup
      repository.h: don't use a mix of int and bitfields
      Makefile: clean .depend dirs under COMPUTE_HEADER_DEPENDENCIES != yes
      parse-options: properly align continued usage output
      test-lib tests: split up "write and run" into two functions
      test-lib tests: don't provide a description for the sub-tests
      test-lib tests: avoid subshell for "test_cmp" for readability
      test-lib tests: refactor common part of check_sub_test_lib_test*()
      test-lib tests: assert 1 exit code, not non-zero
      test-lib tests: get rid of copy/pasted mock test code
      Makefile: make the "sparse" target non-.PHONY
      Makefile: make COMPUTE_HEADER_DEPENDENCIES=auto work with DEVOPTS=pedantic
      help: correct usage & behavior of "git help --guides"
      help tests: add test for --config output
      help: correct logic error in combining --all and --config
      help: correct logic error in combining --all and --guides
      help: simplify by moving to OPT_CMDMODE()
      help tests: test --config-for-completion option & output
      help / completion: make "git help" do the hard work
      help: move column config discovery to help.c library
      Makefile: add SANITIZE=leak flag to GIT-BUILD-OPTIONS
      tests: add a test mode for SANITIZE=leak, run it in CI
      bundle: remove ignored & undocumented "--verbose" flag
      Makefile: mark "check" target as .PHONY
      Makefile: stop hardcoding {command,config}-list.h
      Makefile: don't perform "mv $@+ $@" dance for $(GENERATED_H)
      Makefile: remove an out-of-date comment
      hook.[ch]: move find_hook() from run-command.c to hook.c
      hook.c users: use "hook_exists()" instead of "find_hook()"
      hook-list.h: add a generated list of hooks, like config-list.h
      http: check CURLE_SSL_PINNEDPUBKEYNOTMATCH when emitting errors
      Makefile: pass -Wno-pendantic under GENERATE_COMPILATION_DATABASE=yes
      submodule-config.h: remove unused SUBMODULE_INIT macro
      *.[ch] *_INIT macros: use { 0 } for a "zero out" idiom
      *.h _INIT macros: don't specify fields equal to 0
      *.h: move some *_INIT to designated initializers
      cbtree.h: define cb_init() in terms of CBTREE_INIT
      daemon.c: refactor hostinfo_init() to HOSTINFO_INIT macro
      builtin/blame.c: refactor commit_info_init() to COMMIT_INFO_INIT macro
      string-list.[ch]: remove string_list_init() compatibility function
      config.c: remove unused git_config_key_is_valid()
      refs.[ch]: remove unused ref_storage_backend_exists()
      refs/ref-cache.[ch]: remove unused remove_entry_from_dir()
      refs/ref-cache.[ch]: remove unused add_ref_entry()
      refs/ref-cache.c: remove "mkdir" parameter from find_containing_dir()
      refs/ref-cache.[ch]: remove "incomplete" from create_dir_entry()
      parse-options.h: move PARSE_OPT_SHELL_EVAL between enums
      urlmatch.[ch]: add and use URLMATCH_CONFIG_INIT
      builtin/remote.c: add and use a REF_STATES_INIT
      builtin/remote.c: add and use SHOW_INFO_INIT
      builtin.h: remove cmd_tar_tree() declaration
      grep.h: remove unused grep_threads_ok() declaration
      log-tree.h: remove unused function declarations
      config.h: remove unused git_config_get_untracked_cache() declaration
      fsck tests: add test for fsck-ing an unknown type
      fsck tests: refactor one test to use a sub-repo
      fsck tests: test current hash/type mismatch behavior
      fsck tests: test for garbage appended to a loose object
      cat-file tests: move bogus_* variable declarations earlier
      cat-file tests: test for missing/bogus object with -t, -s and -p
      cat-file tests: add corrupt loose object test
      cat-file tests: test for current --allow-unknown-type behavior
      object-file.c: don't set "typep" when returning non-zero
      object-file.c: return -1, not "status" from unpack_loose_header()
      object-file.c: make parse_loose_header_extended() public
      object-file.c: simplify unpack_loose_short_header()
      object-file.c: use "enum" return type for unpack_loose_header()
      object-file.c: return ULHR_TOO_LONG on "header too long"
      object-file.c: stop dying in parse_loose_header()
      fsck: don't hard die on invalid object types
      fsck: report invalid object type-path combinations
      unpack-trees: don't leak memory in verify_clean_subdirectory()
      tests: fix a memory leak in test-prio-queue.c
      tests: fix a memory leak in test-parse-options.c
      tests: fix a memory leak in test-oidtree.c
      tests: fix test-oid-array leak, test in SANITIZE=leak
      ls-files: fix a trivial dir_clear() leak
      ls-files: add missing string_list_clear()
      merge: add missing strbuf_release()
      parse-options.[ch]: consistently use "enum parse_opt_flags"
      parse-options.[ch]: consistently use "enum parse_opt_result"
      parse-options.c: use exhaustive "case" arms for "enum parse_opt_result"
      parse-options.h: make the "flags" in "struct option" an enum
      parse-options.c: move optname() earlier in the file
      commit-graph: stop using optname()
      parse-options.[ch]: make opt{bug,name}() "static"
      parse-options tests: test optname() output
      parse-options: change OPT_{SHORT,UNSET} to an enum
      unwritable tests: assert exact error output
      commit: fix duplication regression in permission error output
      leak tests: run various built-in tests in t00*.sh SANITIZE=leak
      leak tests: run various "test-tool" tests in t00*.sh SANITIZE=leak
      leak tests: mark all ls-tree tests as passing with SANITIZE=leak
      leak tests: mark all trace2 tests as passing with SANITIZE=leak
      leak tests: mark all checkout-index tests as passing with SANITIZE=leak
      leak tests: mark some ls-files tests as passing with SANITIZE=leak
      leak tests: mark some read-tree tests as passing with SANITIZE=leak
      leak tests: mark various "generic" tests as passing with SANITIZE=leak
      leak tests: mark some misc tests as passing with SANITIZE=leak
      sequencer: add a "goto cleanup" to do_reset()
      sequencer: fix a memory leak in do_reset()
      test-lib.sh: de-duplicate error() teardown code
      test-lib.sh: use "Bail out!" syntax on bad SANITIZE=leak use
      test-lib.sh: try to re-chmod & retry on failed trash removal
      "lib-diff" tests: make "README" and "COPYING" test data smaller
      tests: stop using top-level "README" and "COPYING" files
      doc lint: fix error-hiding regression
      doc lint: emit errors on STDERR
      doc build: speed up "make lint-docs"
      doc lint: make "lint-docs" non-.PHONY
      pkt-line.[ch]: remove unused packet_buf_write_len()
      pkt-line.[ch]: remove unused packet_read_line_buf()
      git config doc: fix recent ASCIIDOC formatting regression
      tag: use a "goto cleanup" pattern, leak less memory
      ref-filter API user: add and use a ref_sorting_release()
      branch: use ref_sorting_release()
      git-sh-i18n: remove unused eval_ngettext()
      git-sh-setup: remove messaging supporting --preserve-merges
      Makefile: remove redundant GIT-CFLAGS dependency from "sparse"
      config.c: don't leak memory in handle_path_include()
      grep: prefer "struct grep_opt" over its "void *" equivalent
      grep: use object_array_clear() in cmd_grep()
      grep: fix a "path_list" memory leak
      clone: fix a memory leak of the "git_dir" variable
      submodule--helper: fix small memory leaks
      reflog: free() ref given to us by dwim_log()

Đoàn Trần Công Danh (3):
      t6300: don't run cat-file on non-existent object
      t6300: check for cat-file exit status code
      diff-lib: ignore paths that are outside $cwd if --relative asked


^ permalink raw reply	[relevance 3%]

* What's cooking in git.git (Sep 2021, #07; Thu, 23)
@ 2021-09-23 23:22  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2021-09-23 23:22 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking in my tree.  Commits
prefixed with '+' are in 'next' (being in 'next' is a sign that a
topic is stable enough to be used and are candidate to be in a
future release).  Commits prefixed with '-' are only in 'seen',
which means nothing more than that I have found them of interest for
some reason (like "it may have hard-to-resolve conflicts with
another topic already in flight" or "this may turn out to be
useful").  Do not read too much into a topic being in (or not in)
'seen'.  The ones marked with '.' do not appear in any of the
integration branches, but I am still holding onto them.

The eighth batch is out.

Copies of the source code to Git live in many repositories, and the
following is a list of the ones I push into or their mirrors.  Some
repositories have only a subset of branches.

With maint, master, next, seen, todo:

	git://git.kernel.org/pub/scm/git/git.git/
	git://repo.or.cz/alt-git.git/
	https://kernel.googlesource.com/pub/scm/git/git/
	https://github.com/git/git/
	https://gitlab.com/git-vcs/git/

With all the integration branches and topics broken out:

	https://github.com/gitster/git/

Even though the preformatted documentation in HTML and man format
are not sources, they are published in these repositories for
convenience (replace "htmldocs" with "manpages" for the manual
pages):

	git://git.kernel.org/pub/scm/git/git-htmldocs.git/
	https://github.com/gitster/git-htmldocs.git/

Release tarballs are available at:

	https://www.kernel.org/pub/software/scm/git/

--------------------------------------------------
[Graduated to 'master']

* ab/gc-remove-unused-call (2021-09-12) 1 commit
  (merged to 'next' on 2021-09-13 at 14f69ed198)
 + gc: remove unused launchctl_get_uid() call

 Code clean-up.


* ab/http-drop-old-curl-plus (2021-09-13) 9 commits
  (merged to 'next' on 2021-09-15 at 16aaab36f1)
 + http: don't hardcode the value of CURL_SOCKOPT_OK
 + http: centralize the accounting of libcurl dependencies
 + http: correct curl version check for CURLOPT_PINNEDPUBLICKEY
 + http: correct version check for CURL_HTTP_VERSION_2
 + http: drop support for curl < 7.18.0 (again)
 + Makefile: drop support for curl < 7.9.8 (again)
 + INSTALL: mention that we need libcurl 7.19.4 or newer to build
 + INSTALL: reword and copy-edit the "libcurl" section
 + INSTALL: don't mention the "curl" executable at all

 Conditional compilation around versions of libcURL has been
 straightened out.


* ab/retire-option-argument (2021-09-12) 4 commits
  (merged to 'next' on 2021-09-15 at 0bd7ce1161)
 + parse-options API: remove OPTION_ARGUMENT feature
 + difftool: use run_command() API in run_file_diff()
 + difftool: prepare "diff" cmdline in cmd_difftool()
 + difftool: prepare "struct child_process" in cmd_difftool()
 (this branch is used by da/difftool.)

 An oddball OPTION_ARGUMENT feature has been removed from the
 parse-options API.


* ab/test-tool-run-command-cleanup (2021-09-12) 1 commit
  (merged to 'next' on 2021-09-13 at 086310d0f4)
 + test-tool run-command: fix flip-flop init pattern

 Code clean-up.


* ab/unused-script-helpers (2021-09-12) 4 commits
  (merged to 'next' on 2021-09-15 at 14e6b0f26e)
 + test-lib: remove unused $_x40 and $_z40 variables
 + git-bisect: remove unused SHA-1 $x40 shell variable
 + git-sh-setup: remove unused "pull with rebase" message
 + git-submodule: remove unused is_zero_oid() function

 Code clean-up.


* cb/plug-leaks-in-alloca-emu-users (2021-09-16) 2 commits
  (merged to 'next' on 2021-09-16 at 2eecae2de3)
 + t0000: avoid masking git exit value through pipes
 + tree-diff: fix leak when not HAVE_ALLOCA_H

 Leakfix.


* cb/unix-sockets-with-windows (2021-09-14) 3 commits
  (merged to 'next' on 2021-09-16 at e2921332ef)
 + git-compat-util: include declaration for unix sockets in windows
 + credential-cache: check for windows specific errors
 + t0301: fixes for windows compatibility

 Adjust credential-cache helper to Windows.


* en/am-abort-fix (2021-09-10) 3 commits
  (merged to 'next' on 2021-09-13 at 11f3d2dc90)
 + am: fix incorrect exit status on am fail to abort
 + t4151: add a few am --abort tests
 + git-am.txt: clarify --abort behavior
 (this branch is used by en/removing-untracked-fixes.)

 When "git am --abort" fails to abort correctly, it still exited
 with exit status of 0, which has been corrected.


* en/tests-cleanup-leftover-untracked (2021-09-12) 1 commit
  (merged to 'next' on 2021-09-13 at cf38118205)
 + tests: remove leftover untracked files

 Test clean-up.


* jk/http-server-protocol-versions (2021-09-10) 5 commits
  (merged to 'next' on 2021-09-13 at 9174cd6d37)
 + docs/protocol-v2: point readers transport config discussion
 + docs/git: discuss server-side config for GIT_PROTOCOL
 + docs/http-backend: mention v2 protocol
 + http-backend: handle HTTP_GIT_PROTOCOL CGI variable
 + t5551: test v2-to-v0 http protocol fallback

 Taking advantage of the CGI interface, http-backend has been
 updated to enable protocol v2 automatically when the other side
 asks for it.


* jk/strvec-typefix (2021-09-12) 1 commit
  (merged to 'next' on 2021-09-13 at e07858581d)
 + strvec: use size_t to store nr and alloc

 Correct nr and alloc members of strvec struct to be of type size_t.


* jt/submodule-name-to-gitdir (2021-09-15) 1 commit
  (merged to 'next' on 2021-09-16 at c658fbfdb8)
 + submodule: extract path to submodule gitdir func

 Code refactoring.


* kz/revindex-comment-fix (2021-09-15) 1 commit
  (merged to 'next' on 2021-09-16 at b4797add3a)
 + pack-revindex.h: correct the time complexity descriptions

 Header comment fix.


* ma/doc-git-version (2021-09-14) 1 commit
  (merged to 'next' on 2021-09-16 at 54a6a3f8b5)
 + documentation: add documentation for 'git version'

 Doc update.


* ma/help-w-check-for-requested-page (2021-09-14) 1 commit
  (merged to 'next' on 2021-09-16 at 292dd7174d)
 + help: make sure local html page exists before calling external processes

 The error in "git help no-such-git-command" is handled better.


* mr/bisect-in-c-4 (2021-09-13) 6 commits
  (merged to 'next' on 2021-09-15 at 2af7f048d4)
 + bisect--helper: retire `--bisect-next-check` subcommand
 + bisect--helper: reimplement `bisect_run` shell function in C
 + bisect--helper: reimplement `bisect_visualize()` shell function in C
 + run-command: make `exists_in_PATH()` non-static
 + t6030-bisect-porcelain: add test for bisect visualize
 + t6030-bisect-porcelain: add tests to control bisect run exit cases

 Rewrite of "git bisect" in C continues.


* po/git-config-doc-mentions-help-c (2021-09-13) 1 commit
  (merged to 'next' on 2021-09-13 at bddbd5c25d)
 + doc: config, tell readers of `git help --config`

 Doc update.


* ps/update-ref-batch-flush (2021-09-15) 2 commits
  (merged to 'next' on 2021-09-15 at 39a69141e3)
 + t1400: avoid SIGPIPE race condition on fifo
  (merged to 'next' on 2021-09-10 at 4ae19a5f34)
 + update-ref: fix streaming of status updates

 "git update-ref --stdin" failed to flush its output as needed,
 which potentially led the conversation to a deadlock.


* rs/drop-core-compression-vars (2021-09-12) 1 commit
  (merged to 'next' on 2021-09-13 at 3bd06626c3)
 + compression: drop write-only core_compression_* variables

 Code clean-up.


* rs/packfile-bad-object-list-in-oidset (2021-09-12) 5 commits
  (merged to 'next' on 2021-09-13 at 80e72f5f97)
 + packfile: use oidset for bad objects
 + packfile: convert has_packed_and_bad() to object_id
 + packfile: convert mark_bad_packed_object() to object_id
 + midx: inline nth_midxed_pack_entry()
 + oidset: make oidset_size() an inline function

 Replace a handcrafted data structure used to keep track of bad
 objects in the packfile API by an oidset.


* rs/use-xopen-in-index-pack (2021-09-10) 1 commit
  (merged to 'next' on 2021-09-16 at 186eaaae56)
 + index-pack: use xopen in init_thread

 Code clean-up.

--------------------------------------------------
[New Topics]

* ab/make-clean-depend-dirs (2021-09-22) 1 commit
 - Makefile: clean .depend dirs under COMPUTE_HEADER_DEPENDENCIES != yes

 "make clean" has been updated to remove leftover .depend/
 directories, even when it is not told to use them to compute header
 dependencies.

 Will merge to 'next'.


* bs/ls-files-opt-help-text-update (2021-09-22) 1 commit
 - ls-files: use imperative mood for -X and -z option description

 Help test for "ls-files" options have been updated.

 Will merge to 'next'.


* cb/make-compdb-fix (2021-09-22) 1 commit
 - Makefile: avoid breaking compilation database generation with DEVELOPER

 Adjust to recent change to use -pedantic for developer builds.

 Will merge to 'next'.


* ds/perf-test-built-path-fix (2021-09-22) 1 commit
 - t/perf/run: fix bin-wrappers computation

 Perf test fix.

 Will merge to 'next'.


* gc/doc-first-contribution-reroll (2021-09-22) 1 commit
 - MyFirstContribution: Document --range-diff option when writing v2

 Doc update.

 Will merge to 'next'.


* jk/grep-haystack-is-read-only (2021-09-22) 5 commits
 - grep: store grep_source buffer as const
 - grep: mark "haystack" buffers as const
 - grep: stop modifying buffer in grep_source_1()
 - grep: stop modifying buffer in show_line()
 - grep: stop modifying buffer in strip_timestamp
 (this branch is used by hm/paint-hits-in-log-grep.)

 Code clean-up in the "grep" machinery.

 Will merge to 'next'.


* jk/http-redact-fix (2021-09-22) 1 commit
 - http: match headers case-insensitively when redacting

 Sensitive data in the HTTP trace were supposed to be redacted, but
 we failed to do so in HTTP/2 requests.

 Will merge to 'next'.


* js/win-lazyload-buildfix (2021-09-23) 2 commits
 - lazyload.h: use an even more generic function pointer than FARPROC
 - lazyload.h: fix warnings about mismatching function pointer types

 Compilation fix.

 Will merge to 'next'.


* ab/auto-depend-with-pedantic (2021-09-22) 1 commit
 - Makefile: make COMPUTE_HEADER_DEPENDENCIES=auto work with DEVOPTS=pedantic

 Improve build procedure for developers.

 Will merge to 'next'.


* ab/make-sparse-for-real (2021-09-22) 1 commit
 - Makefile: make the "sparse" target non-.PHONY

 Prevent "make sparse" from running for the source files that
 haven't been modified.


* bs/difftool-msg-tweak (2021-09-22) 1 commit
 - difftool: fix word spacing in the usage strings

 Message tweak.

 Will merge to 'next'.


* ew/midx-doc-update (2021-09-23) 1 commit
 - doc/technical: update note about core.multiPackIndex

 Doc tweak.

 Will merge to 'next'.


* jt/no-abuse-alternate-odb-for-submodules (2021-09-22) 10 commits
 - submodule: trace adding submodule ODB as alternate
 - refs: change refs_for_each_ref_in() to take repo
 - submodule: pass repo to check_has_commit()
 - object-file: only register submodule ODB if needed
 - merge-{ort,recursive}: remove add_submodule_odb()
 - refs: teach refs_for_each_ref() arbitrary repos
 - refs iterator: support non-the_repository advance
 - refs: add repo paramater to _iterator_peel()
 - refs: make _advance() check struct repo, not flag
 - Merge branch 'jt/add-submodule-odb-clean-up' into jt/no-abuse-alternate-odb-for-submodules
 (this branch uses jt/add-submodule-odb-clean-up.)

 Follow through the work to use the repo interface to access
 submodule objects in-process, instead of abusing the alternate
 object database interface.


* tp/send-email-completion (2021-09-22) 3 commits
 - send-email docs: add format-patch options
 - send-email: move bash completions to core script
 - send-email: terminate --git-completion-helper with LF

 The command line complation for "git send-email" options have been
 tweaked to make it easier to keep it in sync with the command itself.


* hm/paint-hits-in-log-grep (2021-09-23) 3 commits
 - pretty: colorize pattern matches in commit messages
 - grep: refactor next_match() and match_one_pattern() for external use
 - Merge branch 'jk/grep-haystack-is-read-only' into hm/paint-hits-in-log-grep
 (this branch uses jk/grep-haystack-is-read-only.)

 "git log --grep=string --author=name" learns to highlight hits just
 like "git grep string" does.

--------------------------------------------------
[Stalled]

* ab/pack-objects-stdin (2021-07-09) 5 commits
 - pack-objects.c: make use of REV_INFO_STDIN_LINE_PROCESS
 - pack-objects.c: do stdin parsing via revision.c's API
 - revision.[ch]: add a "handle_stdin_line" API
 - revision.h: refactor "disable_stdin" and "read_from_stdin"
 - upload-pack: run is_repository_shallow() before setup_revisions()

 Introduce handle_stdin_line callback to revision API and uses it.

 Expecting a reroll.


* es/superproject-aware-submodules (2021-08-19) 5 commits
 . fixup! introduce submodule.superprojectGitDir record
 . submodule: record superproject gitdir during 'update'
 . submodule: record superproject gitdir during absorbgitdirs
 . introduce submodule.superprojectGitDir record
 . t7400-submodule-basic: modernize inspect() helper

 A configuration variable in a submodule points at the location of
 the superproject it is bound to (RFC).

 Kicked out of 'seen' tentatively to see how well a conflicting
 ar/submodule-update topic fares.


* ab/fsck-unexpected-type (2021-09-22) 17 commits
 - fsck: report invalid object type-path combinations
 - fsck: don't hard die on invalid object types
 - object-file.c: stop dying in parse_loose_header()
 - object-file.c: return ULHR_TOO_LONG on "header too long"
 - object-file.c: use "enum" return type for unpack_loose_header()
 - object-file.c: simplify unpack_loose_short_header()
 - object-file.c: make parse_loose_header_extended() public
 - object-file.c: return -1, not "status" from unpack_loose_header()
 - object-file.c: don't set "typep" when returning non-zero
 - cat-file tests: test for current --allow-unknown-type behavior
 - cat-file tests: add corrupt loose object test
 - cat-file tests: test for missing/bogus object with -t, -s and -p
 - cat-file tests: move bogus_* variable declarations earlier
 - fsck tests: test for garbage appended to a loose object
 - fsck tests: test current hash/type mismatch behavior
 - fsck tests: refactor one test to use a sub-repo
 - fsck tests: add test for fsck-ing an unknown type

 "git fsck" has been taught to report mismatch between expected and
 actual types of an object better.

 Needs review.

--------------------------------------------------
[Cooking]

* ab/repo-settings-cleanup (2021-09-22) 5 commits
 - repository.h: don't use a mix of int and bitfields
 - repo-settings.c: simplify the setup
 - read-cache & fetch-negotiator: check "enum" values in switch()
 - environment.c: remove test-specific "ignore_untracked..." variable
 - wrapper.c: add x{un,}setenv(), and use xsetenv() in environment.c

 Code cleanup.

 Will merge to 'next'.


* ah/connect-parse-feature-v0-fix (2021-09-23) 1 commit
 - connect: also update offset for features without values

 Protocol v0 clients can get stuck parsing a malformed feature line.

 Will merge to 'next'.


* ah/unreak-revisions (2021-09-20) 2 commits
 - log: UNLEAK original pending objects
 - log: UNLEAK rev to silence a large number of leaks

 Mark a few structures with UNLEAK() to help leak detection CI jobs.

 Will merge to 'next'.


* ar/submodule-update (2021-09-20) 8 commits
 - submodule--helper: rename helper functions
 - submodule--helper: remove unused helpers
 - submodule--helper: remove update-clone subcommand
 - submodule: move core cmd_update() logic to C
 - submodule--helper: refactor get_submodule_displaypath()
 - submodule--helper: rename helpers for update-clone
 - submodule--helper: get remote names from any repository
 - submodule--helper: split up ensure_core_worktree()

 Rewrite of "git submodule update" in C.

 Expecting a reroll.
 Stomps on a handful of other topics and comes with an overly large step.


* da/difftool (2021-09-23) 4 commits
 - difftool: add a missing space to the run_dir_diff() comments
 - difftool: create a tmpdir path without repeated slashes
 - Merge branch 'da/difftool-dir-diff-symlink-fix' into da/difftool
 - Merge branch 'ab/retire-option-argument' into da/difftool
 (this branch uses da/difftool-dir-diff-symlink-fix.)

 Code clean-up in "git difftool".

 Will merge to 'next'?


* da/difftool-dir-diff-symlink-fix (2021-09-23) 1 commit
 - difftool: fix symlink-file writing in dir-diff mode
 (this branch is used by da/difftool.)

 "git difftool --dir-diff" mishandled symbolic links.

 Will merge to 'next'.


* en/removing-untracked-fixes (2021-09-20) 7 commits
 - Documentation: call out commands that nuke untracked files/directories
 - Comment important codepaths regarding nuking untracked files/dirs
 - unpack-trees: avoid nuking untracked dir in way of locally deleted file
 - unpack-trees: avoid nuking untracked dir in way of unmerged file
 - Split unpack_trees 'reset' flag into two for untracked handling
 - t2500: add various tests for nuking untracked files
 - Merge branch 'en/am-abort-fix' into en/removing-untracked-fixes

 Various fixes in code paths that move untracked files away to make room.


* en/typofixes (2021-09-20) 2 commits
  (merged to 'next' on 2021-09-20 at 48648dafa3)
 + merge-ort: fix completely wrong comment
 + trace2.h: fix trivial comment typo

 Typofixes.

 Will merge to 'master'.


* ks/submodule-add-message-fix (2021-09-20) 1 commit
 - submodule--helper: fix incorrect newlines in an error message

 Message regression fix.

 Will merge to 'next'.


* tb/commit-graph-usage-fix (2021-09-22) 2 commits
 - builtin/multi-pack-index.c: disable top-level --[no-]progress
 - builtin/commit-graph.c: don't accept common --[no-]progress

 Regression fix for "git commit-graph" command line parsing.

 Will merge to 'next'.


* ws/refer-to-forkpoint-config-in-rebase-doc (2021-09-20) 1 commit
 - Document `rebase.forkpoint` in rebase man page

 Doc update.

 Will merge to 'next'?


* jk/clone-unborn-head-in-bare (2021-09-20) 1 commit
  (merged to 'next' on 2021-09-20 at 93c93b8d51)
 + clone: handle unborn branch in bare repos

 "git clone" from a repository whose HEAD is unborn into a bare
 repository didn't follow the branch name the other side used, which
 is corrected.

 Will merge to 'master'.


* jk/reduce-malloc-in-v2-servers (2021-09-15) 12 commits
  (merged to 'next' on 2021-09-16 at 40cfe41efc)
 + ls-refs: reject unknown arguments
 + serve: reject commands used as capabilities
 + serve: reject bogus v2 "command=ls-refs=foo"
 + docs/protocol-v2: clarify some ls-refs ref-prefix details
 + ls-refs: ignore very long ref-prefix counts
 + serve: drop "keys" strvec
 + serve: provide "receive" function for session-id capability
 + serve: provide "receive" function for object-format capability
 + serve: add "receive" method for v2 capabilities table
 + serve: return capability "value" from get_capability()
 + serve: rename is_command() to parse_command()
 + Merge branch 'ab/serve-cleanup' into jk/reduce-malloc-in-v2-servers

 Code cleanup to limit memory consumption and tighten protocol
 message parsing.

 Will merge to 'master'.


* ns/batched-fsync (2021-09-22) 6 commits
 - core.fsyncobjectfiles: performance tests for add and stash
 - core.fsyncobjectfiles: tests for batch mode
 - update-index: use the bulk-checkin infrastructure
 - core.fsyncobjectfiles: add windows support for batch mode
 - core.fsyncobjectfiles: batched disk flushes
 - bulk-checkin: rename 'state' variable and separate 'plugged' boolean

 The "core.fsyncobjectfiles" configuration variable can now be set
 to "batch" for improved performance.


* jh/builtin-fsmonitor-part1 (2021-09-20) 7 commits
 - t/helper/simple-ipc: convert test-simple-ipc to use start_bg_command
 - run-command: create start_bg_command
 - simple-ipc/ipc-win32: add Windows ACL to named pipe
 - simple-ipc/ipc-win32: add trace2 debugging
 - simple-ipc: move definition of ipc_active_state outside of ifdef
 - simple-ipc: preparations for supporting binary messages.
 - trace2: add trace2_child_ready() to report on background children

 Built-in fsmonitor (part 1).


* cb/cvsserver (2021-09-16) 3 commits
  (merged to 'next' on 2021-09-23 at 98f5f3f9cf)
 + Documentation: cleanup git-cvsserver
 + git-cvsserver: protect against NULL in crypt(3)
 + git-cvsserver: use crypt correctly to compare password hashes

 "git cvsserver" had a long-standing bug in its authentication code,
 which has finally been corrected (it is unclear and is a separate
 question if anybody is seriously using it, though).

 Will merge to 'master'.


* cb/unicode-14 (2021-09-17) 1 commit
  (merged to 'next' on 2021-09-20 at 7873b310ad)
 + unicode: update the width tables to Unicode 14

 The unicode character width table (used for output alignment) has
 been updated.

 Will merge to 'master'.


* ab/align-parse-options-help (2021-09-22) 4 commits
 - parse-options: properly align continued usage output
 - git rev-parse --parseopt tests: add more usagestr tests
 - send-pack: properly use parse_options() API for usage string
 - parse-options API users: align usage output in C-strings

 When "git cmd -h" shows more than one line of usage text (e.g.
 the cmd subcommand may take sub-sub-command), parse-options API
 learned to align these lines, even across i18n/l10n.

 Will merge to 'next'?


* ab/help-config-vars (2021-09-23) 9 commits
 - help: move column config discovery to help.c library
 - help / completion: make "git help" do the hard work
 - help tests: test --config-for-completion option & output
 - help: simplify by moving to OPT_CMDMODE()
 - help: correct logic error in combining --all and --guides
 - help: correct logic error in combining --all and --config
 - help tests: add test for --config output
 - help: correct usage & behavior of "git help --guides"
 - help: correct the usage string in -h and documentation

 Teach "git help -c" into helping the command line completion of
 configuration variables.

 Will merge to 'next'?


* tb/repack-write-midx (2021-09-16) 8 commits
 - builtin/repack.c: pass `--refs-snapshot` when writing bitmaps
 - builtin/repack.c: make largest pack preferred
 - builtin/repack.c: support writing a MIDX while repacking
 - builtin/repack.c: extract showing progress to a variable
 - builtin/repack.c: keep track of existing packs unconditionally
 - midx: preliminary support for `--refs-snapshot`
 - builtin/multi-pack-index.c: support `--stdin-packs` mode
 - midx: expose `write_midx_file_only()` publicly

 "git repack" has been taught to generate multi-pack reachability
 bitmaps.

 Will merge to 'next'?


* ds/add-rm-with-sparse-index (2021-09-22) 14 commits
 - advice: update message to suggest '--sparse'
 - mv: refuse to move sparse paths
 - rm: skip sparse paths with missing SKIP_WORKTREE
 - rm: add --sparse option
 - add: update --renormalize to skip sparse paths
 - add: update --chmod to skip sparse paths
 - add: implement the --sparse option
 - add: skip tracked paths outside sparse-checkout cone
 - add: fail when adding an untracked sparse file
 - dir: fix pattern matching on dirs
 - dir: select directories correctly
 - dir: extract directory-matching logic
 - t1092: behavior for adding sparse files
 - t3705: test that 'sparse_entry' is unstaged

 "git add", "git mv", and "git rm" have been adjusted to avoid
 updating paths outside of the sparse-checkout definition unless
 the user specifies a "--sparse" option.


* tb/midx-write-propagate-namehash (2021-09-17) 7 commits
 - t5326: test propagating hashcache values
 - p5326: generate pack bitmaps before writing the MIDX bitmap
 - p5326: don't set core.multiPackIndex unnecessarily
 - p5326: create missing 'perf-tag' tag
 - midx.c: respect 'pack.writeBitmapHashcache' when writing bitmaps
 - pack-bitmap.c: propagate namehash values from existing bitmaps
 - t/helper/test-bitmap.c: add 'dump-hashes' mode

 "git multi-pack-index write --bitmap" learns to propagate the
 hashcache from original bitmap to resulting bitmap.

 Will merge to 'next'?


* pw/rebase-of-a-tag-fix (2021-09-22) 10 commits
 - rebase: dereference tags
 - rebase: use lookup_commit_reference_by_name()
 - rebase: use our standard error return value
 - t3407: rework rebase --quit tests
 - t3407: strengthen rebase --abort tests
 - t3407: use test_path_is_missing
 - t3407: rename a variable
 - t3407: use test_cmp_rev
 - t3407: use test_commit
 - t3407: run tests in $TEST_DIRECTORY

 "git rebase <upstream> <tag>" failed when aborted in the middle, as
 it mistakenly tried to write the tag object instead of peeling it
 to HEAD.

 Will merge to 'next'?


* en/zdiff3 (2021-09-20) 2 commits
 - update documentation for new zdiff3 conflictStyle
 - xdiff: implement a zealous diff3, or "zdiff3"

 "Zealous diff3" style of merge conflict presentation has been added.


* en/stash-df-fix (2021-09-10) 3 commits
  (merged to 'next' on 2021-09-20 at 513c11fb11)
 + stash: restore untracked files AFTER restoring tracked files
 + stash: avoid feeding directories to update-index
 + t3903: document a pair of directory/file bugs

 Fix "git stash" corner case where the tentative change involves
 changing a directory to a file (or vice versa).

 Will merge to 'master'.


* jt/add-submodule-odb-clean-up (2021-09-09) 3 commits
 - revision: remove "submodule" from opt struct
 - repository: support unabsorbed in repo_submodule_init
 - submodule: remove unnecessary unabsorbed fallback
 (this branch is used by jt/no-abuse-alternate-odb-for-submodules.)

 More code paths that uses the hack to add submodule's object
 database to the set of alternate object store have been cleaned up.

 Will merge to 'next'.


* jx/ci-l10n (2021-09-09) 1 commit
  (merged to 'next' on 2021-09-23 at b2d7f5eecb)
 + ci: new github-action for git-l10n code review

 CI help for l10n.

 Will merge to 'master'.


* js/scalar (2021-09-14) 15 commits
 - scalar: accept -C and -c options before the subcommand
 - scalar: implement the `version` command
 - scalar: implement the `delete` command
 - scalar: teach 'reconfigure' to optionally handle all registered enlistments
 - scalar: allow reconfiguring an existing enlistment
 - scalar: implement the `run` command
 - scalar: teach 'clone' to support the --single-branch option
 - scalar: implement the `clone` subcommand
 - scalar: implement 'scalar list'
 - scalar: let 'unregister' handle a deleted enlistment directory gracefully
 - scalar: 'unregister' stops background maintenance
 - scalar: 'register' sets recommended config and starts maintenance
 - scalar: create test infrastructure
 - scalar: start documenting the command
 - scalar: create a rudimentary executable

 Add pieces from "scalar" to contrib/.


* ab/sanitize-leak-ci (2021-09-23) 2 commits
 - tests: add a test mode for SANITIZE=leak, run it in CI
 - Makefile: add SANITIZE=leak flag to GIT-BUILD-OPTIONS

 CI learns to run the leak sanitizer builds.

 Will merge to 'next'?


* ms/customizable-ident-expansion (2021-09-01) 1 commit
 - keyword expansion: make "$Id$" string configurable

 Instead of "$Id$", user-specified string (like $FreeBSD$) can be
 used as an in-blob placeholder for keyword expansion.


* js/retire-preserve-merges (2021-09-07) 11 commits
  (merged to 'next' on 2021-09-10 at f645ffd7a3)
 + sequencer: restrict scope of a formerly public function
 + rebase: remove a no-longer-used function
 + rebase: stop mentioning the -p option in comments
 + rebase: remove obsolete code comment
 + rebase: drop the internal `rebase--interactive` command
 + git-svn: drop support for `--preserve-merges`
 + rebase: drop support for `--preserve-merges`
 + pull: remove support for `--rebase=preserve`
 + tests: stop testing `git rebase --preserve-merges`
 + remote: warn about unhandled branch.<name>.rebase values
 + t5520: do not use `pull.rebase=preserve`

 The "--preserve-merges" option of "git rebase" has been removed.

 Will cook in 'next'.


* en/remerge-diff (2021-08-31) 7 commits
 - doc/diff-options: explain the new --remerge-diff option
 - show, log: provide a --remerge-diff capability
 - tmp-objdir: new API for creating and removing primary object dirs
 - merge-ort: capture and print ll-merge warnings in our preferred fashion
 - ll-merge: add API for capturing warnings in a strbuf instead of stderr
 - merge-ort: add ability to record conflict messages in a file
 - merge-ort: mark a few more conflict messages as omittable

 A new presentation for two-parent merge "--remerge-diff" can be
 used to show the difference between mechanical (and possibly
 conflicted) merge results and the recorded resolution.


* sg/test-split-index-fix (2021-09-07) 7 commits
 - read-cache: fix GIT_TEST_SPLIT_INDEX
 - tests: disable GIT_TEST_SPLIT_INDEX for sparse index tests
 - read-cache: look for shared index files next to the index, too
 - t1600-index: disable GIT_TEST_SPLIT_INDEX
 - t1600-index: don't run git commands upstream of a pipe
 - t1600-index: remove unnecessary redirection
 - Merge branch 'ds/sparse-index-ignored-files' into sg/test-split-index-fix

 Test updates.

 Will merge to 'next'?


* ab/refs-errno-cleanup (2021-08-25) 4 commits
 - refs: make errno output explicit for refs_resolve_ref_unsafe
 - refs: explicitly return failure_errno from parse_loose_ref_contents
 - branch tests: test for errno propagating on failing read
 - refs: add failure_errno to refs_read_raw_ref() signature
 (this branch uses ab/refs-files-cleanup and hn/refs-errno-cleanup.)

 The "remainder" of hn/refs-errno-cleanup topic.


* ab/lib-subtest (2021-09-22) 9 commits
 - test-lib tests: get rid of copy/pasted mock test code
 - test-lib tests: assert 1 exit code, not non-zero
 - test-lib tests: refactor common part of check_sub_test_lib_test*()
 - test-lib tests: avoid subshell for "test_cmp" for readability
 - test-lib tests: don't provide a description for the sub-tests
 - test-lib tests: split up "write and run" into two functions
 - test-lib tests: move "run_sub_test" to a new lib-subtest.sh
 - Merge branch 'ps/t0000-output-directory-fix' into ab/lib-subtest
 - Merge branch 'jk/t0000-subtests-fix' into ab/lib-subtest

 Updates to the tests in t0000 to test the test framework.


* ab/only-single-progress-at-once (2021-09-22) 8 commits
 - progress.c: add & assert a "global_progress" variable
 - pack-bitmap-write.c: add a missing stop_progress()
 - progress.c: add temporary variable from progress struct
 - progress.c: stop eagerly fflush(stderr) when not a terminal
 - progress.c: call progress_interval() from progress_test_force_update()
 - progress.c: move signal handler functions lower
 - progress.c tests: test some invalid usage
 - progress.c tests: make start/stop verbs on stdin

 Further tweaks on progress API.


* fs/ssh-signing (2021-09-10) 9 commits
 - ssh signing: test that gpg fails for unknown keys
 - ssh signing: tests for logs, tags & push certs
 - ssh signing: duplicate t7510 tests for commits
 - ssh signing: verify signatures using ssh-keygen
 - ssh signing: provide a textual signing_key_id
 - ssh signing: retrieve a default key from ssh-agent
 - ssh signing: add ssh key format and signing code
 - ssh signing: add test prereqs
 - ssh signing: preliminary refactoring and clean-up

 Use ssh public crypto for object and push-cert signing.

 On hold.
 cf. <pull.1041.v8.git.git.1631304462.gitgitgadget@gmail.com>
 cf. <532d97e7-8c91-df6a-6d90-70668256f513@gigacodes.de>


* cf/fetch-set-upstream-while-detached (2021-07-06) 1 commit
 - fetch: fix segfault on --set-upstream while on a detached HEAD

 "git fetch --set-upstream" while on detached HEAD segfaulted
 instead of noticing that such an operation did not make sense.

 Expecting a reroll.
 cf. <xmqqsg0ri5mq.fsf@gitster.g>


* pw/diff-color-moved-fix (2021-08-05) 13 commits
 - diff: drop unused options parameter from cmp_in_block_with_wsd()
 - diff --color-moved: intern strings
 - diff: use designated initializers for emitted_diff_symbol
 - diff --color-moved-ws=allow-indentation-change: improve hash lookups
 - diff --color-moved: stop clearing potential moved blocks
 - diff --color-moved: shrink potential moved blocks as we go
 - diff --color-moved: unify moved block growth functions
 - diff --color-moved: call comparison function directly
 - diff --color-moved-ws=allow-indentation-change: simplify and optimize
 - diff: simplify allow-indentation-change delta calculation
 - diff --color-moved: avoid false short line matches and bad zerba coloring
 - diff --color-moved=zebra: fix alternate coloring
 - diff --color-moved: add perf tests

 Originally merged to 'next' on 2021-08-05

 Long-overdue correctness and performance update to "diff
 --color-moved" feature.

 Expecting a reroll.
 cf. <8bec1a6d-5052-50c3-4100-e6348289d581@gmail.com>


* hn/reftable (2021-09-10) 20 commits
 - fixup! reftable: implement stack, a mutable database of reftable files.
 - Add "test-tool dump-reftable" command.
 - reftable: add dump utility
 - reftable: implement stack, a mutable database of reftable files.
 - reftable: implement refname validation
 - reftable: add merged table view
 - reftable: add a heap-based priority queue for reftable records
 - reftable: reftable file level tests
 - reftable: read reftable files
 - reftable: generic interface to tables
 - reftable: write reftable files
 - reftable: a generic binary tree implementation
 - reftable: reading/writing blocks
 - Provide zlib's uncompress2 from compat/zlib-compat.c
 - reftable: (de)serialization for the polymorphic record type.
 - reftable: add blocksource, an abstraction for random access reads
 - reftable: utility functions
 - reftable: add error related functionality
 - reftable: RFC: add LICENSE
 - hash.h: provide constants for the hash IDs

 The "reftable" backend for the refs API, without integrating into
 the refs subsystem.

 Will merge to 'next'?


* ab/refs-files-cleanup (2021-08-25) 13 commits
  (merged to 'next' on 2021-09-23 at eb5668523f)
 + refs/files: remove unused "errno != ENOTDIR" condition
 + refs/files: remove unused "errno == EISDIR" code
 + refs/files: remove unused "oid" in lock_ref_oid_basic()
 + refs API: remove OID argument to reflog_expire()
 + reflog expire: don't lock reflogs using previously seen OID
 + refs/files: add a comment about refs_reflog_exists() call
 + refs: make repo_dwim_log() accept a NULL oid
 + refs/debug: re-indent argument list for "prepare"
 + refs/files: remove unused "skip" in lock_raw_ref() too
 + refs/files: remove unused "extras/skip" in lock_ref_oid_basic()
 + refs: drop unused "flags" parameter to lock_ref_oid_basic()
 + refs/files: remove unused REF_DELETING in lock_ref_oid_basic()
 + refs/packet: add missing BUG() invocations to reflog callbacks
 (this branch is used by ab/refs-errno-cleanup and hn/refs-errno-cleanup.)

 Continued work on top of the hn/refs-errno-cleanup topic.

 Will merge to 'master'.


* hn/refs-errno-cleanup (2021-08-25) 4 commits
  (merged to 'next' on 2021-09-23 at 502e6b6b08)
 + refs: make errno output explicit for read_raw_ref_fn
 + refs/files-backend: stop setting errno from lock_ref_oid_basic
 + refs: remove EINVAL errno output from specification of read_raw_ref_fn
 + refs file backend: move raceproof_create_file() here
 (this branch is used by ab/refs-errno-cleanup; uses ab/refs-files-cleanup.)

 Futz with the way 'errno' is relied on in the refs API to carry the
 failure modes up the call chain.

 Will merge to 'master'.

--------------------------------------------------
[Discarded]

* ao/p4-avoid-decoding (2021-04-12) 2 commits
 . git-p4: do not decode data from perforce by default
 . git-p4: avoid decoding more data from perforce

 "git p4" in Python-2 days used to accept a lot more kinds of data
 from Perforce server as uninterrupted byte sequence, but after
 switching to Python-3, too many things are expected to be in UTF-8,
 which broke traditional use cases.

 Have been stalled for too long.
 cf. <20210504220153.1d9f0cb2@ado-tr>


* tv/p4-fallback-encoding (2021-04-30) 1 commit
 . git-p4: git-p4.fallbackEncoding to specify non UTF-8 charset

 "git p4" learns the fallbackEncoding configuration variable to
 safely accept changeset descriptions that aren't written in UTF-8.

 Have been stalled for too long.
 cf. <CAKu1iLUaLuAZWqjNK4tfhhR=YaSt4MdQ+90ZY-JcEh_SeHyYCw@mail.gmail.com>


* jh/builtin-fsmonitor (2021-09-03) 37 commits
 . fixup! fsmonitor--daemon: implement handle_client callback
 . SQUASH??? https://github.com/git/git/runs/3438543601?check_suite_focus=true#step:5:136
 . BANDAID: sparse fixes
 . t7527: test FS event reporing on MacOS WRT case and Unicode
 . fsmonitor: handle shortname for .git
 . t7527: test status with untracked-cache and fsmonitor--daemon
 . fsmonitor: force update index after large responses
 . fsmonitor: enhance existing comments
 . fsmonitor--daemon: use a cookie file to sync with file system
 . fsmonitor--daemon: periodically truncate list of modified files
 . t7527: create test for fsmonitor--daemon
 . t/perf/p7519: add fsmonitor--daemon test cases
 . t/perf: avoid copying builtin fsmonitor files into test repo
 . t/perf/p7519: speed up test using "test-tool touch"
 . t/helper/test-touch: add helper to touch a series of files
 . fsmonitor--daemon: implement handle_client callback
 . fsmonitor-fs-listen-macos: implement FSEvent listener on MacOS
 . fsmonitor-fs-listen-macos: add macos header files for FSEvent
 . fsmonitor-fs-listen-win32: implement FSMonitor backend on Windows
 . fsmonitor--daemon: create token-based changed path cache
 . fsmonitor--daemon: define token-ids
 . fsmonitor--daemon: add pathname classification
 . fsmonitor: do not try to operate on bare repos
 . fsmonitor--daemon: implement 'start' command
 . fsmonitor--daemon: implement 'run' command
 . fsmonitor-fs-listen-macos: stub in backend for MacOS
 . fsmonitor-fs-listen-win32: stub in backend for Windows
 . t/helper/fsmonitor-client: create IPC client to talk to FSMonitor Daemon
 . fsmonitor--daemon: implement 'stop' and 'status' commands
 . fsmonitor--daemon: add a built-in fsmonitor daemon
 . fsmonitor: use IPC to query the builtin FSMonitor daemon
 . fsmonitor: config settings are repository-specific
 . help: include fsmonitor--daemon feature flag in version info
 . fsmonitor-ipc: create client routines for git-fsmonitor--daemon
 . fsmonitor--daemon: update fsmonitor documentation
 . fsmonitor--daemon: man page
 . simple-ipc: preparations for supporting binary messages.

 An attempt to write and ship with a watchman equivalent tailored
 for our use.

 Will be rerolled in pieces.


* ab/config-based-hooks-base (2021-09-09) 36 commits
 . hooks: fix a TOCTOU in "did we run a hook?" heuristic
 . receive-pack: convert receive hooks to hook.h
 . post-update: use hook.h library
 . receive-pack: convert 'update' hook to hook.h
 . hooks: allow callers to capture output
 . run-command: allow capturing of collated output
 . reference-transaction: use hook.h to run hooks
 . hook tests: use a modern style for "pre-push" tests
 . hook tests: test for exact "pre-push" hook input
 . transport: convert pre-push hook to hook.h
 . hook: convert 'post-rewrite' hook in sequencer.c to hook.h
 . hook: provide stdin by string_list or callback
 . run-command: add stdin callback for parallelization
 . am: convert 'post-rewrite' hook to hook.h
 . hook: support passing stdin to hooks
 . run-command: allow stdin for run_processes_parallel
 . run-command: remove old run_hook_{le,ve}() hook API
 . receive-pack: convert push-to-checkout hook to hook.h
 . read-cache: convert post-index-change to use hook.h
 . commit: convert {pre-commit,prepare-commit-msg} hook to hook.h
 . git-p4: use 'git hook' to run hooks
 . send-email: use 'git hook run' for 'sendemail-validate'
 . git hook run: add an --ignore-missing flag
 . merge: convert post-merge to use hook.h
 . hooks: convert 'post-checkout' hook to hook library
 . am: convert applypatch to use hook.h
 . rebase: convert pre-rebase to use hook.h
 . gc: use hook library for pre-auto-gc hook
 . hook: add 'run' subcommand
 . hook-list.h: add a generated list of hooks, like config-list.h
 . hook.c users: use "hook_exists()" instead of "find_hook()"
 . hook.c: add a hook_exists() wrapper and use it in bugreport.c
 . hook.[ch]: move find_hook() from run-command.c to hook.c
 . Makefile: remove an out-of-date comment
 . Makefile: stop hardcoding {command,config}-list.h
 . Makefile: mark "check" target as .PHONY
 (this branch is used by es/config-based-hooks.)

 Restructuring of (a subset of) Emily's config-based-hooks series,
 to demonstrate that a series can be presented as a more logical and
 focused progression.

 Will be rerolled in pieces.


* es/config-based-hooks (2021-09-09) 6 commits
 . hook: allow out-of-repo 'git hook' invocations
 . hook: include hooks from the config
 . hook: introduce "git hook list"
 . hook: allow parallel hook execution
 . fixup! hook: run a list of hooks instead
 . hook: run a list of hooks instead
 (this branch uses ab/config-based-hooks-base.)

 Revamp the hooks subsystem to allow multiple of them to trigger
 upon the same event and control via the configuration variables.

^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.33.0
@ 2021-08-16 23:06  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2021-08-16 23:06 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

The latest feature release Git v2.33.0 is now available at the
usual places.  It is comprised of 449 non-merge commits since
v2.32.0, contributed by 74 people, 19 of which are new faces [*].

As can be seen here, it turns out that this release does not have
many end-user facing changes and new features, but a lot of fixes
and internal improvements went into the codebase during this cycle.
Also, preparation for a new merge strategy backend (can be used with
"git merge -sort" today) is on its final stretch and we are hoping
that it can become the default in the next release.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.33.0'
tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.32.0 are as follows.
Welcome to the Git development community!

  Anders Höckersten, Andrew Berry, Andy AO, Beshr Kayali,
  dorgon.chang, edef, Fabian Stelzer, Fabian Wermelinger, Gregory
  Anders, Greg Pflaum, Hu Jialun, Jason Hatton, Julian Verdurmen,
  Matthew Hughes, Michael Schindler, Reuven Y, Stephen Manz,
  Tao Klerks, and Teng Long.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alexander Shopov, Alex Henrie,
  Anders Kaseorg, Andrei Rybak, Andrzej Hunt, Atharva Raykar,
  Bagas Sanjaya, brian m. carlson, Carlo Marcelo Arenas Belón,
  Christian Couder, Christopher Diaz Riveros, Daniel Santos,
  Dennis Ameling, Denton Liu, Derrick Stolee, Đoàn Trần Công
  Danh, Elijah Newren, Emily Shaffer, Emir Sarı, Eric Sunshine,
  Eric Wong, Fangyi Zhou, Felipe Contreras, Han-Wen Nienhuys,
  Jean-Noël Avila, Jeff King, Jiang Xin, Johannes Schindelin,
  Jonathan Nieder, Jonathan Tan, Jordi Mas, Josh Steadmon, Junio C
  Hamano, Kaartic Sivaraam, Martin Ågren, Matheus Tavares, Matthew
  Rogers, Matthias Aßhauer, Nicolas Pitre, Patrick Steinhardt,
  Peter Krefting, Philippe Blain, Ralf Thielow, René Scharfe,
  Sergey Organov, Shourya Shukla, Taylor Blau, Thomas Bétous,
  Thomas Braun, Trần Ngọc Quân, Wolfgang Müller, Yi-Jyun Pan,
  ZheNing Hu, and 依云.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git 2.33 Release Notes
======================

Updates since Git 2.32
----------------------

UI, Workflows & Features

 * "git send-email" learned the "--sendmail-cmd" command line option
   and the "sendemail.sendmailCmd" configuration variable, which is a
   more sensible approach than the current way of repurposing the
   "smtp-server" that is meant to name the server to instead name the
   command to talk to the server.

 * The userdiff pattern for C# learned the token "record".

 * "git rev-list" learns to omit the "commit <object-name>" header
   lines from the output with the `--no-commit-header` option.

 * "git worktree add --lock" learned to record why the worktree is
   locked with a custom message.


Performance, Internal Implementation, Development Support etc.

 * The code to handle the "--format" option in "for-each-ref" and
   friends made too many string comparisons on %(atom)s used in the
   format string, which has been corrected by converting them into
   enum when the format string is parsed.

 * Use the hashfile API in the codepath that writes the index file to
   reduce code duplication.

 * Repeated rename detections in a sequence of mergy operations have
   been optimized out for the 'ort' merge strategy.

 * Preliminary clean-up of tests before the main reftable changes
   hits the codebase.

 * The backend for "diff -G/-S" has been updated to use pcre2 engine
   when available.

 * Use ".DELETE_ON_ERROR" pseudo target to simplify our Makefile.

 * Code cleanup around struct_type_init() functions.

 * "git send-email" optimization.

 * GitHub Actions / CI update.
   (merge 0dc787a9f2 js/ci-windows-update later to maint).

 * Object accesses in repositories with many alternate object store
   have been optimized.

 * "git log" has been optimized not to waste cycles to load ref
   decoration data that may not be needed.

 * Many "printf"-like helper functions we have have been annotated
   with __attribute__() to catch placeholder/parameter mismatches.

 * Tests that cover protocol bits have been updated and helpers
   used there have been consolidated.

 * The CI gained a new job to run "make sparse" check.

 * "git status" codepath learned to work with sparsely populated index
   without hydrating it fully.

 * A guideline for gender neutral documentation has been added.

 * Documentation on "git diff -l<n>" and diff.renameLimit have been
   updated, and the defaults for these limits have been raised.

 * The completion support used to offer alternate spelling of options
   that exist only for compatibility, which has been corrected.

 * "TEST_OUTPUT_DIRECTORY=there make test" failed to work, which has
   been corrected.

 * "git bundle" gained more test coverage.

 * "git read-tree" had a codepath where blobs are fetched one-by-one
   from the promisor remote, which has been corrected to fetch in bulk.

 * Rewrite of "git submodule" in C continues.

 * "git checkout" and "git commit" learn to work without unnecessarily
   expanding sparse indexes.


Fixes since v2.32
-----------------

 * We historically rejected a very short string as an author name
   while accepting a patch e-mail, which has been loosened.
   (merge 72ee47ceeb ef/mailinfo-short-name later to maint).

 * The parallel checkout codepath did not initialize object ID field
   used to talk to the worker processes in a futureproof way.

 * Rewrite code that triggers undefined behaviour warning.
   (merge aafa5df0df jn/size-t-casted-to-off-t-fix later to maint).

 * The description of "fast-forward" in the glossary has been updated.
   (merge e22f2daed0 ry/clarify-fast-forward-in-glossary later to maint).

 * Recent "git clone" left a temporary directory behind when the
   transport layer returned an failure.
   (merge 6aacb7d861 jk/clone-clean-upon-transport-error later to maint).

 * "git fetch" over protocol v2 left its side of the socket open after
   it finished speaking, which unnecessarily wasted the resource on
   the other side.
   (merge ae1a7eefff jk/fetch-pack-v2-half-close-early later to maint).

 * The command line completion (in contrib/) learned that "git diff"
   takes the "--anchored" option.
   (merge d1e7c2cac9 tb/complete-diff-anchored later to maint).

 * "git-svn" tests assumed that "locale -a", which is used to pick an
   available UTF-8 locale, is available everywhere.  A knob has been
   introduced to allow testers to specify a suitable locale to use.
   (merge 482c962de4 dd/svn-test-wo-locale-a later to maint).

 * Update "git subtree" to work better on Windows.
   (merge 77f37de39f js/subtree-on-windows-fix later to maint).

 * Remove multimail from contrib/
   (merge f74d11471f js/no-more-multimail later to maint).

 * Make the codebase MSAN clean.
   (merge 4dbc55e87d ah/uninitialized-reads-fix later to maint).

 * Work around inefficient glob substitution in older versions of bash
   by rewriting parts of a test.
   (merge eb87c6f559 jx/t6020-with-older-bash later to maint).

 * Avoid duplicated work while building reachability bitmaps.
   (merge aa9ad6fee5 jk/bitmap-tree-optim later to maint).

 * We broke "GIT_SKIP_TESTS=t?000" to skip certain tests in recent
   update, which got fixed.

 * The side-band demultiplexer that is used to display progress output
   from the remote end did not clear the line properly when the end of
   line hits at a packet boundary, which has been corrected.

 * Some test scripts assumed that readlink(1) was universally
   installed and available, which is not the case.
   (merge 7c0afdf23c jk/test-without-readlink-1 later to maint).

 * Recent update to completion script (in contrib/) broke those who
   use the __git_complete helper to define completion to their custom
   command.
   (merge cea232194d fw/complete-cmd-idx-fix later to maint).

 * Output from some of our tests were affected by the width of the
   terminal that they were run in, which has been corrected by
   exporting a fixed value in the COLUMNS environment.
   (merge c49a177bec ab/fix-columns-to-80-during-tests later to maint).

 * On Windows, mergetool has been taught to find kdiff3.exe just like
   it finds winmerge.exe.
   (merge 47eb4c6890 ms/mergetools-kdiff3-on-windows later to maint).

 * When we cannot figure out how wide the terminal is, we use a
   fallback value of 80 ourselves (which cannot be avoided), but when
   we run the pager, we export it in COLUMNS, which forces the pager
   to use the hardcoded value, even when the pager is perfectly
   capable to figure it out itself.  Stop exporting COLUMNS when we
   fall back on the hardcoded default value for our own use.
   (merge 9b6e2c8b98 js/stop-exporting-bogus-columns later to maint).

 * "git cat-file --batch-all-objects"" misbehaved when "--batch" is in
   use and did not ask for certain object traits.
   (merge ee02ac6164 zh/cat-file-batch-fix later to maint).

 * Some code and doc clarification around "git push".

 * The "union" conflict resultion variant misbehaved when used with
   binary merge driver.
   (merge 382b601acd jk/union-merge-binary later to maint).

 * Prevent "git p4" from failing to submit changes to binary file.
   (merge 54662d5958 dc/p4-binary-submit-fix later to maint).

 * "git grep --and -e foo" ought to have been diagnosed as an error
   but instead segfaulted, which has been corrected.
   (merge fe7fe62d8d rs/grep-parser-fix later to maint).

 * The merge code had funny interactions between content based rename
   detection and directory rename detection.
   (merge 3585d0ea23 en/merge-dir-rename-corner-case-fix later to maint).

 * When rebuilding the multi-pack index file reusing an existing one,
   we used to blindly trust the existing file and ended up carrying
   corrupted data into the updated file, which has been corrected.
   (merge f89ecf7988 tb/midx-use-checksum later to maint).

 * Update the location of system-side configuration file on Windows.
   (merge e355307692 js/gfw-system-config-loc-fix later to maint).

 * Code recently added to support common ancestry negotiation during
   "git push" did not sanity check its arguments carefully enough.
   (merge eff40457a4 ab/fetch-negotiate-segv-fix later to maint).

 * Update the documentation not to assume users are of certain gender
   and adds to guidelines to do so.
   (merge 46a237f42f ds/gender-neutral-doc later to maint).

 * "git commit --allow-empty-message" won't abort the operation upon
   an empty message, but the hint shown in the editor said otherwise.
   (merge 6f70f00b4f hj/commit-allow-empty-message later to maint).

 * The code that gives an error message in "git multi-pack-index" when
   no subcommand is given tried to print a NULL pointer as a strong,
   which has been corrected.
   (merge 88617d11f9 tb/reverse-midx later to maint).

 * CI update.
   (merge a066a90db6 js/ci-check-whitespace-updates later to maint).

 * Documentation fix for "git pull --rebase=no".
   (merge d3236becec fc/pull-no-rebase-merges-theirs-into-ours later to maint).

 * A race between repacking and using pack bitmaps has been corrected.
   (merge dc1daacdcc jk/check-pack-valid-before-opening-bitmap later to maint).

 * The local changes stashed by "git merge --autostash" were lost when
   the merge failed in certain ways, which has been corrected.

 * Windows rmdir() equivalent behaves differently from POSIX ones in
   that when used on a symbolic link that points at a directory, the
   target directory gets removed, which has been corrected.
   (merge 3e7d4888e5 tb/mingw-rmdir-symlink-to-directory later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge bfe35a6165 ah/doc-describe later to maint).
   (merge f302c1e4aa jc/clarify-revision-range later to maint).
   (merge 3127ff90ea tl/fix-packfile-uri-doc later to maint).
   (merge a84216c684 jk/doc-color-pager later to maint).
   (merge 4e0a64a713 ab/trace2-squelch-gcc-warning later to maint).
   (merge 225f7fa847 ps/rev-list-object-type-filter later to maint).
   (merge 5317dfeaed dd/honor-users-tar-in-tests later to maint).
   (merge ace6d8e3d6 tk/partial-clone-repack-doc later to maint).
   (merge 7ba68e0cf1 js/trace2-discard-event-docfix later to maint).
   (merge 8603c419d3 fc/doc-default-to-upstream-config later to maint).
   (merge 1d72b604ef jk/revision-squelch-gcc-warning later to maint).
   (merge abcb66c614 ar/typofix later to maint).
   (merge 9853830787 ah/graph-typofix later to maint).
   (merge aac578492d ab/config-hooks-path-testfix later to maint).
   (merge 98c7656a18 ar/more-typofix later to maint).
   (merge 6fb9195f6c jk/doc-max-pack-size later to maint).
   (merge 4184cbd635 ar/mailinfo-memcmp-to-skip-prefix later to maint).
   (merge 91d2347033 ar/doc-libera-chat-in-my-first-contrib later to maint).
   (merge 338abb0f04 ab/cmd-foo-should-return later to maint).
   (merge 546096a5cb ab/xdiff-bug-cleanup later to maint).
   (merge b7b793d1e7 ab/progress-cleanup later to maint).
   (merge d94f9b8e90 ba/object-info later to maint).
   (merge 52ff891c03 ar/test-code-cleanup later to maint).
   (merge a0538e5c8b dd/document-log-decorate-default later to maint).
   (merge ce24797d38 mr/cmake later to maint).
   (merge 9eb542f2ee ab/pre-auto-gc-hook-test later to maint).
   (merge 9fffc38583 bk/doc-commit-typofix later to maint).
   (merge 1cf823d8f0 ks/submodule-cleanup later to maint).
   (merge ebbf5d2b70 js/config-mak-windows-pcre-fix later to maint).
   (merge 617480d75b hn/refs-iterator-peel-returns-boolean later to maint).
   (merge 6a24cc71ed ar/submodule-helper-include-cleanup later to maint).
   (merge 5632e838f8 rs/khash-alloc-cleanup later to maint).
   (merge b1d87fbaf1 jk/typofix later to maint).
   (merge e04170697a ab/gitignore-discovery-doc later to maint).
   (merge 8232a0ff48 dl/packet-read-response-end-fix later to maint).
   (merge eb448631fb dl/diff-merge-base later to maint).
   (merge c510928a25 hn/refs-debug-empty-prefix later to maint).
   (merge ddcb189d9d tb/bitmap-type-filter-comment-fix later to maint).
   (merge 878b399734 pb/submodule-recurse-doc later to maint).
   (merge 734283855f jk/config-env-doc later to maint).
   (merge 482e1488a9 ab/getcwd-test later to maint).
   (merge f0b922473e ar/doc-markup-fix later to maint).

----------------------------------------------------------------

Changes since v2.32.0 are as follows:

Alex Henrie (6):
      merge: don't translate literal commands
      stash: don't translate literal commands
      submodule: use the imperative mood to describe the --files option
      fetch: improve grammar of "shallow roots" message
      setup: split "extensions found" messages into singular and plural
      graph: improve grammar of "invalid color" error message

Alexander Shopov (1):
      l10n: bg.po: Updated Bulgarian translation (5227t)

Anders Höckersten (1):
      describe-doc: clarify default length of abbreviation

Andrei Rybak (8):
      t: fix whitespace around &&
      mailinfo: use starts_with() when checking scissors
      *: fix typos which duplicate a word
      blame: correct name of config option in docs
      t: fix typos in test messages
      git-worktree.txt: fix typo in example path
      help: convert git_cmd to page in one place
      Documentation: render special characters correctly

Andrew Berry (1):
      docs: .gitignore parsing is to the top of the repo

Andrzej Hunt (15):
      bulk-checkin: make buffer reuse more obvious and safer
      split-index: use oideq instead of memcmp to compare object_id's
      builtin/checkout--worker: zero-initialise struct to avoid MSAN complaints
      fmt-merge-msg: free newly allocated temporary strings when done
      environment: move strbuf into block to plug leak
      builtin/submodule--helper: release unused strbuf to avoid leak
      builtin/for-each-repo: remove unnecessary argv copy to plug leak
      diffcore-rename: move old_dir/new_dir definition to plug leak
      ref-filter: also free head for ATOM_HEAD to avoid leak
      read-cache: call diff_setup_done to avoid leak
      convert: release strbuf to avoid leak
      builtin/mv: free or UNLEAK multiple pointers at end of cmd_mv
      builtin/merge: free found_ref when done
      builtin/rebase: fix options.strategy memory lifecycle
      reset: clear_unpack_trees_porcelain to plug leak

Atharva Raykar (6):
      MyFirstContribution: link #git-devel to Libera Chat
      submodule--helper: remove redundant include
      t7400: test failure to add submodule in tracked path
      submodule: prefix die messages with 'fatal'
      submodule--helper: refactor module_clone()
      submodule--helper: introduce add-clone subcommand

Bagas Sanjaya (5):
      l10n: id.po: fix mismatched variable names
      diff: --pickaxe-all typofix
      l10n: id: po-id for 2.33.0 (round 1)
      l10n: id: mismatch variable name fixes
      l10n: id: po-id for 2.33.0 round 2

Beshr Kayali (1):
      Documentation: fix typo in the --patch option of the commit command

Carlo Marcelo Arenas Belón (4):
      config.mak.uname: PCRE1 cleanup
      t7508: avoid non POSIX BRE
      oidtree: avoid nested struct oidtree_node
      object-store: avoid extra ';' from KHASH_INIT

Christopher Diaz Riveros (1):
      l10n: es: 2.33.0 round 2

Daniel Santos (12):
      l10n: pt_PT: add Portuguese translations part 4
      l10n: pt_PT: add Portuguese translations part 5
      l10n: pt_PT: translation tables
      l10n: pt_PT: remove trailing comments
      l10n: pt_PT: update git-po-helper
      l10n: pt_PT: translated git v2.33.0
      l10n: pt_PT: update translation tables
      l10n: pt_PT: cleaning duplicate translations
      l10n: pt_PT: cleaning flags mismatch
      l10n: pt_PT: update translation table
      l10n: pt_PT: git-po-helper update
      l10n: pt_PT: v2.33.0 round 2

Dennis Ameling (2):
      cmake(windows): set correct path to the system Git config
      ci (vs-build): build with NO_GETTEXT

Denton Liu (2):
      pkt-line: replace "stateless separator" with "response end"
      git-diff: fix missing --merge-base docs

Derrick Stolee (28):
      hashfile: use write_in_full()
      csum-file.h: increase hashfile buffer size
      read-cache: use hashfile instead of git_hash_ctx
      read-cache: delete unused hashing methods
      *: fix typos
      sparse-index: skip indexes with unmerged entries
      sparse-index: include EXTENDED flag when expanding
      t1092: replace incorrect 'echo' with 'cat'
      t1092: expand repository data shape
      t1092: add tests for status/add and sparse files
      unpack-trees: preserve cache_bottom
      unpack-trees: compare sparse directories correctly
      unpack-trees: rename unpack_nondirectories()
      unpack-trees: unpack sparse directory entries
      dir.c: accept a directory as part of cone-mode patterns
      diff-lib: handle index diffs with sparse dirs
      status: skip sparse-checkout percentage with sparse-index
      status: use sparse-index throughout
      wt-status: expand added sparse directory entries
      fsmonitor: integrate with sparse index
      t1092: document bad sparse-checkout behavior
      p2000: add 'git checkout -' test and decrease depth
      p2000: compress repo names
      commit: integrate with sparse-index
      sparse-index: recompute cache-tree
      checkout: stop expanding sparse indexes
      t1092: document bad 'git checkout' behavior
      unpack-trees: resolve sparse-directory/file conflicts

Elijah Newren (36):
      t6423: rename file within directory that other side renamed
      Documentation/technical: describe remembering renames optimization
      fast-rebase: change assert() to BUG()
      fast-rebase: write conflict state to working tree, index, and HEAD
      t6429: testcases for remembering renames
      merge-ort: add data structures for in-memory caching of rename detection
      merge-ort: populate caches of rename detection results
      merge-ort: add code to check for whether cached renames can be reused
      merge-ort: avoid accidental API mis-use
      merge-ort: preserve cached renames for the appropriate side
      merge-ort: add helper functions for using cached renames
      merge-ort: handle interactions of caching and rename/rename(1to1) cases
      merge-ort, diffcore-rename: employ cached renames when possible
      merge-ort: replace string_list_df_name_compare with faster alternative
      diffcore-rename: avoid unnecessary strdup'ing in break_idx
      Fix various issues found in comments
      merge-ort: miscellaneous touch-ups
      promisor-remote: output trace2 statistics for number of objects fetched
      t6421: add tests checking for excessive object downloads during merge
      diffcore-rename: allow different missing_object_cb functions
      diffcore-rename: use a different prefetch for basename comparisons
      merge-ort: add prefetching for content merges
      t6423: test directory renames causing rename-to-self
      merge-ort: ensure we consult df_conflict and path_conflicts
      merge-recursive: handle rename-to-self case
      diff: correct warning message when renameLimit exceeded
      doc: clarify documentation for rename/copy limits
      diffcore-rename: treat a rename_limit of 0 as unlimited
      rename: bump limit defaults yet again
      merge-ort: resolve paths early when we have sufficient information
      merge-ort: add some more explanations in collect_merge_info_callback()
      merge-ort: add data structures for allowable trivial directory resolves
      merge-ort: add a handle_deferred_entries() helper function
      merge-ort: defer recursing into directories when merge base is matched
      merge-ort: avoid recursing into directories when we don't need to
      merge-ort: restart merge with cached renames to reduce process entry cost

Emir Sarı (2):
      l10n: tr: v2.33.0 round 1
      l10n: tr: v2.33 (round 2)

Eric Wong (6):
      xmmap: inform Linux users of tuning knobs on ENOMEM
      speed up alt_odb_usable() with many alternates
      avoid strlen via strbuf_addstr in link_alt_odb_entry
      make object_directory.loose_objects_subdir_seen a bitmap
      oidcpy_with_padding: constify `src' arg
      oidtree: a crit-bit tree for odb_loose_cache

Fabian Wermelinger (1):
      completion: bash: fix late declaration of __git_cmd_idx

Fangyi Zhou (1):
      l10n: zh_CN: Revision for git v2.32.0 l10n round 1

Felipe Contreras (33):
      doc: refactor common asciidoc dependencies
      doc: improve asciidoc dependencies
      doc: remove unnecessary rm instances
      doc: simplify Makefile using .DELETE_ON_ERROR
      doc: avoid using rm directly
      push: rename !triangular to same_remote
      push: hedge code of default=simple
      push: copy code to setup_push_simple()
      push: reorganize setup_push_simple()
      push: simplify setup_push_simple()
      push: remove unused code in setup_push_upstream()
      doc: push: explain default=simple correctly
      push: create new get_upstream_ref() helper
      push: return immediately in trivial switch case
      push: split switch cases
      push: factor out null branch check
      push: only get the branch when needed
      push: make setup_push_* return the dst
      push: trivial simplifications
      push: get rid of all the setup_push_* functions
      push: factor out the typical case
      push: remove redundant check
      push: remove trivial function
      push: only check same_remote when needed
      push: don't get a full remote object
      doc: merge: mention default of defaulttoupstream
      doc: avoid using the gender of other people
      comments: avoid using the gender of our users
      pull: cleanup autostash check
      pull: trivial cleanup
      pull: trivial whitespace style fix
      doc: pull: fix rebase=false documentation
      test: fix for COLUMNS and bash 5

Gregory Anders (1):
      git-send-email: add option to specify sendmail command

Han-Wen Nienhuys (26):
      refs: make explicit that ref_iterator_peel returns boolean
      t4202: split testcase for invalid HEAD symref and HEAD hash
      t/helper/ref-store: initialize oid in resolve-ref
      t9300: check ref existence using test-helper rather than a file system check
      t5601: read HEAD using rev-parse
      t1401: use tar to snapshot and restore repo state
      t1401-symbolic-ref: avoid direct filesystem access
      t1413: use tar to save and restore entire .git directory
      t1301: fix typo in error message
      t5000: reformat indentation to the latest fashion
      t5000: inspect HEAD using git-rev-parse
      t7003: use rev-parse rather than FS inspection
      t5304: restyle: trim empty lines, drop ':' before >
      t5304: use "reflog expire --all" to clear the reflog
      test-lib: provide test prereq REFFILES
      t1407: require REFFILES for for_each_reflog test
      t1414: mark corruption test with REFFILES
      t2017: mark --orphan/logAllRefUpdates=false test as REFFILES
      t1404: mark tests that muck with .git directly as REFFILES.
      t7900: stop checking for loose refs
      t7003: check reflog existence only for REFFILES
      t4202: mark bogus head hash test with REFFILES
      t1415: set REFFILES for test specific to storage format
      t1415: avoid direct filesystem access for writing refs
      t7509: avoid direct file access for writing CHERRY_PICK_HEAD
      refs/debug: quote prefix

Hu Jialun (2):
      commit: reorganise commit hint strings
      commit: remove irrelavent prompt on `--allow-empty-message`

Jean-Noël Avila (5):
      help: fix small typo in error message
      l10n: fr: fix typo
      l10n: fr.po v2.33 rnd 1
      l10n: fr.po fix typos in commands and variables
      l10n: fr.po v2.33 rnd 2

Jeff King (27):
      clone: clean up directory after transport_fetch_refs() failure
      fetch-pack: signal v2 server that we are done making requests
      doc: explain the use of color.pager
      doc: warn people against --max-pack-size
      ll_binary_merge(): handle XDL_MERGE_FAVOR_UNION
      ll_union_merge(): pass name labels to ll_xdl_merge()
      ll_union_merge(): rename path_unused parameter
      add_pending_object_with_path(): work around "gcc -O3" complaint
      bitmaps: don't recurse into trees already in the bitmap
      t: use portable wrapper for readlink(1)
      pretty.h: update and expand docstring for userformat_find_requirements()
      log: avoid loading decorations for userformats that don't need it
      object.h: expand docstring for lookup_unknown_object()
      object.h: add lookup_object_by_type() function
      load_ref_decorations(): avoid parsing non-tag objects
      add_ref_decoration(): rename s/type/deco_type/
      test-lib: avoid accidental globbing in match_pattern_list()
      doc/rev-list-options: fix duplicate word typo
      load_ref_decorations(): fix decoration with tags
      t0000: clear GIT_SKIP_TESTS before running sub-tests
      doc/git-config: explain --file instead of referring to GIT_CONFIG
      doc/git-config: clarify GIT_CONFIG environment variable
      doc/git-config: simplify "override" advice for FILES section
      pack-bitmap: check pack validity when opening bitmap
      submodule: drop unused sm_name parameter from show_fetch_remotes()
      ci: run "apt-get update" before "apt-get install"
      ci/install-dependencies: handle "sparse" job package installs

Jiang Xin (11):
      t6020: fix incompatible parameter expansion
      sideband: don't lose clear-to-eol at packet boundary
      test: compare raw output, not mangle tabs and spaces
      test: refactor to use "test_commit" to create commits
      test: refactor to use "get_abbrev_oid" to get abbrev oid
      l10n: fixed tripple-letter typos
      l10n: git.pot: v2.33.0 round 1 (38 new, 15 removed)
      l10n: git.pot: v2.33.0 round 2 (11 new, 8 removed)
      l10n: README: refactor to use GFM syntax
      l10n: zh_CN: for git v2.33.0 l10n round 2
      l10n: TEAMS: change Simplified Chinese team leader

Johannes Schindelin (15):
      multimail: stop shipping a copy
      subtree: fix the GIT_EXEC_PATH sanity check to work on Windows
      subtree: fix assumption about the directory separator
      pager: avoid setting COLUMNS when we're guessing its value
      mingw: move Git for Windows' system config where users expect it
      config: normalize the path of the system gitconfig
      ci: use the new GitHub Action to download git-sdk-64-minimal
      ci (vs-build): use `cmd` to copy the DLLs, not `powershell`
      ci: upgrade to using actions/{up,down}load-artifacts v2
      ci (windows): transfer also the Git-tracked files to the test jobs
      artifacts-tar: respect NO_GETTEXT
      ci: accelerate the checkout
      ci: run `make sparse` as part of the GitHub workflow
      ci(check-whitespace): stop requiring a read/write token
      ci(check-whitespace): restrict to the intended commits

Jonathan Nieder (2):
      xsize_t: avoid implementation defined behavior when len < 0
      Revert 'diff-merges: let "-m" imply "-p"'

Jonathan Tan (7):
      repository: move global r_f_p_c to repo struct
      promisor-remote: support per-repository config
      submodule: refrain from filtering GIT_CONFIG_COUNT
      run-command: refactor subprocess env preparation
      promisor-remote: teach lazy-fetch in any repo
      unpack-trees: refactor prefetching code
      cache-tree: prefetch in partial clone read-tree

Jordi Mas (3):
      l10n: Update Catalan translation
      l10n: Update Catalan translation
      l10n: Update Catalan translation

Josh Steadmon (1):
      docs: fix api-trace2 doc for "too_many_files" event

Julian Verdurmen (1):
      userdiff: add support for C# record types

Junio C Hamano (14):
      revisions(7): clarify that most commands take a single revision range
      The first batch post Git 2.32
      The second batch
      The third batch
      The fourth batch
      CodingGuidelines: recommend gender-neutral description
      The fifth batch
      The sixth batch
      The seventh batch
      Git 2.33-rc0
      The eighth batch
      Git 2.33-rc1
      Git 2.33-rc2
      Git 2.33

Kaartic Sivaraam (1):
      submodule: remove unnecessary `prefix` based option logic

Matheus Tavares (1):
      parallel-checkout: send the new object_id algo field to the workers

Matthew Rogers (3):
      cmake: add knob to disable vcpkg
      cmake: create compile_commands.json by default
      cmake: add warning for ignored MSGFMT_EXE

Michael Schindler (1):
      mergetools/kdiff3: make kdiff3 work on Windows too

Patrick Steinhardt (2):
      perf: fix when running with TEST_OUTPUT_DIRECTORY
      t0000: fix test if run with TEST_OUTPUT_DIRECTORY

Peter Krefting (3):
      l10n: fixed typos of mismatched constant strings
      l10n: sv.po: Update Swedish translation (5227t0f0u)
      l10n: sv.po: Update Swedish translation (5230t0f0u)

Philippe Blain (6):
      parse-options: don't complete option aliases by default
      doc: clarify description of 'submodule.recurse'
      merge: add missing word "strategy" to a message
      Documentation: define 'MERGE_AUTOSTASH'
      merge: apply autostash if fast-forward fails
      merge: apply autostash if merge strategy fails

Ralf Thielow (3):
      l10n: update German translation for Git v2.33.0
      l10n: de.po: fix typos
      l10n: update German translation for Git v2.33.0 (rnd2)

René Scharfe (5):
      grep: report missing left operand of --and
      khash: clarify that allocations never fail
      use fspathhash() everywhere
      object-file: use unsigned arithmetic with bit mask
      oidtree: avoid unaligned access to crit-bit tree

Reuven Y (1):
      docs: improve fast-forward in glossary content

Sergey Organov (10):
      t4013: test that "-m" alone has no effect in "git log"
      t4013: test "git log -m --raw"
      t4013: test "git log -m --stat"
      t4013: test "git diff-tree -m"
      t4013: test "git diff-index -m"
      diff-merges: move specific diff-index "-m" handling to diff-index
      git-svn: stop passing "-m" to "git rev-list"
      stash list: stop passing "-m" to "git log"
      diff-merges: rename "combined_imply_patch" to "merges_imply_patch"
      diff-merges: let "-m" imply "-p"

Stephen Manz (3):
      t2400: clean up '"add" worktree with lock' test
      worktree: mark lock strings with `_()` for translation
      worktree: teach `add` to accept --reason <string> with --lock

Tao Klerks (1):
      Remove warning that repack only works on non-promisor packfiles

Taylor Blau (6):
      csum-file: introduce checksum_valid()
      commit-graph: rewrite to use checksum_valid()
      midx: don't reuse corrupt MIDXs when writing
      midx: report checksum mismatches during 'verify'
      multi-pack-index: fix potential segfault without sub-command
      pack-bitmap: clarify comment in filter_bitmap_exclude_type()

Teng Long (1):
      packfile-uri.txt: fix blobPackfileUri description

Thomas Braun (1):
      completion: add --anchored to diff's options

Thomas Bétous (1):
      mingw: align symlinks-related rmdir() behavior with Linux

Trần Ngọc Quân (3):
      l10n: vi.po(5227t): Updated Vietnamese translation for v2.32.0
      l10n: vi.po(5227t): Fixed typo after run git-po-helper
      l10n: vi.po(5230t): Updated translation for v2.32.0 round 2

Wolfgang Müller (1):
      rev-parse: mark die() messages for translation

Yi-Jyun Pan (2):
      l10n: zh_TW.po: update for v2.33.0 rnd 2
      l10n: zh_TW.po: remove the obsolete glossary

ZheNing Hu (4):
      ref-filter: add objectsize to used_atom
      ref-filter: introduce enum atom_type
      cat-file: handle trivial --batch format with --batch-all-objects
      cat-file: merge two block into one

brian m. carlson (1):
      rev-list: add option for --pretty=format without header

dorgon.chang (1):
      git-p4: fix failed submit by skip non-text data files

edef (1):
      mailinfo: don't discard names under 3 characters

Ævar Arnfjörð Bjarmason (93):
      test-lib: bring $remove_trash out of retirement
      test-lib tests: remove dead GIT_TEST_FRAMEWORK_SELFTEST variable
      test-lib-functions: reword "test_commit --append" docs
      test-lib-functions: document test_commit --no-tag
      test-lib functions: add an --annotated option to "test_commit"
      describe tests: convert setup to use test_commit
      test-lib functions: add --printf option to test_commit
      submodule tests: use symbolic-ref --short to discover branch name
      test-lib: reformat argument list in test_create_repo()
      test-lib: do not show advice about init.defaultBranch under --verbose
      test-lib: split up and deprecate test_create_repo()
      grep/pcre2 tests: reword comments referring to kwset
      pickaxe tests: refactor to use test_commit --append --printf
      pickaxe tests: add test for diffgrep_consume() internals
      pickaxe tests: add test for "log -S" not being a regex
      pickaxe tests: test for -G, -S and --find-object incompatibility
      pickaxe tests: add missing test for --no-pickaxe-regex being an error
      pickaxe: die when -G and --pickaxe-regex are combined
      pickaxe: die when --find-object and --pickaxe-all are combined
      diff.h: move pickaxe fields together again
      pickaxe/style: consolidate declarations and assignments
      perf: add performance test for pickaxe
      pickaxe: refactor function selection in diffcore-pickaxe()
      pickaxe: assert that we must have a needle under -G or -S
      pickaxe -S: support content with NULs under --pickaxe-regex
      pickaxe: rename variables in has_changes() for brevity
      pickaxe -S: slightly optimize contains()
      xdiff-interface: prepare for allowing early return
      xdiff-interface: allow early return from xdiff_emit_line_fn
      pickaxe -G: terminate early on matching lines
      pickaxe -G: don't special-case create/delete
      xdiff users: use designated initializers for out_line
      xdiff-interface: replace discard_hunk_line() with a flag
      describe tests: improve test for --work-tree & --dirty
      describe tests: refactor away from glob matching
      describe tests: don't rely on err.actual from "check_describe"
      describe tests: fix nested "test_expect_success" call
      describe tests: support -C in "check_describe"
      trace2: refactor to avoid gcc warning under -O3
      send-email tests: support GIT_TEST_PERL_FATAL_WARNINGS=true
      send-email tests: test for boolean variables without a value
      send-email: remove non-working support for "sendemail.smtpssl"
      send-email: refactor sendemail.smtpencryption config parsing
      send-email: copy "config_regxp" into git-send-email.perl
      send-email: lazily load config for a big speedup
      send-email: lazily shell out to "git var"
      send-email: use function syntax instead of barewords
      send-email: get rid of indirect object syntax
      send-email: lazily load modules for a big speedup
      perl: lazily load some common Git.pm setup code
      send-email: move trivial config handling to Perl
      perl: nano-optimize by replacing Cwd::cwd() with Cwd::getcwd()
      protocol-caps.h: add newline at end of file
      read-cache.c: don't guard calls to progress.c API
      xdiff: use BUG(...), not xdl_bug(...)
      builtins + test helpers: use return instead of exit() in cmd_*
      mktag tests: parse out options in helper
      mktag tests: invert --no-strict test
      show-branch tests: rename the one "show-branch" test file
      show-branch tests: modernize test code
      pre-commit hook tests: don't leave "actual" nonexisting on failure
      gc tests: add a test for the "pre-auto-gc" hook
      mktag tests: test hash-object --literally and unreachable fsck
      mktag tests: test update-ref and reachable fsck
      mktag tests: test for-each-ref
      mktag tests: test fast-export
      show-branch: don't <COLOR></RESET> for space characters
      show-branch tests: add missing tests
      Makefile: add and use the ".DELETE_ON_ERROR" flag
      test-lib.sh: set COLUMNS=80 for --verbose repeatability
      send-pack.c: move "no refs in common" abort earlier
      fetch: document the --negotiate-only option
      *.h: move some *_INIT to designated initializers
      *.c *_init(): define in terms of corresponding *_INIT macro
      dir.[ch]: replace dir_init() with DIR_INIT
      string-list.[ch]: add a string_list_init_{nodup,dup}()
      string-list.h users: change to use *_{nodup,dup}()
      bundle cmd: stop leaking memory from parse_options_cmd_bundle()
      bundle.c: use a temporary variable for OIDs and names
      bundle: remove "ref_list" in favor of string-list.c API
      imap-send.c: use less verbose strbuf_fread() idiom
      fetch: fix segfault in --negotiate-only without --negotiation-tip=*
      *.c static functions: don't forward-declare __attribute__
      sequencer.c: move static function to avoid forward decl
      *.c static functions: add missing __attribute__((format))
      *.h: add a few missing __attribute__((format))
      advice.h: add missing __attribute__((format)) & fix usage
      test-lib-functions: use test-tool for [de]packetize()
      SubmittingPatches: move discussion of Signed-off-by above "send"
      SubmittingPatches: replace discussion of Travis with GitHub Actions
      bundle tests: use ">file" not ": >file"
      bundle tests: use test_cmp instead of grep
      t0001: fix broken not-quite getcwd(3) test in bed67874e2

Đoàn Trần Công Danh (6):
      t: use configured TAR instead of tar
      doc/log: correct default for --decorate
      t: use user-specified utf-8 locale for testing svn
      test-lib-functions: introduce test_stdout_line_count
      t6400: preserve git ls-files exit status code
      t6402: preserve git exit status code

依云 (1):
      l10n: zh_CN: review for git v2.32.0 l10n round 1


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.33.0-rc2
@ 2021-08-11 23:22  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2021-08-11 23:22 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.33.0-rc2 is now available for testing at
the usual places.  It is comprised of 401 non-merge commits since
v2.32.0, contributed by 63 people, 19 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.33.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.32.0 are as follows.
Welcome to the Git development community!

  Anders Höckersten, Andrew Berry, Andy AO, Beshr Kayali,
  dorgon.chang, edef, Fabian Stelzer, Fabian Wermelinger, Gregory
  Anders, Greg Pflaum, Hu Jialun, Jason Hatton, Julian Verdurmen,
  Matthew Hughes, Michael Schindler, Reuven Y, Stephen Manz,
  Tao Klerks, and Teng Long.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alex Henrie, Anders Kaseorg,
  Andrei Rybak, Andrzej Hunt, Atharva Raykar, Bagas Sanjaya,
  brian m. carlson, Carlo Marcelo Arenas Belón, Christian Couder,
  Dennis Ameling, Denton Liu, Derrick Stolee, Đoàn Trần Công
  Danh, Elijah Newren, Emily Shaffer, Eric Sunshine, Eric Wong,
  Felipe Contreras, Han-Wen Nienhuys, Jean-Noël Avila, Jeff King,
  Jiang Xin, Johannes Schindelin, Jonathan Nieder, Jonathan Tan,
  Josh Steadmon, Junio C Hamano, Kaartic Sivaraam, Martin Ågren,
  Matheus Tavares, Matthew Rogers, Matthias Aßhauer, Nicolas
  Pitre, Patrick Steinhardt, Philippe Blain, René Scharfe,
  Sergey Organov, Shourya Shukla, Taylor Blau, Thomas Bétous,
  Thomas Braun, Wolfgang Müller, and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git 2.33 Release Notes (draft)
==============================

Updates since Git 2.32
----------------------

UI, Workflows & Features

 * "git send-email" learned the "--sendmail-cmd" command line option
   and the "sendemail.sendmailCmd" configuration variable, which is a
   more sensible approach than the current way of repurposing the
   "smtp-server" that is meant to name the server to instead name the
   command to talk to the server.

 * The "-m" option in "git log -m" that does not specify which format,
   if any, of diff is desired did not have any visible effect; it now
   implies some form of diff (by default "--patch") is produced.

 * The userdiff pattern for C# learned the token "record".

 * "git rev-list" learns to omit the "commit <object-name>" header
   lines from the output with the `--no-commit-header` option.

 * "git worktree add --lock" learned to record why the worktree is
   locked with a custom message.


Performance, Internal Implementation, Development Support etc.

 * The code to handle the "--format" option in "for-each-ref" and
   friends made too many string comparisons on %(atom)s used in the
   format string, which has been corrected by converting them into
   enum when the format string is parsed.

 * Use the hashfile API in the codepath that writes the index file to
   reduce code duplication.

 * Repeated rename detections in a sequence of mergy operations have
   been optimized out for the 'ort' merge strategy.

 * Preliminary clean-up of tests before the main reftable changes
   hits the codebase.

 * The backend for "diff -G/-S" has been updated to use pcre2 engine
   when available.

 * Use ".DELETE_ON_ERROR" pseudo target to simplify our Makefile.

 * Code cleanup around struct_type_init() functions.

 * "git send-email" optimization.

 * GitHub Actions / CI update.
   (merge 0dc787a9f2 js/ci-windows-update later to maint).

 * Object accesses in repositories with many alternate object store
   have been optimized.

 * "git log" has been optimized not to waste cycles to load ref
   decoration data that may not be needed.

 * Many "printf"-like helper functions we have have been annotated
   with __attribute__() to catch placeholder/parameter mismatches.

 * Tests that cover protocol bits have been updated and helpers
   used there have been consolidated.

 * The CI gained a new job to run "make sparse" check.

 * "git status" codepath learned to work with sparsely populated index
   without hydrating it fully.

 * A guideline for gender neutral documentation has been added.

 * Documentation on "git diff -l<n>" and diff.renameLimit have been
   updated, and the defaults for these limits have been raised.

 * The completion support used to offer alternate spelling of options
   that exist only for compatibility, which has been corrected.

 * "TEST_OUTPUT_DIRECTORY=there make test" failed to work, which has
   been corrected.

 * "git bundle" gained more test coverage.

 * "git read-tree" had a codepath where blobs are fetched one-by-one
   from the promisor remote, which has been corrected to fetch in bulk.

 * Rewrite of "git submodule" in C continues.

 * "git checkout" and "git commit" learn to work without unnecessarily
   expanding sparse indexes.


Fixes since v2.32
-----------------

 * We historically rejected a very short string as an author name
   while accepting a patch e-mail, which has been loosened.
   (merge 72ee47ceeb ef/mailinfo-short-name later to maint).

 * The parallel checkout codepath did not initialize object ID field
   used to talk to the worker processes in a futureproof way.

 * Rewrite code that triggers undefined behaviour warning.
   (merge aafa5df0df jn/size-t-casted-to-off-t-fix later to maint).

 * The description of "fast-forward" in the glossary has been updated.
   (merge e22f2daed0 ry/clarify-fast-forward-in-glossary later to maint).

 * Recent "git clone" left a temporary directory behind when the
   transport layer returned an failure.
   (merge 6aacb7d861 jk/clone-clean-upon-transport-error later to maint).

 * "git fetch" over protocol v2 left its side of the socket open after
   it finished speaking, which unnecessarily wasted the resource on
   the other side.
   (merge ae1a7eefff jk/fetch-pack-v2-half-close-early later to maint).

 * The command line completion (in contrib/) learned that "git diff"
   takes the "--anchored" option.
   (merge d1e7c2cac9 tb/complete-diff-anchored later to maint).

 * "git-svn" tests assumed that "locale -a", which is used to pick an
   available UTF-8 locale, is available everywhere.  A knob has been
   introduced to allow testers to specify a suitable locale to use.
   (merge 482c962de4 dd/svn-test-wo-locale-a later to maint).

 * Update "git subtree" to work better on Windows.
   (merge 77f37de39f js/subtree-on-windows-fix later to maint).

 * Remove multimail from contrib/
   (merge f74d11471f js/no-more-multimail later to maint).

 * Make the codebase MSAN clean.
   (merge 4dbc55e87d ah/uninitialized-reads-fix later to maint).

 * Work around inefficient glob substitution in older versions of bash
   by rewriting parts of a test.
   (merge eb87c6f559 jx/t6020-with-older-bash later to maint).

 * Avoid duplicated work while building reachability bitmaps.
   (merge aa9ad6fee5 jk/bitmap-tree-optim later to maint).

 * We broke "GIT_SKIP_TESTS=t?000" to skip certain tests in recent
   update, which got fixed.

 * The side-band demultiplexer that is used to display progress output
   from the remote end did not clear the line properly when the end of
   line hits at a packet boundary, which has been corrected.

 * Some test scripts assumed that readlink(1) was universally
   installed and available, which is not the case.
   (merge 7c0afdf23c jk/test-without-readlink-1 later to maint).

 * Recent update to completion script (in contrib/) broke those who
   use the __git_complete helper to define completion to their custom
   command.
   (merge cea232194d fw/complete-cmd-idx-fix later to maint).

 * Output from some of our tests were affected by the width of the
   terminal that they were run in, which has been corrected by
   exporting a fixed value in the COLUMNS environment.
   (merge c49a177bec ab/fix-columns-to-80-during-tests later to maint).

 * On Windows, mergetool has been taught to find kdiff3.exe just like
   it finds winmerge.exe.
   (merge 47eb4c6890 ms/mergetools-kdiff3-on-windows later to maint).

 * When we cannot figure out how wide the terminal is, we use a
   fallback value of 80 ourselves (which cannot be avoided), but when
   we run the pager, we export it in COLUMNS, which forces the pager
   to use the hardcoded value, even when the pager is perfectly
   capable to figure it out itself.  Stop exporting COLUMNS when we
   fall back on the hardcoded default value for our own use.
   (merge 9b6e2c8b98 js/stop-exporting-bogus-columns later to maint).

 * "git cat-file --batch-all-objects"" misbehaved when "--batch" is in
   use and did not ask for certain object traits.
   (merge ee02ac6164 zh/cat-file-batch-fix later to maint).

 * Some code and doc clarification around "git push".

 * The "union" conflict resultion variant misbehaved when used with
   binary merge driver.
   (merge 382b601acd jk/union-merge-binary later to maint).

 * Prevent "git p4" from failing to submit changes to binary file.
   (merge 54662d5958 dc/p4-binary-submit-fix later to maint).

 * "git grep --and -e foo" ought to have been diagnosed as an error
   but instead segfaulted, which has been corrected.
   (merge fe7fe62d8d rs/grep-parser-fix later to maint).

 * The merge code had funny interactions between content based rename
   detection and directory rename detection.
   (merge 3585d0ea23 en/merge-dir-rename-corner-case-fix later to maint).

 * When rebuilding the multi-pack index file reusing an existing one,
   we used to blindly trust the existing file and ended up carrying
   corrupted data into the updated file, which has been corrected.
   (merge f89ecf7988 tb/midx-use-checksum later to maint).

 * Update the location of system-side configuration file on Windows.
   (merge e355307692 js/gfw-system-config-loc-fix later to maint).

 * Code recently added to support common ancestry negotiation during
   "git push" did not sanity check its arguments carefully enough.
   (merge eff40457a4 ab/fetch-negotiate-segv-fix later to maint).

 * Update the documentation not to assume users are of certain gender
   and adds to guidelines to do so.
   (merge 46a237f42f ds/gender-neutral-doc later to maint).

 * "git commit --allow-empty-message" won't abort the operation upon
   an empty message, but the hint shown in the editor said otherwise.
   (merge 6f70f00b4f hj/commit-allow-empty-message later to maint).

 * The code that gives an error message in "git multi-pack-index" when
   no subcommand is given tried to print a NULL pointer as a strong,
   which has been corrected.
   (merge 88617d11f9 tb/reverse-midx later to maint).

 * CI update.
   (merge a066a90db6 js/ci-check-whitespace-updates later to maint).

 * Documentation fix for "git pull --rebase=no".
   (merge d3236becec fc/pull-no-rebase-merges-theirs-into-ours later to maint).

 * A race between repacking and using pack bitmaps has been corrected.
   (merge dc1daacdcc jk/check-pack-valid-before-opening-bitmap later to maint).

 * The local changes stashed by "git merge --autostash" were lost when
   the merge failed in certain ways, which has been corrected.

 * Windows rmdir() equivalent behaves differently from POSIX ones in
   that when used on a symbolic link that points at a directory, the
   target directory gets removed, which has been corrected.
   (merge 3e7d4888e5 tb/mingw-rmdir-symlink-to-directory later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge bfe35a6165 ah/doc-describe later to maint).
   (merge f302c1e4aa jc/clarify-revision-range later to maint).
   (merge 3127ff90ea tl/fix-packfile-uri-doc later to maint).
   (merge a84216c684 jk/doc-color-pager later to maint).
   (merge 4e0a64a713 ab/trace2-squelch-gcc-warning later to maint).
   (merge 225f7fa847 ps/rev-list-object-type-filter later to maint).
   (merge 5317dfeaed dd/honor-users-tar-in-tests later to maint).
   (merge ace6d8e3d6 tk/partial-clone-repack-doc later to maint).
   (merge 7ba68e0cf1 js/trace2-discard-event-docfix later to maint).
   (merge 8603c419d3 fc/doc-default-to-upstream-config later to maint).
   (merge 1d72b604ef jk/revision-squelch-gcc-warning later to maint).
   (merge abcb66c614 ar/typofix later to maint).
   (merge 9853830787 ah/graph-typofix later to maint).
   (merge aac578492d ab/config-hooks-path-testfix later to maint).
   (merge 98c7656a18 ar/more-typofix later to maint).
   (merge 6fb9195f6c jk/doc-max-pack-size later to maint).
   (merge 4184cbd635 ar/mailinfo-memcmp-to-skip-prefix later to maint).
   (merge 91d2347033 ar/doc-libera-chat-in-my-first-contrib later to maint).
   (merge 338abb0f04 ab/cmd-foo-should-return later to maint).
   (merge 546096a5cb ab/xdiff-bug-cleanup later to maint).
   (merge b7b793d1e7 ab/progress-cleanup later to maint).
   (merge d94f9b8e90 ba/object-info later to maint).
   (merge 52ff891c03 ar/test-code-cleanup later to maint).
   (merge a0538e5c8b dd/document-log-decorate-default later to maint).
   (merge ce24797d38 mr/cmake later to maint).
   (merge 9eb542f2ee ab/pre-auto-gc-hook-test later to maint).
   (merge 9fffc38583 bk/doc-commit-typofix later to maint).
   (merge 1cf823d8f0 ks/submodule-cleanup later to maint).
   (merge ebbf5d2b70 js/config-mak-windows-pcre-fix later to maint).
   (merge 617480d75b hn/refs-iterator-peel-returns-boolean later to maint).
   (merge 6a24cc71ed ar/submodule-helper-include-cleanup later to maint).
   (merge 5632e838f8 rs/khash-alloc-cleanup later to maint).
   (merge b1d87fbaf1 jk/typofix later to maint).
   (merge e04170697a ab/gitignore-discovery-doc later to maint).
   (merge 8232a0ff48 dl/packet-read-response-end-fix later to maint).
   (merge eb448631fb dl/diff-merge-base later to maint).
   (merge c510928a25 hn/refs-debug-empty-prefix later to maint).
   (merge ddcb189d9d tb/bitmap-type-filter-comment-fix later to maint).
   (merge 878b399734 pb/submodule-recurse-doc later to maint).
   (merge 734283855f jk/config-env-doc later to maint).
   (merge 482e1488a9 ab/getcwd-test later to maint).
   (merge f0b922473e ar/doc-markup-fix later to maint).

----------------------------------------------------------------

Changes since v2.32.0 are as follows:

Alex Henrie (6):
      merge: don't translate literal commands
      stash: don't translate literal commands
      submodule: use the imperative mood to describe the --files option
      fetch: improve grammar of "shallow roots" message
      setup: split "extensions found" messages into singular and plural
      graph: improve grammar of "invalid color" error message

Anders Höckersten (1):
      describe-doc: clarify default length of abbreviation

Andrei Rybak (8):
      t: fix whitespace around &&
      mailinfo: use starts_with() when checking scissors
      *: fix typos which duplicate a word
      blame: correct name of config option in docs
      t: fix typos in test messages
      git-worktree.txt: fix typo in example path
      help: convert git_cmd to page in one place
      Documentation: render special characters correctly

Andrew Berry (1):
      docs: .gitignore parsing is to the top of the repo

Andrzej Hunt (15):
      bulk-checkin: make buffer reuse more obvious and safer
      split-index: use oideq instead of memcmp to compare object_id's
      builtin/checkout--worker: zero-initialise struct to avoid MSAN complaints
      fmt-merge-msg: free newly allocated temporary strings when done
      environment: move strbuf into block to plug leak
      builtin/submodule--helper: release unused strbuf to avoid leak
      builtin/for-each-repo: remove unnecessary argv copy to plug leak
      diffcore-rename: move old_dir/new_dir definition to plug leak
      ref-filter: also free head for ATOM_HEAD to avoid leak
      read-cache: call diff_setup_done to avoid leak
      convert: release strbuf to avoid leak
      builtin/mv: free or UNLEAK multiple pointers at end of cmd_mv
      builtin/merge: free found_ref when done
      builtin/rebase: fix options.strategy memory lifecycle
      reset: clear_unpack_trees_porcelain to plug leak

Atharva Raykar (6):
      MyFirstContribution: link #git-devel to Libera Chat
      submodule--helper: remove redundant include
      t7400: test failure to add submodule in tracked path
      submodule: prefix die messages with 'fatal'
      submodule--helper: refactor module_clone()
      submodule--helper: introduce add-clone subcommand

Bagas Sanjaya (1):
      diff: --pickaxe-all typofix

Beshr Kayali (1):
      Documentation: fix typo in the --patch option of the commit command

Carlo Marcelo Arenas Belón (4):
      config.mak.uname: PCRE1 cleanup
      t7508: avoid non POSIX BRE
      oidtree: avoid nested struct oidtree_node
      object-store: avoid extra ';' from KHASH_INIT

Dennis Ameling (2):
      cmake(windows): set correct path to the system Git config
      ci (vs-build): build with NO_GETTEXT

Denton Liu (2):
      pkt-line: replace "stateless separator" with "response end"
      git-diff: fix missing --merge-base docs

Derrick Stolee (28):
      hashfile: use write_in_full()
      csum-file.h: increase hashfile buffer size
      read-cache: use hashfile instead of git_hash_ctx
      read-cache: delete unused hashing methods
      *: fix typos
      sparse-index: skip indexes with unmerged entries
      sparse-index: include EXTENDED flag when expanding
      t1092: replace incorrect 'echo' with 'cat'
      t1092: expand repository data shape
      t1092: add tests for status/add and sparse files
      unpack-trees: preserve cache_bottom
      unpack-trees: compare sparse directories correctly
      unpack-trees: rename unpack_nondirectories()
      unpack-trees: unpack sparse directory entries
      dir.c: accept a directory as part of cone-mode patterns
      diff-lib: handle index diffs with sparse dirs
      status: skip sparse-checkout percentage with sparse-index
      status: use sparse-index throughout
      wt-status: expand added sparse directory entries
      fsmonitor: integrate with sparse index
      t1092: document bad sparse-checkout behavior
      p2000: add 'git checkout -' test and decrease depth
      p2000: compress repo names
      commit: integrate with sparse-index
      sparse-index: recompute cache-tree
      checkout: stop expanding sparse indexes
      t1092: document bad 'git checkout' behavior
      unpack-trees: resolve sparse-directory/file conflicts

Elijah Newren (36):
      t6423: rename file within directory that other side renamed
      Documentation/technical: describe remembering renames optimization
      fast-rebase: change assert() to BUG()
      fast-rebase: write conflict state to working tree, index, and HEAD
      t6429: testcases for remembering renames
      merge-ort: add data structures for in-memory caching of rename detection
      merge-ort: populate caches of rename detection results
      merge-ort: add code to check for whether cached renames can be reused
      merge-ort: avoid accidental API mis-use
      merge-ort: preserve cached renames for the appropriate side
      merge-ort: add helper functions for using cached renames
      merge-ort: handle interactions of caching and rename/rename(1to1) cases
      merge-ort, diffcore-rename: employ cached renames when possible
      merge-ort: replace string_list_df_name_compare with faster alternative
      diffcore-rename: avoid unnecessary strdup'ing in break_idx
      Fix various issues found in comments
      merge-ort: miscellaneous touch-ups
      promisor-remote: output trace2 statistics for number of objects fetched
      t6421: add tests checking for excessive object downloads during merge
      diffcore-rename: allow different missing_object_cb functions
      diffcore-rename: use a different prefetch for basename comparisons
      merge-ort: add prefetching for content merges
      t6423: test directory renames causing rename-to-self
      merge-ort: ensure we consult df_conflict and path_conflicts
      merge-recursive: handle rename-to-self case
      diff: correct warning message when renameLimit exceeded
      doc: clarify documentation for rename/copy limits
      diffcore-rename: treat a rename_limit of 0 as unlimited
      rename: bump limit defaults yet again
      merge-ort: resolve paths early when we have sufficient information
      merge-ort: add some more explanations in collect_merge_info_callback()
      merge-ort: add data structures for allowable trivial directory resolves
      merge-ort: add a handle_deferred_entries() helper function
      merge-ort: defer recursing into directories when merge base is matched
      merge-ort: avoid recursing into directories when we don't need to
      merge-ort: restart merge with cached renames to reduce process entry cost

Eric Wong (6):
      xmmap: inform Linux users of tuning knobs on ENOMEM
      speed up alt_odb_usable() with many alternates
      avoid strlen via strbuf_addstr in link_alt_odb_entry
      make object_directory.loose_objects_subdir_seen a bitmap
      oidcpy_with_padding: constify `src' arg
      oidtree: a crit-bit tree for odb_loose_cache

Fabian Wermelinger (1):
      completion: bash: fix late declaration of __git_cmd_idx

Felipe Contreras (33):
      doc: refactor common asciidoc dependencies
      doc: improve asciidoc dependencies
      doc: remove unnecessary rm instances
      doc: simplify Makefile using .DELETE_ON_ERROR
      doc: avoid using rm directly
      push: rename !triangular to same_remote
      push: hedge code of default=simple
      push: copy code to setup_push_simple()
      push: reorganize setup_push_simple()
      push: simplify setup_push_simple()
      push: remove unused code in setup_push_upstream()
      doc: push: explain default=simple correctly
      push: create new get_upstream_ref() helper
      push: return immediately in trivial switch case
      push: split switch cases
      push: factor out null branch check
      push: only get the branch when needed
      push: make setup_push_* return the dst
      push: trivial simplifications
      push: get rid of all the setup_push_* functions
      push: factor out the typical case
      push: remove redundant check
      push: remove trivial function
      push: only check same_remote when needed
      push: don't get a full remote object
      doc: merge: mention default of defaulttoupstream
      doc: avoid using the gender of other people
      comments: avoid using the gender of our users
      pull: cleanup autostash check
      pull: trivial cleanup
      pull: trivial whitespace style fix
      doc: pull: fix rebase=false documentation
      test: fix for COLUMNS and bash 5

Gregory Anders (1):
      git-send-email: add option to specify sendmail command

Han-Wen Nienhuys (26):
      refs: make explicit that ref_iterator_peel returns boolean
      t4202: split testcase for invalid HEAD symref and HEAD hash
      t/helper/ref-store: initialize oid in resolve-ref
      t9300: check ref existence using test-helper rather than a file system check
      t5601: read HEAD using rev-parse
      t1401: use tar to snapshot and restore repo state
      t1401-symbolic-ref: avoid direct filesystem access
      t1413: use tar to save and restore entire .git directory
      t1301: fix typo in error message
      t5000: reformat indentation to the latest fashion
      t5000: inspect HEAD using git-rev-parse
      t7003: use rev-parse rather than FS inspection
      t5304: restyle: trim empty lines, drop ':' before >
      t5304: use "reflog expire --all" to clear the reflog
      test-lib: provide test prereq REFFILES
      t1407: require REFFILES for for_each_reflog test
      t1414: mark corruption test with REFFILES
      t2017: mark --orphan/logAllRefUpdates=false test as REFFILES
      t1404: mark tests that muck with .git directly as REFFILES.
      t7900: stop checking for loose refs
      t7003: check reflog existence only for REFFILES
      t4202: mark bogus head hash test with REFFILES
      t1415: set REFFILES for test specific to storage format
      t1415: avoid direct filesystem access for writing refs
      t7509: avoid direct file access for writing CHERRY_PICK_HEAD
      refs/debug: quote prefix

Hu Jialun (2):
      commit: reorganise commit hint strings
      commit: remove irrelavent prompt on `--allow-empty-message`

Jean-Noël Avila (1):
      help: fix small typo in error message

Jeff King (27):
      clone: clean up directory after transport_fetch_refs() failure
      fetch-pack: signal v2 server that we are done making requests
      doc: explain the use of color.pager
      doc: warn people against --max-pack-size
      ll_binary_merge(): handle XDL_MERGE_FAVOR_UNION
      ll_union_merge(): pass name labels to ll_xdl_merge()
      ll_union_merge(): rename path_unused parameter
      add_pending_object_with_path(): work around "gcc -O3" complaint
      bitmaps: don't recurse into trees already in the bitmap
      t: use portable wrapper for readlink(1)
      pretty.h: update and expand docstring for userformat_find_requirements()
      log: avoid loading decorations for userformats that don't need it
      object.h: expand docstring for lookup_unknown_object()
      object.h: add lookup_object_by_type() function
      load_ref_decorations(): avoid parsing non-tag objects
      add_ref_decoration(): rename s/type/deco_type/
      test-lib: avoid accidental globbing in match_pattern_list()
      doc/rev-list-options: fix duplicate word typo
      load_ref_decorations(): fix decoration with tags
      t0000: clear GIT_SKIP_TESTS before running sub-tests
      doc/git-config: explain --file instead of referring to GIT_CONFIG
      doc/git-config: clarify GIT_CONFIG environment variable
      doc/git-config: simplify "override" advice for FILES section
      pack-bitmap: check pack validity when opening bitmap
      submodule: drop unused sm_name parameter from show_fetch_remotes()
      ci: run "apt-get update" before "apt-get install"
      ci/install-dependencies: handle "sparse" job package installs

Jiang Xin (5):
      t6020: fix incompatible parameter expansion
      sideband: don't lose clear-to-eol at packet boundary
      test: compare raw output, not mangle tabs and spaces
      test: refactor to use "test_commit" to create commits
      test: refactor to use "get_abbrev_oid" to get abbrev oid

Johannes Schindelin (15):
      multimail: stop shipping a copy
      subtree: fix the GIT_EXEC_PATH sanity check to work on Windows
      subtree: fix assumption about the directory separator
      pager: avoid setting COLUMNS when we're guessing its value
      mingw: move Git for Windows' system config where users expect it
      config: normalize the path of the system gitconfig
      ci: use the new GitHub Action to download git-sdk-64-minimal
      ci (vs-build): use `cmd` to copy the DLLs, not `powershell`
      ci: upgrade to using actions/{up,down}load-artifacts v2
      ci (windows): transfer also the Git-tracked files to the test jobs
      artifacts-tar: respect NO_GETTEXT
      ci: accelerate the checkout
      ci: run `make sparse` as part of the GitHub workflow
      ci(check-whitespace): stop requiring a read/write token
      ci(check-whitespace): restrict to the intended commits

Jonathan Nieder (2):
      xsize_t: avoid implementation defined behavior when len < 0
      Revert 'diff-merges: let "-m" imply "-p"'

Jonathan Tan (7):
      repository: move global r_f_p_c to repo struct
      promisor-remote: support per-repository config
      submodule: refrain from filtering GIT_CONFIG_COUNT
      run-command: refactor subprocess env preparation
      promisor-remote: teach lazy-fetch in any repo
      unpack-trees: refactor prefetching code
      cache-tree: prefetch in partial clone read-tree

Josh Steadmon (1):
      docs: fix api-trace2 doc for "too_many_files" event

Julian Verdurmen (1):
      userdiff: add support for C# record types

Junio C Hamano (13):
      revisions(7): clarify that most commands take a single revision range
      The first batch post Git 2.32
      The second batch
      The third batch
      The fourth batch
      CodingGuidelines: recommend gender-neutral description
      The fifth batch
      The sixth batch
      The seventh batch
      Git 2.33-rc0
      The eighth batch
      Git 2.33-rc1
      Git 2.33-rc2

Kaartic Sivaraam (1):
      submodule: remove unnecessary `prefix` based option logic

Matheus Tavares (1):
      parallel-checkout: send the new object_id algo field to the workers

Matthew Rogers (3):
      cmake: add knob to disable vcpkg
      cmake: create compile_commands.json by default
      cmake: add warning for ignored MSGFMT_EXE

Michael Schindler (1):
      mergetools/kdiff3: make kdiff3 work on Windows too

Patrick Steinhardt (2):
      perf: fix when running with TEST_OUTPUT_DIRECTORY
      t0000: fix test if run with TEST_OUTPUT_DIRECTORY

Philippe Blain (6):
      parse-options: don't complete option aliases by default
      doc: clarify description of 'submodule.recurse'
      merge: add missing word "strategy" to a message
      Documentation: define 'MERGE_AUTOSTASH'
      merge: apply autostash if fast-forward fails
      merge: apply autostash if merge strategy fails

René Scharfe (4):
      grep: report missing left operand of --and
      khash: clarify that allocations never fail
      use fspathhash() everywhere
      object-file: use unsigned arithmetic with bit mask

Reuven Y (1):
      docs: improve fast-forward in glossary content

Sergey Organov (10):
      t4013: test that "-m" alone has no effect in "git log"
      t4013: test "git log -m --raw"
      t4013: test "git log -m --stat"
      t4013: test "git diff-tree -m"
      t4013: test "git diff-index -m"
      diff-merges: move specific diff-index "-m" handling to diff-index
      git-svn: stop passing "-m" to "git rev-list"
      stash list: stop passing "-m" to "git log"
      diff-merges: rename "combined_imply_patch" to "merges_imply_patch"
      diff-merges: let "-m" imply "-p"

Stephen Manz (3):
      t2400: clean up '"add" worktree with lock' test
      worktree: mark lock strings with `_()` for translation
      worktree: teach `add` to accept --reason <string> with --lock

Tao Klerks (1):
      Remove warning that repack only works on non-promisor packfiles

Taylor Blau (6):
      csum-file: introduce checksum_valid()
      commit-graph: rewrite to use checksum_valid()
      midx: don't reuse corrupt MIDXs when writing
      midx: report checksum mismatches during 'verify'
      multi-pack-index: fix potential segfault without sub-command
      pack-bitmap: clarify comment in filter_bitmap_exclude_type()

Teng Long (1):
      packfile-uri.txt: fix blobPackfileUri description

Thomas Braun (1):
      completion: add --anchored to diff's options

Thomas Bétous (1):
      mingw: align symlinks-related rmdir() behavior with Linux

Wolfgang Müller (1):
      rev-parse: mark die() messages for translation

ZheNing Hu (4):
      ref-filter: add objectsize to used_atom
      ref-filter: introduce enum atom_type
      cat-file: handle trivial --batch format with --batch-all-objects
      cat-file: merge two block into one

brian m. carlson (1):
      rev-list: add option for --pretty=format without header

dorgon.chang (1):
      git-p4: fix failed submit by skip non-text data files

edef (1):
      mailinfo: don't discard names under 3 characters

Ævar Arnfjörð Bjarmason (93):
      test-lib: bring $remove_trash out of retirement
      test-lib tests: remove dead GIT_TEST_FRAMEWORK_SELFTEST variable
      test-lib-functions: reword "test_commit --append" docs
      test-lib-functions: document test_commit --no-tag
      test-lib functions: add an --annotated option to "test_commit"
      describe tests: convert setup to use test_commit
      test-lib functions: add --printf option to test_commit
      submodule tests: use symbolic-ref --short to discover branch name
      test-lib: reformat argument list in test_create_repo()
      test-lib: do not show advice about init.defaultBranch under --verbose
      test-lib: split up and deprecate test_create_repo()
      grep/pcre2 tests: reword comments referring to kwset
      pickaxe tests: refactor to use test_commit --append --printf
      pickaxe tests: add test for diffgrep_consume() internals
      pickaxe tests: add test for "log -S" not being a regex
      pickaxe tests: test for -G, -S and --find-object incompatibility
      pickaxe tests: add missing test for --no-pickaxe-regex being an error
      pickaxe: die when -G and --pickaxe-regex are combined
      pickaxe: die when --find-object and --pickaxe-all are combined
      diff.h: move pickaxe fields together again
      pickaxe/style: consolidate declarations and assignments
      perf: add performance test for pickaxe
      pickaxe: refactor function selection in diffcore-pickaxe()
      pickaxe: assert that we must have a needle under -G or -S
      pickaxe -S: support content with NULs under --pickaxe-regex
      pickaxe: rename variables in has_changes() for brevity
      pickaxe -S: slightly optimize contains()
      xdiff-interface: prepare for allowing early return
      xdiff-interface: allow early return from xdiff_emit_line_fn
      pickaxe -G: terminate early on matching lines
      pickaxe -G: don't special-case create/delete
      xdiff users: use designated initializers for out_line
      xdiff-interface: replace discard_hunk_line() with a flag
      describe tests: improve test for --work-tree & --dirty
      describe tests: refactor away from glob matching
      describe tests: don't rely on err.actual from "check_describe"
      describe tests: fix nested "test_expect_success" call
      describe tests: support -C in "check_describe"
      trace2: refactor to avoid gcc warning under -O3
      send-email tests: support GIT_TEST_PERL_FATAL_WARNINGS=true
      send-email tests: test for boolean variables without a value
      send-email: remove non-working support for "sendemail.smtpssl"
      send-email: refactor sendemail.smtpencryption config parsing
      send-email: copy "config_regxp" into git-send-email.perl
      send-email: lazily load config for a big speedup
      send-email: lazily shell out to "git var"
      send-email: use function syntax instead of barewords
      send-email: get rid of indirect object syntax
      send-email: lazily load modules for a big speedup
      perl: lazily load some common Git.pm setup code
      send-email: move trivial config handling to Perl
      perl: nano-optimize by replacing Cwd::cwd() with Cwd::getcwd()
      protocol-caps.h: add newline at end of file
      read-cache.c: don't guard calls to progress.c API
      xdiff: use BUG(...), not xdl_bug(...)
      builtins + test helpers: use return instead of exit() in cmd_*
      mktag tests: parse out options in helper
      mktag tests: invert --no-strict test
      show-branch tests: rename the one "show-branch" test file
      show-branch tests: modernize test code
      pre-commit hook tests: don't leave "actual" nonexisting on failure
      gc tests: add a test for the "pre-auto-gc" hook
      mktag tests: test hash-object --literally and unreachable fsck
      mktag tests: test update-ref and reachable fsck
      mktag tests: test for-each-ref
      mktag tests: test fast-export
      show-branch: don't <COLOR></RESET> for space characters
      show-branch tests: add missing tests
      Makefile: add and use the ".DELETE_ON_ERROR" flag
      test-lib.sh: set COLUMNS=80 for --verbose repeatability
      send-pack.c: move "no refs in common" abort earlier
      fetch: document the --negotiate-only option
      *.h: move some *_INIT to designated initializers
      *.c *_init(): define in terms of corresponding *_INIT macro
      dir.[ch]: replace dir_init() with DIR_INIT
      string-list.[ch]: add a string_list_init_{nodup,dup}()
      string-list.h users: change to use *_{nodup,dup}()
      bundle cmd: stop leaking memory from parse_options_cmd_bundle()
      bundle.c: use a temporary variable for OIDs and names
      bundle: remove "ref_list" in favor of string-list.c API
      imap-send.c: use less verbose strbuf_fread() idiom
      fetch: fix segfault in --negotiate-only without --negotiation-tip=*
      *.c static functions: don't forward-declare __attribute__
      sequencer.c: move static function to avoid forward decl
      *.c static functions: add missing __attribute__((format))
      *.h: add a few missing __attribute__((format))
      advice.h: add missing __attribute__((format)) & fix usage
      test-lib-functions: use test-tool for [de]packetize()
      SubmittingPatches: move discussion of Signed-off-by above "send"
      SubmittingPatches: replace discussion of Travis with GitHub Actions
      bundle tests: use ">file" not ": >file"
      bundle tests: use test_cmp instead of grep
      t0001: fix broken not-quite getcwd(3) test in bed67874e2

Đoàn Trần Công Danh (6):
      t: use configured TAR instead of tar
      doc/log: correct default for --decorate
      t: use user-specified utf-8 locale for testing svn
      test-lib-functions: introduce test_stdout_line_count
      t6400: preserve git ls-files exit status code
      t6402: preserve git exit status code


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.33.0-rc1
@ 2021-08-07  0:07  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2021-08-07  0:07 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.33.0-rc1 is now available for testing at
the usual places.  It is comprised of 396 non-merge commits since
v2.32.0, contributed by 63 people, 19 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.33.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.32.0 are as follows.
Welcome to the Git development community!

  Anders Höckersten, Andrew Berry, Andy AO, Beshr Kayali,
  dorgon.chang, edef, Fabian Stelzer, Fabian Wermelinger, Gregory
  Anders, Greg Pflaum, Hu Jialun, Jason Hatton, Julian Verdurmen,
  Matthew Hughes, Michael Schindler, Reuven Y, Stephen Manz,
  Tao Klerks, and Teng Long.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alex Henrie, Anders Kaseorg,
  Andrei Rybak, Andrzej Hunt, Atharva Raykar, Bagas Sanjaya,
  brian m. carlson, Carlo Marcelo Arenas Belón, Christian Couder,
  Dennis Ameling, Denton Liu, Derrick Stolee, Đoàn Trần Công
  Danh, Elijah Newren, Emily Shaffer, Eric Sunshine, Eric Wong,
  Felipe Contreras, Han-Wen Nienhuys, Jean-Noël Avila, Jeff King,
  Jiang Xin, Johannes Schindelin, Jonathan Nieder, Jonathan Tan,
  Josh Steadmon, Junio C Hamano, Kaartic Sivaraam, Martin Ågren,
  Matheus Tavares, Matthew Rogers, Matthias Aßhauer, Nicolas
  Pitre, Patrick Steinhardt, Philippe Blain, René Scharfe,
  Sergey Organov, Shourya Shukla, Taylor Blau, Thomas Bétous,
  Thomas Braun, Wolfgang Müller, and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git 2.33 Release Notes (draft)
==============================

Backward compatibility notes
----------------------------

 * The "-m" option in "git log -m" that does not specify which format,
   if any, of diff is desired did not have any visible effect; it now
   implies some form of diff (by default "--patch") is produced.

   You can disable the diff output with "git log -m --no-patch", but
   then there probably isn't much point in passing "-m" in the first
   place ;-).


Updates since Git 2.32
----------------------

UI, Workflows & Features

 * "git send-email" learned the "--sendmail-cmd" command line option
   and the "sendemail.sendmailCmd" configuration variable, which is a
   more sensible approach than the current way of repurposing the
   "smtp-server" that is meant to name the server to instead name the
   command to talk to the server.

 * The "-m" option in "git log -m" that does not specify which format,
   if any, of diff is desired did not have any visible effect; it now
   implies some form of diff (by default "--patch") is produced.

 * The userdiff pattern for C# learned the token "record".

 * "git rev-list" learns to omit the "commit <object-name>" header
   lines from the output with the `--no-commit-header` option.

 * "git worktree add --lock" learned to record why the worktree is
   locked with a custom message.


Performance, Internal Implementation, Development Support etc.

 * The code to handle the "--format" option in "for-each-ref" and
   friends made too many string comparisons on %(atom)s used in the
   format string, which has been corrected by converting them into
   enum when the format string is parsed.

 * Use the hashfile API in the codepath that writes the index file to
   reduce code duplication.

 * Repeated rename detections in a sequence of mergy operations have
   been optimized out for the 'ort' merge strategy.

 * Preliminary clean-up of tests before the main reftable changes
   hits the codebase.

 * The backend for "diff -G/-S" has been updated to use pcre2 engine
   when available.

 * Use ".DELETE_ON_ERROR" pseudo target to simplify our Makefile.

 * Code cleanup around struct_type_init() functions.

 * "git send-email" optimization.

 * GitHub Actions / CI update.
   (merge 0dc787a9f2 js/ci-windows-update later to maint).

 * Object accesses in repositories with many alternate object store
   have been optimized.

 * "git log" has been optimized not to waste cycles to load ref
   decoration data that may not be needed.

 * Many "printf"-like helper functions we have have been annotated
   with __attribute__() to catch placeholder/parameter mismatches.

 * Tests that cover protocol bits have been updated and helpers
   used there have been consolidated.

 * The CI gained a new job to run "make sparse" check.

 * "git status" codepath learned to work with sparsely populated index
   without hydrating it fully.

 * A guideline for gender neutral documentation has been added.

 * Documentation on "git diff -l<n>" and diff.renameLimit have been
   updated, and the defaults for these limits have been raised.

 * The completion support used to offer alternate spelling of options
   that exist only for compatibility, which has been corrected.

 * "TEST_OUTPUT_DIRECTORY=there make test" failed to work, which has
   been corrected.

 * "git bundle" gained more test coverage.

 * "git read-tree" had a codepath where blobs are fetched one-by-one
   from the promisor remote, which has been corrected to fetch in bulk.

 * Rewrite of "git submodule" in C continues.

 * "git checkout" and "git commit" learn to work without unnecessarily
   expanding sparse indexes.


Fixes since v2.32
-----------------

 * We historically rejected a very short string as an author name
   while accepting a patch e-mail, which has been loosened.
   (merge 72ee47ceeb ef/mailinfo-short-name later to maint).

 * The parallel checkout codepath did not initialize object ID field
   used to talk to the worker processes in a futureproof way.

 * Rewrite code that triggers undefined behaviour warning.
   (merge aafa5df0df jn/size-t-casted-to-off-t-fix later to maint).

 * The description of "fast-forward" in the glossary has been updated.
   (merge e22f2daed0 ry/clarify-fast-forward-in-glossary later to maint).

 * Recent "git clone" left a temporary directory behind when the
   transport layer returned an failure.
   (merge 6aacb7d861 jk/clone-clean-upon-transport-error later to maint).

 * "git fetch" over protocol v2 left its side of the socket open after
   it finished speaking, which unnecessarily wasted the resource on
   the other side.
   (merge ae1a7eefff jk/fetch-pack-v2-half-close-early later to maint).

 * The command line completion (in contrib/) learned that "git diff"
   takes the "--anchored" option.
   (merge d1e7c2cac9 tb/complete-diff-anchored later to maint).

 * "git-svn" tests assumed that "locale -a", which is used to pick an
   available UTF-8 locale, is available everywhere.  A knob has been
   introduced to allow testers to specify a suitable locale to use.
   (merge 482c962de4 dd/svn-test-wo-locale-a later to maint).

 * Update "git subtree" to work better on Windows.
   (merge 77f37de39f js/subtree-on-windows-fix later to maint).

 * Remove multimail from contrib/
   (merge f74d11471f js/no-more-multimail later to maint).

 * Make the codebase MSAN clean.
   (merge 4dbc55e87d ah/uninitialized-reads-fix later to maint).

 * Work around inefficient glob substitution in older versions of bash
   by rewriting parts of a test.
   (merge eb87c6f559 jx/t6020-with-older-bash later to maint).

 * Avoid duplicated work while building reachability bitmaps.
   (merge aa9ad6fee5 jk/bitmap-tree-optim later to maint).

 * We broke "GIT_SKIP_TESTS=t?000" to skip certain tests in recent
   update, which got fixed.

 * The side-band demultiplexer that is used to display progress output
   from the remote end did not clear the line properly when the end of
   line hits at a packet boundary, which has been corrected.

 * Some test scripts assumed that readlink(1) was universally
   installed and available, which is not the case.
   (merge 7c0afdf23c jk/test-without-readlink-1 later to maint).

 * Recent update to completion script (in contrib/) broke those who
   use the __git_complete helper to define completion to their custom
   command.
   (merge cea232194d fw/complete-cmd-idx-fix later to maint).

 * Output from some of our tests were affected by the width of the
   terminal that they were run in, which has been corrected by
   exporting a fixed value in the COLUMNS environment.
   (merge c49a177bec ab/fix-columns-to-80-during-tests later to maint).

 * On Windows, mergetool has been taught to find kdiff3.exe just like
   it finds winmerge.exe.
   (merge 47eb4c6890 ms/mergetools-kdiff3-on-windows later to maint).

 * When we cannot figure out how wide the terminal is, we use a
   fallback value of 80 ourselves (which cannot be avoided), but when
   we run the pager, we export it in COLUMNS, which forces the pager
   to use the hardcoded value, even when the pager is perfectly
   capable to figure it out itself.  Stop exporting COLUMNS when we
   fall back on the hardcoded default value for our own use.
   (merge 9b6e2c8b98 js/stop-exporting-bogus-columns later to maint).

 * "git cat-file --batch-all-objects"" misbehaved when "--batch" is in
   use and did not ask for certain object traits.
   (merge ee02ac6164 zh/cat-file-batch-fix later to maint).

 * Some code and doc clarification around "git push".

 * The "union" conflict resultion variant misbehaved when used with
   binary merge driver.
   (merge 382b601acd jk/union-merge-binary later to maint).

 * Prevent "git p4" from failing to submit changes to binary file.
   (merge 54662d5958 dc/p4-binary-submit-fix later to maint).

 * "git grep --and -e foo" ought to have been diagnosed as an error
   but instead segfaulted, which has been corrected.
   (merge fe7fe62d8d rs/grep-parser-fix later to maint).

 * The merge code had funny interactions between content based rename
   detection and directory rename detection.
   (merge 3585d0ea23 en/merge-dir-rename-corner-case-fix later to maint).

 * When rebuilding the multi-pack index file reusing an existing one,
   we used to blindly trust the existing file and ended up carrying
   corrupted data into the updated file, which has been corrected.
   (merge f89ecf7988 tb/midx-use-checksum later to maint).

 * Update the location of system-side configuration file on Windows.
   (merge e355307692 js/gfw-system-config-loc-fix later to maint).

 * Code recently added to support common ancestry negotiation during
   "git push" did not sanity check its arguments carefully enough.
   (merge eff40457a4 ab/fetch-negotiate-segv-fix later to maint).

 * Update the documentation not to assume users are of certain gender
   and adds to guidelines to do so.
   (merge 46a237f42f ds/gender-neutral-doc later to maint).

 * "git commit --allow-empty-message" won't abort the operation upon
   an empty message, but the hint shown in the editor said otherwise.
   (merge 6f70f00b4f hj/commit-allow-empty-message later to maint).

 * The code that gives an error message in "git multi-pack-index" when
   no subcommand is given tried to print a NULL pointer as a strong,
   which has been corrected.
   (merge 88617d11f9 tb/reverse-midx later to maint).

 * CI update.
   (merge a066a90db6 js/ci-check-whitespace-updates later to maint).

 * Documentation fix for "git pull --rebase=no".
   (merge d3236becec fc/pull-no-rebase-merges-theirs-into-ours later to maint).

 * A race between repacking and using pack bitmaps has been corrected.
   (merge dc1daacdcc jk/check-pack-valid-before-opening-bitmap later to maint).

 * The local changes stashed by "git merge --autostash" were lost when
   the merge failed in certain ways, which has been corrected.

 * Windows rmdir() equivalent behaves differently from POSIX ones in
   that when used on a symbolic link that points at a directory, the
   target directory gets removed, which has been corrected.
   (merge 3e7d4888e5 tb/mingw-rmdir-symlink-to-directory later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge bfe35a6165 ah/doc-describe later to maint).
   (merge f302c1e4aa jc/clarify-revision-range later to maint).
   (merge 3127ff90ea tl/fix-packfile-uri-doc later to maint).
   (merge a84216c684 jk/doc-color-pager later to maint).
   (merge 4e0a64a713 ab/trace2-squelch-gcc-warning later to maint).
   (merge 225f7fa847 ps/rev-list-object-type-filter later to maint).
   (merge 5317dfeaed dd/honor-users-tar-in-tests later to maint).
   (merge ace6d8e3d6 tk/partial-clone-repack-doc later to maint).
   (merge 7ba68e0cf1 js/trace2-discard-event-docfix later to maint).
   (merge 8603c419d3 fc/doc-default-to-upstream-config later to maint).
   (merge 1d72b604ef jk/revision-squelch-gcc-warning later to maint).
   (merge abcb66c614 ar/typofix later to maint).
   (merge 9853830787 ah/graph-typofix later to maint).
   (merge aac578492d ab/config-hooks-path-testfix later to maint).
   (merge 98c7656a18 ar/more-typofix later to maint).
   (merge 6fb9195f6c jk/doc-max-pack-size later to maint).
   (merge 4184cbd635 ar/mailinfo-memcmp-to-skip-prefix later to maint).
   (merge 91d2347033 ar/doc-libera-chat-in-my-first-contrib later to maint).
   (merge 338abb0f04 ab/cmd-foo-should-return later to maint).
   (merge 546096a5cb ab/xdiff-bug-cleanup later to maint).
   (merge b7b793d1e7 ab/progress-cleanup later to maint).
   (merge d94f9b8e90 ba/object-info later to maint).
   (merge 52ff891c03 ar/test-code-cleanup later to maint).
   (merge a0538e5c8b dd/document-log-decorate-default later to maint).
   (merge ce24797d38 mr/cmake later to maint).
   (merge 9eb542f2ee ab/pre-auto-gc-hook-test later to maint).
   (merge 9fffc38583 bk/doc-commit-typofix later to maint).
   (merge 1cf823d8f0 ks/submodule-cleanup later to maint).
   (merge ebbf5d2b70 js/config-mak-windows-pcre-fix later to maint).
   (merge 617480d75b hn/refs-iterator-peel-returns-boolean later to maint).
   (merge 6a24cc71ed ar/submodule-helper-include-cleanup later to maint).
   (merge 5632e838f8 rs/khash-alloc-cleanup later to maint).
   (merge b1d87fbaf1 jk/typofix later to maint).
   (merge e04170697a ab/gitignore-discovery-doc later to maint).
   (merge 8232a0ff48 dl/packet-read-response-end-fix later to maint).
   (merge eb448631fb dl/diff-merge-base later to maint).
   (merge c510928a25 hn/refs-debug-empty-prefix later to maint).
   (merge ddcb189d9d tb/bitmap-type-filter-comment-fix later to maint).
   (merge 878b399734 pb/submodule-recurse-doc later to maint).
   (merge 734283855f jk/config-env-doc later to maint).
   (merge 482e1488a9 ab/getcwd-test later to maint).
   (merge f0b922473e ar/doc-markup-fix later to maint).

----------------------------------------------------------------

Changes since v2.32.0 are as follows:

Alex Henrie (6):
      merge: don't translate literal commands
      stash: don't translate literal commands
      submodule: use the imperative mood to describe the --files option
      fetch: improve grammar of "shallow roots" message
      setup: split "extensions found" messages into singular and plural
      graph: improve grammar of "invalid color" error message

Anders Höckersten (1):
      describe-doc: clarify default length of abbreviation

Andrei Rybak (8):
      t: fix whitespace around &&
      mailinfo: use starts_with() when checking scissors
      *: fix typos which duplicate a word
      blame: correct name of config option in docs
      t: fix typos in test messages
      git-worktree.txt: fix typo in example path
      help: convert git_cmd to page in one place
      Documentation: render special characters correctly

Andrew Berry (1):
      docs: .gitignore parsing is to the top of the repo

Andrzej Hunt (15):
      bulk-checkin: make buffer reuse more obvious and safer
      split-index: use oideq instead of memcmp to compare object_id's
      builtin/checkout--worker: zero-initialise struct to avoid MSAN complaints
      fmt-merge-msg: free newly allocated temporary strings when done
      environment: move strbuf into block to plug leak
      builtin/submodule--helper: release unused strbuf to avoid leak
      builtin/for-each-repo: remove unnecessary argv copy to plug leak
      diffcore-rename: move old_dir/new_dir definition to plug leak
      ref-filter: also free head for ATOM_HEAD to avoid leak
      read-cache: call diff_setup_done to avoid leak
      convert: release strbuf to avoid leak
      builtin/mv: free or UNLEAK multiple pointers at end of cmd_mv
      builtin/merge: free found_ref when done
      builtin/rebase: fix options.strategy memory lifecycle
      reset: clear_unpack_trees_porcelain to plug leak

Atharva Raykar (6):
      MyFirstContribution: link #git-devel to Libera Chat
      submodule--helper: remove redundant include
      t7400: test failure to add submodule in tracked path
      submodule: prefix die messages with 'fatal'
      submodule--helper: refactor module_clone()
      submodule--helper: introduce add-clone subcommand

Bagas Sanjaya (1):
      diff: --pickaxe-all typofix

Beshr Kayali (1):
      Documentation: fix typo in the --patch option of the commit command

Carlo Marcelo Arenas Belón (2):
      config.mak.uname: PCRE1 cleanup
      t7508: avoid non POSIX BRE

Dennis Ameling (2):
      cmake(windows): set correct path to the system Git config
      ci (vs-build): build with NO_GETTEXT

Denton Liu (2):
      pkt-line: replace "stateless separator" with "response end"
      git-diff: fix missing --merge-base docs

Derrick Stolee (28):
      hashfile: use write_in_full()
      csum-file.h: increase hashfile buffer size
      read-cache: use hashfile instead of git_hash_ctx
      read-cache: delete unused hashing methods
      *: fix typos
      sparse-index: skip indexes with unmerged entries
      sparse-index: include EXTENDED flag when expanding
      t1092: replace incorrect 'echo' with 'cat'
      t1092: expand repository data shape
      t1092: add tests for status/add and sparse files
      unpack-trees: preserve cache_bottom
      unpack-trees: compare sparse directories correctly
      unpack-trees: rename unpack_nondirectories()
      unpack-trees: unpack sparse directory entries
      dir.c: accept a directory as part of cone-mode patterns
      diff-lib: handle index diffs with sparse dirs
      status: skip sparse-checkout percentage with sparse-index
      status: use sparse-index throughout
      wt-status: expand added sparse directory entries
      fsmonitor: integrate with sparse index
      t1092: document bad sparse-checkout behavior
      p2000: add 'git checkout -' test and decrease depth
      p2000: compress repo names
      commit: integrate with sparse-index
      sparse-index: recompute cache-tree
      checkout: stop expanding sparse indexes
      t1092: document bad 'git checkout' behavior
      unpack-trees: resolve sparse-directory/file conflicts

Elijah Newren (36):
      t6423: rename file within directory that other side renamed
      Documentation/technical: describe remembering renames optimization
      fast-rebase: change assert() to BUG()
      fast-rebase: write conflict state to working tree, index, and HEAD
      t6429: testcases for remembering renames
      merge-ort: add data structures for in-memory caching of rename detection
      merge-ort: populate caches of rename detection results
      merge-ort: add code to check for whether cached renames can be reused
      merge-ort: avoid accidental API mis-use
      merge-ort: preserve cached renames for the appropriate side
      merge-ort: add helper functions for using cached renames
      merge-ort: handle interactions of caching and rename/rename(1to1) cases
      merge-ort, diffcore-rename: employ cached renames when possible
      merge-ort: replace string_list_df_name_compare with faster alternative
      diffcore-rename: avoid unnecessary strdup'ing in break_idx
      Fix various issues found in comments
      merge-ort: miscellaneous touch-ups
      promisor-remote: output trace2 statistics for number of objects fetched
      t6421: add tests checking for excessive object downloads during merge
      diffcore-rename: allow different missing_object_cb functions
      diffcore-rename: use a different prefetch for basename comparisons
      merge-ort: add prefetching for content merges
      t6423: test directory renames causing rename-to-self
      merge-ort: ensure we consult df_conflict and path_conflicts
      merge-recursive: handle rename-to-self case
      diff: correct warning message when renameLimit exceeded
      doc: clarify documentation for rename/copy limits
      diffcore-rename: treat a rename_limit of 0 as unlimited
      rename: bump limit defaults yet again
      merge-ort: resolve paths early when we have sufficient information
      merge-ort: add some more explanations in collect_merge_info_callback()
      merge-ort: add data structures for allowable trivial directory resolves
      merge-ort: add a handle_deferred_entries() helper function
      merge-ort: defer recursing into directories when merge base is matched
      merge-ort: avoid recursing into directories when we don't need to
      merge-ort: restart merge with cached renames to reduce process entry cost

Eric Wong (6):
      xmmap: inform Linux users of tuning knobs on ENOMEM
      speed up alt_odb_usable() with many alternates
      avoid strlen via strbuf_addstr in link_alt_odb_entry
      make object_directory.loose_objects_subdir_seen a bitmap
      oidcpy_with_padding: constify `src' arg
      oidtree: a crit-bit tree for odb_loose_cache

Fabian Wermelinger (1):
      completion: bash: fix late declaration of __git_cmd_idx

Felipe Contreras (33):
      doc: refactor common asciidoc dependencies
      doc: improve asciidoc dependencies
      doc: remove unnecessary rm instances
      doc: simplify Makefile using .DELETE_ON_ERROR
      doc: avoid using rm directly
      push: rename !triangular to same_remote
      push: hedge code of default=simple
      push: copy code to setup_push_simple()
      push: reorganize setup_push_simple()
      push: simplify setup_push_simple()
      push: remove unused code in setup_push_upstream()
      doc: push: explain default=simple correctly
      push: create new get_upstream_ref() helper
      push: return immediately in trivial switch case
      push: split switch cases
      push: factor out null branch check
      push: only get the branch when needed
      push: make setup_push_* return the dst
      push: trivial simplifications
      push: get rid of all the setup_push_* functions
      push: factor out the typical case
      push: remove redundant check
      push: remove trivial function
      push: only check same_remote when needed
      push: don't get a full remote object
      doc: merge: mention default of defaulttoupstream
      doc: avoid using the gender of other people
      comments: avoid using the gender of our users
      pull: cleanup autostash check
      pull: trivial cleanup
      pull: trivial whitespace style fix
      doc: pull: fix rebase=false documentation
      test: fix for COLUMNS and bash 5

Gregory Anders (1):
      git-send-email: add option to specify sendmail command

Han-Wen Nienhuys (26):
      refs: make explicit that ref_iterator_peel returns boolean
      t4202: split testcase for invalid HEAD symref and HEAD hash
      t/helper/ref-store: initialize oid in resolve-ref
      t9300: check ref existence using test-helper rather than a file system check
      t5601: read HEAD using rev-parse
      t1401: use tar to snapshot and restore repo state
      t1401-symbolic-ref: avoid direct filesystem access
      t1413: use tar to save and restore entire .git directory
      t1301: fix typo in error message
      t5000: reformat indentation to the latest fashion
      t5000: inspect HEAD using git-rev-parse
      t7003: use rev-parse rather than FS inspection
      t5304: restyle: trim empty lines, drop ':' before >
      t5304: use "reflog expire --all" to clear the reflog
      test-lib: provide test prereq REFFILES
      t1407: require REFFILES for for_each_reflog test
      t1414: mark corruption test with REFFILES
      t2017: mark --orphan/logAllRefUpdates=false test as REFFILES
      t1404: mark tests that muck with .git directly as REFFILES.
      t7900: stop checking for loose refs
      t7003: check reflog existence only for REFFILES
      t4202: mark bogus head hash test with REFFILES
      t1415: set REFFILES for test specific to storage format
      t1415: avoid direct filesystem access for writing refs
      t7509: avoid direct file access for writing CHERRY_PICK_HEAD
      refs/debug: quote prefix

Hu Jialun (2):
      commit: reorganise commit hint strings
      commit: remove irrelavent prompt on `--allow-empty-message`

Jean-Noël Avila (1):
      help: fix small typo in error message

Jeff King (27):
      clone: clean up directory after transport_fetch_refs() failure
      fetch-pack: signal v2 server that we are done making requests
      doc: explain the use of color.pager
      doc: warn people against --max-pack-size
      ll_binary_merge(): handle XDL_MERGE_FAVOR_UNION
      ll_union_merge(): pass name labels to ll_xdl_merge()
      ll_union_merge(): rename path_unused parameter
      add_pending_object_with_path(): work around "gcc -O3" complaint
      bitmaps: don't recurse into trees already in the bitmap
      t: use portable wrapper for readlink(1)
      pretty.h: update and expand docstring for userformat_find_requirements()
      log: avoid loading decorations for userformats that don't need it
      object.h: expand docstring for lookup_unknown_object()
      object.h: add lookup_object_by_type() function
      load_ref_decorations(): avoid parsing non-tag objects
      add_ref_decoration(): rename s/type/deco_type/
      test-lib: avoid accidental globbing in match_pattern_list()
      doc/rev-list-options: fix duplicate word typo
      load_ref_decorations(): fix decoration with tags
      t0000: clear GIT_SKIP_TESTS before running sub-tests
      doc/git-config: explain --file instead of referring to GIT_CONFIG
      doc/git-config: clarify GIT_CONFIG environment variable
      doc/git-config: simplify "override" advice for FILES section
      pack-bitmap: check pack validity when opening bitmap
      submodule: drop unused sm_name parameter from show_fetch_remotes()
      ci: run "apt-get update" before "apt-get install"
      ci/install-dependencies: handle "sparse" job package installs

Jiang Xin (5):
      t6020: fix incompatible parameter expansion
      sideband: don't lose clear-to-eol at packet boundary
      test: compare raw output, not mangle tabs and spaces
      test: refactor to use "test_commit" to create commits
      test: refactor to use "get_abbrev_oid" to get abbrev oid

Johannes Schindelin (15):
      multimail: stop shipping a copy
      subtree: fix the GIT_EXEC_PATH sanity check to work on Windows
      subtree: fix assumption about the directory separator
      pager: avoid setting COLUMNS when we're guessing its value
      mingw: move Git for Windows' system config where users expect it
      config: normalize the path of the system gitconfig
      ci: use the new GitHub Action to download git-sdk-64-minimal
      ci (vs-build): use `cmd` to copy the DLLs, not `powershell`
      ci: upgrade to using actions/{up,down}load-artifacts v2
      ci (windows): transfer also the Git-tracked files to the test jobs
      artifacts-tar: respect NO_GETTEXT
      ci: accelerate the checkout
      ci: run `make sparse` as part of the GitHub workflow
      ci(check-whitespace): stop requiring a read/write token
      ci(check-whitespace): restrict to the intended commits

Jonathan Nieder (1):
      xsize_t: avoid implementation defined behavior when len < 0

Jonathan Tan (7):
      repository: move global r_f_p_c to repo struct
      promisor-remote: support per-repository config
      submodule: refrain from filtering GIT_CONFIG_COUNT
      run-command: refactor subprocess env preparation
      promisor-remote: teach lazy-fetch in any repo
      unpack-trees: refactor prefetching code
      cache-tree: prefetch in partial clone read-tree

Josh Steadmon (1):
      docs: fix api-trace2 doc for "too_many_files" event

Julian Verdurmen (1):
      userdiff: add support for C# record types

Junio C Hamano (12):
      revisions(7): clarify that most commands take a single revision range
      The first batch post Git 2.32
      The second batch
      The third batch
      The fourth batch
      CodingGuidelines: recommend gender-neutral description
      The fifth batch
      The sixth batch
      The seventh batch
      Git 2.33-rc0
      The eighth batch
      Git 2.33-rc1

Kaartic Sivaraam (1):
      submodule: remove unnecessary `prefix` based option logic

Matheus Tavares (1):
      parallel-checkout: send the new object_id algo field to the workers

Matthew Rogers (3):
      cmake: add knob to disable vcpkg
      cmake: create compile_commands.json by default
      cmake: add warning for ignored MSGFMT_EXE

Michael Schindler (1):
      mergetools/kdiff3: make kdiff3 work on Windows too

Patrick Steinhardt (2):
      perf: fix when running with TEST_OUTPUT_DIRECTORY
      t0000: fix test if run with TEST_OUTPUT_DIRECTORY

Philippe Blain (6):
      parse-options: don't complete option aliases by default
      doc: clarify description of 'submodule.recurse'
      merge: add missing word "strategy" to a message
      Documentation: define 'MERGE_AUTOSTASH'
      merge: apply autostash if fast-forward fails
      merge: apply autostash if merge strategy fails

René Scharfe (3):
      grep: report missing left operand of --and
      khash: clarify that allocations never fail
      use fspathhash() everywhere

Reuven Y (1):
      docs: improve fast-forward in glossary content

Sergey Organov (10):
      t4013: test that "-m" alone has no effect in "git log"
      t4013: test "git log -m --raw"
      t4013: test "git log -m --stat"
      t4013: test "git diff-tree -m"
      t4013: test "git diff-index -m"
      diff-merges: move specific diff-index "-m" handling to diff-index
      git-svn: stop passing "-m" to "git rev-list"
      stash list: stop passing "-m" to "git log"
      diff-merges: rename "combined_imply_patch" to "merges_imply_patch"
      diff-merges: let "-m" imply "-p"

Stephen Manz (3):
      t2400: clean up '"add" worktree with lock' test
      worktree: mark lock strings with `_()` for translation
      worktree: teach `add` to accept --reason <string> with --lock

Tao Klerks (1):
      Remove warning that repack only works on non-promisor packfiles

Taylor Blau (6):
      csum-file: introduce checksum_valid()
      commit-graph: rewrite to use checksum_valid()
      midx: don't reuse corrupt MIDXs when writing
      midx: report checksum mismatches during 'verify'
      multi-pack-index: fix potential segfault without sub-command
      pack-bitmap: clarify comment in filter_bitmap_exclude_type()

Teng Long (1):
      packfile-uri.txt: fix blobPackfileUri description

Thomas Braun (1):
      completion: add --anchored to diff's options

Thomas Bétous (1):
      mingw: align symlinks-related rmdir() behavior with Linux

Wolfgang Müller (1):
      rev-parse: mark die() messages for translation

ZheNing Hu (4):
      ref-filter: add objectsize to used_atom
      ref-filter: introduce enum atom_type
      cat-file: handle trivial --batch format with --batch-all-objects
      cat-file: merge two block into one

brian m. carlson (1):
      rev-list: add option for --pretty=format without header

dorgon.chang (1):
      git-p4: fix failed submit by skip non-text data files

edef (1):
      mailinfo: don't discard names under 3 characters

Ævar Arnfjörð Bjarmason (93):
      test-lib: bring $remove_trash out of retirement
      test-lib tests: remove dead GIT_TEST_FRAMEWORK_SELFTEST variable
      test-lib-functions: reword "test_commit --append" docs
      test-lib-functions: document test_commit --no-tag
      test-lib functions: add an --annotated option to "test_commit"
      describe tests: convert setup to use test_commit
      test-lib functions: add --printf option to test_commit
      submodule tests: use symbolic-ref --short to discover branch name
      test-lib: reformat argument list in test_create_repo()
      test-lib: do not show advice about init.defaultBranch under --verbose
      test-lib: split up and deprecate test_create_repo()
      grep/pcre2 tests: reword comments referring to kwset
      pickaxe tests: refactor to use test_commit --append --printf
      pickaxe tests: add test for diffgrep_consume() internals
      pickaxe tests: add test for "log -S" not being a regex
      pickaxe tests: test for -G, -S and --find-object incompatibility
      pickaxe tests: add missing test for --no-pickaxe-regex being an error
      pickaxe: die when -G and --pickaxe-regex are combined
      pickaxe: die when --find-object and --pickaxe-all are combined
      diff.h: move pickaxe fields together again
      pickaxe/style: consolidate declarations and assignments
      perf: add performance test for pickaxe
      pickaxe: refactor function selection in diffcore-pickaxe()
      pickaxe: assert that we must have a needle under -G or -S
      pickaxe -S: support content with NULs under --pickaxe-regex
      pickaxe: rename variables in has_changes() for brevity
      pickaxe -S: slightly optimize contains()
      xdiff-interface: prepare for allowing early return
      xdiff-interface: allow early return from xdiff_emit_line_fn
      pickaxe -G: terminate early on matching lines
      pickaxe -G: don't special-case create/delete
      xdiff users: use designated initializers for out_line
      xdiff-interface: replace discard_hunk_line() with a flag
      describe tests: improve test for --work-tree & --dirty
      describe tests: refactor away from glob matching
      describe tests: don't rely on err.actual from "check_describe"
      describe tests: fix nested "test_expect_success" call
      describe tests: support -C in "check_describe"
      trace2: refactor to avoid gcc warning under -O3
      send-email tests: support GIT_TEST_PERL_FATAL_WARNINGS=true
      send-email tests: test for boolean variables without a value
      send-email: remove non-working support for "sendemail.smtpssl"
      send-email: refactor sendemail.smtpencryption config parsing
      send-email: copy "config_regxp" into git-send-email.perl
      send-email: lazily load config for a big speedup
      send-email: lazily shell out to "git var"
      send-email: use function syntax instead of barewords
      send-email: get rid of indirect object syntax
      send-email: lazily load modules for a big speedup
      perl: lazily load some common Git.pm setup code
      send-email: move trivial config handling to Perl
      perl: nano-optimize by replacing Cwd::cwd() with Cwd::getcwd()
      protocol-caps.h: add newline at end of file
      read-cache.c: don't guard calls to progress.c API
      xdiff: use BUG(...), not xdl_bug(...)
      builtins + test helpers: use return instead of exit() in cmd_*
      mktag tests: parse out options in helper
      mktag tests: invert --no-strict test
      show-branch tests: rename the one "show-branch" test file
      show-branch tests: modernize test code
      pre-commit hook tests: don't leave "actual" nonexisting on failure
      gc tests: add a test for the "pre-auto-gc" hook
      mktag tests: test hash-object --literally and unreachable fsck
      mktag tests: test update-ref and reachable fsck
      mktag tests: test for-each-ref
      mktag tests: test fast-export
      show-branch: don't <COLOR></RESET> for space characters
      show-branch tests: add missing tests
      Makefile: add and use the ".DELETE_ON_ERROR" flag
      test-lib.sh: set COLUMNS=80 for --verbose repeatability
      send-pack.c: move "no refs in common" abort earlier
      fetch: document the --negotiate-only option
      *.h: move some *_INIT to designated initializers
      *.c *_init(): define in terms of corresponding *_INIT macro
      dir.[ch]: replace dir_init() with DIR_INIT
      string-list.[ch]: add a string_list_init_{nodup,dup}()
      string-list.h users: change to use *_{nodup,dup}()
      bundle cmd: stop leaking memory from parse_options_cmd_bundle()
      bundle.c: use a temporary variable for OIDs and names
      bundle: remove "ref_list" in favor of string-list.c API
      imap-send.c: use less verbose strbuf_fread() idiom
      fetch: fix segfault in --negotiate-only without --negotiation-tip=*
      *.c static functions: don't forward-declare __attribute__
      sequencer.c: move static function to avoid forward decl
      *.c static functions: add missing __attribute__((format))
      *.h: add a few missing __attribute__((format))
      advice.h: add missing __attribute__((format)) & fix usage
      test-lib-functions: use test-tool for [de]packetize()
      SubmittingPatches: move discussion of Signed-off-by above "send"
      SubmittingPatches: replace discussion of Travis with GitHub Actions
      bundle tests: use ">file" not ": >file"
      bundle tests: use test_cmp instead of grep
      t0001: fix broken not-quite getcwd(3) test in bed67874e2

Đoàn Trần Công Danh (6):
      t: use configured TAR instead of tar
      doc/log: correct default for --decorate
      t: use user-specified utf-8 locale for testing svn
      test-lib-functions: introduce test_stdout_line_count
      t6400: preserve git ls-files exit status code
      t6402: preserve git exit status code


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.32.0
@ 2021-06-06 12:40  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2021-06-06 12:40 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

The latest feature release Git v2.32.0 is now available at the
usual places.  It is comprised of 617 non-merge commits since
v2.31.0, contributed by 100 people, 35 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.32.0'
tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.31.0 are as
follows.  Welcome to the Git development community!

  Adam Sharafeddine, Alexey Roslyakov, Andrey Bienkowski,
  Atharva Raykar, Bruno Albuquerque, Chinmoy Chakraborty,
  Christopher Schenk, Dan Moseley, David Emett, Dmitry Torilov,
  Fabien Terrani, Firmin Martin, Georgios Kontaxis, Jason Gore,
  Jerry Zhang, Joachim Kuebart, Joseph Vusich, Josh Soref,
  Julien Richard, Li Linchao, Louis Sautier, Luke Shumaker,
  Matheus Tavares Bernardino, Nicholas Clark, Peter Oliver,
  Renato Botelho, rlespinasse, Robert Foss, RyotaK, Sardorbek
  Imomaliev, Tom Saeger, Vincent Tam, Will Chandler, Wolfgang
  Müller, and Yiyuan guo.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alexander Shopov,
  Alex Henrie, Andrzej Hunt, Bagas Sanjaya, Ben Humphreys, brian
  m. carlson, Charvi Mendiratta, Christian Couder, Christopher Diaz
  Riveros, Daniel Santos, David Aguilar, Dennis Ameling, Denton
  Liu, Derrick Stolee, Đoàn Trần Công Danh, Elijah Newren,
  Emir Sarı, Eric Sunshine, Eric Wong, Han-Wen Nienhuys, Han Xin,
  Jean-Noël Avila, Jeff Hostetler, Jeff King, Jiang Xin, Johannes
  Schindelin, Johannes Sixt, John Szakmeister, Jonathan Nieder,
  Jonathan Tan, Jordi Mas, Junio C Hamano, Kyle Meyer, Lénaïc
  Huard, Luke Diamand, Marc Branchaud, Martin Ågren, Matheus
  Tavares, Matthias Rüster, Nguyễn Thái Ngọc Duy, Nipunn
  Koorapati, Øystein Walle, Patrick Steinhardt, Peter Krefting,
  Phillip Wood, Rafael Silva, Ralf Thielow, Ramkumar Ramachandra,
  Ramsay Jones, Randall S. Becker, René Scharfe, Sergey Organov,
  Shubham Verma, Son Luong Ngoc, SZEDER Gábor, Taylor Blau,
  Todd Zullinger, Torsten Bögershausen, Trần Ngọc Quân,
  Trygve Aaberge, Ville Skyttä, Yi-Jyun Pan, and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.

----------------------------------------------------------------

Git 2.32 Release Notes
======================

Backward compatibility notes
----------------------------

 * ".gitattributes", ".gitignore", and ".mailmap" files that are
   symbolic links are ignored.

 * "git apply --3way" used to first attempt a straight application,
   and only fell back to the 3-way merge algorithm when the stright
   application failed.  Starting with this version, the command will
   first try the 3-way merge algorithm and only when it fails (either
   resulting with conflict or the base versions of blobs are missing),
   falls back to the usual patch application.


Updates since v2.31
-------------------

UI, Workflows & Features

 * It does not make sense to make ".gitattributes", ".gitignore" and
   ".mailmap" symlinks, as they are supposed to be usable from the
   object store (think: bare repositories where HEAD:.mailmap etc. are
   used).  When these files are symbolic links, we used to read the
   contents of the files pointed by them by mistake, which has been
   corrected.

 * "git stash show" learned to optionally show untracked part of the
   stash.

 * "git log --format='...'" learned "%(describe)" placeholder.

 * "git repack" so far has been only capable of repacking everything
   under the sun into a single pack (or split by size).  A cleverer
   strategy to reduce the cost of repacking a repository has been
   introduced.

 * The http codepath learned to let the credential layer to cache the
   password used to unlock a certificate that has successfully been
   used.

 * "git commit --fixup=<commit>", which was to tweak the changes made
   to the contents while keeping the original log message intact,
   learned "--fixup=(amend|reword):<commit>", that can be used to
   tweak both the message and the contents, and only the message,
   respectively.

 * "git send-email" learned to honor the core.hooksPath configuration.

 * "git format-patch -v<n>" learned to allow a reroll count that is
   not an integer.

 * "git commit" learned "--trailer <key>[=<value>]" option; together
   with the interpret-trailers command, this will make it easier to
   support custom trailers.

 * "git clone --reject-shallow" option fails the clone as soon as we
   notice that we are cloning from a shallow repository.

 * A configuration variable has been added to force tips of certain
   refs to be given a reachability bitmap.

 * "gitweb" learned "e-mail privacy" feature to redact strings that
   look like e-mail addresses on various pages.

 * "git apply --3way" has always been "to fall back to 3-way merge
   only when straight application fails". Swap the order of falling
   back so that 3-way is always attempted first (only when the option
   is given, of course) and then straight patch application is used as
   a fallback when it fails.

 * "git apply" now takes "--3way" and "--cached" at the same time, and
   work and record results only in the index.

 * The command line completion (in contrib/) has learned that
   CHERRY_PICK_HEAD is a possible pseudo-ref.

 * Userdiff patterns for "Scheme" has been added.

 * "git log" learned "--diff-merges=<style>" option, with an
   associated configuration variable log.diffMerges.

 * "git log --format=..." placeholders learned %ah/%ch placeholders to
   request the --date=human output.

 * Replace GIT_CONFIG_NOSYSTEM mechanism to decline from reading the
   system-wide configuration file with GIT_CONFIG_SYSTEM that lets
   users specify from which file to read the system-wide configuration
   (setting it to an empty file would essentially be the same as
   setting NOSYSTEM), and introduce GIT_CONFIG_GLOBAL to override the
   per-user configuration in $HOME/.gitconfig.

 * "git add" and "git rm" learned not to touch those paths that are
   outside of sparse checkout.

 * "git rev-list" learns the "--filter=object:type=<type>" option,
   which can be used to exclude objects of the given kind from the
   packfile generated by pack-objects.

 * The command line completion (in contrib/) for "git stash" has been
   updated.

 * "git subtree" updates.

 * It is now documented that "format-patch" skips merges.

 * Options to "git pack-objects" that take numeric values like
   --window and --depth should not accept negative values; the input
   validation has been tightened.

 * The way the command line specified by the trailer.<token>.command
   configuration variable receives the end-user supplied value was
   both error prone and misleading.  An alternative to achieve the
   same goal in a safer and more intuitive way has been added, as
   the trailer.<token>.cmd configuration variable, to replace it.

 * "git add -i --dry-run" does not dry-run, which was surprising.  The
   combination of options has taught to error out.

 * "git push" learns to discover common ancestor with the receiving
   end over protocol v2.  This will hopefully make "git push" as
   efficient as "git fetch" in avoiding objects from getting
   transferred unnecessarily.

 * "git mailinfo" (hence "git am") learned the "--quoted-cr" option to
   control how lines ending with CRLF wrapped in base64 or qp are
   handled.


Performance, Internal Implementation, Development Support etc.

 * Rename detection rework continues.

 * GIT_TEST_FAIL_PREREQS is a mechanism to skip test pieces with
   prerequisites to catch broken tests that depend on the side effects
   of optional pieces, but did not work at all when negative
   prerequisites were involved.
   (merge 27d578d904 jk/fail-prereq-testfix later to maint).

 * "git diff-index" codepath has been taught to trust fsmonitor status
   to reduce number of lstat() calls.
   (merge 7e5aa13d2c nk/diff-index-fsmonitor later to maint).

 * Reorganize Makefile to allow building git.o and other essential
   objects without extra stuff needed only for testing.

 * Preparatory API changes for parallel checkout.

 * A simple IPC interface gets introduced to build services like
   fsmonitor on top.

 * Fsck API clean-up.

 * SECURITY.md that is facing individual contributors and end users
   has been introduced.  Also a procedure to follow when preparing
   embargoed releases has been spelled out.
   (merge 09420b7648 js/security-md later to maint).

 * Optimize "rev-list --use-bitmap-index --objects" corner case that
   uses negative tags as the stopping points.

 * CMake update for vsbuild.

 * An on-disk reverse-index to map the in-pack location of an object
   back to its object name across multiple packfiles is introduced.

 * Generate [ec]tags under $(QUIET_GEN).

 * Clean-up codepaths that implements "git send-email --validate"
   option and improves the message from it.

 * The last remnant of gettext-poison has been removed.

 * The test framework has been taught to optionally turn the default
   merge strategy to "ort" throughout the system where we use
   three-way merges internally, like cherry-pick, rebase etc.,
   primarily to enhance its test coverage (the strategy has been
   available as an explicit "-s ort" choice).

 * A bit of code clean-up and a lot of test clean-up around userdiff
   area.

 * Handling of "promisor packs" that allows certain objects to be
   missing and lazily retrievable has been optimized (a bit).

 * When packet_write() fails, we gave an extra error message
   unnecessarily, which has been corrected.

 * The checkout machinery has been taught to perform the actual
   write-out of the files in parallel when able.

 * Show errno in the trace output in the error codepath that calls
   read_raw_ref method.

 * Effort to make the command line completion (in contrib/) safe with
   "set -u" continues.

 * Tweak a few tests for "log --format=..." that show timestamps in
   various formats.

 * The reflog expiry machinery has been taught to emit trace events.

 * Over-the-wire protocol learns a new request type to ask for object
   sizes given a list of object names.


Fixes since v2.31
-----------------

 * The fsmonitor interface read from its input without making sure
   there is something to read from.  This bug is new in 2.31
   timeframe.

 * The data structure used by fsmonitor interface was not properly
   duplicated during an in-core merge, leading to use-after-free etc.

 * "git bisect" reimplemented more in C during 2.30 timeframe did not
   take an annotated tag as a good/bad endpoint well.  This regression
   has been corrected.

 * Fix macros that can silently inject unintended null-statements.

 * CALLOC_ARRAY() macro replaces many uses of xcalloc().

 * Update insn in Makefile comments to run fuzz-all target.

 * Fix a corner case bug in "git mv" on case insensitive systems,
   which was introduced in 2.29 timeframe.

 * We had a code to diagnose and die cleanly when a required
   clean/smudge filter is missing, but an assert before that
   unnecessarily fired, hiding the end-user facing die() message.
   (merge 6fab35f748 mt/cleanly-die-upon-missing-required-filter later to maint).

 * Update C code that sets a few configuration variables when a remote
   is configured so that it spells configuration variable names in the
   canonical camelCase.
   (merge 0f1da600e6 ab/remote-write-config-in-camel-case later to maint).

 * A new configuration variable has been introduced to allow choosing
   which version of the generation number gets used in the
   commit-graph file.
   (merge 702110aac6 ds/commit-graph-generation-config later to maint).

 * Perf test update to work better in secondary worktrees.
   (merge 36e834abc1 jk/perf-in-worktrees later to maint).

 * Updates to memory allocation code around the use of pcre2 library.
   (merge c1760352e0 ab/grep-pcre2-allocfix later to maint).

 * "git -c core.bare=false clone --bare ..." would have segfaulted,
   which has been corrected.
   (merge 75555676ad bc/clone-bare-with-conflicting-config later to maint).

 * When "git checkout" removes a path that does not exist in the
   commit it is checking out, it wasn't careful enough not to follow
   symbolic links, which has been corrected.
   (merge fab78a0c3d mt/checkout-remove-nofollow later to maint).

 * A few option description strings started with capital letters,
   which were corrected.
   (merge 5ee90326dc cc/downcase-opt-help later to maint).

 * Plug or annotate remaining leaks that trigger while running the
   very basic set of tests.
   (merge 68ffe095a2 ah/plugleaks later to maint).

 * The hashwrite() API uses a buffering mechanism to avoid calling
   write(2) too frequently. This logic has been refactored to be
   easier to understand.
   (merge ddaf1f62e3 ds/clarify-hashwrite later to maint).

 * "git cherry-pick/revert" with or without "--[no-]edit" did not spawn
   the editor as expected (e.g. "revert --no-edit" after a conflict
   still asked to edit the message), which has been corrected.
   (merge 39edfd5cbc en/sequencer-edit-upon-conflict-fix later to maint).

 * "git daemon" has been tightened against systems that take backslash
   as directory separator.
   (merge 9a7f1ce8b7 rs/daemon-sanitize-dir-sep later to maint).

 * A NULL-dereference bug has been corrected in an error codepath in
   "git for-each-ref", "git branch --list" etc.
   (merge c685450880 jk/ref-filter-segfault-fix later to maint).

 * Streamline the codepath to fix the UTF-8 encoding issues in the
   argv[] and the prefix on macOS.
   (merge c7d0e61016 tb/precompose-prefix-simplify later to maint).

 * The command-line completion script (in contrib/) had a couple of
   references that would have given a warning under the "-u" (nounset)
   option.
   (merge c5c0548d79 vs/completion-with-set-u later to maint).

 * When "git pack-objects" makes a literal copy of a part of existing
   packfile using the reachability bitmaps, its update to the progress
   meter was broken.
   (merge 8e118e8490 jk/pack-objects-bitmap-progress-fix later to maint).

 * The dependencies for config-list.h and command-list.h were broken
   when the former was split out of the latter, which has been
   corrected.
   (merge 56550ea718 sg/bugreport-fixes later to maint).

 * "git push --quiet --set-upstream" was not quiet when setting the
   upstream branch configuration, which has been corrected.
   (merge f3cce896a8 ow/push-quiet-set-upstream later to maint).

 * The prefetch task in "git maintenance" assumed that "git fetch"
   from any remote would fetch all its local branches, which would
   fetch too much if the user is interested in only a subset of
   branches there.
   (merge 32f67888d8 ds/maintenance-prefetch-fix later to maint).

 * Clarify that pathnames recorded in Git trees are most often (but
   not necessarily) encoded in UTF-8.
   (merge 9364bf465d ab/pathname-encoding-doc later to maint).

 * "git --config-env var=val cmd" weren't accepted (only
   --config-env=var=val was).
   (merge c331551ccf ps/config-env-option-with-separate-value later to maint).

 * When the reachability bitmap is in effect, the "do not lose
   recently created objects and those that are reachable from them"
   safety to protect us from races were disabled by mistake, which has
   been corrected.
   (merge 2ba582ba4c jk/prune-with-bitmap-fix later to maint).

 * Cygwin pathname handling fix.
   (merge bccc37fdc7 ad/cygwin-no-backslashes-in-paths later to maint).

 * "git rebase --[no-]reschedule-failed-exec" did not work well with
   its configuration variable, which has been corrected.
   (merge e5b32bffd1 ab/rebase-no-reschedule-failed-exec later to maint).

 * Portability fix for command line completion script (in contrib/).
   (merge f2acf763e2 si/zsh-complete-comment-fix later to maint).

 * "git repack -A -d" in a partial clone unnecessarily loosened
   objects in promisor pack.

 * "git bisect skip" when custom words are used for new/old did not
   work, which has been corrected.

 * A few variants of informational message "Already up-to-date" has
   been rephrased.
   (merge ad9322da03 js/merge-already-up-to-date-message-reword later to maint).

 * "git submodule update --quiet" did not propagate the quiet option
   down to underlying "git fetch", which has been corrected.
   (merge 62af4bdd42 nc/submodule-update-quiet later to maint).

 * Document that our test can use "local" keyword.
   (merge a84fd3bcc6 jc/test-allows-local later to maint).

 * The word-diff mode has been taught to work better with a word
   regexp that can match an empty string.
   (merge 0324e8fc6b pw/word-diff-zero-width-matches later to maint).

 * "git p4" learned to find branch points more efficiently.
   (merge 6b79818bfb jk/p4-locate-branch-point-optim later to maint).

 * When "git update-ref -d" removes a ref that is packed, it left
   empty directories under $GIT_DIR/refs/ for
   (merge 5f03e5126d wc/packed-ref-removal-cleanup later to maint).

 * "git clean" and "git ls-files -i" had confusion around working on
   or showing ignored paths inside an ignored directory, which has
   been corrected.
   (merge b548f0f156 en/dir-traversal later to maint).

 * The handling of "%(push)" formatting element of "for-each-ref" and
   friends was broken when the same codepath started handling
   "%(push:<what>)", which has been corrected.
   (merge 1e1c4c5eac zh/ref-filter-push-remote-fix later to maint).

 * The bash prompt script (in contrib/) did not work under "set -u".
   (merge 5c0cbdb107 en/prompt-under-set-u later to maint).

 * The "chainlint" feature in the test framework is a handy way to
   catch common mistakes in writing new tests, but tends to get
   expensive.  An knob to selectively disable it has been introduced
   to help running tests that the developer has not modified.
   (merge 2d86a96220 jk/test-chainlint-softer later to maint).

 * The "rev-parse" command did not diagnose the lack of argument to
   "--path-format" option, which was introduced in v2.31 era, which
   has been corrected.
   (merge 99fc555188 wm/rev-parse-path-format-wo-arg later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge f451960708 dl/cat-file-doc-cleanup later to maint).
   (merge 12604a8d0c sv/t9801-test-path-is-file-cleanup later to maint).
   (merge ea7e63921c jr/doc-ignore-typofix later to maint).
   (merge 23c781f173 ps/update-ref-trans-hook-doc later to maint).
   (merge 42efa1231a jk/filter-branch-sha256 later to maint).
   (merge 4c8e3dca6e tb/push-simple-uses-branch-merge-config later to maint).
   (merge 6534d436a2 bs/asciidoctor-installation-hints later to maint).
   (merge 47957485b3 ab/read-tree later to maint).
   (merge 2be927f3d1 ab/diff-no-index-tests later to maint).
   (merge 76593c09bb ab/detox-gettext-tests later to maint).
   (merge 28e29ee38b jc/doc-format-patch-clarify later to maint).
   (merge fc12b6fdde fm/user-manual-use-preface later to maint).
   (merge dba94e3a85 cc/test-helper-bloom-usage-fix later to maint).
   (merge 61a7660516 hn/reftable-tables-doc-update later to maint).
   (merge 81ed96a9b2 jt/fetch-pack-request-fix later to maint).
   (merge 151b6c2dd7 jc/doc-do-not-capitalize-clarification later to maint).
   (merge 9160068ac6 js/access-nul-emulation-on-windows later to maint).
   (merge 7a14acdbe6 po/diff-patch-doc later to maint).
   (merge f91371b948 pw/patience-diff-clean-up later to maint).
   (merge 3a7f0908b6 mt/clean-clean later to maint).
   (merge d4e2d15a8b ab/streaming-simplify later to maint).
   (merge 0e59f7ad67 ah/merge-ort-i18n later to maint).
   (merge e6f68f62e0 ls/typofix later to maint).

----------------------------------------------------------------

Changes since v2.31.0 are as follows:

Adam Dinwoodie (1):
      cygwin: disallow backslashes in file names

Alex Henrie (2):
      merge-ort: split "distinct types" message into two translatable messages
      l10n: Update Catalan translation

Alexander Shopov (1):
      l10n: bg.po: Updated Bulgarian translation (5204t)

Alexey Roslyakov (1):
      l10n: ru.po: fix typo in Russian translation

Andrey Bienkowski (1):
      doc: clarify the filename encoding in git diff

Andrzej Hunt (24):
      Makefile: update 'make fuzz-all' docs to reflect modern clang
      symbolic-ref: don't leak shortened refname in check_symref()
      reset: free instead of leaking unneeded ref
      clone: free or UNLEAK further pointers when finished
      worktree: fix leak in dwim_branch()
      init: remove git_init_db_config() while fixing leaks
      init-db: silence template_dir leak when converting to absolute path
      fsmonitor: avoid global-buffer-overflow READ when checking trivial response
      parse-options: convert bitfield values to use binary shift
      parse-options: don't leak alias help messages
      transport: also free remote_refs in transport_disconnect()
      merge-ort: only do pointer arithmetic for non-empty lists
      revision: free remainder of old commit list in limit_list
      wt-status: fix multiple small leaks
      ls-files: free max_prefix when done
      bloom: clear each bloom_key after use
      branch: FREE_AND_NULL instead of NULL'ing real_ref
      builtin/bugreport: don't leak prefixed filename
      builtin/check-ignore: clear_pathspec before returning
      builtin/checkout: clear pending objects after diffing
      mailinfo: also free strbuf lists when clearing mailinfo
      builtin/for-each-ref: free filter and UNLEAK sorting.
      builtin/rebase: release git_format_patch_opt too
      builtin/rm: avoid leaking pathspec and seen

Atharva Raykar (1):
      userdiff: add support for Scheme

Bagas Sanjaya (6):
      INSTALL: note on using Asciidoctor to build doc
      l10n: id: po-id for 2.32.0 (round 1)
      l10n: README: document git-po-helper
      l10n: README: document "core translation"
      l10n: README: document l10n conventions
      l10n: README: note on fuzzy translations

Bruno Albuquerque (1):
      object-info: support for retrieving object info

Charvi Mendiratta (23):
      sequencer: pass todo_item to do_pick_commit()
      sequencer: use const variable for commit message comments
      rebase -i: add fixup [-C | -c] command
      t3437: test script for fixup [-C|-c] options in interactive rebase
      rebase -i: teach --autosquash to work with amend!
      doc/git-rebase: add documentation for fixup [-C|-c] options
      sequencer: fixup the datatype of the 'flag' argument
      sequencer: rename a few functions
      rebase -i: clarify and fix 'fixup -c' rebase-todo help
      t/lib-rebase: update the documentation of FAKE_LINES
      t/t3437: fixup here-docs in the 'setup' test
      t/t3437: remove the dependency of 'expected-message' file from tests
      t/t3437: check the author date of fixed up commit
      t/t3437: simplify and document the test helpers
      t/t3437: use named commits in the tests
      t/t3437: fixup the test 'multiple fixup -c opens editor once'
      doc/rebase -i: fix typo in the documentation of 'fixup' command
      sequencer: export and rename subject_length()
      commit: add amend suboption to --fixup to create amend! commit
      commit: add a reword suboption to --fixup
      t7500: add tests for --fixup=[amend|reword] options
      t3437: use --fixup with options to create amend! commit
      doc/git-commit: add documentation for fixup=[amend|reword] options

Chinmoy Chakraborty (1):
      column, range-diff: downcase option description

Christian Couder (1):
      test-bloom: fix missing 'bloom' from usage string

Christopher Diaz Riveros (1):
      l10n: es: 2.32.0 round 1

Christopher Schenk (1):
      remote-curl: fall back to basic auth if Negotiate fails

Daniel Santos (2):
      l10n: pt_PT: add Portuguese translations part 2
      l10n: pt_PT: add Portuguese translations part 3

David Aguilar (1):
      contrib/completion: fix zsh completion regression from 59d85a2a05

Dennis Ameling (2):
      cmake(install): fix double .exe suffixes
      cmake(install): include vcpkg dlls

Denton Liu (14):
      git-cat-file.txt: monospace args, placeholders and filenames
      git-cat-file.txt: remove references to "sha1"
      stash show: teach --include-untracked and --only-untracked
      stash show: learn stash.showIncludeUntracked
      git-completion.bash: pass $__git_subcommand_idx from __git_main()
      git-completion.bash: extract from else in _git_stash()
      git-completion.bash: use __gitcomp_builtin() in _git_stash()
      git-completion.bash: separate some commands onto their own line
      git-completion.bash: rename to $__git_cmd_idx
      git-completion.bash: use $__git_cmd_idx in more places
      git-completion.bash: consolidate cases in _git_stash()
      t3905: correct test title
      stash show: fix segfault with --{include,only}-untracked
      stash show: use stash.showIncludeUntracked even when diff options given

Derrick Stolee (58):
      commit-graph: create local repository pointer
      commit-graph: use config to specify generation type
      csum-file: make hashwrite() more readable
      sparse-index: design doc and format update
      t/perf: add performance test for sparse operations
      t1092: clean up script quoting
      sparse-index: add guard to ensure full index
      sparse-index: implement ensure_full_index()
      t1092: compare sparse-checkout to sparse-index
      test-read-cache: print cache entries with --table
      test-tool: don't force full index
      unpack-trees: ensure full index
      sparse-checkout: hold pattern list in index
      sparse-index: add 'sdir' index extension
      sparse-index: convert from full to sparse
      submodule: sparse-index should not collapse links
      unpack-trees: allow sparse directories
      sparse-index: check index conversion happens
      sparse-index: add index.sparse config option
      sparse-checkout: toggle sparse index from builtin
      sparse-checkout: disable sparse-index
      cache-tree: integrate with sparse directory entries
      sparse-index: loose integration with cache_tree_verify()
      p2000: add sparse-index repos
      maintenance: simplify prefetch logic
      sparse-index: API protection strategy
      *: remove 'const' qualifier for struct index_state
      read-cache: expand on query into sparse-directory entry
      cache: move ensure_full_index() to cache.h
      add: ensure full index
      checkout-index: ensure full index
      checkout: ensure full index
      commit: ensure full index
      difftool: ensure full index
      fsck: ensure full index
      grep: ensure full index
      ls-files: ensure full index
      merge-index: ensure full index
      rm: ensure full index
      stash: ensure full index
      update-index: ensure full index
      dir: ensure full index
      entry: ensure full index
      merge-recursive: ensure full index
      pathspec: ensure full index
      read-cache: ensure full index
      resolve-undo: ensure full index
      revision: ensure full index
      name-hash: don't add directories to name_hash
      sparse-index: expand_to_path()
      name-hash: use expand_to_path()
      fetch: add --prefetch option
      maintenance: use 'git fetch --prefetch'
      maintenance: respect remote.*.skipFetchAll
      dir: update stale description of treat_directory()
      sparse-index: fix uninitialized jump
      t1092: use GIT_PROGRESS_DELAY for consistent results
      dir: update stale description of treat_directory()

Elijah Newren (50):
      diffcore-rename: use directory rename guided basename comparisons
      diffcore-rename: provide basic implementation of idx_possible_rename()
      diffcore-rename: add a mapping of destination names to their indices
      Move computation of dir_rename_count from merge-ort to diffcore-rename
      diffcore-rename: add function for clearing dir_rename_count
      diffcore-rename: move dir_rename_counts into dir_rename_info struct
      diffcore-rename: extend cleanup_dir_rename_info()
      diffcore-rename: compute dir_rename_counts in stages
      diffcore-rename: limit dir_rename_counts computation to relevant dirs
      diffcore-rename: compute dir_rename_guess from dir_rename_counts
      diffcore-rename: enable filtering possible rename sources
      merge-ort: precompute subset of sources for which we need rename detection
      merge-ort: add data structures for an alternate tree traversal
      merge-ort: introduce wrappers for alternate tree traversal
      merge-ort: precompute whether directory rename detection is needed
      merge-ort: use relevant_sources to filter possible rename sources
      merge-ort: skip rename detection entirely if possible
      diffcore-rename: avoid doing basename comparisons for irrelevant sources
      diffcore-rename: take advantage of "majority rules" to skip more renames
      merge-ort, diffcore-rename: tweak dirs_removed and relevant_source type
      merge-ort: record the reason that we want a rename for a directory
      diffcore-rename: only compute dir_rename_count for relevant directories
      diffcore-rename: check if we have enough renames for directories early on
      diffcore-rename: add computation of number of unknown renames
      merge-ort: record the reason that we want a rename for a file
      diffcore-rename: determine which relevant_sources are no longer relevant
      merge-ort: use STABLE_QSORT instead of QSORT where required
      merge-ort: add a special minimal index just for renormalization
      merge-ort: have ll_merge() use a special attr_index for renormalization
      merge-ort: let renormalization change modify/delete into clean delete
      merge-ort: support subtree shifting
      t6428: new test for SKIP_WORKTREE handling and conflicts
      merge-ort: implement CE_SKIP_WORKTREE handling with conflicted entries
      t: mark several submodule merging tests as fixed under merge-ort
      merge-ort: write $GIT_DIR/AUTO_MERGE whenever we hit a conflict
      merge-recursive: add a bunch of FIXME comments documenting known bugs
      Revert "merge-ort: ignore the directory rename split conflict for now"
      t6423: mark remaining expected failure under merge-ort as such
      Add testing with merge-ort merge strategy
      sequencer: fix edit handling for cherry-pick and revert messages
      dir: convert trace calls to trace2 equivalents
      dir: report number of visited directories and paths with trace2
      ls-files: error out on -i unless -o or -c are specified
      t7300: add testcase showing unnecessary traversal into ignored directory
      t3001, t7300: add testcase showcasing missed directory traversal
      dir: avoid unnecessary traversal into ignored directory
      dir: traverse into untracked directories if they may have ignored subfiles
      dir: introduce readdir_skip_dot_and_dotdot() helper
      git-prompt: work under set -u
      dir: introduce readdir_skip_dot_and_dotdot() helper

Emir Sarı (1):
      l10n: tr: v2.32.0-r1

Eric Sunshine (1):
      merge(s): apply consistent punctuation to "up to date" messages

Eric Wong (1):
      remote-curl: fix clone on sha256 repos

Firmin Martin (1):
      user-manual.txt: assign preface an id and a title

Georgios Kontaxis (1):
      gitweb: add "e-mail privacy" feature to redact e-mail addresses

Han Xin (1):
      pack-objects: fix comment of reused_chunk.difference

Han-Wen Nienhuys (3):
      reftable: document an alternate cleanup method on Windows
      refs: print errno for read_raw_ref if GIT_TRACE_REFS is set
      refs/debug: trace into reflog expiry too

Jean-Noël Avila (1):
      l10n: fr: v2.32.0 round 1

Jeff Hostetler (14):
      pkt-line: eliminate the need for static buffer in packet_write_gently()
      simple-ipc: design documentation for new IPC mechanism
      simple-ipc: add win32 implementation
      unix-socket: eliminate static unix_stream_socket() helper function
      unix-socket: add backlog size option to unix_stream_listen()
      unix-socket: disallow chdir() when creating unix domain sockets
      unix-stream-server: create unix domain socket under lock
      convert: make convert_attrs() and convert structs public
      convert: add [async_]convert_to_working_tree_ca() variants
      convert: add get_stream_filter_ca() variant
      convert: add classification for conv_attrs struct
      simple-ipc: add Unix domain socket implementation
      t0052: add simple-ipc tests and t/helper/test-simple-ipc tool
      simple-ipc: correct ifdefs when NO_PTHREADS is defined

Jeff King (43):
      add open_nofollow() helper
      attr: convert "macro_ok" into a flags field
      exclude: add flags parameter to add_patterns()
      attr: do not respect symlinks for in-tree .gitattributes
      exclude: do not respect symlinks for in-tree .gitignore
      mailmap: do not respect symlinks for in-tree .mailmap
      p5303: add missing &&-chains
      p5303: measure time to repack with keep
      builtin/pack-objects.c: rewrite honor-pack-keep logic
      packfile: add kept-pack cache for find_kept_pack_entry()
      t/perf: handle worktrees as test repos
      t/perf: avoid copying worktree files from test repo
      t7003: test ref rewriting explicitly
      filter-branch: drop multiple-ancestor warning
      filter-branch: drop $_x40 glob
      bisect: peel annotated tags to commits
      t: annotate !PTHREADS tests with !FAIL_PREREQS
      ref-filter: fix NULL check for parse object failure
      midx.c: improve cache locality in midx_pack_order_cmp()
      pack-objects: update "nr_seen" progress based on pack-reused count
      is_promisor_object(): free tree buffer after parsing
      lookup_unknown_object(): take a repository argument
      revision: avoid parsing with --exclude-promisor-objects
      pack-bitmap: clean up include_check after use
      prune: save reachable-from-recent objects with bitmaps
      t5300: modernize basic tests
      t5300: check that we produced expected number of deltas
      pack-objects: clamp negative window size to 0
      t5316: check behavior of pack-objects --depth=0
      pack-objects: clamp negative depth to 0
      docs/format-patch: mention handling of merges
      t7415: remove out-dated comment about translation
      fsck_tree(): fix shadowed variable
      fsck_tree(): wrap some long lines
      t7415: rename to expand scope
      t7450: test verify_path() handling of gitmodules
      t7450: test .gitmodules symlink matching against obscured names
      t0060: test ntfs/hfs-obscured dotfiles
      fsck: warn about symlinked dotfiles we'll open with O_NOFOLLOW
      docs: document symlink restrictions for dot-files
      t: avoid sed-based chain-linting in some expensive cases
      t5551: test http interaction with credential helpers
      Revert "remote-curl: fall back to basic auth if Negotiate fails"

Jerry Zhang (3):
      git-apply: try threeway first when "--3way" is used
      git-apply: allow simultaneous --cached and --3way options
      apply: adjust messages to account for --3way changes

Jiang Xin (4):
      l10n: git.pot: v2.32.0 round 1 (126 new, 26 removed)
      l10n: fix typos in po/TEAMS
      l10n: README: add file extention ".md"
      l10n: zh_CN: for git v2.32.0 l10n round 1

Joachim Kuebart (2):
      git-p4: ensure complex branches are cloned correctly
      git-p4: speed up search for branch parent

Johannes Schindelin (10):
      pkt-line: do not issue flush packets in write_packetized_*()
      pkt-line: add PACKET_READ_GENTLE_ON_READ_ERROR option
      pkt-line: add options argument to read_packetized_to_strbuf()
      fsmonitor: fix memory corruption in some corner cases
      fsmonitor: do not forget to release the token in `discard_index()`
      SECURITY: describe how to report vulnerabilities
      Document how we do embargoed releases
      cmake: support SKIP_DASHED_BUILT_INS
      cmake: add a preparatory work-around to accommodate `vcpkg`
      msvc: avoid calling `access("NUL", flags)`

Johannes Sixt (1):
      t9001-send-email.sh: fix expected absolute paths on Windows

John Szakmeister (2):
      http: store credential when PKI auth is used
      http: drop the check for an empty proxy password before approving

Jonathan Tan (8):
      t5606: run clone branch name test with protocol v2
      fetch-pack: buffer object-format with other args
      fetch-pack: refactor process_acks()
      fetch-pack: refactor add_haves()
      fetch-pack: refactor command and capability write
      fetch: teach independent negotiation (no packfile)
      send-pack: support push negotiation
      t5601: mark protocol v2-only test

Jordi Mas (1):
      l10n: Update Catalan translation

Josh Soref (1):
      merge: fix swapped "up to date" message components

Julien Richard (1):
      doc: .gitignore documentation typofix

Junio C Hamano (34):
      builtin/repack.c: reword comment around pack-objects flags
      xcalloc: use CALLOC_ARRAY() when applicable
      cocci: allow xcalloc(1, size)
      The first batch in 2.32 cycle
      The second batch
      format-patch: give an overview of what a "patch" message is
      The third patch
      Git 2.31.1
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      The ninth batch
      doc: clarify "do not capitalize the first word" rule
      The tenth batch
      The eleventh (aka "ort") batch
      The twelfth batch
      The thirteenth batch
      CodingGuidelines: explicitly allow "local" for test scripts
      The fourteenth batch
      The fifteenth batch
      The sixteenth batch
      The seventeenth batch
      Git 2.32-rc0
      A handful more topics before -rc1
      Git 2.32-rc1
      t1092: revert the "-1" hack for emulating "no progress meter"
      Revert "dir: introduce readdir_skip_dot_and_dotdot() helper"
      Revert "dir: update stale description of treat_directory()"
      Git 2.32-rc2
      Git 2.32-rc3
      fsync(): be prepared to see EINTR
      Git 2.32

Kyle Meyer (1):
      config.txt: add missing period

Li Linchao (1):
      builtin/clone.c: add --reject-shallow option

Louis Sautier (1):
      pretty: fix a typo in the documentation for %(trailers)

Luke Shumaker (30):
      .gitignore: ignore 'git-subtree' as a build artifact
      subtree: t7900: update for having the default branch name be 'main'
      subtree: t7900: use test-lib.sh's test_count
      subtree: t7900: use consistent formatting
      subtree: t7900: comment subtree_test_create_repo
      subtree: t7900: use 'test' for string equality
      subtree: t7900: delete some dead code
      subtree: t7900: fix 'verify one file change per commit'
      subtree: t7900: rename last_commit_message to last_commit_subject
      subtree: t7900: add a test for the -h flag
      subtree: t7900: add porcelain tests for 'pull' and 'push'
      subtree: don't have loose code outside of a function
      subtree: more consistent error propagation
      subtree: drop support for git < 1.7
      subtree: use `git merge-base --is-ancestor`
      subtree: use git-sh-setup's `say`
      subtree: use more explicit variable names for cmdline args
      subtree: use "$*" instead of "$@" as appropriate
      subtree: don't fuss with PATH
      subtree: use "^{commit}" instead of "^0"
      subtree: parse revs in individual cmd_ functions
      subtree: remove duplicate check
      subtree: add comments and sanity checks
      subtree: don't let debug and progress output clash
      subtree: have $indent actually affect indentation
      subtree: give the docs a once-over
      subtree: allow --squash to be used with --rejoin
      subtree: allow 'split' flags to be passed to 'push'
      subtree: push: allow specifying a local rev other than HEAD
      subtree: be stricter about validating flags

Lénaïc Huard (1):
      maintenance: fix two memory leaks

Martin Ågren (2):
      git-repack.txt: remove spurious ")"
      pretty-formats.txt: add missing space

Matheus Tavares (32):
      convert: fail gracefully upon missing clean cmd on required filter
      symlinks: update comment on threaded_check_leading_path()
      checkout: don't follow symlinks when removing entries
      entry: extract a header file for entry.c functions
      entry: make fstat_output() and read_blob_entry() public
      entry: extract update_ce_after_write() from write_entry()
      entry: move conv_attrs lookup up to checkout_entry()
      entry: add checkout_entry_ca() taking preloaded conv_attrs
      add: include magic part of pathspec on --refresh error
      t3705: add tests for `git add` in sparse checkouts
      add: make --chmod and --renormalize honor sparse checkouts
      pathspec: allow to ignore SKIP_WORKTREE entries on index matching
      refresh_index(): add flag to ignore SKIP_WORKTREE entries
      add: warn when asked to update SKIP_WORKTREE entries
      rm: honor sparse checkout patterns
      pkt-line: do not report packet write errors twice
      unpack-trees: add basic support for parallel checkout
      parallel-checkout: make it truly parallel
      parallel-checkout: add configuration options
      parallel-checkout: support progress displaying
      parallel-checkout: add design documentation
      make_transient_cache_entry(): optionally alloc from mem_pool
      builtin/checkout.c: complete parallel checkout support
      parallel-checkout: add tests related to path collisions
      t0028: extract encoding helpers to lib-encoding.sh
      checkout-index: add parallel checkout support
      parallel-checkout: add tests related to .gitattributes
      parallel-checkout: add tests for basic operations
      ci: run test round with parallel-checkout enabled
      clean: remove unnecessary variable
      init: fix bug regarding ~/ expansion in init.templateDir
      t2080: fix cp invocation to copy symlinks instead of following them

Matthias Rüster (1):
      l10n: de.po: Update German translation for Git v2.32.0

Nicholas Clark (1):
      submodule update: silence underlying fetch with "--quiet"

Nipunn Koorapati (3):
      fsmonitor: skip lstat deletion check during git diff-index
      fsmonitor: add assertion that fsmonitor is valid to check_removed
      fsmonitor: add perf test for git diff HEAD

Patrick Steinhardt (17):
      githooks.txt: replace mentions of SHA-1 specific properties
      githooks.txt: clarify documentation on reference-transaction hook
      pack-bitmap: avoid traversal of objects referenced by uninteresting tag
      uploadpack.txt: document implication of `uploadpackfilter.allow`
      revision: mark commit parents as NOT_USER_GIVEN
      list-objects: move tag processing into its own function
      list-objects: support filtering by tag and commit
      list-objects: implement object type filter
      pack-bitmap: implement object type filter
      pack-bitmap: implement combined filter
      rev-list: allow filtering of provided items
      config: rename `git_etc_config()`
      config: unify code paths to get global config paths
      config: allow overriding of global and system configuration
      t1300: fix unset of GIT_CONFIG_NOSYSTEM leaking into subsequent tests
      git.txt: fix synopsis of `--config-env` missing the equals sign
      git: support separate arg for `--config-env`'s value

Peter Krefting (1):
      l10n: sv.po: Update Swedish translation (5204t0f0u)

Peter Oliver (1):
      doc: point to diff attribute in patch format docs

Phillip Wood (6):
      rebase -i: only write fixup-message when it's needed
      sequencer: factor out code to append squash message
      rebase -i: comment out squash!/fixup! subjects from squash message
      word diff: handle zero length matches
      patience diff: remove unnecessary string comparisons
      patience diff: remove unused variable

Rafael Silva (1):
      repack: avoid loosening promisor objects in partial clones

Ramkumar Ramachandra (1):
      Add entry for Ramkumar Ramachandra

Ramsay Jones (1):
      bisect--helper: use BISECT_TERMS in 'bisect skip' command

René Scharfe (13):
      pretty: add %(describe)
      pretty: add merge and exclude options to %(describe)
      t4205: assert %(describe) test coverage
      pretty: document multiple %(describe) being inconsistent
      fix xcalloc() argument order
      archive: expand only a single %(describe) per archive
      git-compat-util.h: drop trailing semicolon from macro definition
      use CALLOC_ARRAY
      vcs-svn: remove header files as well
      block-sha1: drop trailing semicolon from macro definition
      mem-pool: drop trailing semicolon from macro definition
      daemon: sanitize all directory separators
      parallel-checkout: avoid dash local bug in tests

Robert Foss (1):
      git-send-email: Respect core.hooksPath setting

SZEDER Gábor (1):
      Makefile: add missing dependencies of 'config-list.h'

Sardorbek Imomaliev (1):
      work around zsh comment in __git_complete_worktree_paths

Sergey Organov (5):
      diff-merges: introduce --diff-merges=on
      diff-merges: refactor set_diff_merges()
      diff-merges: adapt -m to enable default diff format
      diff-merges: introduce log.diffMerges config variable
      doc/diff-options: document new --diff-merges features

Shubham Verma (1):
      t9801: replace test -f with test_path_is_file

Taylor Blau (28):
      packfile: introduce 'find_kept_pack_entry()'
      revision: learn '--no-kept-objects'
      builtin/pack-objects.c: add '--stdin-packs' option
      builtin/repack.c: add '--geometric' option
      builtin/repack.c: do not repack single packs with --geometric
      t7703: test --geometric repack with loose objects
      builtin/repack.c: assign pack split later
      builtin/repack.c: be more conservative with unsigned overflows
      Documentation/git-push.txt: correct configuration typo
      builtin/pack-objects.c: ignore missing links with --stdin-packs
      builtin/multi-pack-index.c: inline 'flags' with options
      builtin/multi-pack-index.c: don't handle 'progress' separately
      builtin/multi-pack-index.c: define common usage with a macro
      builtin/multi-pack-index.c: split sub-commands
      builtin/multi-pack-index.c: don't enter bogus cmd_mode
      builtin/multi-pack-index.c: display usage on unrecognized command
      t/helper/test-read-midx.c: add '--show-objects'
      pack-bitmap: add 'test_bitmap_commits()' helper
      t/helper/test-bitmap.c: initial commit
      builtin/pack-objects.c: respect 'pack.preferBitmapTips'
      midx: allow marking a pack as preferred
      midx: don't free midx_name early
      midx: keep track of the checksum
      midx: make some functions non-static
      Documentation/technical: describe multi-pack reverse indexes
      pack-revindex: read multi-pack reverse indexes
      pack-write.c: extract 'write_rev_file_order'
      pack-revindex: write multi-pack reverse indexes

Todd Zullinger (1):
      t7500: remove non-existant C_LOCALE_OUTPUT prereq

Torsten Bögershausen (3):
      git mv foo FOO ; git mv foo bar gave an assert
      precompose_utf8: make precompose_string_if_needed() public
      macOS: precompose startup_info->prefix

Trần Ngọc Quân (1):
      l10n: vi.po(5204t): Updated Vietnamese translation for v2.32.0

Ville Skyttä (2):
      completion: audit and guard $GIT_* against unset use
      completion: avoid aliased command lookup error in nounset mode

Vincent Tam (1):
      l10n: fr.po fixed inconsistencies

Will Chandler (1):
      refs: cleanup directories when deleting packed ref

Wolfgang Müller (1):
      rev-parse: fix segfault with missing --path-format argument

Yi-Jyun Pan (2):
      l10n: zh_TW.po: v2.32.0 round 1 (11 untranslated)
      l10n: zh_TW.po: localized

ZheNing Hu (8):
      commit: add --trailer option
      format-patch: allow a non-integral version numbers
      ref-filter: get rid of show_ref_array_item
      ref-filter: reuse output buffer
      pretty: provide human date format
      docs: correct descript of trailer.<token>.command
      trailer: add new .cmd config option
      ref-filter: fix read invalid union member bug

brian m. carlson (14):
      builtin/init-db: handle bare clones when core.bare set to false
      hash: add an algo member to struct object_id
      Always use oidread to read into struct object_id
      http-push: set algorithm when reading object ID
      hash: add a function to finalize object IDs
      Use the final_oid_fn to finalize hashing of object IDs
      builtin/pack-redundant: avoid casting buffers to struct object_id
      hash: set, copy, and use algo field in struct object_id
      hash: provide per-algorithm null OIDs
      builtin/show-index: set the algorithm for object IDs
      commit-graph: don't store file hashes as struct object_id
      builtin/pack-objects: avoid using struct object_id for pack hash
      hex: default to the_hash_algo on zero algorithm value
      hex: print objects using the hash algorithm member

rlespinasse (1):
      l10n: fr: fixed inconsistencies

Ævar Arnfjörð Bjarmason (97):
      grep/pcre2: drop needless assignment + assert() on opt->pcre2
      grep/pcre2: drop needless assignment to NULL
      grep/pcre2: correct reference to grep_init() in comment
      grep/pcre2: prepare to add debugging to pcre2_malloc()
      grep/pcre2: add GREP_PCRE2_DEBUG_MALLOC debug mode
      grep/pcre2: use compile-time PCREv2 version test
      grep/pcre2: use pcre2_maketables_free() function
      grep/pcre2: actually make pcre2 use custom allocator
      grep/pcre2: move back to thread-only PCREv2 structures
      grep/pcre2: move definitions of pcre2_{malloc,free}
      Makefile: guard against TEST_OBJS in the environment
      Makefile: split up long OBJECTS line
      Makefile: sort OBJECTS assignment for subsequent change
      Makefile: split OBJECTS into OBJECTS and GIT_OBJS
      Makefile: add {program,xdiff,test,git,fuzz}-objs & objects targets
      remote: add camel-cased *.tagOpt key, like clone
      remote: write camel-cased *.pushRemote on rename
      fsck.c: refactor and rename common config callback
      show tests: add test for "git show <tree>"
      ls-files tests: add meaningful --with-tree tests
      tree.c API: move read_tree() into builtin/ls-files.c
      ls-files: don't needlessly pass around stage variable
      ls-files: refactor away read_tree()
      archive: stop passing "stage" through read_tree_recursive()
      tree.h API: expose read_tree_1() as read_tree_at()
      tree.h API: simplify read_tree_recursive() signature
      diff --no-index tests: add test for --exit-code
      diff --no-index tests: test mode normalization
      rebase: remove transitory rebase.useBuiltin setting & env
      mktag tests: fix broken "&&" chain
      fsck.h: use designed initializers for FSCK_OPTIONS_{DEFAULT,STRICT}
      fsck.h: use "enum object_type" instead of "int"
      fsck.c: rename variables in fsck_set_msg_type() for less confusion
      fsck.c: remove (mostly) redundant append_msg_id() function
      fsck.c: rename remaining fsck_msg_id "id" to "msg_id"
      fsck.c: refactor fsck_msg_type() to limit scope of "int msg_type"
      fsck.h: move FSCK_{FATAL,INFO,ERROR,WARN,IGNORE} into an enum
      fsck.h: re-order and re-assign "enum fsck_msg_type"
      fsck.c: call parse_msg_type() early in fsck_set_msg_type()
      fsck.c: undefine temporary STR macro after use
      fsck.c: give "FOREACH_MSG_ID" a more specific name
      fsck.[ch]: move FOREACH_FSCK_MSG_ID & fsck_msg_id from *.c to *.h
      fsck.c: pass along the fsck_msg_id in the fsck_error callback
      fsck.c: add an fsck_set_msg_type() API that takes enums
      fsck.c: move gitmodules_{found,done} into fsck_options
      fetch-pack: don't needlessly copy fsck_options
      fetch-pack: use file-scope static struct for fsck_options
      fetch-pack: use new fsck API to printing dangling submodules
      Makefile: add QUIET_GEN to "tags" and "TAGS" targets
      git-send-email: replace "map" in void context with "for"
      git-send-email: test full --validate output
      git-send-email: refactor duplicate $? checks into a function
      git-send-email: improve --validate error output
      bash completion: complete CHERRY_PICK_HEAD
      config.c: remove last remnant of GIT_TEST_GETTEXT_POISON
      userdiff style: re-order drivers in alphabetical order
      userdiff style: declare patterns with consistent style
      userdiff style: normalize pascal regex declaration
      userdiff: add and use for_each_userdiff_driver()
      userdiff tests: explicitly test "default" pattern
      userdiff tests: list builtin drivers via test-tool
      userdiff: remove support for "broken" tests
      blame tests: don't rely on t/t4018/ directory
      blame tests: simplify userdiff driver test
      rebase tests: camel-case rebase.rescheduleFailedExec consistently
      rebase: don't override --no-reschedule-failed-exec with config
      Documentation/Makefile: make $(wildcard howto/*.txt) a var
      Documentation/Makefile: make doc.dep dependencies a variable again
      doc lint: Perl "strict" and "warnings" in lint-gitlink.perl
      doc lint: fix bugs in, simplify and improve lint script
      doc lint: lint and fix missing "GIT" end sections
      doc lint: lint relative section order
      docs: fix linting issues due to incorrect relative section order
      svn tests: remove legacy re-setup from init-clone test
      svn tests: refactor away a "set -e" in test body
      tests: remove all uses of test_i18cmp
      usage.c: don't copy/paste the same comment three times
      api docs: document BUG() in api-error-handling.txt
      api docs: document that BUG() emits a trace2 error event
      pretty tests: simplify %aI/%cI date format test
      pretty tests: give --date/format tests a better description
      sparse-index.c: remove set_index_sparse_config()
      streaming.c: avoid forward declarations
      streaming.c: remove enum/function/vtbl indirection
      streaming.c: remove {open,close,read}_method_decl() macros
      streaming.c: stop passing around "object_info *" to open()
      streaming.c: move {open,close,read} from vtable to "struct git_istream"
      Makefile: don't re-define PERL_DEFINES
      Makefile: regenerate perl/build/* if GIT-PERL-DEFINES changes
      Makefile: regenerate *.pm on NO_PERL_CPAN_FALLBACKS change
      perl: use mock i18n functions under NO_GETTEXT=Y
      Makefile: make PERL_DEFINES recursively expanded
      send-email: fix missing error message regression
      send-email: don't needlessly abs_path() the core.hooksPath
      send-email: move "hooks_path" invocation to git-send-email.perl
      pack-objects: move static inline from a header to the sole consumer
      builtin/fsck.c: don't conflate "int" and "enum" in callback

Øystein Walle (2):
      transport: respect verbosity when setting upstream
      add: die if both --dry-run and --interactive are given

Đoàn Trần Công Danh (6):
      mailinfo: load default metainfo_charset lazily
      mailinfo: stop parsing options manually
      mailinfo: warn if CRLF found in decoded base64/QP email
      mailinfo: allow squelching quoted CRLF warning
      mailinfo: allow stripping quoted CR without warning
      am: learn to process quoted lines that ends with CRLF


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.32.0-rc3
@ 2021-06-02  8:29  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2021-06-02  8:29 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.32.0-rc3 is now available for testing at
the usual places.  It is comprised of 589 non-merge commits since
v2.31.0, contributed by 84 people, 31 of which are new faces [*].

A couple of small last-minute regression fixes are in, relative to
the previouss release candidate.  Hopefully we can tag the final
this weekend.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.32.0-rc3' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.31.0 are as follows.
Welcome to the Git development community!

  Adam Sharafeddine, Andrey Bienkowski, Atharva Raykar, Bruno
  Albuquerque, Chinmoy Chakraborty, Christopher Schenk, Dan
  Moseley, David Emett, Dmitry Torilov, Fabien Terrani, Firmin
  Martin, Georgios Kontaxis, Jason Gore, Jerry Zhang, Joachim
  Kuebart, Joseph Vusich, Josh Soref, Julien Richard, Li Linchao,
  Louis Sautier, Luke Shumaker, Nicholas Clark, Peter Oliver,
  Renato Botelho, Robert Foss, RyotaK, Sardorbek Imomaliev,
  Tom Saeger, Will Chandler, Wolfgang Müller, and Yiyuan guo.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alex Henrie, Andrzej
  Hunt, Bagas Sanjaya, Ben Humphreys, brian m. carlson, Charvi
  Mendiratta, Christian Couder, David Aguilar, Dennis Ameling,
  Denton Liu, Derrick Stolee, Đoàn Trần Công Danh, Elijah
  Newren, Eric Sunshine, Eric Wong, Han-Wen Nienhuys, Han Xin,
  Jeff Hostetler, Jeff King, Johannes Schindelin, Johannes Sixt,
  John Szakmeister, Jonathan Nieder, Jonathan Tan, Junio C Hamano,
  Kyle Meyer, Lénaïc Huard, Luke Diamand, Marc Branchaud,
  Martin Ågren, Matheus Tavares, Nguyễn Thái Ngọc Duy,
  Nipunn Koorapati, Øystein Walle, Patrick Steinhardt, Phillip
  Wood, Rafael Silva, Ramkumar Ramachandra, Ramsay Jones, Randall
  S. Becker, René Scharfe, Sergey Organov, Shubham Verma, Son
  Luong Ngoc, SZEDER Gábor, Taylor Blau, Todd Zullinger, Torsten
  Bögershausen, Trygve Aaberge, Ville Skyttä, and ZheNing Hu.

[*] We are counting not just the authorship contribution but
    issue reporting, testing and reviewing that are recorded
    in the commit trailers.

----------------------------------------------------------------

Git 2.32 Release Notes (draft)
==============================

Backward compatibility notes
----------------------------

 * ".gitattributes", ".gitignore", and ".mailmap" files that are
   symbolic links are ignored.

 * "git apply --3way" used to first attempt a straight application,
   and only fell back to the 3-way merge algorithm when the stright
   application failed.  Starting with this version, the command will
   first try the 3-way merge algorithm and only when it fails (either
   resulting with conflict or the base versions of blobs are missing),
   falls back to the usual patch application.


Updates since v2.31
-------------------

UI, Workflows & Features

 * It does not make sense to make ".gitattributes", ".gitignore" and
   ".mailmap" symlinks, as they are supposed to be usable from the
   object store (think: bare repositories where HEAD:.mailmap etc. are
   used).  When these files are symbolic links, we used to read the
   contents of the files pointed by them by mistake, which has been
   corrected.

 * "git stash show" learned to optionally show untracked part of the
   stash.

 * "git log --format='...'" learned "%(describe)" placeholder.

 * "git repack" so far has been only capable of repacking everything
   under the sun into a single pack (or split by size).  A cleverer
   strategy to reduce the cost of repacking a repository has been
   introduced.

 * The http codepath learned to let the credential layer to cache the
   password used to unlock a certificate that has successfully been
   used.

 * "git commit --fixup=<commit>", which was to tweak the changes made
   to the contents while keeping the original log message intact,
   learned "--fixup=(amend|reword):<commit>", that can be used to
   tweak both the message and the contents, and only the message,
   respectively.

 * "git send-email" learned to honor the core.hooksPath configuration.

 * "git format-patch -v<n>" learned to allow a reroll count that is
   not an integer.

 * "git commit" learned "--trailer <key>[=<value>]" option; together
   with the interpret-trailers command, this will make it easier to
   support custom trailers.

 * "git clone --reject-shallow" option fails the clone as soon as we
   notice that we are cloning from a shallow repository.

 * A configuration variable has been added to force tips of certain
   refs to be given a reachability bitmap.

 * "gitweb" learned "e-mail privacy" feature to redact strings that
   look like e-mail addresses on various pages.

 * "git apply --3way" has always been "to fall back to 3-way merge
   only when straight application fails". Swap the order of falling
   back so that 3-way is always attempted first (only when the option
   is given, of course) and then straight patch application is used as
   a fallback when it fails.

 * "git apply" now takes "--3way" and "--cached" at the same time, and
   work and record results only in the index.

 * The command line completion (in contrib/) has learned that
   CHERRY_PICK_HEAD is a possible pseudo-ref.

 * Userdiff patterns for "Scheme" has been added.

 * "git log" learned "--diff-merges=<style>" option, with an
   associated configuration variable log.diffMerges.

 * "git log --format=..." placeholders learned %ah/%ch placeholders to
   request the --date=human output.

 * Replace GIT_CONFIG_NOSYSTEM mechanism to decline from reading the
   system-wide configuration file with GIT_CONFIG_SYSTEM that lets
   users specify from which file to read the system-wide configuration
   (setting it to an empty file would essentially be the same as
   setting NOSYSTEM), and introduce GIT_CONFIG_GLOBAL to override the
   per-user configuration in $HOME/.gitconfig.

 * "git add" and "git rm" learned not to touch those paths that are
   outside of sparse checkout.

 * "git rev-list" learns the "--filter=object:type=<type>" option,
   which can be used to exclude objects of the given kind from the
   packfile generated by pack-objects.

 * The command line completion (in contrib/) for "git stash" has been
   updated.

 * "git subtree" updates.

 * It is now documented that "format-patch" skips merges.

 * Options to "git pack-objects" that take numeric values like
   --window and --depth should not accept negative values; the input
   validation has been tightened.

 * The way the command line specified by the trailer.<token>.command
   configuration variable receives the end-user supplied value was
   both error prone and misleading.  An alternative to achieve the
   same goal in a safer and more intuitive way has been added, as
   the trailer.<token>.cmd configuration variable, to replace it.

 * "git add -i --dry-run" does not dry-run, which was surprising.  The
   combination of options has taught to error out.

 * "git push" learns to discover common ancestor with the receiving
   end over protocol v2.  This will hopefully make "git push" as
   efficient as "git fetch" in avoiding objects from getting
   transferred unnecessarily.

 * "git mailinfo" (hence "git am") learned the "--quoted-cr" option to
   control how lines ending with CRLF wrapped in base64 or qp are
   handled.


Performance, Internal Implementation, Development Support etc.

 * Rename detection rework continues.

 * GIT_TEST_FAIL_PREREQS is a mechanism to skip test pieces with
   prerequisites to catch broken tests that depend on the side effects
   of optional pieces, but did not work at all when negative
   prerequisites were involved.
   (merge 27d578d904 jk/fail-prereq-testfix later to maint).

 * "git diff-index" codepath has been taught to trust fsmonitor status
   to reduce number of lstat() calls.
   (merge 7e5aa13d2c nk/diff-index-fsmonitor later to maint).

 * Reorganize Makefile to allow building git.o and other essential
   objects without extra stuff needed only for testing.

 * Preparatory API changes for parallel checkout.

 * A simple IPC interface gets introduced to build services like
   fsmonitor on top.

 * Fsck API clean-up.

 * SECURITY.md that is facing individual contributors and end users
   has been introduced.  Also a procedure to follow when preparing
   embargoed releases has been spelled out.
   (merge 09420b7648 js/security-md later to maint).

 * Optimize "rev-list --use-bitmap-index --objects" corner case that
   uses negative tags as the stopping points.

 * CMake update for vsbuild.

 * An on-disk reverse-index to map the in-pack location of an object
   back to its object name across multiple packfiles is introduced.

 * Generate [ec]tags under $(QUIET_GEN).

 * Clean-up codepaths that implements "git send-email --validate"
   option and improves the message from it.

 * The last remnant of gettext-poison has been removed.

 * The test framework has been taught to optionally turn the default
   merge strategy to "ort" throughout the system where we use
   three-way merges internally, like cherry-pick, rebase etc.,
   primarily to enhance its test coverage (the strategy has been
   available as an explicit "-s ort" choice).

 * A bit of code clean-up and a lot of test clean-up around userdiff
   area.

 * Handling of "promisor packs" that allows certain objects to be
   missing and lazily retrievable has been optimized (a bit).

 * When packet_write() fails, we gave an extra error message
   unnecessarily, which has been corrected.

 * The checkout machinery has been taught to perform the actual
   write-out of the files in parallel when able.

 * Show errno in the trace output in the error codepath that calls
   read_raw_ref method.

 * Effort to make the command line completion (in contrib/) safe with
   "set -u" continues.

 * Tweak a few tests for "log --format=..." that show timestamps in
   various formats.

 * The reflog expiry machinery has been taught to emit trace events.

 * Over-the-wire protocol learns a new request type to ask for object
   sizes given a list of object names.


Fixes since v2.31
-----------------

 * The fsmonitor interface read from its input without making sure
   there is something to read from.  This bug is new in 2.31
   timeframe.

 * The data structure used by fsmonitor interface was not properly
   duplicated during an in-core merge, leading to use-after-free etc.

 * "git bisect" reimplemented more in C during 2.30 timeframe did not
   take an annotated tag as a good/bad endpoint well.  This regression
   has been corrected.

 * Fix macros that can silently inject unintended null-statements.

 * CALLOC_ARRAY() macro replaces many uses of xcalloc().

 * Update insn in Makefile comments to run fuzz-all target.

 * Fix a corner case bug in "git mv" on case insensitive systems,
   which was introduced in 2.29 timeframe.

 * We had a code to diagnose and die cleanly when a required
   clean/smudge filter is missing, but an assert before that
   unnecessarily fired, hiding the end-user facing die() message.
   (merge 6fab35f748 mt/cleanly-die-upon-missing-required-filter later to maint).

 * Update C code that sets a few configuration variables when a remote
   is configured so that it spells configuration variable names in the
   canonical camelCase.
   (merge 0f1da600e6 ab/remote-write-config-in-camel-case later to maint).

 * A new configuration variable has been introduced to allow choosing
   which version of the generation number gets used in the
   commit-graph file.
   (merge 702110aac6 ds/commit-graph-generation-config later to maint).

 * Perf test update to work better in secondary worktrees.
   (merge 36e834abc1 jk/perf-in-worktrees later to maint).

 * Updates to memory allocation code around the use of pcre2 library.
   (merge c1760352e0 ab/grep-pcre2-allocfix later to maint).

 * "git -c core.bare=false clone --bare ..." would have segfaulted,
   which has been corrected.
   (merge 75555676ad bc/clone-bare-with-conflicting-config later to maint).

 * When "git checkout" removes a path that does not exist in the
   commit it is checking out, it wasn't careful enough not to follow
   symbolic links, which has been corrected.
   (merge fab78a0c3d mt/checkout-remove-nofollow later to maint).

 * A few option description strings started with capital letters,
   which were corrected.
   (merge 5ee90326dc cc/downcase-opt-help later to maint).

 * Plug or annotate remaining leaks that trigger while running the
   very basic set of tests.
   (merge 68ffe095a2 ah/plugleaks later to maint).

 * The hashwrite() API uses a buffering mechanism to avoid calling
   write(2) too frequently. This logic has been refactored to be
   easier to understand.
   (merge ddaf1f62e3 ds/clarify-hashwrite later to maint).

 * "git cherry-pick/revert" with or without "--[no-]edit" did not spawn
   the editor as expected (e.g. "revert --no-edit" after a conflict
   still asked to edit the message), which has been corrected.
   (merge 39edfd5cbc en/sequencer-edit-upon-conflict-fix later to maint).

 * "git daemon" has been tightened against systems that take backslash
   as directory separator.
   (merge 9a7f1ce8b7 rs/daemon-sanitize-dir-sep later to maint).

 * A NULL-dereference bug has been corrected in an error codepath in
   "git for-each-ref", "git branch --list" etc.
   (merge c685450880 jk/ref-filter-segfault-fix later to maint).

 * Streamline the codepath to fix the UTF-8 encoding issues in the
   argv[] and the prefix on macOS.
   (merge c7d0e61016 tb/precompose-prefix-simplify later to maint).

 * The command-line completion script (in contrib/) had a couple of
   references that would have given a warning under the "-u" (nounset)
   option.
   (merge c5c0548d79 vs/completion-with-set-u later to maint).

 * When "git pack-objects" makes a literal copy of a part of existing
   packfile using the reachability bitmaps, its update to the progress
   meter was broken.
   (merge 8e118e8490 jk/pack-objects-bitmap-progress-fix later to maint).

 * The dependencies for config-list.h and command-list.h were broken
   when the former was split out of the latter, which has been
   corrected.
   (merge 56550ea718 sg/bugreport-fixes later to maint).

 * "git push --quiet --set-upstream" was not quiet when setting the
   upstream branch configuration, which has been corrected.
   (merge f3cce896a8 ow/push-quiet-set-upstream later to maint).

 * The prefetch task in "git maintenance" assumed that "git fetch"
   from any remote would fetch all its local branches, which would
   fetch too much if the user is interested in only a subset of
   branches there.
   (merge 32f67888d8 ds/maintenance-prefetch-fix later to maint).

 * Clarify that pathnames recorded in Git trees are most often (but
   not necessarily) encoded in UTF-8.
   (merge 9364bf465d ab/pathname-encoding-doc later to maint).

 * "git --config-env var=val cmd" weren't accepted (only
   --config-env=var=val was).
   (merge c331551ccf ps/config-env-option-with-separate-value later to maint).

 * When the reachability bitmap is in effect, the "do not lose
   recently created objects and those that are reachable from them"
   safety to protect us from races were disabled by mistake, which has
   been corrected.
   (merge 2ba582ba4c jk/prune-with-bitmap-fix later to maint).

 * Cygwin pathname handling fix.
   (merge bccc37fdc7 ad/cygwin-no-backslashes-in-paths later to maint).

 * "git rebase --[no-]reschedule-failed-exec" did not work well with
   its configuration variable, which has been corrected.
   (merge e5b32bffd1 ab/rebase-no-reschedule-failed-exec later to maint).

 * Portability fix for command line completion script (in contrib/).
   (merge f2acf763e2 si/zsh-complete-comment-fix later to maint).

 * "git repack -A -d" in a partial clone unnecessarily loosened
   objects in promisor pack.

 * "git bisect skip" when custom words are used for new/old did not
   work, which has been corrected.

 * A few variants of informational message "Already up-to-date" has
   been rephrased.
   (merge ad9322da03 js/merge-already-up-to-date-message-reword later to maint).

 * "git submodule update --quiet" did not propagate the quiet option
   down to underlying "git fetch", which has been corrected.
   (merge 62af4bdd42 nc/submodule-update-quiet later to maint).

 * Document that our test can use "local" keyword.
   (merge a84fd3bcc6 jc/test-allows-local later to maint).

 * The word-diff mode has been taught to work better with a word
   regexp that can match an empty string.
   (merge 0324e8fc6b pw/word-diff-zero-width-matches later to maint).

 * "git p4" learned to find branch points more efficiently.
   (merge 6b79818bfb jk/p4-locate-branch-point-optim later to maint).

 * When "git update-ref -d" removes a ref that is packed, it left
   empty directories under $GIT_DIR/refs/ for
   (merge 5f03e5126d wc/packed-ref-removal-cleanup later to maint).

 * "git clean" and "git ls-files -i" had confusion around working on
   or showing ignored paths inside an ignored directory, which has
   been corrected.
   (merge b548f0f156 en/dir-traversal later to maint).

 * The handling of "%(push)" formatting element of "for-each-ref" and
   friends was broken when the same codepath started handling
   "%(push:<what>)", which has been corrected.
   (merge 1e1c4c5eac zh/ref-filter-push-remote-fix later to maint).

 * The bash prompt script (in contrib/) did not work under "set -u".
   (merge 5c0cbdb107 en/prompt-under-set-u later to maint).

 * The "chainlint" feature in the test framework is a handy way to
   catch common mistakes in writing new tests, but tends to get
   expensive.  An knob to selectively disable it has been introduced
   to help running tests that the developer has not modified.
   (merge 2d86a96220 jk/test-chainlint-softer later to maint).

 * The "rev-parse" command did not diagnose the lack of argument to
   "--path-format" option, which was introduced in v2.31 era, which
   has been corrected.
   (merge 99fc555188 wm/rev-parse-path-format-wo-arg later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge f451960708 dl/cat-file-doc-cleanup later to maint).
   (merge 12604a8d0c sv/t9801-test-path-is-file-cleanup later to maint).
   (merge ea7e63921c jr/doc-ignore-typofix later to maint).
   (merge 23c781f173 ps/update-ref-trans-hook-doc later to maint).
   (merge 42efa1231a jk/filter-branch-sha256 later to maint).
   (merge 4c8e3dca6e tb/push-simple-uses-branch-merge-config later to maint).
   (merge 6534d436a2 bs/asciidoctor-installation-hints later to maint).
   (merge 47957485b3 ab/read-tree later to maint).
   (merge 2be927f3d1 ab/diff-no-index-tests later to maint).
   (merge 76593c09bb ab/detox-gettext-tests later to maint).
   (merge 28e29ee38b jc/doc-format-patch-clarify later to maint).
   (merge fc12b6fdde fm/user-manual-use-preface later to maint).
   (merge dba94e3a85 cc/test-helper-bloom-usage-fix later to maint).
   (merge 61a7660516 hn/reftable-tables-doc-update later to maint).
   (merge 81ed96a9b2 jt/fetch-pack-request-fix later to maint).
   (merge 151b6c2dd7 jc/doc-do-not-capitalize-clarification later to maint).
   (merge 9160068ac6 js/access-nul-emulation-on-windows later to maint).
   (merge 7a14acdbe6 po/diff-patch-doc later to maint).
   (merge f91371b948 pw/patience-diff-clean-up later to maint).
   (merge 3a7f0908b6 mt/clean-clean later to maint).
   (merge d4e2d15a8b ab/streaming-simplify later to maint).
   (merge 0e59f7ad67 ah/merge-ort-i18n later to maint).
   (merge e6f68f62e0 ls/typofix later to maint).

----------------------------------------------------------------

Changes since v2.31.0 are as follows:

Adam Dinwoodie (1):
      cygwin: disallow backslashes in file names

Alex Henrie (1):
      merge-ort: split "distinct types" message into two translatable messages

Andrey Bienkowski (1):
      doc: clarify the filename encoding in git diff

Andrzej Hunt (24):
      Makefile: update 'make fuzz-all' docs to reflect modern clang
      symbolic-ref: don't leak shortened refname in check_symref()
      reset: free instead of leaking unneeded ref
      clone: free or UNLEAK further pointers when finished
      worktree: fix leak in dwim_branch()
      init: remove git_init_db_config() while fixing leaks
      init-db: silence template_dir leak when converting to absolute path
      fsmonitor: avoid global-buffer-overflow READ when checking trivial response
      parse-options: convert bitfield values to use binary shift
      parse-options: don't leak alias help messages
      transport: also free remote_refs in transport_disconnect()
      merge-ort: only do pointer arithmetic for non-empty lists
      revision: free remainder of old commit list in limit_list
      wt-status: fix multiple small leaks
      ls-files: free max_prefix when done
      bloom: clear each bloom_key after use
      branch: FREE_AND_NULL instead of NULL'ing real_ref
      builtin/bugreport: don't leak prefixed filename
      builtin/check-ignore: clear_pathspec before returning
      builtin/checkout: clear pending objects after diffing
      mailinfo: also free strbuf lists when clearing mailinfo
      builtin/for-each-ref: free filter and UNLEAK sorting.
      builtin/rebase: release git_format_patch_opt too
      builtin/rm: avoid leaking pathspec and seen

Atharva Raykar (1):
      userdiff: add support for Scheme

Bagas Sanjaya (1):
      INSTALL: note on using Asciidoctor to build doc

Bruno Albuquerque (1):
      object-info: support for retrieving object info

Charvi Mendiratta (23):
      sequencer: pass todo_item to do_pick_commit()
      sequencer: use const variable for commit message comments
      rebase -i: add fixup [-C | -c] command
      t3437: test script for fixup [-C|-c] options in interactive rebase
      rebase -i: teach --autosquash to work with amend!
      doc/git-rebase: add documentation for fixup [-C|-c] options
      sequencer: fixup the datatype of the 'flag' argument
      sequencer: rename a few functions
      rebase -i: clarify and fix 'fixup -c' rebase-todo help
      t/lib-rebase: update the documentation of FAKE_LINES
      t/t3437: fixup here-docs in the 'setup' test
      t/t3437: remove the dependency of 'expected-message' file from tests
      t/t3437: check the author date of fixed up commit
      t/t3437: simplify and document the test helpers
      t/t3437: use named commits in the tests
      t/t3437: fixup the test 'multiple fixup -c opens editor once'
      doc/rebase -i: fix typo in the documentation of 'fixup' command
      sequencer: export and rename subject_length()
      commit: add amend suboption to --fixup to create amend! commit
      commit: add a reword suboption to --fixup
      t7500: add tests for --fixup=[amend|reword] options
      t3437: use --fixup with options to create amend! commit
      doc/git-commit: add documentation for fixup=[amend|reword] options

Chinmoy Chakraborty (1):
      column, range-diff: downcase option description

Christian Couder (1):
      test-bloom: fix missing 'bloom' from usage string

Christopher Schenk (1):
      remote-curl: fall back to basic auth if Negotiate fails

David Aguilar (1):
      contrib/completion: fix zsh completion regression from 59d85a2a05

Dennis Ameling (2):
      cmake(install): fix double .exe suffixes
      cmake(install): include vcpkg dlls

Denton Liu (14):
      git-cat-file.txt: monospace args, placeholders and filenames
      git-cat-file.txt: remove references to "sha1"
      stash show: teach --include-untracked and --only-untracked
      stash show: learn stash.showIncludeUntracked
      git-completion.bash: pass $__git_subcommand_idx from __git_main()
      git-completion.bash: extract from else in _git_stash()
      git-completion.bash: use __gitcomp_builtin() in _git_stash()
      git-completion.bash: separate some commands onto their own line
      git-completion.bash: rename to $__git_cmd_idx
      git-completion.bash: use $__git_cmd_idx in more places
      git-completion.bash: consolidate cases in _git_stash()
      t3905: correct test title
      stash show: fix segfault with --{include,only}-untracked
      stash show: use stash.showIncludeUntracked even when diff options given

Derrick Stolee (58):
      commit-graph: create local repository pointer
      commit-graph: use config to specify generation type
      csum-file: make hashwrite() more readable
      sparse-index: design doc and format update
      t/perf: add performance test for sparse operations
      t1092: clean up script quoting
      sparse-index: add guard to ensure full index
      sparse-index: implement ensure_full_index()
      t1092: compare sparse-checkout to sparse-index
      test-read-cache: print cache entries with --table
      test-tool: don't force full index
      unpack-trees: ensure full index
      sparse-checkout: hold pattern list in index
      sparse-index: add 'sdir' index extension
      sparse-index: convert from full to sparse
      submodule: sparse-index should not collapse links
      unpack-trees: allow sparse directories
      sparse-index: check index conversion happens
      sparse-index: add index.sparse config option
      sparse-checkout: toggle sparse index from builtin
      sparse-checkout: disable sparse-index
      cache-tree: integrate with sparse directory entries
      sparse-index: loose integration with cache_tree_verify()
      p2000: add sparse-index repos
      maintenance: simplify prefetch logic
      sparse-index: API protection strategy
      *: remove 'const' qualifier for struct index_state
      read-cache: expand on query into sparse-directory entry
      cache: move ensure_full_index() to cache.h
      add: ensure full index
      checkout-index: ensure full index
      checkout: ensure full index
      commit: ensure full index
      difftool: ensure full index
      fsck: ensure full index
      grep: ensure full index
      ls-files: ensure full index
      merge-index: ensure full index
      rm: ensure full index
      stash: ensure full index
      update-index: ensure full index
      dir: ensure full index
      entry: ensure full index
      merge-recursive: ensure full index
      pathspec: ensure full index
      read-cache: ensure full index
      resolve-undo: ensure full index
      revision: ensure full index
      name-hash: don't add directories to name_hash
      sparse-index: expand_to_path()
      name-hash: use expand_to_path()
      fetch: add --prefetch option
      maintenance: use 'git fetch --prefetch'
      maintenance: respect remote.*.skipFetchAll
      dir: update stale description of treat_directory()
      sparse-index: fix uninitialized jump
      t1092: use GIT_PROGRESS_DELAY for consistent results
      dir: update stale description of treat_directory()

Elijah Newren (50):
      diffcore-rename: use directory rename guided basename comparisons
      diffcore-rename: provide basic implementation of idx_possible_rename()
      diffcore-rename: add a mapping of destination names to their indices
      Move computation of dir_rename_count from merge-ort to diffcore-rename
      diffcore-rename: add function for clearing dir_rename_count
      diffcore-rename: move dir_rename_counts into dir_rename_info struct
      diffcore-rename: extend cleanup_dir_rename_info()
      diffcore-rename: compute dir_rename_counts in stages
      diffcore-rename: limit dir_rename_counts computation to relevant dirs
      diffcore-rename: compute dir_rename_guess from dir_rename_counts
      diffcore-rename: enable filtering possible rename sources
      merge-ort: precompute subset of sources for which we need rename detection
      merge-ort: add data structures for an alternate tree traversal
      merge-ort: introduce wrappers for alternate tree traversal
      merge-ort: precompute whether directory rename detection is needed
      merge-ort: use relevant_sources to filter possible rename sources
      merge-ort: skip rename detection entirely if possible
      diffcore-rename: avoid doing basename comparisons for irrelevant sources
      diffcore-rename: take advantage of "majority rules" to skip more renames
      merge-ort, diffcore-rename: tweak dirs_removed and relevant_source type
      merge-ort: record the reason that we want a rename for a directory
      diffcore-rename: only compute dir_rename_count for relevant directories
      diffcore-rename: check if we have enough renames for directories early on
      diffcore-rename: add computation of number of unknown renames
      merge-ort: record the reason that we want a rename for a file
      diffcore-rename: determine which relevant_sources are no longer relevant
      merge-ort: use STABLE_QSORT instead of QSORT where required
      merge-ort: add a special minimal index just for renormalization
      merge-ort: have ll_merge() use a special attr_index for renormalization
      merge-ort: let renormalization change modify/delete into clean delete
      merge-ort: support subtree shifting
      t6428: new test for SKIP_WORKTREE handling and conflicts
      merge-ort: implement CE_SKIP_WORKTREE handling with conflicted entries
      t: mark several submodule merging tests as fixed under merge-ort
      merge-ort: write $GIT_DIR/AUTO_MERGE whenever we hit a conflict
      merge-recursive: add a bunch of FIXME comments documenting known bugs
      Revert "merge-ort: ignore the directory rename split conflict for now"
      t6423: mark remaining expected failure under merge-ort as such
      Add testing with merge-ort merge strategy
      sequencer: fix edit handling for cherry-pick and revert messages
      dir: convert trace calls to trace2 equivalents
      dir: report number of visited directories and paths with trace2
      ls-files: error out on -i unless -o or -c are specified
      t7300: add testcase showing unnecessary traversal into ignored directory
      t3001, t7300: add testcase showcasing missed directory traversal
      dir: avoid unnecessary traversal into ignored directory
      dir: traverse into untracked directories if they may have ignored subfiles
      dir: introduce readdir_skip_dot_and_dotdot() helper
      git-prompt: work under set -u
      dir: introduce readdir_skip_dot_and_dotdot() helper

Eric Sunshine (1):
      merge(s): apply consistent punctuation to "up to date" messages

Eric Wong (1):
      remote-curl: fix clone on sha256 repos

Firmin Martin (1):
      user-manual.txt: assign preface an id and a title

Georgios Kontaxis (1):
      gitweb: add "e-mail privacy" feature to redact e-mail addresses

Han Xin (1):
      pack-objects: fix comment of reused_chunk.difference

Han-Wen Nienhuys (3):
      reftable: document an alternate cleanup method on Windows
      refs: print errno for read_raw_ref if GIT_TRACE_REFS is set
      refs/debug: trace into reflog expiry too

Jeff Hostetler (14):
      pkt-line: eliminate the need for static buffer in packet_write_gently()
      simple-ipc: design documentation for new IPC mechanism
      simple-ipc: add win32 implementation
      unix-socket: eliminate static unix_stream_socket() helper function
      unix-socket: add backlog size option to unix_stream_listen()
      unix-socket: disallow chdir() when creating unix domain sockets
      unix-stream-server: create unix domain socket under lock
      convert: make convert_attrs() and convert structs public
      convert: add [async_]convert_to_working_tree_ca() variants
      convert: add get_stream_filter_ca() variant
      convert: add classification for conv_attrs struct
      simple-ipc: add Unix domain socket implementation
      t0052: add simple-ipc tests and t/helper/test-simple-ipc tool
      simple-ipc: correct ifdefs when NO_PTHREADS is defined

Jeff King (43):
      add open_nofollow() helper
      attr: convert "macro_ok" into a flags field
      exclude: add flags parameter to add_patterns()
      attr: do not respect symlinks for in-tree .gitattributes
      exclude: do not respect symlinks for in-tree .gitignore
      mailmap: do not respect symlinks for in-tree .mailmap
      p5303: add missing &&-chains
      p5303: measure time to repack with keep
      builtin/pack-objects.c: rewrite honor-pack-keep logic
      packfile: add kept-pack cache for find_kept_pack_entry()
      t/perf: handle worktrees as test repos
      t/perf: avoid copying worktree files from test repo
      t7003: test ref rewriting explicitly
      filter-branch: drop multiple-ancestor warning
      filter-branch: drop $_x40 glob
      bisect: peel annotated tags to commits
      t: annotate !PTHREADS tests with !FAIL_PREREQS
      ref-filter: fix NULL check for parse object failure
      midx.c: improve cache locality in midx_pack_order_cmp()
      pack-objects: update "nr_seen" progress based on pack-reused count
      is_promisor_object(): free tree buffer after parsing
      lookup_unknown_object(): take a repository argument
      revision: avoid parsing with --exclude-promisor-objects
      pack-bitmap: clean up include_check after use
      prune: save reachable-from-recent objects with bitmaps
      t5300: modernize basic tests
      t5300: check that we produced expected number of deltas
      pack-objects: clamp negative window size to 0
      t5316: check behavior of pack-objects --depth=0
      pack-objects: clamp negative depth to 0
      docs/format-patch: mention handling of merges
      t7415: remove out-dated comment about translation
      fsck_tree(): fix shadowed variable
      fsck_tree(): wrap some long lines
      t7415: rename to expand scope
      t7450: test verify_path() handling of gitmodules
      t7450: test .gitmodules symlink matching against obscured names
      t0060: test ntfs/hfs-obscured dotfiles
      fsck: warn about symlinked dotfiles we'll open with O_NOFOLLOW
      docs: document symlink restrictions for dot-files
      t: avoid sed-based chain-linting in some expensive cases
      t5551: test http interaction with credential helpers
      Revert "remote-curl: fall back to basic auth if Negotiate fails"

Jerry Zhang (3):
      git-apply: try threeway first when "--3way" is used
      git-apply: allow simultaneous --cached and --3way options
      apply: adjust messages to account for --3way changes

Joachim Kuebart (2):
      git-p4: ensure complex branches are cloned correctly
      git-p4: speed up search for branch parent

Johannes Schindelin (10):
      pkt-line: do not issue flush packets in write_packetized_*()
      pkt-line: add PACKET_READ_GENTLE_ON_READ_ERROR option
      pkt-line: add options argument to read_packetized_to_strbuf()
      fsmonitor: fix memory corruption in some corner cases
      fsmonitor: do not forget to release the token in `discard_index()`
      SECURITY: describe how to report vulnerabilities
      Document how we do embargoed releases
      cmake: support SKIP_DASHED_BUILT_INS
      cmake: add a preparatory work-around to accommodate `vcpkg`
      msvc: avoid calling `access("NUL", flags)`

Johannes Sixt (1):
      t9001-send-email.sh: fix expected absolute paths on Windows

John Szakmeister (2):
      http: store credential when PKI auth is used
      http: drop the check for an empty proxy password before approving

Jonathan Tan (8):
      t5606: run clone branch name test with protocol v2
      fetch-pack: buffer object-format with other args
      fetch-pack: refactor process_acks()
      fetch-pack: refactor add_haves()
      fetch-pack: refactor command and capability write
      fetch: teach independent negotiation (no packfile)
      send-pack: support push negotiation
      t5601: mark protocol v2-only test

Josh Soref (1):
      merge: fix swapped "up to date" message components

Julien Richard (1):
      doc: .gitignore documentation typofix

Junio C Hamano (32):
      builtin/repack.c: reword comment around pack-objects flags
      xcalloc: use CALLOC_ARRAY() when applicable
      cocci: allow xcalloc(1, size)
      The first batch in 2.32 cycle
      The second batch
      format-patch: give an overview of what a "patch" message is
      The third patch
      Git 2.31.1
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      The ninth batch
      doc: clarify "do not capitalize the first word" rule
      The tenth batch
      The eleventh (aka "ort") batch
      The twelfth batch
      The thirteenth batch
      CodingGuidelines: explicitly allow "local" for test scripts
      The fourteenth batch
      The fifteenth batch
      The sixteenth batch
      The seventeenth batch
      Git 2.32-rc0
      A handful more topics before -rc1
      Git 2.32-rc1
      t1092: revert the "-1" hack for emulating "no progress meter"
      Revert "dir: introduce readdir_skip_dot_and_dotdot() helper"
      Revert "dir: update stale description of treat_directory()"
      Git 2.32-rc2
      Git 2.32-rc3

Kyle Meyer (1):
      config.txt: add missing period

Li Linchao (1):
      builtin/clone.c: add --reject-shallow option

Louis Sautier (1):
      pretty: fix a typo in the documentation for %(trailers)

Luke Shumaker (30):
      .gitignore: ignore 'git-subtree' as a build artifact
      subtree: t7900: update for having the default branch name be 'main'
      subtree: t7900: use test-lib.sh's test_count
      subtree: t7900: use consistent formatting
      subtree: t7900: comment subtree_test_create_repo
      subtree: t7900: use 'test' for string equality
      subtree: t7900: delete some dead code
      subtree: t7900: fix 'verify one file change per commit'
      subtree: t7900: rename last_commit_message to last_commit_subject
      subtree: t7900: add a test for the -h flag
      subtree: t7900: add porcelain tests for 'pull' and 'push'
      subtree: don't have loose code outside of a function
      subtree: more consistent error propagation
      subtree: drop support for git < 1.7
      subtree: use `git merge-base --is-ancestor`
      subtree: use git-sh-setup's `say`
      subtree: use more explicit variable names for cmdline args
      subtree: use "$*" instead of "$@" as appropriate
      subtree: don't fuss with PATH
      subtree: use "^{commit}" instead of "^0"
      subtree: parse revs in individual cmd_ functions
      subtree: remove duplicate check
      subtree: add comments and sanity checks
      subtree: don't let debug and progress output clash
      subtree: have $indent actually affect indentation
      subtree: give the docs a once-over
      subtree: allow --squash to be used with --rejoin
      subtree: allow 'split' flags to be passed to 'push'
      subtree: push: allow specifying a local rev other than HEAD
      subtree: be stricter about validating flags

Lénaïc Huard (1):
      maintenance: fix two memory leaks

Martin Ågren (2):
      git-repack.txt: remove spurious ")"
      pretty-formats.txt: add missing space

Matheus Tavares (32):
      convert: fail gracefully upon missing clean cmd on required filter
      symlinks: update comment on threaded_check_leading_path()
      checkout: don't follow symlinks when removing entries
      entry: extract a header file for entry.c functions
      entry: make fstat_output() and read_blob_entry() public
      entry: extract update_ce_after_write() from write_entry()
      entry: move conv_attrs lookup up to checkout_entry()
      entry: add checkout_entry_ca() taking preloaded conv_attrs
      add: include magic part of pathspec on --refresh error
      t3705: add tests for `git add` in sparse checkouts
      add: make --chmod and --renormalize honor sparse checkouts
      pathspec: allow to ignore SKIP_WORKTREE entries on index matching
      refresh_index(): add flag to ignore SKIP_WORKTREE entries
      add: warn when asked to update SKIP_WORKTREE entries
      rm: honor sparse checkout patterns
      pkt-line: do not report packet write errors twice
      unpack-trees: add basic support for parallel checkout
      parallel-checkout: make it truly parallel
      parallel-checkout: add configuration options
      parallel-checkout: support progress displaying
      parallel-checkout: add design documentation
      make_transient_cache_entry(): optionally alloc from mem_pool
      builtin/checkout.c: complete parallel checkout support
      parallel-checkout: add tests related to path collisions
      t0028: extract encoding helpers to lib-encoding.sh
      checkout-index: add parallel checkout support
      parallel-checkout: add tests related to .gitattributes
      parallel-checkout: add tests for basic operations
      ci: run test round with parallel-checkout enabled
      clean: remove unnecessary variable
      init: fix bug regarding ~/ expansion in init.templateDir
      t2080: fix cp invocation to copy symlinks instead of following them

Nicholas Clark (1):
      submodule update: silence underlying fetch with "--quiet"

Nipunn Koorapati (3):
      fsmonitor: skip lstat deletion check during git diff-index
      fsmonitor: add assertion that fsmonitor is valid to check_removed
      fsmonitor: add perf test for git diff HEAD

Patrick Steinhardt (17):
      githooks.txt: replace mentions of SHA-1 specific properties
      githooks.txt: clarify documentation on reference-transaction hook
      pack-bitmap: avoid traversal of objects referenced by uninteresting tag
      uploadpack.txt: document implication of `uploadpackfilter.allow`
      revision: mark commit parents as NOT_USER_GIVEN
      list-objects: move tag processing into its own function
      list-objects: support filtering by tag and commit
      list-objects: implement object type filter
      pack-bitmap: implement object type filter
      pack-bitmap: implement combined filter
      rev-list: allow filtering of provided items
      config: rename `git_etc_config()`
      config: unify code paths to get global config paths
      config: allow overriding of global and system configuration
      t1300: fix unset of GIT_CONFIG_NOSYSTEM leaking into subsequent tests
      git.txt: fix synopsis of `--config-env` missing the equals sign
      git: support separate arg for `--config-env`'s value

Peter Oliver (1):
      doc: point to diff attribute in patch format docs

Phillip Wood (6):
      rebase -i: only write fixup-message when it's needed
      sequencer: factor out code to append squash message
      rebase -i: comment out squash!/fixup! subjects from squash message
      word diff: handle zero length matches
      patience diff: remove unnecessary string comparisons
      patience diff: remove unused variable

Rafael Silva (1):
      repack: avoid loosening promisor objects in partial clones

Ramkumar Ramachandra (1):
      Add entry for Ramkumar Ramachandra

Ramsay Jones (1):
      bisect--helper: use BISECT_TERMS in 'bisect skip' command

René Scharfe (12):
      pretty: add %(describe)
      pretty: add merge and exclude options to %(describe)
      t4205: assert %(describe) test coverage
      pretty: document multiple %(describe) being inconsistent
      fix xcalloc() argument order
      archive: expand only a single %(describe) per archive
      git-compat-util.h: drop trailing semicolon from macro definition
      use CALLOC_ARRAY
      vcs-svn: remove header files as well
      block-sha1: drop trailing semicolon from macro definition
      mem-pool: drop trailing semicolon from macro definition
      daemon: sanitize all directory separators

Robert Foss (1):
      git-send-email: Respect core.hooksPath setting

SZEDER Gábor (1):
      Makefile: add missing dependencies of 'config-list.h'

Sardorbek Imomaliev (1):
      work around zsh comment in __git_complete_worktree_paths

Sergey Organov (5):
      diff-merges: introduce --diff-merges=on
      diff-merges: refactor set_diff_merges()
      diff-merges: adapt -m to enable default diff format
      diff-merges: introduce log.diffMerges config variable
      doc/diff-options: document new --diff-merges features

Shubham Verma (1):
      t9801: replace test -f with test_path_is_file

Taylor Blau (28):
      packfile: introduce 'find_kept_pack_entry()'
      revision: learn '--no-kept-objects'
      builtin/pack-objects.c: add '--stdin-packs' option
      builtin/repack.c: add '--geometric' option
      builtin/repack.c: do not repack single packs with --geometric
      t7703: test --geometric repack with loose objects
      builtin/repack.c: assign pack split later
      builtin/repack.c: be more conservative with unsigned overflows
      Documentation/git-push.txt: correct configuration typo
      builtin/pack-objects.c: ignore missing links with --stdin-packs
      builtin/multi-pack-index.c: inline 'flags' with options
      builtin/multi-pack-index.c: don't handle 'progress' separately
      builtin/multi-pack-index.c: define common usage with a macro
      builtin/multi-pack-index.c: split sub-commands
      builtin/multi-pack-index.c: don't enter bogus cmd_mode
      builtin/multi-pack-index.c: display usage on unrecognized command
      t/helper/test-read-midx.c: add '--show-objects'
      pack-bitmap: add 'test_bitmap_commits()' helper
      t/helper/test-bitmap.c: initial commit
      builtin/pack-objects.c: respect 'pack.preferBitmapTips'
      midx: allow marking a pack as preferred
      midx: don't free midx_name early
      midx: keep track of the checksum
      midx: make some functions non-static
      Documentation/technical: describe multi-pack reverse indexes
      pack-revindex: read multi-pack reverse indexes
      pack-write.c: extract 'write_rev_file_order'
      pack-revindex: write multi-pack reverse indexes

Todd Zullinger (1):
      t7500: remove non-existant C_LOCALE_OUTPUT prereq

Torsten Bögershausen (3):
      git mv foo FOO ; git mv foo bar gave an assert
      precompose_utf8: make precompose_string_if_needed() public
      macOS: precompose startup_info->prefix

Ville Skyttä (2):
      completion: audit and guard $GIT_* against unset use
      completion: avoid aliased command lookup error in nounset mode

Will Chandler (1):
      refs: cleanup directories when deleting packed ref

Wolfgang Müller (1):
      rev-parse: fix segfault with missing --path-format argument

ZheNing Hu (8):
      commit: add --trailer option
      format-patch: allow a non-integral version numbers
      ref-filter: get rid of show_ref_array_item
      ref-filter: reuse output buffer
      pretty: provide human date format
      docs: correct descript of trailer.<token>.command
      trailer: add new .cmd config option
      ref-filter: fix read invalid union member bug

brian m. carlson (14):
      builtin/init-db: handle bare clones when core.bare set to false
      hash: add an algo member to struct object_id
      Always use oidread to read into struct object_id
      http-push: set algorithm when reading object ID
      hash: add a function to finalize object IDs
      Use the final_oid_fn to finalize hashing of object IDs
      builtin/pack-redundant: avoid casting buffers to struct object_id
      hash: set, copy, and use algo field in struct object_id
      hash: provide per-algorithm null OIDs
      builtin/show-index: set the algorithm for object IDs
      commit-graph: don't store file hashes as struct object_id
      builtin/pack-objects: avoid using struct object_id for pack hash
      hex: default to the_hash_algo on zero algorithm value
      hex: print objects using the hash algorithm member

Ævar Arnfjörð Bjarmason (97):
      grep/pcre2: drop needless assignment + assert() on opt->pcre2
      grep/pcre2: drop needless assignment to NULL
      grep/pcre2: correct reference to grep_init() in comment
      grep/pcre2: prepare to add debugging to pcre2_malloc()
      grep/pcre2: add GREP_PCRE2_DEBUG_MALLOC debug mode
      grep/pcre2: use compile-time PCREv2 version test
      grep/pcre2: use pcre2_maketables_free() function
      grep/pcre2: actually make pcre2 use custom allocator
      grep/pcre2: move back to thread-only PCREv2 structures
      grep/pcre2: move definitions of pcre2_{malloc,free}
      Makefile: guard against TEST_OBJS in the environment
      Makefile: split up long OBJECTS line
      Makefile: sort OBJECTS assignment for subsequent change
      Makefile: split OBJECTS into OBJECTS and GIT_OBJS
      Makefile: add {program,xdiff,test,git,fuzz}-objs & objects targets
      remote: add camel-cased *.tagOpt key, like clone
      remote: write camel-cased *.pushRemote on rename
      fsck.c: refactor and rename common config callback
      show tests: add test for "git show <tree>"
      ls-files tests: add meaningful --with-tree tests
      tree.c API: move read_tree() into builtin/ls-files.c
      ls-files: don't needlessly pass around stage variable
      ls-files: refactor away read_tree()
      archive: stop passing "stage" through read_tree_recursive()
      tree.h API: expose read_tree_1() as read_tree_at()
      tree.h API: simplify read_tree_recursive() signature
      diff --no-index tests: add test for --exit-code
      diff --no-index tests: test mode normalization
      rebase: remove transitory rebase.useBuiltin setting & env
      mktag tests: fix broken "&&" chain
      fsck.h: use designed initializers for FSCK_OPTIONS_{DEFAULT,STRICT}
      fsck.h: use "enum object_type" instead of "int"
      fsck.c: rename variables in fsck_set_msg_type() for less confusion
      fsck.c: remove (mostly) redundant append_msg_id() function
      fsck.c: rename remaining fsck_msg_id "id" to "msg_id"
      fsck.c: refactor fsck_msg_type() to limit scope of "int msg_type"
      fsck.h: move FSCK_{FATAL,INFO,ERROR,WARN,IGNORE} into an enum
      fsck.h: re-order and re-assign "enum fsck_msg_type"
      fsck.c: call parse_msg_type() early in fsck_set_msg_type()
      fsck.c: undefine temporary STR macro after use
      fsck.c: give "FOREACH_MSG_ID" a more specific name
      fsck.[ch]: move FOREACH_FSCK_MSG_ID & fsck_msg_id from *.c to *.h
      fsck.c: pass along the fsck_msg_id in the fsck_error callback
      fsck.c: add an fsck_set_msg_type() API that takes enums
      fsck.c: move gitmodules_{found,done} into fsck_options
      fetch-pack: don't needlessly copy fsck_options
      fetch-pack: use file-scope static struct for fsck_options
      fetch-pack: use new fsck API to printing dangling submodules
      Makefile: add QUIET_GEN to "tags" and "TAGS" targets
      git-send-email: replace "map" in void context with "for"
      git-send-email: test full --validate output
      git-send-email: refactor duplicate $? checks into a function
      git-send-email: improve --validate error output
      bash completion: complete CHERRY_PICK_HEAD
      config.c: remove last remnant of GIT_TEST_GETTEXT_POISON
      userdiff style: re-order drivers in alphabetical order
      userdiff style: declare patterns with consistent style
      userdiff style: normalize pascal regex declaration
      userdiff: add and use for_each_userdiff_driver()
      userdiff tests: explicitly test "default" pattern
      userdiff tests: list builtin drivers via test-tool
      userdiff: remove support for "broken" tests
      blame tests: don't rely on t/t4018/ directory
      blame tests: simplify userdiff driver test
      rebase tests: camel-case rebase.rescheduleFailedExec consistently
      rebase: don't override --no-reschedule-failed-exec with config
      Documentation/Makefile: make $(wildcard howto/*.txt) a var
      Documentation/Makefile: make doc.dep dependencies a variable again
      doc lint: Perl "strict" and "warnings" in lint-gitlink.perl
      doc lint: fix bugs in, simplify and improve lint script
      doc lint: lint and fix missing "GIT" end sections
      doc lint: lint relative section order
      docs: fix linting issues due to incorrect relative section order
      svn tests: remove legacy re-setup from init-clone test
      svn tests: refactor away a "set -e" in test body
      tests: remove all uses of test_i18cmp
      usage.c: don't copy/paste the same comment three times
      api docs: document BUG() in api-error-handling.txt
      api docs: document that BUG() emits a trace2 error event
      pretty tests: simplify %aI/%cI date format test
      pretty tests: give --date/format tests a better description
      sparse-index.c: remove set_index_sparse_config()
      streaming.c: avoid forward declarations
      streaming.c: remove enum/function/vtbl indirection
      streaming.c: remove {open,close,read}_method_decl() macros
      streaming.c: stop passing around "object_info *" to open()
      streaming.c: move {open,close,read} from vtable to "struct git_istream"
      Makefile: don't re-define PERL_DEFINES
      Makefile: regenerate perl/build/* if GIT-PERL-DEFINES changes
      Makefile: regenerate *.pm on NO_PERL_CPAN_FALLBACKS change
      perl: use mock i18n functions under NO_GETTEXT=Y
      Makefile: make PERL_DEFINES recursively expanded
      send-email: fix missing error message regression
      send-email: don't needlessly abs_path() the core.hooksPath
      send-email: move "hooks_path" invocation to git-send-email.perl
      pack-objects: move static inline from a header to the sole consumer
      builtin/fsck.c: don't conflate "int" and "enum" in callback

Øystein Walle (2):
      transport: respect verbosity when setting upstream
      add: die if both --dry-run and --interactive are given

Đoàn Trần Công Danh (6):
      mailinfo: load default metainfo_charset lazily
      mailinfo: stop parsing options manually
      mailinfo: warn if CRLF found in decoded base64/QP email
      mailinfo: allow squelching quoted CRLF warning
      mailinfo: allow stripping quoted CR without warning
      am: learn to process quoted lines that ends with CRLF


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.32.0-rc2
@ 2021-05-28  6:13  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2021-05-28  6:13 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers, lwn

A release candidate Git v2.32.0-rc2 is now available for testing at
the usual places.  It is comprised of 586 non-merge commits since
v2.31.0, contributed by 83 people, 31 of which are new faces [*].

There have been a handful of regression found since v2.32.0-rc0 was
tagged, and this has fixes to them.  https://tinyurl.com/gitCal says
that we plan to have another release candidate mid next week, but we
may go straight to the final 2.32 instead.  Let's see how this one
fares before deciding.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.32.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.31.0 are as follows.
Welcome to the Git development community!

  Adam Sharafeddine, Andrey Bienkowski, Atharva Raykar, Bruno
  Albuquerque, Chinmoy Chakraborty, Christopher Schenk, Dan
  Moseley, David Emett, Dmitry Torilov, Fabien Terrani, Firmin
  Martin, Georgios Kontaxis, Jason Gore, Jerry Zhang, Joachim
  Kuebart, Joseph Vusich, Josh Soref, Julien Richard, Li Linchao,
  Louis Sautier, Luke Shumaker, Nicholas Clark, Peter Oliver,
  Renato Botelho, Robert Foss, RyotaK, Sardorbek Imomaliev,
  Tom Saeger, Will Chandler, Wolfgang Müller, and Yiyuan guo.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alex Henrie,
  Andrzej Hunt, Bagas Sanjaya, Ben Humphreys, brian m. carlson,
  Charvi Mendiratta, Christian Couder, Dennis Ameling, Denton Liu,
  Derrick Stolee, Đoàn Trần Công Danh, Elijah Newren, Eric
  Sunshine, Eric Wong, Han-Wen Nienhuys, Han Xin, Jeff Hostetler,
  Jeff King, Johannes Schindelin, Johannes Sixt, John Szakmeister,
  Jonathan Nieder, Jonathan Tan, Junio C Hamano, Kyle Meyer,
  Lénaïc Huard, Luke Diamand, Marc Branchaud, Martin Ågren,
  Matheus Tavares, Nguyễn Thái Ngọc Duy, Nipunn Koorapati,
  Øystein Walle, Patrick Steinhardt, Phillip Wood, Rafael Silva,
  Ramkumar Ramachandra, Ramsay Jones, Randall S. Becker, René
  Scharfe, Sergey Organov, Shubham Verma, Son Luong Ngoc, SZEDER
  Gábor, Taylor Blau, Todd Zullinger, Torsten Bögershausen,
  Trygve Aaberge, Ville Skyttä, and ZheNing Hu.

[*] We are counting not just the authorship contribution but
    issue reporting, testing and reviewing that are recorded
    in the commit trailers.

----------------------------------------------------------------

Git 2.32 Release Notes (draft)
==============================

Backward compatibility notes
----------------------------

 * ".gitattributes", ".gitignore", and ".mailmap" files that are
   symbolic links are ignored.

 * "git apply --3way" used to first attempt a straight application,
   and only fell back to the 3-way merge algorithm when the stright
   application failed.  Starting with this version, the command will
   first try the 3-way merge algorithm and only when it fails (either
   resulting with conflict or the base versions of blobs are missing),
   falls back to the usual patch application.


Updates since v2.31
-------------------

UI, Workflows & Features

 * It does not make sense to make ".gitattributes", ".gitignore" and
   ".mailmap" symlinks, as they are supposed to be usable from the
   object store (think: bare repositories where HEAD:.mailmap etc. are
   used).  When these files are symbolic links, we used to read the
   contents of the files pointed by them by mistake, which has been
   corrected.

 * "git stash show" learned to optionally show untracked part of the
   stash.

 * "git log --format='...'" learned "%(describe)" placeholder.

 * "git repack" so far has been only capable of repacking everything
   under the sun into a single pack (or split by size).  A cleverer
   strategy to reduce the cost of repacking a repository has been
   introduced.

 * The http codepath learned to let the credential layer to cache the
   password used to unlock a certificate that has successfully been
   used.

 * "git commit --fixup=<commit>", which was to tweak the changes made
   to the contents while keeping the original log message intact,
   learned "--fixup=(amend|reword):<commit>", that can be used to
   tweak both the message and the contents, and only the message,
   respectively.

 * "git send-email" learned to honor the core.hooksPath configuration.

 * "git format-patch -v<n>" learned to allow a reroll count that is
   not an integer.

 * "git commit" learned "--trailer <key>[=<value>]" option; together
   with the interpret-trailers command, this will make it easier to
   support custom trailers.

 * "git clone --reject-shallow" option fails the clone as soon as we
   notice that we are cloning from a shallow repository.

 * A configuration variable has been added to force tips of certain
   refs to be given a reachability bitmap.

 * "gitweb" learned "e-mail privacy" feature to redact strings that
   look like e-mail addresses on various pages.

 * "git apply --3way" has always been "to fall back to 3-way merge
   only when straight application fails". Swap the order of falling
   back so that 3-way is always attempted first (only when the option
   is given, of course) and then straight patch application is used as
   a fallback when it fails.

 * "git apply" now takes "--3way" and "--cached" at the same time, and
   work and record results only in the index.

 * The command line completion (in contrib/) has learned that
   CHERRY_PICK_HEAD is a possible pseudo-ref.

 * Userdiff patterns for "Scheme" has been added.

 * "git log" learned "--diff-merges=<style>" option, with an
   associated configuration variable log.diffMerges.

 * "git log --format=..." placeholders learned %ah/%ch placeholders to
   request the --date=human output.

 * Replace GIT_CONFIG_NOSYSTEM mechanism to decline from reading the
   system-wide configuration file with GIT_CONFIG_SYSTEM that lets
   users specify from which file to read the system-wide configuration
   (setting it to an empty file would essentially be the same as
   setting NOSYSTEM), and introduce GIT_CONFIG_GLOBAL to override the
   per-user configuration in $HOME/.gitconfig.

 * "git add" and "git rm" learned not to touch those paths that are
   outside of sparse checkout.

 * "git rev-list" learns the "--filter=object:type=<type>" option,
   which can be used to exclude objects of the given kind from the
   packfile generated by pack-objects.

 * The command line completion (in contrib/) for "git stash" has been
   updated.

 * "git subtree" updates.

 * It is now documented that "format-patch" skips merges.

 * Options to "git pack-objects" that take numeric values like
   --window and --depth should not accept negative values; the input
   validation has been tightened.

 * The way the command line specified by the trailer.<token>.command
   configuration variable receives the end-user supplied value was
   both error prone and misleading.  An alternative to achieve the
   same goal in a safer and more intuitive way has been added, as
   the trailer.<token>.cmd configuration variable, to replace it.

 * "git add -i --dry-run" does not dry-run, which was surprising.  The
   combination of options has taught to error out.

 * "git push" learns to discover common ancestor with the receiving
   end over protocol v2.  This will hopefully make "git push" as
   efficient as "git fetch" in avoiding objects from getting
   transferred unnecessarily.

 * "git mailinfo" (hence "git am") learned the "--quoted-cr" option to
   control how lines ending with CRLF wrapped in base64 or qp are
   handled.


Performance, Internal Implementation, Development Support etc.

 * Rename detection rework continues.

 * GIT_TEST_FAIL_PREREQS is a mechanism to skip test pieces with
   prerequisites to catch broken tests that depend on the side effects
   of optional pieces, but did not work at all when negative
   prerequisites were involved.
   (merge 27d578d904 jk/fail-prereq-testfix later to maint).

 * "git diff-index" codepath has been taught to trust fsmonitor status
   to reduce number of lstat() calls.
   (merge 7e5aa13d2c nk/diff-index-fsmonitor later to maint).

 * Reorganize Makefile to allow building git.o and other essential
   objects without extra stuff needed only for testing.

 * Preparatory API changes for parallel checkout.

 * A simple IPC interface gets introduced to build services like
   fsmonitor on top.

 * Fsck API clean-up.

 * SECURITY.md that is facing individual contributors and end users
   has been introduced.  Also a procedure to follow when preparing
   embargoed releases has been spelled out.
   (merge 09420b7648 js/security-md later to maint).

 * Optimize "rev-list --use-bitmap-index --objects" corner case that
   uses negative tags as the stopping points.

 * CMake update for vsbuild.

 * An on-disk reverse-index to map the in-pack location of an object
   back to its object name across multiple packfiles is introduced.

 * Generate [ec]tags under $(QUIET_GEN).

 * Clean-up codepaths that implements "git send-email --validate"
   option and improves the message from it.

 * The last remnant of gettext-poison has been removed.

 * The test framework has been taught to optionally turn the default
   merge strategy to "ort" throughout the system where we use
   three-way merges internally, like cherry-pick, rebase etc.,
   primarily to enhance its test coverage (the strategy has been
   available as an explicit "-s ort" choice).

 * A bit of code clean-up and a lot of test clean-up around userdiff
   area.

 * Handling of "promisor packs" that allows certain objects to be
   missing and lazily retrievable has been optimized (a bit).

 * When packet_write() fails, we gave an extra error message
   unnecessarily, which has been corrected.

 * The checkout machinery has been taught to perform the actual
   write-out of the files in parallel when able.

 * Show errno in the trace output in the error codepath that calls
   read_raw_ref method.

 * Effort to make the command line completion (in contrib/) safe with
   "set -u" continues.

 * Tweak a few tests for "log --format=..." that show timestamps in
   various formats.

 * The reflog expiry machinery has been taught to emit trace events.

 * Over-the-wire protocol learns a new request type to ask for object
   sizes given a list of object names.


Fixes since v2.31
-----------------

 * The fsmonitor interface read from its input without making sure
   there is something to read from.  This bug is new in 2.31
   timeframe.

 * The data structure used by fsmonitor interface was not properly
   duplicated during an in-core merge, leading to use-after-free etc.

 * "git bisect" reimplemented more in C during 2.30 timeframe did not
   take an annotated tag as a good/bad endpoint well.  This regression
   has been corrected.

 * Fix macros that can silently inject unintended null-statements.

 * CALLOC_ARRAY() macro replaces many uses of xcalloc().

 * Update insn in Makefile comments to run fuzz-all target.

 * Fix a corner case bug in "git mv" on case insensitive systems,
   which was introduced in 2.29 timeframe.

 * We had a code to diagnose and die cleanly when a required
   clean/smudge filter is missing, but an assert before that
   unnecessarily fired, hiding the end-user facing die() message.
   (merge 6fab35f748 mt/cleanly-die-upon-missing-required-filter later to maint).

 * Update C code that sets a few configuration variables when a remote
   is configured so that it spells configuration variable names in the
   canonical camelCase.
   (merge 0f1da600e6 ab/remote-write-config-in-camel-case later to maint).

 * A new configuration variable has been introduced to allow choosing
   which version of the generation number gets used in the
   commit-graph file.
   (merge 702110aac6 ds/commit-graph-generation-config later to maint).

 * Perf test update to work better in secondary worktrees.
   (merge 36e834abc1 jk/perf-in-worktrees later to maint).

 * Updates to memory allocation code around the use of pcre2 library.
   (merge c1760352e0 ab/grep-pcre2-allocfix later to maint).

 * "git -c core.bare=false clone --bare ..." would have segfaulted,
   which has been corrected.
   (merge 75555676ad bc/clone-bare-with-conflicting-config later to maint).

 * When "git checkout" removes a path that does not exist in the
   commit it is checking out, it wasn't careful enough not to follow
   symbolic links, which has been corrected.
   (merge fab78a0c3d mt/checkout-remove-nofollow later to maint).

 * A few option description strings started with capital letters,
   which were corrected.
   (merge 5ee90326dc cc/downcase-opt-help later to maint).

 * Plug or annotate remaining leaks that trigger while running the
   very basic set of tests.
   (merge 68ffe095a2 ah/plugleaks later to maint).

 * The hashwrite() API uses a buffering mechanism to avoid calling
   write(2) too frequently. This logic has been refactored to be
   easier to understand.
   (merge ddaf1f62e3 ds/clarify-hashwrite later to maint).

 * "git cherry-pick/revert" with or without "--[no-]edit" did not spawn
   the editor as expected (e.g. "revert --no-edit" after a conflict
   still asked to edit the message), which has been corrected.
   (merge 39edfd5cbc en/sequencer-edit-upon-conflict-fix later to maint).

 * "git daemon" has been tightened against systems that take backslash
   as directory separator.
   (merge 9a7f1ce8b7 rs/daemon-sanitize-dir-sep later to maint).

 * A NULL-dereference bug has been corrected in an error codepath in
   "git for-each-ref", "git branch --list" etc.
   (merge c685450880 jk/ref-filter-segfault-fix later to maint).

 * Streamline the codepath to fix the UTF-8 encoding issues in the
   argv[] and the prefix on macOS.
   (merge c7d0e61016 tb/precompose-prefix-simplify later to maint).

 * The command-line completion script (in contrib/) had a couple of
   references that would have given a warning under the "-u" (nounset)
   option.
   (merge c5c0548d79 vs/completion-with-set-u later to maint).

 * When "git pack-objects" makes a literal copy of a part of existing
   packfile using the reachability bitmaps, its update to the progress
   meter was broken.
   (merge 8e118e8490 jk/pack-objects-bitmap-progress-fix later to maint).

 * The dependencies for config-list.h and command-list.h were broken
   when the former was split out of the latter, which has been
   corrected.
   (merge 56550ea718 sg/bugreport-fixes later to maint).

 * "git push --quiet --set-upstream" was not quiet when setting the
   upstream branch configuration, which has been corrected.
   (merge f3cce896a8 ow/push-quiet-set-upstream later to maint).

 * The prefetch task in "git maintenance" assumed that "git fetch"
   from any remote would fetch all its local branches, which would
   fetch too much if the user is interested in only a subset of
   branches there.
   (merge 32f67888d8 ds/maintenance-prefetch-fix later to maint).

 * Clarify that pathnames recorded in Git trees are most often (but
   not necessarily) encoded in UTF-8.
   (merge 9364bf465d ab/pathname-encoding-doc later to maint).

 * "git --config-env var=val cmd" weren't accepted (only
   --config-env=var=val was).
   (merge c331551ccf ps/config-env-option-with-separate-value later to maint).

 * When the reachability bitmap is in effect, the "do not lose
   recently created objects and those that are reachable from them"
   safety to protect us from races were disabled by mistake, which has
   been corrected.
   (merge 2ba582ba4c jk/prune-with-bitmap-fix later to maint).

 * Cygwin pathname handling fix.
   (merge bccc37fdc7 ad/cygwin-no-backslashes-in-paths later to maint).

 * "git rebase --[no-]reschedule-failed-exec" did not work well with
   its configuration variable, which has been corrected.
   (merge e5b32bffd1 ab/rebase-no-reschedule-failed-exec later to maint).

 * Portability fix for command line completion script (in contrib/).
   (merge f2acf763e2 si/zsh-complete-comment-fix later to maint).

 * "git repack -A -d" in a partial clone unnecessarily loosened
   objects in promisor pack.

 * "git bisect skip" when custom words are used for new/old did not
   work, which has been corrected.

 * A few variants of informational message "Already up-to-date" has
   been rephrased.
   (merge ad9322da03 js/merge-already-up-to-date-message-reword later to maint).

 * "git submodule update --quiet" did not propagate the quiet option
   down to underlying "git fetch", which has been corrected.
   (merge 62af4bdd42 nc/submodule-update-quiet later to maint).

 * Document that our test can use "local" keyword.
   (merge a84fd3bcc6 jc/test-allows-local later to maint).

 * The word-diff mode has been taught to work better with a word
   regexp that can match an empty string.
   (merge 0324e8fc6b pw/word-diff-zero-width-matches later to maint).

 * "git p4" learned to find branch points more efficiently.
   (merge 6b79818bfb jk/p4-locate-branch-point-optim later to maint).

 * When "git update-ref -d" removes a ref that is packed, it left
   empty directories under $GIT_DIR/refs/ for
   (merge 5f03e5126d wc/packed-ref-removal-cleanup later to maint).

 * "git clean" and "git ls-files -i" had confusion around working on
   or showing ignored paths inside an ignored directory, which has
   been corrected.
   (merge b548f0f156 en/dir-traversal later to maint).

 * The handling of "%(push)" formatting element of "for-each-ref" and
   friends was broken when the same codepath started handling
   "%(push:<what>)", which has been corrected.
   (merge 1e1c4c5eac zh/ref-filter-push-remote-fix later to maint).

 * The bash prompt script (in contrib/) did not work under "set -u".
   (merge 5c0cbdb107 en/prompt-under-set-u later to maint).

 * The "chainlint" feature in the test framework is a handy way to
   catch common mistakes in writing new tests, but tends to get
   expensive.  An knob to selectively disable it has been introduced
   to help running tests that the developer has not modified.
   (merge 2d86a96220 jk/test-chainlint-softer later to maint).

 * The "rev-parse" command did not diagnose the lack of argument to
   "--path-format" option, which was introduced in v2.31 era, which
   has been corrected.
   (merge 99fc555188 wm/rev-parse-path-format-wo-arg later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge f451960708 dl/cat-file-doc-cleanup later to maint).
   (merge 12604a8d0c sv/t9801-test-path-is-file-cleanup later to maint).
   (merge ea7e63921c jr/doc-ignore-typofix later to maint).
   (merge 23c781f173 ps/update-ref-trans-hook-doc later to maint).
   (merge 42efa1231a jk/filter-branch-sha256 later to maint).
   (merge 4c8e3dca6e tb/push-simple-uses-branch-merge-config later to maint).
   (merge 6534d436a2 bs/asciidoctor-installation-hints later to maint).
   (merge 47957485b3 ab/read-tree later to maint).
   (merge 2be927f3d1 ab/diff-no-index-tests later to maint).
   (merge 76593c09bb ab/detox-gettext-tests later to maint).
   (merge 28e29ee38b jc/doc-format-patch-clarify later to maint).
   (merge fc12b6fdde fm/user-manual-use-preface later to maint).
   (merge dba94e3a85 cc/test-helper-bloom-usage-fix later to maint).
   (merge 61a7660516 hn/reftable-tables-doc-update later to maint).
   (merge 81ed96a9b2 jt/fetch-pack-request-fix later to maint).
   (merge 151b6c2dd7 jc/doc-do-not-capitalize-clarification later to maint).
   (merge 9160068ac6 js/access-nul-emulation-on-windows later to maint).
   (merge 7a14acdbe6 po/diff-patch-doc later to maint).
   (merge f91371b948 pw/patience-diff-clean-up later to maint).
   (merge 3a7f0908b6 mt/clean-clean later to maint).
   (merge d4e2d15a8b ab/streaming-simplify later to maint).
   (merge 0e59f7ad67 ah/merge-ort-i18n later to maint).
   (merge e6f68f62e0 ls/typofix later to maint).

----------------------------------------------------------------

Changes since v2.31.0 are as follows:

Adam Dinwoodie (1):
      cygwin: disallow backslashes in file names

Alex Henrie (1):
      merge-ort: split "distinct types" message into two translatable messages

Andrey Bienkowski (1):
      doc: clarify the filename encoding in git diff

Andrzej Hunt (24):
      Makefile: update 'make fuzz-all' docs to reflect modern clang
      symbolic-ref: don't leak shortened refname in check_symref()
      reset: free instead of leaking unneeded ref
      clone: free or UNLEAK further pointers when finished
      worktree: fix leak in dwim_branch()
      init: remove git_init_db_config() while fixing leaks
      init-db: silence template_dir leak when converting to absolute path
      fsmonitor: avoid global-buffer-overflow READ when checking trivial response
      parse-options: convert bitfield values to use binary shift
      parse-options: don't leak alias help messages
      transport: also free remote_refs in transport_disconnect()
      merge-ort: only do pointer arithmetic for non-empty lists
      revision: free remainder of old commit list in limit_list
      wt-status: fix multiple small leaks
      ls-files: free max_prefix when done
      bloom: clear each bloom_key after use
      branch: FREE_AND_NULL instead of NULL'ing real_ref
      builtin/bugreport: don't leak prefixed filename
      builtin/check-ignore: clear_pathspec before returning
      builtin/checkout: clear pending objects after diffing
      mailinfo: also free strbuf lists when clearing mailinfo
      builtin/for-each-ref: free filter and UNLEAK sorting.
      builtin/rebase: release git_format_patch_opt too
      builtin/rm: avoid leaking pathspec and seen

Atharva Raykar (1):
      userdiff: add support for Scheme

Bagas Sanjaya (1):
      INSTALL: note on using Asciidoctor to build doc

Bruno Albuquerque (1):
      object-info: support for retrieving object info

Charvi Mendiratta (23):
      sequencer: pass todo_item to do_pick_commit()
      sequencer: use const variable for commit message comments
      rebase -i: add fixup [-C | -c] command
      t3437: test script for fixup [-C|-c] options in interactive rebase
      rebase -i: teach --autosquash to work with amend!
      doc/git-rebase: add documentation for fixup [-C|-c] options
      sequencer: fixup the datatype of the 'flag' argument
      sequencer: rename a few functions
      rebase -i: clarify and fix 'fixup -c' rebase-todo help
      t/lib-rebase: update the documentation of FAKE_LINES
      t/t3437: fixup here-docs in the 'setup' test
      t/t3437: remove the dependency of 'expected-message' file from tests
      t/t3437: check the author date of fixed up commit
      t/t3437: simplify and document the test helpers
      t/t3437: use named commits in the tests
      t/t3437: fixup the test 'multiple fixup -c opens editor once'
      doc/rebase -i: fix typo in the documentation of 'fixup' command
      sequencer: export and rename subject_length()
      commit: add amend suboption to --fixup to create amend! commit
      commit: add a reword suboption to --fixup
      t7500: add tests for --fixup=[amend|reword] options
      t3437: use --fixup with options to create amend! commit
      doc/git-commit: add documentation for fixup=[amend|reword] options

Chinmoy Chakraborty (1):
      column, range-diff: downcase option description

Christian Couder (1):
      test-bloom: fix missing 'bloom' from usage string

Christopher Schenk (1):
      remote-curl: fall back to basic auth if Negotiate fails

Dennis Ameling (2):
      cmake(install): fix double .exe suffixes
      cmake(install): include vcpkg dlls

Denton Liu (14):
      git-cat-file.txt: monospace args, placeholders and filenames
      git-cat-file.txt: remove references to "sha1"
      stash show: teach --include-untracked and --only-untracked
      stash show: learn stash.showIncludeUntracked
      git-completion.bash: pass $__git_subcommand_idx from __git_main()
      git-completion.bash: extract from else in _git_stash()
      git-completion.bash: use __gitcomp_builtin() in _git_stash()
      git-completion.bash: separate some commands onto their own line
      git-completion.bash: rename to $__git_cmd_idx
      git-completion.bash: use $__git_cmd_idx in more places
      git-completion.bash: consolidate cases in _git_stash()
      t3905: correct test title
      stash show: fix segfault with --{include,only}-untracked
      stash show: use stash.showIncludeUntracked even when diff options given

Derrick Stolee (58):
      commit-graph: create local repository pointer
      commit-graph: use config to specify generation type
      csum-file: make hashwrite() more readable
      sparse-index: design doc and format update
      t/perf: add performance test for sparse operations
      t1092: clean up script quoting
      sparse-index: add guard to ensure full index
      sparse-index: implement ensure_full_index()
      t1092: compare sparse-checkout to sparse-index
      test-read-cache: print cache entries with --table
      test-tool: don't force full index
      unpack-trees: ensure full index
      sparse-checkout: hold pattern list in index
      sparse-index: add 'sdir' index extension
      sparse-index: convert from full to sparse
      submodule: sparse-index should not collapse links
      unpack-trees: allow sparse directories
      sparse-index: check index conversion happens
      sparse-index: add index.sparse config option
      sparse-checkout: toggle sparse index from builtin
      sparse-checkout: disable sparse-index
      cache-tree: integrate with sparse directory entries
      sparse-index: loose integration with cache_tree_verify()
      p2000: add sparse-index repos
      maintenance: simplify prefetch logic
      sparse-index: API protection strategy
      *: remove 'const' qualifier for struct index_state
      read-cache: expand on query into sparse-directory entry
      cache: move ensure_full_index() to cache.h
      add: ensure full index
      checkout-index: ensure full index
      checkout: ensure full index
      commit: ensure full index
      difftool: ensure full index
      fsck: ensure full index
      grep: ensure full index
      ls-files: ensure full index
      merge-index: ensure full index
      rm: ensure full index
      stash: ensure full index
      update-index: ensure full index
      dir: ensure full index
      entry: ensure full index
      merge-recursive: ensure full index
      pathspec: ensure full index
      read-cache: ensure full index
      resolve-undo: ensure full index
      revision: ensure full index
      name-hash: don't add directories to name_hash
      sparse-index: expand_to_path()
      name-hash: use expand_to_path()
      fetch: add --prefetch option
      maintenance: use 'git fetch --prefetch'
      maintenance: respect remote.*.skipFetchAll
      dir: update stale description of treat_directory()
      sparse-index: fix uninitialized jump
      t1092: use GIT_PROGRESS_DELAY for consistent results
      dir: update stale description of treat_directory()

Elijah Newren (50):
      diffcore-rename: use directory rename guided basename comparisons
      diffcore-rename: provide basic implementation of idx_possible_rename()
      diffcore-rename: add a mapping of destination names to their indices
      Move computation of dir_rename_count from merge-ort to diffcore-rename
      diffcore-rename: add function for clearing dir_rename_count
      diffcore-rename: move dir_rename_counts into dir_rename_info struct
      diffcore-rename: extend cleanup_dir_rename_info()
      diffcore-rename: compute dir_rename_counts in stages
      diffcore-rename: limit dir_rename_counts computation to relevant dirs
      diffcore-rename: compute dir_rename_guess from dir_rename_counts
      diffcore-rename: enable filtering possible rename sources
      merge-ort: precompute subset of sources for which we need rename detection
      merge-ort: add data structures for an alternate tree traversal
      merge-ort: introduce wrappers for alternate tree traversal
      merge-ort: precompute whether directory rename detection is needed
      merge-ort: use relevant_sources to filter possible rename sources
      merge-ort: skip rename detection entirely if possible
      diffcore-rename: avoid doing basename comparisons for irrelevant sources
      diffcore-rename: take advantage of "majority rules" to skip more renames
      merge-ort, diffcore-rename: tweak dirs_removed and relevant_source type
      merge-ort: record the reason that we want a rename for a directory
      diffcore-rename: only compute dir_rename_count for relevant directories
      diffcore-rename: check if we have enough renames for directories early on
      diffcore-rename: add computation of number of unknown renames
      merge-ort: record the reason that we want a rename for a file
      diffcore-rename: determine which relevant_sources are no longer relevant
      merge-ort: use STABLE_QSORT instead of QSORT where required
      merge-ort: add a special minimal index just for renormalization
      merge-ort: have ll_merge() use a special attr_index for renormalization
      merge-ort: let renormalization change modify/delete into clean delete
      merge-ort: support subtree shifting
      t6428: new test for SKIP_WORKTREE handling and conflicts
      merge-ort: implement CE_SKIP_WORKTREE handling with conflicted entries
      t: mark several submodule merging tests as fixed under merge-ort
      merge-ort: write $GIT_DIR/AUTO_MERGE whenever we hit a conflict
      merge-recursive: add a bunch of FIXME comments documenting known bugs
      Revert "merge-ort: ignore the directory rename split conflict for now"
      t6423: mark remaining expected failure under merge-ort as such
      Add testing with merge-ort merge strategy
      sequencer: fix edit handling for cherry-pick and revert messages
      dir: convert trace calls to trace2 equivalents
      dir: report number of visited directories and paths with trace2
      ls-files: error out on -i unless -o or -c are specified
      t7300: add testcase showing unnecessary traversal into ignored directory
      t3001, t7300: add testcase showcasing missed directory traversal
      dir: avoid unnecessary traversal into ignored directory
      dir: traverse into untracked directories if they may have ignored subfiles
      dir: introduce readdir_skip_dot_and_dotdot() helper
      git-prompt: work under set -u
      dir: introduce readdir_skip_dot_and_dotdot() helper

Eric Sunshine (1):
      merge(s): apply consistent punctuation to "up to date" messages

Eric Wong (1):
      remote-curl: fix clone on sha256 repos

Firmin Martin (1):
      user-manual.txt: assign preface an id and a title

Georgios Kontaxis (1):
      gitweb: add "e-mail privacy" feature to redact e-mail addresses

Han Xin (1):
      pack-objects: fix comment of reused_chunk.difference

Han-Wen Nienhuys (3):
      reftable: document an alternate cleanup method on Windows
      refs: print errno for read_raw_ref if GIT_TRACE_REFS is set
      refs/debug: trace into reflog expiry too

Jeff Hostetler (14):
      pkt-line: eliminate the need for static buffer in packet_write_gently()
      simple-ipc: design documentation for new IPC mechanism
      simple-ipc: add win32 implementation
      unix-socket: eliminate static unix_stream_socket() helper function
      unix-socket: add backlog size option to unix_stream_listen()
      unix-socket: disallow chdir() when creating unix domain sockets
      unix-stream-server: create unix domain socket under lock
      convert: make convert_attrs() and convert structs public
      convert: add [async_]convert_to_working_tree_ca() variants
      convert: add get_stream_filter_ca() variant
      convert: add classification for conv_attrs struct
      simple-ipc: add Unix domain socket implementation
      t0052: add simple-ipc tests and t/helper/test-simple-ipc tool
      simple-ipc: correct ifdefs when NO_PTHREADS is defined

Jeff King (43):
      add open_nofollow() helper
      attr: convert "macro_ok" into a flags field
      exclude: add flags parameter to add_patterns()
      attr: do not respect symlinks for in-tree .gitattributes
      exclude: do not respect symlinks for in-tree .gitignore
      mailmap: do not respect symlinks for in-tree .mailmap
      p5303: add missing &&-chains
      p5303: measure time to repack with keep
      builtin/pack-objects.c: rewrite honor-pack-keep logic
      packfile: add kept-pack cache for find_kept_pack_entry()
      t/perf: handle worktrees as test repos
      t/perf: avoid copying worktree files from test repo
      t7003: test ref rewriting explicitly
      filter-branch: drop multiple-ancestor warning
      filter-branch: drop $_x40 glob
      bisect: peel annotated tags to commits
      t: annotate !PTHREADS tests with !FAIL_PREREQS
      ref-filter: fix NULL check for parse object failure
      midx.c: improve cache locality in midx_pack_order_cmp()
      pack-objects: update "nr_seen" progress based on pack-reused count
      is_promisor_object(): free tree buffer after parsing
      lookup_unknown_object(): take a repository argument
      revision: avoid parsing with --exclude-promisor-objects
      pack-bitmap: clean up include_check after use
      prune: save reachable-from-recent objects with bitmaps
      t5300: modernize basic tests
      t5300: check that we produced expected number of deltas
      pack-objects: clamp negative window size to 0
      t5316: check behavior of pack-objects --depth=0
      pack-objects: clamp negative depth to 0
      docs/format-patch: mention handling of merges
      t7415: remove out-dated comment about translation
      fsck_tree(): fix shadowed variable
      fsck_tree(): wrap some long lines
      t7415: rename to expand scope
      t7450: test verify_path() handling of gitmodules
      t7450: test .gitmodules symlink matching against obscured names
      t0060: test ntfs/hfs-obscured dotfiles
      fsck: warn about symlinked dotfiles we'll open with O_NOFOLLOW
      docs: document symlink restrictions for dot-files
      t: avoid sed-based chain-linting in some expensive cases
      t5551: test http interaction with credential helpers
      Revert "remote-curl: fall back to basic auth if Negotiate fails"

Jerry Zhang (3):
      git-apply: try threeway first when "--3way" is used
      git-apply: allow simultaneous --cached and --3way options
      apply: adjust messages to account for --3way changes

Joachim Kuebart (2):
      git-p4: ensure complex branches are cloned correctly
      git-p4: speed up search for branch parent

Johannes Schindelin (10):
      pkt-line: do not issue flush packets in write_packetized_*()
      pkt-line: add PACKET_READ_GENTLE_ON_READ_ERROR option
      pkt-line: add options argument to read_packetized_to_strbuf()
      fsmonitor: fix memory corruption in some corner cases
      fsmonitor: do not forget to release the token in `discard_index()`
      SECURITY: describe how to report vulnerabilities
      Document how we do embargoed releases
      cmake: support SKIP_DASHED_BUILT_INS
      cmake: add a preparatory work-around to accommodate `vcpkg`
      msvc: avoid calling `access("NUL", flags)`

Johannes Sixt (1):
      t9001-send-email.sh: fix expected absolute paths on Windows

John Szakmeister (2):
      http: store credential when PKI auth is used
      http: drop the check for an empty proxy password before approving

Jonathan Tan (8):
      t5606: run clone branch name test with protocol v2
      fetch-pack: buffer object-format with other args
      fetch-pack: refactor process_acks()
      fetch-pack: refactor add_haves()
      fetch-pack: refactor command and capability write
      fetch: teach independent negotiation (no packfile)
      send-pack: support push negotiation
      t5601: mark protocol v2-only test

Josh Soref (1):
      merge: fix swapped "up to date" message components

Julien Richard (1):
      doc: .gitignore documentation typofix

Junio C Hamano (31):
      builtin/repack.c: reword comment around pack-objects flags
      xcalloc: use CALLOC_ARRAY() when applicable
      cocci: allow xcalloc(1, size)
      The first batch in 2.32 cycle
      The second batch
      format-patch: give an overview of what a "patch" message is
      The third patch
      Git 2.31.1
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      The ninth batch
      doc: clarify "do not capitalize the first word" rule
      The tenth batch
      The eleventh (aka "ort") batch
      The twelfth batch
      The thirteenth batch
      CodingGuidelines: explicitly allow "local" for test scripts
      The fourteenth batch
      The fifteenth batch
      The sixteenth batch
      The seventeenth batch
      Git 2.32-rc0
      A handful more topics before -rc1
      Git 2.32-rc1
      t1092: revert the "-1" hack for emulating "no progress meter"
      Revert "dir: introduce readdir_skip_dot_and_dotdot() helper"
      Revert "dir: update stale description of treat_directory()"
      Git 2.32-rc2

Kyle Meyer (1):
      config.txt: add missing period

Li Linchao (1):
      builtin/clone.c: add --reject-shallow option

Louis Sautier (1):
      pretty: fix a typo in the documentation for %(trailers)

Luke Shumaker (30):
      .gitignore: ignore 'git-subtree' as a build artifact
      subtree: t7900: update for having the default branch name be 'main'
      subtree: t7900: use test-lib.sh's test_count
      subtree: t7900: use consistent formatting
      subtree: t7900: comment subtree_test_create_repo
      subtree: t7900: use 'test' for string equality
      subtree: t7900: delete some dead code
      subtree: t7900: fix 'verify one file change per commit'
      subtree: t7900: rename last_commit_message to last_commit_subject
      subtree: t7900: add a test for the -h flag
      subtree: t7900: add porcelain tests for 'pull' and 'push'
      subtree: don't have loose code outside of a function
      subtree: more consistent error propagation
      subtree: drop support for git < 1.7
      subtree: use `git merge-base --is-ancestor`
      subtree: use git-sh-setup's `say`
      subtree: use more explicit variable names for cmdline args
      subtree: use "$*" instead of "$@" as appropriate
      subtree: don't fuss with PATH
      subtree: use "^{commit}" instead of "^0"
      subtree: parse revs in individual cmd_ functions
      subtree: remove duplicate check
      subtree: add comments and sanity checks
      subtree: don't let debug and progress output clash
      subtree: have $indent actually affect indentation
      subtree: give the docs a once-over
      subtree: allow --squash to be used with --rejoin
      subtree: allow 'split' flags to be passed to 'push'
      subtree: push: allow specifying a local rev other than HEAD
      subtree: be stricter about validating flags

Lénaïc Huard (1):
      maintenance: fix two memory leaks

Martin Ågren (2):
      git-repack.txt: remove spurious ")"
      pretty-formats.txt: add missing space

Matheus Tavares (32):
      convert: fail gracefully upon missing clean cmd on required filter
      symlinks: update comment on threaded_check_leading_path()
      checkout: don't follow symlinks when removing entries
      entry: extract a header file for entry.c functions
      entry: make fstat_output() and read_blob_entry() public
      entry: extract update_ce_after_write() from write_entry()
      entry: move conv_attrs lookup up to checkout_entry()
      entry: add checkout_entry_ca() taking preloaded conv_attrs
      add: include magic part of pathspec on --refresh error
      t3705: add tests for `git add` in sparse checkouts
      add: make --chmod and --renormalize honor sparse checkouts
      pathspec: allow to ignore SKIP_WORKTREE entries on index matching
      refresh_index(): add flag to ignore SKIP_WORKTREE entries
      add: warn when asked to update SKIP_WORKTREE entries
      rm: honor sparse checkout patterns
      pkt-line: do not report packet write errors twice
      unpack-trees: add basic support for parallel checkout
      parallel-checkout: make it truly parallel
      parallel-checkout: add configuration options
      parallel-checkout: support progress displaying
      parallel-checkout: add design documentation
      make_transient_cache_entry(): optionally alloc from mem_pool
      builtin/checkout.c: complete parallel checkout support
      parallel-checkout: add tests related to path collisions
      t0028: extract encoding helpers to lib-encoding.sh
      checkout-index: add parallel checkout support
      parallel-checkout: add tests related to .gitattributes
      parallel-checkout: add tests for basic operations
      ci: run test round with parallel-checkout enabled
      clean: remove unnecessary variable
      init: fix bug regarding ~/ expansion in init.templateDir
      t2080: fix cp invocation to copy symlinks instead of following them

Nicholas Clark (1):
      submodule update: silence underlying fetch with "--quiet"

Nipunn Koorapati (3):
      fsmonitor: skip lstat deletion check during git diff-index
      fsmonitor: add assertion that fsmonitor is valid to check_removed
      fsmonitor: add perf test for git diff HEAD

Patrick Steinhardt (17):
      githooks.txt: replace mentions of SHA-1 specific properties
      githooks.txt: clarify documentation on reference-transaction hook
      pack-bitmap: avoid traversal of objects referenced by uninteresting tag
      uploadpack.txt: document implication of `uploadpackfilter.allow`
      revision: mark commit parents as NOT_USER_GIVEN
      list-objects: move tag processing into its own function
      list-objects: support filtering by tag and commit
      list-objects: implement object type filter
      pack-bitmap: implement object type filter
      pack-bitmap: implement combined filter
      rev-list: allow filtering of provided items
      config: rename `git_etc_config()`
      config: unify code paths to get global config paths
      config: allow overriding of global and system configuration
      t1300: fix unset of GIT_CONFIG_NOSYSTEM leaking into subsequent tests
      git.txt: fix synopsis of `--config-env` missing the equals sign
      git: support separate arg for `--config-env`'s value

Peter Oliver (1):
      doc: point to diff attribute in patch format docs

Phillip Wood (6):
      rebase -i: only write fixup-message when it's needed
      sequencer: factor out code to append squash message
      rebase -i: comment out squash!/fixup! subjects from squash message
      word diff: handle zero length matches
      patience diff: remove unnecessary string comparisons
      patience diff: remove unused variable

Rafael Silva (1):
      repack: avoid loosening promisor objects in partial clones

Ramkumar Ramachandra (1):
      Add entry for Ramkumar Ramachandra

Ramsay Jones (1):
      bisect--helper: use BISECT_TERMS in 'bisect skip' command

René Scharfe (12):
      pretty: add %(describe)
      pretty: add merge and exclude options to %(describe)
      t4205: assert %(describe) test coverage
      pretty: document multiple %(describe) being inconsistent
      fix xcalloc() argument order
      archive: expand only a single %(describe) per archive
      git-compat-util.h: drop trailing semicolon from macro definition
      use CALLOC_ARRAY
      vcs-svn: remove header files as well
      block-sha1: drop trailing semicolon from macro definition
      mem-pool: drop trailing semicolon from macro definition
      daemon: sanitize all directory separators

Robert Foss (1):
      git-send-email: Respect core.hooksPath setting

SZEDER Gábor (1):
      Makefile: add missing dependencies of 'config-list.h'

Sardorbek Imomaliev (1):
      work around zsh comment in __git_complete_worktree_paths

Sergey Organov (5):
      diff-merges: introduce --diff-merges=on
      diff-merges: refactor set_diff_merges()
      diff-merges: adapt -m to enable default diff format
      diff-merges: introduce log.diffMerges config variable
      doc/diff-options: document new --diff-merges features

Shubham Verma (1):
      t9801: replace test -f with test_path_is_file

Taylor Blau (28):
      packfile: introduce 'find_kept_pack_entry()'
      revision: learn '--no-kept-objects'
      builtin/pack-objects.c: add '--stdin-packs' option
      builtin/repack.c: add '--geometric' option
      builtin/repack.c: do not repack single packs with --geometric
      t7703: test --geometric repack with loose objects
      builtin/repack.c: assign pack split later
      builtin/repack.c: be more conservative with unsigned overflows
      Documentation/git-push.txt: correct configuration typo
      builtin/pack-objects.c: ignore missing links with --stdin-packs
      builtin/multi-pack-index.c: inline 'flags' with options
      builtin/multi-pack-index.c: don't handle 'progress' separately
      builtin/multi-pack-index.c: define common usage with a macro
      builtin/multi-pack-index.c: split sub-commands
      builtin/multi-pack-index.c: don't enter bogus cmd_mode
      builtin/multi-pack-index.c: display usage on unrecognized command
      t/helper/test-read-midx.c: add '--show-objects'
      pack-bitmap: add 'test_bitmap_commits()' helper
      t/helper/test-bitmap.c: initial commit
      builtin/pack-objects.c: respect 'pack.preferBitmapTips'
      midx: allow marking a pack as preferred
      midx: don't free midx_name early
      midx: keep track of the checksum
      midx: make some functions non-static
      Documentation/technical: describe multi-pack reverse indexes
      pack-revindex: read multi-pack reverse indexes
      pack-write.c: extract 'write_rev_file_order'
      pack-revindex: write multi-pack reverse indexes

Todd Zullinger (1):
      t7500: remove non-existant C_LOCALE_OUTPUT prereq

Torsten Bögershausen (3):
      git mv foo FOO ; git mv foo bar gave an assert
      precompose_utf8: make precompose_string_if_needed() public
      macOS: precompose startup_info->prefix

Ville Skyttä (2):
      completion: audit and guard $GIT_* against unset use
      completion: avoid aliased command lookup error in nounset mode

Will Chandler (1):
      refs: cleanup directories when deleting packed ref

Wolfgang Müller (1):
      rev-parse: fix segfault with missing --path-format argument

ZheNing Hu (8):
      commit: add --trailer option
      format-patch: allow a non-integral version numbers
      ref-filter: get rid of show_ref_array_item
      ref-filter: reuse output buffer
      pretty: provide human date format
      docs: correct descript of trailer.<token>.command
      trailer: add new .cmd config option
      ref-filter: fix read invalid union member bug

brian m. carlson (14):
      builtin/init-db: handle bare clones when core.bare set to false
      hash: add an algo member to struct object_id
      Always use oidread to read into struct object_id
      http-push: set algorithm when reading object ID
      hash: add a function to finalize object IDs
      Use the final_oid_fn to finalize hashing of object IDs
      builtin/pack-redundant: avoid casting buffers to struct object_id
      hash: set, copy, and use algo field in struct object_id
      hash: provide per-algorithm null OIDs
      builtin/show-index: set the algorithm for object IDs
      commit-graph: don't store file hashes as struct object_id
      builtin/pack-objects: avoid using struct object_id for pack hash
      hex: default to the_hash_algo on zero algorithm value
      hex: print objects using the hash algorithm member

Ævar Arnfjörð Bjarmason (96):
      grep/pcre2: drop needless assignment + assert() on opt->pcre2
      grep/pcre2: drop needless assignment to NULL
      grep/pcre2: correct reference to grep_init() in comment
      grep/pcre2: prepare to add debugging to pcre2_malloc()
      grep/pcre2: add GREP_PCRE2_DEBUG_MALLOC debug mode
      grep/pcre2: use compile-time PCREv2 version test
      grep/pcre2: use pcre2_maketables_free() function
      grep/pcre2: actually make pcre2 use custom allocator
      grep/pcre2: move back to thread-only PCREv2 structures
      grep/pcre2: move definitions of pcre2_{malloc,free}
      Makefile: guard against TEST_OBJS in the environment
      Makefile: split up long OBJECTS line
      Makefile: sort OBJECTS assignment for subsequent change
      Makefile: split OBJECTS into OBJECTS and GIT_OBJS
      Makefile: add {program,xdiff,test,git,fuzz}-objs & objects targets
      remote: add camel-cased *.tagOpt key, like clone
      remote: write camel-cased *.pushRemote on rename
      fsck.c: refactor and rename common config callback
      show tests: add test for "git show <tree>"
      ls-files tests: add meaningful --with-tree tests
      tree.c API: move read_tree() into builtin/ls-files.c
      ls-files: don't needlessly pass around stage variable
      ls-files: refactor away read_tree()
      archive: stop passing "stage" through read_tree_recursive()
      tree.h API: expose read_tree_1() as read_tree_at()
      tree.h API: simplify read_tree_recursive() signature
      diff --no-index tests: add test for --exit-code
      diff --no-index tests: test mode normalization
      rebase: remove transitory rebase.useBuiltin setting & env
      mktag tests: fix broken "&&" chain
      fsck.h: use designed initializers for FSCK_OPTIONS_{DEFAULT,STRICT}
      fsck.h: use "enum object_type" instead of "int"
      fsck.c: rename variables in fsck_set_msg_type() for less confusion
      fsck.c: remove (mostly) redundant append_msg_id() function
      fsck.c: rename remaining fsck_msg_id "id" to "msg_id"
      fsck.c: refactor fsck_msg_type() to limit scope of "int msg_type"
      fsck.h: move FSCK_{FATAL,INFO,ERROR,WARN,IGNORE} into an enum
      fsck.h: re-order and re-assign "enum fsck_msg_type"
      fsck.c: call parse_msg_type() early in fsck_set_msg_type()
      fsck.c: undefine temporary STR macro after use
      fsck.c: give "FOREACH_MSG_ID" a more specific name
      fsck.[ch]: move FOREACH_FSCK_MSG_ID & fsck_msg_id from *.c to *.h
      fsck.c: pass along the fsck_msg_id in the fsck_error callback
      fsck.c: add an fsck_set_msg_type() API that takes enums
      fsck.c: move gitmodules_{found,done} into fsck_options
      fetch-pack: don't needlessly copy fsck_options
      fetch-pack: use file-scope static struct for fsck_options
      fetch-pack: use new fsck API to printing dangling submodules
      Makefile: add QUIET_GEN to "tags" and "TAGS" targets
      git-send-email: replace "map" in void context with "for"
      git-send-email: test full --validate output
      git-send-email: refactor duplicate $? checks into a function
      git-send-email: improve --validate error output
      bash completion: complete CHERRY_PICK_HEAD
      config.c: remove last remnant of GIT_TEST_GETTEXT_POISON
      userdiff style: re-order drivers in alphabetical order
      userdiff style: declare patterns with consistent style
      userdiff style: normalize pascal regex declaration
      userdiff: add and use for_each_userdiff_driver()
      userdiff tests: explicitly test "default" pattern
      userdiff tests: list builtin drivers via test-tool
      userdiff: remove support for "broken" tests
      blame tests: don't rely on t/t4018/ directory
      blame tests: simplify userdiff driver test
      rebase tests: camel-case rebase.rescheduleFailedExec consistently
      rebase: don't override --no-reschedule-failed-exec with config
      Documentation/Makefile: make $(wildcard howto/*.txt) a var
      Documentation/Makefile: make doc.dep dependencies a variable again
      doc lint: Perl "strict" and "warnings" in lint-gitlink.perl
      doc lint: fix bugs in, simplify and improve lint script
      doc lint: lint and fix missing "GIT" end sections
      doc lint: lint relative section order
      docs: fix linting issues due to incorrect relative section order
      svn tests: remove legacy re-setup from init-clone test
      svn tests: refactor away a "set -e" in test body
      tests: remove all uses of test_i18cmp
      usage.c: don't copy/paste the same comment three times
      api docs: document BUG() in api-error-handling.txt
      api docs: document that BUG() emits a trace2 error event
      pretty tests: simplify %aI/%cI date format test
      pretty tests: give --date/format tests a better description
      sparse-index.c: remove set_index_sparse_config()
      streaming.c: avoid forward declarations
      streaming.c: remove enum/function/vtbl indirection
      streaming.c: remove {open,close,read}_method_decl() macros
      streaming.c: stop passing around "object_info *" to open()
      streaming.c: move {open,close,read} from vtable to "struct git_istream"
      Makefile: don't re-define PERL_DEFINES
      Makefile: regenerate perl/build/* if GIT-PERL-DEFINES changes
      Makefile: regenerate *.pm on NO_PERL_CPAN_FALLBACKS change
      perl: use mock i18n functions under NO_GETTEXT=Y
      Makefile: make PERL_DEFINES recursively expanded
      send-email: fix missing error message regression
      send-email: don't needlessly abs_path() the core.hooksPath
      send-email: move "hooks_path" invocation to git-send-email.perl
      pack-objects: move static inline from a header to the sole consumer

Øystein Walle (2):
      transport: respect verbosity when setting upstream
      add: die if both --dry-run and --interactive are given

Đoàn Trần Công Danh (6):
      mailinfo: load default metainfo_charset lazily
      mailinfo: stop parsing options manually
      mailinfo: warn if CRLF found in decoded base64/QP email
      mailinfo: allow squelching quoted CRLF warning
      mailinfo: allow stripping quoted CR without warning
      am: learn to process quoted lines that ends with CRLF


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.32.0-rc1
@ 2021-05-22 14:21  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2021-05-22 14:21 UTC (permalink / raw)
  To: git

A release candidate Git v2.32.0-rc1 is now available for testing at
the usual places.  It is comprised of 572 non-merge commits since
v2.31.0, contributed by 82 people, 31 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.32.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.31.0 are as follows.
Welcome to the Git development community!

  Adam Sharafeddine, Andrey Bienkowski, Atharva Raykar, Bruno
  Albuquerque, Chinmoy Chakraborty, Christopher Schenk, Dan
  Moseley, David Emett, Dmitry Torilov, Fabien Terrani, Firmin
  Martin, Georgios Kontaxis, Jason Gore, Jerry Zhang, Joachim
  Kuebart, Joseph Vusich, Josh Soref, Julien Richard, Li Linchao,
  Louis Sautier, Luke Shumaker, Nicholas Clark, Peter Oliver,
  Renato Botelho, Robert Foss, RyotaK, Sardorbek Imomaliev,
  Tom Saeger, Will Chandler, Wolfgang Müller, and Yiyuan guo.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alex Henrie,
  Andrzej Hunt, Bagas Sanjaya, Ben Humphreys, brian m. carlson,
  Charvi Mendiratta, Christian Couder, Dennis Ameling, Denton
  Liu, Derrick Stolee, Đoàn Trần Công Danh, Elijah Newren,
  Eric Sunshine, Eric Wong, Han-Wen Nienhuys, Han Xin, Jeff
  Hostetler, Jeff King, Johannes Schindelin, John Szakmeister,
  Jonathan Nieder, Jonathan Tan, Junio C Hamano, Kyle Meyer,
  Lénaïc Huard, Luke Diamand, Marc Branchaud, Martin Ågren,
  Matheus Tavares, Nguyễn Thái Ngọc Duy, Nipunn Koorapati,
  Øystein Walle, Patrick Steinhardt, Phillip Wood, Rafael Silva,
  Ramkumar Ramachandra, Ramsay Jones, Randall S. Becker, René
  Scharfe, Sergey Organov, Shubham Verma, Son Luong Ngoc, SZEDER
  Gábor, Taylor Blau, Todd Zullinger, Torsten Bögershausen,
  Trygve Aaberge, Ville Skyttä, and ZheNing Hu.

[*] We are counting not just the authorship contribution but
    issue reporting, testing and reviewing that are recorded
    in the commit trailers.

----------------------------------------------------------------

Git 2.32 Release Notes (draft)
==============================

Backward compatibility notes
----------------------------

 * ".gitattributes", ".gitignore", and ".mailmap" files that are
   symbolic links are ignored.

 * "git apply --3way" used to first attempt a straight application,
   and only fell back to the 3-way merge algorithm when the stright
   application failed.  Starting with this version, the command will
   first try the 3-way merge algorithm and only when it fails (either
   resulting with conflict or the base versions of blobs are missing),
   falls back to the usual patch application.


Updates since v2.31
-------------------

UI, Workflows & Features

 * It does not make sense to make ".gitattributes", ".gitignore" and
   ".mailmap" symlinks, as they are supposed to be usable from the
   object store (think: bare repositories where HEAD:.mailmap etc. are
   used).  When these files are symbolic links, we used to read the
   contents of the files pointed by them by mistake, which has been
   corrected.

 * "git stash show" learned to optionally show untracked part of the
   stash.

 * "git log --format='...'" learned "%(describe)" placeholder.

 * "git repack" so far has been only capable of repacking everything
   under the sun into a single pack (or split by size).  A cleverer
   strategy to reduce the cost of repacking a repository has been
   introduced.

 * The http codepath learned to let the credential layer to cache the
   password used to unlock a certificate that has successfully been
   used.

 * "git commit --fixup=<commit>", which was to tweak the changes made
   to the contents while keeping the original log message intact,
   learned "--fixup=(amend|reword):<commit>", that can be used to
   tweak both the message and the contents, and only the message,
   respectively.

 * "git send-email" learned to honor the core.hooksPath configuration.

 * "git format-patch -v<n>" learned to allow a reroll count that is
   not an integer.

 * "git commit" learned "--trailer <key>[=<value>]" option; together
   with the interpret-trailers command, this will make it easier to
   support custom trailers.

 * "git clone --reject-shallow" option fails the clone as soon as we
   notice that we are cloning from a shallow repository.

 * A configuration variable has been added to force tips of certain
   refs to be given a reachability bitmap.

 * "gitweb" learned "e-mail privacy" feature to redact strings that
   look like e-mail addresses on various pages.

 * "git apply --3way" has always been "to fall back to 3-way merge
   only when straight application fails". Swap the order of falling
   back so that 3-way is always attempted first (only when the option
   is given, of course) and then straight patch application is used as
   a fallback when it fails.

 * "git apply" now takes "--3way" and "--cached" at the same time, and
   work and record results only in the index.

 * The command line completion (in contrib/) has learned that
   CHERRY_PICK_HEAD is a possible pseudo-ref.

 * Userdiff patterns for "Scheme" has been added.

 * "git log" learned "--diff-merges=<style>" option, with an
   associated configuration variable log.diffMerges.

 * "git log --format=..." placeholders learned %ah/%ch placeholders to
   request the --date=human output.

 * Replace GIT_CONFIG_NOSYSTEM mechanism to decline from reading the
   system-wide configuration file with GIT_CONFIG_SYSTEM that lets
   users specify from which file to read the system-wide configuration
   (setting it to an empty file would essentially be the same as
   setting NOSYSTEM), and introduce GIT_CONFIG_GLOBAL to override the
   per-user configuration in $HOME/.gitconfig.

 * "git add" and "git rm" learned not to touch those paths that are
   outside of sparse checkout.

 * "git rev-list" learns the "--filter=object:type=<type>" option,
   which can be used to exclude objects of the given kind from the
   packfile generated by pack-objects.

 * The command line completion (in contrib/) for "git stash" has been
   updated.

 * "git subtree" updates.

 * It is now documented that "format-patch" skips merges.

 * Options to "git pack-objects" that take numeric values like
   --window and --depth should not accept negative values; the input
   validation has been tightened.

 * The way the command line specified by the trailer.<token>.command
   configuration variable receives the end-user supplied value was
   both error prone and misleading.  An alternative to achieve the
   same goal in a safer and more intuitive way has been added, as
   the trailer.<token>.cmd configuration variable, to replace it.

 * "git add -i --dry-run" does not dry-run, which was surprising.  The
   combination of options has taught to error out.

 * "git push" learns to discover common ancestor with the receiving
   end over protocol v2.  This will hopefully make "git push" as
   efficient as "git fetch" in avoiding objects from getting
   transferred unnecessarily.

 * "git mailinfo" (hence "git am") learned the "--quoted-cr" option to
   control how lines ending with CRLF wrapped in base64 or qp are
   handled.


Performance, Internal Implementation, Development Support etc.

 * Rename detection rework continues.

 * GIT_TEST_FAIL_PREREQS is a mechanism to skip test pieces with
   prerequisites to catch broken tests that depend on the side effects
   of optional pieces, but did not work at all when negative
   prerequisites were involved.
   (merge 27d578d904 jk/fail-prereq-testfix later to maint).

 * "git diff-index" codepath has been taught to trust fsmonitor status
   to reduce number of lstat() calls.
   (merge 7e5aa13d2c nk/diff-index-fsmonitor later to maint).

 * Reorganize Makefile to allow building git.o and other essential
   objects without extra stuff needed only for testing.

 * Preparatory API changes for parallel checkout.

 * A simple IPC interface gets introduced to build services like
   fsmonitor on top.

 * Fsck API clean-up.

 * SECURITY.md that is facing individual contributors and end users
   has been introduced.  Also a procedure to follow when preparing
   embargoed releases has been spelled out.
   (merge 09420b7648 js/security-md later to maint).

 * Optimize "rev-list --use-bitmap-index --objects" corner case that
   uses negative tags as the stopping points.

 * CMake update for vsbuild.

 * An on-disk reverse-index to map the in-pack location of an object
   back to its object name across multiple packfiles is introduced.

 * Generate [ec]tags under $(QUIET_GEN).

 * Clean-up codepaths that implements "git send-email --validate"
   option and improves the message from it.

 * The last remnant of gettext-poison has been removed.

 * The test framework has been taught to optionally turn the default
   merge strategy to "ort" throughout the system where we use
   three-way merges internally, like cherry-pick, rebase etc.,
   primarily to enhance its test coverage (the strategy has been
   available as an explicit "-s ort" choice).

 * A bit of code clean-up and a lot of test clean-up around userdiff
   area.

 * Handling of "promisor packs" that allows certain objects to be
   missing and lazily retrievable has been optimized (a bit).

 * When packet_write() fails, we gave an extra error message
   unnecessarily, which has been corrected.

 * The checkout machinery has been taught to perform the actual
   write-out of the files in parallel when able.

 * Show errno in the trace output in the error codepath that calls
   read_raw_ref method.

 * Effort to make the command line completion (in contrib/) safe with
   "set -u" continues.

 * Tweak a few tests for "log --format=..." that show timestamps in
   various formats.

 * The reflog expiry machinery has been taught to emit trace events.

 * Over-the-wire protocol learns a new request type to ask for object
   sizes given a list of object names.


Fixes since v2.31
-----------------

 * The fsmonitor interface read from its input without making sure
   there is something to read from.  This bug is new in 2.31
   timeframe.

 * The data structure used by fsmonitor interface was not properly
   duplicated during an in-core merge, leading to use-after-free etc.

 * "git bisect" reimplemented more in C during 2.30 timeframe did not
   take an annotated tag as a good/bad endpoint well.  This regression
   has been corrected.

 * Fix macros that can silently inject unintended null-statements.

 * CALLOC_ARRAY() macro replaces many uses of xcalloc().

 * Update insn in Makefile comments to run fuzz-all target.

 * Fix a corner case bug in "git mv" on case insensitive systems,
   which was introduced in 2.29 timeframe.

 * We had a code to diagnose and die cleanly when a required
   clean/smudge filter is missing, but an assert before that
   unnecessarily fired, hiding the end-user facing die() message.
   (merge 6fab35f748 mt/cleanly-die-upon-missing-required-filter later to maint).

 * Update C code that sets a few configuration variables when a remote
   is configured so that it spells configuration variable names in the
   canonical camelCase.
   (merge 0f1da600e6 ab/remote-write-config-in-camel-case later to maint).

 * A new configuration variable has been introduced to allow choosing
   which version of the generation number gets used in the
   commit-graph file.
   (merge 702110aac6 ds/commit-graph-generation-config later to maint).

 * Perf test update to work better in secondary worktrees.
   (merge 36e834abc1 jk/perf-in-worktrees later to maint).

 * Updates to memory allocation code around the use of pcre2 library.
   (merge c1760352e0 ab/grep-pcre2-allocfix later to maint).

 * "git -c core.bare=false clone --bare ..." would have segfaulted,
   which has been corrected.
   (merge 75555676ad bc/clone-bare-with-conflicting-config later to maint).

 * When "git checkout" removes a path that does not exist in the
   commit it is checking out, it wasn't careful enough not to follow
   symbolic links, which has been corrected.
   (merge fab78a0c3d mt/checkout-remove-nofollow later to maint).

 * A few option description strings started with capital letters,
   which were corrected.
   (merge 5ee90326dc cc/downcase-opt-help later to maint).

 * Plug or annotate remaining leaks that trigger while running the
   very basic set of tests.
   (merge 68ffe095a2 ah/plugleaks later to maint).

 * The hashwrite() API uses a buffering mechanism to avoid calling
   write(2) too frequently. This logic has been refactored to be
   easier to understand.
   (merge ddaf1f62e3 ds/clarify-hashwrite later to maint).

 * "git cherry-pick/revert" with or without "--[no-]edit" did not spawn
   the editor as expected (e.g. "revert --no-edit" after a conflict
   still asked to edit the message), which has been corrected.
   (merge 39edfd5cbc en/sequencer-edit-upon-conflict-fix later to maint).

 * "git daemon" has been tightened against systems that take backslash
   as directory separator.
   (merge 9a7f1ce8b7 rs/daemon-sanitize-dir-sep later to maint).

 * A NULL-dereference bug has been corrected in an error codepath in
   "git for-each-ref", "git branch --list" etc.
   (merge c685450880 jk/ref-filter-segfault-fix later to maint).

 * Streamline the codepath to fix the UTF-8 encoding issues in the
   argv[] and the prefix on macOS.
   (merge c7d0e61016 tb/precompose-prefix-simplify later to maint).

 * The command-line completion script (in contrib/) had a couple of
   references that would have given a warning under the "-u" (nounset)
   option.
   (merge c5c0548d79 vs/completion-with-set-u later to maint).

 * When "git pack-objects" makes a literal copy of a part of existing
   packfile using the reachability bitmaps, its update to the progress
   meter was broken.
   (merge 8e118e8490 jk/pack-objects-bitmap-progress-fix later to maint).

 * The dependencies for config-list.h and command-list.h were broken
   when the former was split out of the latter, which has been
   corrected.
   (merge 56550ea718 sg/bugreport-fixes later to maint).

 * "git push --quiet --set-upstream" was not quiet when setting the
   upstream branch configuration, which has been corrected.
   (merge f3cce896a8 ow/push-quiet-set-upstream later to maint).

 * The prefetch task in "git maintenance" assumed that "git fetch"
   from any remote would fetch all its local branches, which would
   fetch too much if the user is interested in only a subset of
   branches there.
   (merge 32f67888d8 ds/maintenance-prefetch-fix later to maint).

 * Clarify that pathnames recorded in Git trees are most often (but
   not necessarily) encoded in UTF-8.
   (merge 9364bf465d ab/pathname-encoding-doc later to maint).

 * "git --config-env var=val cmd" weren't accepted (only
   --config-env=var=val was).
   (merge c331551ccf ps/config-env-option-with-separate-value later to maint).

 * When the reachability bitmap is in effect, the "do not lose
   recently created objects and those that are reachable from them"
   safety to protect us from races were disabled by mistake, which has
   been corrected.
   (merge 2ba582ba4c jk/prune-with-bitmap-fix later to maint).

 * Cygwin pathname handling fix.
   (merge bccc37fdc7 ad/cygwin-no-backslashes-in-paths later to maint).

 * "git rebase --[no-]reschedule-failed-exec" did not work well with
   its configuration variable, which has been corrected.
   (merge e5b32bffd1 ab/rebase-no-reschedule-failed-exec later to maint).

 * Portability fix for command line completion script (in contrib/).
   (merge f2acf763e2 si/zsh-complete-comment-fix later to maint).

 * "git repack -A -d" in a partial clone unnecessarily loosened
   objects in promisor pack.

 * "git bisect skip" when custom words are used for new/old did not
   work, which has been corrected.

 * A few variants of informational message "Already up-to-date" has
   been rephrased.
   (merge ad9322da03 js/merge-already-up-to-date-message-reword later to maint).

 * "git submodule update --quiet" did not propagate the quiet option
   down to underlying "git fetch", which has been corrected.
   (merge 62af4bdd42 nc/submodule-update-quiet later to maint).

 * Document that our test can use "local" keyword.
   (merge a84fd3bcc6 jc/test-allows-local later to maint).

 * The word-diff mode has been taught to work better with a word
   regexp that can match an empty string.
   (merge 0324e8fc6b pw/word-diff-zero-width-matches later to maint).

 * "git p4" learned to find branch points more efficiently.
   (merge 6b79818bfb jk/p4-locate-branch-point-optim later to maint).

 * When "git update-ref -d" removes a ref that is packed, it left
   empty directories under $GIT_DIR/refs/ for
   (merge 5f03e5126d wc/packed-ref-removal-cleanup later to maint).

 * "git clean" and "git ls-files -i" had confusion around working on
   or showing ignored paths inside an ignored directory, which has
   been corrected.
   (merge b548f0f156 en/dir-traversal later to maint).

 * The handling of "%(push)" formatting element of "for-each-ref" and
   friends was broken when the same codepath started handling
   "%(push:<what>)", which has been corrected.
   (merge 1e1c4c5eac zh/ref-filter-push-remote-fix later to maint).

 * The bash prompt script (in contrib/) did not work under "set -u".
   (merge 5c0cbdb107 en/prompt-under-set-u later to maint).

 * The "chainlint" feature in the test framework is a handy way to
   catch common mistakes in writing new tests, but tends to get
   expensive.  An knob to selectively disable it has been introduced
   to help running tests that the developer has not modified.
   (merge 2d86a96220 jk/test-chainlint-softer later to maint).

 * The "rev-parse" command did not diagnose the lack of argument to
   "--path-format" option, which was introduced in v2.31 era, which
   has been corrected.
   (merge 99fc555188 wm/rev-parse-path-format-wo-arg later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge f451960708 dl/cat-file-doc-cleanup later to maint).
   (merge 12604a8d0c sv/t9801-test-path-is-file-cleanup later to maint).
   (merge ea7e63921c jr/doc-ignore-typofix later to maint).
   (merge 23c781f173 ps/update-ref-trans-hook-doc later to maint).
   (merge 42efa1231a jk/filter-branch-sha256 later to maint).
   (merge 4c8e3dca6e tb/push-simple-uses-branch-merge-config later to maint).
   (merge 6534d436a2 bs/asciidoctor-installation-hints later to maint).
   (merge 47957485b3 ab/read-tree later to maint).
   (merge 2be927f3d1 ab/diff-no-index-tests later to maint).
   (merge 76593c09bb ab/detox-gettext-tests later to maint).
   (merge 28e29ee38b jc/doc-format-patch-clarify later to maint).
   (merge fc12b6fdde fm/user-manual-use-preface later to maint).
   (merge dba94e3a85 cc/test-helper-bloom-usage-fix later to maint).
   (merge 61a7660516 hn/reftable-tables-doc-update later to maint).
   (merge 81ed96a9b2 jt/fetch-pack-request-fix later to maint).
   (merge 151b6c2dd7 jc/doc-do-not-capitalize-clarification later to maint).
   (merge 9160068ac6 js/access-nul-emulation-on-windows later to maint).
   (merge 7a14acdbe6 po/diff-patch-doc later to maint).
   (merge f91371b948 pw/patience-diff-clean-up later to maint).
   (merge 3a7f0908b6 mt/clean-clean later to maint).
   (merge d4e2d15a8b ab/streaming-simplify later to maint).
   (merge 0e59f7ad67 ah/merge-ort-i18n later to maint).
   (merge e6f68f62e0 ls/typofix later to maint).

----------------------------------------------------------------

Changes since v2.31.0 are as follows:

Adam Dinwoodie (1):
      cygwin: disallow backslashes in file names

Alex Henrie (1):
      merge-ort: split "distinct types" message into two translatable messages

Andrey Bienkowski (1):
      doc: clarify the filename encoding in git diff

Andrzej Hunt (24):
      Makefile: update 'make fuzz-all' docs to reflect modern clang
      symbolic-ref: don't leak shortened refname in check_symref()
      reset: free instead of leaking unneeded ref
      clone: free or UNLEAK further pointers when finished
      worktree: fix leak in dwim_branch()
      init: remove git_init_db_config() while fixing leaks
      init-db: silence template_dir leak when converting to absolute path
      fsmonitor: avoid global-buffer-overflow READ when checking trivial response
      parse-options: convert bitfield values to use binary shift
      parse-options: don't leak alias help messages
      transport: also free remote_refs in transport_disconnect()
      merge-ort: only do pointer arithmetic for non-empty lists
      revision: free remainder of old commit list in limit_list
      wt-status: fix multiple small leaks
      ls-files: free max_prefix when done
      bloom: clear each bloom_key after use
      branch: FREE_AND_NULL instead of NULL'ing real_ref
      builtin/bugreport: don't leak prefixed filename
      builtin/check-ignore: clear_pathspec before returning
      builtin/checkout: clear pending objects after diffing
      mailinfo: also free strbuf lists when clearing mailinfo
      builtin/for-each-ref: free filter and UNLEAK sorting.
      builtin/rebase: release git_format_patch_opt too
      builtin/rm: avoid leaking pathspec and seen

Atharva Raykar (1):
      userdiff: add support for Scheme

Bagas Sanjaya (1):
      INSTALL: note on using Asciidoctor to build doc

Bruno Albuquerque (1):
      object-info: support for retrieving object info

Charvi Mendiratta (23):
      sequencer: pass todo_item to do_pick_commit()
      sequencer: use const variable for commit message comments
      rebase -i: add fixup [-C | -c] command
      t3437: test script for fixup [-C|-c] options in interactive rebase
      rebase -i: teach --autosquash to work with amend!
      doc/git-rebase: add documentation for fixup [-C|-c] options
      sequencer: fixup the datatype of the 'flag' argument
      sequencer: rename a few functions
      rebase -i: clarify and fix 'fixup -c' rebase-todo help
      t/lib-rebase: update the documentation of FAKE_LINES
      t/t3437: fixup here-docs in the 'setup' test
      t/t3437: remove the dependency of 'expected-message' file from tests
      t/t3437: check the author date of fixed up commit
      t/t3437: simplify and document the test helpers
      t/t3437: use named commits in the tests
      t/t3437: fixup the test 'multiple fixup -c opens editor once'
      doc/rebase -i: fix typo in the documentation of 'fixup' command
      sequencer: export and rename subject_length()
      commit: add amend suboption to --fixup to create amend! commit
      commit: add a reword suboption to --fixup
      t7500: add tests for --fixup=[amend|reword] options
      t3437: use --fixup with options to create amend! commit
      doc/git-commit: add documentation for fixup=[amend|reword] options

Chinmoy Chakraborty (1):
      column, range-diff: downcase option description

Christian Couder (1):
      test-bloom: fix missing 'bloom' from usage string

Christopher Schenk (1):
      remote-curl: fall back to basic auth if Negotiate fails

Dennis Ameling (2):
      cmake(install): fix double .exe suffixes
      cmake(install): include vcpkg dlls

Denton Liu (14):
      git-cat-file.txt: monospace args, placeholders and filenames
      git-cat-file.txt: remove references to "sha1"
      stash show: teach --include-untracked and --only-untracked
      stash show: learn stash.showIncludeUntracked
      git-completion.bash: pass $__git_subcommand_idx from __git_main()
      git-completion.bash: extract from else in _git_stash()
      git-completion.bash: use __gitcomp_builtin() in _git_stash()
      git-completion.bash: separate some commands onto their own line
      git-completion.bash: rename to $__git_cmd_idx
      git-completion.bash: use $__git_cmd_idx in more places
      git-completion.bash: consolidate cases in _git_stash()
      t3905: correct test title
      stash show: fix segfault with --{include,only}-untracked
      stash show: use stash.showIncludeUntracked even when diff options given

Derrick Stolee (56):
      commit-graph: create local repository pointer
      commit-graph: use config to specify generation type
      csum-file: make hashwrite() more readable
      sparse-index: design doc and format update
      t/perf: add performance test for sparse operations
      t1092: clean up script quoting
      sparse-index: add guard to ensure full index
      sparse-index: implement ensure_full_index()
      t1092: compare sparse-checkout to sparse-index
      test-read-cache: print cache entries with --table
      test-tool: don't force full index
      unpack-trees: ensure full index
      sparse-checkout: hold pattern list in index
      sparse-index: add 'sdir' index extension
      sparse-index: convert from full to sparse
      submodule: sparse-index should not collapse links
      unpack-trees: allow sparse directories
      sparse-index: check index conversion happens
      sparse-index: add index.sparse config option
      sparse-checkout: toggle sparse index from builtin
      sparse-checkout: disable sparse-index
      cache-tree: integrate with sparse directory entries
      sparse-index: loose integration with cache_tree_verify()
      p2000: add sparse-index repos
      maintenance: simplify prefetch logic
      sparse-index: API protection strategy
      *: remove 'const' qualifier for struct index_state
      read-cache: expand on query into sparse-directory entry
      cache: move ensure_full_index() to cache.h
      add: ensure full index
      checkout-index: ensure full index
      checkout: ensure full index
      commit: ensure full index
      difftool: ensure full index
      fsck: ensure full index
      grep: ensure full index
      ls-files: ensure full index
      merge-index: ensure full index
      rm: ensure full index
      stash: ensure full index
      update-index: ensure full index
      dir: ensure full index
      entry: ensure full index
      merge-recursive: ensure full index
      pathspec: ensure full index
      read-cache: ensure full index
      resolve-undo: ensure full index
      revision: ensure full index
      name-hash: don't add directories to name_hash
      sparse-index: expand_to_path()
      name-hash: use expand_to_path()
      fetch: add --prefetch option
      maintenance: use 'git fetch --prefetch'
      maintenance: respect remote.*.skipFetchAll
      dir: update stale description of treat_directory()
      sparse-index: fix uninitialized jump

Elijah Newren (49):
      diffcore-rename: use directory rename guided basename comparisons
      diffcore-rename: provide basic implementation of idx_possible_rename()
      diffcore-rename: add a mapping of destination names to their indices
      Move computation of dir_rename_count from merge-ort to diffcore-rename
      diffcore-rename: add function for clearing dir_rename_count
      diffcore-rename: move dir_rename_counts into dir_rename_info struct
      diffcore-rename: extend cleanup_dir_rename_info()
      diffcore-rename: compute dir_rename_counts in stages
      diffcore-rename: limit dir_rename_counts computation to relevant dirs
      diffcore-rename: compute dir_rename_guess from dir_rename_counts
      diffcore-rename: enable filtering possible rename sources
      merge-ort: precompute subset of sources for which we need rename detection
      merge-ort: add data structures for an alternate tree traversal
      merge-ort: introduce wrappers for alternate tree traversal
      merge-ort: precompute whether directory rename detection is needed
      merge-ort: use relevant_sources to filter possible rename sources
      merge-ort: skip rename detection entirely if possible
      diffcore-rename: avoid doing basename comparisons for irrelevant sources
      diffcore-rename: take advantage of "majority rules" to skip more renames
      merge-ort, diffcore-rename: tweak dirs_removed and relevant_source type
      merge-ort: record the reason that we want a rename for a directory
      diffcore-rename: only compute dir_rename_count for relevant directories
      diffcore-rename: check if we have enough renames for directories early on
      diffcore-rename: add computation of number of unknown renames
      merge-ort: record the reason that we want a rename for a file
      diffcore-rename: determine which relevant_sources are no longer relevant
      merge-ort: use STABLE_QSORT instead of QSORT where required
      merge-ort: add a special minimal index just for renormalization
      merge-ort: have ll_merge() use a special attr_index for renormalization
      merge-ort: let renormalization change modify/delete into clean delete
      merge-ort: support subtree shifting
      t6428: new test for SKIP_WORKTREE handling and conflicts
      merge-ort: implement CE_SKIP_WORKTREE handling with conflicted entries
      t: mark several submodule merging tests as fixed under merge-ort
      merge-ort: write $GIT_DIR/AUTO_MERGE whenever we hit a conflict
      merge-recursive: add a bunch of FIXME comments documenting known bugs
      Revert "merge-ort: ignore the directory rename split conflict for now"
      t6423: mark remaining expected failure under merge-ort as such
      Add testing with merge-ort merge strategy
      sequencer: fix edit handling for cherry-pick and revert messages
      dir: convert trace calls to trace2 equivalents
      dir: report number of visited directories and paths with trace2
      ls-files: error out on -i unless -o or -c are specified
      t7300: add testcase showing unnecessary traversal into ignored directory
      t3001, t7300: add testcase showcasing missed directory traversal
      dir: avoid unnecessary traversal into ignored directory
      dir: traverse into untracked directories if they may have ignored subfiles
      dir: introduce readdir_skip_dot_and_dotdot() helper
      git-prompt: work under set -u

Eric Sunshine (1):
      merge(s): apply consistent punctuation to "up to date" messages

Eric Wong (1):
      remote-curl: fix clone on sha256 repos

Firmin Martin (1):
      user-manual.txt: assign preface an id and a title

Georgios Kontaxis (1):
      gitweb: add "e-mail privacy" feature to redact e-mail addresses

Han Xin (1):
      pack-objects: fix comment of reused_chunk.difference

Han-Wen Nienhuys (3):
      reftable: document an alternate cleanup method on Windows
      refs: print errno for read_raw_ref if GIT_TRACE_REFS is set
      refs/debug: trace into reflog expiry too

Jeff Hostetler (14):
      pkt-line: eliminate the need for static buffer in packet_write_gently()
      simple-ipc: design documentation for new IPC mechanism
      simple-ipc: add win32 implementation
      unix-socket: eliminate static unix_stream_socket() helper function
      unix-socket: add backlog size option to unix_stream_listen()
      unix-socket: disallow chdir() when creating unix domain sockets
      unix-stream-server: create unix domain socket under lock
      convert: make convert_attrs() and convert structs public
      convert: add [async_]convert_to_working_tree_ca() variants
      convert: add get_stream_filter_ca() variant
      convert: add classification for conv_attrs struct
      simple-ipc: add Unix domain socket implementation
      t0052: add simple-ipc tests and t/helper/test-simple-ipc tool
      simple-ipc: correct ifdefs when NO_PTHREADS is defined

Jeff King (43):
      add open_nofollow() helper
      attr: convert "macro_ok" into a flags field
      exclude: add flags parameter to add_patterns()
      attr: do not respect symlinks for in-tree .gitattributes
      exclude: do not respect symlinks for in-tree .gitignore
      mailmap: do not respect symlinks for in-tree .mailmap
      p5303: add missing &&-chains
      p5303: measure time to repack with keep
      builtin/pack-objects.c: rewrite honor-pack-keep logic
      packfile: add kept-pack cache for find_kept_pack_entry()
      t/perf: handle worktrees as test repos
      t/perf: avoid copying worktree files from test repo
      t7003: test ref rewriting explicitly
      filter-branch: drop multiple-ancestor warning
      filter-branch: drop $_x40 glob
      bisect: peel annotated tags to commits
      t: annotate !PTHREADS tests with !FAIL_PREREQS
      ref-filter: fix NULL check for parse object failure
      midx.c: improve cache locality in midx_pack_order_cmp()
      pack-objects: update "nr_seen" progress based on pack-reused count
      is_promisor_object(): free tree buffer after parsing
      lookup_unknown_object(): take a repository argument
      revision: avoid parsing with --exclude-promisor-objects
      pack-bitmap: clean up include_check after use
      prune: save reachable-from-recent objects with bitmaps
      t5300: modernize basic tests
      t5300: check that we produced expected number of deltas
      pack-objects: clamp negative window size to 0
      t5316: check behavior of pack-objects --depth=0
      pack-objects: clamp negative depth to 0
      docs/format-patch: mention handling of merges
      t7415: remove out-dated comment about translation
      fsck_tree(): fix shadowed variable
      fsck_tree(): wrap some long lines
      t7415: rename to expand scope
      t7450: test verify_path() handling of gitmodules
      t7450: test .gitmodules symlink matching against obscured names
      t0060: test ntfs/hfs-obscured dotfiles
      fsck: warn about symlinked dotfiles we'll open with O_NOFOLLOW
      docs: document symlink restrictions for dot-files
      t: avoid sed-based chain-linting in some expensive cases
      t5551: test http interaction with credential helpers
      Revert "remote-curl: fall back to basic auth if Negotiate fails"

Jerry Zhang (3):
      git-apply: try threeway first when "--3way" is used
      git-apply: allow simultaneous --cached and --3way options
      apply: adjust messages to account for --3way changes

Joachim Kuebart (2):
      git-p4: ensure complex branches are cloned correctly
      git-p4: speed up search for branch parent

Johannes Schindelin (10):
      pkt-line: do not issue flush packets in write_packetized_*()
      pkt-line: add PACKET_READ_GENTLE_ON_READ_ERROR option
      pkt-line: add options argument to read_packetized_to_strbuf()
      fsmonitor: fix memory corruption in some corner cases
      fsmonitor: do not forget to release the token in `discard_index()`
      SECURITY: describe how to report vulnerabilities
      Document how we do embargoed releases
      cmake: support SKIP_DASHED_BUILT_INS
      cmake: add a preparatory work-around to accommodate `vcpkg`
      msvc: avoid calling `access("NUL", flags)`

John Szakmeister (2):
      http: store credential when PKI auth is used
      http: drop the check for an empty proxy password before approving

Jonathan Tan (8):
      t5606: run clone branch name test with protocol v2
      fetch-pack: buffer object-format with other args
      fetch-pack: refactor process_acks()
      fetch-pack: refactor add_haves()
      fetch-pack: refactor command and capability write
      fetch: teach independent negotiation (no packfile)
      send-pack: support push negotiation
      t5601: mark protocol v2-only test

Josh Soref (1):
      merge: fix swapped "up to date" message components

Julien Richard (1):
      doc: .gitignore documentation typofix

Junio C Hamano (27):
      builtin/repack.c: reword comment around pack-objects flags
      xcalloc: use CALLOC_ARRAY() when applicable
      cocci: allow xcalloc(1, size)
      The first batch in 2.32 cycle
      The second batch
      format-patch: give an overview of what a "patch" message is
      The third patch
      Git 2.31.1
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      The ninth batch
      doc: clarify "do not capitalize the first word" rule
      The tenth batch
      The eleventh (aka "ort") batch
      The twelfth batch
      The thirteenth batch
      CodingGuidelines: explicitly allow "local" for test scripts
      The fourteenth batch
      The fifteenth batch
      The sixteenth batch
      The seventeenth batch
      Git 2.32-rc0
      A handful more topics before -rc1
      Git 2.32-rc1

Kyle Meyer (1):
      config.txt: add missing period

Li Linchao (1):
      builtin/clone.c: add --reject-shallow option

Louis Sautier (1):
      pretty: fix a typo in the documentation for %(trailers)

Luke Shumaker (30):
      .gitignore: ignore 'git-subtree' as a build artifact
      subtree: t7900: update for having the default branch name be 'main'
      subtree: t7900: use test-lib.sh's test_count
      subtree: t7900: use consistent formatting
      subtree: t7900: comment subtree_test_create_repo
      subtree: t7900: use 'test' for string equality
      subtree: t7900: delete some dead code
      subtree: t7900: fix 'verify one file change per commit'
      subtree: t7900: rename last_commit_message to last_commit_subject
      subtree: t7900: add a test for the -h flag
      subtree: t7900: add porcelain tests for 'pull' and 'push'
      subtree: don't have loose code outside of a function
      subtree: more consistent error propagation
      subtree: drop support for git < 1.7
      subtree: use `git merge-base --is-ancestor`
      subtree: use git-sh-setup's `say`
      subtree: use more explicit variable names for cmdline args
      subtree: use "$*" instead of "$@" as appropriate
      subtree: don't fuss with PATH
      subtree: use "^{commit}" instead of "^0"
      subtree: parse revs in individual cmd_ functions
      subtree: remove duplicate check
      subtree: add comments and sanity checks
      subtree: don't let debug and progress output clash
      subtree: have $indent actually affect indentation
      subtree: give the docs a once-over
      subtree: allow --squash to be used with --rejoin
      subtree: allow 'split' flags to be passed to 'push'
      subtree: push: allow specifying a local rev other than HEAD
      subtree: be stricter about validating flags

Lénaïc Huard (1):
      maintenance: fix two memory leaks

Martin Ågren (2):
      git-repack.txt: remove spurious ")"
      pretty-formats.txt: add missing space

Matheus Tavares (30):
      convert: fail gracefully upon missing clean cmd on required filter
      symlinks: update comment on threaded_check_leading_path()
      checkout: don't follow symlinks when removing entries
      entry: extract a header file for entry.c functions
      entry: make fstat_output() and read_blob_entry() public
      entry: extract update_ce_after_write() from write_entry()
      entry: move conv_attrs lookup up to checkout_entry()
      entry: add checkout_entry_ca() taking preloaded conv_attrs
      add: include magic part of pathspec on --refresh error
      t3705: add tests for `git add` in sparse checkouts
      add: make --chmod and --renormalize honor sparse checkouts
      pathspec: allow to ignore SKIP_WORKTREE entries on index matching
      refresh_index(): add flag to ignore SKIP_WORKTREE entries
      add: warn when asked to update SKIP_WORKTREE entries
      rm: honor sparse checkout patterns
      pkt-line: do not report packet write errors twice
      unpack-trees: add basic support for parallel checkout
      parallel-checkout: make it truly parallel
      parallel-checkout: add configuration options
      parallel-checkout: support progress displaying
      parallel-checkout: add design documentation
      make_transient_cache_entry(): optionally alloc from mem_pool
      builtin/checkout.c: complete parallel checkout support
      checkout-index: add parallel checkout support
      parallel-checkout: add tests for basic operations
      parallel-checkout: add tests related to path collisions
      t0028: extract encoding helpers to lib-encoding.sh
      parallel-checkout: add tests related to .gitattributes
      ci: run test round with parallel-checkout enabled
      clean: remove unnecessary variable

Nicholas Clark (1):
      submodule update: silence underlying fetch with "--quiet"

Nipunn Koorapati (3):
      fsmonitor: skip lstat deletion check during git diff-index
      fsmonitor: add assertion that fsmonitor is valid to check_removed
      fsmonitor: add perf test for git diff HEAD

Patrick Steinhardt (17):
      githooks.txt: replace mentions of SHA-1 specific properties
      githooks.txt: clarify documentation on reference-transaction hook
      pack-bitmap: avoid traversal of objects referenced by uninteresting tag
      uploadpack.txt: document implication of `uploadpackfilter.allow`
      revision: mark commit parents as NOT_USER_GIVEN
      list-objects: move tag processing into its own function
      list-objects: support filtering by tag and commit
      list-objects: implement object type filter
      pack-bitmap: implement object type filter
      pack-bitmap: implement combined filter
      rev-list: allow filtering of provided items
      config: rename `git_etc_config()`
      config: unify code paths to get global config paths
      config: allow overriding of global and system configuration
      t1300: fix unset of GIT_CONFIG_NOSYSTEM leaking into subsequent tests
      git.txt: fix synopsis of `--config-env` missing the equals sign
      git: support separate arg for `--config-env`'s value

Peter Oliver (1):
      doc: point to diff attribute in patch format docs

Phillip Wood (6):
      rebase -i: only write fixup-message when it's needed
      sequencer: factor out code to append squash message
      rebase -i: comment out squash!/fixup! subjects from squash message
      word diff: handle zero length matches
      patience diff: remove unnecessary string comparisons
      patience diff: remove unused variable

Rafael Silva (1):
      repack: avoid loosening promisor objects in partial clones

Ramkumar Ramachandra (1):
      Add entry for Ramkumar Ramachandra

Ramsay Jones (1):
      bisect--helper: use BISECT_TERMS in 'bisect skip' command

René Scharfe (12):
      pretty: add %(describe)
      pretty: add merge and exclude options to %(describe)
      t4205: assert %(describe) test coverage
      pretty: document multiple %(describe) being inconsistent
      fix xcalloc() argument order
      archive: expand only a single %(describe) per archive
      git-compat-util.h: drop trailing semicolon from macro definition
      use CALLOC_ARRAY
      vcs-svn: remove header files as well
      block-sha1: drop trailing semicolon from macro definition
      mem-pool: drop trailing semicolon from macro definition
      daemon: sanitize all directory separators

Robert Foss (1):
      git-send-email: Respect core.hooksPath setting

SZEDER Gábor (1):
      Makefile: add missing dependencies of 'config-list.h'

Sardorbek Imomaliev (1):
      work around zsh comment in __git_complete_worktree_paths

Sergey Organov (5):
      diff-merges: introduce --diff-merges=on
      diff-merges: refactor set_diff_merges()
      diff-merges: adapt -m to enable default diff format
      diff-merges: introduce log.diffMerges config variable
      doc/diff-options: document new --diff-merges features

Shubham Verma (1):
      t9801: replace test -f with test_path_is_file

Taylor Blau (28):
      packfile: introduce 'find_kept_pack_entry()'
      revision: learn '--no-kept-objects'
      builtin/pack-objects.c: add '--stdin-packs' option
      builtin/repack.c: add '--geometric' option
      builtin/repack.c: do not repack single packs with --geometric
      t7703: test --geometric repack with loose objects
      builtin/repack.c: assign pack split later
      builtin/repack.c: be more conservative with unsigned overflows
      Documentation/git-push.txt: correct configuration typo
      builtin/pack-objects.c: ignore missing links with --stdin-packs
      builtin/multi-pack-index.c: inline 'flags' with options
      builtin/multi-pack-index.c: don't handle 'progress' separately
      builtin/multi-pack-index.c: define common usage with a macro
      builtin/multi-pack-index.c: split sub-commands
      builtin/multi-pack-index.c: don't enter bogus cmd_mode
      builtin/multi-pack-index.c: display usage on unrecognized command
      t/helper/test-read-midx.c: add '--show-objects'
      pack-bitmap: add 'test_bitmap_commits()' helper
      t/helper/test-bitmap.c: initial commit
      builtin/pack-objects.c: respect 'pack.preferBitmapTips'
      midx: allow marking a pack as preferred
      midx: don't free midx_name early
      midx: keep track of the checksum
      midx: make some functions non-static
      Documentation/technical: describe multi-pack reverse indexes
      pack-revindex: read multi-pack reverse indexes
      pack-write.c: extract 'write_rev_file_order'
      pack-revindex: write multi-pack reverse indexes

Todd Zullinger (1):
      t7500: remove non-existant C_LOCALE_OUTPUT prereq

Torsten Bögershausen (3):
      git mv foo FOO ; git mv foo bar gave an assert
      precompose_utf8: make precompose_string_if_needed() public
      macOS: precompose startup_info->prefix

Ville Skyttä (2):
      completion: audit and guard $GIT_* against unset use
      completion: avoid aliased command lookup error in nounset mode

Will Chandler (1):
      refs: cleanup directories when deleting packed ref

Wolfgang Müller (1):
      rev-parse: fix segfault with missing --path-format argument

ZheNing Hu (8):
      commit: add --trailer option
      format-patch: allow a non-integral version numbers
      ref-filter: get rid of show_ref_array_item
      ref-filter: reuse output buffer
      pretty: provide human date format
      docs: correct descript of trailer.<token>.command
      trailer: add new .cmd config option
      ref-filter: fix read invalid union member bug

brian m. carlson (14):
      builtin/init-db: handle bare clones when core.bare set to false
      hash: add an algo member to struct object_id
      Always use oidread to read into struct object_id
      http-push: set algorithm when reading object ID
      hash: add a function to finalize object IDs
      Use the final_oid_fn to finalize hashing of object IDs
      builtin/pack-redundant: avoid casting buffers to struct object_id
      hash: set, copy, and use algo field in struct object_id
      hash: provide per-algorithm null OIDs
      builtin/show-index: set the algorithm for object IDs
      commit-graph: don't store file hashes as struct object_id
      builtin/pack-objects: avoid using struct object_id for pack hash
      hex: default to the_hash_algo on zero algorithm value
      hex: print objects using the hash algorithm member

Ævar Arnfjörð Bjarmason (92):
      grep/pcre2: drop needless assignment + assert() on opt->pcre2
      grep/pcre2: drop needless assignment to NULL
      grep/pcre2: correct reference to grep_init() in comment
      grep/pcre2: prepare to add debugging to pcre2_malloc()
      grep/pcre2: add GREP_PCRE2_DEBUG_MALLOC debug mode
      grep/pcre2: use compile-time PCREv2 version test
      grep/pcre2: use pcre2_maketables_free() function
      grep/pcre2: actually make pcre2 use custom allocator
      grep/pcre2: move back to thread-only PCREv2 structures
      grep/pcre2: move definitions of pcre2_{malloc,free}
      Makefile: guard against TEST_OBJS in the environment
      Makefile: split up long OBJECTS line
      Makefile: sort OBJECTS assignment for subsequent change
      Makefile: split OBJECTS into OBJECTS and GIT_OBJS
      Makefile: add {program,xdiff,test,git,fuzz}-objs & objects targets
      remote: add camel-cased *.tagOpt key, like clone
      remote: write camel-cased *.pushRemote on rename
      fsck.c: refactor and rename common config callback
      show tests: add test for "git show <tree>"
      ls-files tests: add meaningful --with-tree tests
      tree.c API: move read_tree() into builtin/ls-files.c
      ls-files: don't needlessly pass around stage variable
      ls-files: refactor away read_tree()
      archive: stop passing "stage" through read_tree_recursive()
      tree.h API: expose read_tree_1() as read_tree_at()
      tree.h API: simplify read_tree_recursive() signature
      diff --no-index tests: add test for --exit-code
      diff --no-index tests: test mode normalization
      rebase: remove transitory rebase.useBuiltin setting & env
      mktag tests: fix broken "&&" chain
      fsck.h: use designed initializers for FSCK_OPTIONS_{DEFAULT,STRICT}
      fsck.h: use "enum object_type" instead of "int"
      fsck.c: rename variables in fsck_set_msg_type() for less confusion
      fsck.c: remove (mostly) redundant append_msg_id() function
      fsck.c: rename remaining fsck_msg_id "id" to "msg_id"
      fsck.c: refactor fsck_msg_type() to limit scope of "int msg_type"
      fsck.h: move FSCK_{FATAL,INFO,ERROR,WARN,IGNORE} into an enum
      fsck.h: re-order and re-assign "enum fsck_msg_type"
      fsck.c: call parse_msg_type() early in fsck_set_msg_type()
      fsck.c: undefine temporary STR macro after use
      fsck.c: give "FOREACH_MSG_ID" a more specific name
      fsck.[ch]: move FOREACH_FSCK_MSG_ID & fsck_msg_id from *.c to *.h
      fsck.c: pass along the fsck_msg_id in the fsck_error callback
      fsck.c: add an fsck_set_msg_type() API that takes enums
      fsck.c: move gitmodules_{found,done} into fsck_options
      fetch-pack: don't needlessly copy fsck_options
      fetch-pack: use file-scope static struct for fsck_options
      fetch-pack: use new fsck API to printing dangling submodules
      Makefile: add QUIET_GEN to "tags" and "TAGS" targets
      git-send-email: replace "map" in void context with "for"
      git-send-email: test full --validate output
      git-send-email: refactor duplicate $? checks into a function
      git-send-email: improve --validate error output
      bash completion: complete CHERRY_PICK_HEAD
      config.c: remove last remnant of GIT_TEST_GETTEXT_POISON
      userdiff style: re-order drivers in alphabetical order
      userdiff style: declare patterns with consistent style
      userdiff style: normalize pascal regex declaration
      userdiff: add and use for_each_userdiff_driver()
      userdiff tests: explicitly test "default" pattern
      userdiff tests: list builtin drivers via test-tool
      userdiff: remove support for "broken" tests
      blame tests: don't rely on t/t4018/ directory
      blame tests: simplify userdiff driver test
      rebase tests: camel-case rebase.rescheduleFailedExec consistently
      rebase: don't override --no-reschedule-failed-exec with config
      Documentation/Makefile: make $(wildcard howto/*.txt) a var
      Documentation/Makefile: make doc.dep dependencies a variable again
      doc lint: Perl "strict" and "warnings" in lint-gitlink.perl
      doc lint: fix bugs in, simplify and improve lint script
      doc lint: lint and fix missing "GIT" end sections
      doc lint: lint relative section order
      docs: fix linting issues due to incorrect relative section order
      svn tests: remove legacy re-setup from init-clone test
      svn tests: refactor away a "set -e" in test body
      tests: remove all uses of test_i18cmp
      usage.c: don't copy/paste the same comment three times
      api docs: document BUG() in api-error-handling.txt
      api docs: document that BUG() emits a trace2 error event
      pretty tests: simplify %aI/%cI date format test
      pretty tests: give --date/format tests a better description
      sparse-index.c: remove set_index_sparse_config()
      streaming.c: avoid forward declarations
      streaming.c: remove enum/function/vtbl indirection
      streaming.c: remove {open,close,read}_method_decl() macros
      streaming.c: stop passing around "object_info *" to open()
      streaming.c: move {open,close,read} from vtable to "struct git_istream"
      Makefile: don't re-define PERL_DEFINES
      Makefile: regenerate perl/build/* if GIT-PERL-DEFINES changes
      Makefile: regenerate *.pm on NO_PERL_CPAN_FALLBACKS change
      perl: use mock i18n functions under NO_GETTEXT=Y
      Makefile: make PERL_DEFINES recursively expanded

Øystein Walle (2):
      transport: respect verbosity when setting upstream
      add: die if both --dry-run and --interactive are given

Đoàn Trần Công Danh (6):
      mailinfo: load default metainfo_charset lazily
      mailinfo: stop parsing options manually
      mailinfo: warn if CRLF found in decoded base64/QP email
      mailinfo: allow squelching quoted CRLF warning
      mailinfo: allow stripping quoted CR without warning
      am: learn to process quoted lines that ends with CRLF


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.32.0-rc0
@ 2021-05-17  7:06  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2021-05-17  7:06 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

An early preview release Git v2.32.0-rc0 is now available for
testing at the usual places.  It is comprised of 545 non-merge
commits since v2.31.0, contributed by 76 people, 29 of which are
new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.32.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.31.0 are as follows.
Welcome to the Git development community!

  Adam Sharafeddine, Andrey Bienkowski, Atharva Raykar, Bruno
  Albuquerque, Chinmoy Chakraborty, Christopher Schenk, Dan
  Moseley, David Emett, Dmitry Torilov, Fabien Terrani, Firmin
  Martin, Georgios Kontaxis, Jerry Zhang, Joachim Kuebart, Joseph
  Vusich, Josh Soref, Julien Richard, Li Linchao, Louis Sautier,
  Luke Shumaker, Nicholas Clark, Peter Oliver, Renato Botelho,
  Robert Foss, RyotaK, Sardorbek Imomaliev, Tom Saeger, Will
  Chandler, and Yiyuan guo.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alex Henrie, Andrzej
  Hunt, Bagas Sanjaya, brian m. carlson, Charvi Mendiratta,
  Christian Couder, Dennis Ameling, Denton Liu, Derrick Stolee,
  Đoàn Trần Công Danh, Elijah Newren, Eric Sunshine,
  Han-Wen Nienhuys, Han Xin, Jeff Hostetler, Jeff King, Johannes
  Schindelin, John Szakmeister, Jonathan Nieder, Jonathan Tan,
  Junio C Hamano, Kyle Meyer, Lénaïc Huard, Luke Diamand,
  Marc Branchaud, Martin Ågren, Matheus Tavares, Nguyễn Thái
  Ngọc Duy, Nipunn Koorapati, Øystein Walle, Patrick Steinhardt,
  Phillip Wood, Rafael Silva, Ramkumar Ramachandra, Ramsay Jones,
  René Scharfe, Sergey Organov, Shubham Verma, Son Luong Ngoc,
  SZEDER Gábor, Taylor Blau, Torsten Bögershausen, Trygve
  Aaberge, Ville Skyttä, and ZheNing Hu.

[*] We are counting not just the authorship contribution but
    issue reporting, testing and reviewing that are recorded
    in the commit trailers.

----------------------------------------------------------------

Git 2.32 Release Notes (draft)
==============================

Backward compatibility notes
----------------------------

 * ".gitattributes", ".gitignore", and ".mailmap" files that are
   symbolic links are ignored.

 * "git apply --3way" used to first attempt a straight application,
   and only fell back to the 3-way merge algorithm when the stright
   application failed.  Starting with this version, the command will
   first try the 3-way merge algorithm and only when it fails (either
   resulting with conflict or the base versions of blobs are missing),
   falls back to the usual patch application.


Updates since v2.31
-------------------

UI, Workflows & Features

 * It does not make sense to make ".gitattributes", ".gitignore" and
   ".mailmap" symlinks, as they are supposed to be usable from the
   object store (think: bare repositories where HEAD:.mailmap etc. are
   used).  When these files are symbolic links, we used to read the
   contents of the files pointed by them by mistake, which has been
   corrected.

 * "git stash show" learned to optionally show untracked part of the
   stash.

 * "git log --format='...'" learned "%(describe)" placeholder.

 * "git repack" so far has been only capable of repacking everything
   under the sun into a single pack (or split by size).  A cleverer
   strategy to reduce the cost of repacking a repository has been
   introduced.

 * The http codepath learned to let the credential layer to cache the
   password used to unlock a certificate that has successfully been
   used.

 * "git commit --fixup=<commit>", which was to tweak the changes made
   to the contents while keeping the original log message intact,
   learned "--fixup=(amend|reword):<commit>", that can be used to
   tweak both the message and the contents, and only the message,
   respectively.

 * When accessing a server with a URL like https://user:pass@site/, we
   did not to fall back to the basic authentication with the
   credential material embedded in the URL after the "Negotiate"
   authentication failed.  Now we do.

 * "git send-email" learned to honor the core.hooksPath configuration.

 * "git format-patch -v<n>" learned to allow a reroll count that is
   not an integer.

 * "git commit" learned "--trailer <key>[=<value>]" option; together
   with the interpret-trailers command, this will make it easier to
   support custom trailers.

 * "git clone --reject-shallow" option fails the clone as soon as we
   notice that we are cloning from a shallow repository.

 * A configuration variable has been added to force tips of certain
   refs to be given a reachability bitmap.

 * "gitweb" learned "e-mail privacy" feature to redact strings that
   look like e-mail addresses on various pages.

 * "git apply --3way" has always been "to fall back to 3-way merge
   only when straight application fails". Swap the order of falling
   back so that 3-way is always attempted first (only when the option
   is given, of course) and then straight patch application is used as
   a fallback when it fails.

 * "git apply" now takes "--3way" and "--cached" at the same time, and
   work and record results only in the index.

 * The command line completion (in contrib/) has learned that
   CHERRY_PICK_HEAD is a possible pseudo-ref.

 * Userdiff patterns for "Scheme" has been added.

 * "git log" learned "--diff-merges=<style>" option, with an
   associated configuration variable log.diffMerges.

 * "git log --format=..." placeholders learned %ah/%ch placeholders to
   request the --date=human output.

 * Replace GIT_CONFIG_NOSYSTEM mechanism to decline from reading the
   system-wide configuration file with GIT_CONFIG_SYSTEM that lets
   users specify from which file to read the system-wide configuration
   (setting it to an empty file would essentially be the same as
   setting NOSYSTEM), and introduce GIT_CONFIG_GLOBAL to override the
   per-user configuration in $HOME/.gitconfig.

 * "git add" and "git rm" learned not to touch those paths that are
   outside of sparse checkout.

 * "git rev-list" learns the "--filter=object:type=<type>" option,
   which can be used to exclude objects of the given kind from the
   packfile generated by pack-objects.

 * The command line completion (in contrib/) for "git stash" has been
   updated.

 * "git subtree" updates.

 * It is now documented that "format-patch" skips merges.

 * Options to "git pack-objects" that take numeric values like
   --window and --depth should not accept negative values; the input
   validation has been tightened.

 * The way the command line specified by the trailer.<token>.command
   configuration variable receives the end-user supplied value was
   both error prone and misleading.  An alternative to achieve the
   same goal in a safer and more intuitive way has been added, as
   the trailer.<token>.cmd configuration variable, to replace it.

 * "git add -i --dry-run" does not dry-run, which was surprising.  The
   combination of options has taught to error out.

 * "git push" learns to discover common ancestor with the receiving
   end over protocol v2.  This will hopefully make "git push" as
   efficient as "git fetch" in avoiding objects from getting
   transferred unnecessarily.

 * "git mailinfo" (hence "git am") learned the "--quoted-cr" option to
   control how lines ending with CRLF wrapped in base64 or qp are
   handled.


Performance, Internal Implementation, Development Support etc.

 * Rename detection rework continues.

 * GIT_TEST_FAIL_PREREQS is a mechanism to skip test pieces with
   prerequisites to catch broken tests that depend on the side effects
   of optional pieces, but did not work at all when negative
   prerequisites were involved.
   (merge 27d578d904 jk/fail-prereq-testfix later to maint).

 * "git diff-index" codepath has been taught to trust fsmonitor status
   to reduce number of lstat() calls.
   (merge 7e5aa13d2c nk/diff-index-fsmonitor later to maint).

 * Reorganize Makefile to allow building git.o and other essential
   objects without extra stuff needed only for testing.

 * Preparatory API changes for parallel checkout.

 * A simple IPC interface gets introduced to build services like
   fsmonitor on top.

 * Fsck API clean-up.

 * SECURITY.md that is facing individual contributors and end users
   has been introduced.  Also a procedure to follow when preparing
   embargoed releases has been spelled out.
   (merge 09420b7648 js/security-md later to maint).

 * Optimize "rev-list --use-bitmap-index --objects" corner case that
   uses negative tags as the stopping points.

 * CMake update for vsbuild.

 * An on-disk reverse-index to map the in-pack location of an object
   back to its object name across multiple packfiles is introduced.

 * Generate [ec]tags under $(QUIET_GEN).

 * Clean-up codepaths that implements "git send-email --validate"
   option and improves the message from it.

 * The last remnant of gettext-poison has been removed.

 * The test framework has been taught to optionally turn the default
   merge strategy to "ort" throughout the system where we use
   three-way merges internally, like cherry-pick, rebase etc.,
   primarily to enhance its test coverage (the strategy has been
   available as an explicit "-s ort" choice).

 * A bit of code clean-up and a lot of test clean-up around userdiff
   area.

 * Handling of "promisor packs" that allows certain objects to be
   missing and lazily retrievable has been optimized (a bit).

 * When packet_write() fails, we gave an extra error message
   unnecessarily, which has been corrected.

 * The checkout machinery has been taught to perform the actual
   write-out of the files in parallel when able.

 * Show errno in the trace output in the error codepath that calls
   read_raw_ref method.

 * Effort to make the command line completion (in contrib/) safe with
   "set -u" continues.

 * Tweak a few tests for "log --format=..." that show timestamps in
   various formats.

 * The reflog expiry machinery has been taught to emit trace events.

 * Over-the-wire protocol learns a new request type to ask for object
   sizes given a list of object names.


Fixes since v2.31
-----------------

 * The fsmonitor interface read from its input without making sure
   there is something to read from.  This bug is new in 2.31
   timeframe.

 * The data structure used by fsmonitor interface was not properly
   duplicated during an in-core merge, leading to use-after-free etc.

 * "git bisect" reimplemented more in C during 2.30 timeframe did not
   take an annotated tag as a good/bad endpoint well.  This regression
   has been corrected.

 * Fix macros that can silently inject unintended null-statements.

 * CALLOC_ARRAY() macro replaces many uses of xcalloc().

 * Update insn in Makefile comments to run fuzz-all target.

 * Fix a corner case bug in "git mv" on case insensitive systems,
   which was introduced in 2.29 timeframe.

 * We had a code to diagnose and die cleanly when a required
   clean/smudge filter is missing, but an assert before that
   unnecessarily fired, hiding the end-user facing die() message.
   (merge 6fab35f748 mt/cleanly-die-upon-missing-required-filter later to maint).

 * Update C code that sets a few configuration variables when a remote
   is configured so that it spells configuration variable names in the
   canonical camelCase.
   (merge 0f1da600e6 ab/remote-write-config-in-camel-case later to maint).

 * A new configuration variable has been introduced to allow choosing
   which version of the generation number gets used in the
   commit-graph file.
   (merge 702110aac6 ds/commit-graph-generation-config later to maint).

 * Perf test update to work better in secondary worktrees.
   (merge 36e834abc1 jk/perf-in-worktrees later to maint).

 * Updates to memory allocation code around the use of pcre2 library.
   (merge c1760352e0 ab/grep-pcre2-allocfix later to maint).

 * "git -c core.bare=false clone --bare ..." would have segfaulted,
   which has been corrected.
   (merge 75555676ad bc/clone-bare-with-conflicting-config later to maint).

 * When "git checkout" removes a path that does not exist in the
   commit it is checking out, it wasn't careful enough not to follow
   symbolic links, which has been corrected.
   (merge fab78a0c3d mt/checkout-remove-nofollow later to maint).

 * A few option description strings started with capital letters,
   which were corrected.
   (merge 5ee90326dc cc/downcase-opt-help later to maint).

 * Plug or annotate remaining leaks that trigger while running the
   very basic set of tests.
   (merge 68ffe095a2 ah/plugleaks later to maint).

 * The hashwrite() API uses a buffering mechanism to avoid calling
   write(2) too frequently. This logic has been refactored to be
   easier to understand.
   (merge ddaf1f62e3 ds/clarify-hashwrite later to maint).

 * "git cherry-pick/revert" with or without "--[no-]edit" did not spawn
   the editor as expected (e.g. "revert --no-edit" after a conflict
   still asked to edit the message), which has been corrected.
   (merge 39edfd5cbc en/sequencer-edit-upon-conflict-fix later to maint).

 * "git daemon" has been tightened against systems that take backslash
   as directory separator.
   (merge 9a7f1ce8b7 rs/daemon-sanitize-dir-sep later to maint).

 * A NULL-dereference bug has been corrected in an error codepath in
   "git for-each-ref", "git branch --list" etc.
   (merge c685450880 jk/ref-filter-segfault-fix later to maint).

 * Streamline the codepath to fix the UTF-8 encoding issues in the
   argv[] and the prefix on macOS.
   (merge c7d0e61016 tb/precompose-prefix-simplify later to maint).

 * The command-line completion script (in contrib/) had a couple of
   references that would have given a warning under the "-u" (nounset)
   option.
   (merge c5c0548d79 vs/completion-with-set-u later to maint).

 * When "git pack-objects" makes a literal copy of a part of existing
   packfile using the reachability bitmaps, its update to the progress
   meter was broken.
   (merge 8e118e8490 jk/pack-objects-bitmap-progress-fix later to maint).

 * The dependencies for config-list.h and command-list.h were broken
   when the former was split out of the latter, which has been
   corrected.
   (merge 56550ea718 sg/bugreport-fixes later to maint).

 * "git push --quiet --set-upstream" was not quiet when setting the
   upstream branch configuration, which has been corrected.
   (merge f3cce896a8 ow/push-quiet-set-upstream later to maint).

 * The prefetch task in "git maintenance" assumed that "git fetch"
   from any remote would fetch all its local branches, which would
   fetch too much if the user is interested in only a subset of
   branches there.
   (merge 32f67888d8 ds/maintenance-prefetch-fix later to maint).

 * Clarify that pathnames recorded in Git trees are most often (but
   not necessarily) encoded in UTF-8.
   (merge 9364bf465d ab/pathname-encoding-doc later to maint).

 * "git --config-env var=val cmd" weren't accepted (only
   --config-env=var=val was).
   (merge c331551ccf ps/config-env-option-with-separate-value later to maint).

 * When the reachability bitmap is in effect, the "do not lose
   recently created objects and those that are reachable from them"
   safety to protect us from races were disabled by mistake, which has
   been corrected.
   (merge 2ba582ba4c jk/prune-with-bitmap-fix later to maint).

 * Cygwin pathname handling fix.
   (merge bccc37fdc7 ad/cygwin-no-backslashes-in-paths later to maint).

 * "git rebase --[no-]reschedule-failed-exec" did not work well with
   its configuration variable, which has been corrected.
   (merge e5b32bffd1 ab/rebase-no-reschedule-failed-exec later to maint).

 * Portability fix for command line completion script (in contrib/).
   (merge f2acf763e2 si/zsh-complete-comment-fix later to maint).

 * "git repack -A -d" in a partial clone unnecessarily loosened
   objects in promisor pack.

 * "git bisect skip" when custom words are used for new/old did not
   work, which has been corrected.

 * A few variants of informational message "Already up-to-date" has
   been rephrased.
   (merge ad9322da03 js/merge-already-up-to-date-message-reword later to maint).

 * "git submodule update --quiet" did not propagate the quiet option
   down to underlying "git fetch", which has been corrected.
   (merge 62af4bdd42 nc/submodule-update-quiet later to maint).

 * Document that our test can use "local" keyword.
   (merge a84fd3bcc6 jc/test-allows-local later to maint).

 * The word-diff mode has been taught to work better with a word
   regexp that can match an empty string.
   (merge 0324e8fc6b pw/word-diff-zero-width-matches later to maint).

 * "git p4" learned to find branch points more efficiently.
   (merge 6b79818bfb jk/p4-locate-branch-point-optim later to maint).

 * When "git update-ref -d" removes a ref that is packed, it left
   empty directories under $GIT_DIR/refs/ for
   (merge 5f03e5126d wc/packed-ref-removal-cleanup later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge f451960708 dl/cat-file-doc-cleanup later to maint).
   (merge 12604a8d0c sv/t9801-test-path-is-file-cleanup later to maint).
   (merge ea7e63921c jr/doc-ignore-typofix later to maint).
   (merge 23c781f173 ps/update-ref-trans-hook-doc later to maint).
   (merge 42efa1231a jk/filter-branch-sha256 later to maint).
   (merge 4c8e3dca6e tb/push-simple-uses-branch-merge-config later to maint).
   (merge 6534d436a2 bs/asciidoctor-installation-hints later to maint).
   (merge 47957485b3 ab/read-tree later to maint).
   (merge 2be927f3d1 ab/diff-no-index-tests later to maint).
   (merge 76593c09bb ab/detox-gettext-tests later to maint).
   (merge 28e29ee38b jc/doc-format-patch-clarify later to maint).
   (merge fc12b6fdde fm/user-manual-use-preface later to maint).
   (merge dba94e3a85 cc/test-helper-bloom-usage-fix later to maint).
   (merge 61a7660516 hn/reftable-tables-doc-update later to maint).
   (merge 81ed96a9b2 jt/fetch-pack-request-fix later to maint).
   (merge 151b6c2dd7 jc/doc-do-not-capitalize-clarification later to maint).
   (merge 9160068ac6 js/access-nul-emulation-on-windows later to maint).
   (merge 7a14acdbe6 po/diff-patch-doc later to maint).
   (merge f91371b948 pw/patience-diff-clean-up later to maint).
   (merge 3a7f0908b6 mt/clean-clean later to maint).
   (merge d4e2d15a8b ab/streaming-simplify later to maint).
   (merge 0e59f7ad67 ah/merge-ort-i18n later to maint).
   (merge e6f68f62e0 ls/typofix later to maint).

----------------------------------------------------------------

Changes since v2.31.0 are as follows:

Adam Dinwoodie (1):
      cygwin: disallow backslashes in file names

Alex Henrie (1):
      merge-ort: split "distinct types" message into two translatable messages

Andrey Bienkowski (1):
      doc: clarify the filename encoding in git diff

Andrzej Hunt (24):
      Makefile: update 'make fuzz-all' docs to reflect modern clang
      symbolic-ref: don't leak shortened refname in check_symref()
      reset: free instead of leaking unneeded ref
      clone: free or UNLEAK further pointers when finished
      worktree: fix leak in dwim_branch()
      init: remove git_init_db_config() while fixing leaks
      init-db: silence template_dir leak when converting to absolute path
      fsmonitor: avoid global-buffer-overflow READ when checking trivial response
      parse-options: convert bitfield values to use binary shift
      parse-options: don't leak alias help messages
      transport: also free remote_refs in transport_disconnect()
      merge-ort: only do pointer arithmetic for non-empty lists
      revision: free remainder of old commit list in limit_list
      wt-status: fix multiple small leaks
      ls-files: free max_prefix when done
      bloom: clear each bloom_key after use
      branch: FREE_AND_NULL instead of NULL'ing real_ref
      builtin/bugreport: don't leak prefixed filename
      builtin/check-ignore: clear_pathspec before returning
      builtin/checkout: clear pending objects after diffing
      mailinfo: also free strbuf lists when clearing mailinfo
      builtin/for-each-ref: free filter and UNLEAK sorting.
      builtin/rebase: release git_format_patch_opt too
      builtin/rm: avoid leaking pathspec and seen

Atharva Raykar (1):
      userdiff: add support for Scheme

Bagas Sanjaya (1):
      INSTALL: note on using Asciidoctor to build doc

Bruno Albuquerque (1):
      object-info: support for retrieving object info

Charvi Mendiratta (23):
      sequencer: pass todo_item to do_pick_commit()
      sequencer: use const variable for commit message comments
      rebase -i: add fixup [-C | -c] command
      t3437: test script for fixup [-C|-c] options in interactive rebase
      rebase -i: teach --autosquash to work with amend!
      doc/git-rebase: add documentation for fixup [-C|-c] options
      sequencer: fixup the datatype of the 'flag' argument
      sequencer: rename a few functions
      rebase -i: clarify and fix 'fixup -c' rebase-todo help
      t/lib-rebase: update the documentation of FAKE_LINES
      t/t3437: fixup here-docs in the 'setup' test
      t/t3437: remove the dependency of 'expected-message' file from tests
      t/t3437: check the author date of fixed up commit
      t/t3437: simplify and document the test helpers
      t/t3437: use named commits in the tests
      t/t3437: fixup the test 'multiple fixup -c opens editor once'
      doc/rebase -i: fix typo in the documentation of 'fixup' command
      sequencer: export and rename subject_length()
      commit: add amend suboption to --fixup to create amend! commit
      commit: add a reword suboption to --fixup
      t7500: add tests for --fixup=[amend|reword] options
      t3437: use --fixup with options to create amend! commit
      doc/git-commit: add documentation for fixup=[amend|reword] options

Chinmoy Chakraborty (1):
      column, range-diff: downcase option description

Christian Couder (1):
      test-bloom: fix missing 'bloom' from usage string

Christopher Schenk (1):
      remote-curl: fall back to basic auth if Negotiate fails

Dennis Ameling (2):
      cmake(install): fix double .exe suffixes
      cmake(install): include vcpkg dlls

Denton Liu (13):
      git-cat-file.txt: monospace args, placeholders and filenames
      git-cat-file.txt: remove references to "sha1"
      stash show: teach --include-untracked and --only-untracked
      stash show: learn stash.showIncludeUntracked
      git-completion.bash: pass $__git_subcommand_idx from __git_main()
      git-completion.bash: extract from else in _git_stash()
      git-completion.bash: use __gitcomp_builtin() in _git_stash()
      git-completion.bash: separate some commands onto their own line
      git-completion.bash: rename to $__git_cmd_idx
      git-completion.bash: use $__git_cmd_idx in more places
      git-completion.bash: consolidate cases in _git_stash()
      t3905: correct test title
      stash show: fix segfault with --{include,only}-untracked

Derrick Stolee (54):
      commit-graph: create local repository pointer
      commit-graph: use config to specify generation type
      csum-file: make hashwrite() more readable
      sparse-index: design doc and format update
      t/perf: add performance test for sparse operations
      t1092: clean up script quoting
      sparse-index: add guard to ensure full index
      sparse-index: implement ensure_full_index()
      t1092: compare sparse-checkout to sparse-index
      test-read-cache: print cache entries with --table
      test-tool: don't force full index
      unpack-trees: ensure full index
      sparse-checkout: hold pattern list in index
      sparse-index: add 'sdir' index extension
      sparse-index: convert from full to sparse
      submodule: sparse-index should not collapse links
      unpack-trees: allow sparse directories
      sparse-index: check index conversion happens
      sparse-index: add index.sparse config option
      sparse-checkout: toggle sparse index from builtin
      sparse-checkout: disable sparse-index
      cache-tree: integrate with sparse directory entries
      sparse-index: loose integration with cache_tree_verify()
      p2000: add sparse-index repos
      maintenance: simplify prefetch logic
      sparse-index: API protection strategy
      *: remove 'const' qualifier for struct index_state
      read-cache: expand on query into sparse-directory entry
      cache: move ensure_full_index() to cache.h
      add: ensure full index
      checkout-index: ensure full index
      checkout: ensure full index
      commit: ensure full index
      difftool: ensure full index
      fsck: ensure full index
      grep: ensure full index
      ls-files: ensure full index
      merge-index: ensure full index
      rm: ensure full index
      stash: ensure full index
      update-index: ensure full index
      dir: ensure full index
      entry: ensure full index
      merge-recursive: ensure full index
      pathspec: ensure full index
      read-cache: ensure full index
      resolve-undo: ensure full index
      revision: ensure full index
      name-hash: don't add directories to name_hash
      sparse-index: expand_to_path()
      name-hash: use expand_to_path()
      fetch: add --prefetch option
      maintenance: use 'git fetch --prefetch'
      maintenance: respect remote.*.skipFetchAll

Elijah Newren (40):
      diffcore-rename: use directory rename guided basename comparisons
      diffcore-rename: provide basic implementation of idx_possible_rename()
      diffcore-rename: add a mapping of destination names to their indices
      Move computation of dir_rename_count from merge-ort to diffcore-rename
      diffcore-rename: add function for clearing dir_rename_count
      diffcore-rename: move dir_rename_counts into dir_rename_info struct
      diffcore-rename: extend cleanup_dir_rename_info()
      diffcore-rename: compute dir_rename_counts in stages
      diffcore-rename: limit dir_rename_counts computation to relevant dirs
      diffcore-rename: compute dir_rename_guess from dir_rename_counts
      diffcore-rename: enable filtering possible rename sources
      merge-ort: precompute subset of sources for which we need rename detection
      merge-ort: add data structures for an alternate tree traversal
      merge-ort: introduce wrappers for alternate tree traversal
      merge-ort: precompute whether directory rename detection is needed
      merge-ort: use relevant_sources to filter possible rename sources
      merge-ort: skip rename detection entirely if possible
      diffcore-rename: avoid doing basename comparisons for irrelevant sources
      diffcore-rename: take advantage of "majority rules" to skip more renames
      merge-ort, diffcore-rename: tweak dirs_removed and relevant_source type
      merge-ort: record the reason that we want a rename for a directory
      diffcore-rename: only compute dir_rename_count for relevant directories
      diffcore-rename: check if we have enough renames for directories early on
      diffcore-rename: add computation of number of unknown renames
      merge-ort: record the reason that we want a rename for a file
      diffcore-rename: determine which relevant_sources are no longer relevant
      merge-ort: use STABLE_QSORT instead of QSORT where required
      merge-ort: add a special minimal index just for renormalization
      merge-ort: have ll_merge() use a special attr_index for renormalization
      merge-ort: let renormalization change modify/delete into clean delete
      merge-ort: support subtree shifting
      t6428: new test for SKIP_WORKTREE handling and conflicts
      merge-ort: implement CE_SKIP_WORKTREE handling with conflicted entries
      t: mark several submodule merging tests as fixed under merge-ort
      merge-ort: write $GIT_DIR/AUTO_MERGE whenever we hit a conflict
      merge-recursive: add a bunch of FIXME comments documenting known bugs
      Revert "merge-ort: ignore the directory rename split conflict for now"
      t6423: mark remaining expected failure under merge-ort as such
      Add testing with merge-ort merge strategy
      sequencer: fix edit handling for cherry-pick and revert messages

Eric Sunshine (1):
      merge(s): apply consistent punctuation to "up to date" messages

Firmin Martin (1):
      user-manual.txt: assign preface an id and a title

Georgios Kontaxis (1):
      gitweb: add "e-mail privacy" feature to redact e-mail addresses

Han Xin (1):
      pack-objects: fix comment of reused_chunk.difference

Han-Wen Nienhuys (3):
      reftable: document an alternate cleanup method on Windows
      refs: print errno for read_raw_ref if GIT_TRACE_REFS is set
      refs/debug: trace into reflog expiry too

Jeff Hostetler (13):
      pkt-line: eliminate the need for static buffer in packet_write_gently()
      simple-ipc: design documentation for new IPC mechanism
      simple-ipc: add win32 implementation
      unix-socket: eliminate static unix_stream_socket() helper function
      unix-socket: add backlog size option to unix_stream_listen()
      unix-socket: disallow chdir() when creating unix domain sockets
      unix-stream-server: create unix domain socket under lock
      convert: make convert_attrs() and convert structs public
      convert: add [async_]convert_to_working_tree_ca() variants
      convert: add get_stream_filter_ca() variant
      convert: add classification for conv_attrs struct
      simple-ipc: add Unix domain socket implementation
      t0052: add simple-ipc tests and t/helper/test-simple-ipc tool

Jeff King (40):
      add open_nofollow() helper
      attr: convert "macro_ok" into a flags field
      exclude: add flags parameter to add_patterns()
      attr: do not respect symlinks for in-tree .gitattributes
      exclude: do not respect symlinks for in-tree .gitignore
      mailmap: do not respect symlinks for in-tree .mailmap
      p5303: add missing &&-chains
      p5303: measure time to repack with keep
      builtin/pack-objects.c: rewrite honor-pack-keep logic
      packfile: add kept-pack cache for find_kept_pack_entry()
      t/perf: handle worktrees as test repos
      t/perf: avoid copying worktree files from test repo
      t7003: test ref rewriting explicitly
      filter-branch: drop multiple-ancestor warning
      filter-branch: drop $_x40 glob
      bisect: peel annotated tags to commits
      t: annotate !PTHREADS tests with !FAIL_PREREQS
      ref-filter: fix NULL check for parse object failure
      midx.c: improve cache locality in midx_pack_order_cmp()
      pack-objects: update "nr_seen" progress based on pack-reused count
      is_promisor_object(): free tree buffer after parsing
      lookup_unknown_object(): take a repository argument
      revision: avoid parsing with --exclude-promisor-objects
      pack-bitmap: clean up include_check after use
      prune: save reachable-from-recent objects with bitmaps
      t5300: modernize basic tests
      t5300: check that we produced expected number of deltas
      pack-objects: clamp negative window size to 0
      t5316: check behavior of pack-objects --depth=0
      pack-objects: clamp negative depth to 0
      docs/format-patch: mention handling of merges
      t7415: remove out-dated comment about translation
      fsck_tree(): fix shadowed variable
      fsck_tree(): wrap some long lines
      t7415: rename to expand scope
      t7450: test verify_path() handling of gitmodules
      t7450: test .gitmodules symlink matching against obscured names
      t0060: test ntfs/hfs-obscured dotfiles
      fsck: warn about symlinked dotfiles we'll open with O_NOFOLLOW
      docs: document symlink restrictions for dot-files

Jerry Zhang (3):
      git-apply: try threeway first when "--3way" is used
      git-apply: allow simultaneous --cached and --3way options
      apply: adjust messages to account for --3way changes

Joachim Kuebart (2):
      git-p4: ensure complex branches are cloned correctly
      git-p4: speed up search for branch parent

Johannes Schindelin (10):
      pkt-line: do not issue flush packets in write_packetized_*()
      pkt-line: add PACKET_READ_GENTLE_ON_READ_ERROR option
      pkt-line: add options argument to read_packetized_to_strbuf()
      fsmonitor: fix memory corruption in some corner cases
      fsmonitor: do not forget to release the token in `discard_index()`
      SECURITY: describe how to report vulnerabilities
      Document how we do embargoed releases
      cmake: support SKIP_DASHED_BUILT_INS
      cmake: add a preparatory work-around to accommodate `vcpkg`
      msvc: avoid calling `access("NUL", flags)`

John Szakmeister (2):
      http: store credential when PKI auth is used
      http: drop the check for an empty proxy password before approving

Jonathan Tan (8):
      t5606: run clone branch name test with protocol v2
      fetch-pack: buffer object-format with other args
      fetch-pack: refactor process_acks()
      fetch-pack: refactor add_haves()
      fetch-pack: refactor command and capability write
      fetch: teach independent negotiation (no packfile)
      send-pack: support push negotiation
      t5601: mark protocol v2-only test

Josh Soref (1):
      merge: fix swapped "up to date" message components

Julien Richard (1):
      doc: .gitignore documentation typofix

Junio C Hamano (25):
      builtin/repack.c: reword comment around pack-objects flags
      xcalloc: use CALLOC_ARRAY() when applicable
      cocci: allow xcalloc(1, size)
      The first batch in 2.32 cycle
      The second batch
      format-patch: give an overview of what a "patch" message is
      The third patch
      Git 2.31.1
      The fourth batch
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      The ninth batch
      doc: clarify "do not capitalize the first word" rule
      The tenth batch
      The eleventh (aka "ort") batch
      The twelfth batch
      The thirteenth batch
      CodingGuidelines: explicitly allow "local" for test scripts
      The fourteenth batch
      The fifteenth batch
      The sixteenth batch
      The seventeenth batch
      Git 2.32-rc0

Kyle Meyer (1):
      config.txt: add missing period

Li Linchao (1):
      builtin/clone.c: add --reject-shallow option

Louis Sautier (1):
      pretty: fix a typo in the documentation for %(trailers)

Luke Shumaker (30):
      .gitignore: ignore 'git-subtree' as a build artifact
      subtree: t7900: update for having the default branch name be 'main'
      subtree: t7900: use test-lib.sh's test_count
      subtree: t7900: use consistent formatting
      subtree: t7900: comment subtree_test_create_repo
      subtree: t7900: use 'test' for string equality
      subtree: t7900: delete some dead code
      subtree: t7900: fix 'verify one file change per commit'
      subtree: t7900: rename last_commit_message to last_commit_subject
      subtree: t7900: add a test for the -h flag
      subtree: t7900: add porcelain tests for 'pull' and 'push'
      subtree: don't have loose code outside of a function
      subtree: more consistent error propagation
      subtree: drop support for git < 1.7
      subtree: use `git merge-base --is-ancestor`
      subtree: use git-sh-setup's `say`
      subtree: use more explicit variable names for cmdline args
      subtree: use "$*" instead of "$@" as appropriate
      subtree: don't fuss with PATH
      subtree: use "^{commit}" instead of "^0"
      subtree: parse revs in individual cmd_ functions
      subtree: remove duplicate check
      subtree: add comments and sanity checks
      subtree: don't let debug and progress output clash
      subtree: have $indent actually affect indentation
      subtree: give the docs a once-over
      subtree: allow --squash to be used with --rejoin
      subtree: allow 'split' flags to be passed to 'push'
      subtree: push: allow specifying a local rev other than HEAD
      subtree: be stricter about validating flags

Lénaïc Huard (1):
      maintenance: fix two memory leaks

Martin Ågren (2):
      git-repack.txt: remove spurious ")"
      pretty-formats.txt: add missing space

Matheus Tavares (30):
      convert: fail gracefully upon missing clean cmd on required filter
      symlinks: update comment on threaded_check_leading_path()
      checkout: don't follow symlinks when removing entries
      entry: extract a header file for entry.c functions
      entry: make fstat_output() and read_blob_entry() public
      entry: extract update_ce_after_write() from write_entry()
      entry: move conv_attrs lookup up to checkout_entry()
      entry: add checkout_entry_ca() taking preloaded conv_attrs
      add: include magic part of pathspec on --refresh error
      t3705: add tests for `git add` in sparse checkouts
      add: make --chmod and --renormalize honor sparse checkouts
      pathspec: allow to ignore SKIP_WORKTREE entries on index matching
      refresh_index(): add flag to ignore SKIP_WORKTREE entries
      add: warn when asked to update SKIP_WORKTREE entries
      rm: honor sparse checkout patterns
      pkt-line: do not report packet write errors twice
      unpack-trees: add basic support for parallel checkout
      parallel-checkout: make it truly parallel
      parallel-checkout: add configuration options
      parallel-checkout: support progress displaying
      parallel-checkout: add design documentation
      make_transient_cache_entry(): optionally alloc from mem_pool
      builtin/checkout.c: complete parallel checkout support
      checkout-index: add parallel checkout support
      parallel-checkout: add tests for basic operations
      parallel-checkout: add tests related to path collisions
      t0028: extract encoding helpers to lib-encoding.sh
      parallel-checkout: add tests related to .gitattributes
      ci: run test round with parallel-checkout enabled
      clean: remove unnecessary variable

Nicholas Clark (1):
      submodule update: silence underlying fetch with "--quiet"

Nipunn Koorapati (3):
      fsmonitor: skip lstat deletion check during git diff-index
      fsmonitor: add assertion that fsmonitor is valid to check_removed
      fsmonitor: add perf test for git diff HEAD

Patrick Steinhardt (17):
      githooks.txt: replace mentions of SHA-1 specific properties
      githooks.txt: clarify documentation on reference-transaction hook
      pack-bitmap: avoid traversal of objects referenced by uninteresting tag
      uploadpack.txt: document implication of `uploadpackfilter.allow`
      revision: mark commit parents as NOT_USER_GIVEN
      list-objects: move tag processing into its own function
      list-objects: support filtering by tag and commit
      list-objects: implement object type filter
      pack-bitmap: implement object type filter
      pack-bitmap: implement combined filter
      rev-list: allow filtering of provided items
      config: rename `git_etc_config()`
      config: unify code paths to get global config paths
      config: allow overriding of global and system configuration
      t1300: fix unset of GIT_CONFIG_NOSYSTEM leaking into subsequent tests
      git.txt: fix synopsis of `--config-env` missing the equals sign
      git: support separate arg for `--config-env`'s value

Peter Oliver (1):
      doc: point to diff attribute in patch format docs

Phillip Wood (6):
      rebase -i: only write fixup-message when it's needed
      sequencer: factor out code to append squash message
      rebase -i: comment out squash!/fixup! subjects from squash message
      word diff: handle zero length matches
      patience diff: remove unnecessary string comparisons
      patience diff: remove unused variable

Rafael Silva (1):
      repack: avoid loosening promisor objects in partial clones

Ramkumar Ramachandra (1):
      Add entry for Ramkumar Ramachandra

Ramsay Jones (1):
      bisect--helper: use BISECT_TERMS in 'bisect skip' command

René Scharfe (12):
      pretty: add %(describe)
      pretty: add merge and exclude options to %(describe)
      t4205: assert %(describe) test coverage
      pretty: document multiple %(describe) being inconsistent
      fix xcalloc() argument order
      archive: expand only a single %(describe) per archive
      git-compat-util.h: drop trailing semicolon from macro definition
      use CALLOC_ARRAY
      vcs-svn: remove header files as well
      block-sha1: drop trailing semicolon from macro definition
      mem-pool: drop trailing semicolon from macro definition
      daemon: sanitize all directory separators

Robert Foss (1):
      git-send-email: Respect core.hooksPath setting

SZEDER Gábor (1):
      Makefile: add missing dependencies of 'config-list.h'

Sardorbek Imomaliev (1):
      work around zsh comment in __git_complete_worktree_paths

Sergey Organov (5):
      diff-merges: introduce --diff-merges=on
      diff-merges: refactor set_diff_merges()
      diff-merges: adapt -m to enable default diff format
      diff-merges: introduce log.diffMerges config variable
      doc/diff-options: document new --diff-merges features

Shubham Verma (1):
      t9801: replace test -f with test_path_is_file

Taylor Blau (28):
      packfile: introduce 'find_kept_pack_entry()'
      revision: learn '--no-kept-objects'
      builtin/pack-objects.c: add '--stdin-packs' option
      builtin/repack.c: add '--geometric' option
      builtin/repack.c: do not repack single packs with --geometric
      t7703: test --geometric repack with loose objects
      builtin/repack.c: assign pack split later
      builtin/repack.c: be more conservative with unsigned overflows
      Documentation/git-push.txt: correct configuration typo
      builtin/pack-objects.c: ignore missing links with --stdin-packs
      builtin/multi-pack-index.c: inline 'flags' with options
      builtin/multi-pack-index.c: don't handle 'progress' separately
      builtin/multi-pack-index.c: define common usage with a macro
      builtin/multi-pack-index.c: split sub-commands
      builtin/multi-pack-index.c: don't enter bogus cmd_mode
      builtin/multi-pack-index.c: display usage on unrecognized command
      t/helper/test-read-midx.c: add '--show-objects'
      pack-bitmap: add 'test_bitmap_commits()' helper
      t/helper/test-bitmap.c: initial commit
      builtin/pack-objects.c: respect 'pack.preferBitmapTips'
      midx: allow marking a pack as preferred
      midx: don't free midx_name early
      midx: keep track of the checksum
      midx: make some functions non-static
      Documentation/technical: describe multi-pack reverse indexes
      pack-revindex: read multi-pack reverse indexes
      pack-write.c: extract 'write_rev_file_order'
      pack-revindex: write multi-pack reverse indexes

Torsten Bögershausen (3):
      git mv foo FOO ; git mv foo bar gave an assert
      precompose_utf8: make precompose_string_if_needed() public
      macOS: precompose startup_info->prefix

Ville Skyttä (2):
      completion: audit and guard $GIT_* against unset use
      completion: avoid aliased command lookup error in nounset mode

Will Chandler (1):
      refs: cleanup directories when deleting packed ref

ZheNing Hu (7):
      commit: add --trailer option
      format-patch: allow a non-integral version numbers
      ref-filter: get rid of show_ref_array_item
      ref-filter: reuse output buffer
      pretty: provide human date format
      docs: correct descript of trailer.<token>.command
      trailer: add new .cmd config option

brian m. carlson (14):
      builtin/init-db: handle bare clones when core.bare set to false
      hash: add an algo member to struct object_id
      Always use oidread to read into struct object_id
      http-push: set algorithm when reading object ID
      hash: add a function to finalize object IDs
      Use the final_oid_fn to finalize hashing of object IDs
      builtin/pack-redundant: avoid casting buffers to struct object_id
      hash: set, copy, and use algo field in struct object_id
      hash: provide per-algorithm null OIDs
      builtin/show-index: set the algorithm for object IDs
      commit-graph: don't store file hashes as struct object_id
      builtin/pack-objects: avoid using struct object_id for pack hash
      hex: default to the_hash_algo on zero algorithm value
      hex: print objects using the hash algorithm member

Ævar Arnfjörð Bjarmason (87):
      grep/pcre2: drop needless assignment + assert() on opt->pcre2
      grep/pcre2: drop needless assignment to NULL
      grep/pcre2: correct reference to grep_init() in comment
      grep/pcre2: prepare to add debugging to pcre2_malloc()
      grep/pcre2: add GREP_PCRE2_DEBUG_MALLOC debug mode
      grep/pcre2: use compile-time PCREv2 version test
      grep/pcre2: use pcre2_maketables_free() function
      grep/pcre2: actually make pcre2 use custom allocator
      grep/pcre2: move back to thread-only PCREv2 structures
      grep/pcre2: move definitions of pcre2_{malloc,free}
      Makefile: guard against TEST_OBJS in the environment
      Makefile: split up long OBJECTS line
      Makefile: sort OBJECTS assignment for subsequent change
      Makefile: split OBJECTS into OBJECTS and GIT_OBJS
      Makefile: add {program,xdiff,test,git,fuzz}-objs & objects targets
      remote: add camel-cased *.tagOpt key, like clone
      remote: write camel-cased *.pushRemote on rename
      fsck.c: refactor and rename common config callback
      show tests: add test for "git show <tree>"
      ls-files tests: add meaningful --with-tree tests
      tree.c API: move read_tree() into builtin/ls-files.c
      ls-files: don't needlessly pass around stage variable
      ls-files: refactor away read_tree()
      archive: stop passing "stage" through read_tree_recursive()
      tree.h API: expose read_tree_1() as read_tree_at()
      tree.h API: simplify read_tree_recursive() signature
      diff --no-index tests: add test for --exit-code
      diff --no-index tests: test mode normalization
      rebase: remove transitory rebase.useBuiltin setting & env
      mktag tests: fix broken "&&" chain
      fsck.h: use designed initializers for FSCK_OPTIONS_{DEFAULT,STRICT}
      fsck.h: use "enum object_type" instead of "int"
      fsck.c: rename variables in fsck_set_msg_type() for less confusion
      fsck.c: remove (mostly) redundant append_msg_id() function
      fsck.c: rename remaining fsck_msg_id "id" to "msg_id"
      fsck.c: refactor fsck_msg_type() to limit scope of "int msg_type"
      fsck.h: move FSCK_{FATAL,INFO,ERROR,WARN,IGNORE} into an enum
      fsck.h: re-order and re-assign "enum fsck_msg_type"
      fsck.c: call parse_msg_type() early in fsck_set_msg_type()
      fsck.c: undefine temporary STR macro after use
      fsck.c: give "FOREACH_MSG_ID" a more specific name
      fsck.[ch]: move FOREACH_FSCK_MSG_ID & fsck_msg_id from *.c to *.h
      fsck.c: pass along the fsck_msg_id in the fsck_error callback
      fsck.c: add an fsck_set_msg_type() API that takes enums
      fsck.c: move gitmodules_{found,done} into fsck_options
      fetch-pack: don't needlessly copy fsck_options
      fetch-pack: use file-scope static struct for fsck_options
      fetch-pack: use new fsck API to printing dangling submodules
      Makefile: add QUIET_GEN to "tags" and "TAGS" targets
      git-send-email: replace "map" in void context with "for"
      git-send-email: test full --validate output
      git-send-email: refactor duplicate $? checks into a function
      git-send-email: improve --validate error output
      bash completion: complete CHERRY_PICK_HEAD
      config.c: remove last remnant of GIT_TEST_GETTEXT_POISON
      userdiff style: re-order drivers in alphabetical order
      userdiff style: declare patterns with consistent style
      userdiff style: normalize pascal regex declaration
      userdiff: add and use for_each_userdiff_driver()
      userdiff tests: explicitly test "default" pattern
      userdiff tests: list builtin drivers via test-tool
      userdiff: remove support for "broken" tests
      blame tests: don't rely on t/t4018/ directory
      blame tests: simplify userdiff driver test
      rebase tests: camel-case rebase.rescheduleFailedExec consistently
      rebase: don't override --no-reschedule-failed-exec with config
      Documentation/Makefile: make $(wildcard howto/*.txt) a var
      Documentation/Makefile: make doc.dep dependencies a variable again
      doc lint: Perl "strict" and "warnings" in lint-gitlink.perl
      doc lint: fix bugs in, simplify and improve lint script
      doc lint: lint and fix missing "GIT" end sections
      doc lint: lint relative section order
      docs: fix linting issues due to incorrect relative section order
      svn tests: remove legacy re-setup from init-clone test
      svn tests: refactor away a "set -e" in test body
      tests: remove all uses of test_i18cmp
      usage.c: don't copy/paste the same comment three times
      api docs: document BUG() in api-error-handling.txt
      api docs: document that BUG() emits a trace2 error event
      pretty tests: simplify %aI/%cI date format test
      pretty tests: give --date/format tests a better description
      sparse-index.c: remove set_index_sparse_config()
      streaming.c: avoid forward declarations
      streaming.c: remove enum/function/vtbl indirection
      streaming.c: remove {open,close,read}_method_decl() macros
      streaming.c: stop passing around "object_info *" to open()
      streaming.c: move {open,close,read} from vtable to "struct git_istream"

Øystein Walle (2):
      transport: respect verbosity when setting upstream
      add: die if both --dry-run and --interactive are given

Đoàn Trần Công Danh (6):
      mailinfo: load default metainfo_charset lazily
      mailinfo: stop parsing options manually
      mailinfo: warn if CRLF found in decoded base64/QP email
      mailinfo: allow squelching quoted CRLF warning
      mailinfo: allow stripping quoted CR without warning
      am: learn to process quoted lines that ends with CRLF


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.31.0
@ 2021-03-15 19:30  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2021-03-15 19:30 UTC (permalink / raw)
  To: git

The latest feature release Git v2.31.0 is now available at the
usual places.  It is comprised of 679 non-merge commits since
v2.30.0, contributed by 85 people, 23 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.31.0'
tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.30.0 are as follows.
Welcome to the Git development community!

  Aleksey Kliger, Andreas Bühmann, Andrew Klotz, Andrzej Hunt,
  Antonio Russo, Arnaud Morin, Bagas Sanjaya, Christian Walther,
  Clement Moyroud, Daniel Levin, Daniel Troger, Harold Kim,
  Jacob Vosmaer, LeSeulArtichaut, Mikhail Klyushin, Neeraj Singh,
  Sangeeta Jain, Seth House, Shubham Verma, Utku Gultopu, Vasyl
  Vavrychuk, Vojtěch Knyttl, and ZheNing Hu.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Abhishek Kumar, Adam Dinwoodie, Ævar Arnfjörð Bjarmason,
  Alexander Shopov, Alex Henrie, Arusekk, brian m. carlson,
  Christian Couder, Christopher Diaz Riveros, Dana Dahlstrom,
  Daniel Santos, Denton Liu, Derrick Stolee, Dimitriy Ryazantcev,
  Elijah Newren, Emir Sarı, Eric Sunshine, Eric Wong, Felipe
  Contreras, Han-Wen Nienhuys, Hariom Verma, Heba Waly, Jean-Noël
  Avila, Jeff Hostetler, Jeff King, Jiang Xin, Joey Salazar,
  Johannes Schindelin, Johannes Sixt, Jonathan Nieder, Jonathan
  Tan, Jordi Mas, Junio C Hamano, Kevin Daudt, Kevin Willford,
  Lars Schneider, Martin Ågren, Martin von Zweigbergk, Matheus
  Tavares, Matthias Rüster, Michael Haggerty, Patrick Steinhardt,
  Paul Jolly, Peter Kaestle, Peter Krefting, Phil Hord, Philippe
  Blain, Phillip Szelat, Phillip Wood, Pranit Bauva, Pratyush
  Yadav, Rafael Silva, Ralf Thielow, René Scharfe, Ross Light,
  Sergey Organov, SZEDER Gábor, Taylor Blau, Thomas Ackermann,
  Torsten Bögershausen, Trần Ngọc Quân, and Yi-Jyun Pan.

[*] We are counting not just the authorship contribution but
    issue reporting, testing and reviewing that are recorded
    in the commit trailers.

----------------------------------------------------------------

Git 2.31 Release Notes
======================

Updates since v2.30
-------------------

Backward incompatible and other important changes

 * The "pack-redundant" command, which has been left stale with almost
   unusable performance issues, now warns loudly when it gets used, as
   we no longer want to recommend its use (instead just "repack -d"
   instead).

 * The development community has adopted Contributor Covenant v2.0 to
   update from v1.4 that we have been using.

 * The support for deprecated PCRE1 library has been dropped.

 * Fixes for CVE-2021-21300 in Git 2.30.2 (and earlier) is included.


UI, Workflows & Features

 * The "--format=%(trailers)" mechanism gets enhanced to make it
   easier to design output for machine consumption.

 * When a user does not tell "git pull" to use rebase or merge, the
   command gives a loud message telling a user to choose between
   rebase or merge but creates a merge anyway, forcing users who would
   want to rebase to redo the operation.  Fix an early part of this
   problem by tightening the condition to give the message---there is
   no reason to stop or force the user to choose between rebase or
   merge if the history fast-forwards.

 * The configuration variable 'core.abbrev' can be set to 'no' to
   force no abbreviation regardless of the hash algorithm.

 * "git rev-parse" can be explicitly told to give output as absolute
   or relative path with the `--path-format=(absolute|relative)` option.

 * Bash completion (in contrib/) update to make it easier for
   end-users to add completion for their custom "git" subcommands.

 * "git maintenance" learned to drive scheduled maintenance on
   platforms whose native scheduling methods are not 'cron'.

 * After expiring a reflog and making a single commit, the reflog for
   the branch would record a single entry that knows both @{0} and
   @{1}, but we failed to answer "what commit were we on?", i.e. @{1}

 * "git bundle" learns "--stdin" option to read its refs from the
   standard input.  Also, it now does not lose refs whey they point
   at the same object.

 * "git log" learned a new "--diff-merges=<how>" option.

 * "git ls-files" can and does show multiple entries when the index is
   unmerged, which is a source for confusion unless -s/-u option is in
   use.  A new option --deduplicate has been introduced.

 * `git worktree list` now annotates worktrees as prunable, shows
   locked and prunable attributes in --porcelain mode, and gained
   a --verbose option.

 * "git clone" tries to locally check out the branch pointed at by
   HEAD of the remote repository after it is done, but the protocol
   did not convey the information necessary to do so when copying an
   empty repository.  The protocol v2 learned how to do so.

 * There are other ways than ".." for a single token to denote a
   "commit range", namely "<rev>^!" and "<rev>^-<n>", but "git
   range-diff" did not understand them.

 * The "git range-diff" command learned "--(left|right)-only" option
   to show only one side of the compared range.

 * "git mergetool" feeds three versions (base, local and remote) of
   a conflicted path unmodified.  The command learned to optionally
   prepare these files with unconflicted parts already resolved.

 * The .mailmap is documented to be read only from the root level of a
   working tree, but a stray file in a bare repository also was read
   by accident, which has been corrected.

 * "git maintenance" tool learned a new "pack-refs" maintenance task.

 * The error message given when a configuration variable that is
   expected to have a boolean value has been improved.

 * Signed commits and tags now allow verification of objects, whose
   two object names (one in SHA-1, the other in SHA-256) are both
   signed.

 * "git rev-list" command learned "--disk-usage" option.

 * "git {diff,log} --{skip,rotate}-to=<path>" allows the user to
   discard diff output for early paths or move them to the end of the
   output.

 * "git difftool" learned "--skip-to=<path>" option to restart an
   interrupted session from an arbitrary path.

 * "git grep" has been tweaked to be limited to the sparse checkout
   paths.

 * "git rebase --[no-]fork-point" gained a configuration variable
   rebase.forkPoint so that users do not have to keep specifying a
   non-default setting.


Performance, Internal Implementation, Development Support etc.

 * A 3-year old test that was not testing anything useful has been
   corrected.

 * Retire more names with "sha1" in it.

 * The topological walk codepath is covered by new trace2 stats.

 * Update the Code-of-conduct to version 2.0 from the upstream (we've
   been using version 1.4).

 * "git mktag" validates its input using its own rules before writing
   a tag object---it has been updated to share the logic with "git
   fsck".

 * Two new ways to feed configuration variable-value pairs via
   environment variables have been introduced, and the way
   GIT_CONFIG_PARAMETERS encodes variable/value pairs has been tweaked
   to make it more robust.

 * Tests have been updated so that they do not to get affected by the
   name of the default branch "git init" creates.

 * "git fetch" learns to treat ref updates atomically in all-or-none
   fashion, just like "git push" does, with the new "--atomic" option.

 * The peel_ref() API has been replaced with peel_iterated_oid().

 * The .use_shell flag in struct child_process that is passed to
   run_command() API has been clarified with a bit more documentation.

 * Document, clean-up and optimize the code around the cache-tree
   extension in the index.

 * The ls-refs protocol operation has been optimized to narrow the
   sub-hierarchy of refs/ it walks to produce response.

 * When removing many branches and tags, the code used to do so one
   ref at a time.  There is another API it can use to delete multiple
   refs, and it makes quite a lot of performance difference when the
   refs are packed.

 * The "pack-objects" command needs to iterate over all the tags when
   automatic tag following is enabled, but it actually iterated over
   all refs and then discarded everything outside "refs/tags/"
   hierarchy, which was quite wasteful.

 * A perf script was made more portable.

 * Our setting of GitHub CI test jobs were a bit too eager to give up
   once there is even one failure found.  Tweak the knob to allow
   other jobs keep running even when we see a failure, so that we can
   find more failures in a single run.

 * We've carried compatibility codepaths for compilers without
   variadic macros for quite some time, but the world may be ready for
   them to be removed.  Force compilation failure on exotic platforms
   where variadic macros are not available to find out who screams in
   such a way that we can easily revert if it turns out that the world
   is not yet ready.

 * Code clean-up to ensure our use of hashtables using object names as
   keys use the "struct object_id" objects, not the raw hash values.

 * Lose the debugging aid that may have been useful in the past, but
   no longer is, in the "grep" codepaths.

 * Some pretty-format specifiers do not need the data in commit object
   (e.g. "%H"), but we were over-eager to load and parse it, which has
   been made even lazier.

 * Get rid of "GETTEXT_POISON" support altogether, which may or may
   not be controversial.

 * Introduce an on-disk file to record revindex for packdata, which
   traditionally was always created on the fly and only in-core.

 * The commit-graph learned to use corrected commit dates instead of
   the generation number to help topological revision traversal.

 * Piecemeal of rewrite of "git bisect" in C continues.

 * When a pager spawned by us exited, the trace log did not record its
   exit status correctly, which has been corrected.

 * Removal of GIT_TEST_GETTEXT_POISON continues.

 * The code to implement "git merge-base --independent" was poorly
   done and was kept from the very beginning of the feature.

 * Preliminary changes to fsmonitor integration.

 * Performance improvements for rename detection.

 * The common code to deal with "chunked file format" that is shared
   by the multi-pack-index and commit-graph files have been factored
   out, to help codepaths for both filetypes to become more robust.

 * The approach to "fsck" the incoming objects in "index-pack" is
   attractive for performance reasons (we have them already in core,
   inflated and ready to be inspected), but fundamentally cannot be
   applied fully when we receive more than one pack stream, as a tree
   object in one pack may refer to a blob object in another pack as
   ".gitmodules", when we want to inspect blobs that are used as
   ".gitmodules" file, for example.  Teach "index-pack" to emit
   objects that must be inspected later and check them in the calling
   "fetch-pack" process.

 * The logic to handle "trailer" related placeholders in the
   "--format=" mechanisms in the "log" family and "for-each-ref"
   family is getting unified.

 * Raise the buffer size used when writing the index file out from
   (obviously too small) 8kB to (clearly sufficiently large) 128kB.

 * It is reported that open() on some platforms (e.g. macOS Big Sur)
   can return EINTR even though our timers are set up with SA_RESTART.
   A workaround has been implemented and enabled for macOS to rerun
   open() transparently from the caller when this happens.


Fixes since v2.30
-----------------

 * Diagnose command line error of "git rebase" early.

 * Clean up option descriptions in "git cmd --help".

 * "git stash" did not work well in a sparsely checked out working
   tree.

 * Some tests expect that "ls -l" output has either '-' or 'x' for
   group executable bit, but setgid bit can be inherited from parent
   directory and make these fields 'S' or 's' instead, causing test
   failures.

 * "git for-each-repo --config=<var> <cmd>" should not run <cmd> for
   any repository when the configuration variable <var> is not defined
   even once.

 * Fix 2.29 regression where "git mergetool --tool-help" fails to list
   all the available tools.

 * Fix for procedure to building CI test environment for mac.

 * The implementation of "git branch --sort" wrt the detached HEAD
   display has always been hacky, which has been cleaned up.

 * Newline characters in the host and path part of git:// URL are
   now forbidden.

 * "git diff" showed a submodule working tree with untracked cruft as
   "Submodule commit <objectname>-dirty", but a natural expectation is
   that the "-dirty" indicator would align with "git describe --dirty",
   which does not consider having untracked files in the working tree
   as source of dirtiness.  The inconsistency has been fixed.

 * When more than one commit with the same patch ID appears on one
   side, "git log --cherry-pick A...B" did not exclude them all when a
   commit with the same patch ID appears on the other side.  Now it
   does.

 * Documentation for "git fsck" lost stale bits that has become
   incorrect.

 * Doc fix for packfile URI feature.

 * When "git rebase -i" processes "fixup" insn, there is no reason to
   clean up the commit log message, but we did the usual stripspace
   processing.  This has been corrected.
   (merge f7d42ceec5 js/rebase-i-commit-cleanup-fix later to maint).

 * Fix in passing custom args from "git clone" to "upload-pack" on the
   other side.
   (merge ad6b5fefbd jv/upload-pack-filter-spec-quotefix later to maint).

 * The command line completion (in contrib/) completed "git branch -d"
   with branch names, but "git branch -D" offered tagnames in addition,
   which has been corrected.  "git branch -M" had the same problem.
   (merge 27dc071b9a jk/complete-branch-force-delete later to maint).

 * When commands are started from a subdirectory, they may have to
   compare the path to the subdirectory (called prefix and found out
   from $(pwd)) with the tracked paths.  On macOS, $(pwd) and
   readdir() yield decomposed path, while the tracked paths are
   usually normalized to the precomposed form, causing mismatch.  This
   has been fixed by taking the same approach used to normalize the
   command line arguments.
   (merge 5c327502db tb/precompose-prefix-too later to maint).

 * Even though invocations of "die()" were logged to the trace2
   system, "BUG()"s were not, which has been corrected.
   (merge 0a9dde4a04 jt/trace2-BUG later to maint).

 * "git grep --untracked" is meant to be "let's ALSO find in these
   files on the filesystem" when looking for matches in the working
   tree files, and does not make any sense if the primary search is
   done against the index, or the tree objects.  The "--cached" and
   "--untracked" options have been marked as mutually incompatible.
   (merge 0c5d83b248 mt/grep-cached-untracked later to maint).

 * Fix "git fsck --name-objects" which apparently has not been used by
   anybody who is motivated enough to report breakage.
   (merge e89f89361c js/fsck-name-objects-fix later to maint).

 * Avoid individual tests in t5411 from getting affected by each other
   by forcing them to use separate output files during the test.
   (merge 822ee894f6 jx/t5411-unique-filenames later to maint).

 * Test to make sure "git rev-parse one-thing one-thing" gives
   the same thing twice (when one-thing is --since=X).
   (merge a5cdca4520 ew/rev-parse-since-test later to maint).

 * When certain features (e.g. grafts) used in the repository are
   incompatible with the use of the commit-graph, we used to silently
   turned commit-graph off; we now tell the user what we are doing.
   (merge c85eec7fc3 js/commit-graph-warning later to maint).

 * Objects that lost references can be pruned away, even when they
   have notes attached to it (and these notes will become dangling,
   which in turn can be pruned with "git notes prune").  This has been
   clarified in the documentation.
   (merge fa9ab027ba mz/doc-notes-are-not-anchors later to maint).

 * The error codepath around the "--temp/--prefix" feature of "git
   checkout-index" has been improved.
   (merge 3f7ba60350 mt/checkout-index-corner-cases later to maint).

 * The "git maintenance register" command had trouble registering bare
   repositories, which had been corrected.

 * A handful of multi-word configuration variable names in
   documentation that are spelled in all lowercase have been corrected
   to use the more canonical camelCase.
   (merge 7dd0eaa39c dl/doc-config-camelcase later to maint).

 * "git push $there --delete ''" should have been diagnosed as an
   error, but instead turned into a matching push, which has been
   corrected.
   (merge 20e416409f jc/push-delete-nothing later to maint).

 * Test script modernization.
   (merge 488acf15df sv/t7001-modernize later to maint).

 * An under-allocation for the untracked cache data has been corrected.
   (merge 6347d649bc jh/untracked-cache-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge e3f5da7e60 sg/t7800-difftool-robustify later to maint).
   (merge 9d336655ba js/doc-proto-v2-response-end later to maint).
   (merge 1b5b8cf072 jc/maint-column-doc-typofix later to maint).
   (merge 3a837b58e3 cw/pack-config-doc later to maint).
   (merge 01168a9d89 ug/doc-commit-approxidate later to maint).
   (merge b865734760 js/params-vs-args later to maint).

----------------------------------------------------------------

Changes since v2.30.0 are as follows:

Abhishek Kumar (11):
      commit-graph: fix regression when computing Bloom filters
      revision: parse parent in indegree_walk_step()
      commit-graph: consolidate fill_commit_graph_info
      t6600-test-reach: generalize *_three_modes
      commit-graph: add a slab to store topological levels
      commit-graph: return 64-bit generation number
      commit-graph: implement corrected commit date
      commit-graph: implement generation data chunk
      commit-graph: use generation v2 only if entire chain does
      commit-reach: use corrected commit dates in paint_down_to_common()
      doc: add corrected commit date info

Adam Dinwoodie (1):
      t4129: fix setfacl-related permissions failure

Alex Henrie (1):
      rebase: add a config option for --no-fork-point

Alexander Shopov (1):
      l10n: bg.po: Updated Bulgarian translation (5104t)

Andrew Klotz (1):
      config: improve error message for boolean config

Andrzej Hunt (1):
      commit-graph: avoid leaking topo_levels slab in write_commit_graph()

Antonio Russo (1):
      t6016: move to lib-log-graph.sh framework

Arusekk (1):
      l10n: pl.po: Update translation

Bagas Sanjaya (2):
      l10n: start Indonesian translation
      l10n: Add translation team info

Christian Couder (3):
      fetch-pack: rename helper to create_promisor_file()
      fetch-pack: refactor writing promisor file
      pack-write: die on error in write_promisor_file()

Christian Walther (1):
      doc: mention bigFileThreshold for packing

Christopher Diaz Riveros (1):
      l10n: es: 2.31.0 round 2

Daniel Levin (1):
      git-p4: fix syncing file types with pattern

Daniel Santos (1):
      l10n: pt_PT: add Portuguese translations part 1

Denton Liu (12):
      refs: factor out set_read_ref_cutoffs()
      refs: allow @{n} to work with n-sized reflog
      test-lib-functions.sh: fix usage for test_commit()
      t4203: stop losing return codes of git commands
      git-stash.txt: be explicit about subcommand options
      t3905: remove spaces after redirect operators
      t3905: move all commands into test cases
      t3905: remove nested git in command substitution
      t3905: replace test -s with test_file_not_empty
      t3905: use test_cmp() to check file contents
      stash: declare ref_stash as an array
      i18n.txt: camel case and monospace "i18n.commitEncoding"

Derrick Stolee (65):
      maintenance: extract platform-specific scheduling
      maintenance: include 'cron' details in docs
      pack-bitmap-write: fill bitmap with commit history
      bitmap: implement bitmap_is_subset()
      commit: implement commit_list_contains()
      t5310: add branch-based checks
      pack-bitmap-write: rename children to reverse_edges
      pack-bitmap-write: build fewer intermediate bitmaps
      pack-bitmap-write: use existing bitmaps
      pack-bitmap-write: relax unique revwalk condition
      pack-bitmap-write: better reuse bitmaps
      revision: trace topo-walk statistics
      tree-walk: report recursion counts
      unpack-trees: add trace2 regions
      cache-tree: use trace2 in cache_tree_update()
      maintenance: use launchctl on macOS
      maintenance: use Windows scheduled tasks
      for-each-repo: do nothing on empty config
      cache-tree: trace regions for I/O
      cache-tree: trace regions for prime_cache_tree
      index-format: use 'cache tree' over 'cached tree'
      index-format: update preamble to cache tree extension
      index-format: discuss recursion of cache-tree better
      cache-tree: speed up consecutive path comparisons
      maintenance: set log.excludeDecoration durin prefetch
      t7900: clean up some broken refs
      cache-tree: clean up cache_tree_update()
      cache-tree: simplify verify_cache() prototype
      cache-tree: extract subtree_pos()
      fsmonitor: de-duplicate BUG()s around dirty bits
      repository: add repo reference to index_state
      name-hash: use trace2 regions for init
      sparse-checkout: load sparse-checkout patterns
      test-lib: test_region looks for trace2 regions
      t1092: test interesting sparse-checkout scenarios
      commit-reach: reduce requirements for remove_redundant()
      commit-graph: use repo_parse_commit
      commit-graph: always parse before commit_graph_data_at()
      commit-graph: validate layers for generation data
      commit-graph: compute generations separately
      commit-graph: be extra careful about mixed generations
      commit-graph: prepare commit graph
      commit-graph: anonymize data in chunk_write_fn
      maintenance: add pack-refs task
      maintenance: incremental strategy runs pack-refs weekly
      chunk-format: create chunk format write API
      commit-graph: use chunk-format write API
      midx: rename pack_info to write_midx_context
      midx: use context in write_midx_pack_names()
      midx: add entries to write_midx_context
      midx: add pack_perm to write_midx_context
      midx: add num_large_offsets to write_midx_context
      midx: return success/failure in chunk write methods
      midx: drop chunk progress during write
      midx: use chunk-format API in write_midx_internal()
      chunk-format: create read chunk API
      commit-graph: use chunk-format read API
      midx: use chunk-format read API
      midx: use 64-bit multiplication for chunk sizes
      chunk-format: restore duplicate chunk checks
      chunk-format: add technical docs
      commit-reach: use one walk in remove_redundant()
      commit-reach: move compare_commits_by_gen
      commit-reach: use heuristic in remove_redundant()
      commit-reach: stale commits may prune generation further

Dimitriy Ryazantcev (1):
      l10n: ru.po: update Russian translation

Elijah Newren (93):
      t7012: add a testcase demonstrating stash apply bugs in sparse checkouts
      stash: remove unnecessary process forking
      stash: fix stash application in sparse-checkouts
      merge-ort: setup basic internal data structures
      merge-ort: add some high-level algorithm structure
      merge-ort: port merge_start() from merge-recursive
      merge-ort: use histogram diff
      merge-ort: add an err() function similar to one from merge-recursive
      merge-ort: implement a very basic collect_merge_info()
      merge-ort: avoid repeating fill_tree_descriptor() on the same tree
      merge-ort: compute a few more useful fields for collect_merge_info
      merge-ort: record stage and auxiliary info for every path
      merge-ort: avoid recursing into identical trees
      merge-ort: add a preliminary simple process_entries() implementation
      merge-ort: have process_entries operate in a defined order
      merge-ort: step 1 of tree writing -- record basenames, modes, and oids
      merge-ort: step 2 of tree writing -- function to create tree object
      merge-ort: step 3 of tree writing -- handling subdirectories as we go
      merge-ort: basic outline for merge_switch_to_result()
      merge-ort: add implementation of checkout()
      tree: enable cmp_cache_name_compare() to be used elsewhere
      merge-ort: add implementation of record_conflicted_index_entries()
      merge-ort: free data structures in merge_finalize()
      merge-ort: add a few includes
      merge-ort: add a clear_internal_opts helper
      merge-ort: add a path_conflict field to merge_options_internal
      merge-ort: add a paths_to_free field to merge_options_internal
      merge-ort: add function grouping comments
      merge-ort: add die-not-implemented stub handle_content_merge() function
      merge-ort: add modify/delete handling and delayed output processing
      merge-ort: add basic data structures for handling renames
      merge-ort: add initial outline for basic rename detection
      merge-ort: implement detect_regular_renames()
      merge-ort: implement compare_pairs() and collect_renames()
      merge-ort: add basic outline for process_renames()
      diffcore-rename: rename num_create to num_destinations
      diffcore-rename: avoid usage of global in too_many_rename_candidates()
      diffcore-rename: simplify limit check
      diffcore-rename: reduce jumpiness in progress counters
      t4058: add more tests and documentation for duplicate tree entry handling
      t4058: explore duplicate tree entry handling in a bit more detail
      diffcore-rename: simplify and accelerate register_rename_src()
      diffcore-rename: accelerate rename_dst setup
      merge-ort: add implementation of both sides renaming identically
      merge-ort: add implementation of both sides renaming differently
      merge-ort: add implementation of rename/delete conflicts
      merge-ort: add implementation of rename collisions
      merge-ort: add implementation of normal rename handling
      merge-ort: add implementation of type-changed rename handling
      commit: move reverse_commit_list() from merge-recursive
      merge-ort: copy a few small helper functions from merge-recursive.c
      merge-ort: make clear_internal_opts() aware of partial clearing
      merge-ort: implement merge_incore_recursive()
      merge-ort: handle D/F conflict where directory disappears due to merge
      merge-ort: handle directory/file conflicts that remain
      merge-ort: implement unique_path() helper
      merge-ort: handle book-keeping around two- and three-way content merge
      merge-ort: flesh out implementation of handle_content_merge()
      merge-ort: copy and adapt merge_3way() from merge-recursive.c
      merge-ort: copy and adapt merge_submodule() from merge-recursive.c
      merge-ort: implement format_commit()
      merge-ort: copy find_first_merges() implementation from merge-recursive.c
      merge-ort: add handling for different types of files at same path
      diffcore-rename: remove unnecessary duplicate entry checks
      merge-ort: add new data structures for directory rename detection
      merge-ort: initialize and free new directory rename data structures
      merge-ort: collect which directories are removed in dirs_removed
      merge-ort: add outline for computing directory renames
      merge-ort: add outline of get_provisional_directory_renames()
      merge-ort: copy get_renamed_dir_portion() from merge-recursive.c
      merge-ort: implement compute_rename_counts()
      merge-ort: implement handle_directory_level_conflicts()
      merge-ort: modify collect_renames() for directory rename handling
      merge-ort: implement compute_collisions()
      merge-ort: implement apply_dir_rename() and check_dir_renamed()
      merge-ort: implement check_for_directory_rename()
      merge-ort: implement handle_path_level_conflicts()
      merge-ort: add a new toplevel_dir field
      merge-ort: implement apply_directory_rename_modifications()
      merge-ort: process_renames() now needs more defensiveness
      merge-ort: fix a directory rename detection bug
      merge-ort: fix massive leak
      merge-ort: ignore the directory rename split conflict for now
      merge-ort: begin performance work; instrument with trace2_region_* calls
      diffcore-rename: no point trying to find a match better than exact
      diffcore-rename: filter rename_src list when possible
      t4001: add a test comparing basename similarity and content similarity
      diffcore-rename: compute basenames of source and dest candidates
      diffcore-rename: complete find_basename_matches()
      diffcore-rename: guide inexact rename detection based on basenames
      gitdiffcore doc: mention new preliminary step for rename detection
      merge-ort: call diffcore_rename() directly
      Documentation/RelNotes: improve release note for rename detection work

Emir Sarı (2):
      l10n: tr: v2.31.0-rc0
      l10n: tr: v2.31.0-rc1

Eric Sunshine (3):
      worktree: teach `repair` to fix multi-directional breakage
      t/perf: avoid unnecessary test_export() recursion
      maintenance: fix incorrect `maintenance.repo` path with bare repository

Eric Wong (2):
      core.abbrev=no disables abbreviations
      t1500: ensure current --since= behavior remains

Felipe Contreras (8):
      pull: refactor fast-forward check
      pull: give the advice for choosing rebase/merge much later
      pull: display default warning only when non-ff
      test: bisect-porcelain: fix location of files
      completion: bash: add __git_have_func helper
      completion: bash: improve function detection
      test: completion: add tests for __git_complete
      completion: add proper public __git_complete

Han-Wen Nienhuys (1):
      doc/reftable: document how to handle windows

Hariom Verma (4):
      t6300: use function to test trailer options
      pretty.c: refactor trailer logic to `format_set_trailers_options()`
      pretty.c: capture invalid trailer argument
      ref-filter: use pretty.c logic for trailers

Jacob Vosmaer (4):
      builtin/pack-objects.c: avoid iterating all refs
      ls-refs.c: initialize 'prefixes' before using it
      upload-pack.c: fix filter spec quoting bug
      t5544: clarify 'hook works with partial clone' test

Jean-Noël Avila (2):
      l10n: fr: v2.31.0 rnd 1
      l10n: fr: v2.31 rnd 2

Jeff Hostetler (11):
      p7519: do not rely on "xargs -d" in test
      p7519: fix watchman watch-list test on Windows
      p7519: move watchman cleanup earlier in the test
      p7519: add trace logging during perf test
      preload-index: log the number of lstat calls to trace2
      read-cache: log the number of lstat calls to trace2
      read-cache: log the number of scanned files to trace2
      fsmonitor: log invocation of FSMonitor hook to trace2
      fsmonitor: log FSMN token when reading and writing the index
      fsmonitor: refactor initialization of fsmonitor_last_update token
      dir: fix malloc of root untracked_cache_dir

Jeff King (45):
      pack-bitmap: fix header size check
      pack-bitmap: bounds-check size of cache extension
      t5310: drop size of truncated ewah bitmap
      rev-list: die when --test-bitmap detects a mismatch
      ewah: factor out bitmap growth
      ewah: make bitmap growth less aggressive
      ewah: implement bitmap_or()
      ewah: add bitmap_dup() function
      pack-bitmap-write: reimplement bitmap writing
      pack-bitmap-write: pass ownership of intermediate bitmaps
      pack-bitmap-write: ignore BITMAP_FLAG_REUSE
      git_connect_git(): forbid newlines in host and path
      fsck: reject .gitmodules git:// urls with newlines
      t5516: loosen "not our ref" error check
      patch-ids: handle duplicate hashmap entries
      quote: make sq_dequote_step() a public function
      for_each_object_in_pack(): clarify pack vs index ordering
      config: parse more robust format in GIT_CONFIG_PARAMETERS
      refs: switch peel_ref() to peel_iterated_oid()
      run-command: document use_shell option
      git-svn tests: rewrite brittle tests to use "--[no-]merges".
      git-compat-util: always enable variadic macros
      commit_graft_pos(): take an oid instead of a bare hash
      rerere: check dirname format while iterating rr_cache directory
      rerere: tighten rr-cache dirname check
      rerere: use strmap to store rerere directories
      hash_pos(): convert to oid_pos()
      oid_pos(): access table through const pointers
      t0000: keep clean-up tests together
      t0000: run prereq tests inside sub-test
      t0000: run cleaning test inside sub-test
      t0000: consistently use single quotes for outer tests
      pretty: lazy-load commit data when expanding user-format
      p5303: avoid sed GNU-ism
      completion: treat "branch -D" the same way as "branch -d"
      completion: handle other variants of "branch -m"
      doc/git-branch: fix awkward wording for "-c"
      t: add --no-tag option to test_commit
      mailmap: only look for .mailmap in work tree
      rev-list: add --disk-usage option for calculating disk usage
      docs/rev-list: add an examples section
      docs/rev-list: add some examples of --disk-usage
      doc: mention approxidates for git-commit --date
      Makefile: add OPEN_RETURNS_EINTR knob
      config.mak.uname: enable OPEN_RETURNS_EINTR for macOS Big Sur

Jiang Xin (8):
      test: add helper functions for git-bundle
      bundle: lost objects when removing duplicate pendings
      bundle: arguments can be read from stdin
      t5411: use different out file to prevent overwriting
      t5411: refactor check of refs using test_cmp_refs
      l10n: git.pot: v2.31.0 round 1 (155 new, 89 removed)
      l10n: git.pot: v2.31.0 round 2 (9 new, 8 removed)
      l10n: zh_CN: for git v2.31.0 l10n round 1 and 2

Joey Salazar (1):
      doc: fix naming of response-end-pkt

Johannes Schindelin (58):
      tests: mark tests relying on the current default for `init.defaultBranch`
      t0060: preemptively adjust alignment
      t[01]*: adjust the references to the default branch name "main"
      t2*: adjust the references to the default branch name "main"
      t3[0-3]*: adjust the references to the default branch name "main"
      t3416: preemptively adjust alignment in a comment
      t34*: adjust the references to the default branch name "main"
      t3[5-9]*: adjust the references to the default branch name "main"
      t4*: adjust the references to the default branch name "main"
      t5323: prepare centered comment for `master` -> `main`
      t5[0-4]*: adjust the references to the default branch name "main"
      t5503: prepare aligned comment for replacing `master` with `main`
      t550*: adjust the references to the default branch name "main"
      t551*: adjust the references to the default branch name "main"
      t55[23]*: adjust the references to the default branch name "main"
      t55[4-9]*: adjust the references to the default branch name "main"
      t5[6-9]*: adjust the references to the default branch name "main"
      t6[0-3]*: adjust the references to the default branch name "main"
      t64*: preemptively adjust alignment to prepare for `master` -> `main`
      t6[4-9]*: adjust the references to the default branch name "main"
      t7[0-4]*: adjust the references to the default branch name "main"
      t7[5-9]*: adjust the references to the default branch name "main"
      t8*: adjust the references to the default branch name "main"
      t9[0-4]*: adjust the references to the default branch name "main"
      t9[5-7]*: adjust the references to the default branch name "main"
      tests(git-p4): transition to the default branch name `main`
      t99*: adjust the references to the default branch name "main"
      tests: drop prereq `PREPARE_FOR_MAIN_BRANCH` where no longer needed
      SKIP_DASHED_BUILT_INS: respect `config.mak`
      range-diff/format-patch: refactor check for commit range
      rebase -i: do leave commit message intact in fixup! chains
      range-diff: avoid leaking memory in two error code paths
      range-diff: libify the read_patches() function again
      range-diff: simplify code spawning `git log`
      range-diff: combine all options in a single data structure
      range-diff: move the diffopt initialization down one layer
      range-diff: offer --left-only/--right-only options
      range-diff/format-patch: handle commit ranges other than A..B
      range-diff(docs): explain how to specify commit ranges
      t1450: robustify `remove_object()`
      fsck --name-objects: be more careful parsing generation numbers
      reflog expire --stale-fix: be generous about missing objects
      commit-graph: when incompatible with graphs, indicate why
      run-command: invalidate lstat cache after a command finished
      Git 2.17.6
      Git 2.18.5
      Git 2.19.6
      Git 2.20.5
      Git 2.21.4
      Git 2.22.5
      Git 2.23.4
      Git 2.24.4
      Git 2.25.5
      Git 2.26.3
      Git 2.27.1
      Git 2.28.1
      Git 2.29.3
      Git 2.30.2

Johannes Sixt (2):
      annotate-tests: quote variable expansions containing path names
      replace "parameters" by "arguments" in error messages

Jonathan Nieder (2):
      mergetool: do not enable hideResolved by default
      doc: describe mergetool configuration in git-mergetool(1)

Jonathan Tan (10):
      Doc: clarify contents of packfile sent as URI
      ls-refs: report unborn targets of symrefs
      connect, transport: encapsulate arg in struct
      clone: respect remote unborn HEAD
      usage: trace2 BUG() invocations
      http: allow custom index-pack args
      http-fetch: allow custom index-pack args
      fetch-pack: with packfile URIs, use index-pack arg
      fetch-pack: print and use dangling .gitmodules
      fetch-pack: do not mix --pack_header and packfile uri

Jordi Mas (1):
      l10n: Update Catalan translation

Junio C Hamano (32):
      pack-redundant: gauge the usage before proposing its removal
      pull: get rid of unnecessary global variable
      pull: correct condition to trigger non-ff advice
      CoC: explicitly take any whitespace breakage
      parse-options: format argh like error messages
      The first batch in 2.31 cycle
      SubmittingPatches: tighten wording on "sign-off" procedure
      ci/install-depends: attempt to fix "brew cask" stuff
      t4203: make blame output massaging more robust
      The second batch
      The third batch
      The fourth batch
      The fifth batch
      Prepare for 2.30.1
      The sixth batch
      Git 2.30.1
      The seventh batch
      The eighth batch
      diff: --{rotate,skip}-to=<path>
      The ninth batch
      Documentation: typofix --column description
      The tenth batch
      push: do not turn --delete '' into a matching push
      blame-options.txt: camelcase blame.blankBoundary
      index-format doc: camelCase core.excludesFile
      Git 2.31-rc0
      Revert "commit-graph: when incompatible with graphs, indicate why"
      Hopefully the last batch before -rc1
      Git 2.31-rc1
      Merged the open-eintr workaround for macOS
      Git 2.31-rc2
      Git 2.31

Kevin Willford (1):
      fsmonitor: allow all entries for a folder to be invalidated

Martin von Zweigbergk (1):
      docs: clarify that refs/notes/ do not keep the attached objects alive

Martin Ågren (16):
      t1300: remove duplicate test for `--file ../foo`
      t1300: remove duplicate test for `--file no-such-file`
      t1300: don't needlessly work with `core.foo` configs
      pack-format.txt: document sizes at start of delta data
      object-name.c: rename from sha1-name.c
      object-file.c: rename from sha1-file.c
      sha1-lookup: rename `sha1_pos()` as `hash_pos()`
      hash-lookup: rename from sha1-lookup
      builtin/gc: don't peek into `struct lock_file`
      commit-graph: don't peek into `struct lock_file`
      midx: don't peek into `struct lock_file`
      refs/files-backend: don't peek into `struct lock_file`
      read-cache: try not to peek into `struct {lock_,temp}file`
      rev-list-options.txt: fix rendering of bonus paragraph
      git.txt: fix monospace rendering
      gitmailmap.txt: fix rendering of e-mail addresses

Matheus Tavares (10):
      t4129: don't fail if setgid is set in the test directory
      grep: error out if --untracked is used with --cached
      grep: honor sparse-checkout on working tree searches
      checkout: fix bug that makes checkout follow symlinks in leading path
      unpack_trees(): start with a fresh lstat cache
      write_entry(): fix misuses of `path` in error messages
      checkout-index: omit entries with no tempname from --temp output
      add --chmod: don't update index when --dry-run is used
      add: mark --chmod error string for translation
      add: propagate --chmod errors to exit status

Matthias Rüster (1):
      l10n: de.po: Update German translation for Git v2.31.0

Mikhail Klyushin (1):
      git-gui: fix typo in russian locale

Neeraj Singh (1):
      read-cache: make the index write buffer size 128K

Patrick Steinhardt (11):
      git: add `--super-prefix` to usage string
      config: add new way to pass config via `--config-env`
      config: extract function to parse config pairs
      fetch: extract writing to FETCH_HEAD
      fetch: use strbuf to format FETCH_HEAD updates
      fetch: refactor `s_update_ref` to use common exit path
      fetch: allow passing a transaction to `s_update_ref()`
      fetch: implement support for atomic reference updates
      config: store "git -c" variables using more robust format
      environment: make `getenv_safe()` a public function
      config: allow specifying config entries via envvar pairs

Peter Kaestle (1):
      submodules: fix of regression on fetching of non-init subsub-repo

Peter Krefting (2):
      l10n: sv.po: Update Swedish translation (5103t0f0u)
      l10n: sv.po: Update Swedish translation (5104t0f0u)

Phil Hord (1):
      use delete_refs when deleting tags or branches

Philippe Blain (4):
      gitmodules.txt: fix 'GIT_WORK_TREE' variable name
      mergetool--lib: fix '--tool-help' to correctly show available tools
      mailmap doc: use correct environment variable 'GIT_WORK_TREE'
      ci: do not cancel all jobs of a matrix if one fails

Pranit Bauva (7):
      bisect--helper: reimplement `bisect_log` shell function in C
      bisect--helper: reimplement `bisect_replay` shell function in C
      bisect--helper: retire `--bisect-write` subcommand
      bisect--helper: use `res` instead of return in BISECT_RESET case option
      bisect--helper: retire `--bisect-auto-next` subcommand
      bisect--helper: reimplement `bisect_skip` shell function in C
      bisect--helper: retire `--check-and-set-terms` subcommand

Pratyush Yadav (2):
      git-gui: remove lines starting with the comment character
      Revert "git-gui: remove lines starting with the comment character"

Rafael Silva (8):
      worktree: libify should_prune_worktree()
      worktree: teach worktree to lazy-load "prunable" reason
      worktree: teach worktree_lock_reason() to gently handle main worktree
      t2402: ensure locked worktree is properly cleaned up
      worktree: teach `list --porcelain` to annotate locked worktree
      worktree: teach `list` to annotate prunable worktree
      worktree: teach `list` verbose mode
      blame: remove unnecessary use of get_commit_info()

René Scharfe (2):
      rebase: verify commit parameter
      cache-tree: use ce_namelen() instead of strlen()

SZEDER Gábor (2):
      t7800-difftool: don't accidentally match tmp dirs
      test-lib: prevent '--stress-jobs=X' from being ignored

Sangeeta Jain (1):
      diff: do not show submodule with untracked files as "-dirty"

Sergey Organov (32):
      revision: factor out parsing of diff-merge related options
      revision: factor out setup of diff-merge related settings
      revision: factor out initialization of diff-merge related settings
      revision: provide implementation for diff merges tweaks
      revision: move diff merges functions to its own diff-merges.c
      diff-merges: rename all functions to have common prefix
      diff-merges: move checks for first_parent_only out of the module
      diff-merges: rename diff_merges_default_to_enable() to match semantics
      diff-merges: re-arrange functions to match the order they are called in
      diff-merges: new function diff_merges_suppress()
      diff-merges: new function diff_merges_set_dense_combined_if_unset()
      diff-merges: introduce revs->first_parent_merges flag
      diff-merges: handle imply -p on -c/--cc logic for log.c
      diff-merges: revise revs->diff flag handling
      t4013: support test_expect_failure through ':failure' magic
      t4013: add tests for -m failing to override -c/--cc
      diff-merges: fix -m to properly override -c/--cc
      diff-merges: split 'ignore_merges' field
      diff-merges: group diff-merge flags next to each other inside 'rev_info'
      diff-merges: get rid of now empty diff_merges_init_revs()
      diff-merges: refactor opt settings into separate functions
      diff-merges: make -m/-c/--cc explicitly mutually exclusive
      diff-merges: implement new values for --diff-merges
      diff-merges: do not imply -p for new options
      diff-merges: let new options enable diff without -p
      diff-merges: add old mnemonic counterparts to --diff-merges
      diff-merges: add '--diff-merges=1' as synonym for 'first-parent'
      doc/git-log: describe new --diff-merges options
      doc/diff-generate-patch: mention new --diff-merges option
      doc/rev-list-options: document --first-parent changes merges format
      doc/git-show: include --diff-merges description
      t4013: add tests for --diff-merges=first-parent

Seth House (4):
      mergetool: add hideResolved configuration
      mergetool: break setup_tool out into separate initialization function
      mergetool: add per-tool support and overrides for the hideResolved flag
      mergetools/vimdiff: add vimdiff1 merge tool variant

Shubham Verma (10):
      t7001: modernize test formatting
      t7001: indent with TABs instead of spaces
      t7001: remove unnecessary blank lines
      t7001: modernize subshell formatting
      t7001: remove whitespace after redirect operators
      t7001: avoid using `cd` outside of subshells
      t7001: use '>' rather than 'touch'
      t7001: put each command on a separate line
      t7001: use here-docs instead of echo
      t7001: use `test` rather than `[`

Taylor Blau (41):
      ewah/ewah_bitmap.c: avoid open-coding ALLOC_GROW()
      pack-bitmap.c: check reads more aggressively when loading
      pack-bitmap: factor out 'bitmap_for_commit()'
      pack-bitmap: factor out 'add_commit_to_bitmap()'
      p7519: allow running without watchman prereq
      Documentation/git-clone.txt: document race with --local
      pack-revindex: introduce a new API
      write_reuse_object(): convert to new revindex API
      write_reused_pack_one(): convert to new revindex API
      write_reused_pack_verbatim(): convert to new revindex API
      check_object(): convert to new revindex API
      bitmap_position_packfile(): convert to new revindex API
      show_objects_for_type(): convert to new revindex API
      get_size_by_pos(): convert to new revindex API
      try_partial_reuse(): convert to new revindex API
      rebuild_existing_bitmaps(): convert to new revindex API
      get_delta_base_oid(): convert to new revindex API
      retry_bad_packed_offset(): convert to new revindex API
      packed_object_info(): convert to new revindex API
      unpack_entry(): convert to new revindex API
      for_each_object_in_pack(): convert to new revindex API
      builtin/gc.c: guess the size of the revindex
      pack-revindex: remove unused 'find_pack_revindex()'
      pack-revindex: remove unused 'find_revindex_position()'
      pack-revindex: hide the definition of 'revindex_entry'
      pack-revindex.c: avoid direct revindex access in 'offset_to_pack_pos()'
      refs: expose 'for_each_fullref_in_prefixes'
      ls-refs.c: traverse prefixes of disjoint "ref-prefix" sets
      packfile: prepare for the existence of '*.rev' files
      pack-write.c: prepare to write 'pack-*.rev' files
      builtin/index-pack.c: allow stripping arbitrary extensions
      builtin/index-pack.c: write reverse indexes
      builtin/pack-objects.c: respect 'pack.writeReverseIndex'
      Documentation/config/pack.txt: advertise 'pack.writeReverseIndex'
      t: prepare for GIT_TEST_WRITE_REV_INDEX
      t: support GIT_TEST_WRITE_REV_INDEX
      pack-revindex: ensure that on-disk reverse indexes are given precedence
      t5325: check both on-disk and in-memory reverse index
      .github/workflows/main.yml: run static-analysis on bionic
      commit-graph.c: display correct number of chunks when writing
      pack-revindex.c: don't close unopened file descriptors

Thomas Ackermann (7):
      doc: fix some typos
      doc hash-function-transition: fix asciidoc output
      doc hash-function-transition: use SHA-1 and SHA-256 consistently
      doc hash-function-transition: use upper case consistently
      doc hash-function-transition: fix incomplete sentence
      doc hash-function-transition: move rationale upwards
      doc: use https links

Torsten Bögershausen (1):
      MacOS: precompose_argv_prefix()

Trần Ngọc Quân (1):
      l10n: vi.po(5104t): for git v2.31.0 l10n round 2

Utku Gultopu (1):
      doc: remove "directory cache" from man pages

Vasyl Vavrychuk (1):
      git-send-email.txt: mention less secure app access with Gmail

Yi-Jyun Pan (1):
      l10n: zh_TW.po: v2.31.0 round 2 (15 untranslated)

ZheNing Hu (5):
      builtin/*: update usage format
      ls_files.c: bugfix for --deleted and --modified
      ls_files.c: consolidate two for loops into one
      ls-files.c: add --deduplicate option
      difftool.c: learn a new way start at specified file

brian m. carlson (9):
      abspath: add a function to resolve paths with missing components
      rev-parse: add option for absolute or relative path formatting
      docs: rephrase and clarify the git status --short format
      ref-filter: switch some uses of unsigned long to size_t
      commit: ignore additional signatures when parsing signed commits
      gpg-interface: improve interface for parsing tags
      commit: allow parsing arbitrary buffers with headers
      ref-filter: hoist signature parsing
      gpg-interface: remove other signature headers before verifying

Ævar Arnfjörð Bjarmason (100):
      pretty format %(trailers) test: split a long line
      pretty format %(trailers) doc: avoid repetition
      pretty-format %(trailers): fix broken standalone "valueonly"
      pretty format %(trailers): add a "keyonly"
      pretty format %(trailers): add a "key_value_separator"
      mktag doc: say <hash> not <sha1>
      mktag doc: grammar fix, when exists -> when it exists
      CoC: Update word-wrapping to match upstream
      mktag doc: update to explain why to use this
      mktag tests: don't needlessly use a subshell
      mktag tests: use "test_commit" helper
      mktag tests: remove needless SHA-1 hardcoding
      mktag tests: don't redirect stderr to a file needlessly
      mktag tests: don't create "mytag" twice
      mktag tests: run "fsck" after creating "mytag"
      mktag tests: stress test whitespace handling
      mktag tests: test "hash-object" compatibility
      mktag tests: improve verify_object() test coverage
      mktag tests: test verify_object() with replaced objects
      mktag: use default strbuf_read() hint
      mktag: remove redundant braces in one-line body "if"
      mktag: use puts(str) instead of printf("%s\n", str)
      mktag: use fsck instead of custom verify_tag()
      fsck: make fsck_config() re-usable
      mktag: allow turning off fsck.extraHeaderEntry
      mktag: allow omitting the header/body \n separator
      mktag: convert to parse-options
      mktag: mark strings for translation
      mktag: add a --[no-]strict option
      branch: change "--local" to "--list" in comment
      branch tests: add to --sort tests
      ref-filter: add braces to if/else if/else chain
      ref-filter: move "cmp_fn" assignment into "else if" arm
      ref-filter: move ref_sorting flags to a bitfield
      branch: sort detached HEAD based on a flag
      branch: show "HEAD detached" first under reverse sort
      Makefile: remove a warning about old GETTEXT_POISON flag
      gettext.c: remove/reword a mostly-useless comment
      mailmap doc: create a new "gitmailmap(5)" man page
      mailmap doc: quote config variables `like.this`
      check-mailmap doc: note config options
      mailmap doc: start by mentioning the comment syntax
      mailmap tests: use our preferred whitespace syntax
      mailmap tests: modernize syntax & test idioms
      mailmap tests: improve --stdin tests
      mailmap tests: remove redundant entry in test
      mailmap tests: add a test for "not a blob" error
      mailmap tests: get rid of overly complex blame fuzzing
      mailmap: test for silent exiting on missing file/blob
      test-lib functions: expand "test_commit" comment template
      test-lib functions: document arguments to test_commit
      test-lib functions: add --author support to test_commit
      test-lib functions: add an --append option to test_commit
      tests: refactor a few tests to use "test_commit --append"
      mailmap doc + tests: add better examples & test them
      mailmap tests: add a test for comment syntax
      mailmap tests: add tests for whitespace syntax
      mailmap tests: add tests for empty "<>" syntax
      mailmap doc + tests: document and test for case-insensitivity
      shortlog: remove unused(?) "repo-abbrev" feature
      CoC: update to version 2.0 + local changes
      fsck doc: remove ancient out-of-date diagnostics
      ci: remove GETTEXT_POISON jobs
      tests: remove support for GIT_TEST_GETTEXT_POISON
      tests: remove uses of GIT_TEST_GETTEXT_POISON=false
      cache-tree tests: refactor for modern test style
      cache-tree tests: remove unused $2 parameter
      cache-tree tests: use a sub-shell with less indirection
      cache-tree tests: explicitly test HEAD and index differences
      git svn mergeinfo tests: modernize redirection & quoting style
      git svn mergeinfo tests: refactor "test -z" to use test_must_be_empty
      upload-pack tests: avoid a non-zero "grep" exit status
      archive tests: use a cheaper "zipinfo -h" invocation to get header
      rm tests: actually test for SIGPIPE in SIGPIPE test
      config.mak.uname: remove redundant NO_LIBPCRE1_JIT flag
      Remove support for v1 of the PCRE library
      grep/pcre2 tests: don't rely on invalid UTF-8 data test
      grep/pcre2: better support invalid UTF-8 haystacks
      grep/log: remove hidden --debug and --grep-debug options
      pager: refactor wait_for_pager() function
      pager: test for exit code with and without SIGPIPE
      run-command: add braces for "if" block in wait_or_whine()
      pager: properly log pager exit code when signalled
      test-lib: remove check_var_migration
      test lib: change "error" to "BUG" as appropriate
      test-lib-functions: move test_set_index_version() to its user
      test-lib-functions: remove generate_zero_bytes() wrapper
      test libs: rename bundle helper to "lib-bundle.sh"
      test libs: rename gitweb-lib.sh to lib-gitweb.sh
      test-lib-functions: move function to lib-bitmap.sh
      t/.gitattributes: sort lines
      tests: remove last uses of GIT_TEST_GETTEXT_POISON=false
      tests: remove most uses of C_LOCALE_OUTPUT
      tests: remove last uses of C_LOCALE_OUTPUT
      tests: remove most uses of test_i18ncmp
      diff: add an API for deferred freeing
      diff: plug memory leak from regcomp() on {log,diff} -I
      test libs: rename "diff-lib" to "lib-diff"
      test-lib-functions: remove bug-inducing "diagnostics" helper param
      test-lib-functions: assert correct parameter count


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.31.0-rc2
@ 2021-03-09 18:05  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2021-03-09 18:05 UTC (permalink / raw)
  To: git

A release candidate Git v2.31.0-rc2 is now available for testing at
the usual places.  It is comprised of 655 non-merge commits since
v2.30.0, contributed by 68 people, 22 of which are new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.31.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.30.0 are as follows.
Welcome to the Git development community!

  Aleksey Kliger, Andreas Bühmann, Andrew Klotz, Andrzej
  Hunt, Antonio Russo, Arnaud Morin, Christian Walther, Clement
  Moyroud, Daniel Levin, Daniel Troger, Harold Kim, Jacob Vosmaer,
  LeSeulArtichaut, Mikhail Klyushin, Neeraj Singh, Sangeeta Jain,
  Seth House, Shubham Verma, Utku Gultopu, Vasyl Vavrychuk,
  Vojtěch Knyttl, and ZheNing Hu.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Abhishek Kumar, Adam Dinwoodie, Ævar Arnfjörð Bjarmason,
  Alex Henrie, brian m. carlson, Christian Couder, Denton Liu,
  Derrick Stolee, Elijah Newren, Eric Sunshine, Eric Wong,
  Felipe Contreras, Han-Wen Nienhuys, Hariom Verma, Heba Waly,
  Jeff Hostetler, Jeff King, Jiang Xin, Joey Salazar, Johannes
  Schindelin, Johannes Sixt, Jonathan Tan, Junio C Hamano,
  Kevin Daudt, Kevin Willford, Lars Schneider, Martin Ågren,
  Martin von Zweigbergk, Matheus Tavares, Michael Haggerty,
  Patrick Steinhardt, Paul Jolly, Peter Kaestle, Phil Hord,
  Philippe Blain, Phillip Wood, Pranit Bauva, Pratyush Yadav,
  Rafael Silva, René Scharfe, Ross Light, Sergey Organov, SZEDER
  Gábor, Taylor Blau, Thomas Ackermann, and Torsten Bögershausen.

[*] We are counting not just the authorship contribution but
    issue reporting, testing and reviewing that are recorded
    in the commit trailers.

----------------------------------------------------------------

Git 2.31 Release Notes (draft)
==============================

Updates since v2.30
-------------------

Backward incompatible and other important changes

 * The "pack-redundant" command, which has been left stale with almost
   unusable performance issues, now warns loudly when it gets used, as
   we no longer want to recommend its use (instead just "repack -d"
   instead).

 * The development community has adopted Contributor Covenant v2.0 to
   update from v1.4 that we have been using.

 * The support for deprecated PCRE1 library has been dropped.

 * Fixes for CVE-2021-21300 in Git 2.30.2 (and earlier) is included.


UI, Workflows & Features

 * The "--format=%(trailers)" mechanism gets enhanced to make it
   easier to design output for machine consumption.

 * When a user does not tell "git pull" to use rebase or merge, the
   command gives a loud message telling a user to choose between
   rebase or merge but creates a merge anyway, forcing users who would
   want to rebase to redo the operation.  Fix an early part of this
   problem by tightening the condition to give the message---there is
   no reason to stop or force the user to choose between rebase or
   merge if the history fast-forwards.

 * The configuration variable 'core.abbrev' can be set to 'no' to
   force no abbreviation regardless of the hash algorithm.

 * "git rev-parse" can be explicitly told to give output as absolute
   or relative path with the `--path-format=(absolute|relative)` option.

 * Bash completion (in contrib/) update to make it easier for
   end-users to add completion for their custom "git" subcommands.

 * "git maintenance" learned to drive scheduled maintenance on
   platforms whose native scheduling methods are not 'cron'.

 * After expiring a reflog and making a single commit, the reflog for
   the branch would record a single entry that knows both @{0} and
   @{1}, but we failed to answer "what commit were we on?", i.e. @{1}

 * "git bundle" learns "--stdin" option to read its refs from the
   standard input.  Also, it now does not lose refs whey they point
   at the same object.

 * "git log" learned a new "--diff-merges=<how>" option.

 * "git ls-files" can and does show multiple entries when the index is
   unmerged, which is a source for confusion unless -s/-u option is in
   use.  A new option --deduplicate has been introduced.

 * `git worktree list` now annotates worktrees as prunable, shows
   locked and prunable attributes in --porcelain mode, and gained
   a --verbose option.

 * "git clone" tries to locally check out the branch pointed at by
   HEAD of the remote repository after it is done, but the protocol
   did not convey the information necessary to do so when copying an
   empty repository.  The protocol v2 learned how to do so.

 * There are other ways than ".." for a single token to denote a
   "commit range", namely "<rev>^!" and "<rev>^-<n>", but "git
   range-diff" did not understand them.

 * The "git range-diff" command learned "--(left|right)-only" option
   to show only one side of the compared range.

 * "git mergetool" feeds three versions (base, local and remote) of
   a conflicted path unmodified.  The command learned to optionally
   prepare these files with unconflicted parts already resolved.

 * The .mailmap is documented to be read only from the root level of a
   working tree, but a stray file in a bare repository also was read
   by accident, which has been corrected.

 * "git maintenance" tool learned a new "pack-refs" maintenance task.

 * The error message given when a configuration variable that is
   expected to have a boolean value has been improved.

 * Signed commits and tags now allow verification of objects, whose
   two object names (one in SHA-1, the other in SHA-256) are both
   signed.

 * "git rev-list" command learned "--disk-usage" option.

 * "git {diff,log} --{skip,rotate}-to=<path>" allows the user to
   discard diff output for early paths or move them to the end of the
   output.

 * "git difftool" learned "--skip-to=<path>" option to restart an
   interrupted session from an arbitrary path.

 * "git grep" has been tweaked to be limited to the sparse checkout
   paths.

 * "git rebase --[no-]fork-point" gained a configuration variable
   rebase.forkPoint so that users do not have to keep specifying a
   non-default setting.


Performance, Internal Implementation, Development Support etc.

 * A 3-year old test that was not testing anything useful has been
   corrected.

 * Retire more names with "sha1" in it.

 * The topological walk codepath is covered by new trace2 stats.

 * Update the Code-of-conduct to version 2.0 from the upstream (we've
   been using version 1.4).

 * "git mktag" validates its input using its own rules before writing
   a tag object---it has been updated to share the logic with "git
   fsck".

 * Two new ways to feed configuration variable-value pairs via
   environment variables have been introduced, and the way
   GIT_CONFIG_PARAMETERS encodes variable/value pairs has been tweaked
   to make it more robust.

 * Tests have been updated so that they do not to get affected by the
   name of the default branch "git init" creates.

 * "git fetch" learns to treat ref updates atomically in all-or-none
   fashion, just like "git push" does, with the new "--atomic" option.

 * The peel_ref() API has been replaced with peel_iterated_oid().

 * The .use_shell flag in struct child_process that is passed to
   run_command() API has been clarified with a bit more documentation.

 * Document, clean-up and optimize the code around the cache-tree
   extension in the index.

 * The ls-refs protocol operation has been optimized to narrow the
   sub-hierarchy of refs/ it walks to produce response.

 * When removing many branches and tags, the code used to do so one
   ref at a time.  There is another API it can use to delete multiple
   refs, and it makes quite a lot of performance difference when the
   refs are packed.

 * The "pack-objects" command needs to iterate over all the tags when
   automatic tag following is enabled, but it actually iterated over
   all refs and then discarded everything outside "refs/tags/"
   hierarchy, which was quite wasteful.

 * A perf script was made more portable.

 * Our setting of GitHub CI test jobs were a bit too eager to give up
   once there is even one failure found.  Tweak the knob to allow
   other jobs keep running even when we see a failure, so that we can
   find more failures in a single run.

 * We've carried compatibility codepaths for compilers without
   variadic macros for quite some time, but the world may be ready for
   them to be removed.  Force compilation failure on exotic platforms
   where variadic macros are not available to find out who screams in
   such a way that we can easily revert if it turns out that the world
   is not yet ready.

 * Code clean-up to ensure our use of hashtables using object names as
   keys use the "struct object_id" objects, not the raw hash values.

 * Lose the debugging aid that may have been useful in the past, but
   no longer is, in the "grep" codepaths.

 * Some pretty-format specifiers do not need the data in commit object
   (e.g. "%H"), but we were over-eager to load and parse it, which has
   been made even lazier.

 * Get rid of "GETTEXT_POISON" support altogether, which may or may
   not be controversial.

 * Introduce an on-disk file to record revindex for packdata, which
   traditionally was always created on the fly and only in-core.

 * The commit-graph learned to use corrected commit dates instead of
   the generation number to help topological revision traversal.

 * Piecemeal of rewrite of "git bisect" in C continues.

 * When a pager spawned by us exited, the trace log did not record its
   exit status correctly, which has been corrected.

 * Removal of GIT_TEST_GETTEXT_POISON continues.

 * The code to implement "git merge-base --independent" was poorly
   done and was kept from the very beginning of the feature.

 * Preliminary changes to fsmonitor integration.

 * Performance improvements for rename detection.

 * The common code to deal with "chunked file format" that is shared
   by the multi-pack-index and commit-graph files have been factored
   out, to help codepaths for both filetypes to become more robust.

 * The approach to "fsck" the incoming objects in "index-pack" is
   attractive for performance reasons (we have them already in core,
   inflated and ready to be inspected), but fundamentally cannot be
   applied fully when we receive more than one pack stream, as a tree
   object in one pack may refer to a blob object in another pack as
   ".gitmodules", when we want to inspect blobs that are used as
   ".gitmodules" file, for example.  Teach "index-pack" to emit
   objects that must be inspected later and check them in the calling
   "fetch-pack" process.

 * The logic to handle "trailer" related placeholders in the
   "--format=" mechanisms in the "log" family and "for-each-ref"
   family is getting unified.

 * Raise the buffer size used when writing the index file out from
   (obviously too small) 8kB to (clearly sufficiently large) 128kB.

 * It is reported that open() on some platforms (e.g. macOS Big Sur)
   can return EINTR even though our timers are set up with SA_RESTART.
   A workaround has been implemented and enabled for macOS to rerun
   open() transparently from the caller when this happens.


Fixes since v2.30
-----------------

 * Diagnose command line error of "git rebase" early.

 * Clean up option descriptions in "git cmd --help".

 * "git stash" did not work well in a sparsely checked out working
   tree.

 * Some tests expect that "ls -l" output has either '-' or 'x' for
   group executable bit, but setgid bit can be inherited from parent
   directory and make these fields 'S' or 's' instead, causing test
   failures.

 * "git for-each-repo --config=<var> <cmd>" should not run <cmd> for
   any repository when the configuration variable <var> is not defined
   even once.

 * Fix 2.29 regression where "git mergetool --tool-help" fails to list
   all the available tools.

 * Fix for procedure to building CI test environment for mac.

 * The implementation of "git branch --sort" wrt the detached HEAD
   display has always been hacky, which has been cleaned up.

 * Newline characters in the host and path part of git:// URL are
   now forbidden.

 * "git diff" showed a submodule working tree with untracked cruft as
   "Submodule commit <objectname>-dirty", but a natural expectation is
   that the "-dirty" indicator would align with "git describe --dirty",
   which does not consider having untracked files in the working tree
   as source of dirtiness.  The inconsistency has been fixed.

 * When more than one commit with the same patch ID appears on one
   side, "git log --cherry-pick A...B" did not exclude them all when a
   commit with the same patch ID appears on the other side.  Now it
   does.

 * Documentation for "git fsck" lost stale bits that has become
   incorrect.

 * Doc fix for packfile URI feature.

 * When "git rebase -i" processes "fixup" insn, there is no reason to
   clean up the commit log message, but we did the usual stripspace
   processing.  This has been corrected.
   (merge f7d42ceec5 js/rebase-i-commit-cleanup-fix later to maint).

 * Fix in passing custom args from "git clone" to "upload-pack" on the
   other side.
   (merge ad6b5fefbd jv/upload-pack-filter-spec-quotefix later to maint).

 * The command line completion (in contrib/) completed "git branch -d"
   with branch names, but "git branch -D" offered tagnames in addition,
   which has been corrected.  "git branch -M" had the same problem.
   (merge 27dc071b9a jk/complete-branch-force-delete later to maint).

 * When commands are started from a subdirectory, they may have to
   compare the path to the subdirectory (called prefix and found out
   from $(pwd)) with the tracked paths.  On macOS, $(pwd) and
   readdir() yield decomposed path, while the tracked paths are
   usually normalized to the precomposed form, causing mismatch.  This
   has been fixed by taking the same approach used to normalize the
   command line arguments.
   (merge 5c327502db tb/precompose-prefix-too later to maint).

 * Even though invocations of "die()" were logged to the trace2
   system, "BUG()"s were not, which has been corrected.
   (merge 0a9dde4a04 jt/trace2-BUG later to maint).

 * "git grep --untracked" is meant to be "let's ALSO find in these
   files on the filesystem" when looking for matches in the working
   tree files, and does not make any sense if the primary search is
   done against the index, or the tree objects.  The "--cached" and
   "--untracked" options have been marked as mutually incompatible.
   (merge 0c5d83b248 mt/grep-cached-untracked later to maint).

 * Fix "git fsck --name-objects" which apparently has not been used by
   anybody who is motivated enough to report breakage.
   (merge e89f89361c js/fsck-name-objects-fix later to maint).

 * Avoid individual tests in t5411 from getting affected by each other
   by forcing them to use separate output files during the test.
   (merge 822ee894f6 jx/t5411-unique-filenames later to maint).

 * Test to make sure "git rev-parse one-thing one-thing" gives
   the same thing twice (when one-thing is --since=X).
   (merge a5cdca4520 ew/rev-parse-since-test later to maint).

 * When certain features (e.g. grafts) used in the repository are
   incompatible with the use of the commit-graph, we used to silently
   turned commit-graph off; we now tell the user what we are doing.
   (merge c85eec7fc3 js/commit-graph-warning later to maint).

 * Objects that lost references can be pruned away, even when they
   have notes attached to it (and these notes will become dangling,
   which in turn can be pruned with "git notes prune").  This has been
   clarified in the documentation.
   (merge fa9ab027ba mz/doc-notes-are-not-anchors later to maint).

 * The error codepath around the "--temp/--prefix" feature of "git
   checkout-index" has been improved.
   (merge 3f7ba60350 mt/checkout-index-corner-cases later to maint).

 * The "git maintenance register" command had trouble registering bare
   repositories, which had been corrected.

 * A handful of multi-word configuration variable names in
   documentation that are spelled in all lowercase have been corrected
   to use the more canonical camelCase.
   (merge 7dd0eaa39c dl/doc-config-camelcase later to maint).

 * "git push $there --delete ''" should have been diagnosed as an
   error, but instead turned into a matching push, which has been
   corrected.
   (merge 20e416409f jc/push-delete-nothing later to maint).

 * Test script modernization.
   (merge 488acf15df sv/t7001-modernize later to maint).

 * An under-allocation for the untracked cache data has been corrected.
   (merge 6347d649bc jh/untracked-cache-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge e3f5da7e60 sg/t7800-difftool-robustify later to maint).
   (merge 9d336655ba js/doc-proto-v2-response-end later to maint).
   (merge 1b5b8cf072 jc/maint-column-doc-typofix later to maint).
   (merge 3a837b58e3 cw/pack-config-doc later to maint).
   (merge 01168a9d89 ug/doc-commit-approxidate later to maint).
   (merge b865734760 js/params-vs-args later to maint).

----------------------------------------------------------------

Changes since v2.30.0 are as follows:

Abhishek Kumar (11):
      commit-graph: fix regression when computing Bloom filters
      revision: parse parent in indegree_walk_step()
      commit-graph: consolidate fill_commit_graph_info
      t6600-test-reach: generalize *_three_modes
      commit-graph: add a slab to store topological levels
      commit-graph: return 64-bit generation number
      commit-graph: implement corrected commit date
      commit-graph: implement generation data chunk
      commit-graph: use generation v2 only if entire chain does
      commit-reach: use corrected commit dates in paint_down_to_common()
      doc: add corrected commit date info

Adam Dinwoodie (1):
      t4129: fix setfacl-related permissions failure

Alex Henrie (1):
      rebase: add a config option for --no-fork-point

Andrew Klotz (1):
      config: improve error message for boolean config

Andrzej Hunt (1):
      commit-graph: avoid leaking topo_levels slab in write_commit_graph()

Antonio Russo (1):
      t6016: move to lib-log-graph.sh framework

Christian Couder (3):
      fetch-pack: rename helper to create_promisor_file()
      fetch-pack: refactor writing promisor file
      pack-write: die on error in write_promisor_file()

Christian Walther (1):
      doc: mention bigFileThreshold for packing

Daniel Levin (1):
      git-p4: fix syncing file types with pattern

Denton Liu (12):
      refs: factor out set_read_ref_cutoffs()
      refs: allow @{n} to work with n-sized reflog
      test-lib-functions.sh: fix usage for test_commit()
      t4203: stop losing return codes of git commands
      git-stash.txt: be explicit about subcommand options
      t3905: remove spaces after redirect operators
      t3905: move all commands into test cases
      t3905: remove nested git in command substitution
      t3905: replace test -s with test_file_not_empty
      t3905: use test_cmp() to check file contents
      stash: declare ref_stash as an array
      i18n.txt: camel case and monospace "i18n.commitEncoding"

Derrick Stolee (65):
      maintenance: extract platform-specific scheduling
      maintenance: include 'cron' details in docs
      pack-bitmap-write: fill bitmap with commit history
      bitmap: implement bitmap_is_subset()
      commit: implement commit_list_contains()
      t5310: add branch-based checks
      pack-bitmap-write: rename children to reverse_edges
      pack-bitmap-write: build fewer intermediate bitmaps
      pack-bitmap-write: use existing bitmaps
      pack-bitmap-write: relax unique revwalk condition
      pack-bitmap-write: better reuse bitmaps
      revision: trace topo-walk statistics
      tree-walk: report recursion counts
      unpack-trees: add trace2 regions
      cache-tree: use trace2 in cache_tree_update()
      maintenance: use launchctl on macOS
      maintenance: use Windows scheduled tasks
      for-each-repo: do nothing on empty config
      cache-tree: trace regions for I/O
      cache-tree: trace regions for prime_cache_tree
      index-format: use 'cache tree' over 'cached tree'
      index-format: update preamble to cache tree extension
      index-format: discuss recursion of cache-tree better
      cache-tree: speed up consecutive path comparisons
      maintenance: set log.excludeDecoration durin prefetch
      t7900: clean up some broken refs
      cache-tree: clean up cache_tree_update()
      cache-tree: simplify verify_cache() prototype
      cache-tree: extract subtree_pos()
      fsmonitor: de-duplicate BUG()s around dirty bits
      repository: add repo reference to index_state
      name-hash: use trace2 regions for init
      sparse-checkout: load sparse-checkout patterns
      test-lib: test_region looks for trace2 regions
      t1092: test interesting sparse-checkout scenarios
      commit-reach: reduce requirements for remove_redundant()
      commit-graph: use repo_parse_commit
      commit-graph: always parse before commit_graph_data_at()
      commit-graph: validate layers for generation data
      commit-graph: compute generations separately
      commit-graph: be extra careful about mixed generations
      commit-graph: prepare commit graph
      commit-graph: anonymize data in chunk_write_fn
      maintenance: add pack-refs task
      maintenance: incremental strategy runs pack-refs weekly
      chunk-format: create chunk format write API
      commit-graph: use chunk-format write API
      midx: rename pack_info to write_midx_context
      midx: use context in write_midx_pack_names()
      midx: add entries to write_midx_context
      midx: add pack_perm to write_midx_context
      midx: add num_large_offsets to write_midx_context
      midx: return success/failure in chunk write methods
      midx: drop chunk progress during write
      midx: use chunk-format API in write_midx_internal()
      chunk-format: create read chunk API
      commit-graph: use chunk-format read API
      midx: use chunk-format read API
      midx: use 64-bit multiplication for chunk sizes
      chunk-format: restore duplicate chunk checks
      chunk-format: add technical docs
      commit-reach: use one walk in remove_redundant()
      commit-reach: move compare_commits_by_gen
      commit-reach: use heuristic in remove_redundant()
      commit-reach: stale commits may prune generation further

Elijah Newren (93):
      t7012: add a testcase demonstrating stash apply bugs in sparse checkouts
      stash: remove unnecessary process forking
      stash: fix stash application in sparse-checkouts
      merge-ort: setup basic internal data structures
      merge-ort: add some high-level algorithm structure
      merge-ort: port merge_start() from merge-recursive
      merge-ort: use histogram diff
      merge-ort: add an err() function similar to one from merge-recursive
      merge-ort: implement a very basic collect_merge_info()
      merge-ort: avoid repeating fill_tree_descriptor() on the same tree
      merge-ort: compute a few more useful fields for collect_merge_info
      merge-ort: record stage and auxiliary info for every path
      merge-ort: avoid recursing into identical trees
      merge-ort: add a preliminary simple process_entries() implementation
      merge-ort: have process_entries operate in a defined order
      merge-ort: step 1 of tree writing -- record basenames, modes, and oids
      merge-ort: step 2 of tree writing -- function to create tree object
      merge-ort: step 3 of tree writing -- handling subdirectories as we go
      merge-ort: basic outline for merge_switch_to_result()
      merge-ort: add implementation of checkout()
      tree: enable cmp_cache_name_compare() to be used elsewhere
      merge-ort: add implementation of record_conflicted_index_entries()
      merge-ort: free data structures in merge_finalize()
      merge-ort: add a few includes
      merge-ort: add a clear_internal_opts helper
      merge-ort: add a path_conflict field to merge_options_internal
      merge-ort: add a paths_to_free field to merge_options_internal
      merge-ort: add function grouping comments
      merge-ort: add die-not-implemented stub handle_content_merge() function
      merge-ort: add modify/delete handling and delayed output processing
      merge-ort: add basic data structures for handling renames
      merge-ort: add initial outline for basic rename detection
      merge-ort: implement detect_regular_renames()
      merge-ort: implement compare_pairs() and collect_renames()
      merge-ort: add basic outline for process_renames()
      diffcore-rename: rename num_create to num_destinations
      diffcore-rename: avoid usage of global in too_many_rename_candidates()
      diffcore-rename: simplify limit check
      diffcore-rename: reduce jumpiness in progress counters
      t4058: add more tests and documentation for duplicate tree entry handling
      t4058: explore duplicate tree entry handling in a bit more detail
      diffcore-rename: simplify and accelerate register_rename_src()
      diffcore-rename: accelerate rename_dst setup
      merge-ort: add implementation of both sides renaming identically
      merge-ort: add implementation of both sides renaming differently
      merge-ort: add implementation of rename/delete conflicts
      merge-ort: add implementation of rename collisions
      merge-ort: add implementation of normal rename handling
      merge-ort: add implementation of type-changed rename handling
      commit: move reverse_commit_list() from merge-recursive
      merge-ort: copy a few small helper functions from merge-recursive.c
      merge-ort: make clear_internal_opts() aware of partial clearing
      merge-ort: implement merge_incore_recursive()
      merge-ort: handle D/F conflict where directory disappears due to merge
      merge-ort: handle directory/file conflicts that remain
      merge-ort: implement unique_path() helper
      merge-ort: handle book-keeping around two- and three-way content merge
      merge-ort: flesh out implementation of handle_content_merge()
      merge-ort: copy and adapt merge_3way() from merge-recursive.c
      merge-ort: copy and adapt merge_submodule() from merge-recursive.c
      merge-ort: implement format_commit()
      merge-ort: copy find_first_merges() implementation from merge-recursive.c
      merge-ort: add handling for different types of files at same path
      diffcore-rename: remove unnecessary duplicate entry checks
      merge-ort: add new data structures for directory rename detection
      merge-ort: initialize and free new directory rename data structures
      merge-ort: collect which directories are removed in dirs_removed
      merge-ort: add outline for computing directory renames
      merge-ort: add outline of get_provisional_directory_renames()
      merge-ort: copy get_renamed_dir_portion() from merge-recursive.c
      merge-ort: implement compute_rename_counts()
      merge-ort: implement handle_directory_level_conflicts()
      merge-ort: modify collect_renames() for directory rename handling
      merge-ort: implement compute_collisions()
      merge-ort: implement apply_dir_rename() and check_dir_renamed()
      merge-ort: implement check_for_directory_rename()
      merge-ort: implement handle_path_level_conflicts()
      merge-ort: add a new toplevel_dir field
      merge-ort: implement apply_directory_rename_modifications()
      merge-ort: process_renames() now needs more defensiveness
      merge-ort: fix a directory rename detection bug
      merge-ort: fix massive leak
      merge-ort: ignore the directory rename split conflict for now
      merge-ort: begin performance work; instrument with trace2_region_* calls
      diffcore-rename: no point trying to find a match better than exact
      diffcore-rename: filter rename_src list when possible
      t4001: add a test comparing basename similarity and content similarity
      diffcore-rename: compute basenames of source and dest candidates
      diffcore-rename: complete find_basename_matches()
      diffcore-rename: guide inexact rename detection based on basenames
      gitdiffcore doc: mention new preliminary step for rename detection
      merge-ort: call diffcore_rename() directly
      Documentation/RelNotes: improve release note for rename detection work

Eric Sunshine (3):
      worktree: teach `repair` to fix multi-directional breakage
      t/perf: avoid unnecessary test_export() recursion
      maintenance: fix incorrect `maintenance.repo` path with bare repository

Eric Wong (2):
      core.abbrev=no disables abbreviations
      t1500: ensure current --since= behavior remains

Felipe Contreras (8):
      pull: refactor fast-forward check
      pull: give the advice for choosing rebase/merge much later
      pull: display default warning only when non-ff
      test: bisect-porcelain: fix location of files
      completion: bash: add __git_have_func helper
      completion: bash: improve function detection
      test: completion: add tests for __git_complete
      completion: add proper public __git_complete

Han-Wen Nienhuys (1):
      doc/reftable: document how to handle windows

Hariom Verma (4):
      t6300: use function to test trailer options
      pretty.c: refactor trailer logic to `format_set_trailers_options()`
      pretty.c: capture invalid trailer argument
      ref-filter: use pretty.c logic for trailers

Jacob Vosmaer (4):
      builtin/pack-objects.c: avoid iterating all refs
      ls-refs.c: initialize 'prefixes' before using it
      upload-pack.c: fix filter spec quoting bug
      t5544: clarify 'hook works with partial clone' test

Jeff Hostetler (11):
      p7519: do not rely on "xargs -d" in test
      p7519: fix watchman watch-list test on Windows
      p7519: move watchman cleanup earlier in the test
      p7519: add trace logging during perf test
      preload-index: log the number of lstat calls to trace2
      read-cache: log the number of lstat calls to trace2
      read-cache: log the number of scanned files to trace2
      fsmonitor: log invocation of FSMonitor hook to trace2
      fsmonitor: log FSMN token when reading and writing the index
      fsmonitor: refactor initialization of fsmonitor_last_update token
      dir: fix malloc of root untracked_cache_dir

Jeff King (45):
      pack-bitmap: fix header size check
      pack-bitmap: bounds-check size of cache extension
      t5310: drop size of truncated ewah bitmap
      rev-list: die when --test-bitmap detects a mismatch
      ewah: factor out bitmap growth
      ewah: make bitmap growth less aggressive
      ewah: implement bitmap_or()
      ewah: add bitmap_dup() function
      pack-bitmap-write: reimplement bitmap writing
      pack-bitmap-write: pass ownership of intermediate bitmaps
      pack-bitmap-write: ignore BITMAP_FLAG_REUSE
      git_connect_git(): forbid newlines in host and path
      fsck: reject .gitmodules git:// urls with newlines
      t5516: loosen "not our ref" error check
      patch-ids: handle duplicate hashmap entries
      quote: make sq_dequote_step() a public function
      for_each_object_in_pack(): clarify pack vs index ordering
      config: parse more robust format in GIT_CONFIG_PARAMETERS
      refs: switch peel_ref() to peel_iterated_oid()
      run-command: document use_shell option
      git-svn tests: rewrite brittle tests to use "--[no-]merges".
      git-compat-util: always enable variadic macros
      commit_graft_pos(): take an oid instead of a bare hash
      rerere: check dirname format while iterating rr_cache directory
      rerere: tighten rr-cache dirname check
      rerere: use strmap to store rerere directories
      hash_pos(): convert to oid_pos()
      oid_pos(): access table through const pointers
      t0000: keep clean-up tests together
      t0000: run prereq tests inside sub-test
      t0000: run cleaning test inside sub-test
      t0000: consistently use single quotes for outer tests
      pretty: lazy-load commit data when expanding user-format
      p5303: avoid sed GNU-ism
      completion: treat "branch -D" the same way as "branch -d"
      completion: handle other variants of "branch -m"
      doc/git-branch: fix awkward wording for "-c"
      t: add --no-tag option to test_commit
      mailmap: only look for .mailmap in work tree
      rev-list: add --disk-usage option for calculating disk usage
      docs/rev-list: add an examples section
      docs/rev-list: add some examples of --disk-usage
      doc: mention approxidates for git-commit --date
      Makefile: add OPEN_RETURNS_EINTR knob
      config.mak.uname: enable OPEN_RETURNS_EINTR for macOS Big Sur

Jiang Xin (5):
      test: add helper functions for git-bundle
      bundle: lost objects when removing duplicate pendings
      bundle: arguments can be read from stdin
      t5411: use different out file to prevent overwriting
      t5411: refactor check of refs using test_cmp_refs

Joey Salazar (1):
      doc: fix naming of response-end-pkt

Johannes Schindelin (58):
      tests: mark tests relying on the current default for `init.defaultBranch`
      t0060: preemptively adjust alignment
      t[01]*: adjust the references to the default branch name "main"
      t2*: adjust the references to the default branch name "main"
      t3[0-3]*: adjust the references to the default branch name "main"
      t3416: preemptively adjust alignment in a comment
      t34*: adjust the references to the default branch name "main"
      t3[5-9]*: adjust the references to the default branch name "main"
      t4*: adjust the references to the default branch name "main"
      t5323: prepare centered comment for `master` -> `main`
      t5[0-4]*: adjust the references to the default branch name "main"
      t5503: prepare aligned comment for replacing `master` with `main`
      t550*: adjust the references to the default branch name "main"
      t551*: adjust the references to the default branch name "main"
      t55[23]*: adjust the references to the default branch name "main"
      t55[4-9]*: adjust the references to the default branch name "main"
      t5[6-9]*: adjust the references to the default branch name "main"
      t6[0-3]*: adjust the references to the default branch name "main"
      t64*: preemptively adjust alignment to prepare for `master` -> `main`
      t6[4-9]*: adjust the references to the default branch name "main"
      t7[0-4]*: adjust the references to the default branch name "main"
      t7[5-9]*: adjust the references to the default branch name "main"
      t8*: adjust the references to the default branch name "main"
      t9[0-4]*: adjust the references to the default branch name "main"
      t9[5-7]*: adjust the references to the default branch name "main"
      tests(git-p4): transition to the default branch name `main`
      t99*: adjust the references to the default branch name "main"
      tests: drop prereq `PREPARE_FOR_MAIN_BRANCH` where no longer needed
      SKIP_DASHED_BUILT_INS: respect `config.mak`
      range-diff/format-patch: refactor check for commit range
      rebase -i: do leave commit message intact in fixup! chains
      range-diff: avoid leaking memory in two error code paths
      range-diff: libify the read_patches() function again
      range-diff: simplify code spawning `git log`
      range-diff: combine all options in a single data structure
      range-diff: move the diffopt initialization down one layer
      range-diff: offer --left-only/--right-only options
      range-diff/format-patch: handle commit ranges other than A..B
      range-diff(docs): explain how to specify commit ranges
      t1450: robustify `remove_object()`
      fsck --name-objects: be more careful parsing generation numbers
      reflog expire --stale-fix: be generous about missing objects
      commit-graph: when incompatible with graphs, indicate why
      run-command: invalidate lstat cache after a command finished
      Git 2.17.6
      Git 2.18.5
      Git 2.19.6
      Git 2.20.5
      Git 2.21.4
      Git 2.22.5
      Git 2.23.4
      Git 2.24.4
      Git 2.25.5
      Git 2.26.3
      Git 2.27.1
      Git 2.28.1
      Git 2.29.3
      Git 2.30.2

Johannes Sixt (2):
      annotate-tests: quote variable expansions containing path names
      replace "parameters" by "arguments" in error messages

Jonathan Tan (10):
      Doc: clarify contents of packfile sent as URI
      ls-refs: report unborn targets of symrefs
      connect, transport: encapsulate arg in struct
      clone: respect remote unborn HEAD
      usage: trace2 BUG() invocations
      http: allow custom index-pack args
      http-fetch: allow custom index-pack args
      fetch-pack: with packfile URIs, use index-pack arg
      fetch-pack: print and use dangling .gitmodules
      fetch-pack: do not mix --pack_header and packfile uri

Junio C Hamano (31):
      pack-redundant: gauge the usage before proposing its removal
      pull: get rid of unnecessary global variable
      pull: correct condition to trigger non-ff advice
      CoC: explicitly take any whitespace breakage
      parse-options: format argh like error messages
      The first batch in 2.31 cycle
      SubmittingPatches: tighten wording on "sign-off" procedure
      ci/install-depends: attempt to fix "brew cask" stuff
      t4203: make blame output massaging more robust
      The second batch
      The third batch
      The fourth batch
      The fifth batch
      Prepare for 2.30.1
      The sixth batch
      Git 2.30.1
      The seventh batch
      The eighth batch
      diff: --{rotate,skip}-to=<path>
      The ninth batch
      Documentation: typofix --column description
      The tenth batch
      push: do not turn --delete '' into a matching push
      blame-options.txt: camelcase blame.blankBoundary
      index-format doc: camelCase core.excludesFile
      Git 2.31-rc0
      Revert "commit-graph: when incompatible with graphs, indicate why"
      Hopefully the last batch before -rc1
      Git 2.31-rc1
      Merged the open-eintr workaround for macOS
      Git 2.31-rc2

Kevin Willford (1):
      fsmonitor: allow all entries for a folder to be invalidated

Martin von Zweigbergk (1):
      docs: clarify that refs/notes/ do not keep the attached objects alive

Martin Ågren (16):
      t1300: remove duplicate test for `--file ../foo`
      t1300: remove duplicate test for `--file no-such-file`
      t1300: don't needlessly work with `core.foo` configs
      pack-format.txt: document sizes at start of delta data
      object-name.c: rename from sha1-name.c
      object-file.c: rename from sha1-file.c
      sha1-lookup: rename `sha1_pos()` as `hash_pos()`
      hash-lookup: rename from sha1-lookup
      builtin/gc: don't peek into `struct lock_file`
      commit-graph: don't peek into `struct lock_file`
      midx: don't peek into `struct lock_file`
      refs/files-backend: don't peek into `struct lock_file`
      read-cache: try not to peek into `struct {lock_,temp}file`
      rev-list-options.txt: fix rendering of bonus paragraph
      git.txt: fix monospace rendering
      gitmailmap.txt: fix rendering of e-mail addresses

Matheus Tavares (10):
      t4129: don't fail if setgid is set in the test directory
      grep: error out if --untracked is used with --cached
      grep: honor sparse-checkout on working tree searches
      checkout: fix bug that makes checkout follow symlinks in leading path
      unpack_trees(): start with a fresh lstat cache
      write_entry(): fix misuses of `path` in error messages
      checkout-index: omit entries with no tempname from --temp output
      add --chmod: don't update index when --dry-run is used
      add: mark --chmod error string for translation
      add: propagate --chmod errors to exit status

Mikhail Klyushin (1):
      git-gui: fix typo in russian locale

Neeraj Singh (1):
      read-cache: make the index write buffer size 128K

Patrick Steinhardt (11):
      git: add `--super-prefix` to usage string
      config: add new way to pass config via `--config-env`
      config: extract function to parse config pairs
      fetch: extract writing to FETCH_HEAD
      fetch: use strbuf to format FETCH_HEAD updates
      fetch: refactor `s_update_ref` to use common exit path
      fetch: allow passing a transaction to `s_update_ref()`
      fetch: implement support for atomic reference updates
      config: store "git -c" variables using more robust format
      environment: make `getenv_safe()` a public function
      config: allow specifying config entries via envvar pairs

Peter Kaestle (1):
      submodules: fix of regression on fetching of non-init subsub-repo

Phil Hord (1):
      use delete_refs when deleting tags or branches

Philippe Blain (4):
      gitmodules.txt: fix 'GIT_WORK_TREE' variable name
      mergetool--lib: fix '--tool-help' to correctly show available tools
      mailmap doc: use correct environment variable 'GIT_WORK_TREE'
      ci: do not cancel all jobs of a matrix if one fails

Pranit Bauva (7):
      bisect--helper: reimplement `bisect_log` shell function in C
      bisect--helper: reimplement `bisect_replay` shell function in C
      bisect--helper: retire `--bisect-write` subcommand
      bisect--helper: use `res` instead of return in BISECT_RESET case option
      bisect--helper: retire `--bisect-auto-next` subcommand
      bisect--helper: reimplement `bisect_skip` shell function in C
      bisect--helper: retire `--check-and-set-terms` subcommand

Pratyush Yadav (2):
      git-gui: remove lines starting with the comment character
      Revert "git-gui: remove lines starting with the comment character"

Rafael Silva (8):
      worktree: libify should_prune_worktree()
      worktree: teach worktree to lazy-load "prunable" reason
      worktree: teach worktree_lock_reason() to gently handle main worktree
      t2402: ensure locked worktree is properly cleaned up
      worktree: teach `list --porcelain` to annotate locked worktree
      worktree: teach `list` to annotate prunable worktree
      worktree: teach `list` verbose mode
      blame: remove unnecessary use of get_commit_info()

René Scharfe (2):
      rebase: verify commit parameter
      cache-tree: use ce_namelen() instead of strlen()

SZEDER Gábor (2):
      t7800-difftool: don't accidentally match tmp dirs
      test-lib: prevent '--stress-jobs=X' from being ignored

Sangeeta Jain (1):
      diff: do not show submodule with untracked files as "-dirty"

Sergey Organov (32):
      revision: factor out parsing of diff-merge related options
      revision: factor out setup of diff-merge related settings
      revision: factor out initialization of diff-merge related settings
      revision: provide implementation for diff merges tweaks
      revision: move diff merges functions to its own diff-merges.c
      diff-merges: rename all functions to have common prefix
      diff-merges: move checks for first_parent_only out of the module
      diff-merges: rename diff_merges_default_to_enable() to match semantics
      diff-merges: re-arrange functions to match the order they are called in
      diff-merges: new function diff_merges_suppress()
      diff-merges: new function diff_merges_set_dense_combined_if_unset()
      diff-merges: introduce revs->first_parent_merges flag
      diff-merges: handle imply -p on -c/--cc logic for log.c
      diff-merges: revise revs->diff flag handling
      t4013: support test_expect_failure through ':failure' magic
      t4013: add tests for -m failing to override -c/--cc
      diff-merges: fix -m to properly override -c/--cc
      diff-merges: split 'ignore_merges' field
      diff-merges: group diff-merge flags next to each other inside 'rev_info'
      diff-merges: get rid of now empty diff_merges_init_revs()
      diff-merges: refactor opt settings into separate functions
      diff-merges: make -m/-c/--cc explicitly mutually exclusive
      diff-merges: implement new values for --diff-merges
      diff-merges: do not imply -p for new options
      diff-merges: let new options enable diff without -p
      diff-merges: add old mnemonic counterparts to --diff-merges
      diff-merges: add '--diff-merges=1' as synonym for 'first-parent'
      doc/git-log: describe new --diff-merges options
      doc/diff-generate-patch: mention new --diff-merges option
      doc/rev-list-options: document --first-parent changes merges format
      doc/git-show: include --diff-merges description
      t4013: add tests for --diff-merges=first-parent

Seth House (4):
      mergetool: add hideResolved configuration
      mergetool: break setup_tool out into separate initialization function
      mergetool: add per-tool support and overrides for the hideResolved flag
      mergetools/vimdiff: add vimdiff1 merge tool variant

Shubham Verma (10):
      t7001: modernize test formatting
      t7001: indent with TABs instead of spaces
      t7001: remove unnecessary blank lines
      t7001: modernize subshell formatting
      t7001: remove whitespace after redirect operators
      t7001: avoid using `cd` outside of subshells
      t7001: use '>' rather than 'touch'
      t7001: put each command on a separate line
      t7001: use here-docs instead of echo
      t7001: use `test` rather than `[`

Taylor Blau (40):
      ewah/ewah_bitmap.c: avoid open-coding ALLOC_GROW()
      pack-bitmap.c: check reads more aggressively when loading
      pack-bitmap: factor out 'bitmap_for_commit()'
      pack-bitmap: factor out 'add_commit_to_bitmap()'
      p7519: allow running without watchman prereq
      Documentation/git-clone.txt: document race with --local
      pack-revindex: introduce a new API
      write_reuse_object(): convert to new revindex API
      write_reused_pack_one(): convert to new revindex API
      write_reused_pack_verbatim(): convert to new revindex API
      check_object(): convert to new revindex API
      bitmap_position_packfile(): convert to new revindex API
      show_objects_for_type(): convert to new revindex API
      get_size_by_pos(): convert to new revindex API
      try_partial_reuse(): convert to new revindex API
      rebuild_existing_bitmaps(): convert to new revindex API
      get_delta_base_oid(): convert to new revindex API
      retry_bad_packed_offset(): convert to new revindex API
      packed_object_info(): convert to new revindex API
      unpack_entry(): convert to new revindex API
      for_each_object_in_pack(): convert to new revindex API
      builtin/gc.c: guess the size of the revindex
      pack-revindex: remove unused 'find_pack_revindex()'
      pack-revindex: remove unused 'find_revindex_position()'
      pack-revindex: hide the definition of 'revindex_entry'
      pack-revindex.c: avoid direct revindex access in 'offset_to_pack_pos()'
      refs: expose 'for_each_fullref_in_prefixes'
      ls-refs.c: traverse prefixes of disjoint "ref-prefix" sets
      packfile: prepare for the existence of '*.rev' files
      pack-write.c: prepare to write 'pack-*.rev' files
      builtin/index-pack.c: allow stripping arbitrary extensions
      builtin/index-pack.c: write reverse indexes
      builtin/pack-objects.c: respect 'pack.writeReverseIndex'
      Documentation/config/pack.txt: advertise 'pack.writeReverseIndex'
      t: prepare for GIT_TEST_WRITE_REV_INDEX
      t: support GIT_TEST_WRITE_REV_INDEX
      pack-revindex: ensure that on-disk reverse indexes are given precedence
      t5325: check both on-disk and in-memory reverse index
      .github/workflows/main.yml: run static-analysis on bionic
      commit-graph.c: display correct number of chunks when writing

Thomas Ackermann (7):
      doc: fix some typos
      doc hash-function-transition: fix asciidoc output
      doc hash-function-transition: use SHA-1 and SHA-256 consistently
      doc hash-function-transition: use upper case consistently
      doc hash-function-transition: fix incomplete sentence
      doc hash-function-transition: move rationale upwards
      doc: use https links

Torsten Bögershausen (1):
      MacOS: precompose_argv_prefix()

Utku Gultopu (1):
      doc: remove "directory cache" from man pages

Vasyl Vavrychuk (1):
      git-send-email.txt: mention less secure app access with Gmail

ZheNing Hu (5):
      builtin/*: update usage format
      ls_files.c: bugfix for --deleted and --modified
      ls_files.c: consolidate two for loops into one
      ls-files.c: add --deduplicate option
      difftool.c: learn a new way start at specified file

brian m. carlson (9):
      abspath: add a function to resolve paths with missing components
      rev-parse: add option for absolute or relative path formatting
      docs: rephrase and clarify the git status --short format
      ref-filter: switch some uses of unsigned long to size_t
      commit: ignore additional signatures when parsing signed commits
      gpg-interface: improve interface for parsing tags
      commit: allow parsing arbitrary buffers with headers
      ref-filter: hoist signature parsing
      gpg-interface: remove other signature headers before verifying

Ævar Arnfjörð Bjarmason (100):
      pretty format %(trailers) test: split a long line
      pretty format %(trailers) doc: avoid repetition
      pretty-format %(trailers): fix broken standalone "valueonly"
      pretty format %(trailers): add a "keyonly"
      pretty format %(trailers): add a "key_value_separator"
      mktag doc: say <hash> not <sha1>
      mktag doc: grammar fix, when exists -> when it exists
      CoC: Update word-wrapping to match upstream
      mktag doc: update to explain why to use this
      mktag tests: don't needlessly use a subshell
      mktag tests: use "test_commit" helper
      mktag tests: remove needless SHA-1 hardcoding
      mktag tests: don't redirect stderr to a file needlessly
      mktag tests: don't create "mytag" twice
      mktag tests: run "fsck" after creating "mytag"
      mktag tests: stress test whitespace handling
      mktag tests: test "hash-object" compatibility
      mktag tests: improve verify_object() test coverage
      mktag tests: test verify_object() with replaced objects
      mktag: use default strbuf_read() hint
      mktag: remove redundant braces in one-line body "if"
      mktag: use puts(str) instead of printf("%s\n", str)
      mktag: use fsck instead of custom verify_tag()
      fsck: make fsck_config() re-usable
      mktag: allow turning off fsck.extraHeaderEntry
      mktag: allow omitting the header/body \n separator
      mktag: convert to parse-options
      mktag: mark strings for translation
      mktag: add a --[no-]strict option
      branch: change "--local" to "--list" in comment
      branch tests: add to --sort tests
      ref-filter: add braces to if/else if/else chain
      ref-filter: move "cmp_fn" assignment into "else if" arm
      ref-filter: move ref_sorting flags to a bitfield
      branch: sort detached HEAD based on a flag
      branch: show "HEAD detached" first under reverse sort
      Makefile: remove a warning about old GETTEXT_POISON flag
      gettext.c: remove/reword a mostly-useless comment
      mailmap doc: create a new "gitmailmap(5)" man page
      mailmap doc: quote config variables `like.this`
      check-mailmap doc: note config options
      mailmap doc: start by mentioning the comment syntax
      mailmap tests: use our preferred whitespace syntax
      mailmap tests: modernize syntax & test idioms
      mailmap tests: improve --stdin tests
      mailmap tests: remove redundant entry in test
      mailmap tests: add a test for "not a blob" error
      mailmap tests: get rid of overly complex blame fuzzing
      mailmap: test for silent exiting on missing file/blob
      test-lib functions: expand "test_commit" comment template
      test-lib functions: document arguments to test_commit
      test-lib functions: add --author support to test_commit
      test-lib functions: add an --append option to test_commit
      tests: refactor a few tests to use "test_commit --append"
      mailmap doc + tests: add better examples & test them
      mailmap tests: add a test for comment syntax
      mailmap tests: add tests for whitespace syntax
      mailmap tests: add tests for empty "<>" syntax
      mailmap doc + tests: document and test for case-insensitivity
      shortlog: remove unused(?) "repo-abbrev" feature
      CoC: update to version 2.0 + local changes
      fsck doc: remove ancient out-of-date diagnostics
      ci: remove GETTEXT_POISON jobs
      tests: remove support for GIT_TEST_GETTEXT_POISON
      tests: remove uses of GIT_TEST_GETTEXT_POISON=false
      cache-tree tests: refactor for modern test style
      cache-tree tests: remove unused $2 parameter
      cache-tree tests: use a sub-shell with less indirection
      cache-tree tests: explicitly test HEAD and index differences
      git svn mergeinfo tests: modernize redirection & quoting style
      git svn mergeinfo tests: refactor "test -z" to use test_must_be_empty
      upload-pack tests: avoid a non-zero "grep" exit status
      archive tests: use a cheaper "zipinfo -h" invocation to get header
      rm tests: actually test for SIGPIPE in SIGPIPE test
      config.mak.uname: remove redundant NO_LIBPCRE1_JIT flag
      Remove support for v1 of the PCRE library
      grep/pcre2 tests: don't rely on invalid UTF-8 data test
      grep/pcre2: better support invalid UTF-8 haystacks
      grep/log: remove hidden --debug and --grep-debug options
      pager: refactor wait_for_pager() function
      pager: test for exit code with and without SIGPIPE
      run-command: add braces for "if" block in wait_or_whine()
      pager: properly log pager exit code when signalled
      test-lib: remove check_var_migration
      test lib: change "error" to "BUG" as appropriate
      test-lib-functions: move test_set_index_version() to its user
      test-lib-functions: remove generate_zero_bytes() wrapper
      test libs: rename bundle helper to "lib-bundle.sh"
      test libs: rename gitweb-lib.sh to lib-gitweb.sh
      test-lib-functions: move function to lib-bitmap.sh
      t/.gitattributes: sort lines
      tests: remove last uses of GIT_TEST_GETTEXT_POISON=false
      tests: remove most uses of C_LOCALE_OUTPUT
      tests: remove last uses of C_LOCALE_OUTPUT
      tests: remove most uses of test_i18ncmp
      diff: add an API for deferred freeing
      diff: plug memory leak from regcomp() on {log,diff} -I
      test libs: rename "diff-lib" to "lib-diff"
      test-lib-functions: remove bug-inducing "diagnostics" helper param
      test-lib-functions: assert correct parameter count


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.31.0-rc1
@ 2021-03-03 10:14  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2021-03-03 10:14 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.31.0-rc1 is now available for testing
at the usual places.  It is comprised of 631 non-merge commits
since v2.30.0, contributed by 67 people, 21 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.31.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.30.0 are as follows.
Welcome to the Git development community!

  Andreas Bühmann, Andrew Klotz, Andrzej Hunt, Antonio Russo,
  Arnaud Morin, Christian Walther, Clement Moyroud, Daniel Levin,
  Daniel Troger, Harold Kim, Jacob Vosmaer, LeSeulArtichaut,
  Mikhail Klyushin, Neeraj Singh, Sangeeta Jain, Seth House,
  Shubham Verma, Utku Gultopu, Vasyl Vavrychuk, Vojtěch Knyttl,
  and ZheNing Hu.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Abhishek Kumar, Adam Dinwoodie, Ævar Arnfjörð Bjarmason,
  Alex Henrie, brian m. carlson, Christian Couder, Denton Liu,
  Derrick Stolee, Elijah Newren, Eric Sunshine, Eric Wong,
  Felipe Contreras, Han-Wen Nienhuys, Hariom Verma, Heba Waly,
  Jeff Hostetler, Jeff King, Jiang Xin, Joey Salazar, Johannes
  Schindelin, Johannes Sixt, Jonathan Tan, Junio C Hamano,
  Kevin Daudt, Kevin Willford, Lars Schneider, Martin Ågren,
  Martin von Zweigbergk, Matheus Tavares, Michael Haggerty,
  Patrick Steinhardt, Paul Jolly, Peter Kaestle, Phil Hord,
  Philippe Blain, Phillip Wood, Pranit Bauva, Pratyush Yadav,
  Rafael Silva, René Scharfe, Ross Light, Sergey Organov, SZEDER
  Gábor, Taylor Blau, Thomas Ackermann, and Torsten Bögershausen.

[*] We are counting not just the authorship contribution but
    issue reporting, testing and reviewing that are recorded
    in the commit trailers.

----------------------------------------------------------------

Git 2.31 Release Notes (draft)
==============================

Updates since v2.30
-------------------

Backward incompatible and other important changes

 * The "pack-redundant" command, which has been left stale with almost
   unusable performance issues, now warns loudly when it gets used, as
   we no longer want to recommend its use (instead just "repack -d"
   instead).

 * The development community has adopted Contributor Covenant v2.0 to
   update from v1.4 that we have been using.

 * The support for deprecated PCRE1 library has been dropped.


UI, Workflows & Features

 * The "--format=%(trailers)" mechanism gets enhanced to make it
   easier to design output for machine consumption.

 * When a user does not tell "git pull" to use rebase or merge, the
   command gives a loud message telling a user to choose between
   rebase or merge but creates a merge anyway, forcing users who would
   want to rebase to redo the operation.  Fix an early part of this
   problem by tightening the condition to give the message---there is
   no reason to stop or force the user to choose between rebase or
   merge if the history fast-forwards.

 * The configuration variable 'core.abbrev' can be set to 'no' to
   force no abbreviation regardless of the hash algorithm.

 * "git rev-parse" can be explicitly told to give output as absolute
   or relative path with the `--path-format=(absolute|relative)` option.

 * Bash completion (in contrib/) update to make it easier for
   end-users to add completion for their custom "git" subcommands.

 * "git maintenance" learned to drive scheduled maintenance on
   platforms whose native scheduling methods are not 'cron'.

 * After expiring a reflog and making a single commit, the reflog for
   the branch would record a single entry that knows both @{0} and
   @{1}, but we failed to answer "what commit were we on?", i.e. @{1}

 * "git bundle" learns "--stdin" option to read its refs from the
   standard input.  Also, it now does not lose refs whey they point
   at the same object.

 * "git log" learned a new "--diff-merges=<how>" option.

 * "git ls-files" can and does show multiple entries when the index is
   unmerged, which is a source for confusion unless -s/-u option is in
   use.  A new option --deduplicate has been introduced.

 * `git worktree list` now annotates worktrees as prunable, shows
   locked and prunable attributes in --porcelain mode, and gained
   a --verbose option.

 * "git clone" tries to locally check out the branch pointed at by
   HEAD of the remote repository after it is done, but the protocol
   did not convey the information necessary to do so when copying an
   empty repository.  The protocol v2 learned how to do so.

 * There are other ways than ".." for a single token to denote a
   "commit range", namely "<rev>^!" and "<rev>^-<n>", but "git
   range-diff" did not understand them.

 * The "git range-diff" command learned "--(left|right)-only" option
   to show only one side of the compared range.

 * "git mergetool" feeds three versions (base, local and remote) of
   a conflicted path unmodified.  The command learned to optionally
   prepare these files with unconflicted parts already resolved.

 * The .mailmap is documented to be read only from the root level of a
   working tree, but a stray file in a bare repository also was read
   by accident, which has been corrected.

 * "git maintenance" tool learned a new "pack-refs" maintenance task.

 * The error message given when a configuration variable that is
   expected to have a boolean value has been improved.

 * Signed commits and tags now allow verification of objects, whose
   two object names (one in SHA-1, the other in SHA-256) are both
   signed.

 * "git rev-list" command learned "--disk-usage" option.

 * "git {diff,log} --{skip,rotate}-to=<path>" allows the user to
   discard diff output for early paths or move them to the end of the
   output.

 * "git difftool" learned "--skip-to=<path>" option to restart an
   interrupted session from an arbitrary path.

 * "git grep" has been tweaked to be limited to the sparse checkout
   paths.

 * "git rebase --[no-]fork-point" gained a configuration variable
   rebase.forkPoint so that users do not have to keep specifying a
   non-default setting.


Performance, Internal Implementation, Development Support etc.

 * A 3-year old test that was not testing anything useful has been
   corrected.

 * Retire more names with "sha1" in it.

 * The topological walk codepath is covered by new trace2 stats.

 * Update the Code-of-conduct to version 2.0 from the upstream (we've
   been using version 1.4).

 * "git mktag" validates its input using its own rules before writing
   a tag object---it has been updated to share the logic with "git
   fsck".

 * Two new ways to feed configuration variable-value pairs via
   environment variables have been introduced, and the way
   GIT_CONFIG_PARAMETERS encodes variable/value pairs has been tweaked
   to make it more robust.

 * Tests have been updated so that they do not to get affected by the
   name of the default branch "git init" creates.

 * "git fetch" learns to treat ref updates atomically in all-or-none
   fashion, just like "git push" does, with the new "--atomic" option.

 * The peel_ref() API has been replaced with peel_iterated_oid().

 * The .use_shell flag in struct child_process that is passed to
   run_command() API has been clarified with a bit more documentation.

 * Document, clean-up and optimize the code around the cache-tree
   extension in the index.

 * The ls-refs protocol operation has been optimized to narrow the
   sub-hierarchy of refs/ it walks to produce response.

 * When removing many branches and tags, the code used to do so one
   ref at a time.  There is another API it can use to delete multiple
   refs, and it makes quite a lot of performance difference when the
   refs are packed.

 * The "pack-objects" command needs to iterate over all the tags when
   automatic tag following is enabled, but it actually iterated over
   all refs and then discarded everything outside "refs/tags/"
   hierarchy, which was quite wasteful.

 * A perf script was made more portable.

 * Our setting of GitHub CI test jobs were a bit too eager to give up
   once there is even one failure found.  Tweak the knob to allow
   other jobs keep running even when we see a failure, so that we can
   find more failures in a single run.

 * We've carried compatibility codepaths for compilers without
   variadic macros for quite some time, but the world may be ready for
   them to be removed.  Force compilation failure on exotic platforms
   where variadic macros are not available to find out who screams in
   such a way that we can easily revert if it turns out that the world
   is not yet ready.

 * Code clean-up to ensure our use of hashtables using object names as
   keys use the "struct object_id" objects, not the raw hash values.

 * Lose the debugging aid that may have been useful in the past, but
   no longer is, in the "grep" codepaths.

 * Some pretty-format specifiers do not need the data in commit object
   (e.g. "%H"), but we were over-eager to load and parse it, which has
   been made even lazier.

 * Get rid of "GETTEXT_POISON" support altogether, which may or may
   not be controversial.

 * Introduce an on-disk file to record revindex for packdata, which
   traditionally was always created on the fly and only in-core.

 * The commit-graph learned to use corrected commit dates instead of
   the generation number to help topological revision traversal.

 * Piecemeal of rewrite of "git bisect" in C continues.

 * When a pager spawned by us exited, the trace log did not record its
   exit status correctly, which has been corrected.

 * Removal of GIT_TEST_GETTEXT_POISON continues.

 * The code to implement "git merge-base --independent" was poorly
   done and was kept from the very beginning of the feature.

 * Preliminary changes to fsmonitor integration.

 * Performance optimization work on the rename detection continues.

 * The common code to deal with "chunked file format" that is shared
   by the multi-pack-index and commit-graph files have been factored
   out, to help codepaths for both filetypes to become more robust.

 * The approach to "fsck" the incoming objects in "index-pack" is
   attractive for performance reasons (we have them already in core,
   inflated and ready to be inspected), but fundamentally cannot be
   applied fully when we receive more than one pack stream, as a tree
   object in one pack may refer to a blob object in another pack as
   ".gitmodules", when we want to inspect blobs that are used as
   ".gitmodules" file, for example.  Teach "index-pack" to emit
   objects that must be inspected later and check them in the calling
   "fetch-pack" process.

 * The logic to handle "trailer" related placeholders in the
   "--format=" mechanisms in the "log" family and "for-each-ref"
   family is getting unified.

 * Raise the buffer size used when writing the index file out from
   (obviously too small) 8kB to (clearly sufficiently large) 128kB.


Fixes since v2.30
-----------------

 * Diagnose command line error of "git rebase" early.

 * Clean up option descriptions in "git cmd --help".

 * "git stash" did not work well in a sparsely checked out working
   tree.

 * Some tests expect that "ls -l" output has either '-' or 'x' for
   group executable bit, but setgid bit can be inherited from parent
   directory and make these fields 'S' or 's' instead, causing test
   failures.

 * "git for-each-repo --config=<var> <cmd>" should not run <cmd> for
   any repository when the configuration variable <var> is not defined
   even once.

 * Fix 2.29 regression where "git mergetool --tool-help" fails to list
   all the available tools.

 * Fix for procedure to building CI test environment for mac.

 * The implementation of "git branch --sort" wrt the detached HEAD
   display has always been hacky, which has been cleaned up.

 * Newline characters in the host and path part of git:// URL are
   now forbidden.

 * "git diff" showed a submodule working tree with untracked cruft as
   "Submodule commit <objectname>-dirty", but a natural expectation is
   that the "-dirty" indicator would align with "git describe --dirty",
   which does not consider having untracked files in the working tree
   as source of dirtiness.  The inconsistency has been fixed.

 * When more than one commit with the same patch ID appears on one
   side, "git log --cherry-pick A...B" did not exclude them all when a
   commit with the same patch ID appears on the other side.  Now it
   does.

 * Documentation for "git fsck" lost stale bits that has become
   incorrect.

 * Doc fix for packfile URI feature.

 * When "git rebase -i" processes "fixup" insn, there is no reason to
   clean up the commit log message, but we did the usual stripspace
   processing.  This has been corrected.
   (merge f7d42ceec5 js/rebase-i-commit-cleanup-fix later to maint).

 * Fix in passing custom args from "git clone" to "upload-pack" on the
   other side.
   (merge ad6b5fefbd jv/upload-pack-filter-spec-quotefix later to maint).

 * The command line completion (in contrib/) completed "git branch -d"
   with branch names, but "git branch -D" offered tagnames in addition,
   which has been corrected.  "git branch -M" had the same problem.
   (merge 27dc071b9a jk/complete-branch-force-delete later to maint).

 * When commands are started from a subdirectory, they may have to
   compare the path to the subdirectory (called prefix and found out
   from $(pwd)) with the tracked paths.  On macOS, $(pwd) and
   readdir() yield decomposed path, while the tracked paths are
   usually normalized to the precomposed form, causing mismatch.  This
   has been fixed by taking the same approach used to normalize the
   command line arguments.
   (merge 5c327502db tb/precompose-prefix-too later to maint).

 * Even though invocations of "die()" were logged to the trace2
   system, "BUG()"s were not, which has been corrected.
   (merge 0a9dde4a04 jt/trace2-BUG later to maint).

 * "git grep --untracked" is meant to be "let's ALSO find in these
   files on the filesystem" when looking for matches in the working
   tree files, and does not make any sense if the primary search is
   done against the index, or the tree objects.  The "--cached" and
   "--untracked" options have been marked as mutually incompatible.
   (merge 0c5d83b248 mt/grep-cached-untracked later to maint).

 * Fix "git fsck --name-objects" which apparently has not been used by
   anybody who is motivated enough to report breakage.
   (merge e89f89361c js/fsck-name-objects-fix later to maint).

 * Avoid individual tests in t5411 from getting affected by each other
   by forcing them to use separate output files during the test.
   (merge 822ee894f6 jx/t5411-unique-filenames later to maint).

 * Test to make sure "git rev-parse one-thing one-thing" gives
   the same thing twice (when one-thing is --since=X).
   (merge a5cdca4520 ew/rev-parse-since-test later to maint).

 * When certain features (e.g. grafts) used in the repository are
   incompatible with the use of the commit-graph, we used to silently
   turned commit-graph off; we now tell the user what we are doing.
   (merge c85eec7fc3 js/commit-graph-warning later to maint).

 * Objects that lost references can be pruned away, even when they
   have notes attached to it (and these notes will become dangling,
   which in turn can be pruned with "git notes prune").  This has been
   clarified in the documentation.
   (merge fa9ab027ba mz/doc-notes-are-not-anchors later to maint).

 * The error codepath around the "--temp/--prefix" feature of "git
   checkout-index" has been improved.
   (merge 3f7ba60350 mt/checkout-index-corner-cases later to maint).

 * The "git maintenance register" command had trouble registering bare
   repositories, which had been corrected.

 * A handful of multi-word configuration variable names in
   documentation that are spelled in all lowercase have been corrected
   to use the more canonical camelCase.
   (merge 7dd0eaa39c dl/doc-config-camelcase later to maint).

 * "git push $there --delete ''" should have been diagnosed as an
   error, but instead turned into a matching push, which has been
   corrected.
   (merge 20e416409f jc/push-delete-nothing later to maint).

 * Test script modernization.
   (merge 488acf15df sv/t7001-modernize later to maint).

 * An under-allocation for the untracked cache data has been corrected.
   (merge 6347d649bc jh/untracked-cache-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge e3f5da7e60 sg/t7800-difftool-robustify later to maint).
   (merge 9d336655ba js/doc-proto-v2-response-end later to maint).
   (merge 1b5b8cf072 jc/maint-column-doc-typofix later to maint).
   (merge 3a837b58e3 cw/pack-config-doc later to maint).
   (merge 01168a9d89 ug/doc-commit-approxidate later to maint).
   (merge b865734760 js/params-vs-args later to maint).

----------------------------------------------------------------

Changes since v2.30.0 are as follows:

Abhishek Kumar (11):
      commit-graph: fix regression when computing Bloom filters
      revision: parse parent in indegree_walk_step()
      commit-graph: consolidate fill_commit_graph_info
      t6600-test-reach: generalize *_three_modes
      commit-graph: add a slab to store topological levels
      commit-graph: return 64-bit generation number
      commit-graph: implement corrected commit date
      commit-graph: implement generation data chunk
      commit-graph: use generation v2 only if entire chain does
      commit-reach: use corrected commit dates in paint_down_to_common()
      doc: add corrected commit date info

Adam Dinwoodie (1):
      t4129: fix setfacl-related permissions failure

Alex Henrie (1):
      rebase: add a config option for --no-fork-point

Andrew Klotz (1):
      config: improve error message for boolean config

Andrzej Hunt (1):
      commit-graph: avoid leaking topo_levels slab in write_commit_graph()

Antonio Russo (1):
      t6016: move to lib-log-graph.sh framework

Christian Couder (3):
      fetch-pack: rename helper to create_promisor_file()
      fetch-pack: refactor writing promisor file
      pack-write: die on error in write_promisor_file()

Christian Walther (1):
      doc: mention bigFileThreshold for packing

Daniel Levin (1):
      git-p4: fix syncing file types with pattern

Denton Liu (12):
      refs: factor out set_read_ref_cutoffs()
      refs: allow @{n} to work with n-sized reflog
      test-lib-functions.sh: fix usage for test_commit()
      t4203: stop losing return codes of git commands
      git-stash.txt: be explicit about subcommand options
      t3905: remove spaces after redirect operators
      t3905: move all commands into test cases
      t3905: remove nested git in command substitution
      t3905: replace test -s with test_file_not_empty
      t3905: use test_cmp() to check file contents
      stash: declare ref_stash as an array
      i18n.txt: camel case and monospace "i18n.commitEncoding"

Derrick Stolee (65):
      maintenance: extract platform-specific scheduling
      maintenance: include 'cron' details in docs
      pack-bitmap-write: fill bitmap with commit history
      bitmap: implement bitmap_is_subset()
      commit: implement commit_list_contains()
      t5310: add branch-based checks
      pack-bitmap-write: rename children to reverse_edges
      pack-bitmap-write: build fewer intermediate bitmaps
      pack-bitmap-write: use existing bitmaps
      pack-bitmap-write: relax unique revwalk condition
      pack-bitmap-write: better reuse bitmaps
      revision: trace topo-walk statistics
      tree-walk: report recursion counts
      unpack-trees: add trace2 regions
      cache-tree: use trace2 in cache_tree_update()
      maintenance: use launchctl on macOS
      maintenance: use Windows scheduled tasks
      for-each-repo: do nothing on empty config
      cache-tree: trace regions for I/O
      cache-tree: trace regions for prime_cache_tree
      index-format: use 'cache tree' over 'cached tree'
      index-format: update preamble to cache tree extension
      index-format: discuss recursion of cache-tree better
      cache-tree: speed up consecutive path comparisons
      maintenance: set log.excludeDecoration durin prefetch
      t7900: clean up some broken refs
      cache-tree: clean up cache_tree_update()
      cache-tree: simplify verify_cache() prototype
      cache-tree: extract subtree_pos()
      fsmonitor: de-duplicate BUG()s around dirty bits
      repository: add repo reference to index_state
      name-hash: use trace2 regions for init
      sparse-checkout: load sparse-checkout patterns
      test-lib: test_region looks for trace2 regions
      t1092: test interesting sparse-checkout scenarios
      commit-reach: reduce requirements for remove_redundant()
      commit-graph: use repo_parse_commit
      commit-graph: always parse before commit_graph_data_at()
      commit-graph: validate layers for generation data
      commit-graph: compute generations separately
      commit-graph: be extra careful about mixed generations
      commit-graph: prepare commit graph
      commit-graph: anonymize data in chunk_write_fn
      maintenance: add pack-refs task
      maintenance: incremental strategy runs pack-refs weekly
      chunk-format: create chunk format write API
      commit-graph: use chunk-format write API
      midx: rename pack_info to write_midx_context
      midx: use context in write_midx_pack_names()
      midx: add entries to write_midx_context
      midx: add pack_perm to write_midx_context
      midx: add num_large_offsets to write_midx_context
      midx: return success/failure in chunk write methods
      midx: drop chunk progress during write
      midx: use chunk-format API in write_midx_internal()
      chunk-format: create read chunk API
      commit-graph: use chunk-format read API
      midx: use chunk-format read API
      midx: use 64-bit multiplication for chunk sizes
      chunk-format: restore duplicate chunk checks
      chunk-format: add technical docs
      commit-reach: use one walk in remove_redundant()
      commit-reach: move compare_commits_by_gen
      commit-reach: use heuristic in remove_redundant()
      commit-reach: stale commits may prune generation further

Elijah Newren (92):
      t7012: add a testcase demonstrating stash apply bugs in sparse checkouts
      stash: remove unnecessary process forking
      stash: fix stash application in sparse-checkouts
      merge-ort: setup basic internal data structures
      merge-ort: add some high-level algorithm structure
      merge-ort: port merge_start() from merge-recursive
      merge-ort: use histogram diff
      merge-ort: add an err() function similar to one from merge-recursive
      merge-ort: implement a very basic collect_merge_info()
      merge-ort: avoid repeating fill_tree_descriptor() on the same tree
      merge-ort: compute a few more useful fields for collect_merge_info
      merge-ort: record stage and auxiliary info for every path
      merge-ort: avoid recursing into identical trees
      merge-ort: add a preliminary simple process_entries() implementation
      merge-ort: have process_entries operate in a defined order
      merge-ort: step 1 of tree writing -- record basenames, modes, and oids
      merge-ort: step 2 of tree writing -- function to create tree object
      merge-ort: step 3 of tree writing -- handling subdirectories as we go
      merge-ort: basic outline for merge_switch_to_result()
      merge-ort: add implementation of checkout()
      tree: enable cmp_cache_name_compare() to be used elsewhere
      merge-ort: add implementation of record_conflicted_index_entries()
      merge-ort: free data structures in merge_finalize()
      merge-ort: add a few includes
      merge-ort: add a clear_internal_opts helper
      merge-ort: add a path_conflict field to merge_options_internal
      merge-ort: add a paths_to_free field to merge_options_internal
      merge-ort: add function grouping comments
      merge-ort: add die-not-implemented stub handle_content_merge() function
      merge-ort: add modify/delete handling and delayed output processing
      merge-ort: add basic data structures for handling renames
      merge-ort: add initial outline for basic rename detection
      merge-ort: implement detect_regular_renames()
      merge-ort: implement compare_pairs() and collect_renames()
      merge-ort: add basic outline for process_renames()
      diffcore-rename: rename num_create to num_destinations
      diffcore-rename: avoid usage of global in too_many_rename_candidates()
      diffcore-rename: simplify limit check
      diffcore-rename: reduce jumpiness in progress counters
      t4058: add more tests and documentation for duplicate tree entry handling
      t4058: explore duplicate tree entry handling in a bit more detail
      diffcore-rename: simplify and accelerate register_rename_src()
      diffcore-rename: accelerate rename_dst setup
      merge-ort: add implementation of both sides renaming identically
      merge-ort: add implementation of both sides renaming differently
      merge-ort: add implementation of rename/delete conflicts
      merge-ort: add implementation of rename collisions
      merge-ort: add implementation of normal rename handling
      merge-ort: add implementation of type-changed rename handling
      commit: move reverse_commit_list() from merge-recursive
      merge-ort: copy a few small helper functions from merge-recursive.c
      merge-ort: make clear_internal_opts() aware of partial clearing
      merge-ort: implement merge_incore_recursive()
      merge-ort: handle D/F conflict where directory disappears due to merge
      merge-ort: handle directory/file conflicts that remain
      merge-ort: implement unique_path() helper
      merge-ort: handle book-keeping around two- and three-way content merge
      merge-ort: flesh out implementation of handle_content_merge()
      merge-ort: copy and adapt merge_3way() from merge-recursive.c
      merge-ort: copy and adapt merge_submodule() from merge-recursive.c
      merge-ort: implement format_commit()
      merge-ort: copy find_first_merges() implementation from merge-recursive.c
      merge-ort: add handling for different types of files at same path
      diffcore-rename: remove unnecessary duplicate entry checks
      merge-ort: add new data structures for directory rename detection
      merge-ort: initialize and free new directory rename data structures
      merge-ort: collect which directories are removed in dirs_removed
      merge-ort: add outline for computing directory renames
      merge-ort: add outline of get_provisional_directory_renames()
      merge-ort: copy get_renamed_dir_portion() from merge-recursive.c
      merge-ort: implement compute_rename_counts()
      merge-ort: implement handle_directory_level_conflicts()
      merge-ort: modify collect_renames() for directory rename handling
      merge-ort: implement compute_collisions()
      merge-ort: implement apply_dir_rename() and check_dir_renamed()
      merge-ort: implement check_for_directory_rename()
      merge-ort: implement handle_path_level_conflicts()
      merge-ort: add a new toplevel_dir field
      merge-ort: implement apply_directory_rename_modifications()
      merge-ort: process_renames() now needs more defensiveness
      merge-ort: fix a directory rename detection bug
      merge-ort: fix massive leak
      merge-ort: ignore the directory rename split conflict for now
      merge-ort: begin performance work; instrument with trace2_region_* calls
      diffcore-rename: no point trying to find a match better than exact
      diffcore-rename: filter rename_src list when possible
      t4001: add a test comparing basename similarity and content similarity
      diffcore-rename: compute basenames of source and dest candidates
      diffcore-rename: complete find_basename_matches()
      diffcore-rename: guide inexact rename detection based on basenames
      gitdiffcore doc: mention new preliminary step for rename detection
      merge-ort: call diffcore_rename() directly

Eric Sunshine (3):
      worktree: teach `repair` to fix multi-directional breakage
      t/perf: avoid unnecessary test_export() recursion
      maintenance: fix incorrect `maintenance.repo` path with bare repository

Eric Wong (2):
      core.abbrev=no disables abbreviations
      t1500: ensure current --since= behavior remains

Felipe Contreras (8):
      pull: refactor fast-forward check
      pull: give the advice for choosing rebase/merge much later
      pull: display default warning only when non-ff
      test: bisect-porcelain: fix location of files
      completion: bash: add __git_have_func helper
      completion: bash: improve function detection
      test: completion: add tests for __git_complete
      completion: add proper public __git_complete

Han-Wen Nienhuys (1):
      doc/reftable: document how to handle windows

Hariom Verma (4):
      t6300: use function to test trailer options
      pretty.c: refactor trailer logic to `format_set_trailers_options()`
      pretty.c: capture invalid trailer argument
      ref-filter: use pretty.c logic for trailers

Jacob Vosmaer (4):
      builtin/pack-objects.c: avoid iterating all refs
      ls-refs.c: initialize 'prefixes' before using it
      upload-pack.c: fix filter spec quoting bug
      t5544: clarify 'hook works with partial clone' test

Jeff Hostetler (11):
      p7519: do not rely on "xargs -d" in test
      p7519: fix watchman watch-list test on Windows
      p7519: move watchman cleanup earlier in the test
      p7519: add trace logging during perf test
      preload-index: log the number of lstat calls to trace2
      read-cache: log the number of lstat calls to trace2
      read-cache: log the number of scanned files to trace2
      fsmonitor: log invocation of FSMonitor hook to trace2
      fsmonitor: log FSMN token when reading and writing the index
      fsmonitor: refactor initialization of fsmonitor_last_update token
      dir: fix malloc of root untracked_cache_dir

Jeff King (43):
      pack-bitmap: fix header size check
      pack-bitmap: bounds-check size of cache extension
      t5310: drop size of truncated ewah bitmap
      rev-list: die when --test-bitmap detects a mismatch
      ewah: factor out bitmap growth
      ewah: make bitmap growth less aggressive
      ewah: implement bitmap_or()
      ewah: add bitmap_dup() function
      pack-bitmap-write: reimplement bitmap writing
      pack-bitmap-write: pass ownership of intermediate bitmaps
      pack-bitmap-write: ignore BITMAP_FLAG_REUSE
      git_connect_git(): forbid newlines in host and path
      fsck: reject .gitmodules git:// urls with newlines
      t5516: loosen "not our ref" error check
      patch-ids: handle duplicate hashmap entries
      quote: make sq_dequote_step() a public function
      for_each_object_in_pack(): clarify pack vs index ordering
      config: parse more robust format in GIT_CONFIG_PARAMETERS
      refs: switch peel_ref() to peel_iterated_oid()
      run-command: document use_shell option
      git-svn tests: rewrite brittle tests to use "--[no-]merges".
      git-compat-util: always enable variadic macros
      commit_graft_pos(): take an oid instead of a bare hash
      rerere: check dirname format while iterating rr_cache directory
      rerere: tighten rr-cache dirname check
      rerere: use strmap to store rerere directories
      hash_pos(): convert to oid_pos()
      oid_pos(): access table through const pointers
      t0000: keep clean-up tests together
      t0000: run prereq tests inside sub-test
      t0000: run cleaning test inside sub-test
      t0000: consistently use single quotes for outer tests
      pretty: lazy-load commit data when expanding user-format
      p5303: avoid sed GNU-ism
      completion: treat "branch -D" the same way as "branch -d"
      completion: handle other variants of "branch -m"
      doc/git-branch: fix awkward wording for "-c"
      t: add --no-tag option to test_commit
      mailmap: only look for .mailmap in work tree
      rev-list: add --disk-usage option for calculating disk usage
      docs/rev-list: add an examples section
      docs/rev-list: add some examples of --disk-usage
      doc: mention approxidates for git-commit --date

Jiang Xin (5):
      test: add helper functions for git-bundle
      bundle: lost objects when removing duplicate pendings
      bundle: arguments can be read from stdin
      t5411: use different out file to prevent overwriting
      t5411: refactor check of refs using test_cmp_refs

Joey Salazar (1):
      doc: fix naming of response-end-pkt

Johannes Schindelin (43):
      tests: mark tests relying on the current default for `init.defaultBranch`
      t0060: preemptively adjust alignment
      t[01]*: adjust the references to the default branch name "main"
      t2*: adjust the references to the default branch name "main"
      t3[0-3]*: adjust the references to the default branch name "main"
      t3416: preemptively adjust alignment in a comment
      t34*: adjust the references to the default branch name "main"
      t3[5-9]*: adjust the references to the default branch name "main"
      t4*: adjust the references to the default branch name "main"
      t5323: prepare centered comment for `master` -> `main`
      t5[0-4]*: adjust the references to the default branch name "main"
      t5503: prepare aligned comment for replacing `master` with `main`
      t550*: adjust the references to the default branch name "main"
      t551*: adjust the references to the default branch name "main"
      t55[23]*: adjust the references to the default branch name "main"
      t55[4-9]*: adjust the references to the default branch name "main"
      t5[6-9]*: adjust the references to the default branch name "main"
      t6[0-3]*: adjust the references to the default branch name "main"
      t64*: preemptively adjust alignment to prepare for `master` -> `main`
      t6[4-9]*: adjust the references to the default branch name "main"
      t7[0-4]*: adjust the references to the default branch name "main"
      t7[5-9]*: adjust the references to the default branch name "main"
      t8*: adjust the references to the default branch name "main"
      t9[0-4]*: adjust the references to the default branch name "main"
      t9[5-7]*: adjust the references to the default branch name "main"
      tests(git-p4): transition to the default branch name `main`
      t99*: adjust the references to the default branch name "main"
      tests: drop prereq `PREPARE_FOR_MAIN_BRANCH` where no longer needed
      SKIP_DASHED_BUILT_INS: respect `config.mak`
      range-diff/format-patch: refactor check for commit range
      rebase -i: do leave commit message intact in fixup! chains
      range-diff: avoid leaking memory in two error code paths
      range-diff: libify the read_patches() function again
      range-diff: simplify code spawning `git log`
      range-diff: combine all options in a single data structure
      range-diff: move the diffopt initialization down one layer
      range-diff: offer --left-only/--right-only options
      range-diff/format-patch: handle commit ranges other than A..B
      range-diff(docs): explain how to specify commit ranges
      t1450: robustify `remove_object()`
      fsck --name-objects: be more careful parsing generation numbers
      reflog expire --stale-fix: be generous about missing objects
      commit-graph: when incompatible with graphs, indicate why

Johannes Sixt (2):
      annotate-tests: quote variable expansions containing path names
      replace "parameters" by "arguments" in error messages

Jonathan Tan (9):
      Doc: clarify contents of packfile sent as URI
      ls-refs: report unborn targets of symrefs
      connect, transport: encapsulate arg in struct
      clone: respect remote unborn HEAD
      usage: trace2 BUG() invocations
      http: allow custom index-pack args
      http-fetch: allow custom index-pack args
      fetch-pack: with packfile URIs, use index-pack arg
      fetch-pack: print and use dangling .gitmodules

Junio C Hamano (29):
      pack-redundant: gauge the usage before proposing its removal
      pull: get rid of unnecessary global variable
      pull: correct condition to trigger non-ff advice
      CoC: explicitly take any whitespace breakage
      parse-options: format argh like error messages
      The first batch in 2.31 cycle
      SubmittingPatches: tighten wording on "sign-off" procedure
      ci/install-depends: attempt to fix "brew cask" stuff
      t4203: make blame output massaging more robust
      The second batch
      The third batch
      The fourth batch
      The fifth batch
      Prepare for 2.30.1
      The sixth batch
      Git 2.30.1
      The seventh batch
      The eighth batch
      diff: --{rotate,skip}-to=<path>
      The ninth batch
      Documentation: typofix --column description
      The tenth batch
      push: do not turn --delete '' into a matching push
      blame-options.txt: camelcase blame.blankBoundary
      index-format doc: camelCase core.excludesFile
      Git 2.31-rc0
      Revert "commit-graph: when incompatible with graphs, indicate why"
      Hopefully the last batch before -rc1
      Git 2.31-rc1

Kevin Willford (1):
      fsmonitor: allow all entries for a folder to be invalidated

Martin von Zweigbergk (1):
      docs: clarify that refs/notes/ do not keep the attached objects alive

Martin Ågren (16):
      t1300: remove duplicate test for `--file ../foo`
      t1300: remove duplicate test for `--file no-such-file`
      t1300: don't needlessly work with `core.foo` configs
      pack-format.txt: document sizes at start of delta data
      object-name.c: rename from sha1-name.c
      object-file.c: rename from sha1-file.c
      sha1-lookup: rename `sha1_pos()` as `hash_pos()`
      hash-lookup: rename from sha1-lookup
      builtin/gc: don't peek into `struct lock_file`
      commit-graph: don't peek into `struct lock_file`
      midx: don't peek into `struct lock_file`
      refs/files-backend: don't peek into `struct lock_file`
      read-cache: try not to peek into `struct {lock_,temp}file`
      rev-list-options.txt: fix rendering of bonus paragraph
      git.txt: fix monospace rendering
      gitmailmap.txt: fix rendering of e-mail addresses

Matheus Tavares (8):
      t4129: don't fail if setgid is set in the test directory
      grep: error out if --untracked is used with --cached
      grep: honor sparse-checkout on working tree searches
      write_entry(): fix misuses of `path` in error messages
      checkout-index: omit entries with no tempname from --temp output
      add --chmod: don't update index when --dry-run is used
      add: mark --chmod error string for translation
      add: propagate --chmod errors to exit status

Mikhail Klyushin (1):
      git-gui: fix typo in russian locale

Neeraj Singh (1):
      read-cache: make the index write buffer size 128K

Patrick Steinhardt (11):
      git: add `--super-prefix` to usage string
      config: add new way to pass config via `--config-env`
      config: extract function to parse config pairs
      fetch: extract writing to FETCH_HEAD
      fetch: use strbuf to format FETCH_HEAD updates
      fetch: refactor `s_update_ref` to use common exit path
      fetch: allow passing a transaction to `s_update_ref()`
      fetch: implement support for atomic reference updates
      config: store "git -c" variables using more robust format
      environment: make `getenv_safe()` a public function
      config: allow specifying config entries via envvar pairs

Peter Kaestle (1):
      submodules: fix of regression on fetching of non-init subsub-repo

Phil Hord (1):
      use delete_refs when deleting tags or branches

Philippe Blain (4):
      gitmodules.txt: fix 'GIT_WORK_TREE' variable name
      mergetool--lib: fix '--tool-help' to correctly show available tools
      mailmap doc: use correct environment variable 'GIT_WORK_TREE'
      ci: do not cancel all jobs of a matrix if one fails

Pranit Bauva (7):
      bisect--helper: reimplement `bisect_log` shell function in C
      bisect--helper: reimplement `bisect_replay` shell function in C
      bisect--helper: retire `--bisect-write` subcommand
      bisect--helper: use `res` instead of return in BISECT_RESET case option
      bisect--helper: retire `--bisect-auto-next` subcommand
      bisect--helper: reimplement `bisect_skip` shell function in C
      bisect--helper: retire `--check-and-set-terms` subcommand

Pratyush Yadav (1):
      git-gui: remove lines starting with the comment character

Rafael Silva (8):
      worktree: libify should_prune_worktree()
      worktree: teach worktree to lazy-load "prunable" reason
      worktree: teach worktree_lock_reason() to gently handle main worktree
      t2402: ensure locked worktree is properly cleaned up
      worktree: teach `list --porcelain` to annotate locked worktree
      worktree: teach `list` to annotate prunable worktree
      worktree: teach `list` verbose mode
      blame: remove unnecessary use of get_commit_info()

René Scharfe (2):
      rebase: verify commit parameter
      cache-tree: use ce_namelen() instead of strlen()

SZEDER Gábor (2):
      t7800-difftool: don't accidentally match tmp dirs
      test-lib: prevent '--stress-jobs=X' from being ignored

Sangeeta Jain (1):
      diff: do not show submodule with untracked files as "-dirty"

Sergey Organov (32):
      revision: factor out parsing of diff-merge related options
      revision: factor out setup of diff-merge related settings
      revision: factor out initialization of diff-merge related settings
      revision: provide implementation for diff merges tweaks
      revision: move diff merges functions to its own diff-merges.c
      diff-merges: rename all functions to have common prefix
      diff-merges: move checks for first_parent_only out of the module
      diff-merges: rename diff_merges_default_to_enable() to match semantics
      diff-merges: re-arrange functions to match the order they are called in
      diff-merges: new function diff_merges_suppress()
      diff-merges: new function diff_merges_set_dense_combined_if_unset()
      diff-merges: introduce revs->first_parent_merges flag
      diff-merges: handle imply -p on -c/--cc logic for log.c
      diff-merges: revise revs->diff flag handling
      t4013: support test_expect_failure through ':failure' magic
      t4013: add tests for -m failing to override -c/--cc
      diff-merges: fix -m to properly override -c/--cc
      diff-merges: split 'ignore_merges' field
      diff-merges: group diff-merge flags next to each other inside 'rev_info'
      diff-merges: get rid of now empty diff_merges_init_revs()
      diff-merges: refactor opt settings into separate functions
      diff-merges: make -m/-c/--cc explicitly mutually exclusive
      diff-merges: implement new values for --diff-merges
      diff-merges: do not imply -p for new options
      diff-merges: let new options enable diff without -p
      diff-merges: add old mnemonic counterparts to --diff-merges
      diff-merges: add '--diff-merges=1' as synonym for 'first-parent'
      doc/git-log: describe new --diff-merges options
      doc/diff-generate-patch: mention new --diff-merges option
      doc/rev-list-options: document --first-parent changes merges format
      doc/git-show: include --diff-merges description
      t4013: add tests for --diff-merges=first-parent

Seth House (4):
      mergetool: add hideResolved configuration
      mergetool: break setup_tool out into separate initialization function
      mergetool: add per-tool support and overrides for the hideResolved flag
      mergetools/vimdiff: add vimdiff1 merge tool variant

Shubham Verma (10):
      t7001: modernize test formatting
      t7001: indent with TABs instead of spaces
      t7001: remove unnecessary blank lines
      t7001: modernize subshell formatting
      t7001: remove whitespace after redirect operators
      t7001: avoid using `cd` outside of subshells
      t7001: use '>' rather than 'touch'
      t7001: put each command on a separate line
      t7001: use here-docs instead of echo
      t7001: use `test` rather than `[`

Taylor Blau (40):
      ewah/ewah_bitmap.c: avoid open-coding ALLOC_GROW()
      pack-bitmap.c: check reads more aggressively when loading
      pack-bitmap: factor out 'bitmap_for_commit()'
      pack-bitmap: factor out 'add_commit_to_bitmap()'
      p7519: allow running without watchman prereq
      Documentation/git-clone.txt: document race with --local
      pack-revindex: introduce a new API
      write_reuse_object(): convert to new revindex API
      write_reused_pack_one(): convert to new revindex API
      write_reused_pack_verbatim(): convert to new revindex API
      check_object(): convert to new revindex API
      bitmap_position_packfile(): convert to new revindex API
      show_objects_for_type(): convert to new revindex API
      get_size_by_pos(): convert to new revindex API
      try_partial_reuse(): convert to new revindex API
      rebuild_existing_bitmaps(): convert to new revindex API
      get_delta_base_oid(): convert to new revindex API
      retry_bad_packed_offset(): convert to new revindex API
      packed_object_info(): convert to new revindex API
      unpack_entry(): convert to new revindex API
      for_each_object_in_pack(): convert to new revindex API
      builtin/gc.c: guess the size of the revindex
      pack-revindex: remove unused 'find_pack_revindex()'
      pack-revindex: remove unused 'find_revindex_position()'
      pack-revindex: hide the definition of 'revindex_entry'
      pack-revindex.c: avoid direct revindex access in 'offset_to_pack_pos()'
      refs: expose 'for_each_fullref_in_prefixes'
      ls-refs.c: traverse prefixes of disjoint "ref-prefix" sets
      packfile: prepare for the existence of '*.rev' files
      pack-write.c: prepare to write 'pack-*.rev' files
      builtin/index-pack.c: allow stripping arbitrary extensions
      builtin/index-pack.c: write reverse indexes
      builtin/pack-objects.c: respect 'pack.writeReverseIndex'
      Documentation/config/pack.txt: advertise 'pack.writeReverseIndex'
      t: prepare for GIT_TEST_WRITE_REV_INDEX
      t: support GIT_TEST_WRITE_REV_INDEX
      pack-revindex: ensure that on-disk reverse indexes are given precedence
      t5325: check both on-disk and in-memory reverse index
      .github/workflows/main.yml: run static-analysis on bionic
      commit-graph.c: display correct number of chunks when writing

Thomas Ackermann (7):
      doc: fix some typos
      doc hash-function-transition: fix asciidoc output
      doc hash-function-transition: use SHA-1 and SHA-256 consistently
      doc hash-function-transition: use upper case consistently
      doc hash-function-transition: fix incomplete sentence
      doc hash-function-transition: move rationale upwards
      doc: use https links

Torsten Bögershausen (1):
      MacOS: precompose_argv_prefix()

Utku Gultopu (1):
      doc: remove "directory cache" from man pages

Vasyl Vavrychuk (1):
      git-send-email.txt: mention less secure app access with Gmail

ZheNing Hu (5):
      builtin/*: update usage format
      ls_files.c: bugfix for --deleted and --modified
      ls_files.c: consolidate two for loops into one
      ls-files.c: add --deduplicate option
      difftool.c: learn a new way start at specified file

brian m. carlson (9):
      abspath: add a function to resolve paths with missing components
      rev-parse: add option for absolute or relative path formatting
      docs: rephrase and clarify the git status --short format
      ref-filter: switch some uses of unsigned long to size_t
      commit: ignore additional signatures when parsing signed commits
      gpg-interface: improve interface for parsing tags
      commit: allow parsing arbitrary buffers with headers
      ref-filter: hoist signature parsing
      gpg-interface: remove other signature headers before verifying

Ævar Arnfjörð Bjarmason (100):
      pretty format %(trailers) test: split a long line
      pretty format %(trailers) doc: avoid repetition
      pretty-format %(trailers): fix broken standalone "valueonly"
      pretty format %(trailers): add a "keyonly"
      pretty format %(trailers): add a "key_value_separator"
      mktag doc: say <hash> not <sha1>
      mktag doc: grammar fix, when exists -> when it exists
      CoC: Update word-wrapping to match upstream
      mktag doc: update to explain why to use this
      mktag tests: don't needlessly use a subshell
      mktag tests: use "test_commit" helper
      mktag tests: remove needless SHA-1 hardcoding
      mktag tests: don't redirect stderr to a file needlessly
      mktag tests: don't create "mytag" twice
      mktag tests: run "fsck" after creating "mytag"
      mktag tests: stress test whitespace handling
      mktag tests: test "hash-object" compatibility
      mktag tests: improve verify_object() test coverage
      mktag tests: test verify_object() with replaced objects
      mktag: use default strbuf_read() hint
      mktag: remove redundant braces in one-line body "if"
      mktag: use puts(str) instead of printf("%s\n", str)
      mktag: use fsck instead of custom verify_tag()
      fsck: make fsck_config() re-usable
      mktag: allow turning off fsck.extraHeaderEntry
      mktag: allow omitting the header/body \n separator
      mktag: convert to parse-options
      mktag: mark strings for translation
      mktag: add a --[no-]strict option
      branch: change "--local" to "--list" in comment
      branch tests: add to --sort tests
      ref-filter: add braces to if/else if/else chain
      ref-filter: move "cmp_fn" assignment into "else if" arm
      ref-filter: move ref_sorting flags to a bitfield
      branch: sort detached HEAD based on a flag
      branch: show "HEAD detached" first under reverse sort
      Makefile: remove a warning about old GETTEXT_POISON flag
      gettext.c: remove/reword a mostly-useless comment
      mailmap doc: create a new "gitmailmap(5)" man page
      mailmap doc: quote config variables `like.this`
      check-mailmap doc: note config options
      mailmap doc: start by mentioning the comment syntax
      mailmap tests: use our preferred whitespace syntax
      mailmap tests: modernize syntax & test idioms
      mailmap tests: improve --stdin tests
      mailmap tests: remove redundant entry in test
      mailmap tests: add a test for "not a blob" error
      mailmap tests: get rid of overly complex blame fuzzing
      mailmap: test for silent exiting on missing file/blob
      test-lib functions: expand "test_commit" comment template
      test-lib functions: document arguments to test_commit
      test-lib functions: add --author support to test_commit
      test-lib functions: add an --append option to test_commit
      tests: refactor a few tests to use "test_commit --append"
      mailmap doc + tests: add better examples & test them
      mailmap tests: add a test for comment syntax
      mailmap tests: add tests for whitespace syntax
      mailmap tests: add tests for empty "<>" syntax
      mailmap doc + tests: document and test for case-insensitivity
      shortlog: remove unused(?) "repo-abbrev" feature
      CoC: update to version 2.0 + local changes
      fsck doc: remove ancient out-of-date diagnostics
      ci: remove GETTEXT_POISON jobs
      tests: remove support for GIT_TEST_GETTEXT_POISON
      tests: remove uses of GIT_TEST_GETTEXT_POISON=false
      cache-tree tests: refactor for modern test style
      cache-tree tests: remove unused $2 parameter
      cache-tree tests: use a sub-shell with less indirection
      cache-tree tests: explicitly test HEAD and index differences
      git svn mergeinfo tests: modernize redirection & quoting style
      git svn mergeinfo tests: refactor "test -z" to use test_must_be_empty
      upload-pack tests: avoid a non-zero "grep" exit status
      archive tests: use a cheaper "zipinfo -h" invocation to get header
      rm tests: actually test for SIGPIPE in SIGPIPE test
      config.mak.uname: remove redundant NO_LIBPCRE1_JIT flag
      Remove support for v1 of the PCRE library
      grep/pcre2 tests: don't rely on invalid UTF-8 data test
      grep/pcre2: better support invalid UTF-8 haystacks
      grep/log: remove hidden --debug and --grep-debug options
      pager: refactor wait_for_pager() function
      pager: test for exit code with and without SIGPIPE
      run-command: add braces for "if" block in wait_or_whine()
      pager: properly log pager exit code when signalled
      test-lib: remove check_var_migration
      test lib: change "error" to "BUG" as appropriate
      test-lib-functions: move test_set_index_version() to its user
      test-lib-functions: remove generate_zero_bytes() wrapper
      test libs: rename bundle helper to "lib-bundle.sh"
      test libs: rename gitweb-lib.sh to lib-gitweb.sh
      test-lib-functions: move function to lib-bitmap.sh
      t/.gitattributes: sort lines
      tests: remove last uses of GIT_TEST_GETTEXT_POISON=false
      tests: remove most uses of C_LOCALE_OUTPUT
      tests: remove last uses of C_LOCALE_OUTPUT
      tests: remove most uses of test_i18ncmp
      diff: add an API for deferred freeing
      diff: plug memory leak from regcomp() on {log,diff} -I
      test libs: rename "diff-lib" to "lib-diff"
      test-lib-functions: remove bug-inducing "diagnostics" helper param
      test-lib-functions: assert correct parameter count


^ permalink raw reply	[relevance 2%]

* [PATCH v2 1/2] t/perf: handle worktrees as test repos
  @ 2021-02-26  7:11  5% ` Jeff King
  0 siblings, 0 replies; 162+ results
From: Jeff King @ 2021-02-26  7:11 UTC (permalink / raw)
  To: git; +Cc: Derrick Stolee, Junio C Hamano, Johannes Schindelin

The perf suite gets confused when test_perf_default_repo is pointed at a
worktree (which includes when it is run from within a worktree at all,
since the default is to use the current repository).

Here's an example:

  $ git worktree add ~/foo
  Preparing worktree (new branch 'foo')
  HEAD is now at 328c109303 The eighth batch
  $ cd ~/foo
  $ make
  [...build output...]
  $ cd t/perf
  $ ./p0000-perf-lib-sanity.sh -v -i
  [...]
  perf 1 - test_perf_default_repo works:
  running:
  	foo=$(git rev-parse HEAD) &&
  	test_export foo

  fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
  Use '--' to separate paths from revisions, like this:
  'git <command> [<revision>...] -- [<file>...]'

The problem is that we didn't copy all of the necessary files from the
source repository (in this case we got HEAD, but we have no refs!). We
discover the git-dir with "rev-parse --git-dir", but this points to the
worktree's partial repository in .../.git/worktrees/foo.

That partial repository has a "commondir" file which points to the main
repository, where the actual refs are stored, but we don't copy it. This
is the correct thing to do, though! If we did copy it, then our scratch
test repo would be pointing back to the original main repo, and any ref
updates we made in the tests would impact that original repo.

Instead, we need to either:

  1. Make a scratch copy of the original main repo (in addition to the
     worktree repo), and point the scratch worktree repo's commondir at
     it. This preserves the original relationship, but it's doubtful any
     script really cares (if they are testing worktree performance,
     they'd probably make their own worktrees). And it's trickier to get
     right.

  2. Collapse the main and worktree repos into a single scratch repo.
     This can be done by copying everything from both, preferring any
     files from the worktree repo.

This patch does the second one. With this applied, the example above
results in p0000 running successfully.

Reported-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Jeff King <peff@peff.net>
---
 t/perf/perf-lib.sh | 31 ++++++++++++++++++++++---------
 1 file changed, 22 insertions(+), 9 deletions(-)

diff --git a/t/perf/perf-lib.sh b/t/perf/perf-lib.sh
index e385c6896f..1226be4005 100644
--- a/t/perf/perf-lib.sh
+++ b/t/perf/perf-lib.sh
@@ -70,27 +70,40 @@ test_perf_do_repo_symlink_config_ () {
 	test_have_prereq SYMLINKS || git config core.symlinks false
 }
 
+test_perf_copy_repo_contents () {
+	for stuff in "$1"/*
+	do
+		case "$stuff" in
+		*/objects|*/hooks|*/config|*/commondir)
+			;;
+		*)
+			cp -R "$stuff" "$repo/.git/" || exit 1
+			;;
+		esac
+	done
+}
+
 test_perf_create_repo_from () {
 	test "$#" = 2 ||
 	BUG "not 2 parameters to test-create-repo"
 	repo="$1"
 	source="$2"
 	source_git="$("$MODERN_GIT" -C "$source" rev-parse --git-dir)"
 	objects_dir="$("$MODERN_GIT" -C "$source" rev-parse --git-path objects)"
+	common_dir="$("$MODERN_GIT" -C "$source" rev-parse --git-common-dir)"
 	mkdir -p "$repo/.git"
 	(
 		cd "$source" &&
 		{ cp -Rl "$objects_dir" "$repo/.git/" 2>/dev/null ||
 			cp -R "$objects_dir" "$repo/.git/"; } &&
-		for stuff in "$source_git"/*; do
-			case "$stuff" in
-				*/objects|*/hooks|*/config|*/commondir)
-					;;
-				*)
-					cp -R "$stuff" "$repo/.git/" || exit 1
-					;;
-			esac
-		done
+
+		# common_dir must come first here, since we want source_git to
+		# take precedence and overwrite any overlapping files
+		test_perf_copy_repo_contents "$common_dir"
+		if test "$source_git" != "$common_dir"
+		then
+			test_perf_copy_repo_contents "$source_git"
+		fi
 	) &&
 	(
 		cd "$repo" &&
-- 
2.31.0.rc0.520.ge7c5201139


^ permalink raw reply related	[relevance 5%]

* [ANNOUNCE] Git v2.31.0-rc0
@ 2021-02-26  2:03  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2021-02-26  2:03 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

An early preview release Git v2.31.0-rc0 is now available for
testing at the usual places.  It is comprised of 568 non-merge
commits since v2.30.0, contributed by 58 people, 18 of which are
new faces [*].

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.31.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.30.0 are as follows.
Welcome to the Git development community!

  Andreas Bühmann, Andrew Klotz, Andrzej Hunt, Antonio Russo,
  Arnaud Morin, Christian Walther, Clement Moyroud, Daniel Levin,
  Daniel Troger, Harold Kim, Jacob Vosmaer, LeSeulArtichaut,
  Sangeeta Jain, Seth House, Utku Gultopu, Vasyl Vavrychuk,
  Vojtěch Knyttl, and ZheNing Hu.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Abhishek Kumar, Adam Dinwoodie, Ævar Arnfjörð Bjarmason,
  Alex Henrie, brian m. carlson, Christian Couder, Denton Liu,
  Derrick Stolee, Elijah Newren, Eric Sunshine, Eric Wong,
  Felipe Contreras, Jeff King, Jiang Xin, Joey Salazar, Johannes
  Schindelin, Johannes Sixt, Jonathan Tan, Junio C Hamano, Kevin
  Daudt, Lars Schneider, Martin Ågren, Martin von Zweigbergk,
  Matheus Tavares, Michael Haggerty, Patrick Steinhardt, Paul
  Jolly, Peter Kaestle, Phil Hord, Philippe Blain, Phillip Wood,
  Pranit Bauva, Rafael Silva, René Scharfe, Ross Light, Sergey
  Organov, SZEDER Gábor, Taylor Blau, Thomas Ackermann, and
  Torsten Bögershausen.

[*] We are counting not just the authorship contribution but
    mention for issue reporting, testing and reviewing in the
    commits added during this cycle are all counted.

----------------------------------------------------------------

Git 2.31 Release Notes (draft)
==============================

Updates since v2.30
-------------------

Backward incompatible and other important changes

 * The "pack-redundant" command, which has been left stale with almost
   unusable performance issues, now warns loudly when it gets used, as
   we no longer want to recommend its use (instead just "repack -d"
   instead).

 * The development community has adopted Contributor Covenant v2.0 to
   update from v1.4 that we have been using.

 * The support for deprecated PCRE1 library has been dropped.


UI, Workflows & Features

 * The "--format=%(trailers)" mechanism gets enhanced to make it
   easier to design output for machine consumption.

 * When a user does not tell "git pull" to use rebase or merge, the
   command gives a loud message telling a user to choose between
   rebase or merge but creates a merge anyway, forcing users who would
   want to rebase to redo the operation.  Fix an early part of this
   problem by tightening the condition to give the message---there is
   no reason to stop or force the user to choose between rebase or
   merge if the history fast-forwards.

 * The configuration variable 'core.abbrev' can be set to 'no' to
   force no abbreviation regardless of the hash algorithm.

 * "git rev-parse" can be explicitly told to give output as absolute
   or relative path with the `--path-format=(absolute|relative)` option.

 * Bash completion (in contrib/) update to make it easier for
   end-users to add completion for their custom "git" subcommands.

 * "git maintenance" learned to drive scheduled maintenance on
   platforms whose native scheduling methods are not 'cron'.

 * After expiring a reflog and making a single commit, the reflog for
   the branch would record a single entry that knows both @{0} and
   @{1}, but we failed to answer "what commit were we on?", i.e. @{1}

 * "git bundle" learns "--stdin" option to read its refs from the
   standard input.  Also, it now does not lose refs whey they point
   at the same object.

 * "git log" learned a new "--diff-merges=<how>" option.

 * "git ls-files" can and does show multiple entries when the index is
   unmerged, which is a source for confusion unless -s/-u option is in
   use.  A new option --deduplicate has been introduced.

 * `git worktree list` now annotates worktrees as prunable, shows
   locked and prunable attributes in --porcelain mode, and gained
   a --verbose option.

 * "git clone" tries to locally check out the branch pointed at by
   HEAD of the remote repository after it is done, but the protocol
   did not convey the information necessary to do so when copying an
   empty repository.  The protocol v2 learned how to do so.

 * There are other ways than ".." for a single token to denote a
   "commit range", namely "<rev>^!" and "<rev>^-<n>", but "git
   range-diff" did not understand them.

 * The "git range-diff" command learned "--(left|right)-only" option
   to show only one side of the compared range.

 * "git mergetool" feeds three versions (base, local and remote) of
   a conflicted path unmodified.  The command learned to optionally
   prepare these files with unconflicted parts already resolved.

 * The .mailmap is documented to be read only from the root level of a
   working tree, but a stray file in a bare repository also was read
   by accident, which has been corrected.

 * "git maintenance" tool learned a new "pack-refs" maintenance task.

 * The error message given when a configuration variable that is
   expected to have a boolean value has been improved.

 * Signed commits and tags now allow verification of objects, whose
   two object names (one in SHA-1, the other in SHA-256) are both
   signed.

 * "git rev-list" command learned "--disk-usage" option.

 * "git {diff,log} --{skip,rotate}-to=<path>" allows the user to
   discard diff output for early paths or move them to the end of the
   output.

 * "git difftool" learned "--skip-to=<path>" option to restart an
   interrupted session from an arbitrary path.

 * "git grep" has been tweaked to be limited to the sparse checkout
   paths.

 * "git rebase --[no-]fork-point" gained a configuration variable
   rebase.forkPoint so that users do not have to keep specifying a
   non-default setting.


Performance, Internal Implementation, Development Support etc.

 * A 3-year old test that was not testing anything useful has been
   corrected.

 * Retire more names with "sha1" in it.

 * The topological walk codepath is covered by new trace2 stats.

 * Update the Code-of-conduct to version 2.0 from the upstream (we've
   been using version 1.4).

 * "git mktag" validates its input using its own rules before writing
   a tag object---it has been updated to share the logic with "git
   fsck".

 * Two new ways to feed configuration variable-value pairs via
   environment variables have been introduced, and the way
   GIT_CONFIG_PARAMETERS encodes variable/value pairs has been tweaked
   to make it more robust.

 * Tests have been updated so that they do not to get affected by the
   name of the default branch "git init" creates.

 * "git fetch" learns to treat ref updates atomically in all-or-none
   fashion, just like "git push" does, with the new "--atomic" option.

 * The peel_ref() API has been replaced with peel_iterated_oid().

 * The .use_shell flag in struct child_process that is passed to
   run_command() API has been clarified with a bit more documentation.

 * Document, clean-up and optimize the code around the cache-tree
   extension in the index.

 * The ls-refs protocol operation has been optimized to narrow the
   sub-hierarchy of refs/ it walks to produce response.

 * When removing many branches and tags, the code used to do so one
   ref at a time.  There is another API it can use to delete multiple
   refs, and it makes quite a lot of performance difference when the
   refs are packed.

 * The "pack-objects" command needs to iterate over all the tags when
   automatic tag following is enabled, but it actually iterated over
   all refs and then discarded everything outside "refs/tags/"
   hierarchy, which was quite wasteful.

 * A perf script was made more portable.

 * Our setting of GitHub CI test jobs were a bit too eager to give up
   once there is even one failure found.  Tweak the knob to allow
   other jobs keep running even when we see a failure, so that we can
   find more failures in a single run.

 * We've carried compatibility codepaths for compilers without
   variadic macros for quite some time, but the world may be ready for
   them to be removed.  Force compilation failure on exotic platforms
   where variadic macros are not available to find out who screams in
   such a way that we can easily revert if it turns out that the world
   is not yet ready.

 * Code clean-up to ensure our use of hashtables using object names as
   keys use the "struct object_id" objects, not the raw hash values.

 * Lose the debugging aid that may have been useful in the past, but
   no longer is, in the "grep" codepaths.

 * Some pretty-format specifiers do not need the data in commit object
   (e.g. "%H"), but we were over-eager to load and parse it, which has
   been made even lazier.

 * Get rid of "GETTEXT_POISON" support altogether, which may or may
   not be controversial.

 * Introduce an on-disk file to record revindex for packdata, which
   traditionally was always created on the fly and only in-core.

 * The commit-graph learned to use corrected commit dates instead of
   the generation number to help topological revision traversal.

 * Piecemeal of rewrite of "git bisect" in C continues.

 * When a pager spawned by us exited, the trace log did not record its
   exit status correctly, which has been corrected.

 * Removal of GIT_TEST_GETTEXT_POISON continues.

 * The code to implement "git merge-base --independent" was poorly
   done and was kept from the very beginning of the feature.


Fixes since v2.30
-----------------

 * Diagnose command line error of "git rebase" early.

 * Clean up option descriptions in "git cmd --help".

 * "git stash" did not work well in a sparsely checked out working
   tree.

 * Some tests expect that "ls -l" output has either '-' or 'x' for
   group executable bit, but setgid bit can be inherited from parent
   directory and make these fields 'S' or 's' instead, causing test
   failures.

 * "git for-each-repo --config=<var> <cmd>" should not run <cmd> for
   any repository when the configuration variable <var> is not defined
   even once.

 * Fix 2.29 regression where "git mergetool --tool-help" fails to list
   all the available tools.

 * Fix for procedure to building CI test environment for mac.

 * The implementation of "git branch --sort" wrt the detached HEAD
   display has always been hacky, which has been cleaned up.

 * Newline characters in the host and path part of git:// URL are
   now forbidden.

 * "git diff" showed a submodule working tree with untracked cruft as
   "Submodule commit <objectname>-dirty", but a natural expectation is
   that the "-dirty" indicator would align with "git describe --dirty",
   which does not consider having untracked files in the working tree
   as source of dirtiness.  The inconsistency has been fixed.

 * When more than one commit with the same patch ID appears on one
   side, "git log --cherry-pick A...B" did not exclude them all when a
   commit with the same patch ID appears on the other side.  Now it
   does.

 * Documentation for "git fsck" lost stale bits that has become
   incorrect.

 * Doc fix for packfile URI feature.

 * When "git rebase -i" processes "fixup" insn, there is no reason to
   clean up the commit log message, but we did the usual stripspace
   processing.  This has been corrected.
   (merge f7d42ceec5 js/rebase-i-commit-cleanup-fix later to maint).

 * Fix in passing custom args from "git clone" to "upload-pack" on the
   other side.
   (merge ad6b5fefbd jv/upload-pack-filter-spec-quotefix later to maint).

 * The command line completion (in contrib/) completed "git branch -d"
   with branch names, but "git branch -D" offered tagnames in addition,
   which has been corrected.  "git branch -M" had the same problem.
   (merge 27dc071b9a jk/complete-branch-force-delete later to maint).

 * When commands are started from a subdirectory, they may have to
   compare the path to the subdirectory (called prefix and found out
   from $(pwd)) with the tracked paths.  On macOS, $(pwd) and
   readdir() yield decomposed path, while the tracked paths are
   usually normalized to the precomposed form, causing mismatch.  This
   has been fixed by taking the same approach used to normalize the
   command line arguments.
   (merge 5c327502db tb/precompose-prefix-too later to maint).

 * Even though invocations of "die()" were logged to the trace2
   system, "BUG()"s were not, which has been corrected.
   (merge 0a9dde4a04 jt/trace2-BUG later to maint).

 * "git grep --untracked" is meant to be "let's ALSO find in these
   files on the filesystem" when looking for matches in the working
   tree files, and does not make any sense if the primary search is
   done against the index, or the tree objects.  The "--cached" and
   "--untracked" options have been marked as mutually incompatible.
   (merge 0c5d83b248 mt/grep-cached-untracked later to maint).

 * Fix "git fsck --name-objects" which apparently has not been used by
   anybody who is motivated enough to report breakage.
   (merge e89f89361c js/fsck-name-objects-fix later to maint).

 * Avoid individual tests in t5411 from getting affected by each other
   by forcing them to use separate output files during the test.
   (merge 822ee894f6 jx/t5411-unique-filenames later to maint).

 * Test to make sure "git rev-parse one-thing one-thing" gives
   the same thing twice (when one-thing is --since=X).
   (merge a5cdca4520 ew/rev-parse-since-test later to maint).

 * When certain features (e.g. grafts) used in the repository are
   incompatible with the use of the commit-graph, we used to silently
   turned commit-graph off; we now tell the user what we are doing.
   (merge c85eec7fc3 js/commit-graph-warning later to maint).

 * Objects that lost references can be pruned away, even when they
   have notes attached to it (and these notes will become dangling,
   which in turn can be pruned with "git notes prune").  This has been
   clarified in the documentation.
   (merge fa9ab027ba mz/doc-notes-are-not-anchors later to maint).

 * The error codepath around the "--temp/--prefix" feature of "git
   checkout-index" has been improved.
   (merge 3f7ba60350 mt/checkout-index-corner-cases later to maint).

 * The "git maintenance register" command had trouble registering bare
   repositories, which had been corrected.

 * A handful of multi-word configuration variable names in
   documentation that are spelled in all lowercase have been corrected
   to use the more canonical camelCase.
   (merge 7dd0eaa39c dl/doc-config-camelcase later to maint).

 * "git push $there --delete ''" should have been diagnosed as an
   error, but instead turned into a matching push, which has been
   corrected.
   (merge 20e416409f jc/push-delete-nothing later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge e3f5da7e60 sg/t7800-difftool-robustify later to maint).
   (merge 9d336655ba js/doc-proto-v2-response-end later to maint).
   (merge 1b5b8cf072 jc/maint-column-doc-typofix later to maint).
   (merge 3a837b58e3 cw/pack-config-doc later to maint).
   (merge 01168a9d89 ug/doc-commit-approxidate later to maint).
   (merge b865734760 js/params-vs-args later to maint).

----------------------------------------------------------------

Changes since v2.30.0 are as follows:

Abhishek Kumar (11):
      commit-graph: fix regression when computing Bloom filters
      revision: parse parent in indegree_walk_step()
      commit-graph: consolidate fill_commit_graph_info
      t6600-test-reach: generalize *_three_modes
      commit-graph: add a slab to store topological levels
      commit-graph: return 64-bit generation number
      commit-graph: implement corrected commit date
      commit-graph: implement generation data chunk
      commit-graph: use generation v2 only if entire chain does
      commit-reach: use corrected commit dates in paint_down_to_common()
      doc: add corrected commit date info

Adam Dinwoodie (1):
      t4129: fix setfacl-related permissions failure

Alex Henrie (1):
      rebase: add a config option for --no-fork-point

Andrew Klotz (1):
      config: improve error message for boolean config

Andrzej Hunt (1):
      commit-graph: avoid leaking topo_levels slab in write_commit_graph()

Antonio Russo (1):
      t6016: move to lib-log-graph.sh framework

Christian Couder (3):
      fetch-pack: rename helper to create_promisor_file()
      fetch-pack: refactor writing promisor file
      pack-write: die on error in write_promisor_file()

Christian Walther (1):
      doc: mention bigFileThreshold for packing

Daniel Levin (1):
      git-p4: fix syncing file types with pattern

Denton Liu (12):
      refs: factor out set_read_ref_cutoffs()
      refs: allow @{n} to work with n-sized reflog
      test-lib-functions.sh: fix usage for test_commit()
      t4203: stop losing return codes of git commands
      git-stash.txt: be explicit about subcommand options
      t3905: remove spaces after redirect operators
      t3905: move all commands into test cases
      t3905: remove nested git in command substitution
      t3905: replace test -s with test_file_not_empty
      t3905: use test_cmp() to check file contents
      stash: declare ref_stash as an array
      i18n.txt: camel case and monospace "i18n.commitEncoding"

Derrick Stolee (48):
      maintenance: extract platform-specific scheduling
      maintenance: include 'cron' details in docs
      pack-bitmap-write: fill bitmap with commit history
      bitmap: implement bitmap_is_subset()
      commit: implement commit_list_contains()
      t5310: add branch-based checks
      pack-bitmap-write: rename children to reverse_edges
      pack-bitmap-write: build fewer intermediate bitmaps
      pack-bitmap-write: use existing bitmaps
      pack-bitmap-write: relax unique revwalk condition
      pack-bitmap-write: better reuse bitmaps
      revision: trace topo-walk statistics
      tree-walk: report recursion counts
      unpack-trees: add trace2 regions
      cache-tree: use trace2 in cache_tree_update()
      maintenance: use launchctl on macOS
      maintenance: use Windows scheduled tasks
      for-each-repo: do nothing on empty config
      cache-tree: trace regions for I/O
      cache-tree: trace regions for prime_cache_tree
      index-format: use 'cache tree' over 'cached tree'
      index-format: update preamble to cache tree extension
      index-format: discuss recursion of cache-tree better
      cache-tree: speed up consecutive path comparisons
      maintenance: set log.excludeDecoration durin prefetch
      t7900: clean up some broken refs
      cache-tree: clean up cache_tree_update()
      cache-tree: simplify verify_cache() prototype
      cache-tree: extract subtree_pos()
      fsmonitor: de-duplicate BUG()s around dirty bits
      repository: add repo reference to index_state
      name-hash: use trace2 regions for init
      sparse-checkout: load sparse-checkout patterns
      test-lib: test_region looks for trace2 regions
      t1092: test interesting sparse-checkout scenarios
      commit-reach: reduce requirements for remove_redundant()
      commit-graph: use repo_parse_commit
      commit-graph: always parse before commit_graph_data_at()
      commit-graph: validate layers for generation data
      commit-graph: compute generations separately
      commit-graph: be extra careful about mixed generations
      commit-graph: prepare commit graph
      maintenance: add pack-refs task
      maintenance: incremental strategy runs pack-refs weekly
      commit-reach: use one walk in remove_redundant()
      commit-reach: move compare_commits_by_gen
      commit-reach: use heuristic in remove_redundant()
      commit-reach: stale commits may prune generation further

Elijah Newren (84):
      t7012: add a testcase demonstrating stash apply bugs in sparse checkouts
      stash: remove unnecessary process forking
      stash: fix stash application in sparse-checkouts
      merge-ort: setup basic internal data structures
      merge-ort: add some high-level algorithm structure
      merge-ort: port merge_start() from merge-recursive
      merge-ort: use histogram diff
      merge-ort: add an err() function similar to one from merge-recursive
      merge-ort: implement a very basic collect_merge_info()
      merge-ort: avoid repeating fill_tree_descriptor() on the same tree
      merge-ort: compute a few more useful fields for collect_merge_info
      merge-ort: record stage and auxiliary info for every path
      merge-ort: avoid recursing into identical trees
      merge-ort: add a preliminary simple process_entries() implementation
      merge-ort: have process_entries operate in a defined order
      merge-ort: step 1 of tree writing -- record basenames, modes, and oids
      merge-ort: step 2 of tree writing -- function to create tree object
      merge-ort: step 3 of tree writing -- handling subdirectories as we go
      merge-ort: basic outline for merge_switch_to_result()
      merge-ort: add implementation of checkout()
      tree: enable cmp_cache_name_compare() to be used elsewhere
      merge-ort: add implementation of record_conflicted_index_entries()
      merge-ort: free data structures in merge_finalize()
      merge-ort: add a few includes
      merge-ort: add a clear_internal_opts helper
      merge-ort: add a path_conflict field to merge_options_internal
      merge-ort: add a paths_to_free field to merge_options_internal
      merge-ort: add function grouping comments
      merge-ort: add die-not-implemented stub handle_content_merge() function
      merge-ort: add modify/delete handling and delayed output processing
      merge-ort: add basic data structures for handling renames
      merge-ort: add initial outline for basic rename detection
      merge-ort: implement detect_regular_renames()
      merge-ort: implement compare_pairs() and collect_renames()
      merge-ort: add basic outline for process_renames()
      diffcore-rename: rename num_create to num_destinations
      diffcore-rename: avoid usage of global in too_many_rename_candidates()
      diffcore-rename: simplify limit check
      diffcore-rename: reduce jumpiness in progress counters
      t4058: add more tests and documentation for duplicate tree entry handling
      t4058: explore duplicate tree entry handling in a bit more detail
      diffcore-rename: simplify and accelerate register_rename_src()
      diffcore-rename: accelerate rename_dst setup
      merge-ort: add implementation of both sides renaming identically
      merge-ort: add implementation of both sides renaming differently
      merge-ort: add implementation of rename/delete conflicts
      merge-ort: add implementation of rename collisions
      merge-ort: add implementation of normal rename handling
      merge-ort: add implementation of type-changed rename handling
      commit: move reverse_commit_list() from merge-recursive
      merge-ort: copy a few small helper functions from merge-recursive.c
      merge-ort: make clear_internal_opts() aware of partial clearing
      merge-ort: implement merge_incore_recursive()
      merge-ort: handle D/F conflict where directory disappears due to merge
      merge-ort: handle directory/file conflicts that remain
      merge-ort: implement unique_path() helper
      merge-ort: handle book-keeping around two- and three-way content merge
      merge-ort: flesh out implementation of handle_content_merge()
      merge-ort: copy and adapt merge_3way() from merge-recursive.c
      merge-ort: copy and adapt merge_submodule() from merge-recursive.c
      merge-ort: implement format_commit()
      merge-ort: copy find_first_merges() implementation from merge-recursive.c
      merge-ort: add handling for different types of files at same path
      diffcore-rename: remove unnecessary duplicate entry checks
      merge-ort: add new data structures for directory rename detection
      merge-ort: initialize and free new directory rename data structures
      merge-ort: collect which directories are removed in dirs_removed
      merge-ort: add outline for computing directory renames
      merge-ort: add outline of get_provisional_directory_renames()
      merge-ort: copy get_renamed_dir_portion() from merge-recursive.c
      merge-ort: implement compute_rename_counts()
      merge-ort: implement handle_directory_level_conflicts()
      merge-ort: modify collect_renames() for directory rename handling
      merge-ort: implement compute_collisions()
      merge-ort: implement apply_dir_rename() and check_dir_renamed()
      merge-ort: implement check_for_directory_rename()
      merge-ort: implement handle_path_level_conflicts()
      merge-ort: add a new toplevel_dir field
      merge-ort: implement apply_directory_rename_modifications()
      merge-ort: process_renames() now needs more defensiveness
      merge-ort: fix a directory rename detection bug
      merge-ort: fix massive leak
      merge-ort: ignore the directory rename split conflict for now
      merge-ort: begin performance work; instrument with trace2_region_* calls

Eric Sunshine (3):
      worktree: teach `repair` to fix multi-directional breakage
      t/perf: avoid unnecessary test_export() recursion
      maintenance: fix incorrect `maintenance.repo` path with bare repository

Eric Wong (2):
      core.abbrev=no disables abbreviations
      t1500: ensure current --since= behavior remains

Felipe Contreras (8):
      pull: refactor fast-forward check
      pull: give the advice for choosing rebase/merge much later
      pull: display default warning only when non-ff
      test: bisect-porcelain: fix location of files
      completion: bash: add __git_have_func helper
      completion: bash: improve function detection
      test: completion: add tests for __git_complete
      completion: add proper public __git_complete

Jacob Vosmaer (4):
      builtin/pack-objects.c: avoid iterating all refs
      ls-refs.c: initialize 'prefixes' before using it
      upload-pack.c: fix filter spec quoting bug
      t5544: clarify 'hook works with partial clone' test

Jeff King (43):
      pack-bitmap: fix header size check
      pack-bitmap: bounds-check size of cache extension
      t5310: drop size of truncated ewah bitmap
      rev-list: die when --test-bitmap detects a mismatch
      ewah: factor out bitmap growth
      ewah: make bitmap growth less aggressive
      ewah: implement bitmap_or()
      ewah: add bitmap_dup() function
      pack-bitmap-write: reimplement bitmap writing
      pack-bitmap-write: pass ownership of intermediate bitmaps
      pack-bitmap-write: ignore BITMAP_FLAG_REUSE
      git_connect_git(): forbid newlines in host and path
      fsck: reject .gitmodules git:// urls with newlines
      t5516: loosen "not our ref" error check
      patch-ids: handle duplicate hashmap entries
      quote: make sq_dequote_step() a public function
      for_each_object_in_pack(): clarify pack vs index ordering
      config: parse more robust format in GIT_CONFIG_PARAMETERS
      refs: switch peel_ref() to peel_iterated_oid()
      run-command: document use_shell option
      git-svn tests: rewrite brittle tests to use "--[no-]merges".
      git-compat-util: always enable variadic macros
      commit_graft_pos(): take an oid instead of a bare hash
      rerere: check dirname format while iterating rr_cache directory
      rerere: tighten rr-cache dirname check
      rerere: use strmap to store rerere directories
      hash_pos(): convert to oid_pos()
      oid_pos(): access table through const pointers
      t0000: keep clean-up tests together
      t0000: run prereq tests inside sub-test
      t0000: run cleaning test inside sub-test
      t0000: consistently use single quotes for outer tests
      pretty: lazy-load commit data when expanding user-format
      p5303: avoid sed GNU-ism
      completion: treat "branch -D" the same way as "branch -d"
      completion: handle other variants of "branch -m"
      doc/git-branch: fix awkward wording for "-c"
      t: add --no-tag option to test_commit
      mailmap: only look for .mailmap in work tree
      rev-list: add --disk-usage option for calculating disk usage
      docs/rev-list: add an examples section
      docs/rev-list: add some examples of --disk-usage
      doc: mention approxidates for git-commit --date

Jiang Xin (5):
      test: add helper functions for git-bundle
      bundle: lost objects when removing duplicate pendings
      bundle: arguments can be read from stdin
      t5411: use different out file to prevent overwriting
      t5411: refactor check of refs using test_cmp_refs

Joey Salazar (1):
      doc: fix naming of response-end-pkt

Johannes Schindelin (43):
      tests: mark tests relying on the current default for `init.defaultBranch`
      t0060: preemptively adjust alignment
      t[01]*: adjust the references to the default branch name "main"
      t2*: adjust the references to the default branch name "main"
      t3[0-3]*: adjust the references to the default branch name "main"
      t3416: preemptively adjust alignment in a comment
      t34*: adjust the references to the default branch name "main"
      t3[5-9]*: adjust the references to the default branch name "main"
      t4*: adjust the references to the default branch name "main"
      t5323: prepare centered comment for `master` -> `main`
      t5[0-4]*: adjust the references to the default branch name "main"
      t5503: prepare aligned comment for replacing `master` with `main`
      t550*: adjust the references to the default branch name "main"
      t551*: adjust the references to the default branch name "main"
      t55[23]*: adjust the references to the default branch name "main"
      t55[4-9]*: adjust the references to the default branch name "main"
      t5[6-9]*: adjust the references to the default branch name "main"
      t6[0-3]*: adjust the references to the default branch name "main"
      t64*: preemptively adjust alignment to prepare for `master` -> `main`
      t6[4-9]*: adjust the references to the default branch name "main"
      t7[0-4]*: adjust the references to the default branch name "main"
      t7[5-9]*: adjust the references to the default branch name "main"
      t8*: adjust the references to the default branch name "main"
      t9[0-4]*: adjust the references to the default branch name "main"
      t9[5-7]*: adjust the references to the default branch name "main"
      tests(git-p4): transition to the default branch name `main`
      t99*: adjust the references to the default branch name "main"
      tests: drop prereq `PREPARE_FOR_MAIN_BRANCH` where no longer needed
      SKIP_DASHED_BUILT_INS: respect `config.mak`
      range-diff/format-patch: refactor check for commit range
      rebase -i: do leave commit message intact in fixup! chains
      range-diff: avoid leaking memory in two error code paths
      range-diff: libify the read_patches() function again
      range-diff: simplify code spawning `git log`
      range-diff: combine all options in a single data structure
      range-diff: move the diffopt initialization down one layer
      range-diff: offer --left-only/--right-only options
      range-diff/format-patch: handle commit ranges other than A..B
      range-diff(docs): explain how to specify commit ranges
      t1450: robustify `remove_object()`
      fsck --name-objects: be more careful parsing generation numbers
      reflog expire --stale-fix: be generous about missing objects
      commit-graph: when incompatible with graphs, indicate why

Johannes Sixt (2):
      annotate-tests: quote variable expansions containing path names
      replace "parameters" by "arguments" in error messages

Jonathan Tan (5):
      Doc: clarify contents of packfile sent as URI
      ls-refs: report unborn targets of symrefs
      connect, transport: encapsulate arg in struct
      clone: respect remote unborn HEAD
      usage: trace2 BUG() invocations

Junio C Hamano (26):
      pack-redundant: gauge the usage before proposing its removal
      pull: get rid of unnecessary global variable
      pull: correct condition to trigger non-ff advice
      CoC: explicitly take any whitespace breakage
      parse-options: format argh like error messages
      The first batch in 2.31 cycle
      SubmittingPatches: tighten wording on "sign-off" procedure
      ci/install-depends: attempt to fix "brew cask" stuff
      t4203: make blame output massaging more robust
      The second batch
      The third batch
      The fourth batch
      The fifth batch
      Prepare for 2.30.1
      The sixth batch
      Git 2.30.1
      The seventh batch
      The eighth batch
      diff: --{rotate,skip}-to=<path>
      The ninth batch
      Documentation: typofix --column description
      The tenth batch
      push: do not turn --delete '' into a matching push
      blame-options.txt: camelcase blame.blankBoundary
      index-format doc: camelCase core.excludesFile
      Git 2.31-rc0

Martin von Zweigbergk (1):
      docs: clarify that refs/notes/ do not keep the attached objects alive

Martin Ågren (16):
      t1300: remove duplicate test for `--file ../foo`
      t1300: remove duplicate test for `--file no-such-file`
      t1300: don't needlessly work with `core.foo` configs
      pack-format.txt: document sizes at start of delta data
      object-name.c: rename from sha1-name.c
      object-file.c: rename from sha1-file.c
      sha1-lookup: rename `sha1_pos()` as `hash_pos()`
      hash-lookup: rename from sha1-lookup
      builtin/gc: don't peek into `struct lock_file`
      commit-graph: don't peek into `struct lock_file`
      midx: don't peek into `struct lock_file`
      refs/files-backend: don't peek into `struct lock_file`
      read-cache: try not to peek into `struct {lock_,temp}file`
      rev-list-options.txt: fix rendering of bonus paragraph
      git.txt: fix monospace rendering
      gitmailmap.txt: fix rendering of e-mail addresses

Matheus Tavares (8):
      t4129: don't fail if setgid is set in the test directory
      grep: error out if --untracked is used with --cached
      grep: honor sparse-checkout on working tree searches
      write_entry(): fix misuses of `path` in error messages
      checkout-index: omit entries with no tempname from --temp output
      add --chmod: don't update index when --dry-run is used
      add: mark --chmod error string for translation
      add: propagate --chmod errors to exit status

Patrick Steinhardt (11):
      git: add `--super-prefix` to usage string
      config: add new way to pass config via `--config-env`
      config: extract function to parse config pairs
      fetch: extract writing to FETCH_HEAD
      fetch: use strbuf to format FETCH_HEAD updates
      fetch: refactor `s_update_ref` to use common exit path
      fetch: allow passing a transaction to `s_update_ref()`
      fetch: implement support for atomic reference updates
      config: store "git -c" variables using more robust format
      environment: make `getenv_safe()` a public function
      config: allow specifying config entries via envvar pairs

Peter Kaestle (1):
      submodules: fix of regression on fetching of non-init subsub-repo

Phil Hord (1):
      use delete_refs when deleting tags or branches

Philippe Blain (4):
      gitmodules.txt: fix 'GIT_WORK_TREE' variable name
      mergetool--lib: fix '--tool-help' to correctly show available tools
      mailmap doc: use correct environment variable 'GIT_WORK_TREE'
      ci: do not cancel all jobs of a matrix if one fails

Pranit Bauva (7):
      bisect--helper: reimplement `bisect_log` shell function in C
      bisect--helper: reimplement `bisect_replay` shell function in C
      bisect--helper: retire `--bisect-write` subcommand
      bisect--helper: use `res` instead of return in BISECT_RESET case option
      bisect--helper: retire `--bisect-auto-next` subcommand
      bisect--helper: reimplement `bisect_skip` shell function in C
      bisect--helper: retire `--check-and-set-terms` subcommand

Rafael Silva (8):
      worktree: libify should_prune_worktree()
      worktree: teach worktree to lazy-load "prunable" reason
      worktree: teach worktree_lock_reason() to gently handle main worktree
      t2402: ensure locked worktree is properly cleaned up
      worktree: teach `list --porcelain` to annotate locked worktree
      worktree: teach `list` to annotate prunable worktree
      worktree: teach `list` verbose mode
      blame: remove unnecessary use of get_commit_info()

René Scharfe (2):
      rebase: verify commit parameter
      cache-tree: use ce_namelen() instead of strlen()

SZEDER Gábor (2):
      t7800-difftool: don't accidentally match tmp dirs
      test-lib: prevent '--stress-jobs=X' from being ignored

Sangeeta Jain (1):
      diff: do not show submodule with untracked files as "-dirty"

Sergey Organov (32):
      revision: factor out parsing of diff-merge related options
      revision: factor out setup of diff-merge related settings
      revision: factor out initialization of diff-merge related settings
      revision: provide implementation for diff merges tweaks
      revision: move diff merges functions to its own diff-merges.c
      diff-merges: rename all functions to have common prefix
      diff-merges: move checks for first_parent_only out of the module
      diff-merges: rename diff_merges_default_to_enable() to match semantics
      diff-merges: re-arrange functions to match the order they are called in
      diff-merges: new function diff_merges_suppress()
      diff-merges: new function diff_merges_set_dense_combined_if_unset()
      diff-merges: introduce revs->first_parent_merges flag
      diff-merges: handle imply -p on -c/--cc logic for log.c
      diff-merges: revise revs->diff flag handling
      t4013: support test_expect_failure through ':failure' magic
      t4013: add tests for -m failing to override -c/--cc
      diff-merges: fix -m to properly override -c/--cc
      diff-merges: split 'ignore_merges' field
      diff-merges: group diff-merge flags next to each other inside 'rev_info'
      diff-merges: get rid of now empty diff_merges_init_revs()
      diff-merges: refactor opt settings into separate functions
      diff-merges: make -m/-c/--cc explicitly mutually exclusive
      diff-merges: implement new values for --diff-merges
      diff-merges: do not imply -p for new options
      diff-merges: let new options enable diff without -p
      diff-merges: add old mnemonic counterparts to --diff-merges
      diff-merges: add '--diff-merges=1' as synonym for 'first-parent'
      doc/git-log: describe new --diff-merges options
      doc/diff-generate-patch: mention new --diff-merges option
      doc/rev-list-options: document --first-parent changes merges format
      doc/git-show: include --diff-merges description
      t4013: add tests for --diff-merges=first-parent

Seth House (4):
      mergetool: add hideResolved configuration
      mergetool: break setup_tool out into separate initialization function
      mergetool: add per-tool support and overrides for the hideResolved flag
      mergetools/vimdiff: add vimdiff1 merge tool variant

Taylor Blau (39):
      ewah/ewah_bitmap.c: avoid open-coding ALLOC_GROW()
      pack-bitmap.c: check reads more aggressively when loading
      pack-bitmap: factor out 'bitmap_for_commit()'
      pack-bitmap: factor out 'add_commit_to_bitmap()'
      p7519: allow running without watchman prereq
      Documentation/git-clone.txt: document race with --local
      pack-revindex: introduce a new API
      write_reuse_object(): convert to new revindex API
      write_reused_pack_one(): convert to new revindex API
      write_reused_pack_verbatim(): convert to new revindex API
      check_object(): convert to new revindex API
      bitmap_position_packfile(): convert to new revindex API
      show_objects_for_type(): convert to new revindex API
      get_size_by_pos(): convert to new revindex API
      try_partial_reuse(): convert to new revindex API
      rebuild_existing_bitmaps(): convert to new revindex API
      get_delta_base_oid(): convert to new revindex API
      retry_bad_packed_offset(): convert to new revindex API
      packed_object_info(): convert to new revindex API
      unpack_entry(): convert to new revindex API
      for_each_object_in_pack(): convert to new revindex API
      builtin/gc.c: guess the size of the revindex
      pack-revindex: remove unused 'find_pack_revindex()'
      pack-revindex: remove unused 'find_revindex_position()'
      pack-revindex: hide the definition of 'revindex_entry'
      pack-revindex.c: avoid direct revindex access in 'offset_to_pack_pos()'
      refs: expose 'for_each_fullref_in_prefixes'
      ls-refs.c: traverse prefixes of disjoint "ref-prefix" sets
      packfile: prepare for the existence of '*.rev' files
      pack-write.c: prepare to write 'pack-*.rev' files
      builtin/index-pack.c: allow stripping arbitrary extensions
      builtin/index-pack.c: write reverse indexes
      builtin/pack-objects.c: respect 'pack.writeReverseIndex'
      Documentation/config/pack.txt: advertise 'pack.writeReverseIndex'
      t: prepare for GIT_TEST_WRITE_REV_INDEX
      t: support GIT_TEST_WRITE_REV_INDEX
      pack-revindex: ensure that on-disk reverse indexes are given precedence
      t5325: check both on-disk and in-memory reverse index
      .github/workflows/main.yml: run static-analysis on bionic

Thomas Ackermann (7):
      doc: fix some typos
      doc hash-function-transition: fix asciidoc output
      doc hash-function-transition: use SHA-1 and SHA-256 consistently
      doc hash-function-transition: use upper case consistently
      doc hash-function-transition: fix incomplete sentence
      doc hash-function-transition: move rationale upwards
      doc: use https links

Torsten Bögershausen (1):
      MacOS: precompose_argv_prefix()

Utku Gultopu (1):
      doc: remove "directory cache" from man pages

Vasyl Vavrychuk (1):
      git-send-email.txt: mention less secure app access with Gmail

ZheNing Hu (5):
      builtin/*: update usage format
      ls_files.c: bugfix for --deleted and --modified
      ls_files.c: consolidate two for loops into one
      ls-files.c: add --deduplicate option
      difftool.c: learn a new way start at specified file

brian m. carlson (9):
      abspath: add a function to resolve paths with missing components
      rev-parse: add option for absolute or relative path formatting
      docs: rephrase and clarify the git status --short format
      ref-filter: switch some uses of unsigned long to size_t
      commit: ignore additional signatures when parsing signed commits
      gpg-interface: improve interface for parsing tags
      commit: allow parsing arbitrary buffers with headers
      ref-filter: hoist signature parsing
      gpg-interface: remove other signature headers before verifying

Ævar Arnfjörð Bjarmason (100):
      pretty format %(trailers) test: split a long line
      pretty format %(trailers) doc: avoid repetition
      pretty-format %(trailers): fix broken standalone "valueonly"
      pretty format %(trailers): add a "keyonly"
      pretty format %(trailers): add a "key_value_separator"
      mktag doc: say <hash> not <sha1>
      mktag doc: grammar fix, when exists -> when it exists
      CoC: Update word-wrapping to match upstream
      mktag doc: update to explain why to use this
      mktag tests: don't needlessly use a subshell
      mktag tests: use "test_commit" helper
      mktag tests: remove needless SHA-1 hardcoding
      mktag tests: don't redirect stderr to a file needlessly
      mktag tests: don't create "mytag" twice
      mktag tests: run "fsck" after creating "mytag"
      mktag tests: stress test whitespace handling
      mktag tests: test "hash-object" compatibility
      mktag tests: improve verify_object() test coverage
      mktag tests: test verify_object() with replaced objects
      mktag: use default strbuf_read() hint
      mktag: remove redundant braces in one-line body "if"
      mktag: use puts(str) instead of printf("%s\n", str)
      mktag: use fsck instead of custom verify_tag()
      fsck: make fsck_config() re-usable
      mktag: allow turning off fsck.extraHeaderEntry
      mktag: allow omitting the header/body \n separator
      mktag: convert to parse-options
      mktag: mark strings for translation
      mktag: add a --[no-]strict option
      branch: change "--local" to "--list" in comment
      branch tests: add to --sort tests
      ref-filter: add braces to if/else if/else chain
      ref-filter: move "cmp_fn" assignment into "else if" arm
      ref-filter: move ref_sorting flags to a bitfield
      branch: sort detached HEAD based on a flag
      branch: show "HEAD detached" first under reverse sort
      Makefile: remove a warning about old GETTEXT_POISON flag
      gettext.c: remove/reword a mostly-useless comment
      mailmap doc: create a new "gitmailmap(5)" man page
      mailmap doc: quote config variables `like.this`
      check-mailmap doc: note config options
      mailmap doc: start by mentioning the comment syntax
      mailmap tests: use our preferred whitespace syntax
      mailmap tests: modernize syntax & test idioms
      mailmap tests: improve --stdin tests
      mailmap tests: remove redundant entry in test
      mailmap tests: add a test for "not a blob" error
      mailmap tests: get rid of overly complex blame fuzzing
      mailmap: test for silent exiting on missing file/blob
      test-lib functions: expand "test_commit" comment template
      test-lib functions: document arguments to test_commit
      test-lib functions: add --author support to test_commit
      test-lib functions: add an --append option to test_commit
      tests: refactor a few tests to use "test_commit --append"
      mailmap doc + tests: add better examples & test them
      mailmap tests: add a test for comment syntax
      mailmap tests: add tests for whitespace syntax
      mailmap tests: add tests for empty "<>" syntax
      mailmap doc + tests: document and test for case-insensitivity
      shortlog: remove unused(?) "repo-abbrev" feature
      CoC: update to version 2.0 + local changes
      fsck doc: remove ancient out-of-date diagnostics
      ci: remove GETTEXT_POISON jobs
      tests: remove support for GIT_TEST_GETTEXT_POISON
      tests: remove uses of GIT_TEST_GETTEXT_POISON=false
      cache-tree tests: refactor for modern test style
      cache-tree tests: remove unused $2 parameter
      cache-tree tests: use a sub-shell with less indirection
      cache-tree tests: explicitly test HEAD and index differences
      git svn mergeinfo tests: modernize redirection & quoting style
      git svn mergeinfo tests: refactor "test -z" to use test_must_be_empty
      upload-pack tests: avoid a non-zero "grep" exit status
      archive tests: use a cheaper "zipinfo -h" invocation to get header
      rm tests: actually test for SIGPIPE in SIGPIPE test
      config.mak.uname: remove redundant NO_LIBPCRE1_JIT flag
      Remove support for v1 of the PCRE library
      grep/pcre2 tests: don't rely on invalid UTF-8 data test
      grep/pcre2: better support invalid UTF-8 haystacks
      grep/log: remove hidden --debug and --grep-debug options
      pager: refactor wait_for_pager() function
      pager: test for exit code with and without SIGPIPE
      run-command: add braces for "if" block in wait_or_whine()
      pager: properly log pager exit code when signalled
      test-lib: remove check_var_migration
      test lib: change "error" to "BUG" as appropriate
      test-lib-functions: move test_set_index_version() to its user
      test-lib-functions: remove generate_zero_bytes() wrapper
      test libs: rename bundle helper to "lib-bundle.sh"
      test libs: rename gitweb-lib.sh to lib-gitweb.sh
      test-lib-functions: move function to lib-bitmap.sh
      t/.gitattributes: sort lines
      tests: remove last uses of GIT_TEST_GETTEXT_POISON=false
      tests: remove most uses of C_LOCALE_OUTPUT
      tests: remove last uses of C_LOCALE_OUTPUT
      tests: remove most uses of test_i18ncmp
      diff: add an API for deferred freeing
      diff: plug memory leak from regcomp() on {log,diff} -I
      test libs: rename "diff-lib" to "lib-diff"
      test-lib-functions: remove bug-inducing "diagnostics" helper param
      test-lib-functions: assert correct parameter count


^ permalink raw reply	[relevance 2%]

* What's cooking in git.git (Feb 2021, #03; Wed, 17)
@ 2021-02-18  2:11  1% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2021-02-18  2:11 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with '-' are
only in 'seen' (formerly 'pu'---proposed updates) while commits prefixed
with '+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

The eighth batch of topics are in 'master'.

Copies of the source code to Git live in many repositories, and the
following is a list of the ones I push into or their mirrors.  Some
repositories have only a subset of branches.

With maint, master, next, seen, todo:

	git://git.kernel.org/pub/scm/git/git.git/
	git://repo.or.cz/alt-git.git/
	https://kernel.googlesource.com/pub/scm/git/git/
	https://github.com/git/git/
	https://gitlab.com/git-vcs/git/

With all the integration branches and topics broken out:

	https://github.com/gitster/git/

Even though the preformatted documentation in HTML and man format
are not sources, they are published in these repositories for
convenience (replace "htmldocs" with "manpages" for the manual
pages):

	git://git.kernel.org/pub/scm/git/git-htmldocs.git/
	https://github.com/gitster/git-htmldocs.git/

Release tarballs are available at:

	https://www.kernel.org/pub/software/scm/git/

--------------------------------------------------
[Graduated to 'master']

* ab/tests-various-fixup (2021-01-23) 10 commits
  (merged to 'next' on 2021-02-01 at a604a6e217)
 + rm tests: actually test for SIGPIPE in SIGPIPE test
 + archive tests: use a cheaper "zipinfo -h" invocation to get header
 + upload-pack tests: avoid a non-zero "grep" exit status
 + git-svn tests: rewrite brittle tests to use "--[no-]merges".
 + git svn mergeinfo tests: refactor "test -z" to use test_must_be_empty
 + git svn mergeinfo tests: modernize redirection & quoting style
 + cache-tree tests: explicitly test HEAD and index differences
 + cache-tree tests: use a sub-shell with less indirection
 + cache-tree tests: remove unused $2 parameter
 + cache-tree tests: refactor for modern test style

 Various test updates.


* en/merge-ort-perf (2021-01-23) 6 commits
  (merged to 'next' on 2021-02-01 at ca3c07579b)
 + merge-ort: begin performance work; instrument with trace2_region_* calls
 + merge-ort: ignore the directory rename split conflict for now
 + merge-ort: fix massive leak
 + Merge branch 'en/ort-directory-rename' into en/merge-ort-perf
 + Merge branch 'en/ort-conflict-handling' into en/merge-ort-perf
 + Merge branch 'en/diffcore-rename' into en/merge-ort-perf
 (this branch uses en/ort-directory-rename.)

 The "ort" merge strategy.


* en/ort-directory-rename (2021-01-20) 18 commits
  (merged to 'next' on 2021-02-01 at 5c1cdd13a1)
 + merge-ort: fix a directory rename detection bug
 + merge-ort: process_renames() now needs more defensiveness
 + merge-ort: implement apply_directory_rename_modifications()
 + merge-ort: add a new toplevel_dir field
 + merge-ort: implement handle_path_level_conflicts()
 + merge-ort: implement check_for_directory_rename()
 + merge-ort: implement apply_dir_rename() and check_dir_renamed()
 + merge-ort: implement compute_collisions()
 + merge-ort: modify collect_renames() for directory rename handling
 + merge-ort: implement handle_directory_level_conflicts()
 + merge-ort: implement compute_rename_counts()
 + merge-ort: copy get_renamed_dir_portion() from merge-recursive.c
 + merge-ort: add outline of get_provisional_directory_renames()
 + merge-ort: add outline for computing directory renames
 + merge-ort: collect which directories are removed in dirs_removed
 + merge-ort: initialize and free new directory rename data structures
 + merge-ort: add new data structures for directory rename detection
 + Merge branch 'en/merge-ort-3' into en/ort-directory-rename
 (this branch is used by en/merge-ort-perf.)

 ORT merge strategy learns to infer "renamed directory" while
 merging.


* jk/complete-branch-force-delete (2021-02-03) 3 commits
  (merged to 'next' on 2021-02-03 at 6454bb89b5)
 + doc/git-branch: fix awkward wording for "-c"
 + completion: handle other variants of "branch -m"
 + completion: treat "branch -D" the same way as "branch -d"

 The command line completion (in contrib/) completed "git branch -d"
 with branch names, but "git branch -D" offered tagnames in addition,
 which has been corrected.  "git branch -M" had the same problem.


* jv/upload-pack-filter-spec-quotefix (2021-02-02) 2 commits
  (merged to 'next' on 2021-02-03 at 2e34f74e3a)
 + t5544: clarify 'hook works with partial clone' test
  (merged to 'next' on 2021-01-31 at 789bf4154e)
 + upload-pack.c: fix filter spec quoting bug

 Fix in passing custom args from "git clone" to "upload-pack" on the
 other side.


* tb/ci-run-cocci-with-18.04 (2021-02-08) 1 commit
  (merged to 'next' on 2021-02-09 at c50bc53527)
 + .github/workflows/main.yml: run static-analysis on bionic

 The version of Ubuntu Linux used by default at GitHub Actions CI
 has been updated to one that lack coccinelle; until it gets fixed,
 work it around by sticking to the previous release (18.04).


* tb/pack-revindex-on-disk (2021-01-28) 10 commits
  (merged to 'next' on 2021-02-01 at bd6a780213)
 + t5325: check both on-disk and in-memory reverse index
 + pack-revindex: ensure that on-disk reverse indexes are given precedence
 + t: support GIT_TEST_WRITE_REV_INDEX
 + t: prepare for GIT_TEST_WRITE_REV_INDEX
 + Documentation/config/pack.txt: advertise 'pack.writeReverseIndex'
 + builtin/pack-objects.c: respect 'pack.writeReverseIndex'
 + builtin/index-pack.c: write reverse indexes
 + builtin/index-pack.c: allow stripping arbitrary extensions
 + pack-write.c: prepare to write 'pack-*.rev' files
 + packfile: prepare for the existence of '*.rev' files
 (this branch is used by tb/reverse-midx.)

 Introduce an on-disk file to record revindex for packdata, which
 traditionally was always created on the fly and only in-core.


* tb/precompose-prefix-too (2021-02-03) 1 commit
  (merged to 'next' on 2021-02-05 at 1dd43136b1)
 + MacOS: precompose_argv_prefix()

 When commands are started from a subdirectory, they may have to
 compare the path to the subdirectory (called prefix and found out
 from $(pwd)) with the tracked paths.  On macOS, $(pwd) and
 readdir() yield decomposed path, while the tracked paths are
 usually normalized to the precomposed form, causing mismatch.  This
 has been fixed by taking the same approach used to normalize the
 command line arguments.

--------------------------------------------------
[New Topics]

* tb/reverse-midx (2021-02-10) 9 commits
 - pack-revindex: write multi-pack reverse indexes
 - pack-write.c: extract 'write_rev_file_order'
 - pack-revindex: read multi-pack reverse indexes
 - Documentation/technical: describe multi-pack reverse indexes
 - midx: make some functions non-static
 - midx: keep track of the checksum
 - midx: don't free midx_name early
 - midx: allow marking a pack as preferred
 - t/helper/test-read-midx.c: add '--show-objects'

 An on-disk reverse-index to map the in-pack location of an object
 back to its object name across multiple packfiles is introduced.


* ab/detox-gettext-tests (2021-02-10) 4 commits
 - tests: remove most uses of test_i18ncmp
 - tests: remove last uses of C_LOCALE_OUTPUT
 - tests: remove most uses of C_LOCALE_OUTPUT
 - tests: remove last uses of GIT_TEST_GETTEXT_POISON=false

 Removal of GIT_TEST_GETTEXT_POISON continues.

 Will merge to 'next'.


* ab/diff-deferred-free (2021-02-11) 2 commits
  (merged to 'next' on 2021-02-12 at 5e24106122)
 + diff: plug memory leak from regcomp() on {log,diff} -I
 + diff: add an API for deferred freeing

 A small memleak in "diff -I<regexp>" has been corrected.

 Will merge to 'master'.


* ak/config-bad-bool-error (2021-02-11) 1 commit
  (merged to 'next' on 2021-02-12 at 76784be663)
 + config: improve error message for boolean config

 The error message given when a configuration variable that is
 expected to have a boolean value has been improved.

 Will merge to 'master'.


* jc/diffcore-rotate (2021-02-16) 1 commit
 - diff: --{rotate,skip}-to=<path>

 "git {diff,log} --{skip,rotate}-to=<path>" allows the user to
 discard diff output for early paths or move them to the end of the
 output.

 Will merge to 'next'.


* js/commit-graph-warning (2021-02-11) 1 commit
  (merged to 'next' on 2021-02-12 at e9faad550a)
 + commit-graph: when incompatible with graphs, indicate why

 When certain features (e.g. grafts) used in the repository are
 incompatible with the use of the commit-graph, we used to silently
 turned commit-graph off; we now tell the user what we are doing.

 Will merge to 'master'.


* js/reflog-expire-stale-fix (2021-02-11) 1 commit
  (merged to 'next' on 2021-02-12 at 899034efca)
 + reflog expire --stale-fix: be generous about missing objects

 "git reflog expire --stale-fix" can be used to repair the reflog by
 removing entries that refer to objects that have been pruned away,
 but was not careful to tolerate missing objects.

 Will merge to 'master'.


* mz/doc-notes-are-not-anchors (2021-02-10) 1 commit
 - docs: clarify that refs/notes/ do not keep the attached objects alive

 Objects that lost references can be pruned away, even when they
 have notes attached to it (and these notes will become dangling,
 which in turn can be pruned with "git notes prune").  This has been
 clarified in the documentation.

 Will merge to 'next'.


* en/diffcore-rename (2021-02-15) 8 commits
 - merge-ort: call diffcore_rename() directly
 - gitdiffcore doc: mention new preliminary step for rename detection
 - diffcore-rename: guide inexact rename detection based on basenames
 - diffcore-rename: complete find_basename_matches()
 - diffcore-rename: compute basenames of source and dest candidates
 - t4001: add a test comparing basename similarity and content similarity
 - diffcore-rename: filter rename_src list when possible
 - diffcore-rename: no point trying to find a match better than exact

 Performance optimization work on the rename detection continues.

 Will merge to 'next'.


* ab/pickaxe-pcre2 (2021-02-16) 24 commits
 - pickaxe -G: don't special-case create/delete
 - pickaxe -G: terminate early on matching lines
 - xdiff-interface: support early exit in xdiff_outf()
 - xdiff-interface: allow early return from xdiff_emit_{line,hunk}_fn
 - pickaxe -S: slightly optimize contains()
 - pickaxe: rename variables in has_changes() for brevity
 - pickaxe -S: support content with NULs under --pickaxe-regex
 - pickaxe: assert that we must have a needle under -G or -S
 - pickaxe: refactor function selection in diffcore-pickaxe()
 - perf: add performance test for pickaxe
 - pickaxe/style: consolidate declarations and assignments
 - diff.h: move pickaxe fields together again
 - pickaxe: die when --find-object and --pickaxe-all are combined
 - pickaxe: die when -G and --pickaxe-regex are combined
 - pickaxe tests: test for -G, -S and --find-object incompatibility
 - pickaxe tests: add test for "log -S" not being a regex
 - pickaxe tests: add test for diffgrep_consume() internals
 - pickaxe tests: refactor to use test_commit --append --printf
 - test-lib functions: add --printf option to test_commit
 - test-lib-functions: reword "test_commit --append" docs
 - test-lib-functions: document and test test_commit --no-tag
 - grep/pcre2 tests: reword comments referring to kwset
 - Merge branch 'jk/rev-list-disk-usage' into ab/pickaxe-pcre2
 - Merge branch 'ab/test-lib' into ab/pickaxe-pcre2
 (this branch uses ab/test-lib and jk/rev-list-disk-usage.)


* cm/rebase-i-fixup-amend-reword (2021-02-17) 6 commits
 - doc/git-commit: add documentation for fixup[amend|reword] options
 - t3437: use --fixup with options to create amend! commit
 - t7500: add tests for --fixup[amend|reword] options
 - commit: add a reword suboption to --fixup
 - commit: add amend suboption to --fixup to create amend! commit
 - sequencer: export subject_length()
 (this branch uses cm/rebase-i and cm/rebase-i-updates.)

 "git commit --fixup" learns to optionally create "amend!" and
 "reword!"  commits, that use the log message in "fixup" commit
 as the message of the resulting commit.


* dl/stash-show-untracked (2021-02-16) 4 commits
 - SQUASH???
 - SQUASH???
 - stash show: learn stash.showIncludeUntracked
 - stash show: teach --include-untracked and --only-untracked
 (this branch uses dl/stash-cleanup.)

 "git stash show" learned to optionally show untracked part of the
 stash.


* es/config-hooks-part-1 (2021-02-16) 17 commits
 - hooks: allow callers to capture output
 - run-command: allow capturing of collated output
 - hook: provide stdin by string_list or callback
 - run-command: add stdin callback for parallelization
 - hook: allow specifying working directory for hooks
 - hook: allow parallel hook execution
 - run-command: allow stdin for run_processes_parallel
 - hook: support passing stdin to hooks
 - hook: replace find_hook() with hook_exists()
 - hook: add 'run' subcommand
 - parse-options: parse into strvec
 - hook: implement hookcmd.<name>.skip
 - hook: respect hook.runHookDir
 - hook: include hookdir hook in list
 - hook: add list command
 - hook: scaffolding for git-hook subcommand
 - doc: propose hooks managed by the config
 (this branch is used by es/config-hooks.)

 A way to specify hooks in the configuration files is introduced.

 Will merge to 'next'.


* jh/fsmonitor-prework (2021-02-16) 11 commits
 - fsmonitor: refactor initialization of fsmonitor_last_update token
 - fsmonitor: allow all entries for a folder to be invalidated
 - fsmonitor: log FSMN token when reading and writing the index
 - fsmonitor: log invocation of FSMonitor hook to trace2
 - read-cache: log the number of scanned files to trace2
 - read-cache: log the number of lstat calls to trace2
 - preload-index: log the number of lstat calls to trace2
 - p7519: add trace logging during perf test
 - p7519: move watchman cleanup earlier in the test
 - p7519: fix watchman watch-list test on Windows
 - p7519: do not rely on "xargs -d" in test

 Preliminary changes to fsmonitor integration.

 Will merge to 'next'.


* jk/open-dotgitx-with-nofollow (2021-02-16) 6 commits
 - mailmap: do not respect symlinks for in-tree .mailmap
 - exclude: do not respect symlinks for in-tree .gitignore
 - attr: do not respect symlinks for in-tree .gitattributes
 - exclude: add flags parameter to add_patterns()
 - attr: convert "macro_ok" into a flags field
 - add open_nofollow() helper

 It does not make sense to make ".gitattributes", ".gitignore" and
 ".mailmap" symlinks, as they are supposed to be usable from the
 object store (think: bare repositories where HEAD:.mailmap etc. are
 used).  When these files are symbolic links, we used to read the
 contents of the files pointed by them by mistake, which has been
 corrected.


* js/doc-proto-v2-response-end (2021-02-17) 1 commit
 - doc: fix naming of response-end-pkt

 Docfix.

 Will merge to 'next'.


* ma/doc-markup-fix (2021-02-17) 2 commits
 - gitmailmap.txt: fix rendering of e-mail addresses
 - rev-list-options.txt: fix rendering of bonus paragraph

 Docfix.

 Will merge to 'next'.


* rs/blame-optim (2021-02-17) 1 commit
 - blame: remove unnecessary use of get_commit_info()

 Optimization in "git blame"

 Will merge to 'next'.


* rs/pretty-describe (2021-02-17) 2 commits
 - pretty: add merge and exclude options to %(describe)
 - pretty: add %(describe)

 "git log --format='...'" learned "%(describe)" placeholder.

--------------------------------------------------
[Stalled]

* ab/make-cleanup (2021-02-01) 6 commits
 - Makefile: add {program,xdiff,test,git}-objs & objects targets
 - Makefile: split OBJECTS into OBJECTS and GIT_OBJS
 - Makefile: sort OBJECTS assignment for subsequent change
 - Makefile: split up long OBJECTS line
 - Makefile: guard against TEST_OBJS in the environment
 - Makefile: remove "all" on "$(FUZZ_OBJS)"

 Reorganize Makefile to allow building git.o and other essential
 objects without extra stuff needed only for testing.

 Expecting a reroll (or retraction)
 cf. <YBuZVfnc0ECuoKkK@coredump.intra.peff.net>
 cf. <xmqq1rdzjuaa.fsf@gitster.c.googlers.com>


* jk/symlinked-dotgitx-files (2020-10-23) 9 commits
 - docs: document symlink restrictions for .git* files
 - fsck: complain when .gitattributes or .gitignore is a symlink
 - verify_path(): disallow symlinks in .gitattributes and .gitignore
 - t0060: test obscured .gitattributes and .gitignore matching
 - t7450: test .gitmodules symlink matching against obscured names
 - t7450: test verify_path() handling of gitmodules
 - t7415: rename to expand scope
 - fsck_tree(): wrap some long lines
 - fsck_tree(): fix shadowed variable

 "git fsck" and the corresponding check done during the transport
 learned to ensure that in-tree files like `.gitignore` and
 `.gitattributes` are not symbolic links.

 It seems that there are real projects with .gitignore recorded as
 symlinks, which may need to loosen the fsck setting.  Do we need to
 introduce a class that is separate from symlinked .gitmodules that
 has potential consequences that is more/less grave, so that these
 projects can opt out of the new checks?


* sm/curl-retry (2020-10-13) 3 commits
 - http: automatically retry some requests
 - replace CURLOPT_FILE With CURLOPT_WRITEDATA
 - remote-curl: add testing for intelligent retry for HTTP

 The http transport has been taught to retry a failed request that
 may reasonably be retried.

 Expecting a reroll.
 cf. <20201015000410.GB328643@google.com>
 cf. <CAM4o00eefXK2CJ_FxwwVPpBKL01JsJANf+SdjCtw_0NVV82L+Q@mail.gmail.com>


* ar/fetch-transfer-ipversion (2020-09-16) 1 commit
 - config: option transfer.ipversion to set transport protocol version for network fetches

 Adds transfer.ipversion configuration variable.

 Needs more work.


* jc/war-on-dashed-git (2020-12-21) 2 commits
 - fixup??? git: catch an attempt to run "git-foo"
 - git: catch an attempt to run "git-foo"

 The first step to remove on-disk binaries for built-in subcommands
 by soliciting objections.

 On hold for now.


* mk/use-size-t-in-zlib (2018-10-15) 1 commit
 - zlib.c: use size_t for size

 The wrapper to call into zlib followed our long tradition to use
 "unsigned long" for sizes of regions in memory, which have been
 updated to use "size_t".


* ag/merge-strategies-in-c (2020-11-24) 13 commits
 - sequencer: use the "octopus" merge strategy without forking
 - sequencer: use the "resolve" strategy without forking
 - merge: use the "octopus" strategy without forking
 - merge: use the "resolve" strategy without forking
 - merge-octopus: rewrite in C
 - merge-recursive: move better_branch_name() to merge.c
 - merge-resolve: rewrite in C
 - merge-index: don't fork if the requested program is `git-merge-one-file'
 - merge-index: libify merge_one_path() and merge_all()
 - merge-one-file: rewrite in C
 - update-index: move add_cacheinfo() to read-cache.c
 - t6060: modify multiple files to expose a possible issue with merge-index
 - t6407: modernise tests

 The resolve and octopus merge strategy backends have been rewritten
 in C.

 Got enough review comments to get updated.

--------------------------------------------------
[Cooking]

* js/range-diff-one-side-only (2021-02-06) 6 commits
  (merged to 'next' on 2021-02-08 at 8c35ed8523)
 + range-diff: offer --left-only/--right-only options
 + range-diff: move the diffopt initialization down one layer
 + range-diff: combine all options in a single data structure
 + range-diff: simplify code spawning `git log`
 + range-diff: libify the read_patches() function again
 + range-diff: avoid leaking memory in two error code paths

 The "git range-diff" command learned "--(left|right)-only" option
 to show only one side of the compared range.

 Will merge to 'master'.


* cm/rebase-i-updates (2021-02-10) 11 commits
  (merged to 'next' on 2021-02-12 at e29227780b)
 + doc/rebase -i: fix typo in the documentation of 'fixup' command
 + t/t3437: fixup the test 'multiple fixup -c opens editor once'
 + t/t3437: use named commits in the tests
 + t/t3437: simplify and document the test helpers
 + t/t3437: check the author date of fixed up commit
 + t/t3437: remove the dependency of 'expected-message' file from tests
 + t/t3437: fixup here-docs in the 'setup' test
 + t/lib-rebase: update the documentation of FAKE_LINES
 + rebase -i: clarify and fix 'fixup -c' rebase-todo help
 + sequencer: rename a few functions
 + sequencer: fixup the datatype of the 'flag' argument
 (this branch is used by cm/rebase-i-fixup-amend-reword; uses cm/rebase-i.)

 Follow-up fixes to "cm/rebase-i" topic.

 Will merge to 'master', together with "cm/rebase-i".


* cw/pack-vs-bigfilethreashold (2021-02-09) 2 commits
 - fixup! doc: mention bigFileThreshold for packing
 - doc: mention bigFileThreshold for packing

 Doc update.

 Expecting a reroll.
 cf. <F63929A8-7BC9-43A7-9E7B-118433F62588@gmx.ch>


* ds/maintenance-pack-refs (2021-02-09) 2 commits
  (merged to 'next' on 2021-02-11 at 36f56bc9ec)
 + maintenance: incremental strategy runs pack-refs weekly
 + maintenance: add pack-refs task

 "git maintenance" tool learned a new "pack-refs" maintenance task.

 Will merge to 'master'.


* jk/mailmap-only-at-root (2021-02-10) 1 commit
  (merged to 'next' on 2021-02-10 at fbd122fd6c)
 + mailmap: only look for .mailmap in work tree

 The .mailmap is documented to be read only from the root level of a
 working tree, but a stray file in a bare repository also was read
 by accident, which has been corrected.

 Will merge to 'master'.


* jk/rev-list-disk-usage (2021-02-11) 2 commits
  (merged to 'next' on 2021-02-11 at 6fb701f287)
 + rev-list: add --disk-usage option for calculating disk usage
 + t: add --no-tag option to test_commit
 (this branch is used by ab/pickaxe-pcre2.)

 "git rev-list" command learned "--disk-usage" option.

 Will merge to 'master'.


* jt/trace2-BUG (2021-02-09) 1 commit
  (merged to 'next' on 2021-02-09 at 94911ad676)
 + usage: trace2 BUG() invocations

 Even though invocations of "die()" were logged to the trace2
 system, "BUG()"s were not, which has been corrected.

 Will merge to 'master'.


* mt/checkout-index-corner-cases (2021-02-16) 2 commits
 - checkout-index: omit entries with no tempname from --temp output
 - write_entry(): fix misuses of `path` in error messages

 The error codepath around the "--temp/--prefix" feature of "git
 checkout-index" has been improved.

 Will merge to 'next'.


* mt/grep-cached-untracked (2021-02-09) 1 commit
  (merged to 'next' on 2021-02-10 at e1fca79104)
 + grep: error out if --untracked is used with --cached

 "git grep --untracked" is meant to be "let's ALSO find in these
 files on the filesystem" when looking for matches in the working
 tree files, and does not make any sense if the primary search is
 done against the index, or the tree objects.  The "--cached" and
 "--untracked" options have been marked as mutually incompatible.

 Will merge to 'master'.


* ab/test-lib (2021-02-12) 11 commits
  (merged to 'next' on 2021-02-12 at 666a0422dc)
 + test-lib-functions: assert correct parameter count
 + test-lib-functions: remove bug-inducing "diagnostics" helper param
 + test libs: rename "diff-lib" to "lib-diff"
 + t/.gitattributes: sort lines
 + test-lib-functions: move function to lib-bitmap.sh
 + test libs: rename gitweb-lib.sh to lib-gitweb.sh
 + test libs: rename bundle helper to "lib-bundle.sh"
 + test-lib-functions: remove generate_zero_bytes() wrapper
 + test-lib-functions: move test_set_index_version() to its user
 + test lib: change "error" to "BUG" as appropriate
 + test-lib: remove check_var_migration
 (this branch is used by ab/pickaxe-pcre2.)

 Test framework clean-up.

 Will merge to 'master'.


* dl/stash-cleanup (2021-02-11) 7 commits
  (merged to 'next' on 2021-02-11 at ae1cde1380)
 + stash: declare ref_stash as an array
 + t3905: use test_cmp() to check file contents
 + t3905: replace test -s with test_file_not_empty
 + t3905: remove nested git in command substitution
 + t3905: move all commands into test cases
 + t3905: remove spaces after redirect operators
 + git-stash.txt: be explicit about subcommand options
 (this branch is used by dl/stash-show-untracked.)

 Documentation, code and test clean-up around "git stash".

 Will merge to 'master'.
 This is an early part of a topic that added a new feature to the
 command, but the implementation is expected to need a handful of
 iterations; I split the preparatory part up to fast-track it.


* ew/rev-parse-since-test (2021-02-10) 1 commit
  (merged to 'next' on 2021-02-11 at 2490918be8)
 + t1500: ensure current --since= behavior remains

 Test to make sure "git rev-parse one-thing one-thing" gives
 the same thing twice (when one-thing is --since=X).

 Will merge to 'master'.


* js/fsck-name-objects-fix (2021-02-10) 2 commits
  (merged to 'next' on 2021-02-10 at 79afd7ebdc)
 + fsck --name-objects: be more careful parsing generation numbers
 + t1450: robustify `remove_object()`

 Fix "git fsck --name-objects" which apparently has not been used by
 anybody who is motivated enough to report breakage.

 Will merge to 'master'.


* sv/t7001-modernize (2021-02-11) 10 commits
 - t7001: use `test` rather than `[`
 - t7001: use here-docs instead of echo
 - t7001: put each command on a separate line
 - t7001: use '>' rather than 'touch'
 - t7001: avoid using `cd` outside of subshells
 - t7001: remove whitespace after redirect operators
 - t7001: modernize subshell formatting
 - t7001: remove unnecessary blank lines
 - t7001: indent with TABs instead of spaces
 - t7001: modernize test formatting

 Test script modernization.

 Expecting the final version with corrected author attribution.


* mt/grep-sparse-checkout (2021-02-09) 1 commit
 - grep: honor sparse-checkout on working tree searches

 "git grep" has been tweaked to be limited to the sparse checkout
 paths.

 Break out and fast-track bugfix from the remainder of the topic.
 cf. <CABPp-BFkACtF6LHkFJNt9dTOmwfQbf8ZO=BTrPYwPSmbqc9+hg@mail.gmail.com>


* ds/commit-graph-genno-fix (2021-02-01) 6 commits
  (merged to 'next' on 2021-02-03 at b3a9e11efb)
 + commit-graph: prepare commit graph
 + commit-graph: be extra careful about mixed generations
 + commit-graph: compute generations separately
 + commit-graph: validate layers for generation data
 + commit-graph: always parse before commit_graph_data_at()
 + commit-graph: use repo_parse_commit
 (this branch uses ak/corrected-commit-date; is tangled with ds/chunked-file-api and ds/merge-base-independent.)

 Fix incremental update of commit-graph file around corrected commit
 date data.

 Will merge to 'master', together with "ak/corrected-commit-date".


* jh/simple-ipc (2021-02-17) 12 commits
 - t0052: add simple-ipc tests and t/helper/test-simple-ipc tool
 - simple-ipc: add Unix domain socket implementation
 - unix-socket: create `unix_stream_server__listen_with_lock()`
 - unix-socket: disallow chdir() when creating unix domain sockets
 - unix-socket: add backlog size option to unix_stream_listen()
 - unix-socket: elimiate static unix_stream_socket() helper function
 - simple-ipc: add win32 implementation
 - simple-ipc: design documentation for new IPC mechanism
 - pkt-line: add options argument to read_packetized_to_strbuf()
 - pkt-line: (optionally) libify the packet readers
 - pkt-line: do not issue flush packets in write_packetized_*()
 - pkt-line: eliminate the need for static buffer in packet_write_gently()

 A simple IPC interface gets introduced to build services like
 fsmonitor on top.


* ab/pager-exit-log (2021-02-01) 4 commits
  (merged to 'next' on 2021-02-12 at ffe9f2d364)
 + pager: properly log pager exit code when signalled
 + run-command: add braces for "if" block in wait_or_whine()
 + pager: test for exit code with and without SIGPIPE
 + pager: refactor wait_for_pager() function

 When a pager spawned by us exited, the trace log did not record its
 exit status correctly, which has been corrected.

 Will merge to 'master'.
 The original "what should we do with SIGPIPE?" question remains, though.


* ta/hash-function-transition-doc (2021-02-05) 6 commits
  (merged to 'next' on 2021-02-12 at f620f3cfd3)
 + doc: use https links
 + doc hash-function-transition: move rationale upwards
 + doc hash-function-transition: fix incomplete sentence
 + doc hash-function-transition: use upper case consistently
 + doc hash-function-transition: use SHA-1 and SHA-256 consistently
 + doc hash-function-transition: fix asciidoc output

 Update formatting and grammar of the hash transition plan
 documentation, plus some updates.

 Will merge to 'master'.


* ds/chunked-file-api (2021-02-05) 17 commits
 - chunk-format: add technical docs
 - chunk-format: restore duplicate chunk checks
 - midx: use 64-bit multiplication for chunk sizes
 - midx: use chunk-format read API
 - commit-graph: use chunk-format read API
 - chunk-format: create read chunk API
 - midx: use chunk-format API in write_midx_internal()
 - midx: drop chunk progress during write
 - midx: return success/failure in chunk write methods
 - midx: add num_large_offsets to write_midx_context
 - midx: add pack_perm to write_midx_context
 - midx: add entries to write_midx_context
 - midx: use context in write_midx_pack_names()
 - midx: rename pack_info to write_midx_context
 - commit-graph: use chunk-format write API
 - chunk-format: create chunk format write API
 - commit-graph: anonymize data in chunk_write_fn
 (this branch uses ak/corrected-commit-date; is tangled with ds/commit-graph-genno-fix and ds/merge-base-independent.)

 The common code to deal with "chunked file format" that is shared
 by the multi-pack-index and commit-graph files have been factored
 out, to help codepaths for both filetypes to become more rebust.

 Getting there.


* ds/merge-base-independent (2021-02-01) 5 commits
 - commit-reach: stale commits may prune generation further
 - commit-reach: use heuristic in remove_redundant()
 - commit-reach: move compare_commits_by_gen
 - commit-reach: use one walk in remove_redundant()
 - commit-reach: reduce requirements for remove_redundant()
 (this branch uses ak/corrected-commit-date; is tangled with ds/chunked-file-api and ds/commit-graph-genno-fix.)

 The code to implement "git merge-base --independent" was poorly
 done and was kept from the very beginning of the feature.


* hv/trailer-formatting (2021-02-15) 4 commits
 - ref-filter: use pretty.c logic for trailers
 - pretty.c: capture invalid trailer argument
 - pretty.c: refactor trailer logic to `format_set_trailers_options()`
 - t6300: use function to test trailer options

 The logic to handle "trailer" related placeholders in the
 "--format=" mechanisms in the "log" family and "for-each-ref"
 family is getting unified.

 Ready for 'next'?


* sh/mergetool-hideresolved (2021-02-09) 3 commits
  (merged to 'next' on 2021-02-09 at c3ed19b2ec)
 + mergetool: add per-tool support and overrides for the hideResolved flag
 + mergetool: break setup_tool out into separate initialization function
 + mergetool: add hideResolved configuration

 "git mergetool" feeds three versions (base, local and remote) of
 a conflicted path unmodified.  The command learned to optionally
 prepare these files with unconflicted parts already resolved.

 Will merge to 'master'.


* cm/rebase-i (2021-01-29) 9 commits
  (merged to 'next' on 2021-02-01 at 4f9aa6cec3)
 + doc/git-rebase: add documentation for fixup [-C|-c] options
 + rebase -i: teach --autosquash to work with amend!
 + t3437: test script for fixup [-C|-c] options in interactive rebase
 + rebase -i: add fixup [-C | -c] command
 + sequencer: use const variable for commit message comments
 + sequencer: pass todo_item to do_pick_commit()
 + rebase -i: comment out squash!/fixup! subjects from squash message
 + sequencer: factor out code to append squash message
 + rebase -i: only write fixup-message when it's needed
 (this branch is used by cm/rebase-i-fixup-amend-reword and cm/rebase-i-updates.)

 "rebase -i" is getting cleaned up and also enhanced.

 Will merge to 'master', together with "cm/rebase-i-updates".


* tb/geometric-repack (2021-02-03) 8 commits
 - builtin/repack.c: add '--geometric' option
 - packfile: add kept-pack cache for find_kept_pack_entry()
 - builtin/pack-objects.c: rewrite honor-pack-keep logic
 - p5303: measure time to repack with keep
 - p5303: add missing &&-chains
 - builtin/pack-objects.c: add '--stdin-packs' option
 - revision: learn '--no-kept-objects'
 - packfile: introduce 'find_kept_pack_entry()'

 "git repack" so far has been only capable of repacking everything
 under the sun into a single pack (or split by size).  A cleverer
 strategy to reduce the cost of repacking a repository has been
 introduced.


* ah/rebase-no-fork-point-config (2021-01-21) 1 commit
 - rebase: add a config option for --no-fork-point

 "git rebase --[no-]fork-point" gained a configuration variable
 rebase.forkPoint so that users do not have to keep specifying a
 non-default setting.

 Expecting a reroll to update its tests.
 cf. <CAMMLpeTDNLUz9UVnL3aVK=J7X50Sq8L-OVGaoEsT5AY6EQON-g@mail.gmail.com>


* js/range-diff-wo-dotdot (2021-02-06) 3 commits
  (merged to 'next' on 2021-02-08 at 9ae8b46d99)
 + range-diff(docs): explain how to specify commit ranges
 + range-diff/format-patch: handle commit ranges other than A..B
 + range-diff/format-patch: refactor check for commit range

 There are other ways than ".." for a single token to denote a
 "commit range", namely "<rev>^!" and "<rev>^-<n>", but "git
 range-diff" did not understand them.

 Will merge to 'master'.


* jx/t5411-unique-filenames (2021-01-22) 2 commits
  (merged to 'next' on 2021-02-11 at bc5c67f70f)
 + t5411: refactor check of refs using test_cmp_refs
 + t5411: use different out file to prevent overwriting

 Avoid individual tests in t5411 from getting affected by each other
 by forcing them to use separate output files during the test.

 Will merge to 'master'.


* jt/transfer-fsck-across-packs (2021-01-25) 5 commits
 - SQUASH??? test fix
 - fetch-pack: print and use dangling .gitmodules
 - fetch-pack: with packfile URIs, use index-pack arg
 - http-fetch: allow custom index-pack args
 - http: allow custom index-pack args

 The approach to "fsck" the incoming objects in "index-pack" is
 attractive for performance reasons (we have them already in core,
 inflated and ready to be inspected), but fundamentally cannot be
 applied fully when we receive more than one pack stream, as a tree
 object in one pack may refer to a blob object in another pack as
 ".gitmodules", when we want to inspect blobs that are used as
 ".gitmodules" file, for example.  Teach "index-pack" to emit
 objects that must be inspected later and check them in the calling
 "fetch-pack" process.

 Expecting an update.


* bc/signed-objects-with-both-hashes (2021-02-10) 6 commits
  (merged to 'next' on 2021-02-11 at 391cc85104)
 + gpg-interface: remove other signature headers before verifying
 + ref-filter: hoist signature parsing
 + commit: allow parsing arbitrary buffers with headers
 + gpg-interface: improve interface for parsing tags
 + commit: ignore additional signatures when parsing signed commits
 + ref-filter: switch some uses of unsigned long to size_t

 Signed commits and tags now allow verification of objects, whose
 two object names (one in SHA-1, the other in SHA-256) are both
 signed.

 Will merge to 'master'.


* ak/corrected-commit-date (2021-01-18) 11 commits
  (merged to 'next' on 2021-01-26 at deae33ec7d)
 + doc: add corrected commit date info
 + commit-reach: use corrected commit dates in paint_down_to_common()
 + commit-graph: use generation v2 only if entire chain does
 + commit-graph: implement generation data chunk
 + commit-graph: implement corrected commit date
 + commit-graph: return 64-bit generation number
 + commit-graph: add a slab to store topological levels
 + t6600-test-reach: generalize *_three_modes
 + commit-graph: consolidate fill_commit_graph_info
 + revision: parse parent in indegree_walk_step()
 + commit-graph: fix regression when computing Bloom filters
 (this branch is used by ds/chunked-file-api, ds/commit-graph-genno-fix and ds/merge-base-independent.)

 The commit-graph learned to use corrected commit dates instead of
 the generation number to help topological revision traversal.

 Will merge to 'master', together with "ds/commit-graph-genno-fix".


* mr/bisect-in-c-4 (2021-02-03) 7 commits
  (merged to 'next' on 2021-02-05 at ea18026619)
 + bisect--helper: retire `--check-and-set-terms` subcommand
 + bisect--helper: reimplement `bisect_skip` shell function in C
 + bisect--helper: retire `--bisect-auto-next` subcommand
 + bisect--helper: use `res` instead of return in BISECT_RESET case option
 + bisect--helper: retire `--bisect-write` subcommand
 + bisect--helper: reimplement `bisect_replay` shell function in C
 + bisect--helper: reimplement `bisect_log` shell function in C

 Piecemeal of rewrite of "git bisect" in C continues.

 Will merge to 'master'.


* jt/clone-unborn-head (2021-02-05) 3 commits
  (merged to 'next' on 2021-02-08 at 3ba9f80e7f)
 + clone: respect remote unborn HEAD
 + connect, transport: encapsulate arg in struct
 + ls-refs: report unborn targets of symrefs

 "git clone" tries to locally check out the branch pointed at by
 HEAD of the remote repository after it is done, but the protocol
 did not convey the information necessary to do so when copying an
 empty repository.  The protocol v2 learned how to do so.

 Will merge to 'master'.


* mt/parallel-checkout-part-1 (2020-12-16) 9 commits
 - entry: add checkout_entry_ca() taking preloaded conv_attrs
 - entry: move conv_attrs lookup up to checkout_entry()
 - entry: extract update_ce_after_write() from write_entry()
 - entry: make fstat_output() and read_blob_entry() public
 - entry: extract a header file for entry.c functions
 - convert: add classification for conv_attrs struct
 - convert: add get_stream_filter_ca() variant
 - convert: add [async_]convert_to_working_tree_ca() variants
 - convert: make convert_attrs() and convert structs public

 Parallel checkout.

 Looking good.


* es/config-hooks (2021-02-16) 17 commits
 - run-command: stop thinking about hooks
 - receive-pack: convert receive hooks to hook.h
 - post-update: use hook.h library
 - proc-receive: acquire hook list from hook.h
 - receive-pack: convert 'update' hook to hook.h
 - reference-transaction: look for hooks in config
 - transport: convert pre-push hook to use config
 - hook: convert 'post-rewrite' hook to config
 - hooks: convert 'post-checkout' hook to hook library
 - git-p4: use 'git hook' to run hooks
 - receive-pack: convert push-to-checkout hook to hook.h
 - read-cache: convert post-index-change hook to use config
 - rebase: teach pre-rebase to use hook.h
 - gc: use hook library for pre-auto-gc hook
 - merge: use config-based hooks for post-merge hook
 - am: convert applypatch hooks to use config
 - commit: use config-based hooks
 (this branch uses es/config-hooks-part-1.)

 The "hooks defined in config" topic.

 Expecting doc updates, but otherwise seems to be progressing nicely.


* hn/reftable (2020-12-21) 16 commits
 - SQUASH??? allow t0031 to run with any default branch name
 - Add "test-tool dump-reftable" command.
 - git-prompt: prepare for reftable refs backend
 - Reftable support for git-core
 - reftable: rest of library
 - reftable: reftable file level tests
 - reftable: read reftable files
 - reftable: write reftable files
 - reftable: a generic binary tree implementation
 - reftable: reading/writing blocks
 - reftable: (de)serialization for the polymorphic record type.
 - reftable: add blocksource, an abstraction for random access reads
 - reftable: utility functions
 - reftable: add error related functionality
 - reftable: add LICENSE
 - init-db: set the_repository->hash_algo early on

 The "reftable" backend for the refs API.

--------------------------------------------------
[Discarded]

* ds/update-index (2021-01-09) 14 commits
 . update-index: remove static globals from callbacks
 . update-index: reduce static globals, part 2
 . update-index: reduce static globals, part 1
 . update-index: remove ce_match_stat(), all macros
 . update-index: replace several compatibility macros
 . update-index: use add_index_entry()
 . update-index: use remove_file_from_index()
 . update-index: use index_name_pos() over cache_name_pos()
 . update-index: use istate->cache_changed
 . update-index: use istate->cache_nr over active_nr
 . update-index: use istate->cache over active_cache
 . update-index: drop the_index, the_repository
 . rm: remove compatilibity macros
 . mv: remove index compatibility macros
 (this branch uses ag/merge-strategies-in-c.)

 The implementation of a few commands lost reliance of "the_index"
 compatibility macros by explicitly passing the index_state through
 the callchain.

 Retracted for now.
 cf. <a6906459-3a93-ecad-c460-b6c763819389@gmail.com>


* fc/mergetool-automerge (2021-01-09) 8 commits
 . fixup! mergetool: break setup_tool out into separate initialization function
 . fixup! fixup! mergetool: add automerge configuration
 . fixup! mergetool: add automerge configuration
 . mergetool: add automerge_enabled tool-specific override function
 . mergetool: break setup_tool out into separate initialization function
 . mergetool: add per-tool support for the autoMerge flag
 . mergetool: alphabetize the mergetool config docs
 . mergetool: add automerge configuration

 "git mergetool" feeds three versions (base, local and remote) of
 a conflicted path unmodified.  The command learned to optionally
 prepare these files with unconflicted parts already resolved.

 Superseded by the sh/mergetool-hideresolved topic.


* mt/rm-sparse-checkout (2020-12-08) 11 commits
 . rm: honor sparse checkout patterns
 . t7817: do not depend on any specific default branch name
 . config: add setting to ignore sparsity patterns in some cmds
 . grep: honor sparse checkout patterns
 . config: correctly read worktree configs in submodules
 . config: make do_git_config_sequence receive a 'struct repository'
 . t/helper/test-config: unify exit labels
 . t/helper/test-config: diagnose missing arguments
 . t/helper/test-config: be consistent with exit codes
 . t1308-config-set: avoid false positives when using test-config
 . doc: grep: unify info on configuration variables

 "git rm" follows suit to "git grep" to ignore paths outside the
 sparsity pattern when the sparse checkout feature is in use.

 Discarded for now, as it depends on an old iteration of
 mt/grep-sparse-checkout topic.


* fc/bash-completion-post-2.29 (2020-12-23) 4 commits
 . completion: bash: add correct suffix in variables
 . completion: bash: fix for multiple dash commands
 . completion: bash: fix for suboptions with value
 . completion: bash: fix prefix detection in branch.*

 Stalled for too long with breakage.
 Seems to break tests on Windows


* ss/submodule-add-in-c (2020-12-15) 3 commits
 . t7400: add test to check 'submodule add' for tracked paths
 . submodule: port submodule subcommand 'add' from shell to C
 . dir: change the scope of function 'directory_exists_in_index()'

 "git submodule add" being rewritten in C.

 Stalled for too long with breakage.
 The patches are split incorrectly; part of 1/3 belongs to 2/3
 cf. <nycvar.QRO.7.76.6.2012190104140.56@tvgsbejvaqbjf.bet>
 It seems to introduce a segfault on 'seen'.
 cf. <xmqqft3xflw7.fsf@gitster.c.googlers.com>

^ permalink raw reply	[relevance 1%]

* [PATCH v2 0/1] blame: remove unnecessary use of get_commit_info()
  2021-02-16 16:31  7% [PATCH 0/1] blame: remove unnecessary use of get_commit_info() Rafael Silva
  2021-02-16 18:35  0% ` Derrick Stolee
@ 2021-02-17 14:54  6% ` Rafael Silva
  2021-02-17 14:54  6%   ` [PATCH v2 1/1] " Rafael Silva
  1 sibling, 1 reply; 162+ results
From: Rafael Silva @ 2021-02-17 14:54 UTC (permalink / raw)
  To: git
  Cc: Derrick Stolee, Taylor Blau, Stefan Beller, Junio C Hamano,
	Rafael Silva

Thanks Taylor, Derrick and Junio for reviewing v1. I've updated the
patch's message to include one of the performance reports that was
previously only on the cover-letter as suggested.

Rafael Silva (1):
  blame: remove unnecessary use of get_commit_info()

 builtin/blame.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

Range-diff against v1:
1:  e0c698370e ! 1:  4d70ce9545 blame: remove unnecessary use of get_commit_info()
    @@ Commit message
         structure and remove the internal call to get_commit_info() thus
         cleaning up and optimizing the code path.
     
    +    Enabling Git's trace2 API in order to record the execution time for
    +    every call to determine_line_heat() function:
    +
    +       + trace2_region_enter("blame", "determine_line_heat", the_repository);
    +         determine_line_heat(ent, &default_color);
    +       + trace2_region_enter("blame", "determine_line_heat", the_repository);
    +
    +    Then, running `git blame` for "kernel/fork.c" in linux.git and summing
    +    all the execution time for every call (around 1.3k calls) resulted in
    +    2.6x faster execution (best out 3):
    +
    +       git built from 328c109303 (The eighth batch, 2021-02-12) = 42ms
    +       git built from 328c109303 + this change                  = 16ms
    +
         Signed-off-by: Rafael Silva <rafaeloliveira.cs@gmail.com>
     
      ## builtin/blame.c ##
-- 
2.30.1.850.g2d41e9e789


^ permalink raw reply	[relevance 6%]

* [PATCH v2 1/1] blame: remove unnecessary use of get_commit_info()
  2021-02-17 14:54  6% ` [PATCH v2 " Rafael Silva
@ 2021-02-17 14:54  6%   ` Rafael Silva
  0 siblings, 0 replies; 162+ results
From: Rafael Silva @ 2021-02-17 14:54 UTC (permalink / raw)
  To: git
  Cc: Derrick Stolee, Taylor Blau, Stefan Beller, Junio C Hamano,
	Rafael Silva

When `git blame --color-by-age`, the determine_line_heat() is called to
select how to color the output based on the commit's author date.  It
uses the get_commit_info() to parse the information into a `commit_info`
structure, however, this is actually unnecessary because the
determine_line_heat() caller also does the same.

Instead, let's change the determine_line_heat() to take a `commit_info`
structure and remove the internal call to get_commit_info() thus
cleaning up and optimizing the code path.

Enabling Git's trace2 API in order to record the execution time for
every call to determine_line_heat() function:

   + trace2_region_enter("blame", "determine_line_heat", the_repository);
     determine_line_heat(ent, &default_color);
   + trace2_region_enter("blame", "determine_line_heat", the_repository);

Then, running `git blame` for "kernel/fork.c" in linux.git and summing
all the execution time for every call (around 1.3k calls) resulted in
2.6x faster execution (best out 3):

   git built from 328c109303 (The eighth batch, 2021-02-12) = 42ms
   git built from 328c109303 + this change                  = 16ms

Signed-off-by: Rafael Silva <rafaeloliveira.cs@gmail.com>
---
 builtin/blame.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/builtin/blame.c b/builtin/blame.c
index b66e938022..641523ff9a 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -425,13 +425,11 @@ static void setup_default_color_by_age(void)
 	parse_color_fields("blue,12 month ago,white,1 month ago,red");
 }
 
-static void determine_line_heat(struct blame_entry *ent, const char **dest_color)
+static void determine_line_heat(struct commit_info *ci, const char **dest_color)
 {
 	int i = 0;
-	struct commit_info ci;
-	get_commit_info(ent->suspect->commit, &ci, 1);
 
-	while (i < colorfield_nr && ci.author_time > colorfield[i].hop)
+	while (i < colorfield_nr && ci->author_time > colorfield[i].hop)
 		i++;
 
 	*dest_color = colorfield[i].col;
@@ -453,7 +451,7 @@ static void emit_other(struct blame_scoreboard *sb, struct blame_entry *ent, int
 	cp = blame_nth_line(sb, ent->lno);
 
 	if (opt & OUTPUT_SHOW_AGE_WITH_COLOR) {
-		determine_line_heat(ent, &default_color);
+		determine_line_heat(&ci, &default_color);
 		color = default_color;
 		reset = GIT_COLOR_RESET;
 	}
-- 
2.30.1.850.g2d41e9e789


^ permalink raw reply related	[relevance 6%]

* Re: [PATCH] t/perf: handle worktrees as test repos
  2021-02-16 20:12  4% [PATCH] t/perf: handle worktrees as test repos Jeff King
@ 2021-02-16 21:13  0% ` Johannes Schindelin
  0 siblings, 0 replies; 162+ results
From: Johannes Schindelin @ 2021-02-16 21:13 UTC (permalink / raw)
  To: Jeff King; +Cc: git, Derrick Stolee

Hi Peff,

On Tue, 16 Feb 2021, Jeff King wrote:

> The perf suite gets confused when test_perf_default_repo is pointed at a
> worktree (which includes when it is run from within a worktree at all,
> since the default is to use the current repository).
>
> Here's an example:
>
>   $ git worktree add ~/foo
>   Preparing worktree (new branch 'foo')
>   HEAD is now at 328c109303 The eighth batch
>   $ cd ~/foo
>   $ make
>   [...build output...]
>   $ cd t/perf
>   $ ./p0000-perf-lib-sanity.sh -v -i
>   [...]
>   perf 1 - test_perf_default_repo works:
>   running:
>   	foo=$(git rev-parse HEAD) &&
>   	test_export foo
>
>   fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
>   Use '--' to separate paths from revisions, like this:
>   'git <command> [<revision>...] -- [<file>...]'
>
> The problem is that we didn't copy all of the necessary files from the
> source repository (in this case we got HEAD, but we have no refs!). We
> discover the git-dir with "rev-parse --git-dir", but this points to the
> worktree's partial repository in .../.git/worktrees/foo.
>
> That partial repository has a "commondir" file which points to the main
> repository, where the actual refs are stored, but we don't copy it. This
> is the correct thing to do, though! If we did copy it, then our scratch
> test repo would be pointing back to the original main repo, and any ref
> updates we made in the tests would impact that original repo.
>
> Instead, we need to either:
>
>   1. Make a scratch copy of the original main repo (in addition to the
>      worktree repo), and point the scratch worktree repo's commondir at
>      it. This preserves the original relationship, but it's doubtful any
>      script really cares (if they are testing worktree performance,
>      they'd probably make their own worktrees). And it's trickier to get
>      right.
>
>   2. Collapse the main and worktree repos into a single scratch repo.
>      This can be done by copying everything from both, preferring any
>      files from the worktree repo.
>
> This patch does the second one. With this applied, the example above
> results in p0000 running successfully.
>
> Reported-by: Derrick Stolee <dstolee@microsoft.com>
> Signed-off-by: Jeff King <peff@peff.net>
> ---

I think you'll also need the equivalent of:

-- snip --
diff --git a/t/perf/perf-lib.sh b/t/perf/perf-lib.sh
index 22d727cef83..0949c360ec4 100644
--- a/t/perf/perf-lib.sh
+++ b/t/perf/perf-lib.sh
@@ -84,7 +84,7 @@ test_perf_create_repo_from () {
 			cp -R "$objects_dir" "$repo/.git/"; } &&
 		for stuff in "$source_git"/*; do
 			case "$stuff" in
-				*/objects|*/hooks|*/config|*/commondir)
+				*/objects|*/hooks|*/config|*/commondir|*/gitdir)
 					;;
 				*)
 					cp -R "$stuff" "$repo/.git/" || exit 1
-- snap --

> Having written that, it occurs to me that an even simpler solution is to
> just always use the commondir as the source of the scratch repo. It does
> not produce the same outcome, but the point is generally just to find a
> suitable starting point for a repository. Grabbing the main repo instead
> of one of its worktrees is probably OK for most tests.

Good point: we probably also need to exclude `*/worktrees/*`, but that is
a bit trickier as we would not want to exclude, say,
`refs/heads/worktrees/cleanup`.

Ciao,
Dscho

>
>  t/perf/perf-lib.sh | 31 ++++++++++++++++++++++---------
>  1 file changed, 22 insertions(+), 9 deletions(-)
>
> diff --git a/t/perf/perf-lib.sh b/t/perf/perf-lib.sh
> index e385c6896f..1226be4005 100644
> --- a/t/perf/perf-lib.sh
> +++ b/t/perf/perf-lib.sh
> @@ -70,27 +70,40 @@ test_perf_do_repo_symlink_config_ () {
>  	test_have_prereq SYMLINKS || git config core.symlinks false
>  }
>
> +test_perf_copy_repo_contents () {
> +	for stuff in "$1"/*
> +	do
> +		case "$stuff" in
> +		*/objects|*/hooks|*/config|*/commondir)
> +			;;
> +		*)
> +			cp -R "$stuff" "$repo/.git/" || exit 1
> +			;;
> +		esac
> +	done
> +}
> +
>  test_perf_create_repo_from () {
>  	test "$#" = 2 ||
>  	BUG "not 2 parameters to test-create-repo"
>  	repo="$1"
>  	source="$2"
>  	source_git="$("$MODERN_GIT" -C "$source" rev-parse --git-dir)"
>  	objects_dir="$("$MODERN_GIT" -C "$source" rev-parse --git-path objects)"
> +	common_dir="$("$MODERN_GIT" -C "$source" rev-parse --git-common-dir)"
>  	mkdir -p "$repo/.git"
>  	(
>  		cd "$source" &&
>  		{ cp -Rl "$objects_dir" "$repo/.git/" 2>/dev/null ||
>  			cp -R "$objects_dir" "$repo/.git/"; } &&
> -		for stuff in "$source_git"/*; do
> -			case "$stuff" in
> -				*/objects|*/hooks|*/config|*/commondir)
> -					;;
> -				*)
> -					cp -R "$stuff" "$repo/.git/" || exit 1
> -					;;
> -			esac
> -		done
> +
> +		# common_dir must come first here, since we want source_git to
> +		# take precedence and overwrite any overlapping files
> +		test_perf_copy_repo_contents "$common_dir"
> +		if test "$source_git" != "$common_dir"
> +		then
> +			test_perf_copy_repo_contents "$source_git"
> +		fi
>  	) &&
>  	(
>  		cd "$repo" &&
> --
> 2.30.1.989.g5e01c2f281
>
>

^ permalink raw reply related	[relevance 0%]

* [PATCH] t/perf: handle worktrees as test repos
@ 2021-02-16 20:12  4% Jeff King
  2021-02-16 21:13  0% ` Johannes Schindelin
  0 siblings, 1 reply; 162+ results
From: Jeff King @ 2021-02-16 20:12 UTC (permalink / raw)
  To: git; +Cc: Derrick Stolee

The perf suite gets confused when test_perf_default_repo is pointed at a
worktree (which includes when it is run from within a worktree at all,
since the default is to use the current repository).

Here's an example:

  $ git worktree add ~/foo
  Preparing worktree (new branch 'foo')
  HEAD is now at 328c109303 The eighth batch
  $ cd ~/foo
  $ make
  [...build output...]
  $ cd t/perf
  $ ./p0000-perf-lib-sanity.sh -v -i
  [...]
  perf 1 - test_perf_default_repo works:
  running:
  	foo=$(git rev-parse HEAD) &&
  	test_export foo

  fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
  Use '--' to separate paths from revisions, like this:
  'git <command> [<revision>...] -- [<file>...]'

The problem is that we didn't copy all of the necessary files from the
source repository (in this case we got HEAD, but we have no refs!). We
discover the git-dir with "rev-parse --git-dir", but this points to the
worktree's partial repository in .../.git/worktrees/foo.

That partial repository has a "commondir" file which points to the main
repository, where the actual refs are stored, but we don't copy it. This
is the correct thing to do, though! If we did copy it, then our scratch
test repo would be pointing back to the original main repo, and any ref
updates we made in the tests would impact that original repo.

Instead, we need to either:

  1. Make a scratch copy of the original main repo (in addition to the
     worktree repo), and point the scratch worktree repo's commondir at
     it. This preserves the original relationship, but it's doubtful any
     script really cares (if they are testing worktree performance,
     they'd probably make their own worktrees). And it's trickier to get
     right.

  2. Collapse the main and worktree repos into a single scratch repo.
     This can be done by copying everything from both, preferring any
     files from the worktree repo.

This patch does the second one. With this applied, the example above
results in p0000 running successfully.

Reported-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Jeff King <peff@peff.net>
---
Having written that, it occurs to me that an even simpler solution is to
just always use the commondir as the source of the scratch repo. It does
not produce the same outcome, but the point is generally just to find a
suitable starting point for a repository. Grabbing the main repo instead
of one of its worktrees is probably OK for most tests.

 t/perf/perf-lib.sh | 31 ++++++++++++++++++++++---------
 1 file changed, 22 insertions(+), 9 deletions(-)

diff --git a/t/perf/perf-lib.sh b/t/perf/perf-lib.sh
index e385c6896f..1226be4005 100644
--- a/t/perf/perf-lib.sh
+++ b/t/perf/perf-lib.sh
@@ -70,27 +70,40 @@ test_perf_do_repo_symlink_config_ () {
 	test_have_prereq SYMLINKS || git config core.symlinks false
 }
 
+test_perf_copy_repo_contents () {
+	for stuff in "$1"/*
+	do
+		case "$stuff" in
+		*/objects|*/hooks|*/config|*/commondir)
+			;;
+		*)
+			cp -R "$stuff" "$repo/.git/" || exit 1
+			;;
+		esac
+	done
+}
+
 test_perf_create_repo_from () {
 	test "$#" = 2 ||
 	BUG "not 2 parameters to test-create-repo"
 	repo="$1"
 	source="$2"
 	source_git="$("$MODERN_GIT" -C "$source" rev-parse --git-dir)"
 	objects_dir="$("$MODERN_GIT" -C "$source" rev-parse --git-path objects)"
+	common_dir="$("$MODERN_GIT" -C "$source" rev-parse --git-common-dir)"
 	mkdir -p "$repo/.git"
 	(
 		cd "$source" &&
 		{ cp -Rl "$objects_dir" "$repo/.git/" 2>/dev/null ||
 			cp -R "$objects_dir" "$repo/.git/"; } &&
-		for stuff in "$source_git"/*; do
-			case "$stuff" in
-				*/objects|*/hooks|*/config|*/commondir)
-					;;
-				*)
-					cp -R "$stuff" "$repo/.git/" || exit 1
-					;;
-			esac
-		done
+
+		# common_dir must come first here, since we want source_git to
+		# take precedence and overwrite any overlapping files
+		test_perf_copy_repo_contents "$common_dir"
+		if test "$source_git" != "$common_dir"
+		then
+			test_perf_copy_repo_contents "$source_git"
+		fi
 	) &&
 	(
 		cd "$repo" &&
-- 
2.30.1.989.g5e01c2f281

^ permalink raw reply related	[relevance 4%]

* Re: [PATCH 0/1] blame: remove unnecessary use of get_commit_info()
  2021-02-16 16:31  7% [PATCH 0/1] blame: remove unnecessary use of get_commit_info() Rafael Silva
@ 2021-02-16 18:35  0% ` Derrick Stolee
  2021-02-17 14:54  6% ` [PATCH v2 " Rafael Silva
  1 sibling, 0 replies; 162+ results
From: Derrick Stolee @ 2021-02-16 18:35 UTC (permalink / raw)
  To: Rafael Silva, git; +Cc: Stefan Beller, Junio C Hamano

On 2/16/2021 11:31 AM, Rafael Silva wrote:
> Running Git PERF suite in linux.git, I've got a subtle performance
> improvement for some runs:
> 
> 	# git.328c109303 - compiled git from commit 328c109303
> 	# git.blame-patched - compiled git from commit 328c109303 + this patch
>         Test                                          git.328c109303    git.blame-patched
>         -------------------------------------------------------------------------------------
>         blame --color-by-age kernel/fork.c            1.96(1.81+0.15)   1.95(1.80+0.14) -0.5%
>         blame --color-by-age kernel/sys.c             1.67(1.53+0.13)   1.66(1.52+0.14) -0.6%
>         blame --color-by-age mm/slab.c                2.16(2.00+0.16)   2.15(1.99+0.15) -0.5%
>         blame --color-by-age lib/packing.c            0.20(0.14+0.05)   0.20(0.14+0.05) +0.0%
>         blame --color-by-age drivers/cdrom/cdrom.c    1.62(1.46+0.15)   1.62(1.46+0.15) +0.0%
>         blame --color-by-age crypto/crypto_engine.c   0.37(0.29+0.06)   0.36(0.28+0.06) -2.7%
>         blame --color-by-age net/ipv4/ip_forward.c    1.49(1.35+0.13)   1.48(1.34+0.13) -0.7%

Have you updated the commit-graph with changed-path Bloom filters in
your copy of linux.git before running the perf tests? You might get
smaller numbers overall (both sides) but make the difference for this
patch be more pronounced:

	git commit-graph write --reachable --changed-paths

> To dig a little deeper, I enabled the Git's trace2 API to record every
> call to the determine_line_heat() function:
> 
>         ...
> +       trace2_region_enter("blame", "determine_line_heat", the_repository);
>         determine_line_heat(ent, &default_color);
> +       trace2_region_enter("blame", "determine_line_heat", the_repository);
>         ...
> 
> Then, running `blame` for "kernel/fork.c` and _summing_ all the execution
> time for every call (around 1.3k calls) resulted in 2.6x faster execution
> (best out 3):
> 
> 	git built from 328c109303 (The eighth batch, 2021-02-12) = 42ms
> 	git built from 328c109303 + this patch                   = 16ms

This is a good way to demonstrate the change. Definitely worthwhile for
demonstrating the value of the patch. I'll second Taylor's request that
this performance data goes in the commit message so we can see the details
in the future.

Thanks,
-Stolee

^ permalink raw reply	[relevance 0%]

* [PATCH 0/1] blame: remove unnecessary use of get_commit_info()
@ 2021-02-16 16:31  7% Rafael Silva
  2021-02-16 18:35  0% ` Derrick Stolee
  2021-02-17 14:54  6% ` [PATCH v2 " Rafael Silva
  0 siblings, 2 replies; 162+ results
From: Rafael Silva @ 2021-02-16 16:31 UTC (permalink / raw)
  To: git; +Cc: Stefan Beller, Junio C Hamano, Rafael Silva

This patch is a code cleanup and consequently a micro optimization in
determine_heat_line().

When `blame`ing with --color-by-age, the determine_line_heat() calls the
get_commit_info() to parse the commit's information.  However, it turns
out this is actually unnecessary because its caller also does the same.
We can instead, pass the already parsed `commit_info` and remove the
internal call to get_commit_info().

The performance optimization made by this patch is relatively small as
get_commit_info() doesn't perform any heavy-load operations. So, the
performance improvements is not that exciting, not at least until you
enter the ms/μs realm.  Nevertheless I thought the code cleanup is
still valid and the optimization is a bonus.


  ... digging into the the performance improvements, for those 
      who are curious ...

Running Git PERF suite in linux.git, I've got a subtle performance
improvement for some runs:

	# git.328c109303 - compiled git from commit 328c109303
	# git.blame-patched - compiled git from commit 328c109303 + this patch
        Test                                          git.328c109303    git.blame-patched
        -------------------------------------------------------------------------------------
        blame --color-by-age kernel/fork.c            1.96(1.81+0.15)   1.95(1.80+0.14) -0.5%
        blame --color-by-age kernel/sys.c             1.67(1.53+0.13)   1.66(1.52+0.14) -0.6%
        blame --color-by-age mm/slab.c                2.16(2.00+0.16)   2.15(1.99+0.15) -0.5%
        blame --color-by-age lib/packing.c            0.20(0.14+0.05)   0.20(0.14+0.05) +0.0%
        blame --color-by-age drivers/cdrom/cdrom.c    1.62(1.46+0.15)   1.62(1.46+0.15) +0.0%
        blame --color-by-age crypto/crypto_engine.c   0.37(0.29+0.06)   0.36(0.28+0.06) -2.7%
        blame --color-by-age net/ipv4/ip_forward.c    1.49(1.35+0.13)   1.48(1.34+0.13) -0.7%

To dig a little deeper, I enabled the Git's trace2 API to record every
call to the determine_line_heat() function:

        ...
+       trace2_region_enter("blame", "determine_line_heat", the_repository);
        determine_line_heat(ent, &default_color);
+       trace2_region_enter("blame", "determine_line_heat", the_repository);
        ...

Then, running `blame` for "kernel/fork.c` and _summing_ all the execution
time for every call (around 1.3k calls) resulted in 2.6x faster execution
(best out 3):

	git built from 328c109303 (The eighth batch, 2021-02-12) = 42ms
	git built from 328c109303 + this patch                   = 16ms

Of course, this is on the milliseconds :).

Lastly, to get a better picture of the performance change, I computed
all the determine_line_heat()'s execution time, for all 3 calls, into
a distribution graph.  The execution time is converted to microseconds
for ease of understanding:

        # git built from 328c109303 (The eighth batch, 2021-02-12)
     	Time in μs     0.0 ~  9.0  |
     	Time in μs    10.0 ~ 19.0  | *
     	Time in μs    20.0 ~ 29.0  | *****************
    	Time in μs    30.0 ~ 39.0  | *****************
     	Time in μs    40.0 ~ 49.0  | **
     	Time in μs    50.0 ~ 59.0  | *
     	Time in μs    60.0 ~ 69.0  | *
     	Time in μs    70.0 ~ 79.0  | *
     	Time in μs    80.0 ~ 89.0  | *
     	Time in μs    90.0 ~ 99.0  | *
     	Time in μs   100.0 ~ 109.0 | *
     	Time in μs   110.0 ~ 119.0 | *
     	Time in μs   120.0 ~ 129.0 |
     	Time in μs   130.0 ~ 139.0 | *
     	[N: 3915 | Median: 30.0 | Min: 19.0 | Max: 137.0]

     	# git built from 328c109303 + this patch
     	Time in μs     0.0 ~  9.0  |
     	Time in μs    10.0 ~ 19.0  | *************************************
     	Time in μs    20.0 ~ 29.0  | *
     	Time in μs    30.0 ~ 39.0  | *
     	Time in μs    40.0 ~ 49.0  | *
     	Time in μs    50.0 ~ 59.0  | *
     	Time in μs    60.0 ~ 69.0  | *
     	Time in μs    70.0 ~ 79.0  | *
     	Time in μs    80.0 ~ 89.0  | *
     	Time in μs    90.0 ~ 99.0  |
	        ... [ zero's omitted ] ...
     	Time in μs   150.0 ~ 159.0 |
     	Time in μs   160.0 ~ 169.0 | *
     	[N: 3915 | Median: 12.0 | Min: 10.0 | Max: 167.0]

	Note: A "*" represent hundreds counter. One "*" is used
	for any count between 1 and 99. (i.e: 23 = "*", 99 = "*",
	100 = "**", 199 = "**", 200 = "***", etc).

With the changes introduced by this patch, the determine_line_heat()
mostly finishes its execution between 10μs and 19μs compared with the
current implementation that mostly finished around 20μs and 39μs.

Rafael Silva (1):
  blame: remove unnecessary use of get_commit_info()

 builtin/blame.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

-- 
2.30.1.842.gf6373b1729

^ permalink raw reply	[relevance 7%]

* [ANNOUNCE] Git v2.30.0
@ 2020-12-28 19:09  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2020-12-28 19:09 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

The latest feature release Git v2.30.0 is now available at the
usual places.  It comprises 495 non-merge commits since
v2.29.0, contributed by 83 people, 29 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.30.0'
tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose patches weren't in v2.29.0 are as follows.
Welcome to the Git development community!

  Alexey, Amanda Shafack, Arusekk, Baptiste Fontaine, Bradley
  M. Kuhn, Caleb Tillman, Charvi Mendiratta, Daniel Duvall,
  Daniel Gurney, Dennis Ameling, Javier Spagnoletti, Jinoh Kang,
  Joey Salazar, Konrad Borowski, m4sk1n, Marlon Rac Cambasis,
  Martin Schön, Michał Kępień, Nate Avers, Nipunn Koorapati,
  Rafael Silva, Robert Karszniewicz, Samuel Čavoj, Sean Barag,
  Sibo Dong, Simão Afonso, Sohom Datta, Thomas Koutcher, and
  Victor Engmark.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Spiers, Ævar Arnfjörð Bjarmason, Alexander Shopov, Alex
  Vandiver, Arnout Engelen, brian m. carlson, Christian Couder,
  Chris. Webster, David Aguilar, Denton Liu, Derrick Stolee,
  Dimitriy Ryazantcev, Đoàn Trần Công Danh, Drew DeVault,
  Elijah Newren, Emily Shaffer, Emir Sarı, Eric Sunshine, Felipe
  Contreras, Han-Wen Nienhuys, Jean-Noël Avila, Jeff Hostetler,
  Jeff King, Jiang Xin, Johannes Berg, Johannes Schindelin,
  Jonathan Tan, Jordi Mas, Josh Steadmon, Junio C Hamano,
  Kyle Meyer, Martin Ågren, Matheus Tavares, Matthias Rüster,
  Nicolas Morey-Chaisemartin, Patrick Steinhardt, Peter Kaestle,
  Peter Krefting, Philippe Blain, Phillip Wood, Pranit Bauva,
  Pratyush Yadav, Ramsay Jones, Randall S. Becker, René Scharfe,
  Sergey Organov, Serg Tereshchenko, Srinidhi Kaushik, Stefan
  Haller, Štěpán Němec, SZEDER Gábor, Taylor Blau, Trần
  Ngọc Quân, and Yi-Jyun Pan.

----------------------------------------------------------------

Git 2.30 Release Notes
======================

Updates since v2.29
-------------------

UI, Workflows & Features

 * Userdiff for PHP update.

 * Userdiff for Rust update.

 * Userdiff for CSS update.

 * The command line completion script (in contrib/) learned that "git
   stash show" takes the options "git diff" takes.

 * "git worktree list" now shows if each worktree is locked.  This
   possibly may open us to show other kinds of states in the future.

 * "git maintenance", an extended big brother of "git gc", continues
   to evolve.

 * "git push --force-with-lease[=<ref>]" can easily be misused to lose
   commits unless the user takes good care of their own "git fetch".
   A new option "--force-if-includes" attempts to ensure that what is
   being force-pushed was created after examining the commit at the
   tip of the remote ref that is about to be force-replaced.

 * "git clone" learned clone.defaultremotename configuration variable
   to customize what nickname to use to call the remote the repository
   was cloned from.

 * "git checkout" learned to use checkout.guess configuration variable
   and enable/disable its "--[no-]guess" option accordingly.

 * "git resurrect" script (in contrib/) learned that the object names
   may be longer than 40-hex depending on the hash function in use.

 * "git diff A...B" learned "git diff --merge-base A B", which is a
   longer short-hand to say the same thing.

 * A sample 'push-to-checkout' hook, that performs the same as
   what the built-in default action does, has been added.

 * "git diff" family of commands learned the "-I<regex>" option to
   ignore hunks whose changed lines all match the given pattern.

 * The userdiff pattern learned to identify the function definition in
   POSIX shells and bash.

 * "git checkout-index" did not consistently signal an error with its
   exit status, but now it does.

 * A commit and tag object may have CR at the end of each and
   every line (you can create such an object with hash-object or
   using --cleanup=verbatim to decline the default clean-up
   action), but it would make it impossible to have a blank line
   to separate the title from the body of the message.  We are now
   more lenient and accept a line with lone CR on it as a blank line,
   too.

 * Exit codes from "git remote add" etc. were not usable by scripted
   callers, but now they are.

 * "git archive" now allows compression level higher than "-9"
   when generating tar.gz output.

 * Zsh autocompletion (in contrib/) update.

 * The maximum length of output filenames "git format-patch" creates
   has become configurable (used to be capped at 64).

 * "git rev-parse" learned the "--end-of-options" to help scripts to
   safely take a parameter that is supposed to be a revision, e.g.
   "git rev-parse --verify -q --end-of-options $rev".

 * The command line completion script (in contrib/) learned to expand
   commands that are alias of alias.

 * "git update-ref --stdin" learns to take multiple transactions in a
   single session.

 * Various subcommands of "git config" that take value_regex
   learned the "--literal-value" option to take the value_regex option
   as a literal string.

 * The transport layer was taught to optionally exchange the session
   ID assigned by the trace2 subsystem during fetch/push transactions.

 * "git imap-send" used to ignore configuration variables like
   core.askpass; this has been corrected.

 * "git $cmd $args", when $cmd is not a recognised subcommand, by
   default tries to see if $cmd is a typo of an existing subcommand
   and optionally executes the corrected command if there is only one
   possibility, depending on the setting of help.autocorrect; the
   users can now disable the whole thing, including the cycles spent
   to find a likely typo, by setting the configuration variable to
   'never'.

 * "@" sometimes worked (e.g. "git push origin @:there") as a part of
   a refspec element, but "git push origin @" did not work, which has
   been corrected.


Performance, Internal Implementation, Development Support etc.

 * Use "git archive" more to produce the release tarball.

 * GitHub Actions automated test improvement to skip tests on a tree
   identical to what has already been tested.

 * Test-coverage for running commit-graph task "git maintenance" has
   been extended.

 * Our test scripts can be told to run only individual pieces while
   skipping others with the "--run=..." option; they were taught to
   take a substring of test title, in addition to numbers, to name the
   test pieces to run.

 * Adjust tests so that they won't scream when the default initial
   branch name is different from 'master'.

 * Rewriting "git bisect" in C continues.

 * More preliminary tests have been added to document desired outcomes
   of various "directory rename" situations.

 * Micro clean-up of a couple of test scripts.

 * "git diff" and other commands that share the same machinery to
   compare with working tree files have been taught to take advantage
   of the fsmonitor data when available.

 * The code to detect premature EOF in the sideband demultiplexer has
   been cleaned up.

 * "git fetch --depth=<n>" over the stateless RPC / smart HTTP
   transport handled EOF from the client poorly at the server end.

 * A specialization of hashmap that uses a string as key has been
   introduced.  Hopefully it will see wider use over time.

 * "git bisect start/next" in a large span of history spends a lot of
   time trying to come up with exactly the half-way point; this can be
   optimized by stopping when we see a commit that is close enough to
   the half-way point.

 * A lazily defined test prerequisite can now be defined in terms of
   another lazily defined test prerequisite.

 * Expectation for the original contributor after responding to a
   review comment to use the explanation in a patch update has been
   described.

 * Multiple "credential-store" backends can race to lock the same
   file, causing everybody else but one to fail---reattempt locking
   with some timeout to reduce the rate of the failure.

 * "git-parse-remote" shell script library outlived its usefulness.

 * Like die() and error(), a call to warning() will also trigger a
   trace2 event.

 * Use of non-reentrant localtime() has been removed.

 * Non-reentrant time-related library functions and ctime/asctime with
   awkward calling interfaces are banned from the codebase.


Fixes since v2.29
-----------------

 * In 2.29, "--committer-date-is-author-date" option of "rebase" and
   "am" subcommands lost the e-mail address by mistake, which has been
   corrected.
   (merge 5f35edd9d7 jk/committer-date-is-author-date-fix later to maint).

 * "git checkout -p A...B [-- <path>]" did not work, even though the
   same command without "-p" correctly used the merge-base between
   commits A and B.
   (merge 35166b1fb5 dl/checkout-p-merge-base later to maint).

 * The side-band status report can be sent at the same time as the
   primary payload multiplexed, but the demultiplexer on the receiving
   end incorrectly split a single status report into two, which has
   been corrected.
   (merge 712b0377db js/avoid-split-sideband-message later to maint).

 * "git fast-import" wasted a lot of memory when many marks were in use.
   (merge 3f018ec716 jk/fast-import-marks-alloc-fix later to maint).

 * A test helper "test_cmp A B" was taught to diagnose missing files A
   or B as a bug in test, but some tests legitimately wanted to notice
   a failure to even create file B as an error, in addition to leaving
   the expected result in it, and were misdiagnosed as a bug.  This
   has been corrected.
   (merge 262d5ad5a5 es/test-cmp-typocatcher later to maint).

 * When "git commit-graph" detects the same commit recorded more than
   once while it is merging the layers, it used to die.  The code now
   ignores all but one of them and continues.
   (merge 85102ac71b ds/commit-graph-merging-fix later to maint).

 * The meaning of a Signed-off-by trailer can vary from project to
   project; this and also what it means to this project has been
   clarified in the documentation.
   (merge 3abd4a67d9 bk/sob-dco later to maint).

 * "git credential' didn't honor the core.askPass configuration
   variable (among other things), which has been corrected.
   (merge 567ad2c0f9 tk/credential-config later to maint).

 * Dev support to catch a tentative definition of a variable in our C
   code as an error.
   (merge 5539183622 jk/no-common later to maint).

 * "git rebase --rebase-merges" did not correctly pass --gpg-sign
   command line option to underlying "git merge" when replaying a merge
   using non-default merge strategy or when replaying an octopus merge
   (because replaying a two-head merge with the default strategy was
   done in a separate codepath, the problem did not trigger for most
   users), which has been corrected.
   (merge 43ad4f2eca sc/sequencer-gpg-octopus later to maint).

 * "git apply -R" did not handle patches that touch the same path
   twice correctly, which has been corrected.  This is most relevant
   in a patch that changes a path from a regular file to a symbolic
   link (and vice versa).
   (merge b0f266de11 jt/apply-reverse-twice later to maint).

 * A recent oid->hash conversion missed one spot, breaking "git svn".
   (merge 03bb366de4 bc/svn-hash-oid-fix later to maint).

 * The documentation on the "--abbrev=<n>" option did not say the
   output may be longer than "<n>" hexdigits, which has been
   clarified.
   (merge cda34e0d0c jc/abbrev-doc later to maint).

 * "git p4" now honors init.defaultBranch configuration.
   (merge 1b09d1917f js/p4-default-branch later to maint).

 * Recently the format of an internal state file "rebase -i" uses has
   been tightened up for consistency, which would hurt those who start
   "rebase -i" with old git and then continue with new git.  Loosen
   the reader side a bit (which we may want to tighten again in a year
   or so).
   (merge c779386182 jc/sequencer-stopped-sha-simplify later to maint).

 * The code to see if "git stash drop" can safely remove refs/stash
   has been made more careful.
   (merge 4f44c5659b rs/empty-reflog-check-fix later to maint).

 * "git log -L<range>:<path>" is documented to take no pathspec, but
   this was not enforced by the command line option parser, which has
   been corrected.
   (merge 39664cb0ac jc/line-log-takes-no-pathspec later to maint).

 * "git format-patch --output=there" did not work as expected and
   instead crashed.  The option is now supported.
   (merge dc1672dd10 jk/format-patch-output later to maint).

 * Define ARM64 compiled with MSVC to be little-endian.
   (merge 0c038fc65a dg/bswap-msvc later to maint).

 * "git rebase -i" did not store ORIG_HEAD correctly.
   (merge 8843302307 pw/rebase-i-orig-head later to maint).

 * "git blame -L :funcname -- path" did not work well for a path for
   which a userdiff driver is defined.

 * "make DEVELOPER=1 sparse" used to run sparse and let it emit
   warnings; now such warnings will cause an error.
   (merge 521dc56270 jc/sparse-error-for-developer-build later to maint).

 * "git blame --ignore-revs-file=<file>" learned to ignore a
   non-existent object name in the input, instead of complaining.
   (merge c714d05875 jc/blame-ignore-fix later to maint).

 * Running "git diff" while allowing external diff in a state with
   unmerged paths used to segfault, which has been corrected.
   (merge d66851806f jk/diff-release-filespec-fix later to maint).

 * Build configuration cleanup.
   (merge b990f02fd8 ab/config-mak-uname-simplify later to maint).

 * Fix regression introduced when nvimdiff support in mergetool was added.
   (merge 12026f46e7 pd/mergetool-nvimdiff later to maint).

 * The exchange between receive-pack and proc-receive hook did not
   carefully check for errors.

 * The code was not prepared to deal with pack .idx file that is
   larger than 4GB.
   (merge 81c4c5cf2e jk/4gb-idx later to maint).

 * Since jgit does not yet work with SHA-256 repositories, mark the
   tests that use it not to run unless we are testing with ShA-1
   repositories.
   (merge ea699b4adc sg/t5310-jgit-wants-sha1 later to maint).

 * Config parser fix for "git notes".
   (merge 45fef1599a na/notes-displayref-is-not-boolean later to maint).

 * Move a definition of compatibility wrapper from cache.h to
   git-compat-util.h
   (merge a76b138daa hn/sleep-millisec-decl later to maint).

 * Error message fix.
   (merge eaf5341538 km/stash-error-message-fix later to maint).

 * "git pull --rebase --recurse-submodules" checked for local changes
   in a wrong range and failed to run correctly when it should.
   (merge 5176f20ffe pb/pull-rebase-recurse-submodules later to maint).

 * "git push" that is killed may leave a pack-objects process behind,
   still computing to find a good compression, wasting cycles.  This
   has been corrected.
   (merge 8b59935114 jk/stop-pack-objects-when-push-is-killed later to maint).

 * "git fetch" that is killed may leave a pack-objects process behind,
   still computing to find a good compression, wasting cycles.  This
   has been corrected.
   (merge 309a4028e7 jk/stop-pack-objects-when-fetch-is-killed later to maint).

 * "git add -i" failed to honor custom colors configured to show
   patches, which has been corrected.
   (merge 96386faa03 js/add-i-color-fix later to maint).

 * Processes that access packdata while the .idx file gets removed
   (e.g. while repacking) did not fail or fall back gracefully as they
   could.
   (merge 506ec2fbda tb/idx-midx-race-fix later to maint).

 * "git apply" adjusted the permission bits of working-tree files and
   directories according to core.sharedRepository setting by mistake and
   for a long time, which has been corrected.
   (merge eb3c027e17 mt/do-not-use-scld-in-working-tree later to maint).

 * "fetch-pack" could pass NULL pointer to unlink(2) when it sees an
   invalid filename; the error checking has been tightened to make
   this impossible.
   (merge 6031af387e rs/fetch-pack-invalid-lockfile later to maint).

 * "git maintenance run/start/stop" needed to be run in a repository
   to hold the lockfile they use, but didn't make sure they are
   actually in a repository, which has been corrected.

 * The glossary described a branch as an "active" line of development,
   which is misleading---a stale and non-moving branch is still a
   branch.
   (merge eef1ceabd8 so/glossary-branch-is-not-necessarily-active later to maint).

 * Newer versions of xsltproc can assign IDs in HTML documents it
   generates in a consistent manner.  Use the feature to help format
   HTML version of the user manual reproducibly.
   (merge 3569e11d69 ae/doc-reproducible-html later to maint).

 * Tighten error checking in the codepath that responds to "git fetch".
   (merge d43a21bdbb jk/check-config-parsing-error-in-upload-pack later to maint).

 * "git pack-redundant" when there is only one packfile used to crash,
   which has been corrected.
   (merge 0696232390 jx/pack-redundant-on-single-pack later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 3e0a5dc9af cc/doc-filter-branch-typofix later to maint).
   (merge 32c83afc2c cw/ci-ghwf-check-ws-errors later to maint).
   (merge 5eb2ed691b rs/tighten-callers-of-deref-tag later to maint).
   (merge 6db29ab213 jk/fast-import-marks-cleanup later to maint).
   (merge e5cf6d3df4 nk/dir-c-comment-update later to maint).
   (merge 5710dcce74 jk/report-fn-typedef later to maint).
   (merge 9a82db1056 en/sequencer-rollback-lock-cleanup later to maint).
   (merge 4e1bee9a99 js/t7006-cleanup later to maint).
   (merge f5bcde6c58 es/tutorial-mention-asciidoc-early later to maint).
   (merge 714d491af0 so/format-patch-doc-on-default-diff-format later to maint).
   (merge 0795df4b9b rs/clear-commit-marks-in-repo later to maint).
   (merge 9542d56379 sd/prompt-local-variable later to maint).
   (merge 06d43fad18 rs/pack-write-hashwrite-simplify later to maint).
   (merge b7e20b4373 mc/typofix later to maint).
   (merge f6bcd9a8a4 js/test-whitespace-fixes later to maint).
   (merge 53b67a801b js/test-file-size later to maint).
   (merge 970909c2a7 rs/hashwrite-be64 later to maint).
   (merge 5a923bb1f0 ma/list-object-filter-opt-msgfix later to maint).
   (merge 1c3e412916 rs/archive-plug-leak-refname later to maint).
   (merge d44e5267ea rs/plug-diff-cache-leak later to maint).
   (merge 793c1464d3 ab/gc-keep-base-option later to maint).
   (merge b86339b12b mt/worktree-error-message-fix later to maint).
   (merge e01ae2a4a7 js/pull-rebase-use-advise later to maint).
   (merge e63d774242 sn/config-doc-typofix later to maint).
   (merge 08e9df2395 jk/multi-line-indent-style-fix later to maint).
   (merge e66590348a da/vs-build-iconv-fix later to maint).
   (merge 7fe07275be js/cmake-extra-built-ins-fix later to maint).
   (merge 633eebe142 jb/midx-doc-update later to maint).
   (merge 5885367e8f jh/index-v2-doc-on-fsmn later to maint).
   (merge 14639a4779 jc/compat-util-setitimer-fix later to maint).
   (merge 56f56ac50b ab/unreachable-break later to maint).
   (merge 731d578b4f rb/nonstop-config-mak-uname-update later to maint).
   (merge f4698738f9 es/perf-export-fix later to maint).
   (merge 773c694142 nk/refspecs-negative-fix later to maint).

----------------------------------------------------------------

Changes since v2.29.0 are as follows:

Adam Spiers (1):
      hook: add sample template for push-to-checkout

Alex Vandiver (2):
      dir.c: fix comments to agree with argument name
      fsmonitor: use fsmonitor data in `git diff`

Alexander Shopov (1):
      l10n: bg.po: Updated Bulgarian translation (5037t)

Alexey (1):
      completion: fix zsh installation instructions

Amanda Shafack (1):
      t2200,t9832: avoid using 'git' upstream in a pipe

Arnout Engelen (1):
      doc: make HTML manual reproducible

Arusekk (1):
      l10n: pl.po: add translation and set team leader

Baptiste Fontaine (1):
      l10n: fr.po Fix a typo

Bradley M. Kuhn (2):
      Documentation: clarify and expand description of --signoff
      Documentation: stylistically normalize references to Signed-off-by:

Caleb Tillman (1):
      t0000: use test_path_is_file instead of "test -f"

Charvi Mendiratta (5):
      t7101,t7102,t7201: modernize test formatting
      t7102,t7201: remove unnecessary blank spaces in test body
      t7102,t7201: remove whitespace after redirect operator
      t7201: use 'git -C' to avoid subshell
      t7201: put each command on a separate line

Chris. Webster (1):
      ci: github action - add check for whitespace errors

Christian Couder (1):
      filter-branch doc: fix filter-repo typo

Daniel Duvall (1):
      upload-pack: allow stateless client EOF just prior to haves

Daniel Gurney (2):
      compat/bswap.h: simplify MSVC endianness detection
      compat/bswap.h: don't assume MSVC is little-endian

David Aguilar (1):
      git-gui: ssh-askpass: add a checkbox to show the input text

Dennis Ameling (1):
      ci(vs-build): stop passing the iconv library location explicitly

Denton Liu (18):
      t4068: remove unnecessary >tmp
      git-diff-index.txt: make --cached description a proper sentence
      git-diff.txt: backtick quote command text
      contrib/completion: extract common diff/difftool options
      diff-lib: accept option flags in run_diff_index()
      diff-lib: define diff_get_merge_base()
      t4068: add --merge-base tests
      builtin/diff-index: learn --merge-base
      builtin/diff-tree: learn --merge-base
      contrib/completion: complete `git diff --merge-base`
      Documentation/config/checkout: replace sq with backticks
      builtin/checkout: fix `git checkout -p HEAD...` bug
      Doc: document "A...B" form for <tree-ish> in checkout and switch
      add-patch: add NEEDSWORK about comparing commits
      t2016: add a NEEDSWORK about the PERL prerequisite
      checkout: learn to respect checkout.guess
      contrib/git-resurrect.sh: indent with tabs
      contrib/git-resurrect.sh: use hash-agnostic OID pattern

Derrick Stolee (28):
      maintenance: add prefetch task
      maintenance: add loose-objects task
      maintenance: create auto condition for loose-objects
      midx: enable core.multiPackIndex by default
      midx: use start_delayed_progress()
      maintenance: add incremental-repack task
      maintenance: auto-size incremental-repack batch
      maintenance: add incremental-repack auto condition
      maintenance: optionally skip --auto process
      maintenance: add --schedule option and config
      for-each-repo: run subcommands on configured repos
      maintenance: add [un]register subcommands
      maintenance: add start/stop subcommands
      maintenance: test commit-graph auto condition
      commit-graph: ignore duplicates when merging layers
      commit-graph: don't write commit-graph when disabled
      maintenance: core.commitGraph=false prevents writes
      maintenance: create maintenance.strategy config
      maintenance: use 'incremental' strategy by default
      maintenance: add troubleshooting guide to docs
      config: convert multi_replace to flags
      config: replace 'value_regex' with 'value_pattern'
      t1300: test "set all" mode with value-pattern
      t1300: add test for --replace-all with value-pattern
      config: add --fixed-value option, un-implemented
      config: plumb --fixed-value into config API
      config: implement --fixed-value with --get*
      maintenance: use 'git config --fixed-value'

Dimitriy Ryazantcev (1):
      git-gui: update Russian translation

Drew DeVault (1):
      help.c: help.autocorrect=never means "do not compute suggestions"

Elijah Newren (37):
      hashmap: add usage documentation explaining hashmap_free[_entries]()
      directory-rename-detection.txt: update references to regression tests
      t6423: more involved directory rename test
      t6423: update directory rename detection tests with new rule
      t6423: more involved rules for renaming directories into each other
      t7518: fix flaky grep invocation
      test-lib: allow selecting tests by substring/glob with --run
      t6006, t6012: adjust tests to use 'setup' instead of synonyms
      test-lib: reduce verbosity of skipped tests
      sequencer: remove duplicate rollback_lock_file() call
      t/: new helper for tests that pass with ort but fail with recursive
      merge tests: expect improved directory/file conflict handling in ort
      t6416: correct expectation for rename/rename(1to2) + directory/file
      t6404, t6423: expect improved rename/delete handling in ort backend
      t6423: expect improved conflict markers labels in the ort backend
      merge tests: expect slight differences in output for recursive vs. ort
      t6423, t6436: note improved ort handling with dirty files
      t6423: note improved ort handling with untracked files
      t6423: add more details about direct resolution of directories
      merge-ort: barebones API of new merge strategy with empty implementation
      merge-ort-wrappers: new convience wrappers to mimic the old merge API
      fast-rebase: demonstrate merge-ort's API via new test-tool command
      hashmap: adjust spacing to fix argument alignment
      hashmap: allow re-use after hashmap_free()
      hashmap: introduce a new hashmap_partial_clear()
      hashmap: provide deallocation function names
      strmap: new utility functions
      merge,rebase,revert: select ort or recursive by config or environment
      strmap: add more utility functions
      strmap: enable faster clearing and reusing of strmaps
      strmap: add functions facilitating use as a string->int map
      strmap: split create_entry() out of strmap_put()
      strmap: add a strset sub-type
      strmap: enable allocations to come from a mem_pool
      strmap: take advantage of FLEXPTR_ALLOC_STR when relevant
      Use new HASHMAP_INIT macro to simplify hashmap initialization
      shortlog: use strset from strmap.h

Emily Shaffer (1):
      MyFirstContribution: clarify asciidoc dependency

Emir Sarı (2):
      l10n: tr: v2.30.0-r1
      l10n: tr: v2.30.0-r2

Eric Sunshine (1):
      t/perf: fix test_export() failure with BSD `sed`

Felipe Contreras (41):
      completion: zsh: fix __gitcomp_direct()
      completion: zsh: fix name due to broken autoloading
      completion: zsh: fix bash script extension
      completion: zsh: reorganize install instructions
      completion: zsh: fix for directories with spaces
      completion: zsh: update slave script locations
      completion: prompt: fix color for Zsh
      completion: zsh: fix for command aliasing
      completion: bash: synchronize zsh wrapper
      completion: bash: remove zsh wrapper
      completion: zsh: fix completion for --no-.. options
      completion: fix conflict with bashcomp
      completion: zsh: add missing direct_append
      completion: zsh: fix splitting of words
      completion: zsh: simplify compadd functions
      completion: zsh: simplify direct compadd
      completion: zsh: trivial cleanup
      completion: zsh: simplify nl_append
      completion: zsh: simplify file_direct
      completion: zsh: shuffle functions around
      completion: zsh: refactor command completion
      completion: zsh: improve command tags
      completion: zsh: add alias descriptions
      completion: zsh: trivial simplification
      completion: zsh: add simple version check
      completion: bash: trivial cleanup
      completion: bash: cleanup cygwin check
      completion: bash: remove old compat wrappers
      zsh: update copyright notices
      completion: bash: support recursive aliases
      completion: bash: check for alias loop
      completion: bash: improve alias loop detection
      tests: push: improve cleanup of HEAD tests
      tests: push: trivial cleanup
      refspec: make @ a synonym of HEAD
      refspec: trivial cleanup
      .gitignore: remove dangling file
      test: completion: fix typos
      tests: lib-functions: trivial style cleanups
      completion: zsh: fix file completion regression
      completion: bash: fix gitk alias regression

Han-Wen Nienhuys (1):
      move sleep_millisec to git-compat-util.h

Javier Spagnoletti (1):
      userdiff: PHP: catch "abstract" and "final" functions

Jean-Noël Avila (3):
      l10n: fr fix misleading message
      l10n: fr.po: v2.30.0 rnd 1
      l10n: fr.po v2.30.0 rnd 2

Jeff Hostetler (1):
      index-format.txt: document v2 format of file system monitor extension

Jeff King (44):
      fast-import: fix over-allocation of marks storage
      usage: define a type for a reporting function
      config.mak.dev: build with -fno-common
      fast-import: remove duplicated option-parsing line
      perl: check for perl warnings while running tests
      t3436: check --committer-date-is-author-date result more carefully
      am: fix broken email with --committer-date-is-author-date
      rebase: fix broken email with --committer-date-is-author-date
      am, sequencer: stop parsing our own committer ident
      test-pkt-line: drop colon from sideband identity
      checkout-index: drop error message from empty --stage=all
      checkout-index: propagate errors to exit code
      sideband: diagnose more sideband anomalies
      format-patch: refactor output selection
      format-patch: tie file-opening logic to output_directory
      format-patch: support --output option
      rev-parse: don't accept options after dashdash
      rev-parse: put all options under the "-" check
      rev-parse: handle --end-of-options
      compute pack .idx byte offsets using size_t
      use size_t to store pack .idx byte offsets
      fsck: correctly compute checksums on idx files larger than 4GB
      block-sha1: take a size_t length parameter
      packfile: detect overflow in .idx file size checks
      repack: make "exts" array available outside cmd_repack()
      send-pack: kill pack-objects helper on signal or exit
      submodule: fix fetch_in_submodule logic
      upload-pack: kill pack-objects helper on signal or exit
      banned.h: mark non-reentrant gmtime, etc as banned
      t7900: speed up expensive test
      gitignore: drop duplicate entry for git-sh-i18n
      banned.h: mark ctime_r() and asctime_r() as banned
      Makefile: mark git-maintenance as a builtin
      upload-pack: propagate return value from object filter config callback
      style: indent multiline "if" conditions to align
      oid-array.h: drop sha1 mention from header guard
      t0064: drop sha1 mention from filename
      t0064: make duplicate tests more robust
      cache.h: move hash/oid functions to hash.h
      oid-array: make sort function public
      oid-array: provide a for-loop iterator
      commit-graph: drop count_distinct_commits() function
      commit-graph: replace packed_oid_list with oid_array
      commit-graph: use size_t for array allocation and indexing

Jiang Xin (7):
      t5411: new helper filter_out_user_friendly_and_stable_output
      receive-pack: gently write messages to proc-receive
      receive-pack: use default version 0 for proc-receive
      l10n: git.pot: v2.30.0 round 1 (70 new, 45 removed)
      pack-redundant: fix crash when one packfile in repo
      l10n: git.pot: v2.30.0 round 2 (1 new, 2 removed)
      l10n: zh_CN: for git v2.30.0 l10n round 1 and 2

Jinoh Kang (2):
      diff: allow passing NULL to diff_free_filespec_data()
      t7800: simplify difftool test

Joey Salazar (1):
      t7006: Use test_path_is_* functions in test script

Johannes Berg (1):
      docs: multi-pack-index: remove note about future 'verify' work

Johannes Schindelin (75):
      ci: work around old records of GitHub runs
      ci: make the "skip-if-redundant" check more defensive
      sideband: avoid reporting incomplete sideband messages
      sideband: report unhandled incomplete sideband messages as bugs
      SKIP_DASHED_BUILT_INS: do not skip the bin/ programs
      fmt-merge-msg: also suppress "into main" by default
      t9801: use `--` in preparation for default branch rename
      tests: start moving to a different default main branch name
      t6200: adjust suppression pattern to also match "main"
      t5703: adjust a test case for the upcoming default branch name
      t3200: prepare for `main` being shorter than `master`
      t9902: prepare a test for the upcoming default branch name
      tests: prepare aligned mentions of the default branch name
      t1400: prepare for `main` being default branch name
      t5411: start using the default branch name "main"
      t5411: start adjusting the support files for init.defaultBranch=main
      t5411: adjust the remaining support files for init.defaultBranch=main
      t5411: finish preparing for `main` being the default branch name
      t5515: use `main` as the name of the main branch for testing (part 1)
      t5515: use `main` as the name of the main branch for testing (part 2)
      t5515: use `main` as the name of the main branch for testing (part 3)
      t5515: use `main` as the name of the main branch for testing (conclusion)
      t2402: fix typo
      ci: make the whitespace checker more robust
      tests: consolidate the `file_size` function into `test-lib-functions.sh`
      ci: avoid using the deprecated `set-env` construct
      p4: respect init.defaultBranch
      t1004: insert missing "branch" in a message
      t3406: indent with tabs, not spaces
      t3427: adjust stale comment
      t5400,t5402: consistently indent with tabs, not with spaces
      t5570: remove trailing padding
      t9603: use tabs for indentation
      add -i (built-in): do show an error message for incorrect inputs
      add -i (built-in): send error messages to stderr
      add -p (built-in): imitate `xdl_format_hunk_hdr()` generating hunk headers
      add -i: use `reset_color` consistently
      add -i (built-in): prevent the `reset` "color" from being configured
      add -i (built-in): use correct names to load color.diff.* config
      mergetools/bc: add `bc4` to the alias list for Beyond Compare
      mergetool: avoid letting `list_tool_variants` break user-defined setups
      add -p (built-in): do not color the progress indicator separately
      add -i (built-in): use the same indentation as the Perl version
      add -i (Perl version): color header to match the C version
      add -p: prefer color.diff.context over color.diff.plain
      add -i: verify in the tests that colors can be overridden
      t2106: adjust style to the current conventions
      t2106: make test independent of the current main branch name
      t2106: ensure that the checkout fails for the expected reason
      t3040: remove stale note
      t1309: use a neutral branch name in the `onbranch` test cases
      t4015: let the test pass with any default branch name
      pull: colorize the hint about setting `pull.rebase`
      t3404: do not depend on any specific default branch name
      t5526: avoid depending on a specific default branch name
      t5526: drop the prereq expecting the default branch name `main`
      cmake: determine list of extra built-ins dynamically
      t6300: avoid using the default name of the initial branch
      t7064: avoid relying on a specific default branch name
      init: document `init.defaultBranch` better
      branch -m: allow renaming a yet-unborn branch
      get_default_branch_name(): prepare for showing some advice
      init: provide useful advice about init.defaultBranch
      t1400: use `main` as initial branch name
      t3200: finish transitioning to the initial branch name `main`
      t3201: finalize transitioning to using the branch name `main`
      t3203: complete the transition to using the branch name `main`
      t3205: finalize transitioning to using the branch name `main`
      t5505: finalize transitioning to using the branch name `main`
      t5510: use `main` as initial branch name
      t5703: use `main` as initial branch name
      t6302: use `main` as initial branch name
      t9902: use `main` as initial branch name
      tests: drop the `PREPARE_FOR_MAIN_BRANCH` prereq
      checkout -p: handle tree arguments correctly again

Jonathan Tan (3):
      apply: when -R, also reverse list of sections
      sequencer: tolerate abbreviated stopped-sha file
      usage: add trace2 entry upon warning()

Jordi Mas (2):
      l10n: Update Catalan translation
      l10n: Update Catalan translation

Josh Steadmon (13):
      docs: new capability to advertise session IDs
      docs: new transfer.advertiseSID option
      trace2: add a public function for getting the SID
      upload-pack: advertise session ID in v0 capabilities
      receive-pack: advertise session ID in v0 capabilities
      serve: advertise session ID in v2 capabilities
      transport: log received server session ID
      fetch-pack: advertise session ID in capabilities
      upload-pack, serve: log received client session ID
      send-pack: advertise session ID in capabilities
      receive-pack: log received client session ID
      t7900: fix typo: "test_execpt_success"
      t7900: use --fixed-value in git-maintenance tests

Junio C Hamano (35):
      doc: preparatory clean-up of description on the sign-off option
      SubmittingPatches: clarify DCO is our --signoff rule
      Revert "test_cmp: diagnose incorrect arguments"
      t7102: prepare expected output inside test_expect_* block
      Git 2.29.1
      other small fixes for 2.29.2
      SubmittingPatches: clarify the purpose of the final resend
      First batch
      Git 2.29.2
      Second batch
      Makefile: enable -Wsparse-error for DEVELOPER build
      Third batch
      log: diagnose -L used with pathspec as an error
      doc: clarify that --abbrev=<n> is about the minimum length
      Fourth batch
      format-patch: make output filename configurable
      Fifth batch
      ci: avoid `set-env` construct in print-test-failures.sh
      Sixth batch
      Seventh batch
      MyFirstContribition: answering questions is not the end of the story
      config doc: value-pattern is not necessarily a regexp
      Eighth batch
      Ninth batch
      Revert "submodules: fix of regression on fetching of non-init subsub-repo"
      Tenth batch
      Eleventh batch
      Git 2.30-rc0
      strmap: make callers of strmap_remove() to call it in void context
      compat-util: pretend that stub setitimer() always succeeds
      diff: correct interaction between --exit-code and -I<pattern>
      Another batch before 2.30-rc1
      Git 2.30-rc1
      Git 2.30-rc2
      Git 2.30

Konrad Borowski (1):
      userdiff: recognize 'macro_rules!' as starting a Rust function block

Kyle Meyer (1):
      stash: add missing space to an error message

Marlon Rac Cambasis (1):
      doc: fixing two trivial typos in Documentation/

Martin Schön (1):
      git-gui: use commit message template

Martin Ågren (8):
      list-objects-filter-options: fix function name in BUG
      grep: don't set up a "default" repo for grep
      grep: use designated initializers for `grep_defaults`
      grep: copy struct in one fell swoop
      MyFirstObjectWalk: drop `init_walken_defaults()`
      git-maintenance.txt: add missing word
      gc: fix handling of crontab magic markers
      t7900-maintenance: test for magic markers

Matheus Tavares (2):
      worktree: fix order of arguments in error message
      apply: don't use core.sharedRepository to create working tree files

Matthias Rüster (1):
      l10n: de.po: Update German translation for Git 2.30.0

Michał Kępień (2):
      merge-base, xdiff: zero out xpparam_t structures
      diff: add -I<regex> that ignores matching changes

Nate Avers (2):
      notes.c: fix a segfault in notes_display_config()
      t3301: test proper exit response to no-value notes.displayRef.

Nicolas Morey-Chaisemartin (1):
      imap-send: parse default git config

Nipunn Koorapati (19):
      t/perf/README: elaborate on output format
      t/perf/p7519-fsmonitor.sh: warm cache on first git status
      t/perf: add fsmonitor perf test for git diff
      perf lint: add make test-lint to perf tests
      p7519-fsmonitor: refactor to avoid code duplication
      p7519-fsmonitor: add a git add benchmark
      t/perf/fsmonitor: separate one time repo initialization
      t/perf/fsmonitor: move watchman setup to one-time-repo-setup
      t/perf/fsmonitor: improve error message if typoing hook name
      t/perf/fsmonitor: factor description out for readability
      t/perf/fsmonitor: shorten DESC to basename
      t/perf/fsmonitor: silence initial git commit
      t/perf/fsmonitor: factor setup for fsmonitor into function
      t/perf/fsmonitor: initialize test with git reset
      t/perf/fsmonitor: perf comparison of multiple fsmonitor integrations
      t/perf/fsmonitor: add benchmark for dirty status
      perf/fsmonitor: use test_must_be_empty helper
      negative-refspec: fix segfault on : refspec
      negative-refspec: improve comment on query_matches_negative_refspec

Patrick Steinhardt (4):
      t1400: avoid touching refs on filesystem
      update-ref: allow creation of multiple transactions
      p1400: use `git-update-ref --stdin` to test multiple transactions
      update-ref: disallow "start" for ongoing transactions

Peter Kaestle (1):
      submodules: fix of regression on fetching of non-init subsub-repo

Peter Krefting (2):
      l10n: sv.po: Update Swedish translation (5038t0f0u)
      l10n: sv.po: Update Swedish translation (5037t0f0u)

Philippe Blain (15):
      ref-filter: handle CRLF at end-of-line more gracefully
      log, show: add tests for messages containing CRLF
      doc: log, gitk: move '-L' description to 'line-range-options.txt'
      doc: line-range: improve formatting
      blame-options.txt: also mention 'funcname' in '-L' description
      doc: add more pointers to gitattributes(5) for userdiff
      line-log: mention both modes in 'blame' and 'log' short help
      blame: enable funcname blaming with userdiff driver
      blame: simplify 'setup_scoreboard' interface
      blame: simplify 'setup_blame_bloom_data' interface
      pull --rebase: compute rebase arguments in separate function
      t5572: add notes on a peculiar test
      t5572: describe '--rebase' tests a little more
      pull: check for local submodule modifications with the right range
      git.txt: fix typos in 'linkgit' macro invocation

Phillip Wood (4):
      rebase -i: stop overwriting ORIG_HEAD buffer
      rebase -i: use struct object_id rather than looking up commit
      rebase -i: use struct object_id when writing state
      rebase -i: simplify get_revision_ranges()

Pranit Bauva (7):
      bisect--helper: finish porting `bisect_start()` to C
      bisect--helper: retire `--bisect-clean-state` subcommand
      bisect--helper: retire `--next-all` subcommand
      bisect--helper: reimplement `bisect_state` & `bisect_head` shell functions in C
      bisect--helper: retire `--check-expected-revs` subcommand
      bisect--helper: retire `--write-terms` subcommand
      bisect--helper: retire `--bisect-autostart` subcommand

Pratyush Yadav (1):
      git-gui: Only touch GITGUI_MSG when needed

Rafael Silva (2):
      worktree: teach `list` to annotate locked worktree
      maintenance: fix SEGFAULT when no repository

Ramsay Jones (6):
      Documentation/Makefile: conditionally include doc.dep
      Documentation/Makefile: conditionally include ../GIT-VERSION-FILE
      gitweb/Makefile: conditionally include ../GIT-VERSION-FILE
      Makefile: don't try to clean old debian build product
      Makefile: don't use a versioned temp distribution directory
      Makefile: conditionally include GIT-VERSION-FILE

Randall S. Becker (1):
      config.mak.uname: remove old NonStop compatibility settings

René Scharfe (19):
      Makefile: use git init/add/commit/archive for dist-doc
      Makefile: remove the unused variable TAR_DIST_EXTRA_OPTS
      grep: handle deref_tag() returning NULL
      blame: handle deref_tag() returning NULL
      line-log: handle deref_tag() returning NULL
      object: allow clear_commit_marks_all to handle any repo
      bisect: clear flags in passed repository
      stash: simplify reflog emptiness check
      pack-write: use hashwrite_be32() instead of double-buffering array
      archive: support compression levels beyond 9
      blame: silently ignore invalid ignore file objects
      csum-file: add hashwrite_be64()
      midx: use hashwrite_be64()
      pack-write: use hashwrite_be64()
      diff-lib: plug minor memory leaks in do_diff_cache()
      archive: release refname after use
      gc: fix cast in compare_tasks_by_selection()
      fetch-pack: disregard invalid pack lockfiles
      gitignore: remove entry for git serve

Robert Karszniewicz (2):
      git-completion.bash: __git_diff_common_options: add --[no-]patch
      git-completion.bash: stash-show: complete $__git_diff_common_options

SZEDER Gábor (4):
      bisect: loosen halfway() check for a large number of commits
      t5310-pack-bitmaps: skip JGit tests with SHA256
      tests: make sure nested lazy prereqs work reliably
      tests: fix description of 'test_set_prereq'

Samuel Čavoj (3):
      sequencer: fix gpg option passed to merge subcommand
      sequencer: pass explicit --no-gpg-sign to merge
      t3435: add tests for rebase -r GPG signing

Sean Barag (7):
      clone: add tests for --template and some disallowed option pairs
      clone: use more conventional config/option layering
      remote: add tests for add and rename with invalid names
      refs: consolidate remote name validation
      clone: validate --origin option before use
      clone: read new remote name from remote_name instead of option_origin
      clone: allow configurable default for `-o`/`--origin`

Serg Tereshchenko (1):
      git-gui: Fix selected text colors

Sergey Organov (2):
      doc/diff-options: fix out of place mentions of '--patch/-p'
      glossary: improve "branch" definition

Sibo Dong (1):
      git-prompt.sh: localize `option` in __git_ps1_show_upstream

Simão Afonso (1):
      crendential-store: use timeout when locking file

Sohom Datta (1):
      userdiff: expand detected chunk headers for css

Srinidhi Kaushik (3):
      push: add reflog check for "--force-if-includes"
      push: parse and set flag for "--force-if-includes"
      t, doc: update tests, reference for "--force-if-includes"

Stefan Haller (2):
      git-gui: fix colored label backgrounds when using themed widgets
      git-gui: use gray background for inactive text widgets

Taylor Blau (7):
      builtin/repack.c: keep track of what pack-objects wrote
      builtin/repack.c: don't move existing packs out of the way
      packfile.c: protect against disappearing indexes
      midx.c: protect against disappearing packs
      builtin/bugreport.c: use thread-safe localtime_r()
      builtin/clone.c: don't ignore transport_fetch_refs() errors
      upload-pack.c: don't free allowed_filters util pointers

Thomas Koutcher (1):
      credential: load default config

Trần Ngọc Quân (1):
      l10n: vi.po(5037t): v2.30.0 rnd 2

Victor Engmark (1):
      userdiff: support Bash

Yi-Jyun Pan (1):
      l10n: zh_TW.po: v2.30.0 round 2 (1 untranslated)

brian m. carlson (1):
      svn: use correct variable name for short OID

m4sk1n (1):
      l10n: pl.po: started Polish translation

Ævar Arnfjörð Bjarmason (9):
      remote: add meaningful exit code on missing/existing
      config.mak.uname: remove unused the NO_R_TO_GCC_LINKER flag
      config.mak.uname: remove unused NEEDS_SSL_WITH_CURL flag
      submodule: use "fetch" logic instead of custom remote discovery
      submodule: remove sh function in favor of helper
      parse-remote: remove this now-unused library
      gc docs: change --keep-base-pack to --keep-largest-pack
      gc: rename keep_base_pack variable for --keep-largest-pack
      style: do not "break" in switch() after "return"

Đoàn Trần Công Danh (1):
      doc: mention Python 3.x supports

Štěpán Němec (1):
      config.txt: fix a typo (backslash != backquote)


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.30.0-rc1
@ 2020-12-19  4:34  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2020-12-19  4:34 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.30.0-rc1 is now available for testing
at the usual places.  It is comprised of 455 non-merge commits
since v2.29.0, contributed by 72 people, 26 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.30.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.29.0 are as follows.
Welcome to the Git development community!

  Alexey, Amanda Shafack, Bradley M. Kuhn, Caleb Tillman, Charvi
  Mendiratta, Daniel Duvall, Daniel Gurney, Dennis Ameling, Javier
  Spagnoletti, Jinoh Kang, Joey Salazar, Konrad Borowski, Marlon
  Rac Cambasis, Martin Schön, Michał Kępień, Nate Avers,
  Nipunn Koorapati, Rafael Silva, Robert Karszniewicz, Samuel
  Čavoj, Sean Barag, Sibo Dong, Simão Afonso, Sohom Datta,
  Thomas Koutcher, and Victor Engmark.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Spiers, Ævar Arnfjörð Bjarmason, Alex Vandiver, Arnout
  Engelen, brian m. carlson, Christian Couder, Chris. Webster,
  David Aguilar, Denton Liu, Derrick Stolee, Dimitriy Ryazantcev,
  Đoàn Trần Công Danh, Drew DeVault, Elijah Newren,
  Emily Shaffer, Eric Sunshine, Felipe Contreras, Han-Wen
  Nienhuys, Jeff Hostetler, Jeff King, Jiang Xin, Johannes
  Berg, Johannes Schindelin, Jonathan Tan, Josh Steadmon,
  Junio C Hamano, Kyle Meyer, Martin Ågren, Matheus Tavares,
  Nicolas Morey-Chaisemartin, Patrick Steinhardt, Peter Kaestle,
  Philippe Blain, Phillip Wood, Pranit Bauva, Pratyush Yadav,
  Ramsay Jones, Randall S. Becker, René Scharfe, Sergey Organov,
  Serg Tereshchenko, Srinidhi Kaushik, Stefan Haller, Štěpán
  Němec, SZEDER Gábor, and Taylor Blau.

----------------------------------------------------------------

Git 2.30 Release Notes (draft)
==============================

Updates since v2.29
-------------------

UI, Workflows & Features

 * Userdiff for PHP update.

 * Userdiff for Rust update.

 * Userdiff for CSS update.

 * The command line completion script (in contrib/) learned that "git
   stash show" takes the options "git diff" takes.

 * "git worktree list" now shows if each worktree is locked.  This
   possibly may open us to show other kinds of states in the future.

 * "git maintenance", an extended big brother of "git gc", continues
   to evolve.

 * "git push --force-with-lease[=<ref>]" can easily be misused to lose
   commits unless the user takes good care of their own "git fetch".
   A new option "--force-if-includes" attempts to ensure that what is
   being force-pushed was created after examining the commit at the
   tip of the remote ref that is about to be force-replaced.

 * "git clone" learned clone.defaultremotename configuration variable
   to customize what nickname to use to call the remote the repository
   was cloned from.

 * "git checkout" learned to use checkout.guess configuration variable
   and enable/disable its "--[no-]guess" option accordingly.

 * "git resurrect" script (in contrib/) learned that the object names
   may be longer than 40-hex depending on the hash function in use.

 * "git diff A...B" learned "git diff --merge-base A B", which is a
   longer short-hand to say the same thing.

 * A sample 'push-to-checkout' hook, that performs the same as
   what the built-in default action does, has been added.

 * "git diff" family of commands learned the "-I<regex>" option to
   ignore hunks whose changed lines all match the given pattern.

 * The userdiff pattern learned to identify the function definition in
   POSIX shells and bash.

 * "git checkout-index" did not consistently signal an error with its
   exit status, but now it does.

 * A commit and tag object may have CR at the end of each and
   every line (you can create such an object with hash-object or
   using --cleanup=verbatim to decline the default clean-up
   action), but it would make it impossible to have a blank line
   to separate the title from the body of the message.  We are now
   more lenient and accept a line with lone CR on it as a blank line,
   too.

 * Exit codes from "git remote add" etc. were not usable by scripted
   callers, but now they are.

 * "git archive" now allows compression level higher than "-9"
   when generating tar.gz output.

 * Zsh autocompletion (in contrib/) update.

 * The maximum length of output filenames "git format-patch" creates
   has become configurable (used to be capped at 64).

 * "git rev-parse" learned the "--end-of-options" to help scripts to
   safely take a parameter that is supposed to be a revision, e.g.
   "git rev-parse --verify -q --end-of-options $rev".

 * The command line completion script (in contrib/) learned to expand
   commands that are alias of alias.

 * "git update-ref --stdin" learns to take multiple transactions in a
   single session.

 * Various subcommands of "git config" that takes value_regex
   learn the "--literal-value" option to take the value_regex option
   as a literal string.

 * The transport layer was taught to optionally exchange the session
   ID assigned by the trace2 subsystem during fetch/push transactions.

 * "git imap-send" used to ignore configuration variables like
   core.askpass; this has been corrected.

 * "git $cmd $args", when $cmd is not a recognised subcommand, by
   default tries to see if $cmd is a typo of an existing subcommand
   and optionally executes the corrected command if there is only one
   possibility, depending on the setting of help.autocorrect; the
   users can now disable the whole thing, including the cycles spent
   to find a likely typo, by setting the configuration variable to
   'never'.

 * "@" sometimes worked (e.g. "git push origin @:there") as a part of
   a refspec element, but "git push origin @" did not work, which has
   been corrected.


Performance, Internal Implementation, Development Support etc.

 * Use "git archive" more to produce the release tarball.

 * GitHub Actions automated test improvement to skip tests on a tree
   identical to what has already been tested.

 * Test-coverage for running commit-graph task "git maintenance" has
   been extended.

 * Our test scripts can be told to run only individual pieces while
   skipping others with the "--run=..." option; they were taught to
   take a substring of test title, in addition to numbers, to name the
   test pieces to run.

 * Adjust tests so that they won't scream when the default initial
   branch name is changed to 'main'.

 * Rewriting "git bisect" in C continues.

 * More preliminary tests have been added to document desired outcome
   of various "directory rename" situations.

 * Micro clean-up of a couple of test scripts.

 * "git diff" and other commands that share the same machinery to
   compare with working tree files have been taught to take advantage
   of the fsmonitor data when available.

 * The code to detect premature EOF in the sideband demultiplexer has
   been cleaned up.

 * Test scripts are being prepared to transition of the default branch
   name to 'main'.

 * "git fetch --depth=<n>" over the stateless RPC / smart HTTP
   transport handled EOF from the client poorly at the server end.

 * A specialization of hashmap that uses a string as key has been
   introduced.  Hopefully it will see wider use over time.

 * "git bisect start/next" in a large span of history spends a lot of
   time trying to come up with exactly the half-way point; this can be
   optimized by stopping when we see a commit that is close enough to
   the half-way point.

 * A lazily defined test prerequisite can now be defined in terms of
   another lazily defined test prerequisite.

 * Expectation for the original contributor after responding to a
   review comment to use the explanation in a patch update has been
   described.

 * Multiple "credential-store" backends can race to lock the same
   file, causing everybody else but one to fail---reattempt locking
   with some timeout to reduce the rate of the failure.

 * "git-parse-remote" shell script library outlived its usefulness.

 * Like die() and error(), a call to warning() will also trigger a
   trace2 event.

 * Use of non-reentrant localtime() has been removed.

 * Non-reentrant time-related library functions and ctime/asctime with
   awkward calling interfaces are banned from the codebase.


Fixes since v2.29
-----------------

 * In 2.29, "--committer-date-is-author-date" option of "rebase" and
   "am" subcommands lost the e-mail address by mistake, which has been
   corrected.
   (merge 5f35edd9d7 jk/committer-date-is-author-date-fix later to maint).

 * "git checkout -p A...B [-- <path>]" did not work, even though the
   same command without "-p" correctly used the merge-base between
   commits A and B.
   (merge 35166b1fb5 dl/checkout-p-merge-base later to maint).

 * The side-band status report can be sent at the same time as the
   primary payload multiplexed, but the demultiplexer on the receiving
   end incorrectly split a single status report into two, which has
   been corrected.
   (merge 712b0377db js/avoid-split-sideband-message later to maint).

 * "git fast-import" wasted a lot of memory when many marks were in use.
   (merge 3f018ec716 jk/fast-import-marks-alloc-fix later to maint).

 * A test helper "test_cmp A B" was taught to diagnose missing files A
   or B as a bug in test, but some tests legitimately wanted to notice
   a failure to even create file B as an error, in addition to leaving
   the expected result in it, and were misdiagnosed as a bug.  This
   has been corrected.
   (merge 262d5ad5a5 es/test-cmp-typocatcher later to maint).

 * When "git commit-graph" detects the same commit recorded more than
   once while it is merging the layers, it used to die.  The code now
   ignores all but one of them and continues.
   (merge 85102ac71b ds/commit-graph-merging-fix later to maint).

 * The meaning of a Signed-off-by trailer can vary from project to
   project; this and also what it means to this project has been
   clarified in the documentation.
   (merge 3abd4a67d9 bk/sob-dco later to maint).

 * "git credential' didn't honor the core.askPass configuration
   variable (among other things), which has been corrected.
   (merge 567ad2c0f9 tk/credential-config later to maint).

 * Dev support to catch a tentative definition of a variable in our C
   code as an error.
   (merge 5539183622 jk/no-common later to maint).

 * "git rebase --rebase-merges" did not correctly pass --gpg-sign
   command line option to underlying "git merge" when replaying a merge
   using non-default merge strategy or when replaying an octopus merge
   (because replaying a two-head merge with the default strategy was
   done in a separate codepath, the problem did not trigger for most
   users), which has been corrected.
   (merge 43ad4f2eca sc/sequencer-gpg-octopus later to maint).

 * "git apply -R" did not handle patches that touch the same path
   twice correctly, which has been corrected.  This is most relevant
   in a patch that changes a path from a regular file to a symbolic
   link (and vice versa).
   (merge b0f266de11 jt/apply-reverse-twice later to maint).

 * A recent oid->hash conversion missed one spot, breaking "git svn".
   (merge 03bb366de4 bc/svn-hash-oid-fix later to maint).

 * The documentation on the "--abbrev=<n>" option did not say the
   output may be longer than "<n>" hexdigits, which has been
   clarified.
   (merge cda34e0d0c jc/abbrev-doc later to maint).

 * "git p4" now honors init.defaultBranch configuration.
   (merge 1b09d1917f js/p4-default-branch later to maint).

 * Recently the format of an internal state file "rebase -i" uses has
   been tightened up for consistency, which would hurt those who start
   "rebase -i" with old git and then continue with new git.  Loosen
   the reader side a bit (which we may want to tighten again in a year
   or so).
   (merge c779386182 jc/sequencer-stopped-sha-simplify later to maint).

 * The code to see if "git stash drop" can safely remove refs/stash
   has been made more carerful.
   (merge 4f44c5659b rs/empty-reflog-check-fix later to maint).

 * "git log -L<range>:<path>" is documented to take no pathspec, but
   this was not enforced by the command line option parser, which has
   been corrected.
   (merge 39664cb0ac jc/line-log-takes-no-pathspec later to maint).

 * "git format-patch --output=there" did not work as expected and
   instead crashed.  The option is now supported.
   (merge dc1672dd10 jk/format-patch-output later to maint).

 * Define ARM64 compiled with MSVC to be little-endian.
   (merge 0c038fc65a dg/bswap-msvc later to maint).

 * "git rebase -i" did not store ORIG_HEAD correctly.
   (merge 8843302307 pw/rebase-i-orig-head later to maint).

 * "git blame -L :funcname -- path" did not work well for a path for
   which a userdiff driver is defined.

 * "make DEVELOPER=1 sparse" used to run sparse and let it emit
   warnings; now such warnings will cause an error.
   (merge 521dc56270 jc/sparse-error-for-developer-build later to maint).

 * "git blame --ignore-revs-file=<file>" learned to ignore a
   non-existent object name in the input, instead of complaining.
   (merge c714d05875 jc/blame-ignore-fix later to maint).

 * Running "git diff" while allowing external diff in a state with
   unmerged paths used to segfault, which has been corrected.
   (merge d66851806f jk/diff-release-filespec-fix later to maint).

 * Build configuration cleanup.
   (merge b990f02fd8 ab/config-mak-uname-simplify later to maint).

 * Fix regression introduced when nvimdiff support in mergetool was added.
   (merge 12026f46e7 pd/mergetool-nvimdiff later to maint).

 * The exchange between receive-pack and proc-receive hook did not
   carefully check for errors.

 * The code was not prepared to deal with pack .idx file that is
   larger than 4GB.
   (merge 81c4c5cf2e jk/4gb-idx later to maint).

 * Since jgit does not yet work with SHA-256 repositories, mark the
   tests that uses it not to run unless we are testing with ShA-1
   repositories.
   (merge ea699b4adc sg/t5310-jgit-wants-sha1 later to maint).

 * Config parser fix for "git notes".
   (merge 45fef1599a na/notes-displayref-is-not-boolean later to maint).

 * Move a definition of compatibility wrapper from cache.h to
   git-compat-util.h
   (merge a76b138daa hn/sleep-millisec-decl later to maint).

 * Error message fix.
   (merge eaf5341538 km/stash-error-message-fix later to maint).

 * "git pull --rebase --recurse-submodules" checked for local changes
   in a wrong range and failed to run correctly when it should.
   (merge 5176f20ffe pb/pull-rebase-recurse-submodules later to maint).

 * "git push" that is killed may leave a pack-objects process behind,
   still computing to find a good compression, wasting cycles.  This
   has been corrected.
   (merge 8b59935114 jk/stop-pack-objects-when-push-is-killed later to maint).

 * "git fetch" that is killed may leave a pack-objects process behind,
   still computing to find a good compression, wasting cycles.  This
   has been corrected.
   (merge 309a4028e7 jk/stop-pack-objects-when-fetch-is-killed later to maint).

 * "git add -i" failed to honor custom colors configured to show
   patches, which has been corrected.
   (merge 96386faa03 js/add-i-color-fix later to maint).

 * Processes that access packdata while the .idx file gets removed
   (e.g. while repacking) did not fail or fall back gracefully as they
   could.
   (merge 506ec2fbda tb/idx-midx-race-fix later to maint).

 * "git apply" adjusted the permission bits of working-tree files and
   directories according core.sharedRepository setting by mistake and
   for a long time, which has been corrected.
   (merge eb3c027e17 mt/do-not-use-scld-in-working-tree later to maint).

 * "fetch-pack" could pass NULL pointer to unlink(2) when it sees an
   invalid filename; the error checking has been tightened to make
   this impossible.
   (merge 6031af387e rs/fetch-pack-invalid-lockfile later to maint).

 * "git maintenance run/start/stop" needed to be run in a repository
   to hold the lockfile they use, but didn't make sure they are
   actually in a repository, which has been corrected.

 * The glossary described a branch as an "active" line of development,
   which is misleading---a stale and non-moving branch is still a
   branch.
   (merge eef1ceabd8 so/glossary-branch-is-not-necessarily-active later to maint).

 * Newer versions of xsltproc can assign IDs in HTML documents it
   generates in a consistent manner.  Use the feature to help format
   HTML version of the user manual reproducibly.
   (merge 3569e11d69 ae/doc-reproducible-html later to maint).

 * Tighten error checking in the codepath that responds to "git fetch".
   (merge d43a21bdbb jk/check-config-parsing-error-in-upload-pack later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 3e0a5dc9af cc/doc-filter-branch-typofix later to maint).
   (merge 32c83afc2c cw/ci-ghwf-check-ws-errors later to maint).
   (merge 5eb2ed691b rs/tighten-callers-of-deref-tag later to maint).
   (merge 6db29ab213 jk/fast-import-marks-cleanup later to maint).
   (merge e5cf6d3df4 nk/dir-c-comment-update later to maint).
   (merge 5710dcce74 jk/report-fn-typedef later to maint).
   (merge 9a82db1056 en/sequencer-rollback-lock-cleanup later to maint).
   (merge 4e1bee9a99 js/t7006-cleanup later to maint).
   (merge f5bcde6c58 es/tutorial-mention-asciidoc-early later to maint).
   (merge 714d491af0 so/format-patch-doc-on-default-diff-format later to maint).
   (merge 0795df4b9b rs/clear-commit-marks-in-repo later to maint).
   (merge 9542d56379 sd/prompt-local-variable later to maint).
   (merge 06d43fad18 rs/pack-write-hashwrite-simplify later to maint).
   (merge b7e20b4373 mc/typofix later to maint).
   (merge f6bcd9a8a4 js/test-whitespace-fixes later to maint).
   (merge 53b67a801b js/test-file-size later to maint).
   (merge 970909c2a7 rs/hashwrite-be64 later to maint).
   (merge 5a923bb1f0 ma/list-object-filter-opt-msgfix later to maint).
   (merge 1c3e412916 rs/archive-plug-leak-refname later to maint).
   (merge d44e5267ea rs/plug-diff-cache-leak later to maint).
   (merge 793c1464d3 ab/gc-keep-base-option later to maint).
   (merge b86339b12b mt/worktree-error-message-fix later to maint).
   (merge e01ae2a4a7 js/pull-rebase-use-advise later to maint).
   (merge e63d774242 sn/config-doc-typofix later to maint).
   (merge 08e9df2395 jk/multi-line-indent-style-fix later to maint).
   (merge e66590348a da/vs-build-iconv-fix later to maint).
   (merge 7fe07275be js/cmake-extra-built-ins-fix later to maint).
   (merge 633eebe142 jb/midx-doc-update later to maint).
   (merge 5885367e8f jh/index-v2-doc-on-fsmn later to maint).
   (merge 14639a4779 jc/compat-util-setitimer-fix later to maint).
   (merge 56f56ac50b ab/unreachable-break later to maint).
   (merge 731d578b4f rb/nonstop-config-mak-uname-update later to maint).
   (merge f4698738f9 es/perf-export-fix later to maint).

----------------------------------------------------------------

Changes since v2.29.0 are as follows:

Adam Spiers (1):
      hook: add sample template for push-to-checkout

Alex Vandiver (2):
      dir.c: fix comments to agree with argument name
      fsmonitor: use fsmonitor data in `git diff`

Alexey (1):
      completion: fix zsh installation instructions

Amanda Shafack (1):
      t2200,t9832: avoid using 'git' upstream in a pipe

Arnout Engelen (1):
      doc: make HTML manual reproducible

Bradley M. Kuhn (2):
      Documentation: clarify and expand description of --signoff
      Documentation: stylistically normalize references to Signed-off-by:

Caleb Tillman (1):
      t0000: use test_path_is_file instead of "test -f"

Charvi Mendiratta (5):
      t7101,t7102,t7201: modernize test formatting
      t7102,t7201: remove unnecessary blank spaces in test body
      t7102,t7201: remove whitespace after redirect operator
      t7201: use 'git -C' to avoid subshell
      t7201: put each command on a separate line

Chris. Webster (1):
      ci: github action - add check for whitespace errors

Christian Couder (1):
      filter-branch doc: fix filter-repo typo

Daniel Duvall (1):
      upload-pack: allow stateless client EOF just prior to haves

Daniel Gurney (2):
      compat/bswap.h: simplify MSVC endianness detection
      compat/bswap.h: don't assume MSVC is little-endian

David Aguilar (1):
      git-gui: ssh-askpass: add a checkbox to show the input text

Dennis Ameling (1):
      ci(vs-build): stop passing the iconv library location explicitly

Denton Liu (18):
      t4068: remove unnecessary >tmp
      git-diff-index.txt: make --cached description a proper sentence
      git-diff.txt: backtick quote command text
      contrib/completion: extract common diff/difftool options
      diff-lib: accept option flags in run_diff_index()
      diff-lib: define diff_get_merge_base()
      t4068: add --merge-base tests
      builtin/diff-index: learn --merge-base
      builtin/diff-tree: learn --merge-base
      contrib/completion: complete `git diff --merge-base`
      Documentation/config/checkout: replace sq with backticks
      builtin/checkout: fix `git checkout -p HEAD...` bug
      Doc: document "A...B" form for <tree-ish> in checkout and switch
      add-patch: add NEEDSWORK about comparing commits
      t2016: add a NEEDSWORK about the PERL prerequisite
      checkout: learn to respect checkout.guess
      contrib/git-resurrect.sh: indent with tabs
      contrib/git-resurrect.sh: use hash-agnostic OID pattern

Derrick Stolee (28):
      maintenance: add prefetch task
      maintenance: add loose-objects task
      maintenance: create auto condition for loose-objects
      midx: enable core.multiPackIndex by default
      midx: use start_delayed_progress()
      maintenance: add incremental-repack task
      maintenance: auto-size incremental-repack batch
      maintenance: add incremental-repack auto condition
      maintenance: optionally skip --auto process
      maintenance: add --schedule option and config
      for-each-repo: run subcommands on configured repos
      maintenance: add [un]register subcommands
      maintenance: add start/stop subcommands
      maintenance: test commit-graph auto condition
      commit-graph: ignore duplicates when merging layers
      commit-graph: don't write commit-graph when disabled
      maintenance: core.commitGraph=false prevents writes
      maintenance: create maintenance.strategy config
      maintenance: use 'incremental' strategy by default
      maintenance: add troubleshooting guide to docs
      config: convert multi_replace to flags
      config: replace 'value_regex' with 'value_pattern'
      t1300: test "set all" mode with value-pattern
      t1300: add test for --replace-all with value-pattern
      config: add --fixed-value option, un-implemented
      config: plumb --fixed-value into config API
      config: implement --fixed-value with --get*
      maintenance: use 'git config --fixed-value'

Dimitriy Ryazantcev (1):
      git-gui: update Russian translation

Drew DeVault (1):
      help.c: help.autocorrect=never means "do not compute suggestions"

Elijah Newren (37):
      hashmap: add usage documentation explaining hashmap_free[_entries]()
      directory-rename-detection.txt: update references to regression tests
      t6423: more involved directory rename test
      t6423: update directory rename detection tests with new rule
      t6423: more involved rules for renaming directories into each other
      t7518: fix flaky grep invocation
      test-lib: allow selecting tests by substring/glob with --run
      t6006, t6012: adjust tests to use 'setup' instead of synonyms
      test-lib: reduce verbosity of skipped tests
      sequencer: remove duplicate rollback_lock_file() call
      t/: new helper for tests that pass with ort but fail with recursive
      merge tests: expect improved directory/file conflict handling in ort
      t6416: correct expectation for rename/rename(1to2) + directory/file
      t6404, t6423: expect improved rename/delete handling in ort backend
      t6423: expect improved conflict markers labels in the ort backend
      merge tests: expect slight differences in output for recursive vs. ort
      t6423, t6436: note improved ort handling with dirty files
      t6423: note improved ort handling with untracked files
      t6423: add more details about direct resolution of directories
      merge-ort: barebones API of new merge strategy with empty implementation
      merge-ort-wrappers: new convience wrappers to mimic the old merge API
      fast-rebase: demonstrate merge-ort's API via new test-tool command
      hashmap: adjust spacing to fix argument alignment
      hashmap: allow re-use after hashmap_free()
      hashmap: introduce a new hashmap_partial_clear()
      hashmap: provide deallocation function names
      strmap: new utility functions
      merge,rebase,revert: select ort or recursive by config or environment
      strmap: add more utility functions
      strmap: enable faster clearing and reusing of strmaps
      strmap: add functions facilitating use as a string->int map
      strmap: split create_entry() out of strmap_put()
      strmap: add a strset sub-type
      strmap: enable allocations to come from a mem_pool
      strmap: take advantage of FLEXPTR_ALLOC_STR when relevant
      Use new HASHMAP_INIT macro to simplify hashmap initialization
      shortlog: use strset from strmap.h

Emily Shaffer (1):
      MyFirstContribution: clarify asciidoc dependency

Eric Sunshine (1):
      t/perf: fix test_export() failure with BSD `sed`

Felipe Contreras (41):
      completion: zsh: fix __gitcomp_direct()
      completion: zsh: fix name due to broken autoloading
      completion: zsh: fix bash script extension
      completion: zsh: reorganize install instructions
      completion: zsh: fix for directories with spaces
      completion: zsh: update slave script locations
      completion: prompt: fix color for Zsh
      completion: zsh: fix for command aliasing
      completion: bash: synchronize zsh wrapper
      completion: bash: remove zsh wrapper
      completion: zsh: fix completion for --no-.. options
      completion: fix conflict with bashcomp
      completion: zsh: add missing direct_append
      completion: zsh: fix splitting of words
      completion: zsh: simplify compadd functions
      completion: zsh: simplify direct compadd
      completion: zsh: trivial cleanup
      completion: zsh: simplify nl_append
      completion: zsh: simplify file_direct
      completion: zsh: shuffle functions around
      completion: zsh: refactor command completion
      completion: zsh: improve command tags
      completion: zsh: add alias descriptions
      completion: zsh: trivial simplification
      completion: zsh: add simple version check
      completion: bash: trivial cleanup
      completion: bash: cleanup cygwin check
      completion: bash: remove old compat wrappers
      zsh: update copyright notices
      completion: bash: support recursive aliases
      completion: bash: check for alias loop
      completion: bash: improve alias loop detection
      tests: push: improve cleanup of HEAD tests
      tests: push: trivial cleanup
      refspec: make @ a synonym of HEAD
      refspec: trivial cleanup
      .gitignore: remove dangling file
      test: completion: fix typos
      tests: lib-functions: trivial style cleanups
      completion: zsh: fix file completion regression
      completion: bash: fix gitk alias regression

Han-Wen Nienhuys (1):
      move sleep_millisec to git-compat-util.h

Javier Spagnoletti (1):
      userdiff: PHP: catch "abstract" and "final" functions

Jeff Hostetler (1):
      index-format.txt: document v2 format of file system monitor extension

Jeff King (44):
      fast-import: fix over-allocation of marks storage
      usage: define a type for a reporting function
      config.mak.dev: build with -fno-common
      fast-import: remove duplicated option-parsing line
      perl: check for perl warnings while running tests
      t3436: check --committer-date-is-author-date result more carefully
      am: fix broken email with --committer-date-is-author-date
      rebase: fix broken email with --committer-date-is-author-date
      am, sequencer: stop parsing our own committer ident
      test-pkt-line: drop colon from sideband identity
      checkout-index: drop error message from empty --stage=all
      checkout-index: propagate errors to exit code
      sideband: diagnose more sideband anomalies
      format-patch: refactor output selection
      format-patch: tie file-opening logic to output_directory
      format-patch: support --output option
      rev-parse: don't accept options after dashdash
      rev-parse: put all options under the "-" check
      rev-parse: handle --end-of-options
      compute pack .idx byte offsets using size_t
      use size_t to store pack .idx byte offsets
      fsck: correctly compute checksums on idx files larger than 4GB
      block-sha1: take a size_t length parameter
      packfile: detect overflow in .idx file size checks
      repack: make "exts" array available outside cmd_repack()
      send-pack: kill pack-objects helper on signal or exit
      submodule: fix fetch_in_submodule logic
      upload-pack: kill pack-objects helper on signal or exit
      banned.h: mark non-reentrant gmtime, etc as banned
      t7900: speed up expensive test
      gitignore: drop duplicate entry for git-sh-i18n
      banned.h: mark ctime_r() and asctime_r() as banned
      Makefile: mark git-maintenance as a builtin
      upload-pack: propagate return value from object filter config callback
      style: indent multiline "if" conditions to align
      oid-array.h: drop sha1 mention from header guard
      t0064: drop sha1 mention from filename
      t0064: make duplicate tests more robust
      cache.h: move hash/oid functions to hash.h
      oid-array: make sort function public
      oid-array: provide a for-loop iterator
      commit-graph: drop count_distinct_commits() function
      commit-graph: replace packed_oid_list with oid_array
      commit-graph: use size_t for array allocation and indexing

Jiang Xin (3):
      t5411: new helper filter_out_user_friendly_and_stable_output
      receive-pack: gently write messages to proc-receive
      receive-pack: use default version 0 for proc-receive

Jinoh Kang (2):
      diff: allow passing NULL to diff_free_filespec_data()
      t7800: simplify difftool test

Joey Salazar (1):
      t7006: Use test_path_is_* functions in test script

Johannes Berg (1):
      docs: multi-pack-index: remove note about future 'verify' work

Johannes Schindelin (63):
      ci: work around old records of GitHub runs
      ci: make the "skip-if-redundant" check more defensive
      sideband: avoid reporting incomplete sideband messages
      sideband: report unhandled incomplete sideband messages as bugs
      SKIP_DASHED_BUILT_INS: do not skip the bin/ programs
      fmt-merge-msg: also suppress "into main" by default
      t9801: use `--` in preparation for default branch rename
      tests: start moving to a different default main branch name
      t6200: adjust suppression pattern to also match "main"
      t5703: adjust a test case for the upcoming default branch name
      t3200: prepare for `main` being shorter than `master`
      t9902: prepare a test for the upcoming default branch name
      tests: prepare aligned mentions of the default branch name
      t1400: prepare for `main` being default branch name
      t5411: start using the default branch name "main"
      t5411: start adjusting the support files for init.defaultBranch=main
      t5411: adjust the remaining support files for init.defaultBranch=main
      t5411: finish preparing for `main` being the default branch name
      t5515: use `main` as the name of the main branch for testing (part 1)
      t5515: use `main` as the name of the main branch for testing (part 2)
      t5515: use `main` as the name of the main branch for testing (part 3)
      t5515: use `main` as the name of the main branch for testing (conclusion)
      t2402: fix typo
      ci: make the whitespace checker more robust
      tests: consolidate the `file_size` function into `test-lib-functions.sh`
      ci: avoid using the deprecated `set-env` construct
      p4: respect init.defaultBranch
      t1004: insert missing "branch" in a message
      t3406: indent with tabs, not spaces
      t3427: adjust stale comment
      t5400,t5402: consistently indent with tabs, not with spaces
      t5570: remove trailing padding
      t9603: use tabs for indentation
      add -i (built-in): do show an error message for incorrect inputs
      add -i (built-in): send error messages to stderr
      add -p (built-in): imitate `xdl_format_hunk_hdr()` generating hunk headers
      add -i: use `reset_color` consistently
      add -i (built-in): prevent the `reset` "color" from being configured
      add -i (built-in): use correct names to load color.diff.* config
      mergetools/bc: add `bc4` to the alias list for Beyond Compare
      mergetool: avoid letting `list_tool_variants` break user-defined setups
      add -p (built-in): do not color the progress indicator separately
      add -i (built-in): use the same indentation as the Perl version
      add -i (Perl version): color header to match the C version
      add -p: prefer color.diff.context over color.diff.plain
      add -i: verify in the tests that colors can be overridden
      t2106: adjust style to the current conventions
      t2106: make test independent of the current main branch name
      t2106: ensure that the checkout fails for the expected reason
      t3040: remove stale note
      t1309: use a neutral branch name in the `onbranch` test cases
      t4015: let the test pass with any default branch name
      pull: colorize the hint about setting `pull.rebase`
      t3404: do not depend on any specific default branch name
      t5526: avoid depending on a specific default branch name
      t5526: drop the prereq expecting the default branch name `main`
      cmake: determine list of extra built-ins dynamically
      t6300: avoid using the default name of the initial branch
      t7064: avoid relying on a specific default branch name
      init: document `init.defaultBranch` better
      branch -m: allow renaming a yet-unborn branch
      get_default_branch_name(): prepare for showing some advice
      init: provide useful advice about init.defaultBranch

Jonathan Tan (3):
      apply: when -R, also reverse list of sections
      sequencer: tolerate abbreviated stopped-sha file
      usage: add trace2 entry upon warning()

Josh Steadmon (13):
      docs: new capability to advertise session IDs
      docs: new transfer.advertiseSID option
      trace2: add a public function for getting the SID
      upload-pack: advertise session ID in v0 capabilities
      receive-pack: advertise session ID in v0 capabilities
      serve: advertise session ID in v2 capabilities
      transport: log received server session ID
      fetch-pack: advertise session ID in capabilities
      upload-pack, serve: log received client session ID
      send-pack: advertise session ID in capabilities
      receive-pack: log received client session ID
      t7900: fix typo: "test_execpt_success"
      t7900: use --fixed-value in git-maintenance tests

Junio C Hamano (33):
      doc: preparatory clean-up of description on the sign-off option
      SubmittingPatches: clarify DCO is our --signoff rule
      Revert "test_cmp: diagnose incorrect arguments"
      t7102: prepare expected output inside test_expect_* block
      Git 2.29.1
      other small fixes for 2.29.2
      SubmittingPatches: clarify the purpose of the final resend
      First batch
      Git 2.29.2
      Second batch
      Makefile: enable -Wsparse-error for DEVELOPER build
      Third batch
      log: diagnose -L used with pathspec as an error
      doc: clarify that --abbrev=<n> is about the minimum length
      Fourth batch
      format-patch: make output filename configurable
      Fifth batch
      ci: avoid `set-env` construct in print-test-failures.sh
      Sixth batch
      Seventh batch
      MyFirstContribition: answering questions is not the end of the story
      config doc: value-pattern is not necessarily a regexp
      Eighth batch
      Ninth batch
      Revert "submodules: fix of regression on fetching of non-init subsub-repo"
      Tenth batch
      Eleventh batch
      Git 2.30-rc0
      strmap: make callers of strmap_remove() to call it in void context
      compat-util: pretend that stub setitimer() always succeeds
      diff: correct interaction between --exit-code and -I<pattern>
      Another batch before 2.30-rc1
      Git 2.30-rc1

Konrad Borowski (1):
      userdiff: recognize 'macro_rules!' as starting a Rust function block

Kyle Meyer (1):
      stash: add missing space to an error message

Marlon Rac Cambasis (1):
      doc: fixing two trivial typos in Documentation/

Martin Schön (1):
      git-gui: use commit message template

Martin Ågren (5):
      list-objects-filter-options: fix function name in BUG
      grep: don't set up a "default" repo for grep
      grep: use designated initializers for `grep_defaults`
      grep: copy struct in one fell swoop
      MyFirstObjectWalk: drop `init_walken_defaults()`

Matheus Tavares (2):
      worktree: fix order of arguments in error message
      apply: don't use core.sharedRepository to create working tree files

Michał Kępień (2):
      merge-base, xdiff: zero out xpparam_t structures
      diff: add -I<regex> that ignores matching changes

Nate Avers (2):
      notes.c: fix a segfault in notes_display_config()
      t3301: test proper exit response to no-value notes.displayRef.

Nicolas Morey-Chaisemartin (1):
      imap-send: parse default git config

Nipunn Koorapati (17):
      t/perf/README: elaborate on output format
      t/perf/p7519-fsmonitor.sh: warm cache on first git status
      t/perf: add fsmonitor perf test for git diff
      perf lint: add make test-lint to perf tests
      p7519-fsmonitor: refactor to avoid code duplication
      p7519-fsmonitor: add a git add benchmark
      t/perf/fsmonitor: separate one time repo initialization
      t/perf/fsmonitor: move watchman setup to one-time-repo-setup
      t/perf/fsmonitor: improve error message if typoing hook name
      t/perf/fsmonitor: factor description out for readability
      t/perf/fsmonitor: shorten DESC to basename
      t/perf/fsmonitor: silence initial git commit
      t/perf/fsmonitor: factor setup for fsmonitor into function
      t/perf/fsmonitor: initialize test with git reset
      t/perf/fsmonitor: perf comparison of multiple fsmonitor integrations
      t/perf/fsmonitor: add benchmark for dirty status
      perf/fsmonitor: use test_must_be_empty helper

Patrick Steinhardt (4):
      t1400: avoid touching refs on filesystem
      update-ref: allow creation of multiple transactions
      p1400: use `git-update-ref --stdin` to test multiple transactions
      update-ref: disallow "start" for ongoing transactions

Peter Kaestle (1):
      submodules: fix of regression on fetching of non-init subsub-repo

Philippe Blain (14):
      ref-filter: handle CRLF at end-of-line more gracefully
      log, show: add tests for messages containing CRLF
      doc: log, gitk: move '-L' description to 'line-range-options.txt'
      doc: line-range: improve formatting
      blame-options.txt: also mention 'funcname' in '-L' description
      doc: add more pointers to gitattributes(5) for userdiff
      line-log: mention both modes in 'blame' and 'log' short help
      blame: enable funcname blaming with userdiff driver
      blame: simplify 'setup_scoreboard' interface
      blame: simplify 'setup_blame_bloom_data' interface
      pull --rebase: compute rebase arguments in separate function
      t5572: add notes on a peculiar test
      t5572: describe '--rebase' tests a little more
      pull: check for local submodule modifications with the right range

Phillip Wood (4):
      rebase -i: stop overwriting ORIG_HEAD buffer
      rebase -i: use struct object_id rather than looking up commit
      rebase -i: use struct object_id when writing state
      rebase -i: simplify get_revision_ranges()

Pranit Bauva (7):
      bisect--helper: finish porting `bisect_start()` to C
      bisect--helper: retire `--bisect-clean-state` subcommand
      bisect--helper: retire `--next-all` subcommand
      bisect--helper: reimplement `bisect_state` & `bisect_head` shell functions in C
      bisect--helper: retire `--check-expected-revs` subcommand
      bisect--helper: retire `--write-terms` subcommand
      bisect--helper: retire `--bisect-autostart` subcommand

Pratyush Yadav (1):
      git-gui: Only touch GITGUI_MSG when needed

Rafael Silva (2):
      worktree: teach `list` to annotate locked worktree
      maintenance: fix SEGFAULT when no repository

Ramsay Jones (6):
      Documentation/Makefile: conditionally include doc.dep
      Documentation/Makefile: conditionally include ../GIT-VERSION-FILE
      gitweb/Makefile: conditionally include ../GIT-VERSION-FILE
      Makefile: don't try to clean old debian build product
      Makefile: don't use a versioned temp distribution directory
      Makefile: conditionally include GIT-VERSION-FILE

Randall S. Becker (1):
      config.mak.uname: remove old NonStop compatibility settings

René Scharfe (19):
      Makefile: use git init/add/commit/archive for dist-doc
      Makefile: remove the unused variable TAR_DIST_EXTRA_OPTS
      grep: handle deref_tag() returning NULL
      blame: handle deref_tag() returning NULL
      line-log: handle deref_tag() returning NULL
      object: allow clear_commit_marks_all to handle any repo
      bisect: clear flags in passed repository
      stash: simplify reflog emptiness check
      pack-write: use hashwrite_be32() instead of double-buffering array
      archive: support compression levels beyond 9
      blame: silently ignore invalid ignore file objects
      csum-file: add hashwrite_be64()
      midx: use hashwrite_be64()
      pack-write: use hashwrite_be64()
      diff-lib: plug minor memory leaks in do_diff_cache()
      archive: release refname after use
      gc: fix cast in compare_tasks_by_selection()
      fetch-pack: disregard invalid pack lockfiles
      gitignore: remove entry for git serve

Robert Karszniewicz (2):
      git-completion.bash: __git_diff_common_options: add --[no-]patch
      git-completion.bash: stash-show: complete $__git_diff_common_options

SZEDER Gábor (4):
      bisect: loosen halfway() check for a large number of commits
      t5310-pack-bitmaps: skip JGit tests with SHA256
      tests: make sure nested lazy prereqs work reliably
      tests: fix description of 'test_set_prereq'

Samuel Čavoj (3):
      sequencer: fix gpg option passed to merge subcommand
      sequencer: pass explicit --no-gpg-sign to merge
      t3435: add tests for rebase -r GPG signing

Sean Barag (7):
      clone: add tests for --template and some disallowed option pairs
      clone: use more conventional config/option layering
      remote: add tests for add and rename with invalid names
      refs: consolidate remote name validation
      clone: validate --origin option before use
      clone: read new remote name from remote_name instead of option_origin
      clone: allow configurable default for `-o`/`--origin`

Serg Tereshchenko (1):
      git-gui: Fix selected text colors

Sergey Organov (2):
      doc/diff-options: fix out of place mentions of '--patch/-p'
      glossary: improve "branch" definition

Sibo Dong (1):
      git-prompt.sh: localize `option` in __git_ps1_show_upstream

Simão Afonso (1):
      crendential-store: use timeout when locking file

Sohom Datta (1):
      userdiff: expand detected chunk headers for css

Srinidhi Kaushik (3):
      push: add reflog check for "--force-if-includes"
      push: parse and set flag for "--force-if-includes"
      t, doc: update tests, reference for "--force-if-includes"

Stefan Haller (2):
      git-gui: fix colored label backgrounds when using themed widgets
      git-gui: use gray background for inactive text widgets

Taylor Blau (7):
      builtin/repack.c: keep track of what pack-objects wrote
      builtin/repack.c: don't move existing packs out of the way
      packfile.c: protect against disappearing indexes
      midx.c: protect against disappearing packs
      builtin/bugreport.c: use thread-safe localtime_r()
      builtin/clone.c: don't ignore transport_fetch_refs() errors
      upload-pack.c: don't free allowed_filters util pointers

Thomas Koutcher (1):
      credential: load default config

Victor Engmark (1):
      userdiff: support Bash

brian m. carlson (1):
      svn: use correct variable name for short OID

Ævar Arnfjörð Bjarmason (9):
      remote: add meaningful exit code on missing/existing
      config.mak.uname: remove unused the NO_R_TO_GCC_LINKER flag
      config.mak.uname: remove unused NEEDS_SSL_WITH_CURL flag
      submodule: use "fetch" logic instead of custom remote discovery
      submodule: remove sh function in favor of helper
      parse-remote: remove this now-unused library
      gc docs: change --keep-base-pack to --keep-largest-pack
      gc: rename keep_base_pack variable for --keep-largest-pack
      style: do not "break" in switch() after "return"

Đoàn Trần Công Danh (1):
      doc: mention Python 3.x supports

Štěpán Němec (1):
      config.txt: fix a typo (backslash != backquote)


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.30.0-rc0
@ 2020-12-14 20:00  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2020-12-14 20:00 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

An early preview release Git v2.30.0-rc0 is now available for
testing at the usual places.  It is comprised of 413 non-merge
commits since v2.29.0, contributed by 60 people, 25 of which are
new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.30.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.29.0 are as follows.
Welcome to the Git development community!

  Alexey, Amanda Shafack, Bradley M. Kuhn, Caleb Tillman, Charvi
  Mendiratta, Daniel Duvall, Daniel Gurney, Dennis Ameling, Javier
  Spagnoletti, Jinoh Kang, Joey Salazar, Konrad Borowski, Marlon
  Rac Cambasis, Michał Kępień, Nate Avers, Nipunn Koorapati,
  Rafael Silva, Robert Karszniewicz, Samuel Čavoj, Sean Barag,
  Sibo Dong, Simão Afonso, Sohom Datta, Thomas Koutcher, and
  Victor Engmark.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Spiers, Ævar Arnfjörð Bjarmason, Alex Vandiver, Arnout
  Engelen, brian m. carlson, Christian Couder, Chris. Webster,
  Denton Liu, Derrick Stolee, Drew DeVault, Elijah Newren,
  Emily Shaffer, Felipe Contreras, Han-Wen Nienhuys, Jeff King,
  Jiang Xin, Johannes Schindelin, Jonathan Tan, Josh Steadmon,
  Junio C Hamano, Kyle Meyer, Martin Ågren, Matheus Tavares,
  Nicolas Morey-Chaisemartin, Patrick Steinhardt, Peter Kaestle,
  Philippe Blain, Phillip Wood, Pranit Bauva, René Scharfe,
  Sergey Organov, Srinidhi Kaushik, Štěpán Němec, SZEDER
  Gábor, and Taylor Blau.

----------------------------------------------------------------

Git 2.30 Release Notes (draft)
==============================

Updates since v2.29
-------------------

UI, Workflows & Features

 * Userdiff for PHP update.

 * Userdiff for Rust update.

 * Userdiff for CSS update.

 * The command line completion script (in contrib/) learned that "git
   stash show" takes the options "git diff" takes.

 * "git worktree list" now shows if each worktree is locked.  This
   possibly may open us to show other kinds of states in the future.

 * "git maintenance", an extended big brother of "git gc", continues
   to evolve.

 * "git push --force-with-lease[=<ref>]" can easily be misused to lose
   commits unless the user takes good care of their own "git fetch".
   A new option "--force-if-includes" attempts to ensure that what is
   being force-pushed was created after examining the commit at the
   tip of the remote ref that is about to be force-replaced.

 * "git clone" learned clone.defaultremotename configuration variable
   to customize what nickname to use to call the remote the repository
   was cloned from.

 * "git checkout" learned to use checkout.guess configuration variable
   and enable/disable its "--[no-]guess" option accordingly.

 * "git resurrect" script (in contrib/) learned that the object names
   may be longer than 40-hex depending on the hash function in use.

 * "git diff A...B" learned "git diff --merge-base A B", which is a
   longer short-hand to say the same thing.

 * A sample 'push-to-checkout' hook, that performs the same as
   what the built-in default action does, has been added.

 * "git diff" family of commands learned the "-I<regex>" option to
   ignore hunks whose changed lines all match the given pattern.

 * The userdiff pattern learned to identify the function definition in
   POSIX shells and bash.

 * "git checkout-index" did not consistently signal an error with its
   exit status, but now it does.

 * A commit and tag object may have CR at the end of each and
   every line (you can create such an object with hash-object or
   using --cleanup=verbatim to decline the default clean-up
   action), but it would make it impossible to have a blank line
   to separate the title from the body of the message.  We are now
   more lenient and accept a line with lone CR on it as a blank line,
   too.

 * Exit codes from "git remote add" etc. were not usable by scripted
   callers, but now they are.

 * "git archive" now allows compression level higher than "-9"
   when generating tar.gz output.

 * Zsh autocompletion (in contrib/) update.

 * The maximum length of output filenames "git format-patch" creates
   has become configurable (used to be capped at 64).

 * "git rev-parse" learned the "--end-of-options" to help scripts to
   safely take a parameter that is supposed to be a revision, e.g.
   "git rev-parse --verify -q --end-of-options $rev".

 * The command line completion script (in contrib/) learned to expand
   commands that are alias of alias.

 * "git update-ref --stdin" learns to take multiple transactions in a
   single session.

 * Various subcommands of "git config" that takes value_regex
   learn the "--literal-value" option to take the value_regex option
   as a literal string.

 * The transport layer was taught to optionally exchange the session
   ID assigned by the trace2 subsystem during fetch/push transactions.

 * "git imap-send" used to ignore configuration variables like
   core.askpass; this has been corrected.

 * "git $cmd $args", when $cmd is not a recognised subcommand, by
   default tries to see if $cmd is a typo of an existing subcommand
   and optionally executes the corrected command if there is only one
   possibility, depending on the setting of help.autocorrect; the
   users can now disable the whole thing, including the cycles spent
   to find a likely typo, by setting the configuration variable to
   'never'.

 * "@" sometimes worked (e.g. "git push origin @:there") as a part of
   a refspec element, but "git push origin @" did not work, which has
   been corrected.


Performance, Internal Implementation, Development Support etc.

 * Use "git archive" more to produce the release tarball.

 * GitHub Actions automated test improvement to skip tests on a tree
   identical to what has already been tested.

 * Test-coverage for running commit-graph task "git maintenance" has
   been extended.

 * Our test scripts can be told to run only individual pieces while
   skipping others with the "--run=..." option; they were taught to
   take a substring of test title, in addition to numbers, to name the
   test pieces to run.

 * Adjust tests so that they won't scream when the default initial
   branch name is changed to 'main'.

 * Rewriting "git bisect" in C continues.

 * More preliminary tests have been added to document desired outcome
   of various "directory rename" situations.

 * Micro clean-up of a couple of test scripts.

 * "git diff" and other commands that share the same machinery to
   compare with working tree files have been taught to take advantage
   of the fsmonitor data when available.

 * The code to detect premature EOF in the sideband demultiplexer has
   been cleaned up.

 * Test scripts are being prepared to transition of the default branch
   name to 'main'.

 * "git fetch --depth=<n>" over the stateless RPC / smart HTTP
   transport handled EOF from the client poorly at the server end.

 * A specialization of hashmap that uses a string as key has been
   introduced.  Hopefully it will see wider use over time.

 * "git bisect start/next" in a large span of history spends a lot of
   time trying to come up with exactly the half-way point; this can be
   optimized by stopping when we see a commit that is close enough to
   the half-way point.

 * A lazily defined test prerequisite can now be defined in terms of
   another lazily defined test prerequisite.

 * Expectation for the original contributor after responding to a
   review comment to use the explanation in a patch update has been
   described.

 * Multiple "credential-store" backends can race to lock the same
   file, causing everybody else but one to fail---reattempt locking
   with some timeout to reduce the rate of the failure.

 * "git-parse-remote" shell script library outlived its usefulness.

 * Like die() and error(), a call to warning() will also trigger a
   trace2 event.

 * Use of non-reentrant localtime() has been removed.

 * Non-reentrant time-related library functions and ctime/asctime with
   awkward calling interfaces are banned from the codebase.


Fixes since v2.29
-----------------

 * In 2.29, "--committer-date-is-author-date" option of "rebase" and
   "am" subcommands lost the e-mail address by mistake, which has been
   corrected.
   (merge 5f35edd9d7 jk/committer-date-is-author-date-fix later to maint).

 * "git checkout -p A...B [-- <path>]" did not work, even though the
   same command without "-p" correctly used the merge-base between
   commits A and B.
   (merge 35166b1fb5 dl/checkout-p-merge-base later to maint).

 * The side-band status report can be sent at the same time as the
   primary payload multiplexed, but the demultiplexer on the receiving
   end incorrectly split a single status report into two, which has
   been corrected.
   (merge 712b0377db js/avoid-split-sideband-message later to maint).

 * "git fast-import" wasted a lot of memory when many marks were in use.
   (merge 3f018ec716 jk/fast-import-marks-alloc-fix later to maint).

 * A test helper "test_cmp A B" was taught to diagnose missing files A
   or B as a bug in test, but some tests legitimately wanted to notice
   a failure to even create file B as an error, in addition to leaving
   the expected result in it, and were misdiagnosed as a bug.  This
   has been corrected.
   (merge 262d5ad5a5 es/test-cmp-typocatcher later to maint).

 * When "git commit-graph" detects the same commit recorded more than
   once while it is merging the layers, it used to die.  The code now
   ignores all but one of them and continues.
   (merge 85102ac71b ds/commit-graph-merging-fix later to maint).

 * The meaning of a Signed-off-by trailer can vary from project to
   project; this and also what it means to this project has been
   clarified in the documentation.
   (merge 3abd4a67d9 bk/sob-dco later to maint).

 * "git credential' didn't honor the core.askPass configuration
   variable (among other things), which has been corrected.
   (merge 567ad2c0f9 tk/credential-config later to maint).

 * Dev support to catch a tentative definition of a variable in our C
   code as an error.
   (merge 5539183622 jk/no-common later to maint).

 * "git rebase --rebase-merges" did not correctly pass --gpg-sign
   command line option to underlying "git merge" when replaying a merge
   using non-default merge strategy or when replaying an octopus merge
   (because replaying a two-head merge with the default strategy was
   done in a separate codepath, the problem did not trigger for most
   users), which has been corrected.
   (merge 43ad4f2eca sc/sequencer-gpg-octopus later to maint).

 * "git apply -R" did not handle patches that touch the same path
   twice correctly, which has been corrected.  This is most relevant
   in a patch that changes a path from a regular file to a symbolic
   link (and vice versa).
   (merge b0f266de11 jt/apply-reverse-twice later to maint).

 * A recent oid->hash conversion missed one spot, breaking "git svn".
   (merge 03bb366de4 bc/svn-hash-oid-fix later to maint).

 * The documentation on the "--abbrev=<n>" option did not say the
   output may be longer than "<n>" hexdigits, which has been
   clarified.
   (merge cda34e0d0c jc/abbrev-doc later to maint).

 * "git p4" now honors init.defaultBranch configuration.
   (merge 1b09d1917f js/p4-default-branch later to maint).

 * Recently the format of an internal state file "rebase -i" uses has
   been tightened up for consistency, which would hurt those who start
   "rebase -i" with old git and then continue with new git.  Loosen
   the reader side a bit (which we may want to tighten again in a year
   or so).
   (merge c779386182 jc/sequencer-stopped-sha-simplify later to maint).

 * The code to see if "git stash drop" can safely remove refs/stash
   has been made more carerful.
   (merge 4f44c5659b rs/empty-reflog-check-fix later to maint).

 * "git log -L<range>:<path>" is documented to take no pathspec, but
   this was not enforced by the command line option parser, which has
   been corrected.
   (merge 39664cb0ac jc/line-log-takes-no-pathspec later to maint).

 * "git format-patch --output=there" did not work as expected and
   instead crashed.  The option is now supported.
   (merge dc1672dd10 jk/format-patch-output later to maint).

 * Define ARM64 compiled with MSVC to be little-endian.
   (merge 0c038fc65a dg/bswap-msvc later to maint).

 * "git rebase -i" did not store ORIG_HEAD correctly.
   (merge 8843302307 pw/rebase-i-orig-head later to maint).

 * "git blame -L :funcname -- path" did not work well for a path for
   which a userdiff driver is defined.

 * "make DEVELOPER=1 sparse" used to run sparse and let it emit
   warnings; now such warnings will cause an error.
   (merge 521dc56270 jc/sparse-error-for-developer-build later to maint).

 * "git blame --ignore-revs-file=<file>" learned to ignore a
   non-existent object name in the input, instead of complaining.
   (merge c714d05875 jc/blame-ignore-fix later to maint).

 * Running "git diff" while allowing external diff in a state with
   unmerged paths used to segfault, which has been corrected.
   (merge d66851806f jk/diff-release-filespec-fix later to maint).

 * Build configuration cleanup.
   (merge b990f02fd8 ab/config-mak-uname-simplify later to maint).

 * Fix regression introduced when nvimdiff support in mergetool was added.
   (merge 12026f46e7 pd/mergetool-nvimdiff later to maint).

 * The exchange between receive-pack and proc-receive hook did not
   carefully check for errors.

 * The code was not prepared to deal with pack .idx file that is
   larger than 4GB.
   (merge 81c4c5cf2e jk/4gb-idx later to maint).

 * Since jgit does not yet work with SHA-256 repositories, mark the
   tests that uses it not to run unless we are testing with ShA-1
   repositories.
   (merge ea699b4adc sg/t5310-jgit-wants-sha1 later to maint).

 * Config parser fix for "git notes".
   (merge 45fef1599a na/notes-displayref-is-not-boolean later to maint).

 * Move a definition of compatibility wrapper from cache.h to
   git-compat-util.h
   (merge a76b138daa hn/sleep-millisec-decl later to maint).

 * Error message fix.
   (merge eaf5341538 km/stash-error-message-fix later to maint).

 * "git pull --rebase --recurse-submodules" checked for local changes
   in a wrong range and failed to run correctly when it should.
   (merge 5176f20ffe pb/pull-rebase-recurse-submodules later to maint).

 * "git push" that is killed may leave a pack-objects process behind,
   still computing to find a good compression, wasting cycles.  This
   has been corrected.
   (merge 8b59935114 jk/stop-pack-objects-when-push-is-killed later to maint).

 * "git fetch" that is killed may leave a pack-objects process behind,
   still computing to find a good compression, wasting cycles.  This
   has been corrected.
   (merge 309a4028e7 jk/stop-pack-objects-when-fetch-is-killed later to maint).

 * "git add -i" failed to honor custom colors configured to show
   patches, which has been corrected.
   (merge 96386faa03 js/add-i-color-fix later to maint).

 * Processes that access packdata while the .idx file gets removed
   (e.g. while repacking) did not fail or fall back gracefully as they
   could.
   (merge 506ec2fbda tb/idx-midx-race-fix later to maint).

 * "git apply" adjusted the permission bits of working-tree files and
   directories according core.sharedRepository setting by mistake and
   for a long time, which has been corrected.
   (merge eb3c027e17 mt/do-not-use-scld-in-working-tree later to maint).

 * "fetch-pack" could pass NULL pointer to unlink(2) when it sees an
   invalid filename; the error checking has been tightened to make
   this impossible.
   (merge 6031af387e rs/fetch-pack-invalid-lockfile later to maint).

 * "git maintenance run/start/stop" needed to be run in a repository
   to hold the lockfile they use, but didn't make sure they are
   actually in a repository, which has been corrected.

 * The glossary described a branch as an "active" line of development,
   which is misleading---a stale and non-moving branch is still a
   branch.
   (merge eef1ceabd8 so/glossary-branch-is-not-necessarily-active later to maint).

 * Newer versions of xsltproc can assign IDs in HTML documents it
   generates in a consistent manner.  Use the feature to help format
   HTML version of the user manual reproducibly.
   (merge 3569e11d69 ae/doc-reproducible-html later to maint).

 * Tighten error checking in the codepath that responds to "git fetch".
   (merge d43a21bdbb jk/check-config-parsing-error-in-upload-pack later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 3e0a5dc9af cc/doc-filter-branch-typofix later to maint).
   (merge 32c83afc2c cw/ci-ghwf-check-ws-errors later to maint).
   (merge 5eb2ed691b rs/tighten-callers-of-deref-tag later to maint).
   (merge 6db29ab213 jk/fast-import-marks-cleanup later to maint).
   (merge e5cf6d3df4 nk/dir-c-comment-update later to maint).
   (merge 5710dcce74 jk/report-fn-typedef later to maint).
   (merge 9a82db1056 en/sequencer-rollback-lock-cleanup later to maint).
   (merge 4e1bee9a99 js/t7006-cleanup later to maint).
   (merge f5bcde6c58 es/tutorial-mention-asciidoc-early later to maint).
   (merge 714d491af0 so/format-patch-doc-on-default-diff-format later to maint).
   (merge 0795df4b9b rs/clear-commit-marks-in-repo later to maint).
   (merge 9542d56379 sd/prompt-local-variable later to maint).
   (merge 06d43fad18 rs/pack-write-hashwrite-simplify later to maint).
   (merge b7e20b4373 mc/typofix later to maint).
   (merge f6bcd9a8a4 js/test-whitespace-fixes later to maint).
   (merge 53b67a801b js/test-file-size later to maint).
   (merge 970909c2a7 rs/hashwrite-be64 later to maint).
   (merge 5a923bb1f0 ma/list-object-filter-opt-msgfix later to maint).
   (merge 1c3e412916 rs/archive-plug-leak-refname later to maint).
   (merge d44e5267ea rs/plug-diff-cache-leak later to maint).
   (merge 793c1464d3 ab/gc-keep-base-option later to maint).
   (merge b86339b12b mt/worktree-error-message-fix later to maint).
   (merge e01ae2a4a7 js/pull-rebase-use-advise later to maint).
   (merge e63d774242 sn/config-doc-typofix later to maint).
   (merge 08e9df2395 jk/multi-line-indent-style-fix later to maint).
   (merge e66590348a da/vs-build-iconv-fix later to maint).
   (merge 7fe07275be js/cmake-extra-built-ins-fix later to maint).

----------------------------------------------------------------

Changes since v2.29.0 are as follows:

Adam Spiers (1):
      hook: add sample template for push-to-checkout

Alex Vandiver (2):
      dir.c: fix comments to agree with argument name
      fsmonitor: use fsmonitor data in `git diff`

Alexey (1):
      completion: fix zsh installation instructions

Amanda Shafack (1):
      t2200,t9832: avoid using 'git' upstream in a pipe

Arnout Engelen (1):
      doc: make HTML manual reproducible

Bradley M. Kuhn (2):
      Documentation: clarify and expand description of --signoff
      Documentation: stylistically normalize references to Signed-off-by:

Caleb Tillman (1):
      t0000: use test_path_is_file instead of "test -f"

Charvi Mendiratta (5):
      t7101,t7102,t7201: modernize test formatting
      t7102,t7201: remove unnecessary blank spaces in test body
      t7102,t7201: remove whitespace after redirect operator
      t7201: use 'git -C' to avoid subshell
      t7201: put each command on a separate line

Chris. Webster (1):
      ci: github action - add check for whitespace errors

Christian Couder (1):
      filter-branch doc: fix filter-repo typo

Daniel Duvall (1):
      upload-pack: allow stateless client EOF just prior to haves

Daniel Gurney (2):
      compat/bswap.h: simplify MSVC endianness detection
      compat/bswap.h: don't assume MSVC is little-endian

Dennis Ameling (1):
      ci(vs-build): stop passing the iconv library location explicitly

Denton Liu (18):
      t4068: remove unnecessary >tmp
      git-diff-index.txt: make --cached description a proper sentence
      git-diff.txt: backtick quote command text
      contrib/completion: extract common diff/difftool options
      diff-lib: accept option flags in run_diff_index()
      diff-lib: define diff_get_merge_base()
      t4068: add --merge-base tests
      builtin/diff-index: learn --merge-base
      builtin/diff-tree: learn --merge-base
      contrib/completion: complete `git diff --merge-base`
      Documentation/config/checkout: replace sq with backticks
      builtin/checkout: fix `git checkout -p HEAD...` bug
      Doc: document "A...B" form for <tree-ish> in checkout and switch
      add-patch: add NEEDSWORK about comparing commits
      t2016: add a NEEDSWORK about the PERL prerequisite
      checkout: learn to respect checkout.guess
      contrib/git-resurrect.sh: indent with tabs
      contrib/git-resurrect.sh: use hash-agnostic OID pattern

Derrick Stolee (28):
      maintenance: add prefetch task
      maintenance: add loose-objects task
      maintenance: create auto condition for loose-objects
      midx: enable core.multiPackIndex by default
      midx: use start_delayed_progress()
      maintenance: add incremental-repack task
      maintenance: auto-size incremental-repack batch
      maintenance: add incremental-repack auto condition
      maintenance: optionally skip --auto process
      maintenance: add --schedule option and config
      for-each-repo: run subcommands on configured repos
      maintenance: add [un]register subcommands
      maintenance: add start/stop subcommands
      maintenance: test commit-graph auto condition
      commit-graph: ignore duplicates when merging layers
      commit-graph: don't write commit-graph when disabled
      maintenance: core.commitGraph=false prevents writes
      maintenance: create maintenance.strategy config
      maintenance: use 'incremental' strategy by default
      maintenance: add troubleshooting guide to docs
      config: convert multi_replace to flags
      config: replace 'value_regex' with 'value_pattern'
      t1300: test "set all" mode with value-pattern
      t1300: add test for --replace-all with value-pattern
      config: add --fixed-value option, un-implemented
      config: plumb --fixed-value into config API
      config: implement --fixed-value with --get*
      maintenance: use 'git config --fixed-value'

Drew DeVault (1):
      help.c: help.autocorrect=never means "do not compute suggestions"

Elijah Newren (37):
      hashmap: add usage documentation explaining hashmap_free[_entries]()
      directory-rename-detection.txt: update references to regression tests
      t6423: more involved directory rename test
      t6423: update directory rename detection tests with new rule
      t6423: more involved rules for renaming directories into each other
      t7518: fix flaky grep invocation
      test-lib: allow selecting tests by substring/glob with --run
      t6006, t6012: adjust tests to use 'setup' instead of synonyms
      test-lib: reduce verbosity of skipped tests
      sequencer: remove duplicate rollback_lock_file() call
      t/: new helper for tests that pass with ort but fail with recursive
      merge tests: expect improved directory/file conflict handling in ort
      t6416: correct expectation for rename/rename(1to2) + directory/file
      t6404, t6423: expect improved rename/delete handling in ort backend
      t6423: expect improved conflict markers labels in the ort backend
      merge tests: expect slight differences in output for recursive vs. ort
      t6423, t6436: note improved ort handling with dirty files
      t6423: note improved ort handling with untracked files
      t6423: add more details about direct resolution of directories
      merge-ort: barebones API of new merge strategy with empty implementation
      merge-ort-wrappers: new convience wrappers to mimic the old merge API
      fast-rebase: demonstrate merge-ort's API via new test-tool command
      hashmap: adjust spacing to fix argument alignment
      hashmap: allow re-use after hashmap_free()
      hashmap: introduce a new hashmap_partial_clear()
      hashmap: provide deallocation function names
      strmap: new utility functions
      merge,rebase,revert: select ort or recursive by config or environment
      strmap: add more utility functions
      strmap: enable faster clearing and reusing of strmaps
      strmap: add functions facilitating use as a string->int map
      strmap: split create_entry() out of strmap_put()
      strmap: add a strset sub-type
      strmap: enable allocations to come from a mem_pool
      strmap: take advantage of FLEXPTR_ALLOC_STR when relevant
      Use new HASHMAP_INIT macro to simplify hashmap initialization
      shortlog: use strset from strmap.h

Emily Shaffer (1):
      MyFirstContribution: clarify asciidoc dependency

Felipe Contreras (41):
      completion: zsh: fix __gitcomp_direct()
      completion: zsh: fix name due to broken autoloading
      completion: zsh: fix bash script extension
      completion: zsh: reorganize install instructions
      completion: zsh: fix for directories with spaces
      completion: zsh: update slave script locations
      completion: prompt: fix color for Zsh
      completion: zsh: fix for command aliasing
      completion: bash: synchronize zsh wrapper
      completion: bash: remove zsh wrapper
      completion: zsh: fix completion for --no-.. options
      completion: fix conflict with bashcomp
      completion: zsh: add missing direct_append
      completion: zsh: fix splitting of words
      completion: zsh: simplify compadd functions
      completion: zsh: simplify direct compadd
      completion: zsh: trivial cleanup
      completion: zsh: simplify nl_append
      completion: zsh: simplify file_direct
      completion: zsh: shuffle functions around
      completion: zsh: refactor command completion
      completion: zsh: improve command tags
      completion: zsh: add alias descriptions
      completion: zsh: trivial simplification
      completion: zsh: add simple version check
      completion: bash: trivial cleanup
      completion: bash: cleanup cygwin check
      completion: bash: remove old compat wrappers
      zsh: update copyright notices
      completion: bash: support recursive aliases
      completion: bash: check for alias loop
      completion: bash: improve alias loop detection
      tests: push: improve cleanup of HEAD tests
      tests: push: trivial cleanup
      refspec: make @ a synonym of HEAD
      refspec: trivial cleanup
      .gitignore: remove dangling file
      test: completion: fix typos
      tests: lib-functions: trivial style cleanups
      completion: zsh: fix file completion regression
      completion: bash: fix gitk alias regression

Han-Wen Nienhuys (1):
      move sleep_millisec to git-compat-util.h

Javier Spagnoletti (1):
      userdiff: PHP: catch "abstract" and "final" functions

Jeff King (35):
      fast-import: fix over-allocation of marks storage
      usage: define a type for a reporting function
      config.mak.dev: build with -fno-common
      fast-import: remove duplicated option-parsing line
      perl: check for perl warnings while running tests
      t3436: check --committer-date-is-author-date result more carefully
      am: fix broken email with --committer-date-is-author-date
      rebase: fix broken email with --committer-date-is-author-date
      am, sequencer: stop parsing our own committer ident
      test-pkt-line: drop colon from sideband identity
      checkout-index: drop error message from empty --stage=all
      checkout-index: propagate errors to exit code
      sideband: diagnose more sideband anomalies
      format-patch: refactor output selection
      format-patch: tie file-opening logic to output_directory
      format-patch: support --output option
      rev-parse: don't accept options after dashdash
      rev-parse: put all options under the "-" check
      rev-parse: handle --end-of-options
      compute pack .idx byte offsets using size_t
      use size_t to store pack .idx byte offsets
      fsck: correctly compute checksums on idx files larger than 4GB
      block-sha1: take a size_t length parameter
      packfile: detect overflow in .idx file size checks
      repack: make "exts" array available outside cmd_repack()
      send-pack: kill pack-objects helper on signal or exit
      submodule: fix fetch_in_submodule logic
      upload-pack: kill pack-objects helper on signal or exit
      banned.h: mark non-reentrant gmtime, etc as banned
      t7900: speed up expensive test
      gitignore: drop duplicate entry for git-sh-i18n
      banned.h: mark ctime_r() and asctime_r() as banned
      Makefile: mark git-maintenance as a builtin
      upload-pack: propagate return value from object filter config callback
      style: indent multiline "if" conditions to align

Jiang Xin (3):
      t5411: new helper filter_out_user_friendly_and_stable_output
      receive-pack: gently write messages to proc-receive
      receive-pack: use default version 0 for proc-receive

Jinoh Kang (2):
      diff: allow passing NULL to diff_free_filespec_data()
      t7800: simplify difftool test

Joey Salazar (1):
      t7006: Use test_path_is_* functions in test script

Johannes Schindelin (57):
      ci: work around old records of GitHub runs
      ci: make the "skip-if-redundant" check more defensive
      sideband: avoid reporting incomplete sideband messages
      sideband: report unhandled incomplete sideband messages as bugs
      SKIP_DASHED_BUILT_INS: do not skip the bin/ programs
      fmt-merge-msg: also suppress "into main" by default
      t9801: use `--` in preparation for default branch rename
      tests: start moving to a different default main branch name
      t6200: adjust suppression pattern to also match "main"
      t5703: adjust a test case for the upcoming default branch name
      t3200: prepare for `main` being shorter than `master`
      t9902: prepare a test for the upcoming default branch name
      tests: prepare aligned mentions of the default branch name
      t1400: prepare for `main` being default branch name
      t5411: start using the default branch name "main"
      t5411: start adjusting the support files for init.defaultBranch=main
      t5411: adjust the remaining support files for init.defaultBranch=main
      t5411: finish preparing for `main` being the default branch name
      t5515: use `main` as the name of the main branch for testing (part 1)
      t5515: use `main` as the name of the main branch for testing (part 2)
      t5515: use `main` as the name of the main branch for testing (part 3)
      t5515: use `main` as the name of the main branch for testing (conclusion)
      t2402: fix typo
      ci: make the whitespace checker more robust
      tests: consolidate the `file_size` function into `test-lib-functions.sh`
      ci: avoid using the deprecated `set-env` construct
      p4: respect init.defaultBranch
      t1004: insert missing "branch" in a message
      t3406: indent with tabs, not spaces
      t3427: adjust stale comment
      t5400,t5402: consistently indent with tabs, not with spaces
      t5570: remove trailing padding
      t9603: use tabs for indentation
      add -i (built-in): do show an error message for incorrect inputs
      add -i (built-in): send error messages to stderr
      add -p (built-in): imitate `xdl_format_hunk_hdr()` generating hunk headers
      add -i: use `reset_color` consistently
      add -i (built-in): prevent the `reset` "color" from being configured
      add -i (built-in): use correct names to load color.diff.* config
      mergetools/bc: add `bc4` to the alias list for Beyond Compare
      mergetool: avoid letting `list_tool_variants` break user-defined setups
      add -p (built-in): do not color the progress indicator separately
      add -i (built-in): use the same indentation as the Perl version
      add -i (Perl version): color header to match the C version
      add -p: prefer color.diff.context over color.diff.plain
      add -i: verify in the tests that colors can be overridden
      t2106: adjust style to the current conventions
      t2106: make test independent of the current main branch name
      t2106: ensure that the checkout fails for the expected reason
      t3040: remove stale note
      t1309: use a neutral branch name in the `onbranch` test cases
      t4015: let the test pass with any default branch name
      pull: colorize the hint about setting `pull.rebase`
      t3404: do not depend on any specific default branch name
      t5526: avoid depending on a specific default branch name
      t5526: drop the prereq expecting the default branch name `main`
      cmake: determine list of extra built-ins dynamically

Jonathan Tan (3):
      apply: when -R, also reverse list of sections
      sequencer: tolerate abbreviated stopped-sha file
      usage: add trace2 entry upon warning()

Josh Steadmon (12):
      docs: new capability to advertise session IDs
      docs: new transfer.advertiseSID option
      trace2: add a public function for getting the SID
      upload-pack: advertise session ID in v0 capabilities
      receive-pack: advertise session ID in v0 capabilities
      serve: advertise session ID in v2 capabilities
      transport: log received server session ID
      fetch-pack: advertise session ID in capabilities
      upload-pack, serve: log received client session ID
      send-pack: advertise session ID in capabilities
      receive-pack: log received client session ID
      t7900: fix typo: "test_execpt_success"

Junio C Hamano (28):
      doc: preparatory clean-up of description on the sign-off option
      SubmittingPatches: clarify DCO is our --signoff rule
      Revert "test_cmp: diagnose incorrect arguments"
      t7102: prepare expected output inside test_expect_* block
      Git 2.29.1
      other small fixes for 2.29.2
      SubmittingPatches: clarify the purpose of the final resend
      First batch
      Git 2.29.2
      Second batch
      Makefile: enable -Wsparse-error for DEVELOPER build
      Third batch
      log: diagnose -L used with pathspec as an error
      doc: clarify that --abbrev=<n> is about the minimum length
      Fourth batch
      format-patch: make output filename configurable
      Fifth batch
      ci: avoid `set-env` construct in print-test-failures.sh
      Sixth batch
      Seventh batch
      MyFirstContribition: answering questions is not the end of the story
      config doc: value-pattern is not necessarily a regexp
      Eighth batch
      Ninth batch
      Revert "submodules: fix of regression on fetching of non-init subsub-repo"
      Tenth batch
      Eleventh batch
      Git 2.30-rc0

Konrad Borowski (1):
      userdiff: recognize 'macro_rules!' as starting a Rust function block

Kyle Meyer (1):
      stash: add missing space to an error message

Marlon Rac Cambasis (1):
      doc: fixing two trivial typos in Documentation/

Martin Ågren (5):
      list-objects-filter-options: fix function name in BUG
      grep: don't set up a "default" repo for grep
      grep: use designated initializers for `grep_defaults`
      grep: copy struct in one fell swoop
      MyFirstObjectWalk: drop `init_walken_defaults()`

Matheus Tavares (2):
      worktree: fix order of arguments in error message
      apply: don't use core.sharedRepository to create working tree files

Michał Kępień (2):
      merge-base, xdiff: zero out xpparam_t structures
      diff: add -I<regex> that ignores matching changes

Nate Avers (2):
      notes.c: fix a segfault in notes_display_config()
      t3301: test proper exit response to no-value notes.displayRef.

Nicolas Morey-Chaisemartin (1):
      imap-send: parse default git config

Nipunn Koorapati (17):
      t/perf/README: elaborate on output format
      t/perf/p7519-fsmonitor.sh: warm cache on first git status
      t/perf: add fsmonitor perf test for git diff
      perf lint: add make test-lint to perf tests
      p7519-fsmonitor: refactor to avoid code duplication
      p7519-fsmonitor: add a git add benchmark
      t/perf/fsmonitor: separate one time repo initialization
      t/perf/fsmonitor: move watchman setup to one-time-repo-setup
      t/perf/fsmonitor: improve error message if typoing hook name
      t/perf/fsmonitor: factor description out for readability
      t/perf/fsmonitor: shorten DESC to basename
      t/perf/fsmonitor: silence initial git commit
      t/perf/fsmonitor: factor setup for fsmonitor into function
      t/perf/fsmonitor: initialize test with git reset
      t/perf/fsmonitor: perf comparison of multiple fsmonitor integrations
      t/perf/fsmonitor: add benchmark for dirty status
      perf/fsmonitor: use test_must_be_empty helper

Patrick Steinhardt (4):
      t1400: avoid touching refs on filesystem
      update-ref: allow creation of multiple transactions
      p1400: use `git-update-ref --stdin` to test multiple transactions
      update-ref: disallow "start" for ongoing transactions

Peter Kaestle (1):
      submodules: fix of regression on fetching of non-init subsub-repo

Philippe Blain (14):
      ref-filter: handle CRLF at end-of-line more gracefully
      log, show: add tests for messages containing CRLF
      doc: log, gitk: move '-L' description to 'line-range-options.txt'
      doc: line-range: improve formatting
      blame-options.txt: also mention 'funcname' in '-L' description
      doc: add more pointers to gitattributes(5) for userdiff
      line-log: mention both modes in 'blame' and 'log' short help
      blame: enable funcname blaming with userdiff driver
      blame: simplify 'setup_scoreboard' interface
      blame: simplify 'setup_blame_bloom_data' interface
      pull --rebase: compute rebase arguments in separate function
      t5572: add notes on a peculiar test
      t5572: describe '--rebase' tests a little more
      pull: check for local submodule modifications with the right range

Phillip Wood (4):
      rebase -i: stop overwriting ORIG_HEAD buffer
      rebase -i: use struct object_id rather than looking up commit
      rebase -i: use struct object_id when writing state
      rebase -i: simplify get_revision_ranges()

Pranit Bauva (7):
      bisect--helper: finish porting `bisect_start()` to C
      bisect--helper: retire `--bisect-clean-state` subcommand
      bisect--helper: retire `--next-all` subcommand
      bisect--helper: reimplement `bisect_state` & `bisect_head` shell functions in C
      bisect--helper: retire `--check-expected-revs` subcommand
      bisect--helper: retire `--write-terms` subcommand
      bisect--helper: retire `--bisect-autostart` subcommand

Rafael Silva (2):
      worktree: teach `list` to annotate locked worktree
      maintenance: fix SEGFAULT when no repository

René Scharfe (19):
      Makefile: use git init/add/commit/archive for dist-doc
      Makefile: remove the unused variable TAR_DIST_EXTRA_OPTS
      grep: handle deref_tag() returning NULL
      blame: handle deref_tag() returning NULL
      line-log: handle deref_tag() returning NULL
      object: allow clear_commit_marks_all to handle any repo
      bisect: clear flags in passed repository
      stash: simplify reflog emptiness check
      pack-write: use hashwrite_be32() instead of double-buffering array
      archive: support compression levels beyond 9
      blame: silently ignore invalid ignore file objects
      csum-file: add hashwrite_be64()
      midx: use hashwrite_be64()
      pack-write: use hashwrite_be64()
      diff-lib: plug minor memory leaks in do_diff_cache()
      archive: release refname after use
      gc: fix cast in compare_tasks_by_selection()
      fetch-pack: disregard invalid pack lockfiles
      gitignore: remove entry for git serve

Robert Karszniewicz (2):
      git-completion.bash: __git_diff_common_options: add --[no-]patch
      git-completion.bash: stash-show: complete $__git_diff_common_options

SZEDER Gábor (4):
      bisect: loosen halfway() check for a large number of commits
      t5310-pack-bitmaps: skip JGit tests with SHA256
      tests: make sure nested lazy prereqs work reliably
      tests: fix description of 'test_set_prereq'

Samuel Čavoj (3):
      sequencer: fix gpg option passed to merge subcommand
      sequencer: pass explicit --no-gpg-sign to merge
      t3435: add tests for rebase -r GPG signing

Sean Barag (7):
      clone: add tests for --template and some disallowed option pairs
      clone: use more conventional config/option layering
      remote: add tests for add and rename with invalid names
      refs: consolidate remote name validation
      clone: validate --origin option before use
      clone: read new remote name from remote_name instead of option_origin
      clone: allow configurable default for `-o`/`--origin`

Sergey Organov (2):
      doc/diff-options: fix out of place mentions of '--patch/-p'
      glossary: improve "branch" definition

Sibo Dong (1):
      git-prompt.sh: localize `option` in __git_ps1_show_upstream

Simão Afonso (1):
      crendential-store: use timeout when locking file

Sohom Datta (1):
      userdiff: expand detected chunk headers for css

Srinidhi Kaushik (3):
      push: add reflog check for "--force-if-includes"
      push: parse and set flag for "--force-if-includes"
      t, doc: update tests, reference for "--force-if-includes"

Taylor Blau (5):
      builtin/repack.c: keep track of what pack-objects wrote
      builtin/repack.c: don't move existing packs out of the way
      packfile.c: protect against disappearing indexes
      midx.c: protect against disappearing packs
      builtin/bugreport.c: use thread-safe localtime_r()

Thomas Koutcher (1):
      credential: load default config

Victor Engmark (1):
      userdiff: support Bash

brian m. carlson (1):
      svn: use correct variable name for short OID

Ævar Arnfjörð Bjarmason (8):
      remote: add meaningful exit code on missing/existing
      config.mak.uname: remove unused the NO_R_TO_GCC_LINKER flag
      config.mak.uname: remove unused NEEDS_SSL_WITH_CURL flag
      submodule: use "fetch" logic instead of custom remote discovery
      submodule: remove sh function in favor of helper
      parse-remote: remove this now-unused library
      gc docs: change --keep-base-pack to --keep-largest-pack
      gc: rename keep_base_pack variable for --keep-largest-pack

Štěpán Němec (1):
      config.txt: fix a typo (backslash != backquote)


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.29.0
@ 2020-10-19 18:13  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2020-10-19 18:13 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

The latest feature release Git v2.29.0 is now available at the
usual places.  It is comprised of 627 non-merge commits since
v2.28.0, contributed by 89 people, 24 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.29.0'
tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.28.0 are as follows.
Welcome to the Git development community!

  Aaron Lipman, Adrian Moennich, Ákos Uzonyi, Antti Keränen,
  Christian Schlack, Conor Davis, Daniel Santos, Eric Huber, Evan
  Gates, Han Xin, Hugo Locurcio, Kyohei Kadota, Lin Sun, Nikita
  Leonov, Noam Yorav-Raphael, pudinha, Raymond E. Pasco, Ryan
  Zoeller, Samanta Navarro, Serg Tereshchenko, Sibi Siddharthan,
  Simon Legner, Steve Kemp, and Theodore Dubois.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alban Gruin, Alessandro Menti,
  Alexander Shopov, Alex Henrie, Alex Riesen, Andrei Rybak,
  Beat Bolli, Ben Wijen, brian m. carlson, Christian Couder,
  Chris Torek, Danny Lin, Denton Liu, Derrick Stolee, Đoàn
  Trần Công Danh, Drew DeVault, Edmundo Carmona Antoranz,
  Elijah Newren, Emily Shaffer, Emir Sarı, Eric Sunshine,
  Han-Wen Nienhuys, Hariom Verma, Jacob Keller, Jean-Noël
  Avila, Jeff Hostetler, Jeff King, Jiang Xin, Johannes Berg,
  Johannes Schindelin, Johannes Sixt, Jonathan Tan, Jordi Mas,
  Junio C Hamano, Kazuhiro Kato, Luke Diamand, Martin Ågren,
  Matheus Tavares, Matthew Rogers, Matthias Rüster, Michael
  Forney, Michal Privoznik, Miriam Rubio, Orgad Shaneh, Patrick
  Steinhardt, Paul Mackerras, Peter Krefting, Philippe Blain,
  Phillip Wood, Pranit Bauva, Prathamesh Chavan, Pratyush Yadav,
  René Scharfe, Rohit Ashiwal, Sergey Organov, Shourya Shukla,
  Stefan Dotterweich, Stefan Haller, SZEDER Gábor, Taylor Blau,
  Thomas Guyot-Sionnest, Trần Ngọc Quân, Yi-Jyun Pan, and
  Роман Донченко.

----------------------------------------------------------------

Git 2.29 Release Notes
======================

Updates since v2.28
-------------------

UI, Workflows & Features

 * "git help log" has been enhanced by sharing more material from the
   documentation for the underlying "git rev-list" command.

 * "git for-each-ref --format=<>" learned %(contents:size).

 * "git merge" learned to selectively omit " into <branch>" at the end
   of the title of default merge message with merge.suppressDest
   configuration.

 * The component to respond to "git fetch" request is made more
   configurable to selectively allow or reject object filtering
   specification used for partial cloning.

 * Stop when "sendmail.*" configuration variables are defined, which
   could be a mistaken attempt to define "sendemail.*" variables.

 * The existing backends for "git mergetool" based on variants of vim
   have been refactored and then support for "nvim" has been added.

 * "git bisect" learns the "--first-parent" option to find the first
   breakage along the first-parent chain.

 * "git log --first-parent -p" showed patches only for single-parent
   commits on the first-parent chain; the "--first-parent" option has
   been made to imply "-m".  Use "--no-diff-merges" to restore the
   previous behaviour to omit patches for merge commits.

 * The commit labels used to explain each side of conflicted hunks
   placed by the sequencer machinery have been made more readable by
   humans.

 * The "--batch-size" option of "git multi-pack-index repack" command
   is now used to specify that very small packfiles are collected into
   one until the total size roughly exceeds it.

 * The recent addition of SHA-256 support is marked as experimental in
   the documentation.

 * "git fetch" learned --no-write-fetch-head option to avoid writing
   the FETCH_HEAD file.

 * Command line completion (in contrib/) usually omits redundant,
   deprecated and/or dangerous options from its output; it learned to
   optionally include all of them.

 * The output from the "diff" family of the commands had abbreviated
   object names of blobs involved in the patch, but its length was not
   affected by the --abbrev option.  Now it is.

 * "git worktree" gained a "repair" subcommand to help users recover
   after moving the worktrees or repository manually without telling
   Git.  Also, "git init --separate-git-dir" no longer corrupts
   administrative data related to linked worktrees.

 * The "--format=" option to the "for-each-ref" command and friends
   learned a few more tricks, e.g. the ":short" suffix that applies to
   "objectname" now also can be used for "parent", "tree", etc.

 * "git worktree add" learns that the "-d" is a synonym to "--detach"
   option to create a new worktree without being on a branch.

 * "format-patch --range-diff=<prev> <origin>..HEAD" has been taught
   not to ignore <origin> when <prev> is a single version.

 * "add -p" now allows editing paths that were only added in intent.

 * The 'meld' backend of the "git mergetool" learned to give the
   underlying 'meld' the '--auto-merge' option, which would help
   reduce the amount of text that requires manual merging.

 * "git for-each-ref" and friends that list refs used to allow only
   one --merged or --no-merged to filter them; they learned to take
   combination of both kind of filtering.

 * "git maintenance", a "git gc"'s big brother, has been introduced to
   take care of more repository maintenance tasks, not limited to the
   object database cleaning.

 * "git receive-pack" that accepts requests by "git push" learned to
   outsource most of the ref updates to the new "proc-receive" hook.

 * "git push" that wants to be atomic and wants to send push
   certificate learned not to prepare and sign the push certificate
   when it fails the local check (hence due to atomicity it is known
   that no certificate is needed).

 * "git commit-graph write" learned to limit the number of bloom
   filters that are computed from scratch with the --max-new-filters
   option.

 * The transport protocol v2 has become the default again.

 * The installation procedure learned to optionally omit "git-foo"
   executable files for each 'foo' built-in subcommand, which are only
   required by old timers that still rely on the age old promise that
   prepending "git --exec-path" output to PATH early in their script
   will keep the "git-foo" calls they wrote working.

 * The command line completion (in contrib/) learned that "git restore
   -s <TAB>" is often followed by a refname.

 * "git shortlog" has been taught to group commits by the contents of
   the trailer lines, like "Reviewed-by:", "Coauthored-by:", etc.

 * "git archive" learns the "--add-file" option to include untracked
   files into a snapshot from a tree-ish.

 * "git fetch" and "git push" support negative refspecs.

 * "git format-patch" learns to take "whenAble" as a possible value
   for the format.useAutoBase configuration variable to become no-op
   when the  automatically computed base does not make sense.

 * Credential helpers are now allowed to terminate lines with CRLF
   line ending, as well as LF line ending.


Performance, Internal Implementation, Development Support etc.

 * The changed-path Bloom filter is improved using ideas from an
   independent implementation.

 * Updates to the changed-paths bloom filter.

 * The test framework has been updated so that most tests will run
   with predictable (artificial) timestamps.

 * Preliminary clean-up of the refs API in preparation for adding a
   new refs backend "reftable".

 * Dev support to limit the use of test_must_fail to only git commands.

 * While packing many objects in a repository with a promissor remote,
   lazily fetching missing objects from the promissor remote one by
   one may be inefficient---the code now attempts to fetch all the
   missing objects in batch (obviously this won't work for a lazy
   clone that lazily fetches tree objects as you cannot even enumerate
   what blobs are missing until you learn which trees are missing).

 * The pretend-object mechanism checks if the given object already
   exists in the object store before deciding to keep the data
   in-core, but the check would have triggered lazy fetching of such
   an object from a promissor remote.

 * The argv_array API is useful for not just managing argv but any
   "vector" (NULL-terminated array) of strings, and has seen adoption
   to a certain degree.  It has been renamed to "strvec" to reduce the
   barrier to adoption.

 * The final leg of SHA-256 transition plus doc updates.  Note that
   there is no interoperability between SHA-1 and SHA-256
   repositories yet.

 * CMake support to build with MSVC for Windows bypassing the Makefile.

 * A new helper function has_object() has been introduced to make it
   easier to mark object existence checks that do and don't want to
   trigger lazy fetches, and a few such checks are converted using it.

 * A no-op replacement function implemented as a C preprocessor macro
   does not perform as good a job as one implemented as a "static
   inline" function in catching errors in parameters; replace the
   former with the latter in <git-compat-util.h> header.

 * Test framework update.
   (merge d572f52a64 es/test-cmp-typocatcher later to maint).

 * Updates to "git merge" tests, in preparation for a new merge
   strategy backend.

 * midx and commit-graph files now use the byte defined in their file
   format specification for identifying the hash function used for
   object names.

 * The FETCH_HEAD is now always read from the filesystem regardless of
   the ref backend in use, as its format is much richer than the
   normal refs, and written directly by "git fetch" as a plain file..

 * An unused binary has been discarded, and and a bunch of commands
   have been turned into into built-in.

 * A handful of places in in-tree code still relied on being able to
   execute the git subcommands, especially built-ins, in "git-foo"
   form, which have been corrected.

 * When a packfile is removed by "git repack", multi-pack-index gets
   cleared; the code was taught to do so less aggressively by first
   checking if the midx actually refers to a pack that no longer
   exists.

 * Internal API clean-up to handle two options "diff-index" and "log"
   have, which happen to share the same short form, more sensibly.

 * The "add -i/-p" machinery has been written in C but it is not used
   by default yet.  It is made default to those who are participating
   in feature.experimental experiment.

 * Allow maintainers to tweak $(TAR) invocations done while making
   distribution tarballs.

 * "git index-pack" learned to resolve deltified objects with greater
   parallelism.

 * "diff-highlight" (in contrib/) had a logic to flush its output upon
   seeing a blank line but the way it detected a blank line was broken.

 * The logic to skip testing on the tagged commit and the tag itself
   was not quite consistent which led to failure of Windows test
   tasks.  It has been revamped to consistently skip revisions that
   have already been tested, based on the tree object of the revision.


Fixes since v2.28
-----------------

 * The "mediawiki" remote backend which lives in contrib/mw-to-git/
   and is not built with git by default, had an RCE bug allowing a
   malicious MediaWiki server operator to inject arbitrary commands
   for execution by a cloning client. This has been fixed.

   The bug was discovered and reported by Joern Schneeweisz of GitLab
   to the git-security mailing list. Its practical impact due to the
   obscurity of git-remote-mediawiki was deemed small enough to forgo
   a dedicated security release.

 * "git clone --separate-git-dir=$elsewhere" used to stomp on the
   contents of the existing directory $elsewhere, which has been
   taught to fail when $elsewhere is not an empty directory.
   (merge dfaa209a79 bw/fail-cloning-into-non-empty later to maint).

 * With the base fix to 2.27 regresion, any new extensions in a v0
   repository would still be silently honored, which is not quite
   right.  Instead, complain and die loudly.
   (merge ec91ffca04 jk/reject-newer-extensions-in-v0 later to maint).

 * Fetching from a lazily cloned repository resulted at the server
   side in attempts to lazy fetch objects that the client side has,
   many of which will not be available from the third-party anyway.
   (merge 77aa0941ce jt/avoid-lazy-fetching-upon-have-check later to maint).

 * Fix to an ancient bug caused by an over-eager attempt for
   optimization.
   (merge a98f7fb366 rs/add-index-entry-optim-fix later to maint).

 * Pushing a ref whose name contains non-ASCII character with the
   "--force-with-lease" option did not work over smart HTTP protocol,
   which has been corrected.
   (merge cd85b447bf bc/push-cas-cquoted-refname later to maint).

 * "git mv src dst", when src is an unmerged path, errored out
   correctly but with an incorrect error message to claim that src is
   not tracked, which has been clarified.
   (merge 9b906af657 ct/mv-unmerged-path-error later to maint).

 * Fix to a regression introduced during 2.27 cycle.
   (merge cada7308ad en/fill-directory-exponential later to maint).

 * Command line completion (in contrib/) update.
   (merge 688b87c81b mp/complete-show-color-moved later to maint).

 * All "mergy" operations that internally use the merge-recursive
   machinery should honor the merge.renormalize configuration, but
   many of them didn't.

 * Doc cleanup around "worktree".
   (merge dc9c144be5 es/worktree-doc-cleanups later to maint).

 * The "git blame --first-parent" option was not documented, but now
   it is.
   (merge 11bc12ae1e rp/blame-first-parent-doc later to maint).

 * The logic to find the ref transaction hook script attempted to
   cache the path to the found hook without realizing that it needed
   to keep a copied value, as the API it used returned a transitory
   buffer space.  This has been corrected.
   (merge 09b2aa30c9 ps/ref-transaction-hook later to maint).

 * Recent versions of "git diff-files" shows a diff between the index
   and the working tree for "intent-to-add" paths as a "new file"
   patch; "git apply --cached" should be able to take "git diff-files"
   and should act as an equivalent to "git add" for the path, but the
   command failed to do so for such a path.
   (merge 4c025c667e rp/apply-cached-with-i-t-a later to maint).

 * "git diff [<tree-ish>] $path" for a $path that is marked with i-t-a
   bit was not showing the mode bits from the working tree.
   (merge cb0dd22b82 rp/ita-diff-modefix later to maint).

 * Ring buffer with size 4 used for bin-hex translation resulted in a
   wrong object name in the sequencer's todo output, which has been
   corrected.
   (merge 5da69c0dac ak/sequencer-fix-find-uniq-abbrev later to maint).

 * When given more than one target line ranges, "git blame -La,b
   -Lc,d" was over-eager to coalesce groups of original lines and
   showed incorrect results, which has been corrected.
   (merge c2ebaa27d6 jk/blame-coalesce-fix later to maint).

 * The regexp to identify the function boundary for FORTRAN programs
   has been updated.
   (merge 75c3b6b2e8 pb/userdiff-fortran-update later to maint).

 * A few end-user facing messages have been updated to be
   hash-algorithm agnostic.
   (merge 4279000d3e jc/object-names-are-not-sha-1 later to maint).

 * "unlink" emulation on MinGW has been optimized.
   (merge 680e0b4524 jh/mingw-unlink later to maint).

 * The purpose of "git init --separate-git-dir" is to initialize a
   new project with the repository separate from the working tree,
   or, in the case of an existing project, to move the repository
   (the .git/ directory) out of the working tree. It does not make
   sense to use --separate-git-dir with a bare repository for which
   there is no working tree, so disallow its use with bare
   repositories.
   (merge ccf236a23a es/init-no-separate-git-dir-in-bare later to maint).

 * "ls-files -o" mishandled the top-level directory of another git
   working tree that hangs in the current git working tree.
   (merge ab282aa548 en/dir-nonbare-embedded later to maint).

 * Fix some incorrect UNLEAK() annotations.
   (merge 3e19816dc0 jk/unleak-fixes later to maint).

 * Use more buffered I/O where we used to call many small write(2)s.
   (merge a698d67b08 rs/more-buffered-io later to maint).

 * The patch-id computation did not ignore the "incomplete last line"
   marker like whitespaces.
   (merge 82a62015a7 rs/patch-id-with-incomplete-line later to maint).

 * Updates into a lazy/partial clone with a submodule did not work
   well with transfer.fsckobjects set.

 * The parser for "git for-each-ref --format=..." was too loose when
   parsing the "%(trailers...)" atom, and forgot that "trailers" and
   "trailers:<modifiers>" are the only two allowed forms, which has
   been corrected.
   (merge 2c22e102f8 hv/ref-filter-trailers-atom-parsing-fix later to maint).

 * Long ago, we decided to use 3 threads by default when running the
   index-pack task in parallel, which has been adjusted a bit upwards.
   (merge fbff95b67f jk/index-pack-w-more-threads later to maint).

 * "git restore/checkout --no-overlay" with wildcarded pathspec
   mistakenly removed matching paths in subdirectories, which has been
   corrected.
   (merge bfda204ade rs/checkout-no-overlay-pathspec-fix later to maint).

 * The description of --cached/--index options in "git apply --help"
   has been updated.
   (merge d064702be3 rp/apply-cached-doc later to maint).

 * Feeding "$ZERO_OID" to "git log --ignore-missing --stdin", and
   running "git log --ignore-missing $ZERO_OID" fell back to start
   digging from HEAD; it has been corrected to become a no-op, like
   "git log --tags=no-tag-matches-this-pattern" does.
   (merge 04a0e98515 jk/rev-input-given-fix later to maint).

 * Various callers of run_command API have been modernized.
   (merge afbdba391e jc/run-command-use-embedded-args later to maint).

 * List of options offered and accepted by "git add -i/-p" were
   inconsistent, which have been corrected.
   (merge ce910287e7 pw/add-p-allowed-options-fix later to maint).

 * "git diff --stat -w" showed 0-line changes for paths whose changes
   were only whitespaces, which was not intuitive.  We now omit such
   paths from the stat output.
   (merge 1cf3d5db9b mr/diff-hide-stat-wo-textual-change later to maint).

 * It was possible for xrealloc() to send a non-NULL pointer that has
   been freed, which has been fixed.
   (merge 6479ea4a8a jk/xrealloc-avoid-use-after-free later to maint).

 * "git status" has trouble showing where it came from by interpreting
   reflog entries that record certain events, e.g. "checkout @{u}", and
   gives a hard/fatal error.  Even though it inherently is impossible
   to give a correct answer because the reflog entries lose some
   information (e.g. "@{u}" does not record what branch the user was
   on hence which branch 'the upstream' needs to be computed, and even
   if the record were available, the relationship between branches may
   have changed), at least hide the error and allow "status" to show its
   output.

 * "git status --short" quoted a path with SP in it when tracked, but
   not those that are untracked, ignored or unmerged.  They are all
   shown quoted consistently.

 * "git diff/show" on a change that involves a submodule used to read
   the information on commits in the submodule from a wrong repository
   and gave a wrong information when the commit-graph is involved.
   (merge 85a1ec2c32 mf/submodule-summary-with-correct-repository later to maint).

 * Unlike "git config --local", "git config --worktree" did not fail
   early and cleanly when started outside a git repository.
   (merge 378fe5fc3d mt/config-fail-nongit-early later to maint).

 * There is a logic to estimate how many objects are in the
   repository, which is meant to run once per process invocation, but
   it ran every time the estimated value was requested.
   (merge 67bb65de5d jk/dont-count-existing-objects-twice later to maint).

 * "git remote set-head" that failed still said something that hints
   the operation went through, which was misleading.
   (merge 5a07c6c3c2 cs/don-t-pretend-a-failed-remote-set-head-succeeded later to maint).

 * "git fetch --all --ipv4/--ipv6" forgot to pass the protocol options
   to instances of the "git fetch" that talk to individual remotes,
   which has been corrected.
   (merge 4e735c1326 ar/fetch-ipversion-in-all later to maint).

 * The "unshelve" subcommand of "git p4" incorrectly used commit^N
   where it meant to say commit~N to name the Nth generation
   ancestor, which has been corrected.
   (merge 0acbf5997f ld/p4-unshelve-fix later to maint).

 * "git clone" that clones from SHA-1 repository, while
   GIT_DEFAULT_HASH set to use SHA-256 already, resulted in an
   unusable repository that half-claims to be SHA-256 repository
   with SHA-1 objects and refs.  This has been corrected.

 * Adjust sample hooks for hash algorithm other than SHA-1.
   (merge d8d3d632f4 dl/zero-oid-in-hooks later to maint).

 * "git range-diff" showed incorrect diffstat, which has been
   corrected.

 * Earlier we taught "git pull" to warn when the user does not say the
   histories need to be merged, rebased or accepts only fast-
   forwarding, but the warning triggered for those who have set the
   pull.ff configuration variable.
   (merge 54200cef86 ah/pull later to maint).

 * Compilation fix around type punning.
   (merge 176380fd11 jk/drop-unaligned-loads later to maint).

 * "git blame --ignore-rev/--ignore-revs-file" failed to validate
   their input are valid revision, and failed to take into account
   that the user may want to give an annotated tag instead of a
   commit, which has been corrected.
   (merge 610e2b9240 jc/blame-ignore-fix later to maint).

 * "git bisect start X Y", when X and Y are not valid committish
   object names, should take X and Y as pathspec, but didn't.
   (merge 73c6de06af cc/bisect-start-fix later to maint).

 * The explanation of the "scissors line" has been clarified.
   (merge 287416dba6 eg/mailinfo-doc-scissors later to maint).

 * A race that leads to an access to a free'd data was corrected in
   the codepath that reads pack files.
   (merge bda959c476 mt/delta-base-cache-races later to maint).

 * in_merge_bases_many(), a way to see if a commit is reachable from
   any commit in a set of commits, was totally broken when the
   commit-graph feature was in use, which has been corrected.
   (merge 8791bf1841 ds/in-merge-bases-many-optim-bug later to maint).

 * "git submodule update --quiet" did not squelch underlying "rebase"
   and "pull" commands.
   (merge 3ad0401e9e td/submodule-update-quiet later to maint).

 * The lazy fetching done internally to make missing objects available
   in a partial clone incorrectly made permanent damage to the partial
   clone filter in the repository, which has been corrected.

 * "log -c --find-object=X" did not work well to find a merge that
   involves a change to an object X from only one parent.
   (merge 957876f17d jk/diff-cc-oidfind-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 84544f2ea3 sk/typofixes later to maint).
   (merge b17f411ab5 ar/help-guides-doc later to maint).
   (merge 98c6871fad rs/grep-simpler-parse-object-or-die-call later to maint).
   (merge 861c4ce141 en/typofixes later to maint).
   (merge 60e47f6773 sg/ci-git-path-fix-with-pyenv later to maint).
   (merge e2bfa50ac3 jb/doc-packfile-name later to maint).
   (merge 918d8ff780 es/worktree-cleanup later to maint).
   (merge dc156bc31f ma/t1450-quotefix later to maint).
   (merge 56e743426b en/merge-recursive-comment-fixes later to maint).
   (merge 7d23ff818f rs/bisect-oid-to-hex-fix later to maint).
   (merge de20baf2c9 ny/notes-doc-sample-update later to maint).
   (merge f649aaaf82 so/rev-parser-errormessage-fix later to maint).
   (merge 6103d58b7f bc/sha-256-cvs-svn-updates later to maint).
   (merge ac900fddb7 ma/stop-progress-null-fix later to maint).
   (merge e767963ab6 rs/upload-pack-sigchain-fix later to maint).
   (merge a831908599 rs/preserve-merges-unused-code-removal later to maint).
   (merge 6dfefe70a9 jb/commit-graph-doc-fix later to maint).
   (merge 847b37271e pb/set-url-docfix later to maint).
   (merge 748f733d54 mt/checkout-entry-dead-code-removal later to maint).
   (merge ce820cbd58 dl/subtree-docs later to maint).
   (merge 55fe225dde jk/leakfix later to maint).
   (merge ee22a29215 so/pretty-abbrev-doc later to maint).
   (merge 3100fd5588 jc/post-checkout-doc later to maint).
   (merge 17bae89476 pb/doc-external-diff-env later to maint).
   (merge 27ed6ccc12 jk/worktree-check-clean-leakfix later to maint).
   (merge 1302badd16 ea/blame-use-oideq later to maint).
   (merge e6d5a11fed al/t3200-back-on-a-branch later to maint).
   (merge 324efcf6b6 pw/add-p-leakfix later to maint).
   (merge 1c6ffb546b jk/add-i-fixes later to maint).
   (merge e40e936551 cd/commit-graph-doc later to maint).
   (merge 0512eabd91 jc/sequencer-stopped-sha-simplify later to maint).
   (merge d01141de5a so/combine-diff-simplify later to maint).
   (merge 3be01e5ab1 sn/fast-import-doc later to maint).

----------------------------------------------------------------

Changes since v2.28.0 are as follows:

Aaron Lipman (12):
      t6030: modernize "git bisect run" tests
      rev-list: allow bisect and first-parent flags
      cmd_bisect__helper: defer parsing no-checkout flag
      bisect: introduce first-parent flag
      bisect: combine args passed to find_bisection()
      bisect: add first-parent option to documentation
      t3200: clean side effect of git checkout --orphan
      t3201: test multiple branch filter combinations
      Doc: cover multiple contains/no-contains filters
      ref-filter: allow merged and no-merged filters
      ref-filter: make internal reachable-filter API more precise
      Doc: prefer more specific file name

Adrian Moennich (1):
      ci: fix inconsistent indentation

Alban Gruin (1):
      t6300: fix issues related to %(contents:size)

Alessandro Menti (2):
      l10n: it.po: update the Italian translation for Git 2.29.0 round 1
      l10n: it.po: update the Italian translation

Alex Henrie (1):
      pull: don't warn if pull.ff has been set

Alex Riesen (1):
      fetch: pass --ipv4 and --ipv6 options to sub-fetches

Alexander Shopov (1):
      l10n: bg.po: Updated Bulgarian translation (5013t)

Andrei Rybak (1):
      git-help.txt: fix mentions of option --guides

Antti Keränen (1):
      rebase -i: fix possibly wrong onto hash in todo

Beat Bolli (1):
      gitk: rename "commit summary" to "commit reference"

Ben Wijen (1):
      git clone: don't clone into non-empty directory

Chris Torek (1):
      git-mv: improve error message for conflicted file

Christian Couder (4):
      Documentation: clarify %(contents:XXXX) doc
      t6300: test refs pointing to tree and blob
      ref-filter: add support for %(contents:size)
      bisect: don't use invalid oid as rev when starting

Christian Schlack (1):
      remote: don't show success message when set-head fails

Conor Davis (1):
      commit-graph-format.txt: fix no-parent value

Daniel Santos (2):
      l10n: Portuguese translation team has changed. Wohoo!
      l10n: pt_PT: make on po/pt_PT.po

Danny Lin (2):
      contrib/subtree: fix "unsure" for --message in the document
      contrib/subtree: document 'push' does not take '--squash'

Denton Liu (13):
      t3701: stop using `env` in force_color()
      t5324: reorder `run_with_limited_open_files test_might_fail`
      t7107: don't use test_must_fail()
      t9834: remove use of `test_might_fail p4`
      t9400: don't use test_must_fail with cvs
      test-lib-functions: restrict test_must_fail usage
      contrib/completion: complete options that take refs for format-patch
      hooks--pre-push.sample: modernize script
      hooks--pre-push.sample: use hash-agnostic zero OID
      hooks--update.sample: use hash-agnostic zero OID
      gitk: replace tabs with spaces
      compat/mingw.h: drop extern from function declaration
      Makefile: ASCII-sort += lists

Derrick Stolee (22):
      commit-graph: place bloom_settings in context
      commit-graph: change test to die on parse, not load
      bloom: fix logic in get_bloom_filter()
      commit-graph: persist existence of changed-paths
      revision.c: fix whitespace
      multi-pack-index: repack batches below --batch-size
      t/README: document GIT_TEST_DEFAULT_HASH
      commit-graph: use the "hash version" byte
      multi-pack-index: use hash version byte
      bloom/diff: properly short-circuit on max_changes
      maintenance: create basic maintenance runner
      maintenance: add --quiet option
      maintenance: replace run_auto_gc()
      maintenance: initialize task array
      maintenance: add commit-graph task
      maintenance: add --task option
      maintenance: take a lock on the objects directory
      maintenance: create maintenance.<task>.enabled config
      maintenance: use pointers to check --auto
      maintenance: add auto condition for commit-graph task
      maintenance: add trace2 regions for task execution
      commit-reach: fix in_merge_bases_many bug

Drew DeVault (1):
      git-send-email: die if sendmail.* config is set

Edmundo Carmona Antoranz (1):
      blame.c: replace instance of !oidcmp for oideq

Elijah Newren (26):
      Remove doubled words in various comments
      hashmap: fix typo in usage docs
      merge-recursive: fix unclear and outright wrong comments
      t6038: make tests fail for the right reason
      t6038: remove problematic test
      merge: make merge.renormalize work for all uses of merge machinery
      checkout: support renormalization with checkout -m <paths>
      Collect merge-related tests to t64xx
      t6418: tighten delete/normalize conflict testcase
      t6422: fix bad check against missing file
      t6416, t6422: fix incorrect untracked file count
      t6423: fix test setup for a couple tests
      t6422: fix multiple errors with the mod6 test expectations
      t6416, t6423: clarify some comments and fix some typos
      t6423: add an explanation about why one of the tests does not pass
      t6422, t6426: be more flexible for add/add conflicts involving renames
      t642[23]: be more flexible for add/add conflicts involving pair renames
      t6425: be more flexible with rename/delete conflict messages
      t3000: fix some test description typos
      dir: avoid prematurely marking nonbare repositories as matches
      sequencer: avoid garbled merge machinery messages due to commit labels
      mem-pool: add convenience functions for strdup and strndup
      mem-pool: use more standard initialization and finalization
      mem-pool: use consistent pool variable name
      dir: make clear_directory() free all relevant memory
      dir: fix problematic API to avoid memory leaks

Emily Shaffer (1):
      Revert "contrib: subtree: adjust test to change in fmt-merge-msg"

Emir Sarı (2):
      l10n: tr: v2.29.0 round 1
      l10n: tr: v2.29.0 round 2

Eric Huber (1):
      gitk: Preserve window dimensions on exit when not using ttk themes

Eric Sunshine (22):
      worktree: drop pointless strbuf_release()
      worktree: drop unused code from get_linked_worktree()
      worktree: drop bogus and unnecessary path munging
      worktree: retire special-case normalization of main worktree path
      git-worktree.txt: employ fixed-width typeface consistently
      git-worktree.txt: consistently use term "working tree"
      git-worktree.txt: fix minor grammatical issues
      git-worktree.txt: make start of new sentence more obvious
      git-worktree.txt: link to man pages when citing other Git commands
      test_cmp: diagnose incorrect arguments
      init: disallow --separate-git-dir with bare repository
      worktree: add skeleton "repair" command
      worktree: teach "repair" to fix worktree back-links to main worktree
      worktree: teach "repair" to fix outgoing links to worktrees
      init: teach --separate-git-dir to repair linked worktrees
      init: make --separate-git-dir work from within linked worktree
      git-checkout.txt: document -d short option for --detach
      worktree: teach `add` to recognize -d as shorthand for --detach
      git-worktree.txt: discuss branch-based vs. throwaway worktrees
      diff: move show_interdiff() from its own file to diff-lib
      diff-lib: tighten show_interdiff()'s interface
      format-patch: use 'origin' as start of current-series-range when known

Evan Gates (1):
      Doc: show example scissors line

Han Xin (1):
      send-pack: run GPG after atomic push checking

Han-Wen Nienhuys (17):
      lib-t6000.sh: write tag using git-update-ref
      t3432: use git-reflog to inspect the reflog for HEAD
      bisect: treat BISECT_HEAD as a pseudo ref
      t1400: use git rev-parse for testing PSEUDOREF existence
      Modify pseudo refs through ref backend storage
      Make HEAD a PSEUDOREF rather than PER_WORKTREE.
      refs: move the logic to add \t to reflog to the files backend
      refs: split off reading loose ref data in separate function
      refs: fix comment about submodule ref_stores
      refs: move gitdir into base ref_store
      refs: read FETCH_HEAD and MERGE_HEAD generically
      refs: make refs_ref_exists public
      sequencer: treat CHERRY_PICK_HEAD as a pseudo ref
      builtin/commit: suggest update-ref for pseudoref removal
      sequencer: treat REVERT_HEAD as a pseudo ref
      refs: move REF_LOG_ONLY to refs-internal.h
      refs: add GIT_TRACE_REFS debugging mechanism

Hariom Verma (10):
      t6300: unify %(trailers) and %(contents:trailers) tests
      ref-filter: 'contents:trailers' show error if `:` is missing
      ref-filter: support different email formats
      ref-filter: refactor `grab_objectname()`
      ref-filter: modify error messages in `grab_objectname()`
      ref-filter: rename `objectname` related functions and fields
      ref-filter: add `short` modifier to 'tree' atom
      ref-filter: add `short` modifier to 'parent' atom
      pretty: refactor `format_sanitized_subject()`
      ref-filter: add `sanitize` option for 'subject' atom

Hugo Locurcio (1):
      bisect: swap command-line options in documentation

Jacob Keller (4):
      refspec: fix documentation referring to refspec_item
      refspec: make sure stack refspec_item variables are zeroed
      refspec: add support for negative refspecs
      format-patch: teach format.useAutoBase "whenAble" option

Jean-Noël Avila (6):
      l10n: fr: v2.29.0 rnd 1
      git-bisect-lk2009: make continuation of list indented
      doc: use linkgit macro where needed.
      doc: git-remote fix ups
      doc: fix the bnf like style of some commands
      l10n: fr: v2.29.0 rnd 2

Jeff Hostetler (1):
      mingw: improve performance of mingw_unlink()

Jeff King (82):
      t6000: use test_tick consistently
      t9700: loosen ident timezone regex
      t5539: make timestamp requirements more explicit
      t9100: explicitly unset GIT_COMMITTER_DATE
      test-lib: set deterministic default author/committer date
      t9100: stop depending on commit timestamps
      verify_repository_format(): complain about new extensions in v0 repo
      argv-array: use size_t for count and alloc
      argv-array: rename to strvec
      strvec: rename files from argv-array to strvec
      quote: rename sq_dequote_to_argv_array to mention strvec
      strvec: convert builtin/ callers away from argv_array name
      strvec: convert more callers away from argv_array name
      strvec: convert remaining callers away from argv_array name
      strvec: fix indentation in renamed calls
      strvec: update documention to avoid argv_array
      strvec: drop argv_array compatibility layer
      log: drop "--cc implies -m" logic
      revision: add "--no-diff-merges" option to counteract "-m"
      log: enable "-m" automatically with "--first-parent"
      doc/git-log: move "Diff Formatting" from rev-list-options
      doc/git-log: drop "-r" diff option
      doc/git-log: move "-t" into diff-options list
      doc/git-log: clarify handling of merge commit diffs
      strvec: rename struct fields
      config: work around gcc-10 -Wstringop-overflow warning
      revision: avoid out-of-bounds read/write on empty pathspec
      revision: avoid leak when preparing bloom filter for "/"
      t5616: use test_i18ngrep for upload-pack errors
      sideband: mark "remote error:" prefix for translation
      t1416: avoid hard-coded sha1 ids
      t8003: check output of coalesced blame
      t8003: factor setup out of coalesce test
      blame: only coalesce lines that are adjacent in result
      Makefile: drop builtins from MSVC pdb list
      make credential helpers builtins
      make git-bugreport a builtin
      make git-fast-import a builtin
      drop vcs-svn experiment
      stop calling UNLEAK() before die()
      ls-remote: simplify UNLEAK() usage
      clear_pattern_list(): clear embedded hashmaps
      submodule--helper: use strbuf_release() to free strbufs
      checkout: fix leak of non-existent branch names
      config: fix leaks from git_config_get_string_const()
      config: drop git_config_get_string_const()
      config: fix leak in git_config_get_expiry_in_days()
      submodule--helper: fix leak of core.worktree value
      p5302: disable thread-count parameter tests by default
      p5302: count up to online-cpus for thread tests
      index-pack: adjust default threading cap
      revision: set rev_input_given in handle_revision_arg()
      worktree: fix leak in check_clean_worktree()
      xrealloc: do not reuse pointer freed by zero-length realloc()
      add-patch: fix inverted return code of repo_read_index()
      add--interactive.perl: specify --no-color explicitly
      packfile: actually set approximate_object_count_valid
      diff-highlight: correctly match blank lines for flush
      bswap.h: drop unaligned loads
      Revert "fast-export: use local array to store anonymized oid"
      shortlog: change "author" variables to "ident"
      protocol: re-enable v2 protocol by default
      shortlog: add grouping option
      trailer: add interface for iterating over commit trailers
      shortlog: match commit trailers with --group
      shortlog: de-duplicate trailer values
      shortlog: rename parse_stdin_ident()
      shortlog: parse trailer idents
      shortlog: allow multiple groups to be specified
      convert: drop unused crlf_action from check_global_conv_flags_eol()
      drop unused argc parameters
      env--helper: write to opt->value in parseopt helper
      assert PARSE_OPT_NONEG in parse-options callbacks
      push: drop unused repo argument to do_push()
      sequencer: drop repository argument from run_git_commit()
      sparse-checkout: fill in some options boilerplate
      test-advise: check argument count with argc instead of argv
      sequencer: handle ignore_footer when parsing trailers
      dir.c: drop unused "untracked" from treat_path_fast()
      combine-diff: handle --find-object in multitree code path
      index-pack: restore "resolving deltas" progress meter
      index-pack: drop type_cas mutex

Jiang Xin (13):
      transport: not report a non-head push as a branch
      t5411: add basic test cases for proc-receive hook
      receive-pack: add new proc-receive hook
      receive-pack: feed report options to post-receive
      New capability "report-status-v2" for git-push
      doc: add document for capability report-status-v2
      receive-pack: new config receive.procReceiveRefs
      t5411: test updates of remote-tracking branches
      transport: parse report options for tracking refs
      doc: add documentation for the proc-receive hook
      l10n: git.pot: v2.29.0 round 1 (124 new, 42 removed)
      l10n: git.pot: v2.29.0 round 2 (1 new, 1 removed)
      l10n: zh_CN: for git v2.29.0 l10n round 1 and 2

Johannes Berg (2):
      pack-write/docs: update regarding pack naming
      docs: commit-graph: fix some whitespace in the diagram

Johannes Schindelin (26):
      t3404: prepare 'short SHA-1 collision' tests for SHA-256
      ci: fix indentation of the `ci-config` job
      ci: avoid ugly "failure" in the `ci-config` job
      t/test-terminal: avoid non-inclusive language
      fast-export: avoid using unnecessary language in a code comment
      t3200: avoid variations of the `master` branch name
      msvc: copy the correct `.pdb` files in the Makefile target `install`
      Optionally skip linking/copying the built-ins
      ci: stop linking built-ins to the dashed versions
      cmake: ignore files generated by CMake as run in Visual Studio
      tests: avoid variations of the `master` branch name
      t9902: avoid using the branch name `master`
      cmake: do find Git for Windows' shell interpreter
      cmake: ensure that the `vcpkg` packages are found on Windows
      cmake: fall back to using `vcpkg`'s `msgfmt.exe` on Windows
      cmake: quote the path accurately when editing `test-lib.sh`
      cmake (Windows): let the `.dll` files be found when running the tests
      cmake (Windows): complain when encountering an unknown compiler
      cmake (Windows): initialize vcpkg/build dependencies automatically
      cmake (Windows): recommend using Visual Studio's built-in CMake support
      GitHub workflow: automatically follow minor updates of setup-msbuild
      help: do not expect built-in commands to be hardlinked
      t1415: avoid using `main` as ref name
      tests: avoid using the branch name `main`
      ci: skip GitHub workflow runs for already-tested commits/trees
      ci: do not skip tagged revisions in GitHub workflows

Johannes Sixt (1):
      gitk: Un-hide selection in areas with non-default background color

Jonathan Tan (33):
      upload-pack: do not lazy-fetch "have" objects
      pack-objects: refactor to oid_object_info_extended
      pack-objects: prefetch objects to be packed
      sha1-file: make pretend_object_file() not prefetch
      sha1-file: introduce no-lazy-fetch has_object()
      apply: do not lazy fetch when applying binary
      pack-objects: no fetch when allow-{any,promisor}
      fsck: do not lazy fetch known non-promisor object
      negotiator/noop: add noop fetch negotiator
      fetch: allow refspecs specified through stdin
      fetch: avoid reading submodule config until needed
      fetch: only populate existing_refs if needed
      fetch-pack: do not lazy-fetch during ref iteration
      promisor-remote: lazy-fetch objects in subprocess
      fetch-pack: remove no_dependents code
      fetch-pack: in partial clone, pass --promisor
      Documentation: deltaBaseCacheLimit is per-thread
      index-pack: remove redundant parameter
      index-pack: unify threaded and unthreaded code
      index-pack: remove redundant child field
      index-pack: calculate {ref,ofs}_{first,last} early
      index-pack: make resolve_delta() assume base data
      (various): document from_promisor parameter
      fetch-pack: document only_packfile in get_pack()
      fetch-pack: make packfile URIs work with transfer.fsckobjects
      fetch: no FETCH_HEAD display if --no-write-fetch-head
      sha1-name: replace unsigned int with option struct
      refs: move dwim_ref() to header file
      wt-status: tolerate dangling marks
      index-pack: make quantum of work smaller
      promisor-remote: remove unused variable
      fetch: do not override partial clone filter
      index-pack: make get_base_data() comment clearer

Jordi Mas (1):
      l10n: Update Catalan translation

Junio C Hamano (52):
      gitk: be prepared to be run in a bare repository
      reflog: cleanse messages in the refs.c layer
      Revert "fmt-merge-msg: stop treating `master` specially"
      fmt-merge-msg: allow merge destination to be omitted again
      First batch post 2.28
      The second batch -- mostly minor typofixes
      Third batch
      Fourth batch
      Documentation: don't hardcode command categories twice
      compat-util: type-check parameters of no-op replacement functions
      Fifth batch
      Sixth batch
      Seventh batch
      messages: avoid SHA-1 in end-user facing messages
      Eighth batch
      fetch: optionally allow disabling FETCH_HEAD update
      Ninth batch
      ident: say whose identity is missing when giving user.name hint
      Tenth batch
      t3436: do not run git-merge-recursive in dashed form
      transport-helper: do not run git-remote-ext etc. in dashed form
      cvsexportcommit: do not run git programs in dashed form
      run_command: teach API users to use embedded 'args' more
      credential-cache: use child_process.args
      Eleventh batch
      doc: clarify how exit status of post-checkout hook is used
      Twelfth batch
      Thirteenth batch
      add -i: use the built-in version when feature.experimental is set
      Makefile: allow extra tweaking of distribution tarball
      Fourteenth batch
      quote_path: rename quote_path_relative() to quote_path()
      quote_path: give flags parameter to quote_path()
      quote_path: optionally allow quoting a path with SP in it
      quote_path: code clarification
      wt-status: consistently quote paths in "status --short" output
      quote: rename misnamed sq_lookup[] to cq_lookup[]
      quote: turn 'nodq' parameter into a set of flags
      Fifteenth batch
      Sixteenth batch
      t8013: minimum preparatory clean-up
      blame: validate and peel the object names on the ignore list
      t1506: rev-parse A..B and A...B
      sequencer: stop abbreviating stopped-sha file
      Seventeenth batch
      Eighteenth batch
      hashmap_for_each_entry(): workaround MSVC's runtime check failure #3
      Nineteenth batch
      Git 2.29-rc0
      Git 2.29-rc1
      Git 2.29-rc2
      Git 2.29

Kazuhiro Kato (1):
      gitk: fix branch name encoding error

Kyohei Kadota (1):
      Fit to Plan 9's ANSI/POSIX compatibility layer

Lin Sun (1):
      mergetool: allow auto-merge for meld to follow the vim-diff behavior

Luke Diamand (2):
      git-p4 unshelve: adding a commit breaks git-p4 unshelve
      git-p4: use HEAD~$n to find parent commit for unshelve

Martin Ågren (19):
      dir: check pathspecs before returning `path_excluded`
      t1450: fix quoting of NUL byte when corrupting pack
      t: don't spuriously close and reopen quotes
      t4104: modernize and simplify quoting
      progress: don't dereference before checking for NULL
      http-protocol.txt: document SHA-256 "want"/"have" format
      index-format.txt: document SHA-256 index format
      protocol-capabilities.txt: clarify "allow-x-sha1-in-want" re SHA-256
      shallow.txt: document SHA-256 shallow format
      Documentation: mark `--object-format=sha256` as experimental
      wt-status: replace sha1 mentions with oid
      wt-status: print to s->fp, not stdout
      wt-status: introduce wt_status_state_free_buffers()
      worktree: inline `worktree_ref()` into its only caller
      worktree: update renamed variable in comment
      worktree: rename copy-pasted variable
      worktree: use skip_prefix to parse target
      config/fmt-merge-msg.txt: drop space in quote
      config/uploadpack.txt: fix typo in `--filter=tree:<n>`

Matheus Tavares (4):
      checkout_entry(): remove unreachable error() call
      config: complain about --worktree outside of a git repo
      packfile: fix race condition on unpack_entry()
      packfile: fix memory leak in add_delta_base_cache()

Matthew Rogers (1):
      diff: teach --stat to ignore uninteresting modifications

Matthias Rüster (1):
      l10n: de.po: Update German translation for Git 2.29.0

Michael Forney (2):
      revision: use repository from rev_info when parsing commits
      submodule: use submodule repository when preparing summary

Michal Privoznik (1):
      completion: add show --color-moved[-ws]

Miriam Rubio (4):
      bisect--helper: BUG() in cmd_*() on invalid subcommand
      bisect--helper: use '-res' in 'cmd_bisect__helper' return
      bisect--helper: introduce new `write_in_file()` function
      bisect: call 'clear_commit_marks_all()' in 'bisect_next_all()'

Nikita Leonov (1):
      credential: treat CR/LF as line endings in the credential protocol

Noam Yorav-Raphael (1):
      docs: improve the example that illustrates git-notes path names

Orgad Shaneh (5):
      vcbuild: fix library name for expat with make MSVC=1
      vcbuild: fix batch file name in README
      fetch: do not look for submodule changes in unchanged refs
      submodule: suppress checking for file name and ref ambiguity for object ids
      contrib/buildsystems: fix expat library name for generated vcxproj

Patrick Steinhardt (2):
      refs: fix interleaving hook calls with reference-transaction hook
      refs: remove lookup cache for reference-transaction hook

Paul Mackerras (1):
      gitk: Resize panes correctly when reducing window size

Peter Krefting (1):
      l10n: sv.po: Update Swedish translation (5013t0f0u)

Philippe Blain (19):
      git-log.txt: add links to 'rev-list' and 'diff' docs
      revisions.txt: describe 'rev1 rev2 ...' meaning for ranges
      git-rev-list.txt: fix Asciidoc syntax
      git-rev-list.txt: tweak wording in set operations
      git-rev-list.txt: move description to separate file
      git-log.txt: include rev-list-description.txt
      command-list.txt: add missing 'gitcredentials' and 'gitremote-helpers'
      help: drop usage of 'common' and 'useful' for guides
      git.txt: add list of guides
      fetch, pull doc: correct description of '--set-upstream'
      userdiff: add tests for Fortran xfuncname regex
      userdiff: improve Fortran xfuncname regex
      git-imap-send.txt: don't duplicate 'Examples' sections
      git-imap-send.txt: do verify SSL certificate for gmail.com
      git-imap-send.txt: add note about localized Gmail folders
      doc: mention GIT_SEQUENCE_EDITOR and 'sequence.editor' more
      git.txt: correct stale 'GIT_EXTERNAL_DIFF' description
      Makefile: add support for generating JSON compilation database
      gitsubmodules doc: invoke 'ls-files' with '--recurse-submodules'

Phillip Wood (7):
      add -p: use ALLOC_GROW_BY instead of ALLOW_GROW
      add -p: fix checking of user input
      am: stop exporting GIT_COMMITTER_DATE
      rebase -i: support --committer-date-is-author-date
      rebase -i: support --ignore-date
      add -p: fix memory leak
      add -p: fix editing of intent-to-add paths

Pranit Bauva (2):
      bisect--helper: reimplement `bisect_autostart` shell function in C
      bisect--helper: reimplement `bisect_next` and `bisect_auto_next` shell functions in C

Prathamesh Chavan (1):
      submodule: port submodule subcommand 'summary' from shell to C

Raymond E. Pasco (6):
      apply: allow "new file" patches on i-t-a entries
      blame-options.txt: document --first-parent option
      apply: make i-t-a entries never match worktree
      t4140: test apply with i-t-a paths
      diff-lib: use worktree mode in diffs from i-t-a entries
      git-apply.txt: update descriptions of --cached, --index

René Scharfe (21):
      read-cache: remove bogus shortcut
      grep: avoid using oid_to_hex() with parse_object_or_die()
      bisect: use oid_to_hex_r() instead of memcpy()+oid_to_hex()
      upload-pack: remove superfluous sigchain_pop() call
      rebase: remove unused function reschedule_last_action
      connected: use buffered I/O to talk to rev-list
      midx: use buffered I/O to talk to pack-objects
      upload-pack: use buffered I/O to talk to rev-list
      patch-id: ignore newline at end of file in diff_flush_patch_id()
      checkout, restore: make pathspec recursive
      read-cache: fix mem-pool allocation for multi-threaded index loading
      push: release strbufs used for refspec formatting
      refspec: add and use refspec_appendf()
      fast-import: use write_pack_header()
      midx: use hashwrite_u8() in write_midx_header()
      pack-bitmap-write: use hashwrite_be32() in write_hash_cache()
      pack-write: use hashwrite_be32() in write_idx_file()
      archive: read short blobs in archive.c::write_archive_entry()
      archive: add --add-file
      Makefile: use git-archive --add-file
      ref-filter: plug memory leak in reach_filter()

Rohit Ashiwal (2):
      rebase -i: add --ignore-whitespace flag
      rebase: add --reset-author-date

Ryan Zoeller (2):
      parse-options: add --git-completion-helper-all
      completion: add GIT_COMPLETION_SHOW_ALL env var

SZEDER Gábor (15):
      tree-walk.c: don't match submodule entries for 'submod/anything'
      commit-graph: fix parsing the Chunk Lookup table
      commit-graph-format.txt: all multi-byte numbers are in network byte order
      commit-slab: add a function to deep free entries on the slab
      diff.h: drop diff_tree_oid() & friends' return value
      commit-graph: clean up #includes
      commit-graph: simplify parse_commit_graph() #1
      commit-graph: simplify parse_commit_graph() #2
      commit-graph: simplify write_commit_graph_file() #1
      commit-graph: simplify write_commit_graph_file() #2
      commit-graph: unify the signatures of all write_graph_chunk_*() functions
      commit-graph: simplify chunk writes into loop
      commit-graph: check chunk sizes after writing
      commit-graph: check all leading directories in changed path Bloom filters
      ci: use absolute PYTHON_PATH in the Linux jobs

Samanta Navarro (1):
      fast-import: fix typo in documentation

Serg Tereshchenko (2):
      git-gui: fix mixed tabs and spaces; prefer tabs
      git-gui: improve dark mode support

Sergey Organov (9):
      revision: fix die() message for "--unpacked="
      revision: change "--diff-merges" option to require parameter
      doc/git-log: describe --diff-merges=off
      t/t4013: add test for --diff-merges=off
      pretty-options.txt: fix --no-abbrev-commit description
      revision: add separate field for "-m" of "diff-index -m"
      log_tree_diff: get rid of code duplication for first_parent_only
      log_tree_diff: get rid of extra check for NULL
      diff: get rid of redundant 'dense' argument

Shourya Shukla (11):
      submodule: remove extra line feeds between callback struct and macro
      submodule: rename helper functions to avoid ambiguity
      t7421: introduce a test script for verifying 'summary' output
      t7401: modernize style
      t7401: use 'short' instead of 'verify' and cut in rev-parse calls
      t7401: change syntax of test_i18ncmp calls for clarity
      t7401: change indentation for enhanced readability
      t7401: add a NEEDSWORK
      submodule: eliminate unused parameters from print_submodule_summary()
      submodule: fix style in function definition
      t7421: eliminate 'grep' check in t7421.4 for mingw compatibility

Sibi Siddharthan (8):
      Introduce CMake support for configuring Git
      cmake: generate the shell/perl/python scripts and templates, translations
      cmake: installation support for git
      cmake: support for testing git with ctest
      cmake: support for testing git when building out of the source tree
      cmake: support for building git on windows with mingw
      cmake: support for building git on windows with msvc and clang.
      ci: modification of main.yml to use cmake for vs-build job

Simon Legner (1):
      remote-mediawiki: fix duplicate revisions being imported

Stefan Dotterweich (1):
      gitk: add diff lines background colors

Stefan Haller (1):
      git-gui: blame: prevent tool tips from sticking around after Command-Tab

Steve Kemp (1):
      comment: fix spelling mistakes inside comments

Taylor Blau (18):
      revision: empty pathspecs should not use Bloom filters
      list_objects_filter_options: introduce 'list_object_filter_config_name'
      upload-pack.c: allow banning certain object filter(s)
      upload-pack.c: introduce 'uploadpackfilter.tree.maxDepth'
      builtin/repack.c: invalidate MIDX only when necessary
      midx: traverse the local MIDX first
      commit-graph: introduce 'get_bloom_filter_settings()'
      t4216: use an '&&'-chain
      commit-graph: pass a 'struct repository *' in more places
      t/helper/test-read-graph.c: prepare repo settings
      commit-graph: respect 'commitGraph.readChangedPaths'
      commit-graph.c: store maximum changed paths
      bloom: split 'get_bloom_filter()' in two
      bloom: use provided 'struct bloom_filter_settings'
      bloom: encode out-of-bounds filters as non-empty
      commit-graph: rename 'split_commit_graph_opts'
      builtin/commit-graph.c: introduce '--max-new-filters=<n>'
      commit-graph: introduce 'commitGraph.maxNewFilters'

Theodore Dubois (1):
      submodule update: silence underlying merge/rebase with "--quiet"

Thomas Guyot-Sionnest (1):
      diff: fix modified lines stats with --stat and --numstat

Trần Ngọc Quân (1):
      l10n: vi(5013t): Updated translation for v2.29.0 rd2

Yi-Jyun Pan (1):
      l10n: zh_TW.po: v2.29.0 round 2 (2 untranslated)

brian m. carlson (48):
      remote-curl: make --force-with-lease work with non-ASCII ref names
      t: make test-bloom initialize repository
      t1001: use $ZERO_OID
      t3305: make hash agnostic
      t6100: make hash size independent
      t6101: make hash size independent
      t6301: make hash size independent
      t6500: specify test values for SHA-256
      t6501: avoid hard-coded objects
      t7003: compute appropriate length constant
      t7063: make hash size independent
      t7201: abstract away SHA-1-specific constants
      t7102: abstract away SHA-1-specific constants
      t7400: make hash size independent
      t7405: make hash size independent
      t7506: avoid checking for SHA-1-specific constants
      t7508: use $ZERO_OID instead of hard-coded constant
      t8002: make hash size independent
      t8003: make hash size independent
      t8011: make hash size independent
      t9300: abstract away SHA-1-specific constants
      t9300: use $ZERO_OID instead of hard-coded object ID
      t9301: make hash size independent
      t9350: make hash size independent
      t9500: ensure that algorithm info is preserved in config
      t9700: make hash size independent
      t5308: make test work with SHA-256
      t0410: mark test with SHA1 prerequisite
      http-fetch: set up git directory before parsing pack hashes
      builtin/verify-pack: implement an --object-format option
      bundle: add new version for use with SHA-256
      setup: add support for reading extensions.objectformat
      repository: enable SHA-256 support by default
      t: add test_oid option to select hash algorithm
      t: allow testing different hash algorithms via environment
      t: make SHA1 prerequisite depend on default hash
      ci: run tests with SHA-256
      docs: add documentation for extensions.objectFormat
      t: remove test_oid_init in tests
      git-cvsexportcommit: support Perl before 5.10.1
      docs: document SHA-256 pack and indices
      docs: fix step in transition plan
      t4013: improve diff-post-processor logic
      po: add missing letter for French message
      docs: explain why squash merges are broken with long-running branches
      docs: explain why reverts are not always applied on merge
      docs: explain how to deal with files that are always modified
      builtin/clone: avoid failure with GIT_DEFAULT_HASH

pudinha (2):
      mergetool--lib: improve support for vimdiff-style tool variants
      mergetools: add support for nvimdiff (neovim) family

Ákos Uzonyi (2):
      completion: use "prev" variable instead of introducing "prevword"
      completion: complete refs after 'git restore -s'

Ævar Arnfjörð Bjarmason (17):
      remote-mediawiki doc: correct link to GitHub project
      remote-mediawiki doc: link to MediaWiki's current version
      remote-mediawiki doc: don't hardcode Debian PHP versions
      remote-mediawiki tests: use the login/password variables
      remote-mediawiki tests: use a 10 character password
      remote-mediawiki tests: use test_cmp in tests
      remote-mediawiki tests: change `[]` to `test`
      remote-mediawiki tests: use "$dir/" instead of "$dir."
      remote-mediawiki tests: use a more idiomatic dispatch table
      remote-mediawiki tests: replace deprecated Perl construct
      remote-mediawiki tests: use inline PerlIO for readability
      remote-mediawiki tests: use CLI installer
      remote-mediawiki tests: annotate failing tests
      remote-mediawiki: provide a list form of run_git()
      remote-mediawiki: convert to quoted run_git() invocation
      remote-mediawiki: annotate unquoted uses of run_git()
      remote-mediawiki: use "sh" to eliminate unquoted commands

Đoàn Trần Công Danh (2):
      diff: index-line: respect --abbrev in object's name
      t5534: split stdout and stderr redirection

Роман Донченко (2):
      gitk: don't highlight files after submodules as submodules
      gitk: fix the context menu not appearing in the presence of submodule diffs


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.29.0-rc1
@ 2020-10-09 15:58  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2020-10-09 15:58 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.29.0-rc1 is now available for testing
at the usual places.  It is comprised of 605 non-merge commits
since v2.28.0, contributed by 77 people, 22 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.29.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.28.0 are as follows.
Welcome to the Git development community!

  Aaron Lipman, Adrian Moennich, Ákos Uzonyi, Antti Keränen,
  Christian Schlack, Conor Davis, Eric Huber, Evan Gates, Han
  Xin, Hugo Locurcio, Kyohei Kadota, Lin Sun, Nikita Leonov,
  Noam Yorav-Raphael, pudinha, Raymond E. Pasco, Ryan Zoeller,
  Samanta Navarro, Sibi Siddharthan, Simon Legner, Steve Kemp,
  and Theodore Dubois.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alban Gruin, Alex Henrie, Alex
  Riesen, Andrei Rybak, Beat Bolli, Ben Wijen, brian m. carlson,
  Christian Couder, Chris Torek, Danny Lin, Denton Liu, Derrick
  Stolee, Đoàn Trần Công Danh, Drew DeVault, Edmundo Carmona
  Antoranz, Elijah Newren, Emily Shaffer, Eric Sunshine, Han-Wen
  Nienhuys, Hariom Verma, Jacob Keller, Jean-Noël Avila, Jeff
  Hostetler, Jeff King, Jiang Xin, Johannes Berg, Johannes
  Schindelin, Johannes Sixt, Jonathan Tan, Junio C Hamano,
  Kazuhiro Kato, Luke Diamand, Martin Ågren, Matheus Tavares,
  Matthew Rogers, Michael Forney, Michal Privoznik, Miriam Rubio,
  Orgad Shaneh, Patrick Steinhardt, Paul Mackerras, Philippe
  Blain, Phillip Wood, Pranit Bauva, Prathamesh Chavan, René
  Scharfe, Rohit Ashiwal, Sergey Organov, Shourya Shukla, Stefan
  Dotterweich, SZEDER Gábor, Taylor Blau, Thomas Guyot-Sionnest,
  and Роман Донченко.

----------------------------------------------------------------

Git 2.29 Release Notes (draft)
==============================

Updates since v2.28
-------------------

UI, Workflows & Features

 * "git help log" has been enhanced by sharing more material from the
   documentation for the underlying "git rev-list" command.

 * "git for-each-ref --format=<>" learned %(contents:size).

 * "git merge" learned to selectively omit " into <branch>" at the end
   of the title of default merge message with merge.suppressDest
   configuration.

 * The component to respond to "git fetch" request is made more
   configurable to selectively allow or reject object filtering
   specification used for partial cloning.

 * Stop when "sendmail.*" configuration variables are defined, which
   could be a mistaken attempt to define "sendemail.*" variables.

 * The existing backends for "git mergetool" based on variants of vim
   have been refactored and then support for "nvim" has been added.

 * "git bisect" learns the "--first-parent" option to find the first
   breakage along the first-parent chain.

 * "git log --first-parent -p" showed patches only for single-parent
   commits on the first-parent chain; the "--first-parent" option has
   been made to imply "-m".  Use "--no-diff-merges" to restore the
   previous behaviour to omit patches for merge commits.

 * The commit labels used to explain each side of conflicted hunks
   placed by the sequencer machinery have been made more readable by
   humans.

 * The "--batch-size" option of "git multi-pack-index repack" command
   is now used to specify that very small packfiles are collected into
   one until the total size roughly exceeds it.

 * The recent addition of SHA-256 support is marked as experimental in
   the documentation.

 * "git fetch" learned --no-write-fetch-head option to avoid writing
   the FETCH_HEAD file.

 * Command line completion (in contrib/) usually omits redundant,
   deprecated and/or dangerous options from its output; it learned to
   optionally include all of them.

 * The output from the "diff" family of the commands had abbreviated
   object names of blobs involved in the patch, but its length was not
   affected by the --abbrev option.  Now it is.

 * "git worktree" gained a "repair" subcommand to help users recover
   after moving the worktrees or repository manually without telling
   Git.  Also, "git init --separate-git-dir" no longer corrupts
   administrative data related to linked worktrees.

 * The "--format=" option to the "for-each-ref" command and friends
   learned a few more tricks, e.g. the ":short" suffix that applies to
   "objectname" now also can be used for "parent", "tree", etc.

 * "git worktree add" learns that the "-d" is a synonym to "--detach"
   option to create a new worktree without being on a branch.

 * "format-patch --range-diff=<prev> <origin>..HEAD" has been taught
   not to ignore <origin> when <prev> is a single version.

 * "add -p" now allows editing paths that were only added in intent.

 * The 'meld' backend of the "git mergetool" learned to give the
   underlying 'meld' the '--auto-merge' option, which would help
   reduce the amount of text that requires manual merging.

 * "git for-each-ref" and friends that list refs used to allow only
   one --merged or --no-merged to filter them; they learned to take
   combination of both kind of filtering.

 * "git maintenance", a "git gc"'s big brother, has been introduced to
   take care of more repository maintenance tasks, not limited to the
   object database cleaning.

 * "git receive-pack" that accepts requests by "git push" learned to
   outsource most of the ref updates to the new "proc-receive" hook.

 * "git push" that wants to be atomic and wants to send push
   certificate learned not to prepare and sign the push certificate
   when it fails the local check (hence due to atomicity it is known
   that no certificate is needed).

 * "git commit-graph write" learned to limit the number of bloom
   filters that are computed from scratch with the --max-new-filters
   option.

 * The transport protocol v2 has become the default again.

 * The installation procedure learned to optionally omit "git-foo"
   executable files for each 'foo' built-in subcommand, which are only
   required by old timers that still rely on the age old promise that
   prepending "git --exec-path" output to PATH early in their script
   will keep the "git-foo" calls they wrote working.

 * The command line completion (in contrib/) learned that "git restore
   -s <TAB>" is often followed by a refname.

 * "git shortlog" has been taught to group commits by the contents of
   the trailer lines, like "Reviewed-by:", "Coauthored-by:", etc.

 * "git archive" learns the "--add-file" option to include untracked
   files into a snapshot from a tree-ish.

 * "git fetch" and "git push" support negative refspecs.

 * "git format-patch" learns to take "whenAble" as a possible value
   for the format.useAutoBase configuration variable to become no-op
   when the  automatically computed base does not make sense.

 * Credential helpers are now allowed to terminate lines with CRLF
   line ending, as well as LF line ending.


Performance, Internal Implementation, Development Support etc.

 * The changed-path Bloom filter is improved using ideas from an
   independent implementation.

 * Updates to the changed-paths bloom filter.

 * The test framework has been updated so that most tests will run
   with predictable (artificial) timestamps.

 * Preliminary clean-up of the refs API in preparation for adding a
   new refs backend "reftable".

 * Dev support to limit the use of test_must_fail to only git commands.

 * While packing many objects in a repository with a promissor remote,
   lazily fetching missing objects from the promissor remote one by
   one may be inefficient---the code now attempts to fetch all the
   missing objects in batch (obviously this won't work for a lazy
   clone that lazily fetches tree objects as you cannot even enumerate
   what blobs are missing until you learn which trees are missing).

 * The pretend-object mechanism checks if the given object already
   exists in the object store before deciding to keep the data
   in-core, but the check would have triggered lazy fetching of such
   an object from a promissor remote.

 * The argv_array API is useful for not just managing argv but any
   "vector" (NULL-terminated array) of strings, and has seen adoption
   to a certain degree.  It has been renamed to "strvec" to reduce the
   barrier to adoption.

 * The final leg of SHA-256 transition plus doc updates.  Note that
   there is no interoperability between SHA-1 and SHA-256
   repositories yet.

 * CMake support to build with MSVC for Windows bypassing the Makefile.

 * A new helper function has_object() has been introduced to make it
   easier to mark object existence checks that do and don't want to
   trigger lazy fetches, and a few such checks are converted using it.

 * A no-op replacement function implemented as a C preprocessor macro
   does not perform as good a job as one implemented as a "static
   inline" function in catching errors in parameters; replace the
   former with the latter in <git-compat-util.h> header.

 * Test framework update.
   (merge d572f52a64 es/test-cmp-typocatcher later to maint).

 * Updates to "git merge" tests, in preparation for a new merge
   strategy backend.

 * midx and commit-graph files now use the byte defined in their file
   format specification for identifying the hash function used for
   object names.

 * The FETCH_HEAD is now always read from the filesystem regardless of
   the ref backend in use, as its format is much richer than the
   normal refs, and written directly by "git fetch" as a plain file..

 * An unused binary has been discarded, and and a bunch of commands
   have been turned into into built-in.

 * A handful of places in in-tree code still relied on being able to
   execute the git subcommands, especially built-ins, in "git-foo"
   form, which have been corrected.

 * When a packfile is removed by "git repack", multi-pack-index gets
   cleared; the code was taught to do so less aggressively by first
   checking if the midx actually refers to a pack that no longer
   exists.

 * Internal API clean-up to handle two options "diff-index" and "log"
   have, which happen to share the same short form, more sensibly.

 * The "add -i/-p" machinery has been written in C but it is not used
   by default yet.  It is made default to those who are participating
   in feature.experimental experiment.

 * Allow maintainers to tweak $(TAR) invocations done while making
   distribution tarballs.

 * "git index-pack" learned to resolve deltified objects with greater
   parallelism.

 * "diff-highlight" (in contrib/) had a logic to flush its output upon
   seeing a blank line but the way it detected a blank line was broken.

 * The logic to skip testing on the tagged commit and the tag itself
   was not quite consistent which led to failure of Windows test
   tasks.  It has been revamped to consistently skip revisions that
   have already been tested, based on the tree object of the revision.


Fixes since v2.28
-----------------

 * The "mediawiki" remote backend which lives in contrib/mw-to-git/
   and is not built with git by default, had an RCE bug allowing a
   malicious MediaWiki server operator to inject arbitrary commands
   for execution by a cloning client. This has been fixed.

   The bug was discovered and reported by Joern Schneeweisz of GitLab
   to the git-security mailing list. Its practical impact due to the
   obscurity of git-remote-mediawiki was deemed small enough to forgo
   a dedicated security release.

 * "git clone --separate-git-dir=$elsewhere" used to stomp on the
   contents of the existing directory $elsewhere, which has been
   taught to fail when $elsewhere is not an empty directory.
   (merge dfaa209a79 bw/fail-cloning-into-non-empty later to maint).

 * With the base fix to 2.27 regresion, any new extensions in a v0
   repository would still be silently honored, which is not quite
   right.  Instead, complain and die loudly.
   (merge ec91ffca04 jk/reject-newer-extensions-in-v0 later to maint).

 * Fetching from a lazily cloned repository resulted at the server
   side in attempts to lazy fetch objects that the client side has,
   many of which will not be available from the third-party anyway.
   (merge 77aa0941ce jt/avoid-lazy-fetching-upon-have-check later to maint).

 * Fix to an ancient bug caused by an over-eager attempt for
   optimization.
   (merge a98f7fb366 rs/add-index-entry-optim-fix later to maint).

 * Pushing a ref whose name contains non-ASCII character with the
   "--force-with-lease" option did not work over smart HTTP protocol,
   which has been corrected.
   (merge cd85b447bf bc/push-cas-cquoted-refname later to maint).

 * "git mv src dst", when src is an unmerged path, errored out
   correctly but with an incorrect error message to claim that src is
   not tracked, which has been clarified.
   (merge 9b906af657 ct/mv-unmerged-path-error later to maint).

 * Fix to a regression introduced during 2.27 cycle.
   (merge cada7308ad en/fill-directory-exponential later to maint).

 * Command line completion (in contrib/) update.
   (merge 688b87c81b mp/complete-show-color-moved later to maint).

 * All "mergy" operations that internally use the merge-recursive
   machinery should honor the merge.renormalize configuration, but
   many of them didn't.

 * Doc cleanup around "worktree".
   (merge dc9c144be5 es/worktree-doc-cleanups later to maint).

 * The "git blame --first-parent" option was not documented, but now
   it is.
   (merge 11bc12ae1e rp/blame-first-parent-doc later to maint).

 * The logic to find the ref transaction hook script attempted to
   cache the path to the found hook without realizing that it needed
   to keep a copied value, as the API it used returned a transitory
   buffer space.  This has been corrected.
   (merge 09b2aa30c9 ps/ref-transaction-hook later to maint).

 * Recent versions of "git diff-files" shows a diff between the index
   and the working tree for "intent-to-add" paths as a "new file"
   patch; "git apply --cached" should be able to take "git diff-files"
   and should act as an equivalent to "git add" for the path, but the
   command failed to do so for such a path.
   (merge 4c025c667e rp/apply-cached-with-i-t-a later to maint).

 * "git diff [<tree-ish>] $path" for a $path that is marked with i-t-a
   bit was not showing the mode bits from the working tree.
   (merge cb0dd22b82 rp/ita-diff-modefix later to maint).

 * Ring buffer with size 4 used for bin-hex translation resulted in a
   wrong object name in the sequencer's todo output, which has been
   corrected.
   (merge 5da69c0dac ak/sequencer-fix-find-uniq-abbrev later to maint).

 * When given more than one target line ranges, "git blame -La,b
   -Lc,d" was over-eager to coalesce groups of original lines and
   showed incorrect results, which has been corrected.
   (merge c2ebaa27d6 jk/blame-coalesce-fix later to maint).

 * The regexp to identify the function boundary for FORTRAN programs
   has been updated.
   (merge 75c3b6b2e8 pb/userdiff-fortran-update later to maint).

 * A few end-user facing messages have been updated to be
   hash-algorithm agnostic.
   (merge 4279000d3e jc/object-names-are-not-sha-1 later to maint).

 * "unlink" emulation on MinGW has been optimized.
   (merge 680e0b4524 jh/mingw-unlink later to maint).

 * The purpose of "git init --separate-git-dir" is to initialize a
   new project with the repository separate from the working tree,
   or, in the case of an existing project, to move the repository
   (the .git/ directory) out of the working tree. It does not make
   sense to use --separate-git-dir with a bare repository for which
   there is no working tree, so disallow its use with bare
   repositories.
   (merge ccf236a23a es/init-no-separate-git-dir-in-bare later to maint).

 * "ls-files -o" mishandled the top-level directory of another git
   working tree that hangs in the current git working tree.
   (merge ab282aa548 en/dir-nonbare-embedded later to maint).

 * Fix some incorrect UNLEAK() annotations.
   (merge 3e19816dc0 jk/unleak-fixes later to maint).

 * Use more buffered I/O where we used to call many small write(2)s.
   (merge a698d67b08 rs/more-buffered-io later to maint).

 * The patch-id computation did not ignore the "incomplete last line"
   marker like whitespaces.
   (merge 82a62015a7 rs/patch-id-with-incomplete-line later to maint).

 * Updates into a lazy/partial clone with a submodule did not work
   well with transfer.fsckobjects set.

 * The parser for "git for-each-ref --format=..." was too loose when
   parsing the "%(trailers...)" atom, and forgot that "trailers" and
   "trailers:<modifiers>" are the only two allowed forms, which has
   been corrected.
   (merge 2c22e102f8 hv/ref-filter-trailers-atom-parsing-fix later to maint).

 * Long ago, we decided to use 3 threads by default when running the
   index-pack task in parallel, which has been adjusted a bit upwards.
   (merge fbff95b67f jk/index-pack-w-more-threads later to maint).

 * "git restore/checkout --no-overlay" with wildcarded pathspec
   mistakenly removed matching paths in subdirectories, which has been
   corrected.
   (merge bfda204ade rs/checkout-no-overlay-pathspec-fix later to maint).

 * The description of --cached/--index options in "git apply --help"
   has been updated.
   (merge d064702be3 rp/apply-cached-doc later to maint).

 * Feeding "$ZERO_OID" to "git log --ignore-missing --stdin", and
   running "git log --ignore-missing $ZERO_OID" fell back to start
   digging from HEAD; it has been corrected to become a no-op, like
   "git log --tags=no-tag-matches-this-pattern" does.
   (merge 04a0e98515 jk/rev-input-given-fix later to maint).

 * Various callers of run_command API have been modernized.
   (merge afbdba391e jc/run-command-use-embedded-args later to maint).

 * List of options offered and accepted by "git add -i/-p" were
   inconsistent, which have been corrected.
   (merge ce910287e7 pw/add-p-allowed-options-fix later to maint).

 * "git diff --stat -w" showed 0-line changes for paths whose changes
   were only whitespaces, which was not intuitive.  We now omit such
   paths from the stat output.
   (merge 1cf3d5db9b mr/diff-hide-stat-wo-textual-change later to maint).

 * It was possible for xrealloc() to send a non-NULL pointer that has
   been freed, which has been fixed.
   (merge 6479ea4a8a jk/xrealloc-avoid-use-after-free later to maint).

 * "git status" has trouble showing where it came from by interpreting
   reflog entries that record certain events, e.g. "checkout @{u}", and
   gives a hard/fatal error.  Even though it inherently is impossible
   to give a correct answer because the reflog entries lose some
   information (e.g. "@{u}" does not record what branch the user was
   on hence which branch 'the upstream' needs to be computed, and even
   if the record were available, the relationship between branches may
   have changed), at least hide the error and allow "status" to show its
   output.

 * "git status --short" quoted a path with SP in it when tracked, but
   not those that are untracked, ignored or unmerged.  They are all
   shown quoted consistently.

 * "git diff/show" on a change that involves a submodule used to read
   the information on commits in the submodule from a wrong repository
   and gave a wrong information when the commit-graph is involved.
   (merge 85a1ec2c32 mf/submodule-summary-with-correct-repository later to maint).

 * Unlike "git config --local", "git config --worktree" did not fail
   early and cleanly when started outside a git repository.
   (merge 378fe5fc3d mt/config-fail-nongit-early later to maint).

 * There is a logic to estimate how many objects are in the
   repository, which is meant to run once per process invocation, but
   it ran every time the estimated value was requested.
   (merge 67bb65de5d jk/dont-count-existing-objects-twice later to maint).

 * "git remote set-head" that failed still said something that hints
   the operation went through, which was misleading.
   (merge 5a07c6c3c2 cs/don-t-pretend-a-failed-remote-set-head-succeeded later to maint).

 * "git fetch --all --ipv4/--ipv6" forgot to pass the protocol options
   to instances of the "git fetch" that talk to individual remotes,
   which has been corrected.
   (merge 4e735c1326 ar/fetch-ipversion-in-all later to maint).

 * The "unshelve" subcommand of "git p4" incorrectly used commit^N
   where it meant to say commit~N to name the Nth generation
   ancestor, which has been corrected.
   (merge 0acbf5997f ld/p4-unshelve-fix later to maint).

 * "git clone" that clones from SHA-1 repository, while
   GIT_DEFAULT_HASH set to use SHA-256 already, resulted in an
   unusable repository that half-claims to be SHA-256 repository
   with SHA-1 objects and refs.  This has been corrected.

 * Adjust sample hooks for hash algorithm other than SHA-1.
   (merge d8d3d632f4 dl/zero-oid-in-hooks later to maint).

 * "git range-diff" showed incorrect diffstat, which has been
   corrected.

 * Earlier we taught "git pull" to warn when the user does not say the
   histories need to be merged, rebased or accepts only fast-
   forwarding, but the warning triggered for those who have set the
   pull.ff configuration variable.
   (merge 54200cef86 ah/pull later to maint).

 * Compilation fix around type punning.
   (merge 176380fd11 jk/drop-unaligned-loads later to maint).

 * "git blame --ignore-rev/--ignore-revs-file" failed to validate
   their input are valid revision, and failed to take into account
   that the user may want to give an annotated tag instead of a
   commit, which has been corrected.
   (merge 610e2b9240 jc/blame-ignore-fix later to maint).

 * "git bisect start X Y", when X and Y are not valid committish
   object names, should take X and Y as pathspec, but didn't.
   (merge 73c6de06af cc/bisect-start-fix later to maint).

 * The explanation of the "scissors line" has been clarified.
   (merge 287416dba6 eg/mailinfo-doc-scissors later to maint).

 * A race that leads to an access to a free'd data was corrected in
   the codepath that reads pack files.
   (merge bda959c476 mt/delta-base-cache-races later to maint).

 * in_merge_bases_many(), a way to see if a commit is reachable from
   any commit in a set of commits, was totally broken when the
   commit-graph feature was in use, which has been corrected.
   (merge 8791bf1841 ds/in-merge-bases-many-optim-bug later to maint).

 * "git submodule update --quiet" did not squelch underlying "rebase"
   and "pull" commands.
   (merge 3ad0401e9e td/submodule-update-quiet later to maint).

 * The lazy fetching done internally to make missing objects available
   in a partial clone incorrectly made permanent damage to the partial
   clone filter in the repository, which has been corrected.

 * "log -c --find-object=X" did not work well to find a merge that
   involves a change to an object X from only one parent.
   (merge 957876f17d jk/diff-cc-oidfind-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 84544f2ea3 sk/typofixes later to maint).
   (merge b17f411ab5 ar/help-guides-doc later to maint).
   (merge 98c6871fad rs/grep-simpler-parse-object-or-die-call later to maint).
   (merge 861c4ce141 en/typofixes later to maint).
   (merge 60e47f6773 sg/ci-git-path-fix-with-pyenv later to maint).
   (merge e2bfa50ac3 jb/doc-packfile-name later to maint).
   (merge 918d8ff780 es/worktree-cleanup later to maint).
   (merge dc156bc31f ma/t1450-quotefix later to maint).
   (merge 56e743426b en/merge-recursive-comment-fixes later to maint).
   (merge 7d23ff818f rs/bisect-oid-to-hex-fix later to maint).
   (merge de20baf2c9 ny/notes-doc-sample-update later to maint).
   (merge f649aaaf82 so/rev-parser-errormessage-fix later to maint).
   (merge 6103d58b7f bc/sha-256-cvs-svn-updates later to maint).
   (merge ac900fddb7 ma/stop-progress-null-fix later to maint).
   (merge e767963ab6 rs/upload-pack-sigchain-fix later to maint).
   (merge a831908599 rs/preserve-merges-unused-code-removal later to maint).
   (merge 6dfefe70a9 jb/commit-graph-doc-fix later to maint).
   (merge 847b37271e pb/set-url-docfix later to maint).
   (merge 748f733d54 mt/checkout-entry-dead-code-removal later to maint).
   (merge ce820cbd58 dl/subtree-docs later to maint).
   (merge 55fe225dde jk/leakfix later to maint).
   (merge ee22a29215 so/pretty-abbrev-doc later to maint).
   (merge 3100fd5588 jc/post-checkout-doc later to maint).
   (merge 17bae89476 pb/doc-external-diff-env later to maint).
   (merge 27ed6ccc12 jk/worktree-check-clean-leakfix later to maint).
   (merge 1302badd16 ea/blame-use-oideq later to maint).
   (merge e6d5a11fed al/t3200-back-on-a-branch later to maint).
   (merge 324efcf6b6 pw/add-p-leakfix later to maint).
   (merge 1c6ffb546b jk/add-i-fixes later to maint).
   (merge e40e936551 cd/commit-graph-doc later to maint).
   (merge 0512eabd91 jc/sequencer-stopped-sha-simplify later to maint).
   (merge d01141de5a so/combine-diff-simplify later to maint).
   (merge 3be01e5ab1 sn/fast-import-doc later to maint).

----------------------------------------------------------------

Changes since v2.28.0 are as follows:

Aaron Lipman (12):
      t6030: modernize "git bisect run" tests
      rev-list: allow bisect and first-parent flags
      cmd_bisect__helper: defer parsing no-checkout flag
      bisect: introduce first-parent flag
      bisect: combine args passed to find_bisection()
      bisect: add first-parent option to documentation
      t3200: clean side effect of git checkout --orphan
      t3201: test multiple branch filter combinations
      Doc: cover multiple contains/no-contains filters
      ref-filter: allow merged and no-merged filters
      ref-filter: make internal reachable-filter API more precise
      Doc: prefer more specific file name

Adrian Moennich (1):
      ci: fix inconsistent indentation

Alban Gruin (1):
      t6300: fix issues related to %(contents:size)

Alex Henrie (1):
      pull: don't warn if pull.ff has been set

Alex Riesen (1):
      fetch: pass --ipv4 and --ipv6 options to sub-fetches

Andrei Rybak (1):
      git-help.txt: fix mentions of option --guides

Antti Keränen (1):
      rebase -i: fix possibly wrong onto hash in todo

Beat Bolli (1):
      gitk: rename "commit summary" to "commit reference"

Ben Wijen (1):
      git clone: don't clone into non-empty directory

Chris Torek (1):
      git-mv: improve error message for conflicted file

Christian Couder (4):
      Documentation: clarify %(contents:XXXX) doc
      t6300: test refs pointing to tree and blob
      ref-filter: add support for %(contents:size)
      bisect: don't use invalid oid as rev when starting

Christian Schlack (1):
      remote: don't show success message when set-head fails

Conor Davis (1):
      commit-graph-format.txt: fix no-parent value

Danny Lin (2):
      contrib/subtree: fix "unsure" for --message in the document
      contrib/subtree: document 'push' does not take '--squash'

Denton Liu (13):
      t3701: stop using `env` in force_color()
      t5324: reorder `run_with_limited_open_files test_might_fail`
      t7107: don't use test_must_fail()
      t9834: remove use of `test_might_fail p4`
      t9400: don't use test_must_fail with cvs
      test-lib-functions: restrict test_must_fail usage
      contrib/completion: complete options that take refs for format-patch
      hooks--pre-push.sample: modernize script
      hooks--pre-push.sample: use hash-agnostic zero OID
      hooks--update.sample: use hash-agnostic zero OID
      gitk: replace tabs with spaces
      compat/mingw.h: drop extern from function declaration
      Makefile: ASCII-sort += lists

Derrick Stolee (22):
      commit-graph: place bloom_settings in context
      commit-graph: change test to die on parse, not load
      bloom: fix logic in get_bloom_filter()
      commit-graph: persist existence of changed-paths
      revision.c: fix whitespace
      multi-pack-index: repack batches below --batch-size
      t/README: document GIT_TEST_DEFAULT_HASH
      commit-graph: use the "hash version" byte
      multi-pack-index: use hash version byte
      bloom/diff: properly short-circuit on max_changes
      maintenance: create basic maintenance runner
      maintenance: add --quiet option
      maintenance: replace run_auto_gc()
      maintenance: initialize task array
      maintenance: add commit-graph task
      maintenance: add --task option
      maintenance: take a lock on the objects directory
      maintenance: create maintenance.<task>.enabled config
      maintenance: use pointers to check --auto
      maintenance: add auto condition for commit-graph task
      maintenance: add trace2 regions for task execution
      commit-reach: fix in_merge_bases_many bug

Drew DeVault (1):
      git-send-email: die if sendmail.* config is set

Edmundo Carmona Antoranz (1):
      blame.c: replace instance of !oidcmp for oideq

Elijah Newren (26):
      Remove doubled words in various comments
      hashmap: fix typo in usage docs
      merge-recursive: fix unclear and outright wrong comments
      t6038: make tests fail for the right reason
      t6038: remove problematic test
      merge: make merge.renormalize work for all uses of merge machinery
      checkout: support renormalization with checkout -m <paths>
      Collect merge-related tests to t64xx
      t6418: tighten delete/normalize conflict testcase
      t6422: fix bad check against missing file
      t6416, t6422: fix incorrect untracked file count
      t6423: fix test setup for a couple tests
      t6422: fix multiple errors with the mod6 test expectations
      t6416, t6423: clarify some comments and fix some typos
      t6423: add an explanation about why one of the tests does not pass
      t6422, t6426: be more flexible for add/add conflicts involving renames
      t642[23]: be more flexible for add/add conflicts involving pair renames
      t6425: be more flexible with rename/delete conflict messages
      t3000: fix some test description typos
      dir: avoid prematurely marking nonbare repositories as matches
      sequencer: avoid garbled merge machinery messages due to commit labels
      mem-pool: add convenience functions for strdup and strndup
      mem-pool: use more standard initialization and finalization
      mem-pool: use consistent pool variable name
      dir: make clear_directory() free all relevant memory
      dir: fix problematic API to avoid memory leaks

Emily Shaffer (1):
      Revert "contrib: subtree: adjust test to change in fmt-merge-msg"

Eric Huber (1):
      gitk: Preserve window dimensions on exit when not using ttk themes

Eric Sunshine (22):
      worktree: drop pointless strbuf_release()
      worktree: drop unused code from get_linked_worktree()
      worktree: drop bogus and unnecessary path munging
      worktree: retire special-case normalization of main worktree path
      git-worktree.txt: employ fixed-width typeface consistently
      git-worktree.txt: consistently use term "working tree"
      git-worktree.txt: fix minor grammatical issues
      git-worktree.txt: make start of new sentence more obvious
      git-worktree.txt: link to man pages when citing other Git commands
      test_cmp: diagnose incorrect arguments
      init: disallow --separate-git-dir with bare repository
      worktree: add skeleton "repair" command
      worktree: teach "repair" to fix worktree back-links to main worktree
      worktree: teach "repair" to fix outgoing links to worktrees
      init: teach --separate-git-dir to repair linked worktrees
      init: make --separate-git-dir work from within linked worktree
      git-checkout.txt: document -d short option for --detach
      worktree: teach `add` to recognize -d as shorthand for --detach
      git-worktree.txt: discuss branch-based vs. throwaway worktrees
      diff: move show_interdiff() from its own file to diff-lib
      diff-lib: tighten show_interdiff()'s interface
      format-patch: use 'origin' as start of current-series-range when known

Evan Gates (1):
      Doc: show example scissors line

Han Xin (1):
      send-pack: run GPG after atomic push checking

Han-Wen Nienhuys (17):
      lib-t6000.sh: write tag using git-update-ref
      t3432: use git-reflog to inspect the reflog for HEAD
      bisect: treat BISECT_HEAD as a pseudo ref
      t1400: use git rev-parse for testing PSEUDOREF existence
      Modify pseudo refs through ref backend storage
      Make HEAD a PSEUDOREF rather than PER_WORKTREE.
      refs: move the logic to add \t to reflog to the files backend
      refs: split off reading loose ref data in separate function
      refs: fix comment about submodule ref_stores
      refs: move gitdir into base ref_store
      refs: read FETCH_HEAD and MERGE_HEAD generically
      refs: make refs_ref_exists public
      sequencer: treat CHERRY_PICK_HEAD as a pseudo ref
      builtin/commit: suggest update-ref for pseudoref removal
      sequencer: treat REVERT_HEAD as a pseudo ref
      refs: move REF_LOG_ONLY to refs-internal.h
      refs: add GIT_TRACE_REFS debugging mechanism

Hariom Verma (10):
      t6300: unify %(trailers) and %(contents:trailers) tests
      ref-filter: 'contents:trailers' show error if `:` is missing
      ref-filter: support different email formats
      ref-filter: refactor `grab_objectname()`
      ref-filter: modify error messages in `grab_objectname()`
      ref-filter: rename `objectname` related functions and fields
      ref-filter: add `short` modifier to 'tree' atom
      ref-filter: add `short` modifier to 'parent' atom
      pretty: refactor `format_sanitized_subject()`
      ref-filter: add `sanitize` option for 'subject' atom

Hugo Locurcio (1):
      bisect: swap command-line options in documentation

Jacob Keller (4):
      refspec: fix documentation referring to refspec_item
      refspec: make sure stack refspec_item variables are zeroed
      refspec: add support for negative refspecs
      format-patch: teach format.useAutoBase "whenAble" option

Jean-Noël Avila (4):
      git-bisect-lk2009: make continuation of list indented
      doc: use linkgit macro where needed.
      doc: git-remote fix ups
      doc: fix the bnf like style of some commands

Jeff Hostetler (1):
      mingw: improve performance of mingw_unlink()

Jeff King (82):
      t6000: use test_tick consistently
      t9700: loosen ident timezone regex
      t5539: make timestamp requirements more explicit
      t9100: explicitly unset GIT_COMMITTER_DATE
      test-lib: set deterministic default author/committer date
      t9100: stop depending on commit timestamps
      verify_repository_format(): complain about new extensions in v0 repo
      argv-array: use size_t for count and alloc
      argv-array: rename to strvec
      strvec: rename files from argv-array to strvec
      quote: rename sq_dequote_to_argv_array to mention strvec
      strvec: convert builtin/ callers away from argv_array name
      strvec: convert more callers away from argv_array name
      strvec: convert remaining callers away from argv_array name
      strvec: fix indentation in renamed calls
      strvec: update documention to avoid argv_array
      strvec: drop argv_array compatibility layer
      log: drop "--cc implies -m" logic
      revision: add "--no-diff-merges" option to counteract "-m"
      log: enable "-m" automatically with "--first-parent"
      doc/git-log: move "Diff Formatting" from rev-list-options
      doc/git-log: drop "-r" diff option
      doc/git-log: move "-t" into diff-options list
      doc/git-log: clarify handling of merge commit diffs
      strvec: rename struct fields
      config: work around gcc-10 -Wstringop-overflow warning
      revision: avoid out-of-bounds read/write on empty pathspec
      revision: avoid leak when preparing bloom filter for "/"
      t5616: use test_i18ngrep for upload-pack errors
      sideband: mark "remote error:" prefix for translation
      t1416: avoid hard-coded sha1 ids
      t8003: check output of coalesced blame
      t8003: factor setup out of coalesce test
      blame: only coalesce lines that are adjacent in result
      Makefile: drop builtins from MSVC pdb list
      make credential helpers builtins
      make git-bugreport a builtin
      make git-fast-import a builtin
      drop vcs-svn experiment
      stop calling UNLEAK() before die()
      ls-remote: simplify UNLEAK() usage
      clear_pattern_list(): clear embedded hashmaps
      submodule--helper: use strbuf_release() to free strbufs
      checkout: fix leak of non-existent branch names
      config: fix leaks from git_config_get_string_const()
      config: drop git_config_get_string_const()
      config: fix leak in git_config_get_expiry_in_days()
      submodule--helper: fix leak of core.worktree value
      p5302: disable thread-count parameter tests by default
      p5302: count up to online-cpus for thread tests
      index-pack: adjust default threading cap
      revision: set rev_input_given in handle_revision_arg()
      worktree: fix leak in check_clean_worktree()
      xrealloc: do not reuse pointer freed by zero-length realloc()
      add-patch: fix inverted return code of repo_read_index()
      add--interactive.perl: specify --no-color explicitly
      packfile: actually set approximate_object_count_valid
      diff-highlight: correctly match blank lines for flush
      bswap.h: drop unaligned loads
      Revert "fast-export: use local array to store anonymized oid"
      shortlog: change "author" variables to "ident"
      protocol: re-enable v2 protocol by default
      shortlog: add grouping option
      trailer: add interface for iterating over commit trailers
      shortlog: match commit trailers with --group
      shortlog: de-duplicate trailer values
      shortlog: rename parse_stdin_ident()
      shortlog: parse trailer idents
      shortlog: allow multiple groups to be specified
      convert: drop unused crlf_action from check_global_conv_flags_eol()
      drop unused argc parameters
      env--helper: write to opt->value in parseopt helper
      assert PARSE_OPT_NONEG in parse-options callbacks
      push: drop unused repo argument to do_push()
      sequencer: drop repository argument from run_git_commit()
      sparse-checkout: fill in some options boilerplate
      test-advise: check argument count with argc instead of argv
      sequencer: handle ignore_footer when parsing trailers
      dir.c: drop unused "untracked" from treat_path_fast()
      combine-diff: handle --find-object in multitree code path
      index-pack: restore "resolving deltas" progress meter
      index-pack: drop type_cas mutex

Jiang Xin (10):
      transport: not report a non-head push as a branch
      t5411: add basic test cases for proc-receive hook
      receive-pack: add new proc-receive hook
      receive-pack: feed report options to post-receive
      New capability "report-status-v2" for git-push
      doc: add document for capability report-status-v2
      receive-pack: new config receive.procReceiveRefs
      t5411: test updates of remote-tracking branches
      transport: parse report options for tracking refs
      doc: add documentation for the proc-receive hook

Johannes Berg (2):
      pack-write/docs: update regarding pack naming
      docs: commit-graph: fix some whitespace in the diagram

Johannes Schindelin (26):
      t3404: prepare 'short SHA-1 collision' tests for SHA-256
      ci: fix indentation of the `ci-config` job
      ci: avoid ugly "failure" in the `ci-config` job
      t/test-terminal: avoid non-inclusive language
      fast-export: avoid using unnecessary language in a code comment
      t3200: avoid variations of the `master` branch name
      msvc: copy the correct `.pdb` files in the Makefile target `install`
      Optionally skip linking/copying the built-ins
      ci: stop linking built-ins to the dashed versions
      cmake: ignore files generated by CMake as run in Visual Studio
      tests: avoid variations of the `master` branch name
      t9902: avoid using the branch name `master`
      cmake: do find Git for Windows' shell interpreter
      cmake: ensure that the `vcpkg` packages are found on Windows
      cmake: fall back to using `vcpkg`'s `msgfmt.exe` on Windows
      cmake: quote the path accurately when editing `test-lib.sh`
      cmake (Windows): let the `.dll` files be found when running the tests
      cmake (Windows): complain when encountering an unknown compiler
      cmake (Windows): initialize vcpkg/build dependencies automatically
      cmake (Windows): recommend using Visual Studio's built-in CMake support
      GitHub workflow: automatically follow minor updates of setup-msbuild
      help: do not expect built-in commands to be hardlinked
      t1415: avoid using `main` as ref name
      tests: avoid using the branch name `main`
      ci: skip GitHub workflow runs for already-tested commits/trees
      ci: do not skip tagged revisions in GitHub workflows

Johannes Sixt (1):
      gitk: Un-hide selection in areas with non-default background color

Jonathan Tan (33):
      upload-pack: do not lazy-fetch "have" objects
      pack-objects: refactor to oid_object_info_extended
      pack-objects: prefetch objects to be packed
      sha1-file: make pretend_object_file() not prefetch
      sha1-file: introduce no-lazy-fetch has_object()
      apply: do not lazy fetch when applying binary
      pack-objects: no fetch when allow-{any,promisor}
      fsck: do not lazy fetch known non-promisor object
      negotiator/noop: add noop fetch negotiator
      fetch: allow refspecs specified through stdin
      fetch: avoid reading submodule config until needed
      fetch: only populate existing_refs if needed
      fetch-pack: do not lazy-fetch during ref iteration
      promisor-remote: lazy-fetch objects in subprocess
      fetch-pack: remove no_dependents code
      fetch-pack: in partial clone, pass --promisor
      Documentation: deltaBaseCacheLimit is per-thread
      index-pack: remove redundant parameter
      index-pack: unify threaded and unthreaded code
      index-pack: remove redundant child field
      index-pack: calculate {ref,ofs}_{first,last} early
      index-pack: make resolve_delta() assume base data
      (various): document from_promisor parameter
      fetch-pack: document only_packfile in get_pack()
      fetch-pack: make packfile URIs work with transfer.fsckobjects
      fetch: no FETCH_HEAD display if --no-write-fetch-head
      sha1-name: replace unsigned int with option struct
      refs: move dwim_ref() to header file
      wt-status: tolerate dangling marks
      index-pack: make quantum of work smaller
      promisor-remote: remove unused variable
      fetch: do not override partial clone filter
      index-pack: make get_base_data() comment clearer

Junio C Hamano (50):
      gitk: be prepared to be run in a bare repository
      reflog: cleanse messages in the refs.c layer
      Revert "fmt-merge-msg: stop treating `master` specially"
      fmt-merge-msg: allow merge destination to be omitted again
      First batch post 2.28
      The second batch -- mostly minor typofixes
      Third batch
      Fourth batch
      Documentation: don't hardcode command categories twice
      compat-util: type-check parameters of no-op replacement functions
      Fifth batch
      Sixth batch
      Seventh batch
      messages: avoid SHA-1 in end-user facing messages
      Eighth batch
      fetch: optionally allow disabling FETCH_HEAD update
      Ninth batch
      ident: say whose identity is missing when giving user.name hint
      Tenth batch
      t3436: do not run git-merge-recursive in dashed form
      transport-helper: do not run git-remote-ext etc. in dashed form
      cvsexportcommit: do not run git programs in dashed form
      run_command: teach API users to use embedded 'args' more
      credential-cache: use child_process.args
      Eleventh batch
      doc: clarify how exit status of post-checkout hook is used
      Twelfth batch
      Thirteenth batch
      add -i: use the built-in version when feature.experimental is set
      Makefile: allow extra tweaking of distribution tarball
      Fourteenth batch
      quote_path: rename quote_path_relative() to quote_path()
      quote_path: give flags parameter to quote_path()
      quote_path: optionally allow quoting a path with SP in it
      quote_path: code clarification
      wt-status: consistently quote paths in "status --short" output
      quote: rename misnamed sq_lookup[] to cq_lookup[]
      quote: turn 'nodq' parameter into a set of flags
      Fifteenth batch
      Sixteenth batch
      t8013: minimum preparatory clean-up
      blame: validate and peel the object names on the ignore list
      t1506: rev-parse A..B and A...B
      sequencer: stop abbreviating stopped-sha file
      Seventeenth batch
      Eighteenth batch
      hashmap_for_each_entry(): workaround MSVC's runtime check failure #3
      Nineteenth batch
      Git 2.29-rc0
      Git 2.29-rc1

Kazuhiro Kato (1):
      gitk: fix branch name encoding error

Kyohei Kadota (1):
      Fit to Plan 9's ANSI/POSIX compatibility layer

Lin Sun (1):
      mergetool: allow auto-merge for meld to follow the vim-diff behavior

Luke Diamand (2):
      git-p4 unshelve: adding a commit breaks git-p4 unshelve
      git-p4: use HEAD~$n to find parent commit for unshelve

Martin Ågren (19):
      dir: check pathspecs before returning `path_excluded`
      t1450: fix quoting of NUL byte when corrupting pack
      t: don't spuriously close and reopen quotes
      t4104: modernize and simplify quoting
      progress: don't dereference before checking for NULL
      http-protocol.txt: document SHA-256 "want"/"have" format
      index-format.txt: document SHA-256 index format
      protocol-capabilities.txt: clarify "allow-x-sha1-in-want" re SHA-256
      shallow.txt: document SHA-256 shallow format
      Documentation: mark `--object-format=sha256` as experimental
      wt-status: replace sha1 mentions with oid
      wt-status: print to s->fp, not stdout
      wt-status: introduce wt_status_state_free_buffers()
      worktree: inline `worktree_ref()` into its only caller
      worktree: update renamed variable in comment
      worktree: rename copy-pasted variable
      worktree: use skip_prefix to parse target
      config/fmt-merge-msg.txt: drop space in quote
      config/uploadpack.txt: fix typo in `--filter=tree:<n>`

Matheus Tavares (4):
      checkout_entry(): remove unreachable error() call
      config: complain about --worktree outside of a git repo
      packfile: fix race condition on unpack_entry()
      packfile: fix memory leak in add_delta_base_cache()

Matthew Rogers (1):
      diff: teach --stat to ignore uninteresting modifications

Michael Forney (2):
      revision: use repository from rev_info when parsing commits
      submodule: use submodule repository when preparing summary

Michal Privoznik (1):
      completion: add show --color-moved[-ws]

Miriam Rubio (4):
      bisect--helper: BUG() in cmd_*() on invalid subcommand
      bisect--helper: use '-res' in 'cmd_bisect__helper' return
      bisect--helper: introduce new `write_in_file()` function
      bisect: call 'clear_commit_marks_all()' in 'bisect_next_all()'

Nikita Leonov (1):
      credential: treat CR/LF as line endings in the credential protocol

Noam Yorav-Raphael (1):
      docs: improve the example that illustrates git-notes path names

Orgad Shaneh (5):
      vcbuild: fix library name for expat with make MSVC=1
      vcbuild: fix batch file name in README
      fetch: do not look for submodule changes in unchanged refs
      submodule: suppress checking for file name and ref ambiguity for object ids
      contrib/buildsystems: fix expat library name for generated vcxproj

Patrick Steinhardt (2):
      refs: fix interleaving hook calls with reference-transaction hook
      refs: remove lookup cache for reference-transaction hook

Paul Mackerras (1):
      gitk: Resize panes correctly when reducing window size

Philippe Blain (19):
      git-log.txt: add links to 'rev-list' and 'diff' docs
      revisions.txt: describe 'rev1 rev2 ...' meaning for ranges
      git-rev-list.txt: fix Asciidoc syntax
      git-rev-list.txt: tweak wording in set operations
      git-rev-list.txt: move description to separate file
      git-log.txt: include rev-list-description.txt
      command-list.txt: add missing 'gitcredentials' and 'gitremote-helpers'
      help: drop usage of 'common' and 'useful' for guides
      git.txt: add list of guides
      fetch, pull doc: correct description of '--set-upstream'
      userdiff: add tests for Fortran xfuncname regex
      userdiff: improve Fortran xfuncname regex
      git-imap-send.txt: don't duplicate 'Examples' sections
      git-imap-send.txt: do verify SSL certificate for gmail.com
      git-imap-send.txt: add note about localized Gmail folders
      doc: mention GIT_SEQUENCE_EDITOR and 'sequence.editor' more
      git.txt: correct stale 'GIT_EXTERNAL_DIFF' description
      Makefile: add support for generating JSON compilation database
      gitsubmodules doc: invoke 'ls-files' with '--recurse-submodules'

Phillip Wood (7):
      add -p: use ALLOC_GROW_BY instead of ALLOW_GROW
      add -p: fix checking of user input
      am: stop exporting GIT_COMMITTER_DATE
      rebase -i: support --committer-date-is-author-date
      rebase -i: support --ignore-date
      add -p: fix memory leak
      add -p: fix editing of intent-to-add paths

Pranit Bauva (2):
      bisect--helper: reimplement `bisect_autostart` shell function in C
      bisect--helper: reimplement `bisect_next` and `bisect_auto_next` shell functions in C

Prathamesh Chavan (1):
      submodule: port submodule subcommand 'summary' from shell to C

Raymond E. Pasco (6):
      apply: allow "new file" patches on i-t-a entries
      blame-options.txt: document --first-parent option
      apply: make i-t-a entries never match worktree
      t4140: test apply with i-t-a paths
      diff-lib: use worktree mode in diffs from i-t-a entries
      git-apply.txt: update descriptions of --cached, --index

René Scharfe (21):
      read-cache: remove bogus shortcut
      grep: avoid using oid_to_hex() with parse_object_or_die()
      bisect: use oid_to_hex_r() instead of memcpy()+oid_to_hex()
      upload-pack: remove superfluous sigchain_pop() call
      rebase: remove unused function reschedule_last_action
      connected: use buffered I/O to talk to rev-list
      midx: use buffered I/O to talk to pack-objects
      upload-pack: use buffered I/O to talk to rev-list
      patch-id: ignore newline at end of file in diff_flush_patch_id()
      checkout, restore: make pathspec recursive
      read-cache: fix mem-pool allocation for multi-threaded index loading
      push: release strbufs used for refspec formatting
      refspec: add and use refspec_appendf()
      fast-import: use write_pack_header()
      midx: use hashwrite_u8() in write_midx_header()
      pack-bitmap-write: use hashwrite_be32() in write_hash_cache()
      pack-write: use hashwrite_be32() in write_idx_file()
      archive: read short blobs in archive.c::write_archive_entry()
      archive: add --add-file
      Makefile: use git-archive --add-file
      ref-filter: plug memory leak in reach_filter()

Rohit Ashiwal (2):
      rebase -i: add --ignore-whitespace flag
      rebase: add --reset-author-date

Ryan Zoeller (2):
      parse-options: add --git-completion-helper-all
      completion: add GIT_COMPLETION_SHOW_ALL env var

SZEDER Gábor (15):
      tree-walk.c: don't match submodule entries for 'submod/anything'
      commit-graph: fix parsing the Chunk Lookup table
      commit-graph-format.txt: all multi-byte numbers are in network byte order
      commit-slab: add a function to deep free entries on the slab
      diff.h: drop diff_tree_oid() & friends' return value
      commit-graph: clean up #includes
      commit-graph: simplify parse_commit_graph() #1
      commit-graph: simplify parse_commit_graph() #2
      commit-graph: simplify write_commit_graph_file() #1
      commit-graph: simplify write_commit_graph_file() #2
      commit-graph: unify the signatures of all write_graph_chunk_*() functions
      commit-graph: simplify chunk writes into loop
      commit-graph: check chunk sizes after writing
      commit-graph: check all leading directories in changed path Bloom filters
      ci: use absolute PYTHON_PATH in the Linux jobs

Samanta Navarro (1):
      fast-import: fix typo in documentation

Sergey Organov (9):
      revision: fix die() message for "--unpacked="
      revision: change "--diff-merges" option to require parameter
      doc/git-log: describe --diff-merges=off
      t/t4013: add test for --diff-merges=off
      pretty-options.txt: fix --no-abbrev-commit description
      revision: add separate field for "-m" of "diff-index -m"
      log_tree_diff: get rid of code duplication for first_parent_only
      log_tree_diff: get rid of extra check for NULL
      diff: get rid of redundant 'dense' argument

Shourya Shukla (11):
      submodule: remove extra line feeds between callback struct and macro
      submodule: rename helper functions to avoid ambiguity
      t7421: introduce a test script for verifying 'summary' output
      t7401: modernize style
      t7401: use 'short' instead of 'verify' and cut in rev-parse calls
      t7401: change syntax of test_i18ncmp calls for clarity
      t7401: change indentation for enhanced readability
      t7401: add a NEEDSWORK
      submodule: eliminate unused parameters from print_submodule_summary()
      submodule: fix style in function definition
      t7421: eliminate 'grep' check in t7421.4 for mingw compatibility

Sibi Siddharthan (8):
      Introduce CMake support for configuring Git
      cmake: generate the shell/perl/python scripts and templates, translations
      cmake: installation support for git
      cmake: support for testing git with ctest
      cmake: support for testing git when building out of the source tree
      cmake: support for building git on windows with mingw
      cmake: support for building git on windows with msvc and clang.
      ci: modification of main.yml to use cmake for vs-build job

Simon Legner (1):
      remote-mediawiki: fix duplicate revisions being imported

Stefan Dotterweich (1):
      gitk: add diff lines background colors

Steve Kemp (1):
      comment: fix spelling mistakes inside comments

Taylor Blau (18):
      revision: empty pathspecs should not use Bloom filters
      list_objects_filter_options: introduce 'list_object_filter_config_name'
      upload-pack.c: allow banning certain object filter(s)
      upload-pack.c: introduce 'uploadpackfilter.tree.maxDepth'
      builtin/repack.c: invalidate MIDX only when necessary
      midx: traverse the local MIDX first
      commit-graph: introduce 'get_bloom_filter_settings()'
      t4216: use an '&&'-chain
      commit-graph: pass a 'struct repository *' in more places
      t/helper/test-read-graph.c: prepare repo settings
      commit-graph: respect 'commitGraph.readChangedPaths'
      commit-graph.c: store maximum changed paths
      bloom: split 'get_bloom_filter()' in two
      bloom: use provided 'struct bloom_filter_settings'
      bloom: encode out-of-bounds filters as non-empty
      commit-graph: rename 'split_commit_graph_opts'
      builtin/commit-graph.c: introduce '--max-new-filters=<n>'
      commit-graph: introduce 'commitGraph.maxNewFilters'

Theodore Dubois (1):
      submodule update: silence underlying merge/rebase with "--quiet"

Thomas Guyot-Sionnest (1):
      diff: fix modified lines stats with --stat and --numstat

brian m. carlson (48):
      remote-curl: make --force-with-lease work with non-ASCII ref names
      t: make test-bloom initialize repository
      t1001: use $ZERO_OID
      t3305: make hash agnostic
      t6100: make hash size independent
      t6101: make hash size independent
      t6301: make hash size independent
      t6500: specify test values for SHA-256
      t6501: avoid hard-coded objects
      t7003: compute appropriate length constant
      t7063: make hash size independent
      t7201: abstract away SHA-1-specific constants
      t7102: abstract away SHA-1-specific constants
      t7400: make hash size independent
      t7405: make hash size independent
      t7506: avoid checking for SHA-1-specific constants
      t7508: use $ZERO_OID instead of hard-coded constant
      t8002: make hash size independent
      t8003: make hash size independent
      t8011: make hash size independent
      t9300: abstract away SHA-1-specific constants
      t9300: use $ZERO_OID instead of hard-coded object ID
      t9301: make hash size independent
      t9350: make hash size independent
      t9500: ensure that algorithm info is preserved in config
      t9700: make hash size independent
      t5308: make test work with SHA-256
      t0410: mark test with SHA1 prerequisite
      http-fetch: set up git directory before parsing pack hashes
      builtin/verify-pack: implement an --object-format option
      bundle: add new version for use with SHA-256
      setup: add support for reading extensions.objectformat
      repository: enable SHA-256 support by default
      t: add test_oid option to select hash algorithm
      t: allow testing different hash algorithms via environment
      t: make SHA1 prerequisite depend on default hash
      ci: run tests with SHA-256
      docs: add documentation for extensions.objectFormat
      t: remove test_oid_init in tests
      git-cvsexportcommit: support Perl before 5.10.1
      docs: document SHA-256 pack and indices
      docs: fix step in transition plan
      t4013: improve diff-post-processor logic
      po: add missing letter for French message
      docs: explain why squash merges are broken with long-running branches
      docs: explain why reverts are not always applied on merge
      docs: explain how to deal with files that are always modified
      builtin/clone: avoid failure with GIT_DEFAULT_HASH

pudinha (2):
      mergetool--lib: improve support for vimdiff-style tool variants
      mergetools: add support for nvimdiff (neovim) family

Ákos Uzonyi (2):
      completion: use "prev" variable instead of introducing "prevword"
      completion: complete refs after 'git restore -s'

Ævar Arnfjörð Bjarmason (17):
      remote-mediawiki doc: correct link to GitHub project
      remote-mediawiki doc: link to MediaWiki's current version
      remote-mediawiki doc: don't hardcode Debian PHP versions
      remote-mediawiki tests: use the login/password variables
      remote-mediawiki tests: use a 10 character password
      remote-mediawiki tests: use test_cmp in tests
      remote-mediawiki tests: change `[]` to `test`
      remote-mediawiki tests: use "$dir/" instead of "$dir."
      remote-mediawiki tests: use a more idiomatic dispatch table
      remote-mediawiki tests: replace deprecated Perl construct
      remote-mediawiki tests: use inline PerlIO for readability
      remote-mediawiki tests: use CLI installer
      remote-mediawiki tests: annotate failing tests
      remote-mediawiki: provide a list form of run_git()
      remote-mediawiki: convert to quoted run_git() invocation
      remote-mediawiki: annotate unquoted uses of run_git()
      remote-mediawiki: use "sh" to eliminate unquoted commands

Đoàn Trần Công Danh (2):
      diff: index-line: respect --abbrev in object's name
      t5534: split stdout and stderr redirection

Роман Донченко (2):
      gitk: don't highlight files after submodules as submodules
      gitk: fix the context menu not appearing in the presence of submodule diffs


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.29.0-rc0
@ 2020-10-05 22:41  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2020-10-05 22:41 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

An early preview release Git v2.29.0-rc0 is now available for
testing at the usual places.  It is comprised of 588 non-merge
commits since v2.28.0, contributed by 76 people, 22 of which are
new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.29.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.28.0 are as follows.
Welcome to the Git development community!

  Aaron Lipman, Adrian Moennich, Ákos Uzonyi, Antti Keränen,
  Christian Schlack, Conor Davis, Eric Huber, Evan Gates, Han
  Xin, Hugo Locurcio, Kyohei Kadota, Lin Sun, Nikita Leonov,
  Noam Yorav-Raphael, pudinha, Raymond E. Pasco, Ryan Zoeller,
  Samanta Navarro, Sibi Siddharthan, Simon Legner, Steve Kemp,
  and Theodore Dubois.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alban Gruin, Alex Henrie, Alex
  Riesen, Andrei Rybak, Beat Bolli, Ben Wijen, brian m. carlson,
  Christian Couder, Chris Torek, Danny Lin, Denton Liu, Derrick
  Stolee, Đoàn Trần Công Danh, Drew DeVault, Edmundo Carmona
  Antoranz, Elijah Newren, Emily Shaffer, Eric Sunshine, Han-Wen
  Nienhuys, Hariom Verma, Jacob Keller, Jeff Hostetler, Jeff King,
  Jiang Xin, Johannes Berg, Johannes Schindelin, Johannes Sixt,
  Jonathan Tan, Junio C Hamano, Kazuhiro Kato, Luke Diamand,
  Martin Ågren, Matheus Tavares, Matthew Rogers, Michael Forney,
  Michal Privoznik, Miriam Rubio, Orgad Shaneh, Patrick Steinhardt,
  Paul Mackerras, Philippe Blain, Phillip Wood, Pranit Bauva,
  Prathamesh Chavan, René Scharfe, Rohit Ashiwal, Sergey Organov,
  Shourya Shukla, Stefan Dotterweich, SZEDER Gábor, Taylor Blau,
  Thomas Guyot-Sionnest, and Роман Донченко.

----------------------------------------------------------------

Git 2.29 Release Notes (draft)
==============================

Updates since v2.28
-------------------

UI, Workflows & Features

 * "git help log" has been enhanced by sharing more material from the
   documentation for the underlying "git rev-list" command.

 * "git for-each-ref --format=<>" learned %(contents:size).

 * "git merge" learned to selectively omit " into <branch>" at the end
   of the title of default merge message with merge.suppressDest
   configuration.

 * The component to respond to "git fetch" request is made more
   configurable to selectively allow or reject object filtering
   specification used for partial cloning.

 * Stop when "sendmail.*" configuration variables are defined, which
   could be a mistaken attempt to define "sendemail.*" variables.

 * The existing backends for "git mergetool" based on variants of vim
   have been refactored and then support for "nvim" has been added.

 * "git bisect" learns the "--first-parent" option to find the first
   breakage along the first-parent chain.

 * "git log --first-parent -p" showed patches only for single-parent
   commits on the first-parent chain; the "--first-parent" option has
   been made to imply "-m".  Use "--no-diff-merges" to restore the
   previous behaviour to omit patches for merge commits.

 * The commit labels used to explain each side of conflicted hunks
   placed by the sequencer machinery have been made more readable by
   humans.

 * The "--batch-size" option of "git multi-pack-index repack" command
   is now used to specify that very small packfiles are collected into
   one until the total size roughly exceeds it.

 * The recent addition of SHA-256 support is marked as experimental in
   the documentation.

 * "git fetch" learned --no-write-fetch-head option to avoid writing
   the FETCH_HEAD file.

 * Command line completion (in contrib/) usually omits redundant,
   deprecated and/or dangerous options from its output; it learned to
   optionally include all of them.

 * The output from the "diff" family of the commands had abbreviated
   object names of blobs involved in the patch, but its length was not
   affected by the --abbrev option.  Now it is.

 * "git worktree" gained a "repair" subcommand to help users recover
   after moving the worktrees or repository manually without telling
   Git.  Also, "git init --separate-git-dir" no longer corrupts
   administrative data related to linked worktrees.

 * The "--format=" option to the "for-each-ref" command and friends
   learned a few more tricks, e.g. the ":short" suffix that applies to
   "objectname" now also can be used for "parent", "tree", etc.

 * "git worktree add" learns that the "-d" is a synonym to "--detach"
   option to create a new worktree without being on a branch.

 * "format-patch --range-diff=<prev> <origin>..HEAD" has been taught
   not to ignore <origin> when <prev> is a single version.

 * "add -p" now allows editing paths that were only added in intent.

 * The 'meld' backend of the "git mergetool" learned to give the
   underlying 'meld' the '--auto-merge' option, which would help
   reduce the amount of text that requires manual merging.

 * "git for-each-ref" and friends that list refs used to allow only
   one --merged or --no-merged to filter them; they learned to take
   combination of both kind of filtering.

 * "git maintenance", a "git gc"'s big brother, has been introduced to
   take care of more repository maintenance tasks, not limited to the
   object database cleaning.

 * "git receive-pack" that accepts requests by "git push" learned to
   outsource most of the ref updates to the new "proc-receive" hook.

 * "git push" that wants to be atomic and wants to send push
   certificate learned not to prepare and sign the push certificate
   when it fails the local check (hence due to atomicity it is known
   that no certificate is needed).

 * "git commit-graph write" learned to limit the number of bloom
   filters that are computed from scratch with the --max-new-filters
   option.

 * The transport protocol v2 has become the default again.

 * The installation procedure learned to optionally omit "git-foo"
   executable files for each 'foo' built-in subcommand, which are only
   required by old timers that still rely on the age old promise that
   prepending "git --exec-path" output to PATH early in their script
   will keep the "git-foo" calls they wrote working.

 * The command line completion (in contrib/) learned that "git restore
   -s <TAB>" is often followed by a refname.

 * "git shortlog" has been taught to group commits by the contents of
   the trailer lines, like "Reviewed-by:", "Coauthored-by:", etc.

 * "git archive" learns the "--add-file" option to include untracked
   files into a snapshot from a tree-ish.

 * "git fetch" and "git push" support negative refspecs.

 * "git format-patch" learns to take "whenAble" as a possible value
   for the format.useAutoBase configuration variable to become no-op
   when the  automatically computed base does not make sense.

 * Credential helpers are now allowed to terminate lines with CRLF
   line ending, as well as LF line ending.


Performance, Internal Implementation, Development Support etc.

 * The changed-path Bloom filter is improved using ideas from an
   independent implementation.

 * Updates to the changed-paths bloom filter.

 * The test framework has been updated so that most tests will run
   with predictable (artificial) timestamps.

 * Preliminary clean-up of the refs API in preparation for adding a
   new refs backend "reftable".

 * Dev support to limit the use of test_must_fail to only git commands.

 * While packing many objects in a repository with a promissor remote,
   lazily fetching missing objects from the promissor remote one by
   one may be inefficient---the code now attempts to fetch all the
   missing objects in batch (obviously this won't work for a lazy
   clone that lazily fetches tree objects as you cannot even enumerate
   what blobs are missing until you learn which trees are missing).

 * The pretend-object mechanism checks if the given object already
   exists in the object store before deciding to keep the data
   in-core, but the check would have triggered lazy fetching of such
   an object from a promissor remote.

 * The argv_array API is useful for not just managing argv but any
   "vector" (NULL-terminated array) of strings, and has seen adoption
   to a certain degree.  It has been renamed to "strvec" to reduce the
   barrier to adoption.

 * The final leg of SHA-256 transition plus doc updates.  Note that
   there is no inter-operability between SHA-1 and SHA-256
   repositories yet.

 * CMake support to build with MSVC for Windows bypassing the Makefile.

 * A new helper function has_object() has been introduced to make it
   easier to mark object existence checks that do and don't want to
   trigger lazy fetches, and a few such checks are converted using it.

 * A no-op replacement function implemented as a C preprocessor macro
   does not perform as good a job as one implemented as a "static
   inline" function in catching errors in parameters; replace the
   former with the latter in <git-compat-util.h> header.

 * Test framework update.
   (merge d572f52a64 es/test-cmp-typocatcher later to maint).

 * Updates to "git merge" tests, in preparation for a new merge
   strategy backend.

 * midx and commit-graph files now use the byte defined in their file
   format specification for identifying the hash function used for
   object names.

 * The FETCH_HEAD is now always read from the filesystem regardless of
   the ref backend in use, as its format is much richer than the
   normal refs, and written directly by "git fetch" as a plain file..

 * A handful of places in in-tree code still relied on being able to
   execute the git subcommands, especially built-ins, in "git-foo"
   form, which have been corrected.

 * An unused binary has been discarded, and and a bunch of commands
   have been turned into into built-in.

 * A handful of places in in-tree code still relied on being able to
   execute the git subcommands, especially built-ins, in "git-foo"
   form, which have been corrected.

 * When a packfile is removed by "git repack", multi-pack-index gets
   cleared; the code was taught to do so less aggressively by first
   checking if the midx actually refers to a pack that no longer
   exists.

 * Internal API clean-up to handle two options "diff-index" and "log"
   have, which happen to share the same short form, more sensibly.

 * The "add -i/-p" machinery has been written in C but it is not used
   by default yet.  It is made default to those who are participating
   in feature.experimental experiment.

 * Allow maintainers to tweak $(TAR) invocations done while making
   distribution tarballs.

 * "git index-pack" learned to resolve deltified objects with greater
   parallelism.

 * "diff-highlight" (in contrib/) had a logic to flush its output upon
   seeing a blank line but the way it detected a blank line was broken.


Fixes since v2.28
-----------------

 * "git clone --separate-git-dir=$elsewhere" used to stomp on the
   contents of the existing directory $elsewhere, which has been
   taught to fail when $elsewhere is not an empty directory.
   (merge dfaa209a79 bw/fail-cloning-into-non-empty later to maint).

 * With the base fix to 2.27 regresion, any new extensions in a v0
   repository would still be silently honored, which is not quite
   right.  Instead, complain and die loudly.
   (merge ec91ffca04 jk/reject-newer-extensions-in-v0 later to maint).

 * Fetching from a lazily cloned repository resulted at the server
   side in attempts to lazy fetch objects that the client side has,
   many of which will not be available from the third-party anyway.
   (merge 77aa0941ce jt/avoid-lazy-fetching-upon-have-check later to maint).

 * Fix to an ancient bug caused by an over-eager attempt for
   optimization.
   (merge a98f7fb366 rs/add-index-entry-optim-fix later to maint).

 * Pushing a ref whose name contains non-ASCII character with the
   "--force-with-lease" option did not work over smart HTTP protocol,
   which has been corrected.
   (merge cd85b447bf bc/push-cas-cquoted-refname later to maint).

 * "git mv src dst", when src is an unmerged path, errored out
   correctly but with an incorrect error message to claim that src is
   not tracked, which has been clarified.
   (merge 9b906af657 ct/mv-unmerged-path-error later to maint).

 * Fix to a regression introduced during 2.27 cycle.
   (merge cada7308ad en/fill-directory-exponential later to maint).

 * Command line completion (in contrib/) update.
   (merge 688b87c81b mp/complete-show-color-moved later to maint).

 * All "mergy" operations that internally use the merge-recursive
   machinery should honor the merge.renormalize configuration, but
   many of them didn't.

 * Doc cleanup around "worktree".
   (merge dc9c144be5 es/worktree-doc-cleanups later to maint).

 * The "git blame --first-parent" option was not documented, but now
   it is.
   (merge 11bc12ae1e rp/blame-first-parent-doc later to maint).

 * The logic to find the ref transaction hook script attempted to
   cache the path to the found hook without realizing that it needed
   to keep a copied value, as the API it used returned a transitory
   buffer space.  This has been corrected.
   (merge 09b2aa30c9 ps/ref-transaction-hook later to maint).

 * Recent versions of "git diff-files" shows a diff between the index
   and the working tree for "intent-to-add" paths as a "new file"
   patch; "git apply --cached" should be able to take "git diff-files"
   and should act as an equivalent to "git add" for the path, but the
   command failed to do so for such a path.
   (merge 4c025c667e rp/apply-cached-with-i-t-a later to maint).

 * "git diff [<tree-ish>] $path" for a $path that is marked with i-t-a
   bit was not showing the mode bits from the working tree.
   (merge cb0dd22b82 rp/ita-diff-modefix later to maint).

 * Ring buffer with size 4 used for bin-hex translation resulted in a
   wrong object name in the sequencer's todo output, which has been
   corrected.
   (merge 5da69c0dac ak/sequencer-fix-find-uniq-abbrev later to maint).

 * When given more than one target line ranges, "git blame -La,b
   -Lc,d" was over-eager to coalesce groups of original lines and
   showed incorrect results, which has been corrected.
   (merge c2ebaa27d6 jk/blame-coalesce-fix later to maint).

 * The regexp to identify the function boundary for FORTRAN programs
   has been updated.
   (merge 75c3b6b2e8 pb/userdiff-fortran-update later to maint).

 * A few end-user facing messages have been updated to be
   hash-algorithm agnostic.
   (merge 4279000d3e jc/object-names-are-not-sha-1 later to maint).

 * "unlink" emulation on MinGW has been optimized.
   (merge 680e0b4524 jh/mingw-unlink later to maint).

 * The purpose of "git init --separate-git-dir" is to initialize a
   new project with the repository separate from the working tree,
   or, in the case of an existing project, to move the repository
   (the .git/ directory) out of the working tree. It does not make
   sense to use --separate-git-dir with a bare repository for which
   there is no working tree, so disallow its use with bare
   repositories.
   (merge ccf236a23a es/init-no-separate-git-dir-in-bare later to maint).

 * "ls-files -o" mishandled the top-level directory of another git
   working tree that hangs in the current git working tree.
   (merge ab282aa548 en/dir-nonbare-embedded later to maint).

 * Fix some incorrect UNLEAK() annotations.
   (merge 3e19816dc0 jk/unleak-fixes later to maint).

 * Use more buffered I/O where we used to call many small write(2)s.
   (merge a698d67b08 rs/more-buffered-io later to maint).

 * The patch-id computation did not ignore the "incomplete last line"
   marker like whitespaces.
   (merge 82a62015a7 rs/patch-id-with-incomplete-line later to maint).

 * Updates into a lazy/partial clone with a submodule did not work
   well with transfer.fsckobjects set.

 * The parser for "git for-each-ref --format=..." was too loose when
   parsing the "%(trailers...)" atom, and forgot that "trailers" and
   "trailers:<modifiers>" are the only two allowed forms, which has
   been corrected.
   (merge 2c22e102f8 hv/ref-filter-trailers-atom-parsing-fix later to maint).

 * Long ago, we decided to use 3 threads by default when running the
   index-pack task in parallel, which has been adjusted a bit upwards.
   (merge fbff95b67f jk/index-pack-w-more-threads later to maint).

 * "git restore/checkout --no-overlay" with wildcarded pathspec
   mistakenly removed matching paths in subdirectories, which has been
   corrected.
   (merge bfda204ade rs/checkout-no-overlay-pathspec-fix later to maint).

 * The description of --cached/--index options in "git apply --help"
   has been updated.
   (merge d064702be3 rp/apply-cached-doc later to maint).

 * Feeding "$ZERO_OID" to "git log --ignore-missing --stdin", and
   running "git log --ignore-missing $ZERO_OID" fell back to start
   digging from HEAD; it has been corrected to become a no-op, like
   "git log --tags=no-tag-matches-this-pattern" does.
   (merge 04a0e98515 jk/rev-input-given-fix later to maint).

 * Various callers of run_command API has been modernized.
   (merge afbdba391e jc/run-command-use-embedded-args later to maint).

 * List of options offered and accepted by "git add -i/-p" were
   inconsistent, which have been corrected.
   (merge ce910287e7 pw/add-p-allowed-options-fix later to maint).

 * Various callers of run_command API has been modernized.
   (merge afbdba391e jc/run-command-use-embedded-args later to maint).

 * "git diff --stat -w" showed 0-line changes for paths whose changes
   were only whitespaces, which was not intuitive.  We now omit such
   paths from the stat output.
   (merge 1cf3d5db9b mr/diff-hide-stat-wo-textual-change later to maint).

 * It was possible for xrealloc() to send a non-NULL pointer that has
   been freed, which has been fixed.
   (merge 6479ea4a8a jk/xrealloc-avoid-use-after-free later to maint).

 * "git status" has trouble showing where it came from by interpreting
   reflog entries that record certain events, e.g. "checkout @{u}", and
   gives a hard/fatal error.  Even though it inherently is impossible
   to give a correct answer because the reflog entries lose some
   information (e.g. "@{u}" does not record what branch the user was
   on hence which branch 'the upstream' needs to be computed, and even
   if the record were available, the relationship between branches may
   have changed), at least hide the error to allow "status" show its
   output.

 * "git status --short" quoted a path with SP in it when tracked, but
   not those that are untracked, ignored or unmerged.  They are all
   shown quoted consistently.

 * "git diff/show" on a change that involves a submodule used to read
   the information on commits in the submodule from a wrong repository
   and gave a wrong information when the commit-graph is involved.
   (merge 85a1ec2c32 mf/submodule-summary-with-correct-repository later to maint).

 * Unlike "git config --local", "git config --worktree" did not fail
   early and cleanly when started outside a git repository.
   (merge 378fe5fc3d mt/config-fail-nongit-early later to maint).

 * There is a logic to estimate how many objects are in the
   repository, which is mean to run once per process invocation, but
   it ran every time the estimated value was requested.
   (merge 67bb65de5d jk/dont-count-existing-objects-twice later to maint).

 * "git remote set-head" that failed still said something that hints
   the operation went through, which was misleading.
   (merge 5a07c6c3c2 cs/don-t-pretend-a-failed-remote-set-head-succeeded later to maint).

 * "git fetch --all --ipv4/--ipv6" forgot to pass the protocol options
   to instances of the "git fetch" that talk to individual remotes,
   which has been corrected.
   (merge 4e735c1326 ar/fetch-ipversion-in-all later to maint).

 * The "unshelve" subcommand of "git p4" used incorrectly used
   commit^N where it meant to say commit~N to name the Nth generation
   ancestor, which has been corrected.
   (merge 0acbf5997f ld/p4-unshelve-fix later to maint).

 * "git clone" that clones from SHA-1 repository, while
   GIT_DEFAULT_HASH set to use SHA-256 already, resulted in an
   unusable repository that half-claims to be SHA-256 repository
   with SHA-1 objects and refs.  This has been corrected.

 * Adjust sample hooks for hash algorithm other than SHA-1.
   (merge d8d3d632f4 dl/zero-oid-in-hooks later to maint).

 * "git range-diff" showed incorrect diffstat, which has been
   corrected.

 * Earlier we taught "git pull" to warn when the user does not say the
   histories need to be merged, rebased or accepts only fast-
   forwarding, but the warning triggered for those who have set the
   pull.ff configuration variable.
   (merge 54200cef86 ah/pull later to maint).

 * Compilation fix around type punning.
   (merge 176380fd11 jk/drop-unaligned-loads later to maint).

 * "git blame --ignore-rev/--ignore-revs-file" failed to validate
   their input are valid revision, and failed to take into account
   that the user may want to give an annotated tag instead of a
   commit, which has been corrected.
   (merge 610e2b9240 jc/blame-ignore-fix later to maint).

 * "git bisect start X Y", when X and Y are not valid committish
   object names, should take X and Y as pathspec, but didn't.
   (merge 73c6de06af cc/bisect-start-fix later to maint).

 * The explanation of the "scissors line" has been clarified.
   (merge 287416dba6 eg/mailinfo-doc-scissors later to maint).

 * A race that leads to an access to a free'd data was corrected in
   the codepath that reads pack files.
   (merge bda959c476 mt/delta-base-cache-races later to maint).

 * in_merge_bases_many(), a way to see if a commit is reachable from
   any commit in a set of commits, was totally broken when the
   commit-graph feature was in use, which has been corrected.
   (merge 8791bf1841 ds/in-merge-bases-many-optim-bug later to maint).

 * "git submodule update --quiet" did not squelch underlying "rebase"
   and "pull" commands.
   (merge 3ad0401e9e td/submodule-update-quiet later to maint).

 * The lazy fetching done internally to make missing objects available
   in a partial clone incorrectly made permanent damage to the partial
   clone filter in the repository, which has been corrected.

 * "log -c --find-object=X" did not work well to find a merge that
   involves a change to an object X from only one parent.
   (merge 957876f17d jk/diff-cc-oidfind-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 84544f2ea3 sk/typofixes later to maint).
   (merge b17f411ab5 ar/help-guides-doc later to maint).
   (merge 98c6871fad rs/grep-simpler-parse-object-or-die-call later to maint).
   (merge 861c4ce141 en/typofixes later to maint).
   (merge 60e47f6773 sg/ci-git-path-fix-with-pyenv later to maint).
   (merge e2bfa50ac3 jb/doc-packfile-name later to maint).
   (merge 918d8ff780 es/worktree-cleanup later to maint).
   (merge dc156bc31f ma/t1450-quotefix later to maint).
   (merge 56e743426b en/merge-recursive-comment-fixes later to maint).
   (merge 7d23ff818f rs/bisect-oid-to-hex-fix later to maint).
   (merge de20baf2c9 ny/notes-doc-sample-update later to maint).
   (merge f649aaaf82 so/rev-parser-errormessage-fix later to maint).
   (merge 6103d58b7f bc/sha-256-cvs-svn-updates later to maint).
   (merge ac900fddb7 ma/stop-progress-null-fix later to maint).
   (merge e767963ab6 rs/upload-pack-sigchain-fix later to maint).
   (merge a831908599 rs/preserve-merges-unused-code-removal later to maint).
   (merge 6dfefe70a9 jb/commit-graph-doc-fix later to maint).
   (merge 847b37271e pb/set-url-docfix later to maint).
   (merge 748f733d54 mt/checkout-entry-dead-code-removal later to maint).
   (merge ce820cbd58 dl/subtree-docs later to maint).
   (merge 55fe225dde jk/leakfix later to maint).
   (merge ee22a29215 so/pretty-abbrev-doc later to maint).
   (merge 3100fd5588 jc/post-checkout-doc later to maint).
   (merge 17bae89476 pb/doc-external-diff-env later to maint).
   (merge 27ed6ccc12 jk/worktree-check-clean-leakfix later to maint).
   (merge 1302badd16 ea/blame-use-oideq later to maint).
   (merge e6d5a11fed al/t3200-back-on-a-branch later to maint).
   (merge 324efcf6b6 pw/add-p-leakfix later to maint).
   (merge 1c6ffb546b jk/add-i-fixes later to maint).
   (merge e40e936551 cd/commit-graph-doc later to maint).
   (merge 0512eabd91 jc/sequencer-stopped-sha-simplify later to maint).
   (merge d01141de5a so/combine-diff-simplify later to maint).
   (merge 3be01e5ab1 sn/fast-import-doc later to maint).

----------------------------------------------------------------

Changes since v2.28.0 are as follows:

Aaron Lipman (12):
      t6030: modernize "git bisect run" tests
      rev-list: allow bisect and first-parent flags
      cmd_bisect__helper: defer parsing no-checkout flag
      bisect: introduce first-parent flag
      bisect: combine args passed to find_bisection()
      bisect: add first-parent option to documentation
      t3200: clean side effect of git checkout --orphan
      t3201: test multiple branch filter combinations
      Doc: cover multiple contains/no-contains filters
      ref-filter: allow merged and no-merged filters
      ref-filter: make internal reachable-filter API more precise
      Doc: prefer more specific file name

Adrian Moennich (1):
      ci: fix inconsistent indentation

Alban Gruin (1):
      t6300: fix issues related to %(contents:size)

Alex Henrie (1):
      pull: don't warn if pull.ff has been set

Alex Riesen (1):
      fetch: pass --ipv4 and --ipv6 options to sub-fetches

Andrei Rybak (1):
      git-help.txt: fix mentions of option --guides

Antti Keränen (1):
      rebase -i: fix possibly wrong onto hash in todo

Beat Bolli (1):
      gitk: rename "commit summary" to "commit reference"

Ben Wijen (1):
      git clone: don't clone into non-empty directory

Chris Torek (1):
      git-mv: improve error message for conflicted file

Christian Couder (4):
      Documentation: clarify %(contents:XXXX) doc
      t6300: test refs pointing to tree and blob
      ref-filter: add support for %(contents:size)
      bisect: don't use invalid oid as rev when starting

Christian Schlack (1):
      remote: don't show success message when set-head fails

Conor Davis (1):
      commit-graph-format.txt: fix no-parent value

Danny Lin (2):
      contrib/subtree: fix "unsure" for --message in the document
      contrib/subtree: document 'push' does not take '--squash'

Denton Liu (11):
      t3701: stop using `env` in force_color()
      t5324: reorder `run_with_limited_open_files test_might_fail`
      t7107: don't use test_must_fail()
      t9834: remove use of `test_might_fail p4`
      t9400: don't use test_must_fail with cvs
      test-lib-functions: restrict test_must_fail usage
      contrib/completion: complete options that take refs for format-patch
      hooks--pre-push.sample: modernize script
      hooks--pre-push.sample: use hash-agnostic zero OID
      hooks--update.sample: use hash-agnostic zero OID
      gitk: replace tabs with spaces

Derrick Stolee (22):
      commit-graph: place bloom_settings in context
      commit-graph: change test to die on parse, not load
      bloom: fix logic in get_bloom_filter()
      commit-graph: persist existence of changed-paths
      revision.c: fix whitespace
      multi-pack-index: repack batches below --batch-size
      t/README: document GIT_TEST_DEFAULT_HASH
      commit-graph: use the "hash version" byte
      multi-pack-index: use hash version byte
      bloom/diff: properly short-circuit on max_changes
      maintenance: create basic maintenance runner
      maintenance: add --quiet option
      maintenance: replace run_auto_gc()
      maintenance: initialize task array
      maintenance: add commit-graph task
      maintenance: add --task option
      maintenance: take a lock on the objects directory
      maintenance: create maintenance.<task>.enabled config
      maintenance: use pointers to check --auto
      maintenance: add auto condition for commit-graph task
      maintenance: add trace2 regions for task execution
      commit-reach: fix in_merge_bases_many bug

Drew DeVault (1):
      git-send-email: die if sendmail.* config is set

Edmundo Carmona Antoranz (1):
      blame.c: replace instance of !oidcmp for oideq

Elijah Newren (26):
      Remove doubled words in various comments
      hashmap: fix typo in usage docs
      merge-recursive: fix unclear and outright wrong comments
      t6038: make tests fail for the right reason
      t6038: remove problematic test
      merge: make merge.renormalize work for all uses of merge machinery
      checkout: support renormalization with checkout -m <paths>
      Collect merge-related tests to t64xx
      t6418: tighten delete/normalize conflict testcase
      t6422: fix bad check against missing file
      t6416, t6422: fix incorrect untracked file count
      t6423: fix test setup for a couple tests
      t6422: fix multiple errors with the mod6 test expectations
      t6416, t6423: clarify some comments and fix some typos
      t6423: add an explanation about why one of the tests does not pass
      t6422, t6426: be more flexible for add/add conflicts involving renames
      t642[23]: be more flexible for add/add conflicts involving pair renames
      t6425: be more flexible with rename/delete conflict messages
      t3000: fix some test description typos
      dir: avoid prematurely marking nonbare repositories as matches
      sequencer: avoid garbled merge machinery messages due to commit labels
      mem-pool: add convenience functions for strdup and strndup
      mem-pool: use more standard initialization and finalization
      mem-pool: use consistent pool variable name
      dir: make clear_directory() free all relevant memory
      dir: fix problematic API to avoid memory leaks

Emily Shaffer (1):
      Revert "contrib: subtree: adjust test to change in fmt-merge-msg"

Eric Huber (1):
      gitk: Preserve window dimensions on exit when not using ttk themes

Eric Sunshine (22):
      worktree: drop pointless strbuf_release()
      worktree: drop unused code from get_linked_worktree()
      worktree: drop bogus and unnecessary path munging
      worktree: retire special-case normalization of main worktree path
      git-worktree.txt: employ fixed-width typeface consistently
      git-worktree.txt: consistently use term "working tree"
      git-worktree.txt: fix minor grammatical issues
      git-worktree.txt: make start of new sentence more obvious
      git-worktree.txt: link to man pages when citing other Git commands
      test_cmp: diagnose incorrect arguments
      init: disallow --separate-git-dir with bare repository
      worktree: add skeleton "repair" command
      worktree: teach "repair" to fix worktree back-links to main worktree
      worktree: teach "repair" to fix outgoing links to worktrees
      init: teach --separate-git-dir to repair linked worktrees
      init: make --separate-git-dir work from within linked worktree
      git-checkout.txt: document -d short option for --detach
      worktree: teach `add` to recognize -d as shorthand for --detach
      git-worktree.txt: discuss branch-based vs. throwaway worktrees
      diff: move show_interdiff() from its own file to diff-lib
      diff-lib: tighten show_interdiff()'s interface
      format-patch: use 'origin' as start of current-series-range when known

Evan Gates (1):
      Doc: show example scissors line

Han Xin (1):
      send-pack: run GPG after atomic push checking

Han-Wen Nienhuys (17):
      lib-t6000.sh: write tag using git-update-ref
      t3432: use git-reflog to inspect the reflog for HEAD
      bisect: treat BISECT_HEAD as a pseudo ref
      t1400: use git rev-parse for testing PSEUDOREF existence
      Modify pseudo refs through ref backend storage
      Make HEAD a PSEUDOREF rather than PER_WORKTREE.
      refs: move the logic to add \t to reflog to the files backend
      refs: split off reading loose ref data in separate function
      refs: fix comment about submodule ref_stores
      refs: move gitdir into base ref_store
      refs: read FETCH_HEAD and MERGE_HEAD generically
      refs: make refs_ref_exists public
      sequencer: treat CHERRY_PICK_HEAD as a pseudo ref
      builtin/commit: suggest update-ref for pseudoref removal
      sequencer: treat REVERT_HEAD as a pseudo ref
      refs: move REF_LOG_ONLY to refs-internal.h
      refs: add GIT_TRACE_REFS debugging mechanism

Hariom Verma (10):
      t6300: unify %(trailers) and %(contents:trailers) tests
      ref-filter: 'contents:trailers' show error if `:` is missing
      ref-filter: support different email formats
      ref-filter: refactor `grab_objectname()`
      ref-filter: modify error messages in `grab_objectname()`
      ref-filter: rename `objectname` related functions and fields
      ref-filter: add `short` modifier to 'tree' atom
      ref-filter: add `short` modifier to 'parent' atom
      pretty: refactor `format_sanitized_subject()`
      ref-filter: add `sanitize` option for 'subject' atom

Hugo Locurcio (1):
      bisect: swap command-line options in documentation

Jacob Keller (4):
      refspec: fix documentation referring to refspec_item
      refspec: make sure stack refspec_item variables are zeroed
      refspec: add support for negative refspecs
      format-patch: teach format.useAutoBase "whenAble" option

Jeff Hostetler (1):
      mingw: improve performance of mingw_unlink()

Jeff King (80):
      t6000: use test_tick consistently
      t9700: loosen ident timezone regex
      t5539: make timestamp requirements more explicit
      t9100: explicitly unset GIT_COMMITTER_DATE
      test-lib: set deterministic default author/committer date
      t9100: stop depending on commit timestamps
      verify_repository_format(): complain about new extensions in v0 repo
      argv-array: use size_t for count and alloc
      argv-array: rename to strvec
      strvec: rename files from argv-array to strvec
      quote: rename sq_dequote_to_argv_array to mention strvec
      strvec: convert builtin/ callers away from argv_array name
      strvec: convert more callers away from argv_array name
      strvec: convert remaining callers away from argv_array name
      strvec: fix indentation in renamed calls
      strvec: update documention to avoid argv_array
      strvec: drop argv_array compatibility layer
      log: drop "--cc implies -m" logic
      revision: add "--no-diff-merges" option to counteract "-m"
      log: enable "-m" automatically with "--first-parent"
      doc/git-log: move "Diff Formatting" from rev-list-options
      doc/git-log: drop "-r" diff option
      doc/git-log: move "-t" into diff-options list
      doc/git-log: clarify handling of merge commit diffs
      strvec: rename struct fields
      config: work around gcc-10 -Wstringop-overflow warning
      revision: avoid out-of-bounds read/write on empty pathspec
      revision: avoid leak when preparing bloom filter for "/"
      t5616: use test_i18ngrep for upload-pack errors
      sideband: mark "remote error:" prefix for translation
      t1416: avoid hard-coded sha1 ids
      t8003: check output of coalesced blame
      t8003: factor setup out of coalesce test
      blame: only coalesce lines that are adjacent in result
      Makefile: drop builtins from MSVC pdb list
      make credential helpers builtins
      make git-bugreport a builtin
      make git-fast-import a builtin
      drop vcs-svn experiment
      stop calling UNLEAK() before die()
      ls-remote: simplify UNLEAK() usage
      clear_pattern_list(): clear embedded hashmaps
      submodule--helper: use strbuf_release() to free strbufs
      checkout: fix leak of non-existent branch names
      config: fix leaks from git_config_get_string_const()
      config: drop git_config_get_string_const()
      config: fix leak in git_config_get_expiry_in_days()
      submodule--helper: fix leak of core.worktree value
      p5302: disable thread-count parameter tests by default
      p5302: count up to online-cpus for thread tests
      index-pack: adjust default threading cap
      revision: set rev_input_given in handle_revision_arg()
      worktree: fix leak in check_clean_worktree()
      xrealloc: do not reuse pointer freed by zero-length realloc()
      add-patch: fix inverted return code of repo_read_index()
      add--interactive.perl: specify --no-color explicitly
      packfile: actually set approximate_object_count_valid
      diff-highlight: correctly match blank lines for flush
      bswap.h: drop unaligned loads
      Revert "fast-export: use local array to store anonymized oid"
      shortlog: change "author" variables to "ident"
      protocol: re-enable v2 protocol by default
      shortlog: add grouping option
      trailer: add interface for iterating over commit trailers
      shortlog: match commit trailers with --group
      shortlog: de-duplicate trailer values
      shortlog: rename parse_stdin_ident()
      shortlog: parse trailer idents
      shortlog: allow multiple groups to be specified
      convert: drop unused crlf_action from check_global_conv_flags_eol()
      drop unused argc parameters
      env--helper: write to opt->value in parseopt helper
      assert PARSE_OPT_NONEG in parse-options callbacks
      push: drop unused repo argument to do_push()
      sequencer: drop repository argument from run_git_commit()
      sparse-checkout: fill in some options boilerplate
      test-advise: check argument count with argc instead of argv
      sequencer: handle ignore_footer when parsing trailers
      dir.c: drop unused "untracked" from treat_path_fast()
      combine-diff: handle --find-object in multitree code path

Jiang Xin (10):
      transport: not report a non-head push as a branch
      t5411: add basic test cases for proc-receive hook
      receive-pack: add new proc-receive hook
      receive-pack: feed report options to post-receive
      New capability "report-status-v2" for git-push
      doc: add document for capability report-status-v2
      receive-pack: new config receive.procReceiveRefs
      t5411: test updates of remote-tracking branches
      transport: parse report options for tracking refs
      doc: add documentation for the proc-receive hook

Johannes Berg (2):
      pack-write/docs: update regarding pack naming
      docs: commit-graph: fix some whitespace in the diagram

Johannes Schindelin (20):
      t3404: prepare 'short SHA-1 collision' tests for SHA-256
      ci: fix indentation of the `ci-config` job
      ci: avoid ugly "failure" in the `ci-config` job
      t/test-terminal: avoid non-inclusive language
      fast-export: avoid using unnecessary language in a code comment
      t3200: avoid variations of the `master` branch name
      msvc: copy the correct `.pdb` files in the Makefile target `install`
      Optionally skip linking/copying the built-ins
      ci: stop linking built-ins to the dashed versions
      cmake: ignore files generated by CMake as run in Visual Studio
      tests: avoid variations of the `master` branch name
      t9902: avoid using the branch name `master`
      cmake: do find Git for Windows' shell interpreter
      cmake: ensure that the `vcpkg` packages are found on Windows
      cmake: fall back to using `vcpkg`'s `msgfmt.exe` on Windows
      cmake: quote the path accurately when editing `test-lib.sh`
      cmake (Windows): let the `.dll` files be found when running the tests
      cmake (Windows): complain when encountering an unknown compiler
      cmake (Windows): initialize vcpkg/build dependencies automatically
      cmake (Windows): recommend using Visual Studio's built-in CMake support

Johannes Sixt (1):
      gitk: Un-hide selection in areas with non-default background color

Jonathan Tan (32):
      upload-pack: do not lazy-fetch "have" objects
      pack-objects: refactor to oid_object_info_extended
      pack-objects: prefetch objects to be packed
      sha1-file: make pretend_object_file() not prefetch
      sha1-file: introduce no-lazy-fetch has_object()
      apply: do not lazy fetch when applying binary
      pack-objects: no fetch when allow-{any,promisor}
      fsck: do not lazy fetch known non-promisor object
      negotiator/noop: add noop fetch negotiator
      fetch: allow refspecs specified through stdin
      fetch: avoid reading submodule config until needed
      fetch: only populate existing_refs if needed
      fetch-pack: do not lazy-fetch during ref iteration
      promisor-remote: lazy-fetch objects in subprocess
      fetch-pack: remove no_dependents code
      fetch-pack: in partial clone, pass --promisor
      Documentation: deltaBaseCacheLimit is per-thread
      index-pack: remove redundant parameter
      index-pack: unify threaded and unthreaded code
      index-pack: remove redundant child field
      index-pack: calculate {ref,ofs}_{first,last} early
      index-pack: make resolve_delta() assume base data
      (various): document from_promisor parameter
      fetch-pack: document only_packfile in get_pack()
      fetch-pack: make packfile URIs work with transfer.fsckobjects
      fetch: no FETCH_HEAD display if --no-write-fetch-head
      sha1-name: replace unsigned int with option struct
      refs: move dwim_ref() to header file
      wt-status: tolerate dangling marks
      index-pack: make quantum of work smaller
      promisor-remote: remove unused variable
      fetch: do not override partial clone filter

Junio C Hamano (49):
      gitk: be prepared to be run in a bare repository
      reflog: cleanse messages in the refs.c layer
      Revert "fmt-merge-msg: stop treating `master` specially"
      fmt-merge-msg: allow merge destination to be omitted again
      First batch post 2.28
      The second batch -- mostly minor typofixes
      Third batch
      Fourth batch
      Documentation: don't hardcode command categories twice
      compat-util: type-check parameters of no-op replacement functions
      Fifth batch
      Sixth batch
      Seventh batch
      messages: avoid SHA-1 in end-user facing messages
      Eighth batch
      fetch: optionally allow disabling FETCH_HEAD update
      Ninth batch
      ident: say whose identity is missing when giving user.name hint
      Tenth batch
      t3436: do not run git-merge-recursive in dashed form
      transport-helper: do not run git-remote-ext etc. in dashed form
      cvsexportcommit: do not run git programs in dashed form
      run_command: teach API users to use embedded 'args' more
      credential-cache: use child_process.args
      Eleventh batch
      doc: clarify how exit status of post-checkout hook is used
      Twelfth batch
      Thirteenth batch
      add -i: use the built-in version when feature.experimental is set
      Makefile: allow extra tweaking of distribution tarball
      Fourteenth batch
      quote_path: rename quote_path_relative() to quote_path()
      quote_path: give flags parameter to quote_path()
      quote_path: optionally allow quoting a path with SP in it
      quote_path: code clarification
      wt-status: consistently quote paths in "status --short" output
      quote: rename misnamed sq_lookup[] to cq_lookup[]
      quote: turn 'nodq' parameter into a set of flags
      Fifteenth batch
      Sixteenth batch
      t8013: minimum preparatory clean-up
      blame: validate and peel the object names on the ignore list
      t1506: rev-parse A..B and A...B
      sequencer: stop abbreviating stopped-sha file
      Seventeenth batch
      Eighteenth batch
      hashmap_for_each_entry(): workaround MSVC's runtime check failure #3
      Nineteenth batch
      Git 2.29-rc0

Kazuhiro Kato (1):
      gitk: fix branch name encoding error

Kyohei Kadota (1):
      Fit to Plan 9's ANSI/POSIX compatibility layer

Lin Sun (1):
      mergetool: allow auto-merge for meld to follow the vim-diff behavior

Luke Diamand (2):
      git-p4 unshelve: adding a commit breaks git-p4 unshelve
      git-p4: use HEAD~$n to find parent commit for unshelve

Martin Ågren (19):
      dir: check pathspecs before returning `path_excluded`
      t1450: fix quoting of NUL byte when corrupting pack
      t: don't spuriously close and reopen quotes
      t4104: modernize and simplify quoting
      progress: don't dereference before checking for NULL
      http-protocol.txt: document SHA-256 "want"/"have" format
      index-format.txt: document SHA-256 index format
      protocol-capabilities.txt: clarify "allow-x-sha1-in-want" re SHA-256
      shallow.txt: document SHA-256 shallow format
      Documentation: mark `--object-format=sha256` as experimental
      wt-status: replace sha1 mentions with oid
      wt-status: print to s->fp, not stdout
      wt-status: introduce wt_status_state_free_buffers()
      worktree: inline `worktree_ref()` into its only caller
      worktree: update renamed variable in comment
      worktree: rename copy-pasted variable
      worktree: use skip_prefix to parse target
      config/fmt-merge-msg.txt: drop space in quote
      config/uploadpack.txt: fix typo in `--filter=tree:<n>`

Matheus Tavares (4):
      checkout_entry(): remove unreachable error() call
      config: complain about --worktree outside of a git repo
      packfile: fix race condition on unpack_entry()
      packfile: fix memory leak in add_delta_base_cache()

Matthew Rogers (1):
      diff: teach --stat to ignore uninteresting modifications

Michael Forney (2):
      revision: use repository from rev_info when parsing commits
      submodule: use submodule repository when preparing summary

Michal Privoznik (1):
      completion: add show --color-moved[-ws]

Miriam Rubio (4):
      bisect--helper: BUG() in cmd_*() on invalid subcommand
      bisect--helper: use '-res' in 'cmd_bisect__helper' return
      bisect--helper: introduce new `write_in_file()` function
      bisect: call 'clear_commit_marks_all()' in 'bisect_next_all()'

Nikita Leonov (1):
      credential: treat CR/LF as line endings in the credential protocol

Noam Yorav-Raphael (1):
      docs: improve the example that illustrates git-notes path names

Orgad Shaneh (5):
      vcbuild: fix library name for expat with make MSVC=1
      vcbuild: fix batch file name in README
      fetch: do not look for submodule changes in unchanged refs
      submodule: suppress checking for file name and ref ambiguity for object ids
      contrib/buildsystems: fix expat library name for generated vcxproj

Patrick Steinhardt (2):
      refs: fix interleaving hook calls with reference-transaction hook
      refs: remove lookup cache for reference-transaction hook

Paul Mackerras (1):
      gitk: Resize panes correctly when reducing window size

Philippe Blain (19):
      git-log.txt: add links to 'rev-list' and 'diff' docs
      revisions.txt: describe 'rev1 rev2 ...' meaning for ranges
      git-rev-list.txt: fix Asciidoc syntax
      git-rev-list.txt: tweak wording in set operations
      git-rev-list.txt: move description to separate file
      git-log.txt: include rev-list-description.txt
      command-list.txt: add missing 'gitcredentials' and 'gitremote-helpers'
      help: drop usage of 'common' and 'useful' for guides
      git.txt: add list of guides
      fetch, pull doc: correct description of '--set-upstream'
      userdiff: add tests for Fortran xfuncname regex
      userdiff: improve Fortran xfuncname regex
      git-imap-send.txt: don't duplicate 'Examples' sections
      git-imap-send.txt: do verify SSL certificate for gmail.com
      git-imap-send.txt: add note about localized Gmail folders
      doc: mention GIT_SEQUENCE_EDITOR and 'sequence.editor' more
      git.txt: correct stale 'GIT_EXTERNAL_DIFF' description
      Makefile: add support for generating JSON compilation database
      gitsubmodules doc: invoke 'ls-files' with '--recurse-submodules'

Phillip Wood (7):
      add -p: use ALLOC_GROW_BY instead of ALLOW_GROW
      add -p: fix checking of user input
      am: stop exporting GIT_COMMITTER_DATE
      rebase -i: support --committer-date-is-author-date
      rebase -i: support --ignore-date
      add -p: fix memory leak
      add -p: fix editing of intent-to-add paths

Pranit Bauva (2):
      bisect--helper: reimplement `bisect_autostart` shell function in C
      bisect--helper: reimplement `bisect_next` and `bisect_auto_next` shell functions in C

Prathamesh Chavan (1):
      submodule: port submodule subcommand 'summary' from shell to C

Raymond E. Pasco (6):
      apply: allow "new file" patches on i-t-a entries
      blame-options.txt: document --first-parent option
      apply: make i-t-a entries never match worktree
      t4140: test apply with i-t-a paths
      diff-lib: use worktree mode in diffs from i-t-a entries
      git-apply.txt: update descriptions of --cached, --index

René Scharfe (21):
      read-cache: remove bogus shortcut
      grep: avoid using oid_to_hex() with parse_object_or_die()
      bisect: use oid_to_hex_r() instead of memcpy()+oid_to_hex()
      upload-pack: remove superfluous sigchain_pop() call
      rebase: remove unused function reschedule_last_action
      connected: use buffered I/O to talk to rev-list
      midx: use buffered I/O to talk to pack-objects
      upload-pack: use buffered I/O to talk to rev-list
      patch-id: ignore newline at end of file in diff_flush_patch_id()
      checkout, restore: make pathspec recursive
      read-cache: fix mem-pool allocation for multi-threaded index loading
      push: release strbufs used for refspec formatting
      refspec: add and use refspec_appendf()
      fast-import: use write_pack_header()
      midx: use hashwrite_u8() in write_midx_header()
      pack-bitmap-write: use hashwrite_be32() in write_hash_cache()
      pack-write: use hashwrite_be32() in write_idx_file()
      archive: read short blobs in archive.c::write_archive_entry()
      archive: add --add-file
      Makefile: use git-archive --add-file
      ref-filter: plug memory leak in reach_filter()

Rohit Ashiwal (2):
      rebase -i: add --ignore-whitespace flag
      rebase: add --reset-author-date

Ryan Zoeller (2):
      parse-options: add --git-completion-helper-all
      completion: add GIT_COMPLETION_SHOW_ALL env var

SZEDER Gábor (15):
      tree-walk.c: don't match submodule entries for 'submod/anything'
      commit-graph: fix parsing the Chunk Lookup table
      commit-graph-format.txt: all multi-byte numbers are in network byte order
      commit-slab: add a function to deep free entries on the slab
      diff.h: drop diff_tree_oid() & friends' return value
      commit-graph: clean up #includes
      commit-graph: simplify parse_commit_graph() #1
      commit-graph: simplify parse_commit_graph() #2
      commit-graph: simplify write_commit_graph_file() #1
      commit-graph: simplify write_commit_graph_file() #2
      commit-graph: unify the signatures of all write_graph_chunk_*() functions
      commit-graph: simplify chunk writes into loop
      commit-graph: check chunk sizes after writing
      commit-graph: check all leading directories in changed path Bloom filters
      ci: use absolute PYTHON_PATH in the Linux jobs

Samanta Navarro (1):
      fast-import: fix typo in documentation

Sergey Organov (9):
      revision: fix die() message for "--unpacked="
      revision: change "--diff-merges" option to require parameter
      doc/git-log: describe --diff-merges=off
      t/t4013: add test for --diff-merges=off
      pretty-options.txt: fix --no-abbrev-commit description
      revision: add separate field for "-m" of "diff-index -m"
      log_tree_diff: get rid of code duplication for first_parent_only
      log_tree_diff: get rid of extra check for NULL
      diff: get rid of redundant 'dense' argument

Shourya Shukla (11):
      submodule: remove extra line feeds between callback struct and macro
      submodule: rename helper functions to avoid ambiguity
      t7421: introduce a test script for verifying 'summary' output
      t7401: modernize style
      t7401: use 'short' instead of 'verify' and cut in rev-parse calls
      t7401: change syntax of test_i18ncmp calls for clarity
      t7401: change indentation for enhanced readability
      t7401: add a NEEDSWORK
      submodule: eliminate unused parameters from print_submodule_summary()
      submodule: fix style in function definition
      t7421: eliminate 'grep' check in t7421.4 for mingw compatibility

Sibi Siddharthan (8):
      Introduce CMake support for configuring Git
      cmake: generate the shell/perl/python scripts and templates, translations
      cmake: installation support for git
      cmake: support for testing git with ctest
      cmake: support for testing git when building out of the source tree
      cmake: support for building git on windows with mingw
      cmake: support for building git on windows with msvc and clang.
      ci: modification of main.yml to use cmake for vs-build job

Simon Legner (1):
      remote-mediawiki: fix duplicate revisions being imported

Stefan Dotterweich (1):
      gitk: add diff lines background colors

Steve Kemp (1):
      comment: fix spelling mistakes inside comments

Taylor Blau (18):
      revision: empty pathspecs should not use Bloom filters
      list_objects_filter_options: introduce 'list_object_filter_config_name'
      upload-pack.c: allow banning certain object filter(s)
      upload-pack.c: introduce 'uploadpackfilter.tree.maxDepth'
      builtin/repack.c: invalidate MIDX only when necessary
      midx: traverse the local MIDX first
      commit-graph: introduce 'get_bloom_filter_settings()'
      t4216: use an '&&'-chain
      commit-graph: pass a 'struct repository *' in more places
      t/helper/test-read-graph.c: prepare repo settings
      commit-graph: respect 'commitGraph.readChangedPaths'
      commit-graph.c: store maximum changed paths
      bloom: split 'get_bloom_filter()' in two
      bloom: use provided 'struct bloom_filter_settings'
      bloom: encode out-of-bounds filters as non-empty
      commit-graph: rename 'split_commit_graph_opts'
      builtin/commit-graph.c: introduce '--max-new-filters=<n>'
      commit-graph: introduce 'commitGraph.maxNewFilters'

Theodore Dubois (1):
      submodule update: silence underlying merge/rebase with "--quiet"

Thomas Guyot-Sionnest (1):
      diff: fix modified lines stats with --stat and --numstat

brian m. carlson (48):
      remote-curl: make --force-with-lease work with non-ASCII ref names
      t: make test-bloom initialize repository
      t1001: use $ZERO_OID
      t3305: make hash agnostic
      t6100: make hash size independent
      t6101: make hash size independent
      t6301: make hash size independent
      t6500: specify test values for SHA-256
      t6501: avoid hard-coded objects
      t7003: compute appropriate length constant
      t7063: make hash size independent
      t7201: abstract away SHA-1-specific constants
      t7102: abstract away SHA-1-specific constants
      t7400: make hash size independent
      t7405: make hash size independent
      t7506: avoid checking for SHA-1-specific constants
      t7508: use $ZERO_OID instead of hard-coded constant
      t8002: make hash size independent
      t8003: make hash size independent
      t8011: make hash size independent
      t9300: abstract away SHA-1-specific constants
      t9300: use $ZERO_OID instead of hard-coded object ID
      t9301: make hash size independent
      t9350: make hash size independent
      t9500: ensure that algorithm info is preserved in config
      t9700: make hash size independent
      t5308: make test work with SHA-256
      t0410: mark test with SHA1 prerequisite
      http-fetch: set up git directory before parsing pack hashes
      builtin/verify-pack: implement an --object-format option
      bundle: add new version for use with SHA-256
      setup: add support for reading extensions.objectformat
      repository: enable SHA-256 support by default
      t: add test_oid option to select hash algorithm
      t: allow testing different hash algorithms via environment
      t: make SHA1 prerequisite depend on default hash
      ci: run tests with SHA-256
      docs: add documentation for extensions.objectFormat
      t: remove test_oid_init in tests
      git-cvsexportcommit: support Perl before 5.10.1
      docs: document SHA-256 pack and indices
      docs: fix step in transition plan
      t4013: improve diff-post-processor logic
      po: add missing letter for French message
      docs: explain why squash merges are broken with long-running branches
      docs: explain why reverts are not always applied on merge
      docs: explain how to deal with files that are always modified
      builtin/clone: avoid failure with GIT_DEFAULT_HASH

pudinha (2):
      mergetool--lib: improve support for vimdiff-style tool variants
      mergetools: add support for nvimdiff (neovim) family

Ákos Uzonyi (2):
      completion: use "prev" variable instead of introducing "prevword"
      completion: complete refs after 'git restore -s'

Ævar Arnfjörð Bjarmason (17):
      remote-mediawiki doc: correct link to GitHub project
      remote-mediawiki doc: link to MediaWiki's current version
      remote-mediawiki doc: don't hardcode Debian PHP versions
      remote-mediawiki tests: use the login/password variables
      remote-mediawiki tests: use a 10 character password
      remote-mediawiki tests: use test_cmp in tests
      remote-mediawiki tests: change `[]` to `test`
      remote-mediawiki tests: use "$dir/" instead of "$dir."
      remote-mediawiki tests: use a more idiomatic dispatch table
      remote-mediawiki tests: replace deprecated Perl construct
      remote-mediawiki tests: use inline PerlIO for readability
      remote-mediawiki tests: use CLI installer
      remote-mediawiki tests: annotate failing tests
      remote-mediawiki: provide a list form of run_git()
      remote-mediawiki: convert to quoted run_git() invocation
      remote-mediawiki: annotate unquoted uses of run_git()
      remote-mediawiki: use "sh" to eliminate unquoted commands

Đoàn Trần Công Danh (1):
      diff: index-line: respect --abbrev in object's name

Роман Донченко (2):
      gitk: don't highlight files after submodules as submodules
      gitk: fix the context menu not appearing in the presence of submodule diffs


^ permalink raw reply	[relevance 3%]

* Huge push upload despite only having a tiny change
@ 2020-06-02 19:21  5% Elijah Newren
  0 siblings, 0 replies; 162+ results
From: Elijah Newren @ 2020-06-02 19:21 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Jonathan Nieder

Hi,

I had a user report that two nearly identical pushes (the second being
an amended commit of the first) took dramatically differing amounts of
time and amount of data uploaded (from 4.5 seconds and about 21k
uploaded, to 223 seconds and over 100 MB uploaded).

I'm curious if this might be a known issue; it sounds similar to some
push protocol discussion I remember from the contributor's summit (but
I don't know anything on the protocol side and tend to work on other
things during protocol discussion).  If this does sound like a known
issue, does anyone have links to some relevant discussion I can read
up on (and perhaps pass long to this user)?  If it doesn't sound like
a known issue, what other things would be useful for me to dig up?

Additional details:
* Both pushes involved cases where the user had a single commit that
the server didn't.
* The parent of the commit that needed to be pushed was the same in both cases.
* The commit in question was small; modifying either 13 or 15 lines of
two files that were each less than about 8k in size.
* The user was pushing up a new branch each time, but the new branch
was closely related to an existing branch (i.e. had all but a few
commits of history in common)
* The user was two commits behind the closely-related branch at the
time of the first push, and 10 commits behind at the time of the
second push.  Running format-patch on these 10 commits that were on
the server at the time shows their size is at most about ~55 k.
* The server has a huge number of refs; about 470k of them (most of
them related to code reviews).
* The server was running Gerrit 3.1.4 (i.e. jgit).
* The user was using a version of git based off master from a few
weeks ago, in particular, with a few changes on top of commit
b994622632 ("The eighth batch", 2020-05-08).  I don't think the few
internal changes could affect anything here, but those changes were:
(1) making features.experimental default to true (which only turns on
two fetch settings as far as I can tell), (2) making
merge.directoryRenames default to true, and (3) setting a few trace2.*
config settings by default.

Thanks,
Elijah

^ permalink raw reply	[relevance 5%]

* [ANNOUNCE] Git v2.27.0
@ 2020-06-01 16:34  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2020-06-01 16:34 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

The latest feature release Git v2.27.0 is now available at the
usual places.  It is comprised of 537 non-merge commits since
v2.26.0, contributed by 71 people, 19 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.27.0'
tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.26.0 are as follows.
Welcome to the Git development community!

  Andras Kucsma, Ansgar Röber, Ash Holland, Christopher
  Warrington, Emma Brooks, Jan Engelhardt, Jessica Clarke,
  Jorge Lopez Silva, Julien Moutinho, Li Xuejiang,
  luciano.rocha@booking.com, Matthias Aßhauer, Michael
  F. Schönitzer, Nathan Sanders, Son Luong Ngoc, Terry Moschou,
  Toon Claes, Vasil Dimov, and Yang Zhao.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  마누엘, Abhishek Kumar, Alban Gruin, Alessandro Menti,
  Alexander Shopov, Alexandr Miloslavskiy, Alex Henrie, Andrei
  Rybak, Andrew Oakley, Ben Keene, brian m. carlson, Carlo
  Marcelo Arenas Belón, Christian Couder, Christopher Diaz
  Riveros, Damien Robert, Denton Liu, Derrick Stolee, Đoàn
  Trần Công Danh, Elijah Newren, Emily Shaffer, Emir Sarı,
  Eric Sunshine, Garima Singh, Greg Price, Hans Jerry Illikainen,
  Heba Waly, Ismael Luceno, Jean-Noël Avila, Jeff King, Jiang
  Xin, Johannes Schindelin, Jonathan Nieder, Jonathan Tan, Jordi
  Mas, Josh Steadmon, Junio C Hamano, Martin Ågren, Matheus
  Tavares, Matthias Rüster, Patrick Steinhardt, Peter Krefting,
  Philippe Blain, Phillip Wood, Pratyush Yadav, René Scharfe,
  Shourya Shukla, SZEDER Gábor, Taylor Blau, Thomas Gummerer,
  Todd Zullinger, Trần Ngọc Quân, and Yi-Jyun Pan.

----------------------------------------------------------------

Git 2.27 Release Notes
======================

Updates since v2.26
-------------------

Backward compatibility notes

 * When "git describe C" finds that commit C is pointed by a signed or
   annotated tag, which records T as its tagname in the object, the
   command gives T as its answer.  Even if the user renames or moves
   such a tag from its natural location in the "refs/tags/" hierarchy,
   "git describe C" would still give T as the answer, but in such a
   case "git show T^0" would no longer work as expected.  There may be
   nothing at "refs/tags/T" or even worse there may be a different tag
   instead.

   Starting from this version, "git describe" will always use the
   "long" version, as if the "--long" option were given, when giving
   its output based on such a misplaced tag to work around the problem.

 * "git pull" issues a warning message until the pull.rebase
   configuration variable is explicitly given, which some existing
   users may find annoying---those who prefer not to rebase need to
   set the variable to false to squelch the warning.

 * The transport protocol version 2, which was promoted to the default
   in Git 2.26 release, turned out to have some remaining rough edges,
   so it has been demoted from the default.


UI, Workflows & Features

 * A handful of options to configure SSL when talking to proxies have
   been added.

 * Smudge/clean conversion filters are now given more information
   (e.g. the object of the tree-ish in which the blob being converted
   appears, in addition to its path, which has already been given).

 * When "git describe C" finds an annotated tag with tagname A to be
   the best name to explain commit C, and the tag is stored in a
   "wrong" place in the refs/tags hierarchy, e.g. refs/tags/B, the
   command gave a warning message but used A (not B) to describe C.
   If C is exactly at the tag, the describe output would be "A", but
   "git rev-parse A^0" would not be equal as "git rev-parse C^0".  The
   behavior of the command has been changed to use the "long" form
   i.e. A-0-gOBJECTNAME, which is correctly interpreted by rev-parse.

 * "git pull" learned to warn when no pull.rebase configuration
   exists, and neither --[no-]rebase nor --ff-only is given (which
   would result a merge).

 * "git p4" learned four new hooks and also "--no-verify" option to
   bypass them (and the existing "p4-pre-submit" hook).

 * "git pull" shares many options with underlying "git fetch", but
   some of them were not documented and some of those that would make
   sense to pass down were not passed down.

 * "git rebase" learned the "--no-gpg-sign" option to countermand
   commit.gpgSign the user may have.

 * The output from "git format-patch" uses RFC 2047 encoding for
   non-ASCII letters on From: and Subject: headers, so that it can
   directly be fed to e-mail programs.  A new option has been added
   to produce these headers in raw.

 * "git log" learned "--show-pulls" that helps pathspec limited
   history views; a merge commit that takes the whole change from a
   side branch, which is normally omitted from the output, is shown
   in addition to the commits that introduce real changes.

 * The interactive input from various codepaths are consolidated and
   any prompt possibly issued earlier are fflush()ed before we read.

 * Allow "git rebase" to reapply all local commits, even if the may be
   already in the upstream, without checking first.

 * The 'pack.useSparse' configuration variable now defaults to 'true',
   enabling an optimization that has been experimental since Git 2.21.

 * "git rebase" happens to call some hooks meant for "checkout" and
   "commit" by this was not a designed behaviour than historical
   accident.  This has been documented.

 * "git merge" learns the "--autostash" option.

 * "sparse-checkout" UI improvements.

 * "git update-ref --stdin" learned a handful of new verbs to let the
   user control ref update transactions more explicitly, which helps
   as an ingredient to implement two-phase commit-style atomic
   ref-updates across multiple repositories.

 * "git commit-graph write" learned different ways to write out split
   files.

 * Introduce an extension to the commit-graph to make it efficient to
   check for the paths that were modified at each commit using Bloom
   filters.

 * The approxidate parser learns to parse seconds with fraction and
   ignore fractional part.

 * The userdiff patterns for Markdown documents have been added.

 * The sparse-checkout patterns have been forbidden from excluding all
   paths, leaving an empty working tree, for a long time.  This
   limitation has been lifted.

 * "git restore --staged --worktree" now defaults to take the contents
   out of "HEAD", instead of erring out.

 * "git p4" learned to recover from a (broken) state where a directory
   and a file are recorded at the same path in the Perforce repository
   the same way as their clients do.

 * "git multi-pack-index repack" has been taught to honor some
   repack.* configuration variables.


Performance, Internal Implementation, Development Support etc.

 * The advise API has been revamped to allow more systematic enumeration of
   advice knobs in the future.

 * SHA-256 transition continues.

 * The code to interface with GnuPG has been refactored.

 * "git stash" has kept an escape hatch to use the scripted version
   for a few releases, which got stale.  It has been removed.

 * Enable tests that require GnuPG on Windows.

 * Minor test usability improvement.

 * Trace2 enhancement to allow logging of the environment variables.

 * Test clean-up continues.

 * Perf-test update.

 * A Windows-specific test element has been made more robust against
   misuse from both user's environment and programmer's errors.

 * Various tests have been updated to work around issues found with
   shell utilities that come with busybox etc.

 * The config API made mixed uses of int and size_t types to represent
   length of various pieces of text it parsed, which has been updated
   to use the correct type (i.e. size_t) throughout.

 * The "--decorate-refs" and "--decorate-refs-exclude" options "git
   log" takes have learned a companion configuration variable
   log.excludeDecoration that sits at the lowest priority in the
   family.

 * A new CI job to build and run test suite on linux with musl libc
   has been added.

 * Update the CI configuration to use GitHub Actions, retiring the one
   based on Azure Pipelines.

 * The directory traversal code had redundant recursive calls which
   made its performance characteristics exponential with respect to
   the depth of the tree, which was corrected.

 * "git blame" learns to take advantage of the "changed-paths" Bloom
   filter stored in the commit-graph file.

 * The "bugreport" tool has been added.

 * The object walk with object filter "--filter=tree:0" can now take
   advantage of the pack bitmap when available.

 * Instead of always building all branches at GitHub via Actions,
   users can specify which branches to build.

 * Codepaths that show progress meter have been taught to also use the
   start_progress() and the stop_progress() calls as a "region" to be
   traced.

 * Instead of downloading Windows SDK for CI jobs for windows builds
   from an external site (wingit.blob.core.windows.net), use the one
   created in the windows-build job, to work around quota issues at
   the external site.


Fixes since v2.26
-----------------

 * The real_path() convenience function can easily be misused; with a
   bit of code refactoring in the callers' side, its use has been
   eliminated.
   (merge 49d3c4b481 am/real-path-fix later to maint).

 * Update "git p4" to work with Python 3.
   (merge 6bb40ed20a yz/p4-py3 later to maint).

 * The mechanism to prevent "git commit" from making an empty commit
   or amending during an interrupted cherry-pick was broken during the
   rewrite of "git rebase" in C, which has been corrected.
   (merge 430b75f720 pw/advise-rebase-skip later to maint).

 * Fix "git checkout --recurse-submodules" of a nested submodule
   hierarchy.
   (merge 846f34d351 pb/recurse-submodules-fix later to maint).

 * The "--fork-point" mode of "git rebase" regressed when the command
   was rewritten in C back in 2.20 era, which has been corrected.
   (merge f08132f889 at/rebase-fork-point-regression-fix later to maint).

 * The import-tars importer (in contrib/fast-import/) used to create
   phony files at the top-level of the repository when the archive
   contains global PAX headers, which made its own logic to detect and
   omit the common leading directory ineffective, which has been
   corrected.
   (merge c839fcff65 js/import-tars-do-not-make-phony-files-from-pax-headers later to maint).

 * Simplify the commit ancestry connectedness check in a partial clone
   repository in which "promised" objects are assumed to be obtainable
   lazily on-demand from promisor remote repositories.
   (merge 2b98478c6f jt/connectivity-check-optim-in-partial-clone later to maint).

 * The server-end of the v2 protocol to serve "git clone" and "git
   fetch" was not prepared to see a delim packets at unexpected
   places, which led to a crash.
   (merge cacae4329f jk/harden-protocol-v2-delim-handling later to maint).

 * When fed a midx that records no objects, some codepaths tried to
   loop from 0 through (num_objects-1), which, due to integer
   arithmetic wrapping around, made it nonsense operation with out of
   bounds array accesses.  The code has been corrected to reject such
   an midx file.
   (merge 796d61cdc0 dr/midx-avoid-int-underflow later to maint).

 * Utitiles run via the run_command() API were not spawned correctly
   on Cygwin, when the paths to them are given as a full path with
   backslashes.
   (merge 05ac8582bc ak/run-command-on-cygwin-fix later to maint).

 * "git pull --rebase" tried to run a rebase even after noticing that
   the pull results in a fast-forward and no rebase is needed nor
   sensible, for the past few years due to a mistake nobody noticed.
   (merge fbae70ddc6 en/pull-do-not-rebase-after-fast-forwarding later to maint).

 * "git rebase" with the merge backend did not work well when the
   rebase.abbreviateCommands configuration was set.
   (merge de9f1d3ef4 ag/rebase-merge-allow-ff-under-abbrev-command later to maint).

 * The logic to auto-follow tags by "git clone --single-branch" was
   not careful to avoid lazy-fetching unnecessary tags, which has been
   corrected.
   (merge 167a575e2d jk/use-quick-lookup-in-clone-for-tag-following later to maint).

 * "git rebase -i" did not leave the reflog entries correctly.
   (merge 1f6965f994 en/sequencer-reflog-action later to maint).

 * The more aggressive updates to remote-tracking branches we had for
   the past 7 years or so were not reflected in the documentation,
   which has been corrected.
   (merge a44088435c pb/pull-fetch-doc later to maint).

 * We've left the command line parsing of "git log :/a/b/" broken for
   about a full year without anybody noticing, which has been
   corrected.
   (merge 0220461071 jc/missing-ref-store-fix later to maint).

 * Misc fixes for Windows.
   (merge 3efc128cd5 js/mingw-fixes later to maint).

 * "git rebase" (again) learns to honor "--no-keep-empty", which lets
   the user to discard commits that are empty from the beginning (as
   opposed to the ones that become empty because of rebasing).  The
   interactive rebase also marks commits that are empty in the todo.
   (merge 50ed76148a en/rebase-no-keep-empty later to maint).

 * Parsing the host part out of URL for the credential helper has been corrected.
   (merge 4c5971e18a jk/credential-parsing-end-of-host-in-URL later to maint).

 * Document the recommended way to abort a failing test early (e.g. by
   exiting a loop), which is to say "return 1".
   (merge 7cc112dc95 jc/doc-test-leaving-early later to maint).

 * The code that refreshes the last access and modified time of
   on-disk packfiles and loose object files have been updated.
   (merge 312cd76130 lr/freshen-file-fix later to maint).

 * Validation of push certificate has been made more robust against
   timing attacks.
   (merge 719483e547 bc/constant-memequal later to maint).

 * The custom hash function used by "git fast-import" has been
   replaced with the one from hashmap.c, which gave us a nice
   performance boost.
   (merge d8410a816b jk/fast-import-use-hashmap later to maint).

 * The "git submodule" command did not initialize a few variables it
   internally uses and was affected by variable settings leaked from
   the environment.
   (merge 65d100c4dd lx/submodule-clear-variables later to maint).

 * Raise the minimum required version of docbook-xsl package to 1.74,
   as 1.74.0 was from late 2008, which is more than 10 years old, and
   drop compatibility cruft from our documentation suite.
   (merge 3c255ad660 ma/doc-discard-docbook-xsl-1.73 later to maint).

 * "git log" learns "--[no-]mailmap" as a synonym to "--[no-]use-mailmap"
   (merge 88acccda38 jc/log-no-mailmap later to maint).

 * "git commit-graph write --expire-time=<timestamp>" did not use the
   given timestamp correctly, which has been corrected.
   (merge b09b785c78 ds/commit-graph-expiry-fix later to maint).

 * Tests update to use "test-chmtime" instead of "touch -t".
   (merge e892a56845 ds/t5319-touch-fix later to maint).

 * "git diff" in a partial clone learned to avoid lazy loading blob
   objects in more casese when they are not needed.
   (merge 95acf11a3d jt/avoid-prefetch-when-able-in-diff later to maint).

 * "git push --atomic" used to show failures for refs that weren't
   even pushed, which has been corrected.
   (merge dfe1b7f19c jx/atomic-push later to maint).

 * Code in builtin/*, i.e. those can only be called from within
   built-in subcommands, that implements bulk of a couple of
   subcommands have been moved to libgit.a so that they could be used
   by others.
   (merge 9460fd48b5 dl/libify-a-few later to maint).

 * Allowing the user to split a patch hunk while "git stash -p" does
   not work well; a band-aid has been added to make this (partially)
   work better.

 * "git diff-tree --pretty --notes" used to hit an assertion failure,
   as it forgot to initialize the notes subsystem.
   (merge 5778b22b3d tb/diff-tree-with-notes later to maint).

 * "git range-diff" fixes.
   (merge 8d1675eb7f vd/range-diff-with-custom-pretty-format-fix later to maint).

 * "git grep" did not quote a path with unusual character like other
   commands (like "git diff", "git status") do, but did quote when run
   from a subdirectory, both of which has been corrected.
   (merge 45115d8490 mt/grep-cquote-path later to maint).

 * GNU/Hurd is also among the ones that need the fopen() wrapper.
   (merge 274a1328fb jc/gnu-hurd-lets-fread-read-dirs later to maint).

 * Those fetching over protocol v2 from linux-next and other kernel
   repositories are reporting that v2 often fetches way too much than
   needed.
   (merge 11c7f2a30b jn/demote-proto2-from-default later to maint).

 * The upload-pack protocol v2 gave up too early before finding a
   common ancestor, resulting in a wasteful fetch from a fork of a
   project.  This has been corrected to match the behaviour of v0
   protocol.
   (merge 2f0a093dd6 jt/v2-fetch-nego-fix later to maint).

 * The build procedure did not use the libcurl library and its include
   files correctly for a custom-built installation.
   (merge 0573831950 jk/build-with-right-curl later to maint).

 * Tighten "git mailinfo" to notice and error out when decoded result
   contains NUL in it.
   (merge 3919997447 dd/mailinfo-with-nul later to maint).

 * Fix in-core inconsistency after fetching into a shallow repository
   that broke the code to write out commit-graph.
   (merge 37b9dcabfc tb/reset-shallow later to maint).

 * The commit-graph code exhausted file descriptors easily when it
   does not have to.
   (merge c8828530b7 tb/commit-graph-fd-exhaustion-fix later to maint).

 * The multi-pack-index left mmapped file descriptors open when it
   does not have to.
   (merge 6c7ff7cf7f ds/multi-pack-index later to maint).

 * Recent update to Homebrew used by macOS folks breaks build by
   moving gettext library and necessary headers.
   (merge a0b3108618 ds/build-homebrew-gettext-fix later to maint).

 * Incompatible options "--root" and "--fork-point" of "git rebase"
   have been marked and documented as being incompatible.
   (merge a35413c378 en/rebase-root-and-fork-point-are-incompatible later to maint).

 * Error and verbose trace messages from "git push" did not redact
   credential material embedded in URLs.
   (merge d192fa5006 js/anonymise-push-url-in-errors later to maint).

 * Update the parser used for credential.<URL>.<variable>
   configuration, to handle <URL>s with '/' in them correctly.
   (merge b44d0118ac bc/wildcard-credential later to maint).

 * Recent updates broke parsing of "credential.<url>.<key>" where
   <url> is not a full URL (e.g. [credential "https://"] helper = ...)
   stopped working, which has been corrected.
   (merge 9a121b0d22 js/partial-urlmatch-2.17 later to maint).
   (merge cd93e6c029 js/partial-urlmatch later to maint).

 * Some of the files commit-graph subsystem keeps on disk did not
   correctly honor the core.sharedRepository settings and some were
   left read-write.

 * In error messages that "git switch" mentions its option to create a
   new branch, "-b/-B" options were shown, where "-c/-C" options
   should be, which has been corrected.
   (merge 7c16ef7577 dl/switch-c-option-in-error-message later to maint).

 * With the recent tightening of the code that is used to parse
   various parts of a URL for use in the credential subsystem, a
   hand-edited credential-store file causes the credential helper to
   die, which is a bit too harsh to the users.  Demote the error
   behaviour to just ignore and keep using well-formed lines instead.
   (merge c03859a665 cb/credential-store-ignore-bogus-lines later to maint).

 * The samples in the credential documentation has been updated to
   make it clear that we depict what would appear in the .git/config
   file, by adding appropriate quotes as needed..
   (merge 177681a07e jk/credential-sample-update later to maint).

 * "git branch" and other "for-each-ref" variants accepted multiple
   --sort=<key> options in the increasing order of precedence, but it
   had a few breakages around "--ignore-case" handling, and tie-breaking
   with the refname, which have been fixed.
   (merge 7c5045fc18 jk/for-each-ref-multi-key-sort-fix later to maint).

 * The coding guideline for shell scripts instructed to refer to a
   variable with dollar-sign inside arithmetic expansion to work
   around a bug in old versions of dash, which is a thing of the past.
   Now we are not forbidden from writing $((var+1)).
   (merge 32b5fe7f0e jk/arith-expansion-coding-guidelines later to maint).

 * The <stdlib.h> header on NetBSD brings in its own definition of
   hmac() function (eek), which conflicts with our own and unrelated
   function with the same name.  Our function has been renamed to work
   around the issue.
   (merge 3013118eb8 cb/avoid-colliding-with-netbsd-hmac later to maint).

 * The basic test did not honor $TEST_SHELL_PATH setting, which has
   been corrected.
   (merge 0555e4af58 cb/t0000-use-the-configured-shell later to maint).

 * Minor in-code comments and documentation updates around credential
   API.
   (merge 1aed817f99 cb/credential-doc-fixes later to maint).

 * Teach "am", "commit", "merge" and "rebase", when they are run with
   the "--quiet" option, to pass "--quiet" down to "gc --auto".
   (merge 7c3e9e8cfb jc/auto-gc-quiet later to maint).

 * The code to skip unmerged paths in the index when sparse checkout
   is in use would have made out-of-bound access of the in-core index
   when the last path was unmerged, which has been corrected.

 * Serving a "git fetch" client over "git://" and "ssh://" protocols
   using the on-wire protocol version 2 was buggy on the server end
   when the client needs to make a follow-up request to
   e.g. auto-follow tags.
   (merge 08450ef791 cc/upload-pack-v2-fetch-fix later to maint).

 * "git bisect replay" had trouble with input files when they used
   CRLF line ending, which has been corrected.
   (merge 6c722cbe5a cw/bisect-replay-with-dos later to maint).

 * "rebase -i" segfaulted when rearranging a sequence that has a
   fix-up that applies another fix-up (which may or may not be a
   fix-up of yet another step).
   (merge 02471e7e20 js/rebase-autosquash-double-fixup-fix later to maint).

 * "git fsck" ensures that the paths recorded in tree objects are
   sorted and without duplicates, but it failed to notice a case where
   a blob is followed by entries that sort before a tree with the same
   name.  This has been corrected.
   (merge 9068cfb20f rs/fsck-duplicate-names-in-trees later to maint).

 * Code clean-up by removing a compatibility implementation of a
   function we no longer use.
   (merge 84b0115f0d cb/no-more-gmtime later to maint).

 * When a binary file gets modified and renamed on both sides of history
   to different locations, both files would be written to the working
   tree but both would have the contents from "ours".  This has been
   corrected so that the path from each side gets their original content.

 * Fix for a copy-and-paste error introduced during 2.20 era.
   (merge e68a5272b1 ds/multi-pack-verify later to maint).

 * Update an unconditional use of "grep -a" with a perl script in a test.
   (merge 1eb7371236 dd/t5703-grep-a-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 564956f358 jc/maintain-doc later to maint).
   (merge 7422b2a0a1 sg/commit-slab-clarify-peek later to maint).
   (merge 9c688735f6 rs/doc-passthru-fetch-options later to maint).
   (merge 757c2ba3e2 en/oidset-uninclude-hashmap later to maint).
   (merge 8312aa7d74 jc/config-tar later to maint).
   (merge d00a5bdd50 ss/submodule-foreach-cb later to maint).
   (merge 64d1022e14 ar/test-style-fixes later to maint).
   (merge 4a465443a6 ds/doc-clone-filter later to maint).
   (merge bb2dbe301b jk/t3419-drop-expensive-tests later to maint).
   (merge d3507cc712 js/test-junit-finalization-fix later to maint).
   (merge 2149b6748f bc/faq later to maint).
   (merge 12dc0879f1 jk/test-cleanup later to maint).
   (merge 344420bf0f pb/rebase-doc-typofix later to maint).
   (merge 7cd54d37dc dl/wrapper-fix-indentation later to maint).
   (merge 78725ebda9 jc/allow-strlen-substitution-in-shell-scripts later to maint).
   (merge 2ecfcdecc6 jm/gitweb-fastcgi-utf8 later to maint).
   (merge 0740d0a5d3 jk/oid-array-cleanups later to maint).
   (merge a1aba0c95c js/t0007-typofix later to maint).
   (merge 76ba7fa225 ma/config-doc-fix later to maint).
   (merge 826f0c0df2 js/subtree-doc-update-to-asciidoctor-2 later to maint).
   (merge 88eaf361e0 eb/mboxrd-doc later to maint).
   (merge 051cc54941 tm/zsh-complete-switch-restore later to maint).
   (merge 39102cf4fe ms/doc-revision-illustration-fix later to maint).
   (merge 4d9378bfad eb/gitweb-more-trailers later to maint).
   (merge bdccbf7047 mt/doc-worktree-ref later to maint).
   (merge ce9baf234f dl/push-recurse-submodules-fix later to maint).
   (merge 4153274052 bc/doc-credential-helper-value later to maint).
   (merge 5c7bb0146e jc/codingstyle-compare-with-null later to maint).

----------------------------------------------------------------

Changes since v2.26.0 are as follows:

Abhishek Kumar (1):
      commit-slab-decl.h: update include guard

Alban Gruin (3):
      sequencer: mark messages for translation
      sequencer: don't abbreviate a command if it doesn't have a short form
      t3432: test `--merge' with `rebase.abbreviateCommands = true', too

Alessandro Menti (2):
      l10n: it.po: update the Italian translation for Git 2.27.0 round 1
      l10n: it.po: update for Git 2.27.0 round #2

Alex Henrie (1):
      pull: warn if the user didn't say whether to rebase or to merge

Alexander Shopov (2):
      l10n: bg.po: Updated Bulgarian translation (4868t)
      l10n: bg.po: Updated Bulgarian translation (4875t)

Alexandr Miloslavskiy (4):
      set_git_dir: fix crash when used with real_path()
      real_path: remove unsafe API
      real_path_if_valid(): remove unsafe API
      get_superproject_working_tree(): return strbuf

Andras Kucsma (1):
      run-command: trigger PATH lookup properly on Cygwin

Andrei Rybak (2):
      t9500: remove spaces after redirect operators
      t: fix whitespace around &&

Andrew Oakley (1):
      git-p4: recover from inconsistent perforce history

Ansgar Röber (1):
      Subject: git-gui: fix syntax error because of missing semicolon

Ash Holland (1):
      userdiff: support Markdown

Ben Keene (8):
      git-p4: change the expansion test from basestring to list
      git-p4: rewrite prompt to be Windows compatible
      git-p4: create new function run_git_hook
      git-p4: add p4-pre-submit exit text
      git-p4: add --no-verify option
      git-p4: restructure code in submit
      git-p4: add p4 submit hooks
      git-p4: add RCS keyword status message

Carlo Marcelo Arenas Belón (13):
      credential-store: ignore bogus lines from store file
      credential: update description for credential_from_url_gently
      credential: correct order of parameters for credential_match
      builtin/receive-pack: avoid generic function name hmac()
      t/t0000-basic: make sure subtests also use TEST_SHELL_PATH
      t/test_lib: avoid naked bash arrays in file_lineno
      credential: update gitcredentials documentation
      credential: document protocol updates
      compat: remove gmtime
      t4216: avoid unnecessary subshell in test_bloom_filters_not_used
      t5520: avoid alternation in grep's BRE (not POSIX)
      bisect: avoid tailing CR characters from revision in replay
      t: avoid alternation (not POSIX) in grep's BRE

Christian Couder (1):
      upload-pack: clear filter_options for each v2 fetch command

Christopher Diaz Riveros (1):
      l10n: es: 2.27.0 round 1

Christopher Warrington (1):
      bisect: allow CRLF line endings in "git bisect replay" input

Damien Robert (6):
      midx.c: fix an integer underflow
      doc: list all commands affected by submodule.recurse
      doc: document --recurse-submodules for reset and restore
      doc: explain how to deactivate submodule.recurse completely
      doc: be more precise on (fetch|push).recurseSubmodules
      doc: --recurse-submodules mostly applies to active submodules

Denton Liu (45):
      Makefile: ASCII-sort += lists
      t7600: use test_write_lines()
      Lib-ify fmt-merge-msg
      Lib-ify prune-packed
      t5512: don't use `test_must_fail test_cmp`
      t5512: stop losing git exit code in here-docs
      t5512: stop losing return codes of git commands
      t5550: simplify no matching line check
      t5607: reorder `nongit test_must_fail`
      t5612: don't use `test_must_fail test_cmp`
      t5612: stop losing return codes of git commands
      t5801: teach compare_refs() to accept !
      wrapper: indent with tabs
      sequencer: stop leaking buf
      sequencer: make file exists check more efficient
      sequencer: make read_oneliner() accept flags
      sequencer: configurably warn on non-existent files
      sequencer: make read_oneliner() extern
      rebase: use read_oneliner()
      sequencer: make apply_autostash() accept a path
      sequencer: rename stash_sha1 to stash_oid
      rebase: use apply_autostash() from sequencer.c
      rebase: generify reset_head()
      reset: extract reset_head() from rebase
      rebase: extract create_autostash()
      rebase: generify create_autostash()
      sequencer: extract perform_autostash() from rebase
      sequencer: unlink autostash in apply_autostash()
      sequencer: implement save_autostash()
      sequencer: implement apply_autostash_oid()
      merge: teach --autostash option
      t5520: make test_pull_autostash() accept expect_parent_num
      pull: pass --autostash to merge
      t6030: use test_path_is_missing()
      t7408: replace incorrect uses of test_must_fail
      t7508: don't use `test_must_fail test_cmp`
      t9141: use test_path_is_missing()
      t9160: use test_path_is_missing()
      t9164: use test_must_fail only on git commands
      t9819: don't use test_must_fail with p4
      Use OPT_CALLBACK and OPT_CALLBACK_F
      push: unset PARSE_OPT_OPTARG for --recurse-submodules
      rebase: save autostash entry into stash reflog on --quit
      switch: fix errors and comments related to -c and -C
      Doc: reference the "stash list" in autostash docs

Derrick Stolee (27):
      connected.c: reprepare packs for corner cases
      config: set pack.useSparse=true by default
      pack-objects: flip the use of GIT_TEST_PACK_SPARSE
      clone: document --filter options
      diff: halt tree-diff early after max_changes
      dir: refactor treat_directory to clarify control flow
      commit-graph: fix buggy --expire-time option
      t5319: replace 'touch -m' with 'test-tool chmtime'
      bloom: ignore renames when computing changed paths
      revision: --show-pulls adds helpful merges
      log-tree: make ref_filter_match() a helper method
      log: add log.excludeDecoration config option
      revision: complicated pathspecs disable filters
      tests: write commit-graph with Bloom filters
      blame: use changed-path Bloom filters
      multi-pack-index: close file descriptor after mmap
      bloom: fix whitespace around tab length
      test-bloom: fix usage typo
      sparse-checkout: stop blocking empty workdirs
      unpack-trees: avoid array out-of-bounds error
      multi-pack-index: respect repack.packKeptObjects=false
      bloom: parse commit before computing filters
      Documentation: changed-path Bloom filters use byte words
      bloom: de-duplicate directory entries
      bloom: use num_changes not nr for limit detection
      progress: call trace2_region_leave() only after calling _enter()
      fsck: use ERROR_MULTI_PACK_INDEX

Elijah Newren (39):
      oidset: remove unnecessary include
      unpack-trees: fix minor typo in comment
      unpack-trees: remove unused error type
      unpack-trees: simplify verify_absent_sparse()
      unpack-trees: simplify pattern_list freeing
      t1091: make some tests a little more defensive against failures
      unpack-trees: allow check_updates() to work on a different index
      unpack-trees: do not mark a dirty path with SKIP_WORKTREE
      unpack-trees: pull sparse-checkout pattern reading into a new function
      unpack-trees: add a new update_sparsity() function
      sparse-checkout: use new update_sparsity() function
      sparse-checkout: use improved unpack_trees porcelain messages
      unpack-trees: move ERROR_WOULD_LOSE_SUBMODULE earlier
      unpack-trees: rename ERROR_* fields meant for warnings to WARNING_*
      unpack-trees: split display_error_msgs() into two
      unpack-trees: make sparse path messages sound like warnings
      unpack-trees: provide warnings on sparse updates for unmerged paths too
      unpack-trees: failure to set SKIP_WORKTREE bits always just a warning
      sparse-checkout: provide a new reapply subcommand
      pull: avoid running both merge and rebase
      t7063: more thorough status checking
      t3000: add more testcases testing a variety of ls-files issues
      dir: fix simple typo in comment
      dir: consolidate treat_path() and treat_one_path()
      dir: fix broken comment
      dir: fix confusion based on variable tense
      dir: replace exponential algorithm with a linear one
      dir: include DIR_KEEP_UNTRACKED_CONTENTS handling in treat_directory()
      dir: replace double pathspec matching with single in treat_directory()
      Fix error-prone fill_directory() API; make it only return matches
      completion: fix 'git add' on paths under an untracked directory
      git-rebase.txt: add another hook to the hooks section, and explain more
      sequencer: honor GIT_REFLOG_ACTION
      rebase -i: mark commits that begin empty in todo editor
      rebase: reinstate --no-keep-empty
      rebase: fix an incompatible-options error message
      rebase: display an error if --root and --fork-point are both provided
      merge-recursive: fix rename/rename(1to2) for working tree with a binary
      unpack-trees: also allow get_progress() to work on a different index

Emily Shaffer (8):
      help: move list_config_help to builtin/help
      bugreport: add tool to generate debugging info
      bugreport: gather git version and build info
      bugreport: add uname info
      bugreport: add compiler info
      bugreport: drop extraneous includes
      bugreport: collect list of populated hooks
      trace2: log progress time and throughput

Emir Sarı (2):
      l10n: tr: v2.27.0 round 1
      l10n: tr: v2.27.0 round 2

Emma Brooks (3):
      format-patch: teach --no-encode-email-headers
      Documentation: explain "mboxrd" pretty format
      gitweb: Recognize *-to and Closes/Fixes trailers

Eric Sunshine (1):
      restore: default to HEAD when combining --staged and --worktree

Garima Singh (13):
      commit-graph: define and use MAX_NUM_CHUNKS
      bloom.c: add the murmur3 hash implementation
      bloom.c: introduce core Bloom filter constructs
      bloom.c: core Bloom filter implementation for changed paths.
      commit-graph: compute Bloom filters for changed paths
      commit-graph: examine commits by generation number
      commit-graph: write Bloom filters to commit graph file
      commit-graph: reuse existing Bloom filters during write
      commit-graph: add --changed-paths option to write subcommand
      revision.c: use Bloom filters to speed up path based revision walks
      revision.c: add trace2 stats around Bloom filter usage
      t4216: add end to end tests for git log with Bloom filters
      commit-graph: add GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS test flag

Greg Price (1):
      tests: skip small-stack tests on hppa architecture

Hans Jerry Illikainen (2):
      t: increase test coverage of signature verification output
      gpg-interface: prefer check_signature() for GPG verification

Heba Waly (4):
      advice: extract vadvise() from advise()
      advice: change "setupStreamFailure" to "setUpstreamFailure"
      advice: revamp advise API
      tag: use new advice API to check visibility

Ismael Luceno (1):
      git-gui: Handle Ctrl + BS/Del in the commit msg

Jan Engelhardt (1):
      l10n: de.po: Fix typo in the German translation of octopus

Jean-Noël Avila (2):
      l10n: fr v2.27.0 rnd 1
      l10n: fr.po v2.27.0 rnd 2

Jeff King (51):
      credential: avoid writing values with newlines
      t/lib-credential: use test_i18ncmp to check stderr
      credential: detect unrepresentable values when parsing urls
      fsck: detect gitmodules URLs with embedded newlines
      t3419: drop EXPENSIVE tests
      t/lib-credential.sh: drop shebang line
      t/lib-*.sh: drop executable bit
      test-lib-functions: make packetize() more efficient
      upload-pack: handle unexpected delim packets
      p5310: stop timing non-bitmap pack-to-disk
      Makefile: avoid running curl-config multiple times
      Makefile: use curl-config --cflags
      test-lib-functions: simplify packetize() stdin code
      commit-graph: examine changed-path objects in pack order
      oid_array: use size_t for count and allocation
      oid_array: use size_t for iteration
      oid_array: rename source file from sha1-array
      test-tool: rename sha1-array to oid-array
      bisect: stop referring to sha1_array
      ref-filter: stop referring to "sha1 array"
      oidset: stop referring to sha1-array
      clone: use "quick" lookup while following tags
      Makefile: avoid running curl-config unnecessarily
      fast-import: replace custom hash with hashmap.c
      repository: mark the "refs" pointer as private
      remote: drop auto-strlen behavior of make_branch() and make_rewrite()
      parse_config_key(): return subsection len as size_t
      config: drop useless length variable in write_pair()
      git_config_parse_key(): return baselen as size_t
      config: use size_t to store parsed variable baselen
      config: reject parsing of files over INT_MAX
      credential: treat "?" and "#" in URLs as end of host
      t0300: make "quit" helper more realistic
      t0300: use more realistic inputs
      credential: parse URL without host as empty host, not unset
      credential: refuse to operate when missing host or protocol
      credential: die() when parsing invalid urls
      Git 2.17.5
      blame: drop unused parameter from maybe_changed_path
      test-bloom: fix some whitespace issues
      test-bloom: check that we have expected arguments
      commit-graph: close descriptors after mmap
      t0000: disable GIT_TEST_FAIL_PREREQS in sub-tests
      gitcredentials(7): clarify quoting of helper examples
      gitcredentials(7): make shell-snippet example more realistic
      CodingGuidelines: drop arithmetic expansion advice to use "$x"
      ref-filter: apply --ignore-case to all sorting keys
      ref-filter: apply fallback refname sort only after all user sorts
      list-objects-filter: treat NULL filter_options as "disabled"
      pack-bitmap: pass object filter to fill-in traversal
      ci: allow per-branch config for GitHub Actions

Jessica Clarke (1):
      config.mak.uname: Define FREAD_READS_DIRECTORIES for GNU/Hurd

Jiang Xin (8):
      send-pack: fix inconsistent porcelain output
      t5543: never report what we do not push
      send-pack: mark failure of atomic push properly
      transport-helper: mark failure for atomic push
      transport-helper: new method reject_atomic_push()
      l10n: git.pot: v2.27.0 round 1 (72 new, 37 removed)
      l10n: git.pot: v2.27.0 round 2 (+1)
      l10n: zh_CN: for git v2.27.0 l10n round 1~2

Johannes Schindelin (37):
      cherry-pick: add test for `--skip` advice in `git commit`
      tests(junit-xml): avoid invalid XML
      import-tars: ignore the global PAX header
      tests(gpg): allow the gpg-agent to start on Windows
      t/lib-gpg.sh: stop pretending to be a stand-alone script
      tests: do not let lazy prereqs inside `test_expect_*` turn off tracing
      tests: turn GPG, GPGSM and RFC1991 into lazy prereqs
      tests: increase the verbosity of the GPG-related prereqs
      MyFirstObjectWalk: remove unnecessary conditional statement
      t0007: fix a typo
      ci/lib: if CI type is unknown, show the environment variables
      ci/lib: allow running in GitHub Actions
      ci: fix the `jobname` of the `GETTEXT_POISON` job
      subtree: fix build with AsciiDoctor 2
      mingw: do not treat `COM0` as a reserved file name
      t3904: fix incorrect demonstration of a bug
      stash -p: (partially) fix bug concerning split hunks
      mingw: help debugging by optionally executing bash with strace
      interactive: refactor code asking the user for interactive input
      ci: run gem with sudo to install asciidoctor
      README: add a build badge for the GitHub Actions runs
      ci: retire the Azure Pipelines definition
      tests: when run in Bash, annotate test failures with file name/line number
      ci: add a problem matcher for GitHub Actions
      ci: let GitHub Actions upload failed tests' directories
      t: consolidate the `is_hidden` functions
      mingw: make test_path_is_hidden more robust
      t: restrict `is_hidden` to be called only on Windows
      credential: fix grammar
      credential: optionally allow partial URLs in credential_from_url_gently()
      credential: optionally allow partial URLs in credential_from_url_gently()
      credential: handle `credential.<partial-URL>.<key>` again
      macOS/brew: let the build find gettext headers/libraries/msgfmt
      push: anonymize URLs in error messages and warnings
      credential: handle `credential.<partial-URL>.<key>` again
      rebase --autosquash: fix a potential segfault
      ci: avoid pounding on the poor ci-artifacts container

Jonathan Nieder (5):
      fsck: convert gitmodules url to URL passed to curl
      credential: treat URL without scheme as invalid
      credential: treat URL with empty scheme as invalid
      fsck: reject URL with empty host in .gitmodules
      Revert "fetch: default to protocol version 2"

Jonathan Tan (12):
      connected: always use partial clone optimization
      promisor-remote: accept 0 as oid_nr in function
      diff: make diff_populate_filespec_options struct
      diff: refactor object read
      diff: restrict when prefetching occurs
      rebase --merge: optionally skip upstreamed commits
      fetch-pack: return enum from process_acks()
      fetch-pack: in protocol v2, in_vain only after ACK
      fetch-pack: in protocol v2, reset in_vain upon ACK
      commit-graph: avoid memory leaks
      t5500: count objects through stderr, not trace
      t4067: make rename detection test output raw diff

Jordi Mas (3):
      l10n: Update Catalan translation
      l10n: Update Catalan translation
      l10n: Update Catalan translation

Jorge Lopez Silva (2):
      http: add client cert support for HTTPS proxies
      http: add environment variable support for HTTPS proxies

Josh Steadmon (1):
      trace2: teach Git to log environment variables

Julien Moutinho (1):
      gitweb: fix UTF-8 encoding when using CGI::Fast

Junio C Hamano (34):
      rebase: --fork-point regression fix
      describe: force long format for a name based on a mislocated tag
      update how-to-maintain-git
      parse-options: teach "git cmd -h" to show alias as alias
      clone: reorder --recursive/--recurse-submodules
      log: give --[no-]use-mailmap a more sensible synonym --[no-]mailmap
      Git 2.17.4
      separate tar.* config to its own source file
      The first batch post 2.26 cycle
      The second batch post 2.26 cycle
      t/README: suggest how to leave test early with failure
      CodingGuidelines: allow ${#posix} == strlen($posix)
      sha1-name: do not assume that the ref store is initialized
      receive-pack: compilation fix
      The third batch
      The fourth batch
      credential-store: document the file format a bit more
      Revert "commit-graph.c: introduce '--[no-]check-oids'"
      The fifth batch
      The sixth batch
      The seventh batch
      auto-gc: extract a reusable helper from "git fetch"
      auto-gc: pass --quiet down from am, commit, merge and rebase
      CodingGuidelines: do not ==/!= compare with 0 or '\0' or NULL
      The eighth batch
      The ninth batch
      Git 2.27-rc0
      Revert "t/test_lib: avoid naked bash arrays in file_lineno"
      Revert "ci: add a problem matcher for GitHub Actions"
      Revert "tests: when run in Bash, annotate test failures with file name/line number"
      Git 2.27-rc1
      Hopefully final batch before 2.27-rc2
      Git 2.27-rc2
      Git 2.27

Li Xuejiang (1):
      git-submodule.sh: setup uninitialized variables

Martin Ågren (15):
      Doc: drop support for docbook-xsl before 1.71.1
      Doc: drop support for docbook-xsl before 1.72.0
      Doc: drop support for docbook-xsl before 1.73.0
      manpage-bold-literal.xsl: stop using git.docbook.backslash
      manpage-normal.xsl: fold in manpage-base.xsl
      INSTALL: drop support for docbook-xsl before 1.74
      user-manual.conf: don't specify [listingblock]
      config.txt: move closing "----" to cover entire listing
      merge: use skip_prefix to parse config key
      date-formats.txt: fix list continuation
      git-commit-graph.txt: fix grammo
      git-commit-graph.txt: fix list rendering
      git-credential.txt: use list continuation
      git-sparse-checkout.txt: add missing '
      rev-list-options.txt: start a list for `show-pulls`

Matheus Tavares (3):
      test-lib: allow short options to be bundled
      grep: follow conventions for printing paths w/ unusual chars
      config doc: fix reference to config.worktree info

Matthias Aßhauer (1):
      mingw: use modern strftime implementation if possible

Matthias Rüster (1):
      l10n: de.po: Update German translation for Git 2.27.0

Michael F. Schönitzer (1):
      docs: fix minor glitch in illustration

Nathan Sanders (1):
      mingw: cope with the Isilon network file system

Patrick Steinhardt (9):
      refs: fix segfault when aborting empty transaction
      git-update-ref.txt: add missing word
      strbuf: provide function to append whole lines
      update-ref: organize commands in an array
      update-ref: drop unused argument for `parse_refname`
      update-ref: pass end pointer instead of strbuf
      update-ref: move transaction handling into `update_refs_stdin()`
      update-ref: read commands in a line-wise fashion
      update-ref: implement interactive transaction handling

Peter Krefting (2):
      l10n: sv.po: Update Swedish translation (4839t0f0u)
      l10n: sv.po: Update Swedish translation (4875t0f0u)

Philippe Blain (10):
      t7112: remove mention of KNOWN_FAILURE_SUBMODULE_RECURSIVE_NESTED
      t/lib-submodule-update: remove outdated test description
      t/lib-submodule-update: move a test to the right section
      unpack-trees: remove outdated description for verify_clean_submodule
      unpack-trees: check for missing submodule directory in merged_entry
      t/lib-submodule-update: add test removing nested submodules
      git-rebase.txt: fix typo
      pull doc: refer to a specific section in 'fetch' doc
      pull doc: correct outdated description of an example
      command-list.txt: add gitfaq to the list of guides

Phillip Wood (6):
      t3404: use test_cmp_rev
      cherry-pick: check commit error messages
      sequencer: write CHERRY_PICK_HEAD for reword and edit
      commit: use enum value for multiple cherry-picks
      commit: encapsulate determine_whence() for sequencer
      commit: give correct advice for empty commit during a rebase

René Scharfe (4):
      pull: document more passthru options
      pull: remove --update-head-ok from documentation
      pull: pass documented fetch options on
      fsck: report non-consecutive duplicate names in trees

SZEDER Gábor (4):
      ci: use python3 in linux-gcc and osx-gcc and python2 elsewhere
      commit-slab: clarify slabname##_peek()'s return value
      ci: make MAKEFLAGS available inside the Docker container in the Linux32 job
      completion: offer '--(no-)patch' among 'git log' options

Shourya Shukla (4):
      submodule--helper.c: Rename 'cb_foreach' to 'foreach_cb'
      gitfaq: files in .gitignore are tracked
      gitfaq: fetching and pulling a repository
      submodule: port subcommand 'set-url' from shell to C

Son Luong Ngoc (1):
      midx: teach "git multi-pack-index repack" honor "git repack" configurations

Taylor Blau (24):
      t/helper/test-read-graph.c: support commit-graph chains
      builtin/commit-graph.c: support for '--split[=<strategy>]'
      builtin/commit-graph.c: introduce split strategy 'no-merge'
      builtin/commit-graph.c: introduce split strategy 'replace'
      oidset: introduce 'oidset_size'
      commit-graph.h: replace 'commit_hex' with 'commits'
      commit-graph.c: introduce '--[no-]check-oids'
      diff-tree.c: load notes machinery when required
      commit-graph.c: don't use discarded graph_name in error
      t/test-lib.sh: make ULIMIT_FILE_DESCRIPTORS available to tests
      commit-graph.c: gracefully handle file descriptor exhaustion
      t5537: use test_write_lines and indented heredocs for readability
      shallow.c: use '{commit,rollback}_shallow_file'
      tempfile.c: introduce 'create_tempfile_mode'
      lockfile.c: introduce 'hold_lock_file_for_update_mode'
      commit-graph.c: write non-split graphs as read-only
      commit-graph.c: ensure graph layers respect core.sharedRepository
      commit-graph.c: make 'commit-graph-chain's read-only
      commit: make 'commit_graft_pos' non-static
      shallow: extract a header file for shallow-related functions
      shallow.h: document '{commit,rollback}_shallow_file'
      shallow: use struct 'shallow_lock' for additional safety
      pack-bitmap.c: make object filtering functions generic
      pack-bitmap.c: support 'tree:0' filtering

Terry Moschou (1):
      complete: zsh: add missing sub cmd completion candidates

Thomas Gummerer (2):
      stash: get git_stash_config at the top level
      stash: remove the stash.useBuiltin setting

Todd Zullinger (2):
      git-bugreport.txt: adjust reference to strftime(3)
      gitfaq: avoid validation error with older asciidoc

Toon Claes (1):
      Documentation: correct hash environment variable

Trần Ngọc Quân (2):
      l10n: vi(4874t): Updated Vietnamses translation for 2.27.0
      l10n: vi(4875t): Updated Vietnamses translation for 2.27.0rd2

Vasil Dimov (2):
      range-diff: fix a crash in parsing git-log output
      range-diff: avoid negative string precision

Yang Zhao (12):
      git-p4: make python2.7 the oldest supported version
      git-p4: remove string type aliasing
      git-p4: encode/decode communication with p4 for python3
      git-p4: encode/decode communication with git for python3
      git-p4: convert path to unicode before processing them
      git-p4: open .gitp4-usercache.txt in text mode
      git-p4: use marshal format version 2 when sending to p4
      git-p4: fix freezing while waiting for fast-import progress
      git-p4: use functools.reduce instead of reduce
      git-p4: use dict.items() iteration for python3 compatibility
      git-p4: simplify regex pattern generation for parsing diff-tree
      git-p4: use python3's input() everywhere

Yi-Jyun Pan (2):
      l10n: zh_TW.po: v2.27.0 round 1 (0 untranslated)
      l10n: zh_TW.po: v2.27.0 round 2 (0 untranslated)

brian m. carlson (34):
      builtin/pack-objects: make hash agnostic
      hash: implement and use a context cloning function
      hex: introduce parsing variants taking hash algorithms
      hex: add functions to parse hex object IDs in any algorithm
      repository: require a build flag to use SHA-256
      t: use hash-specific lookup tables to define test constants
      t6300: abstract away SHA-1-specific constants
      t6300: make hash algorithm independent
      t/helper/test-dump-split-index: initialize git repository
      t/helper: initialize repository if necessary
      t/helper: make repository tests hash independent
      setup: allow check_repository_format to read repository format
      builtin/init-db: allow specifying hash algorithm on command line
      builtin/init-db: add environment variable for new repo hash
      init-db: move writing repo version into a function
      worktree: allow repository version 1
      commit: use expected signature header for SHA-256
      fast-import: permit reading multiple marks files
      fast-import: add helper function for inserting mark object entries
      fast-import: make find_marks work on any mark set
      fast-import: add a generic function to iterate over marks
      fast-import: add options for rewriting submodules
      builtin/checkout: pass branch info down to checkout_worktree
      convert: permit passing additional metadata to filter processes
      convert: provide additional metadata to filters
      builtin/checkout: compute checkout metadata for checkouts
      builtin/clone: compute checkout metadata for clones
      builtin/rebase: compute checkout metadata for rebases
      builtin/reset: compute checkout metadata for reset
      t0021: test filter metadata for additional cases
      docs: add a FAQ
      builtin/receive-pack: use constant-time comparison for HMAC value
      credential: fix matching URLs with multiple levels in path
      docs: document credential.helper allowed values

luciano.rocha@booking.com (1):
      freshen_file(): use NULL `times' for implicit current-time

Đoàn Trần Công Danh (37):
      t4061: use POSIX compliant regex(7)
      test-lib-functions: test_cmp: eval $GIT_TEST_CMP
      t5003: drop the subshell in test_lazy_prereq
      t5003: skip conversion test if unzip -a is unavailable
      t5616: use rev-parse instead to get HEAD's object_id
      t7063: drop non-POSIX argument "-ls" from find(1)
      t4124: tweak test so that non-compliant diff(1) can also be used
      t5703: feed raw data into test-tool unpack-sideband
      rebase.c: honour --no-gpg-sign
      cherry-pick/revert: honour --no-gpg-sign in all case
      Documentation: document am --no-gpg-sign
      Documentation: reword commit --no-gpg-sign
      Documentation: merge commit-tree --[no-]gpg-sign
      Documentation: document merge option --no-gpg-sign
      ci/lib-docker: preserve required environment variables
      ci/linux32: parameterise command to switch arch
      ci: refactor docker runner script
      ci/linux32: libify install-dependencies step
      travis: build and test on Linux with musl libc and busybox
      ci/lib: set TERM environment variable if not exist
      ci: explicit install all required packages
      ci: configure GitHub Actions for CI/PR
      t4254: merge 2 steps of a single test
      mailinfo.c: avoid strlen on strings that can contains NUL
      mailinfo: disallow NUL character in mail's header
      date.c: s/is_date/set_date/
      date.c: validate and set time in a helper function
      date.c: skip fractional second part of ISO-8601
      date.c: allow compact version of ISO-8601 datetime
      test-parse-pathspec-file.c: s/0/NULL/ for pointer type
      compat/regex: move stdlib.h up in inclusion chain
      graph.c: limit linkage of internal variable
      progress.c: silence cgcc suggestion about internal linkage
      bloom: fix `make sparse` warning
      t1509: correct i18n test
      ci/config: correct instruction for CI preferences
      t5703: replace "grep -a" usage by perl

마누엘 (1):
      interactive: explicitly `fflush` stdout before expecting input



^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.27.0-rc2
@ 2020-05-26 18:47  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2020-05-26 18:47 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.27.0-rc2 is now available for testing
at the usual places.  It is comprised of 509 non-merge commits
since v2.26.0, contributed by 59 people, 17 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.27.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.26.0 are as follows.
Welcome to the Git development community!

  Andras Kucsma, Ansgar Röber, Ash Holland, Christopher
  Warrington, Emma Brooks, Jessica Clarke, Jorge Lopez Silva,
  Julien Moutinho, Li Xuejiang, luciano.rocha@booking.com,
  Matthias Aßhauer, Michael F. Schönitzer, Nathan Sanders,
  Son Luong Ngoc, Terry Moschou, Vasil Dimov, and Yang Zhao.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  마누엘, Abhishek Kumar, Alban Gruin, Alexandr Miloslavskiy,
  Alex Henrie, Andrei Rybak, Andrew Oakley, Ben Keene, brian
  m. carlson, Carlo Marcelo Arenas Belón, Christian Couder,
  Damien Robert, Denton Liu, Derrick Stolee, Đoàn Trần Công
  Danh, Elijah Newren, Emily Shaffer, Eric Sunshine, Garima Singh,
  Greg Price, Hans Jerry Illikainen, Heba Waly, Ismael Luceno,
  Jeff King, Jiang Xin, Johannes Schindelin, Jonathan Nieder,
  Jonathan Tan, Josh Steadmon, Junio C Hamano, Martin Ågren,
  Matheus Tavares, Patrick Steinhardt, Philippe Blain, Phillip
  Wood, Pratyush Yadav, René Scharfe, Shourya Shukla, SZEDER
  Gábor, Taylor Blau, Thomas Gummerer, and Todd Zullinger.

----------------------------------------------------------------

Git 2.27 Release Notes (draft)
==============================

Updates since v2.26
-------------------

Backward compatibility notes

 * When "git describe C" finds that commit C is pointed by a signed or
   annotated tag, which records T as its tagname in the object, the
   command gives T as its answer.  Even if the user renames or moves
   such a tag from its natural location in the "refs/tags/" hierarchy,
   "git describe C" would still give T as the answer, but in such a
   case "git show T^0" would no longer work as expected.  There may be
   nothing at "refs/tags/T" or even worse there may be a different tag
   instead.

   Starting from this version, "git describe" will always use the
   "long" version, as if the "--long" option were given, when giving
   its output based on such a misplaced tag to work around the problem.

 * "git pull" issues a warning message until the pull.rebase
   configuration variable is explicitly given, which some existing
   users may find annoying---those who prefer not to rebase need to
   set the variable to false to squelch the warning.

 * The transport protocol version 2, which was promoted to the default
   in Git 2.26 release, turned out to have some remaining rough edges,
   so it has been demoted from the default.


UI, Workflows & Features

 * A handful of options to configure SSL when talking to proxies have
   been added.

 * Smudge/clean conversion filters are now given more information
   (e.g. the object of the tree-ish in which the blob being converted
   appears, in addition to its path, which has already been given).

 * When "git describe C" finds an annotated tag with tagname A to be
   the best name to explain commit C, and the tag is stored in a
   "wrong" place in the refs/tags hierarchy, e.g. refs/tags/B, the
   command gave a warning message but used A (not B) to describe C.
   If C is exactly at the tag, the describe output would be "A", but
   "git rev-parse A^0" would not be equal as "git rev-parse C^0".  The
   behavior of the command has been changed to use the "long" form
   i.e. A-0-gOBJECTNAME, which is correctly interpreted by rev-parse.

 * "git pull" learned to warn when no pull.rebase configuration
   exists, and neither --[no-]rebase nor --ff-only is given (which
   would result a merge).

 * "git p4" learned four new hooks and also "--no-verify" option to
   bypass them (and the existing "p4-pre-submit" hook).

 * "git pull" shares many options with underlying "git fetch", but
   some of them were not documented and some of those that would make
   sense to pass down were not passed down.

 * "git rebase" learned the "--no-gpg-sign" option to countermand
   commit.gpgSign the user may have.

 * The output from "git format-patch" uses RFC 2047 encoding for
   non-ASCII letters on From: and Subject: headers, so that it can
   directly be fed to e-mail programs.  A new option has been added
   to produce these headers in raw.

 * "git log" learned "--show-pulls" that helps pathspec limited
   history views; a merge commit that takes the whole change from a
   side branch, which is normally omitted from the output, is shown
   in addition to the commits that introduce real changes.

 * The interactive input from various codepaths are consolidated and
   any prompt possibly issued earlier are fflush()ed before we read.

 * Allow "git rebase" to reapply all local commits, even if the may be
   already in the upstream, without checking first.

 * The 'pack.useSparse' configuration variable now defaults to 'true',
   enabling an optimization that has been experimental since Git 2.21.

 * "git rebase" happens to call some hooks meant for "checkout" and
   "commit" by this was not a designed behaviour than historical
   accident.  This has been documented.

 * "git merge" learns the "--autostash" option.

 * "sparse-checkout" UI improvements.

 * "git update-ref --stdin" learned a handful of new verbs to let the
   user control ref update transactions more explicitly, which helps
   as an ingredient to implement two-phase commit-style atomic
   ref-updates across multiple repositories.

 * "git commit-graph write" learned different ways to write out split
   files.

 * Introduce an extension to the commit-graph to make it efficient to
   check for the paths that were modified at each commit using Bloom
   filters.

 * The approxidate parser learns to parse seconds with fraction and
   ignore fractional part.

 * The userdiff patterns for Markdown documents have been added.

 * The sparse-checkout patterns have been forbidden from excluding all
   paths, leaving an empty working tree, for a long time.  This
   limitation has been lifted.

 * "git restore --staged --worktree" now defaults to take the contents
   out of "HEAD", instead of erring out.

 * "git p4" learned to recover from a (broken) state where a directory
   and a file are recorded at the same path in the Perforce repository
   the same way as their clients do.

 * "git multi-pack-index repack" has been taught to honor some
   repack.* configuration variables.


Performance, Internal Implementation, Development Support etc.

 * The advise API has been revamped to allow more systematic enumeration of
   advice knobs in the future.

 * SHA-256 transition continues.

 * The code to interface with GnuPG has been refactored.

 * "git stash" has kept an escape hatch to use the scripted version
   for a few releases, which got stale.  It has been removed.

 * Enable tests that require GnuPG on Windows.

 * Minor test usability improvement.

 * Trace2 enhancement to allow logging of the environment variables.

 * Test clean-up continues.

 * Perf-test update.

 * A Windows-specific test element has been made more robust against
   misuse from both user's environment and programmer's errors.

 * Various tests have been updated to work around issues found with
   shell utilities that come with busybox etc.

 * The config API made mixed uses of int and size_t types to represent
   length of various pieces of text it parsed, which has been updated
   to use the correct type (i.e. size_t) throughout.

 * The "--decorate-refs" and "--decorate-refs-exclude" options "git
   log" takes have learned a companion configuration variable
   log.excludeDecoration that sits at the lowest priority in the
   family.

 * A new CI job to build and run test suite on linux with musl libc
   has been added.

 * Update the CI configuration to use GitHub Actions, retiring the one
   based on Azure Pipelines.

 * The directory traversal code had redundant recursive calls which
   made its performance characteristics exponential with respect to
   the depth of the tree, which was corrected.

 * "git blame" learns to take advantage of the "changed-paths" Bloom
   filter stored in the commit-graph file.

 * The "bugreport" tool has been added.

 * The object walk with object filter "--filter=tree:0" can now take
   advantage of the pack bitmap when available.

 * Instead of always building all branches at GitHub via Actions,
   users can specify which branches to build.

 * Codepaths that show progress meter have been taught to also use the
   start_progress() and the stop_progress() calls as a "region" to be
   traced.

 * Instead of downloading Windows SDK for CI jobs for windows builds
   from an external site (wingit.blob.core.windows.net), use the one
   created in the windows-build job, to work around quota issues at
   the external site.


Fixes since v2.26
-----------------

 * The real_path() convenience function can easily be misused; with a
   bit of code refactoring in the callers' side, its use has been
   eliminated.
   (merge 49d3c4b481 am/real-path-fix later to maint).

 * Update "git p4" to work with Python 3.
   (merge 6bb40ed20a yz/p4-py3 later to maint).

 * The mechanism to prevent "git commit" from making an empty commit
   or amending during an interrupted cherry-pick was broken during the
   rewrite of "git rebase" in C, which has been corrected.
   (merge 430b75f720 pw/advise-rebase-skip later to maint).

 * Fix "git checkout --recurse-submodules" of a nested submodule
   hierarchy.
   (merge 846f34d351 pb/recurse-submodules-fix later to maint).

 * The "--fork-point" mode of "git rebase" regressed when the command
   was rewritten in C back in 2.20 era, which has been corrected.
   (merge f08132f889 at/rebase-fork-point-regression-fix later to maint).

 * The import-tars importer (in contrib/fast-import/) used to create
   phony files at the top-level of the repository when the archive
   contains global PAX headers, which made its own logic to detect and
   omit the common leading directory ineffective, which has been
   corrected.
   (merge c839fcff65 js/import-tars-do-not-make-phony-files-from-pax-headers later to maint).

 * Simplify the commit ancestry connectedness check in a partial clone
   repository in which "promised" objects are assumed to be obtainable
   lazily on-demand from promisor remote repositories.
   (merge 2b98478c6f jt/connectivity-check-optim-in-partial-clone later to maint).

 * The server-end of the v2 protocol to serve "git clone" and "git
   fetch" was not prepared to see a delim packets at unexpected
   places, which led to a crash.
   (merge cacae4329f jk/harden-protocol-v2-delim-handling later to maint).

 * When fed a midx that records no objects, some codepaths tried to
   loop from 0 through (num_objects-1), which, due to integer
   arithmetic wrapping around, made it nonsense operation with out of
   bounds array accesses.  The code has been corrected to reject such
   an midx file.
   (merge 796d61cdc0 dr/midx-avoid-int-underflow later to maint).

 * Utitiles run via the run_command() API were not spawned correctly
   on Cygwin, when the paths to them are given as a full path with
   backslashes.
   (merge 05ac8582bc ak/run-command-on-cygwin-fix later to maint).

 * "git pull --rebase" tried to run a rebase even after noticing that
   the pull results in a fast-forward and no rebase is needed nor
   sensible, for the past few years due to a mistake nobody noticed.
   (merge fbae70ddc6 en/pull-do-not-rebase-after-fast-forwarding later to maint).

 * "git rebase" with the merge backend did not work well when the
   rebase.abbreviateCommands configuration was set.
   (merge de9f1d3ef4 ag/rebase-merge-allow-ff-under-abbrev-command later to maint).

 * The logic to auto-follow tags by "git clone --single-branch" was
   not careful to avoid lazy-fetching unnecessary tags, which has been
   corrected.
   (merge 167a575e2d jk/use-quick-lookup-in-clone-for-tag-following later to maint).

 * "git rebase -i" did not leave the reflog entries correctly.
   (merge 1f6965f994 en/sequencer-reflog-action later to maint).

 * The more aggressive updates to remote-tracking branches we had for
   the past 7 years or so were not reflected in the documentation,
   which has been corrected.
   (merge a44088435c pb/pull-fetch-doc later to maint).

 * We've left the command line parsing of "git log :/a/b/" broken for
   about a full year without anybody noticing, which has been
   corrected.
   (merge 0220461071 jc/missing-ref-store-fix later to maint).

 * Misc fixes for Windows.
   (merge 3efc128cd5 js/mingw-fixes later to maint).

 * "git rebase" (again) learns to honor "--no-keep-empty", which lets
   the user to discard commits that are empty from the beginning (as
   opposed to the ones that become empty because of rebasing).  The
   interactive rebase also marks commits that are empty in the todo.
   (merge 50ed76148a en/rebase-no-keep-empty later to maint).

 * Parsing the host part out of URL for the credential helper has been corrected.
   (merge 4c5971e18a jk/credential-parsing-end-of-host-in-URL later to maint).

 * Document the recommended way to abort a failing test early (e.g. by
   exiting a loop), which is to say "return 1".
   (merge 7cc112dc95 jc/doc-test-leaving-early later to maint).

 * The code that refreshes the last access and modified time of
   on-disk packfiles and loose object files have been updated.
   (merge 312cd76130 lr/freshen-file-fix later to maint).

 * Validation of push certificate has been made more robust against
   timing attacks.
   (merge 719483e547 bc/constant-memequal later to maint).

 * The custom hash function used by "git fast-import" has been
   replaced with the one from hashmap.c, which gave us a nice
   performance boost.
   (merge d8410a816b jk/fast-import-use-hashmap later to maint).

 * The "git submodule" command did not initialize a few variables it
   internally uses and was affected by variable settings leaked from
   the environment.
   (merge 65d100c4dd lx/submodule-clear-variables later to maint).

 * Raise the minimum required version of docbook-xsl package to 1.74,
   as 1.74.0 was from late 2008, which is more than 10 years old, and
   drop compatibility cruft from our documentation suite.
   (merge 3c255ad660 ma/doc-discard-docbook-xsl-1.73 later to maint).

 * "git log" learns "--[no-]mailmap" as a synonym to "--[no-]use-mailmap"
   (merge 88acccda38 jc/log-no-mailmap later to maint).

 * "git commit-graph write --expire-time=<timestamp>" did not use the
   given timestamp correctly, which has been corrected.
   (merge b09b785c78 ds/commit-graph-expiry-fix later to maint).

 * Tests update to use "test-chmtime" instead of "touch -t".
   (merge e892a56845 ds/t5319-touch-fix later to maint).

 * "git diff" in a partial clone learned to avoid lazy loading blob
   objects in more casese when they are not needed.
   (merge 95acf11a3d jt/avoid-prefetch-when-able-in-diff later to maint).

 * "git push --atomic" used to show failures for refs that weren't
   even pushed, which has been corrected.
   (merge dfe1b7f19c jx/atomic-push later to maint).

 * Code in builtin/*, i.e. those can only be called from within
   built-in subcommands, that implements bulk of a couple of
   subcommands have been moved to libgit.a so that they could be used
   by others.
   (merge 9460fd48b5 dl/libify-a-few later to maint).

 * Allowing the user to split a patch hunk while "git stash -p" does
   not work well; a band-aid has been added to make this (partially)
   work better.

 * "git diff-tree --pretty --notes" used to hit an assertion failure,
   as it forgot to initialize the notes subsystem.
   (merge 5778b22b3d tb/diff-tree-with-notes later to maint).

 * "git range-diff" fixes.
   (merge 8d1675eb7f vd/range-diff-with-custom-pretty-format-fix later to maint).

 * "git grep" did not quote a path with unusual character like other
   commands (like "git diff", "git status") do, but did quote when run
   from a subdirectory, both of which has been corrected.
   (merge 45115d8490 mt/grep-cquote-path later to maint).

 * GNU/Hurd is also among the ones that need the fopen() wrapper.
   (merge 274a1328fb jc/gnu-hurd-lets-fread-read-dirs later to maint).

 * Those fetching over protocol v2 from linux-next and other kernel
   repositories are reporting that v2 often fetches way too much than
   needed.
   (merge 11c7f2a30b jn/demote-proto2-from-default later to maint).

 * The upload-pack protocol v2 gave up too early before finding a
   common ancestor, resulting in a wasteful fetch from a fork of a
   project.  This has been corrected to match the behaviour of v0
   protocol.
   (merge 2f0a093dd6 jt/v2-fetch-nego-fix later to maint).

 * The build procedure did not use the libcurl library and its include
   files correctly for a custom-built installation.
   (merge 0573831950 jk/build-with-right-curl later to maint).

 * Tighten "git mailinfo" to notice and error out when decoded result
   contains NUL in it.
   (merge 3919997447 dd/mailinfo-with-nul later to maint).

 * Fix in-core inconsistency after fetching into a shallow repository
   that broke the code to write out commit-graph.
   (merge 37b9dcabfc tb/reset-shallow later to maint).

 * The commit-graph code exhausted file descriptors easily when it
   does not have to.
   (merge c8828530b7 tb/commit-graph-fd-exhaustion-fix later to maint).

 * The multi-pack-index left mmapped file descriptors open when it
   does not have to.
   (merge 6c7ff7cf7f ds/multi-pack-index later to maint).

 * Recent update to Homebrew used by macOS folks breaks build by
   moving gettext library and necessary headers.
   (merge a0b3108618 ds/build-homebrew-gettext-fix later to maint).

 * Incompatible options "--root" and "--fork-point" of "git rebase"
   have been marked and documented as being incompatible.
   (merge a35413c378 en/rebase-root-and-fork-point-are-incompatible later to maint).

 * Error and verbose trace messages from "git push" did not redact
   credential material embedded in URLs.
   (merge d192fa5006 js/anonymise-push-url-in-errors later to maint).

 * Update the parser used for credential.<URL>.<variable>
   configuration, to handle <URL>s with '/' in them correctly.
   (merge b44d0118ac bc/wildcard-credential later to maint).

 * Recent updates broke parsing of "credential.<url>.<key>" where
   <url> is not a full URL (e.g. [credential "https://"] helper = ...)
   stopped working, which has been corrected.
   (merge 9a121b0d22 js/partial-urlmatch-2.17 later to maint).
   (merge cd93e6c029 js/partial-urlmatch later to maint).

 * Some of the files commit-graph subsystem keeps on disk did not
   correctly honor the core.sharedRepository settings and some were
   left read-write.

 * In error messages that "git switch" mentions its option to create a
   new branch, "-b/-B" options were shown, where "-c/-C" options
   should be, which has been corrected.
   (merge 7c16ef7577 dl/switch-c-option-in-error-message later to maint).

 * With the recent tightening of the code that is used to parse
   various parts of a URL for use in the credential subsystem, a
   hand-edited credential-store file causes the credential helper to
   die, which is a bit too harsh to the users.  Demote the error
   behaviour to just ignore and keep using well-formed lines instead.
   (merge c03859a665 cb/credential-store-ignore-bogus-lines later to maint).

 * The samples in the credential documentation has been updated to
   make it clear that we depict what would appear in the .git/config
   file, by adding appropriate quotes as needed..
   (merge 177681a07e jk/credential-sample-update later to maint).

 * "git branch" and other "for-each-ref" variants accepted multiple
   --sort=<key> options in the increasing order of precedence, but it
   had a few breakages around "--ignore-case" handling, and tie-breaking
   with the refname, which have been fixed.
   (merge 7c5045fc18 jk/for-each-ref-multi-key-sort-fix later to maint).

 * The coding guideline for shell scripts instructed to refer to a
   variable with dollar-sign inside arithmetic expansion to work
   around a bug in old versions of dash, which is a thing of the past.
   Now we are not forbidden from writing $((var+1)).
   (merge 32b5fe7f0e jk/arith-expansion-coding-guidelines later to maint).

 * The <stdlib.h> header on NetBSD brings in its own definition of
   hmac() function (eek), which conflicts with our own and unrelated
   function with the same name.  Our function has been renamed to work
   around the issue.
   (merge 3013118eb8 cb/avoid-colliding-with-netbsd-hmac later to maint).

 * The basic test did not honor $TEST_SHELL_PATH setting, which has
   been corrected.
   (merge 0555e4af58 cb/t0000-use-the-configured-shell later to maint).

 * Minor in-code comments and documentation updates around credential
   API.
   (merge 1aed817f99 cb/credential-doc-fixes later to maint).

 * Teach "am", "commit", "merge" and "rebase", when they are run with
   the "--quiet" option, to pass "--quiet" down to "gc --auto".
   (merge 7c3e9e8cfb jc/auto-gc-quiet later to maint).

 * The code to skip unmerged paths in the index when sparse checkout
   is in use would have made out-of-bound access of the in-core index
   when the last path was unmerged, which has been corrected.

 * Serving a "git fetch" client over "git://" and "ssh://" protocols
   using the on-wire protocol version 2 was buggy on the server end
   when the client needs to make a follow-up request to
   e.g. auto-follow tags.
   (merge 08450ef791 cc/upload-pack-v2-fetch-fix later to maint).

 * "git bisect replay" had trouble with input files when they used
   CRLF line ending, which has been corrected.
   (merge 6c722cbe5a cw/bisect-replay-with-dos later to maint).

 * "rebase -i" segfaulted when rearranging a sequence that has a
   fix-up that applies another fix-up (which may or may not be a
   fix-up of yet another step).
   (merge 02471e7e20 js/rebase-autosquash-double-fixup-fix later to maint).

 * "git fsck" ensures that the paths recorded in tree objects are
   sorted and without duplicates, but it failed to notice a case where
   a blob is followed by entries that sort before a tree with the same
   name.  This has been corrected.
   (merge 9068cfb20f rs/fsck-duplicate-names-in-trees later to maint).

 * Code clean-up by removing a compatibility implementation of a
   function we no longer use.
   (merge 84b0115f0d cb/no-more-gmtime later to maint).

 * When a binary file gets modified and renamed on both sides of history
   to different locations, both files would be written to the working
   tree but both would have the contents from "ours".  This has been
   corrected so that the path from each side gets their original content.

 * Fix for a copy-and-paste error introduced during 2.20 era.
   (merge e68a5272b1 ds/multi-pack-verify later to maint).

 * Update an unconditional use of "grep -a" with a perl script in a test.
   (merge 1eb7371236 dd/t5703-grep-a-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 564956f358 jc/maintain-doc later to maint).
   (merge 7422b2a0a1 sg/commit-slab-clarify-peek later to maint).
   (merge 9c688735f6 rs/doc-passthru-fetch-options later to maint).
   (merge 757c2ba3e2 en/oidset-uninclude-hashmap later to maint).
   (merge 8312aa7d74 jc/config-tar later to maint).
   (merge d00a5bdd50 ss/submodule-foreach-cb later to maint).
   (merge 64d1022e14 ar/test-style-fixes later to maint).
   (merge 4a465443a6 ds/doc-clone-filter later to maint).
   (merge bb2dbe301b jk/t3419-drop-expensive-tests later to maint).
   (merge d3507cc712 js/test-junit-finalization-fix later to maint).
   (merge 2149b6748f bc/faq later to maint).
   (merge 12dc0879f1 jk/test-cleanup later to maint).
   (merge 344420bf0f pb/rebase-doc-typofix later to maint).
   (merge 7cd54d37dc dl/wrapper-fix-indentation later to maint).
   (merge 78725ebda9 jc/allow-strlen-substitution-in-shell-scripts later to maint).
   (merge 2ecfcdecc6 jm/gitweb-fastcgi-utf8 later to maint).
   (merge 0740d0a5d3 jk/oid-array-cleanups later to maint).
   (merge a1aba0c95c js/t0007-typofix later to maint).
   (merge 76ba7fa225 ma/config-doc-fix later to maint).
   (merge 826f0c0df2 js/subtree-doc-update-to-asciidoctor-2 later to maint).
   (merge 88eaf361e0 eb/mboxrd-doc later to maint).
   (merge 051cc54941 tm/zsh-complete-switch-restore later to maint).
   (merge 39102cf4fe ms/doc-revision-illustration-fix later to maint).
   (merge 4d9378bfad eb/gitweb-more-trailers later to maint).
   (merge bdccbf7047 mt/doc-worktree-ref later to maint).
   (merge ce9baf234f dl/push-recurse-submodules-fix later to maint).
   (merge 4153274052 bc/doc-credential-helper-value later to maint).
   (merge 5c7bb0146e jc/codingstyle-compare-with-null later to maint).

----------------------------------------------------------------

Changes since v2.26.0 are as follows:

Abhishek Kumar (1):
      commit-slab-decl.h: update include guard

Alban Gruin (3):
      sequencer: mark messages for translation
      sequencer: don't abbreviate a command if it doesn't have a short form
      t3432: test `--merge' with `rebase.abbreviateCommands = true', too

Alex Henrie (1):
      pull: warn if the user didn't say whether to rebase or to merge

Alexandr Miloslavskiy (4):
      set_git_dir: fix crash when used with real_path()
      real_path: remove unsafe API
      real_path_if_valid(): remove unsafe API
      get_superproject_working_tree(): return strbuf

Andras Kucsma (1):
      run-command: trigger PATH lookup properly on Cygwin

Andrei Rybak (2):
      t9500: remove spaces after redirect operators
      t: fix whitespace around &&

Andrew Oakley (1):
      git-p4: recover from inconsistent perforce history

Ansgar Röber (1):
      Subject: git-gui: fix syntax error because of missing semicolon

Ash Holland (1):
      userdiff: support Markdown

Ben Keene (8):
      git-p4: change the expansion test from basestring to list
      git-p4: rewrite prompt to be Windows compatible
      git-p4: create new function run_git_hook
      git-p4: add p4-pre-submit exit text
      git-p4: add --no-verify option
      git-p4: restructure code in submit
      git-p4: add p4 submit hooks
      git-p4: add RCS keyword status message

Carlo Marcelo Arenas Belón (12):
      credential-store: ignore bogus lines from store file
      credential: update description for credential_from_url_gently
      credential: correct order of parameters for credential_match
      builtin/receive-pack: avoid generic function name hmac()
      t/t0000-basic: make sure subtests also use TEST_SHELL_PATH
      t/test_lib: avoid naked bash arrays in file_lineno
      credential: update gitcredentials documentation
      credential: document protocol updates
      compat: remove gmtime
      t4216: avoid unnecessary subshell in test_bloom_filters_not_used
      t5520: avoid alternation in grep's BRE (not POSIX)
      bisect: avoid tailing CR characters from revision in replay

Christian Couder (1):
      upload-pack: clear filter_options for each v2 fetch command

Christopher Warrington (1):
      bisect: allow CRLF line endings in "git bisect replay" input

Damien Robert (6):
      midx.c: fix an integer underflow
      doc: list all commands affected by submodule.recurse
      doc: document --recurse-submodules for reset and restore
      doc: explain how to deactivate submodule.recurse completely
      doc: be more precise on (fetch|push).recurseSubmodules
      doc: --recurse-submodules mostly applies to active submodules

Denton Liu (45):
      Makefile: ASCII-sort += lists
      t7600: use test_write_lines()
      Lib-ify fmt-merge-msg
      Lib-ify prune-packed
      t5512: don't use `test_must_fail test_cmp`
      t5512: stop losing git exit code in here-docs
      t5512: stop losing return codes of git commands
      t5550: simplify no matching line check
      t5607: reorder `nongit test_must_fail`
      t5612: don't use `test_must_fail test_cmp`
      t5612: stop losing return codes of git commands
      t5801: teach compare_refs() to accept !
      wrapper: indent with tabs
      sequencer: stop leaking buf
      sequencer: make file exists check more efficient
      sequencer: make read_oneliner() accept flags
      sequencer: configurably warn on non-existent files
      sequencer: make read_oneliner() extern
      rebase: use read_oneliner()
      sequencer: make apply_autostash() accept a path
      sequencer: rename stash_sha1 to stash_oid
      rebase: use apply_autostash() from sequencer.c
      rebase: generify reset_head()
      reset: extract reset_head() from rebase
      rebase: extract create_autostash()
      rebase: generify create_autostash()
      sequencer: extract perform_autostash() from rebase
      sequencer: unlink autostash in apply_autostash()
      sequencer: implement save_autostash()
      sequencer: implement apply_autostash_oid()
      merge: teach --autostash option
      t5520: make test_pull_autostash() accept expect_parent_num
      pull: pass --autostash to merge
      t6030: use test_path_is_missing()
      t7408: replace incorrect uses of test_must_fail
      t7508: don't use `test_must_fail test_cmp`
      t9141: use test_path_is_missing()
      t9160: use test_path_is_missing()
      t9164: use test_must_fail only on git commands
      t9819: don't use test_must_fail with p4
      Use OPT_CALLBACK and OPT_CALLBACK_F
      push: unset PARSE_OPT_OPTARG for --recurse-submodules
      rebase: save autostash entry into stash reflog on --quit
      switch: fix errors and comments related to -c and -C
      Doc: reference the "stash list" in autostash docs

Derrick Stolee (27):
      connected.c: reprepare packs for corner cases
      config: set pack.useSparse=true by default
      pack-objects: flip the use of GIT_TEST_PACK_SPARSE
      clone: document --filter options
      diff: halt tree-diff early after max_changes
      dir: refactor treat_directory to clarify control flow
      commit-graph: fix buggy --expire-time option
      t5319: replace 'touch -m' with 'test-tool chmtime'
      bloom: ignore renames when computing changed paths
      revision: --show-pulls adds helpful merges
      log-tree: make ref_filter_match() a helper method
      log: add log.excludeDecoration config option
      revision: complicated pathspecs disable filters
      tests: write commit-graph with Bloom filters
      blame: use changed-path Bloom filters
      multi-pack-index: close file descriptor after mmap
      bloom: fix whitespace around tab length
      test-bloom: fix usage typo
      sparse-checkout: stop blocking empty workdirs
      unpack-trees: avoid array out-of-bounds error
      multi-pack-index: respect repack.packKeptObjects=false
      bloom: parse commit before computing filters
      Documentation: changed-path Bloom filters use byte words
      bloom: de-duplicate directory entries
      bloom: use num_changes not nr for limit detection
      progress: call trace2_region_leave() only after calling _enter()
      fsck: use ERROR_MULTI_PACK_INDEX

Elijah Newren (39):
      oidset: remove unnecessary include
      unpack-trees: fix minor typo in comment
      unpack-trees: remove unused error type
      unpack-trees: simplify verify_absent_sparse()
      unpack-trees: simplify pattern_list freeing
      t1091: make some tests a little more defensive against failures
      unpack-trees: allow check_updates() to work on a different index
      unpack-trees: do not mark a dirty path with SKIP_WORKTREE
      unpack-trees: pull sparse-checkout pattern reading into a new function
      unpack-trees: add a new update_sparsity() function
      sparse-checkout: use new update_sparsity() function
      sparse-checkout: use improved unpack_trees porcelain messages
      unpack-trees: move ERROR_WOULD_LOSE_SUBMODULE earlier
      unpack-trees: rename ERROR_* fields meant for warnings to WARNING_*
      unpack-trees: split display_error_msgs() into two
      unpack-trees: make sparse path messages sound like warnings
      unpack-trees: provide warnings on sparse updates for unmerged paths too
      unpack-trees: failure to set SKIP_WORKTREE bits always just a warning
      sparse-checkout: provide a new reapply subcommand
      pull: avoid running both merge and rebase
      t7063: more thorough status checking
      t3000: add more testcases testing a variety of ls-files issues
      dir: fix simple typo in comment
      dir: consolidate treat_path() and treat_one_path()
      dir: fix broken comment
      dir: fix confusion based on variable tense
      dir: replace exponential algorithm with a linear one
      dir: include DIR_KEEP_UNTRACKED_CONTENTS handling in treat_directory()
      dir: replace double pathspec matching with single in treat_directory()
      Fix error-prone fill_directory() API; make it only return matches
      completion: fix 'git add' on paths under an untracked directory
      git-rebase.txt: add another hook to the hooks section, and explain more
      sequencer: honor GIT_REFLOG_ACTION
      rebase -i: mark commits that begin empty in todo editor
      rebase: reinstate --no-keep-empty
      rebase: fix an incompatible-options error message
      rebase: display an error if --root and --fork-point are both provided
      merge-recursive: fix rename/rename(1to2) for working tree with a binary
      unpack-trees: also allow get_progress() to work on a different index

Emily Shaffer (8):
      help: move list_config_help to builtin/help
      bugreport: add tool to generate debugging info
      bugreport: gather git version and build info
      bugreport: add uname info
      bugreport: add compiler info
      bugreport: drop extraneous includes
      bugreport: collect list of populated hooks
      trace2: log progress time and throughput

Emma Brooks (3):
      format-patch: teach --no-encode-email-headers
      Documentation: explain "mboxrd" pretty format
      gitweb: Recognize *-to and Closes/Fixes trailers

Eric Sunshine (1):
      restore: default to HEAD when combining --staged and --worktree

Garima Singh (13):
      commit-graph: define and use MAX_NUM_CHUNKS
      bloom.c: add the murmur3 hash implementation
      bloom.c: introduce core Bloom filter constructs
      bloom.c: core Bloom filter implementation for changed paths.
      commit-graph: compute Bloom filters for changed paths
      commit-graph: examine commits by generation number
      commit-graph: write Bloom filters to commit graph file
      commit-graph: reuse existing Bloom filters during write
      commit-graph: add --changed-paths option to write subcommand
      revision.c: use Bloom filters to speed up path based revision walks
      revision.c: add trace2 stats around Bloom filter usage
      t4216: add end to end tests for git log with Bloom filters
      commit-graph: add GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS test flag

Greg Price (1):
      tests: skip small-stack tests on hppa architecture

Hans Jerry Illikainen (2):
      t: increase test coverage of signature verification output
      gpg-interface: prefer check_signature() for GPG verification

Heba Waly (4):
      advice: extract vadvise() from advise()
      advice: change "setupStreamFailure" to "setUpstreamFailure"
      advice: revamp advise API
      tag: use new advice API to check visibility

Ismael Luceno (1):
      git-gui: Handle Ctrl + BS/Del in the commit msg

Jeff King (51):
      credential: avoid writing values with newlines
      t/lib-credential: use test_i18ncmp to check stderr
      credential: detect unrepresentable values when parsing urls
      fsck: detect gitmodules URLs with embedded newlines
      t3419: drop EXPENSIVE tests
      t/lib-credential.sh: drop shebang line
      t/lib-*.sh: drop executable bit
      test-lib-functions: make packetize() more efficient
      upload-pack: handle unexpected delim packets
      p5310: stop timing non-bitmap pack-to-disk
      Makefile: avoid running curl-config multiple times
      Makefile: use curl-config --cflags
      test-lib-functions: simplify packetize() stdin code
      commit-graph: examine changed-path objects in pack order
      oid_array: use size_t for count and allocation
      oid_array: use size_t for iteration
      oid_array: rename source file from sha1-array
      test-tool: rename sha1-array to oid-array
      bisect: stop referring to sha1_array
      ref-filter: stop referring to "sha1 array"
      oidset: stop referring to sha1-array
      clone: use "quick" lookup while following tags
      Makefile: avoid running curl-config unnecessarily
      fast-import: replace custom hash with hashmap.c
      repository: mark the "refs" pointer as private
      remote: drop auto-strlen behavior of make_branch() and make_rewrite()
      parse_config_key(): return subsection len as size_t
      config: drop useless length variable in write_pair()
      git_config_parse_key(): return baselen as size_t
      config: use size_t to store parsed variable baselen
      config: reject parsing of files over INT_MAX
      credential: treat "?" and "#" in URLs as end of host
      t0300: make "quit" helper more realistic
      t0300: use more realistic inputs
      credential: parse URL without host as empty host, not unset
      credential: refuse to operate when missing host or protocol
      credential: die() when parsing invalid urls
      Git 2.17.5
      blame: drop unused parameter from maybe_changed_path
      test-bloom: fix some whitespace issues
      test-bloom: check that we have expected arguments
      commit-graph: close descriptors after mmap
      t0000: disable GIT_TEST_FAIL_PREREQS in sub-tests
      gitcredentials(7): clarify quoting of helper examples
      gitcredentials(7): make shell-snippet example more realistic
      CodingGuidelines: drop arithmetic expansion advice to use "$x"
      ref-filter: apply --ignore-case to all sorting keys
      ref-filter: apply fallback refname sort only after all user sorts
      list-objects-filter: treat NULL filter_options as "disabled"
      pack-bitmap: pass object filter to fill-in traversal
      ci: allow per-branch config for GitHub Actions

Jessica Clarke (1):
      config.mak.uname: Define FREAD_READS_DIRECTORIES for GNU/Hurd

Jiang Xin (5):
      send-pack: fix inconsistent porcelain output
      t5543: never report what we do not push
      send-pack: mark failure of atomic push properly
      transport-helper: mark failure for atomic push
      transport-helper: new method reject_atomic_push()

Johannes Schindelin (37):
      cherry-pick: add test for `--skip` advice in `git commit`
      tests(junit-xml): avoid invalid XML
      import-tars: ignore the global PAX header
      tests(gpg): allow the gpg-agent to start on Windows
      t/lib-gpg.sh: stop pretending to be a stand-alone script
      tests: do not let lazy prereqs inside `test_expect_*` turn off tracing
      tests: turn GPG, GPGSM and RFC1991 into lazy prereqs
      tests: increase the verbosity of the GPG-related prereqs
      MyFirstObjectWalk: remove unnecessary conditional statement
      t0007: fix a typo
      ci/lib: if CI type is unknown, show the environment variables
      ci/lib: allow running in GitHub Actions
      ci: fix the `jobname` of the `GETTEXT_POISON` job
      subtree: fix build with AsciiDoctor 2
      mingw: do not treat `COM0` as a reserved file name
      t3904: fix incorrect demonstration of a bug
      stash -p: (partially) fix bug concerning split hunks
      mingw: help debugging by optionally executing bash with strace
      interactive: refactor code asking the user for interactive input
      ci: run gem with sudo to install asciidoctor
      README: add a build badge for the GitHub Actions runs
      ci: retire the Azure Pipelines definition
      tests: when run in Bash, annotate test failures with file name/line number
      ci: add a problem matcher for GitHub Actions
      ci: let GitHub Actions upload failed tests' directories
      t: consolidate the `is_hidden` functions
      mingw: make test_path_is_hidden more robust
      t: restrict `is_hidden` to be called only on Windows
      credential: fix grammar
      credential: optionally allow partial URLs in credential_from_url_gently()
      credential: optionally allow partial URLs in credential_from_url_gently()
      credential: handle `credential.<partial-URL>.<key>` again
      macOS/brew: let the build find gettext headers/libraries/msgfmt
      push: anonymize URLs in error messages and warnings
      credential: handle `credential.<partial-URL>.<key>` again
      rebase --autosquash: fix a potential segfault
      ci: avoid pounding on the poor ci-artifacts container

Jonathan Nieder (5):
      fsck: convert gitmodules url to URL passed to curl
      credential: treat URL without scheme as invalid
      credential: treat URL with empty scheme as invalid
      fsck: reject URL with empty host in .gitmodules
      Revert "fetch: default to protocol version 2"

Jonathan Tan (12):
      connected: always use partial clone optimization
      promisor-remote: accept 0 as oid_nr in function
      diff: make diff_populate_filespec_options struct
      diff: refactor object read
      diff: restrict when prefetching occurs
      rebase --merge: optionally skip upstreamed commits
      fetch-pack: return enum from process_acks()
      fetch-pack: in protocol v2, in_vain only after ACK
      fetch-pack: in protocol v2, reset in_vain upon ACK
      commit-graph: avoid memory leaks
      t5500: count objects through stderr, not trace
      t4067: make rename detection test output raw diff

Jorge Lopez Silva (2):
      http: add client cert support for HTTPS proxies
      http: add environment variable support for HTTPS proxies

Josh Steadmon (1):
      trace2: teach Git to log environment variables

Julien Moutinho (1):
      gitweb: fix UTF-8 encoding when using CGI::Fast

Junio C Hamano (33):
      rebase: --fork-point regression fix
      describe: force long format for a name based on a mislocated tag
      update how-to-maintain-git
      parse-options: teach "git cmd -h" to show alias as alias
      clone: reorder --recursive/--recurse-submodules
      log: give --[no-]use-mailmap a more sensible synonym --[no-]mailmap
      Git 2.17.4
      separate tar.* config to its own source file
      The first batch post 2.26 cycle
      The second batch post 2.26 cycle
      t/README: suggest how to leave test early with failure
      CodingGuidelines: allow ${#posix} == strlen($posix)
      sha1-name: do not assume that the ref store is initialized
      receive-pack: compilation fix
      The third batch
      The fourth batch
      credential-store: document the file format a bit more
      Revert "commit-graph.c: introduce '--[no-]check-oids'"
      The fifth batch
      The sixth batch
      The seventh batch
      auto-gc: extract a reusable helper from "git fetch"
      auto-gc: pass --quiet down from am, commit, merge and rebase
      CodingGuidelines: do not ==/!= compare with 0 or '\0' or NULL
      The eighth batch
      The ninth batch
      Git 2.27-rc0
      Revert "t/test_lib: avoid naked bash arrays in file_lineno"
      Revert "ci: add a problem matcher for GitHub Actions"
      Revert "tests: when run in Bash, annotate test failures with file name/line number"
      Git 2.27-rc1
      Hopefully final batch before 2.27-rc2
      Git 2.27-rc2

Li Xuejiang (1):
      git-submodule.sh: setup uninitialized variables

Martin Ågren (14):
      Doc: drop support for docbook-xsl before 1.71.1
      Doc: drop support for docbook-xsl before 1.72.0
      Doc: drop support for docbook-xsl before 1.73.0
      manpage-bold-literal.xsl: stop using git.docbook.backslash
      manpage-normal.xsl: fold in manpage-base.xsl
      INSTALL: drop support for docbook-xsl before 1.74
      user-manual.conf: don't specify [listingblock]
      config.txt: move closing "----" to cover entire listing
      merge: use skip_prefix to parse config key
      date-formats.txt: fix list continuation
      git-commit-graph.txt: fix grammo
      git-commit-graph.txt: fix list rendering
      git-credential.txt: use list continuation
      git-sparse-checkout.txt: add missing '

Matheus Tavares (3):
      test-lib: allow short options to be bundled
      grep: follow conventions for printing paths w/ unusual chars
      config doc: fix reference to config.worktree info

Matthias Aßhauer (1):
      mingw: use modern strftime implementation if possible

Michael F. Schönitzer (1):
      docs: fix minor glitch in illustration

Nathan Sanders (1):
      mingw: cope with the Isilon network file system

Patrick Steinhardt (9):
      refs: fix segfault when aborting empty transaction
      git-update-ref.txt: add missing word
      strbuf: provide function to append whole lines
      update-ref: organize commands in an array
      update-ref: drop unused argument for `parse_refname`
      update-ref: pass end pointer instead of strbuf
      update-ref: move transaction handling into `update_refs_stdin()`
      update-ref: read commands in a line-wise fashion
      update-ref: implement interactive transaction handling

Philippe Blain (10):
      t7112: remove mention of KNOWN_FAILURE_SUBMODULE_RECURSIVE_NESTED
      t/lib-submodule-update: remove outdated test description
      t/lib-submodule-update: move a test to the right section
      unpack-trees: remove outdated description for verify_clean_submodule
      unpack-trees: check for missing submodule directory in merged_entry
      t/lib-submodule-update: add test removing nested submodules
      git-rebase.txt: fix typo
      pull doc: refer to a specific section in 'fetch' doc
      pull doc: correct outdated description of an example
      command-list.txt: add gitfaq to the list of guides

Phillip Wood (6):
      t3404: use test_cmp_rev
      cherry-pick: check commit error messages
      sequencer: write CHERRY_PICK_HEAD for reword and edit
      commit: use enum value for multiple cherry-picks
      commit: encapsulate determine_whence() for sequencer
      commit: give correct advice for empty commit during a rebase

René Scharfe (4):
      pull: document more passthru options
      pull: remove --update-head-ok from documentation
      pull: pass documented fetch options on
      fsck: report non-consecutive duplicate names in trees

SZEDER Gábor (4):
      ci: use python3 in linux-gcc and osx-gcc and python2 elsewhere
      commit-slab: clarify slabname##_peek()'s return value
      ci: make MAKEFLAGS available inside the Docker container in the Linux32 job
      completion: offer '--(no-)patch' among 'git log' options

Shourya Shukla (4):
      submodule--helper.c: Rename 'cb_foreach' to 'foreach_cb'
      gitfaq: files in .gitignore are tracked
      gitfaq: fetching and pulling a repository
      submodule: port subcommand 'set-url' from shell to C

Son Luong Ngoc (1):
      midx: teach "git multi-pack-index repack" honor "git repack" configurations

Taylor Blau (24):
      t/helper/test-read-graph.c: support commit-graph chains
      builtin/commit-graph.c: support for '--split[=<strategy>]'
      builtin/commit-graph.c: introduce split strategy 'no-merge'
      builtin/commit-graph.c: introduce split strategy 'replace'
      oidset: introduce 'oidset_size'
      commit-graph.h: replace 'commit_hex' with 'commits'
      commit-graph.c: introduce '--[no-]check-oids'
      diff-tree.c: load notes machinery when required
      commit-graph.c: don't use discarded graph_name in error
      t/test-lib.sh: make ULIMIT_FILE_DESCRIPTORS available to tests
      commit-graph.c: gracefully handle file descriptor exhaustion
      t5537: use test_write_lines and indented heredocs for readability
      shallow.c: use '{commit,rollback}_shallow_file'
      tempfile.c: introduce 'create_tempfile_mode'
      lockfile.c: introduce 'hold_lock_file_for_update_mode'
      commit-graph.c: write non-split graphs as read-only
      commit-graph.c: ensure graph layers respect core.sharedRepository
      commit-graph.c: make 'commit-graph-chain's read-only
      commit: make 'commit_graft_pos' non-static
      shallow: extract a header file for shallow-related functions
      shallow.h: document '{commit,rollback}_shallow_file'
      shallow: use struct 'shallow_lock' for additional safety
      pack-bitmap.c: make object filtering functions generic
      pack-bitmap.c: support 'tree:0' filtering

Terry Moschou (1):
      complete: zsh: add missing sub cmd completion candidates

Thomas Gummerer (2):
      stash: get git_stash_config at the top level
      stash: remove the stash.useBuiltin setting

Todd Zullinger (2):
      git-bugreport.txt: adjust reference to strftime(3)
      gitfaq: avoid validation error with older asciidoc

Vasil Dimov (2):
      range-diff: fix a crash in parsing git-log output
      range-diff: avoid negative string precision

Yang Zhao (12):
      git-p4: make python2.7 the oldest supported version
      git-p4: remove string type aliasing
      git-p4: encode/decode communication with p4 for python3
      git-p4: encode/decode communication with git for python3
      git-p4: convert path to unicode before processing them
      git-p4: open .gitp4-usercache.txt in text mode
      git-p4: use marshal format version 2 when sending to p4
      git-p4: fix freezing while waiting for fast-import progress
      git-p4: use functools.reduce instead of reduce
      git-p4: use dict.items() iteration for python3 compatibility
      git-p4: simplify regex pattern generation for parsing diff-tree
      git-p4: use python3's input() everywhere

brian m. carlson (34):
      builtin/pack-objects: make hash agnostic
      hash: implement and use a context cloning function
      hex: introduce parsing variants taking hash algorithms
      hex: add functions to parse hex object IDs in any algorithm
      repository: require a build flag to use SHA-256
      t: use hash-specific lookup tables to define test constants
      t6300: abstract away SHA-1-specific constants
      t6300: make hash algorithm independent
      t/helper/test-dump-split-index: initialize git repository
      t/helper: initialize repository if necessary
      t/helper: make repository tests hash independent
      setup: allow check_repository_format to read repository format
      builtin/init-db: allow specifying hash algorithm on command line
      builtin/init-db: add environment variable for new repo hash
      init-db: move writing repo version into a function
      worktree: allow repository version 1
      commit: use expected signature header for SHA-256
      fast-import: permit reading multiple marks files
      fast-import: add helper function for inserting mark object entries
      fast-import: make find_marks work on any mark set
      fast-import: add a generic function to iterate over marks
      fast-import: add options for rewriting submodules
      builtin/checkout: pass branch info down to checkout_worktree
      convert: permit passing additional metadata to filter processes
      convert: provide additional metadata to filters
      builtin/checkout: compute checkout metadata for checkouts
      builtin/clone: compute checkout metadata for clones
      builtin/rebase: compute checkout metadata for rebases
      builtin/reset: compute checkout metadata for reset
      t0021: test filter metadata for additional cases
      docs: add a FAQ
      builtin/receive-pack: use constant-time comparison for HMAC value
      credential: fix matching URLs with multiple levels in path
      docs: document credential.helper allowed values

luciano.rocha@booking.com (1):
      freshen_file(): use NULL `times' for implicit current-time

Đoàn Trần Công Danh (36):
      t4061: use POSIX compliant regex(7)
      test-lib-functions: test_cmp: eval $GIT_TEST_CMP
      t5003: drop the subshell in test_lazy_prereq
      t5003: skip conversion test if unzip -a is unavailable
      t5616: use rev-parse instead to get HEAD's object_id
      t7063: drop non-POSIX argument "-ls" from find(1)
      t4124: tweak test so that non-compliant diff(1) can also be used
      t5703: feed raw data into test-tool unpack-sideband
      rebase.c: honour --no-gpg-sign
      cherry-pick/revert: honour --no-gpg-sign in all case
      Documentation: document am --no-gpg-sign
      Documentation: reword commit --no-gpg-sign
      Documentation: merge commit-tree --[no-]gpg-sign
      Documentation: document merge option --no-gpg-sign
      ci/lib-docker: preserve required environment variables
      ci/linux32: parameterise command to switch arch
      ci: refactor docker runner script
      ci/linux32: libify install-dependencies step
      travis: build and test on Linux with musl libc and busybox
      ci/lib: set TERM environment variable if not exist
      ci: explicit install all required packages
      ci: configure GitHub Actions for CI/PR
      t4254: merge 2 steps of a single test
      mailinfo.c: avoid strlen on strings that can contains NUL
      mailinfo: disallow NUL character in mail's header
      date.c: s/is_date/set_date/
      date.c: validate and set time in a helper function
      date.c: skip fractional second part of ISO-8601
      date.c: allow compact version of ISO-8601 datetime
      test-parse-pathspec-file.c: s/0/NULL/ for pointer type
      compat/regex: move stdlib.h up in inclusion chain
      graph.c: limit linkage of internal variable
      progress.c: silence cgcc suggestion about internal linkage
      bloom: fix `make sparse` warning
      t1509: correct i18n test
      t5703: replace "grep -a" usage by perl

마누엘 (1):
      interactive: explicitly `fflush` stdout before expecting input


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.27.0-rc1
@ 2020-05-20 19:17  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2020-05-20 19:17 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.27.0-rc1 is now available for testing
at the usual places.  It is comprised of 491 non-merge commits
since v2.26.0, contributed by 55 people, 16 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.27.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.26.0 are as follows.
Welcome to the Git development community!

  Andras Kucsma, Ash Holland, Christopher Warrington, Emma
  Brooks, Jessica Clarke, Jorge Lopez Silva, Julien Moutinho,
  Li Xuejiang, luciano.rocha@booking.com, Matthias Aßhauer,
  Michael F. Schönitzer, Nathan Sanders, Son Luong Ngoc, Terry
  Moschou, Vasil Dimov, and Yang Zhao.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  마누엘, Abhishek Kumar, Alban Gruin, Alexandr Miloslavskiy,
  Alex Henrie, Andrei Rybak, Andrew Oakley, Ben Keene, brian
  m. carlson, Carlo Marcelo Arenas Belón, Christian Couder,
  Damien Robert, Denton Liu, Derrick Stolee, Đoàn Trần Công
  Danh, Elijah Newren, Emily Shaffer, Eric Sunshine, Garima Singh,
  Hans Jerry Illikainen, Heba Waly, Jeff King, Jiang Xin, Johannes
  Schindelin, Jonathan Nieder, Jonathan Tan, Josh Steadmon, Junio
  C Hamano, Martin Ågren, Matheus Tavares, Patrick Steinhardt,
  Philippe Blain, Phillip Wood, René Scharfe, Shourya Shukla,
  SZEDER Gábor, Taylor Blau, Thomas Gummerer, and Todd Zullinger.

----------------------------------------------------------------

Git 2.27 Release Notes (draft)
==============================

Updates since v2.26
-------------------

Backward compatibility notes

 * When "git describe C" finds that commit C is pointed by a signed or
   annotated tag, which records T as its tagname in the object, the
   command gives T as its answer.  Even if the user renames or moves
   such a tag from its natural location in the "refs/tags/" hierarchy,
   "git describe C" would still give T as the answer, but in such a
   case "git show T^0" would no longer work as expected.  There may be
   nothing at "refs/tags/T" or even worse there may be a different tag
   instead.

   Starting from this version, "git describe" will always use the
   "long" version, as if the "--long" option were given, when giving
   its output based on such a misplaced tag to work around the problem.

 * "git pull" issues a warning message until the pull.rebase
   configuration variable is explicitly given, which some existing
   users may find annoying---those who prefer not to rebase need to
   set the variable to false to squelch the warning.


UI, Workflows & Features

 * A handful of options to configure SSL when talking to proxies have
   been added.

 * Smudge/clean conversion filters are now given more information
   (e.g. the object of the tree-ish in which the blob being converted
   appears, in addition to its path, which has already been given).

 * When "git describe C" finds an annotated tag with tagname A to be
   the best name to explain commit C, and the tag is stored in a
   "wrong" place in the refs/tags hierarchy, e.g. refs/tags/B, the
   command gave a warning message but used A (not B) to describe C.
   If C is exactly at the tag, the describe output would be "A", but
   "git rev-parse A^0" would not be equal as "git rev-parse C^0".  The
   behavior of the command has been changed to use the "long" form
   i.e. A-0-gOBJECTNAME, which is correctly interpreted by rev-parse.

 * "git pull" learned to warn when no pull.rebase configuration
   exists, and neither --[no-]rebase nor --ff-only is given (which
   would result a merge).

 * "git p4" learned four new hooks and also "--no-verify" option to
   bypass them (and the existing "p4-pre-submit" hook).

 * "git pull" shares many options with underlying "git fetch", but
   some of them were not documented and some of those that would make
   sense to pass down were not passed down.

 * "git rebase" learned the "--no-gpg-sign" option to countermand
   commit.gpgSign the user may have.

 * The output from "git format-patch" uses RFC 2047 encoding for
   non-ASCII letters on From: and Subject: headers, so that it can
   directly be fed to e-mail programs.  A new option has been added
   to produce these headers in raw.

 * "git log" learned "--show-pulls" that helps pathspec limited
   history views; a merge commit that takes the whole change from a
   side branch, which is normally omitted from the output, is shown
   in addition to the commits that introduce real changes.

 * The interactive input from various codepaths are consolidated and
   any prompt possibly issued earlier are fflush()ed before we read.

 * Allow "git rebase" to reapply all local commits, even if the may be
   already in the upstream, without checking first.

 * The 'pack.useSparse' configuration variable now defaults to 'true',
   enabling an optimization that has been experimental since Git 2.21.

 * "git rebase" happens to call some hooks meant for "checkout" and
   "commit" by this was not a designed behaviour than historical
   accident.  This has been documented.

 * "git merge" learns the "--autostash" option.

 * "sparse-checkout" UI improvements.

 * "git update-ref --stdin" learned a handful of new verbs to let the
   user control ref update transactions more explicitly, which helps
   as an ingredient to implement two-phase commit-style atomic
   ref-updates across multiple repositories.

 * "git commit-graph write" learned different ways to write out split
   files.

 * Introduce an extension to the commit-graph to make it efficient to
   check for the paths that were modified at each commit using Bloom
   filters.

 * The approxidate parser learns to parse seconds with fraction and
   ignore fractional part.

 * The userdiff patterns for Markdown documents have been added.

 * The sparse-checkout patterns have been forbidden from excluding all
   paths, leaving an empty working tree, for a long time.  This
   limitation has been lifted.

 * "git restore --staged --worktree" now defaults to take the contents
   out of "HEAD", instead of erring out.

 * "git p4" learned to recover from a (broken) state where a directory
   and a file are recorded at the same path in the Perforce repository
   the same way as their clients do.

 * "git multi-pack-index repack" has been taught to honor some
   repack.* configuration variables.


Performance, Internal Implementation, Development Support etc.

 * The advise API has been revamped to allow more systematic enumeration of
   advice knobs in the future.

 * SHA-256 transition continues.

 * The code to interface with GnuPG has been refactored.

 * "git stash" has kept an escape hatch to use the scripted version
   for a few releases, which got stale.  It has been removed.

 * Enable tests that require GnuPG on Windows.

 * Minor test usability improvement.

 * Trace2 enhancement to allow logging of the environment variables.

 * Test clean-up continues.

 * Perf-test update.

 * A Windows-specific test element has been made more robust against
   misuse from both user's environment and programmer's errors.

 * Various tests have been updated to work around issues found with
   shell utilities that come with busybox etc.

 * The config API made mixed uses of int and size_t types to represent
   length of various pieces of text it parsed, which has been updated
   to use the correct type (i.e. size_t) throughout.

 * The "--decorate-refs" and "--decorate-refs-exclude" options "git
   log" takes have learned a companion configuration variable
   log.excludeDecoration that sits at the lowest priority in the
   family.

 * A new CI job to build and run test suite on linux with musl libc
   has been added.

 * Update the CI configuration to use GitHub Actions, retiring the one
   based on Azure Pipelines.

 * The directory traversal code had redundant recursive calls which
   made its performance characteristics exponential with respect to
   the depth of the tree, which was corrected.

 * "git blame" learns to take advantage of the "changed-paths" Bloom
   filter stored in the commit-graph file.

 * The "bugreport" tool has been added.

 * The object walk with object filter "--filter=tree:0" can now take
   advantage of the pack bitmap when available.

 * Instead of always building all branches at GitHub via Actions,
   users can specify which branches to build.

 * Codepaths that show progress meter have been taught to also use the
   start_progress() and the stop_progress() calls as a "region" to be
   traced.

 * Instead of downloading Windows SDK for CI jobs for windows builds
   from an external site (wingit.blob.core.windows.net), use the one
   created in the windows-build job, to work around quota issues at
   the external site.


Fixes since v2.26
-----------------

 * The real_path() convenience function can easily be misused; with a
   bit of code refactoring in the callers' side, its use has been
   eliminated.
   (merge 49d3c4b481 am/real-path-fix later to maint).

 * Update "git p4" to work with Python 3.
   (merge 6bb40ed20a yz/p4-py3 later to maint).

 * The mechanism to prevent "git commit" from making an empty commit
   or amending during an interrupted cherry-pick was broken during the
   rewrite of "git rebase" in C, which has been corrected.
   (merge 430b75f720 pw/advise-rebase-skip later to maint).

 * Fix "git checkout --recurse-submodules" of a nested submodule
   hierarchy.
   (merge 846f34d351 pb/recurse-submodules-fix later to maint).

 * The "--fork-point" mode of "git rebase" regressed when the command
   was rewritten in C back in 2.20 era, which has been corrected.
   (merge f08132f889 at/rebase-fork-point-regression-fix later to maint).

 * The import-tars importer (in contrib/fast-import/) used to create
   phony files at the top-level of the repository when the archive
   contains global PAX headers, which made its own logic to detect and
   omit the common leading directory ineffective, which has been
   corrected.
   (merge c839fcff65 js/import-tars-do-not-make-phony-files-from-pax-headers later to maint).

 * Simplify the commit ancestry connectedness check in a partial clone
   repository in which "promised" objects are assumed to be obtainable
   lazily on-demand from promisor remote repositories.
   (merge 2b98478c6f jt/connectivity-check-optim-in-partial-clone later to maint).

 * The server-end of the v2 protocol to serve "git clone" and "git
   fetch" was not prepared to see a delim packets at unexpected
   places, which led to a crash.
   (merge cacae4329f jk/harden-protocol-v2-delim-handling later to maint).

 * When fed a midx that records no objects, some codepaths tried to
   loop from 0 through (num_objects-1), which, due to integer
   arithmetic wrapping around, made it nonsense operation with out of
   bounds array accesses.  The code has been corrected to reject such
   an midx file.
   (merge 796d61cdc0 dr/midx-avoid-int-underflow later to maint).

 * Utitiles run via the run_command() API were not spawned correctly
   on Cygwin, when the paths to them are given as a full path with
   backslashes.
   (merge 05ac8582bc ak/run-command-on-cygwin-fix later to maint).

 * "git pull --rebase" tried to run a rebase even after noticing that
   the pull results in a fast-forward and no rebase is needed nor
   sensible, for the past few years due to a mistake nobody noticed.
   (merge fbae70ddc6 en/pull-do-not-rebase-after-fast-forwarding later to maint).

 * "git rebase" with the merge backend did not work well when the
   rebase.abbreviateCommands configuration was set.
   (merge de9f1d3ef4 ag/rebase-merge-allow-ff-under-abbrev-command later to maint).

 * The logic to auto-follow tags by "git clone --single-branch" was
   not careful to avoid lazy-fetching unnecessary tags, which has been
   corrected.
   (merge 167a575e2d jk/use-quick-lookup-in-clone-for-tag-following later to maint).

 * "git rebase -i" did not leave the reflog entries correctly.
   (merge 1f6965f994 en/sequencer-reflog-action later to maint).

 * The more aggressive updates to remote-tracking branches we had for
   the past 7 years or so were not reflected in the documentation,
   which has been corrected.
   (merge a44088435c pb/pull-fetch-doc later to maint).

 * We've left the command line parsing of "git log :/a/b/" broken for
   about a full year without anybody noticing, which has been
   corrected.
   (merge 0220461071 jc/missing-ref-store-fix later to maint).

 * Misc fixes for Windows.
   (merge 3efc128cd5 js/mingw-fixes later to maint).

 * "git rebase" (again) learns to honor "--no-keep-empty", which lets
   the user to discard commits that are empty from the beginning (as
   opposed to the ones that become empty because of rebasing).  The
   interactive rebase also marks commits that are empty in the todo.
   (merge 50ed76148a en/rebase-no-keep-empty later to maint).

 * Parsing the host part out of URL for the credential helper has been corrected.
   (merge 4c5971e18a jk/credential-parsing-end-of-host-in-URL later to maint).

 * Document the recommended way to abort a failing test early (e.g. by
   exiting a loop), which is to say "return 1".
   (merge 7cc112dc95 jc/doc-test-leaving-early later to maint).

 * The code that refreshes the last access and modified time of
   on-disk packfiles and loose object files have been updated.
   (merge 312cd76130 lr/freshen-file-fix later to maint).

 * Validation of push certificate has been made more robust against
   timing attacks.
   (merge 719483e547 bc/constant-memequal later to maint).

 * The custom hash function used by "git fast-import" has been
   replaced with the one from hashmap.c, which gave us a nice
   performance boost.
   (merge d8410a816b jk/fast-import-use-hashmap later to maint).

 * The "git submodule" command did not initialize a few variables it
   internally uses and was affected by variable settings leaked from
   the environment.
   (merge 65d100c4dd lx/submodule-clear-variables later to maint).

 * Raise the minimum required version of docbook-xsl package to 1.74,
   as 1.74.0 was from late 2008, which is more than 10 years old, and
   drop compatibility cruft from our documentation suite.
   (merge 3c255ad660 ma/doc-discard-docbook-xsl-1.73 later to maint).

 * "git log" learns "--[no-]mailmap" as a synonym to "--[no-]use-mailmap"
   (merge 88acccda38 jc/log-no-mailmap later to maint).

 * "git commit-graph write --expire-time=<timestamp>" did not use the
   given timestamp correctly, which has been corrected.
   (merge b09b785c78 ds/commit-graph-expiry-fix later to maint).

 * Tests update to use "test-chmtime" instead of "touch -t".
   (merge e892a56845 ds/t5319-touch-fix later to maint).

 * "git diff" in a partial clone learned to avoid lazy loading blob
   objects in more casese when they are not needed.
   (merge 95acf11a3d jt/avoid-prefetch-when-able-in-diff later to maint).

 * "git push --atomic" used to show failures for refs that weren't
   even pushed, which has been corrected.
   (merge dfe1b7f19c jx/atomic-push later to maint).

 * Code in builtin/*, i.e. those can only be called from within
   built-in subcommands, that implements bulk of a couple of
   subcommands have been moved to libgit.a so that they could be used
   by others.
   (merge 9460fd48b5 dl/libify-a-few later to maint).

 * Allowing the user to split a patch hunk while "git stash -p" does
   not work well; a band-aid has been added to make this (partially)
   work better.

 * "git diff-tree --pretty --notes" used to hit an assertion failure,
   as it forgot to initialize the notes subsystem.
   (merge 5778b22b3d tb/diff-tree-with-notes later to maint).

 * "git range-diff" fixes.
   (merge 8d1675eb7f vd/range-diff-with-custom-pretty-format-fix later to maint).

 * "git grep" did not quote a path with unusual character like other
   commands (like "git diff", "git status") do, but did quote when run
   from a subdirectory, both of which has been corrected.
   (merge 45115d8490 mt/grep-cquote-path later to maint).

 * GNU/Hurd is also among the ones that need the fopen() wrapper.
   (merge 274a1328fb jc/gnu-hurd-lets-fread-read-dirs later to maint).

 * Those fetching over protocol v2 from linux-next and other kernel
   repositories are reporting that v2 often fetches way too much than
   needed.
   (merge 11c7f2a30b jn/demote-proto2-from-default later to maint).

 * The upload-pack protocol v2 gave up too early before finding a
   common ancestor, resulting in a wasteful fetch from a fork of a
   project.  This has been corrected to match the behaviour of v0
   protocol.
   (merge 2f0a093dd6 jt/v2-fetch-nego-fix later to maint).

 * The build procedure did not use the libcurl library and its include
   files correctly for a custom-built installation.
   (merge 0573831950 jk/build-with-right-curl later to maint).

 * Tighten "git mailinfo" to notice and error out when decoded result
   contains NUL in it.
   (merge 3919997447 dd/mailinfo-with-nul later to maint).

 * Fix in-core inconsistency after fetching into a shallow repository
   that broke the code to write out commit-graph.
   (merge 37b9dcabfc tb/reset-shallow later to maint).

 * The commit-graph code exhausted file descriptors easily when it
   does not have to.
   (merge c8828530b7 tb/commit-graph-fd-exhaustion-fix later to maint).

 * The multi-pack-index left mmapped file descriptors open when it
   does not have to.
   (merge 6c7ff7cf7f ds/multi-pack-index later to maint).

 * Recent update to Homebrew used by macOS folks breaks build by
   moving gettext library and necessary headers.
   (merge a0b3108618 ds/build-homebrew-gettext-fix later to maint).

 * Incompatible options "--root" and "--fork-point" of "git rebase"
   have been marked and documented as being incompatible.
   (merge a35413c378 en/rebase-root-and-fork-point-are-incompatible later to maint).

 * Error and verbose trace messages from "git push" did not redact
   credential material embedded in URLs.
   (merge d192fa5006 js/anonymise-push-url-in-errors later to maint).

 * Update the parser used for credential.<URL>.<variable>
   configuration, to handle <URL>s with '/' in them correctly.
   (merge b44d0118ac bc/wildcard-credential later to maint).

 * Recent updates broke parsing of "credential.<url>.<key>" where
   <url> is not a full URL (e.g. [credential "https://"] helper = ...)
   stopped working, which has been corrected.
   (merge 9a121b0d22 js/partial-urlmatch-2.17 later to maint).
   (merge cd93e6c029 js/partial-urlmatch later to maint).

 * Some of the files commit-graph subsystem keeps on disk did not
   correctly honor the core.sharedRepository settings and some were
   left read-write.

 * In error messages that "git switch" mentions its option to create a
   new branch, "-b/-B" options were shown, where "-c/-C" options
   should be, which has been corrected.
   (merge 7c16ef7577 dl/switch-c-option-in-error-message later to maint).

 * With the recent tightening of the code that is used to parse
   various parts of a URL for use in the credential subsystem, a
   hand-edited credential-store file causes the credential helper to
   die, which is a bit too harsh to the users.  Demote the error
   behaviour to just ignore and keep using well-formed lines instead.
   (merge c03859a665 cb/credential-store-ignore-bogus-lines later to maint).

 * The samples in the credential documentation has been updated to
   make it clear that we depict what would appear in the .git/config
   file, by adding appropriate quotes as needed..
   (merge 177681a07e jk/credential-sample-update later to maint).

 * "git branch" and other "for-each-ref" variants accepted multiple
   --sort=<key> options in the increasing order of precedence, but it
   had a few breakages around "--ignore-case" handling, and tie-breaking
   with the refname, which have been fixed.
   (merge 7c5045fc18 jk/for-each-ref-multi-key-sort-fix later to maint).

 * The coding guideline for shell scripts instructed to refer to a
   variable with dollar-sign inside arithmetic expansion to work
   around a bug in old versions of dash, which is a thing of the past.
   Now we are not forbidden from writing $((var+1)).
   (merge 32b5fe7f0e jk/arith-expansion-coding-guidelines later to maint).

 * The <stdlib.h> header on NetBSD brings in its own definition of
   hmac() function (eek), which conflicts with our own and unrelated
   function with the same name.  Our function has been renamed to work
   around the issue.
   (merge 3013118eb8 cb/avoid-colliding-with-netbsd-hmac later to maint).

 * The basic test did not honor $TEST_SHELL_PATH setting, which has
   been corrected.
   (merge 0555e4af58 cb/t0000-use-the-configured-shell later to maint).

 * Minor in-code comments and documentation updates around credential
   API.
   (merge 1aed817f99 cb/credential-doc-fixes later to maint).

 * Teach "am", "commit", "merge" and "rebase", when they are run with
   the "--quiet" option, to pass "--quiet" down to "gc --auto".
   (merge 7c3e9e8cfb jc/auto-gc-quiet later to maint).

 * The code to skip unmerged paths in the index when sparse checkout
   is in use would have made out-of-bound access of the in-core index
   when the last path was unmerged, which has been corrected.

 * Serving a "git fetch" client over "git://" and "ssh://" protocols
   using the on-wire protocol version 2 was buggy on the server end
   when the client needs to make a follow-up request to
   e.g. auto-follow tags.
   (merge 08450ef791 cc/upload-pack-v2-fetch-fix later to maint).

 * "git bisect replay" had trouble with input files when they used
   CRLF line ending, which has been corrected.
   (merge 6c722cbe5a cw/bisect-replay-with-dos later to maint).

 * "rebase -i" segfaulted when rearranging a sequence that has a
   fix-up that applies another fix-up (which may or may not be a
   fix-up of yet another step).
   (merge 02471e7e20 js/rebase-autosquash-double-fixup-fix later to maint).

 * "git fsck" ensures that the paths recorded in tree objects are
   sorted and without duplicates, but it failed to notice a case where
   a blob is followed by entries that sort before a tree with the same
   name.  This has been corrected.
   (merge 9068cfb20f rs/fsck-duplicate-names-in-trees later to maint).

 * Code clean-up by removing a compatibility implementation of a
   function we no longer use.
   (merge 84b0115f0d cb/no-more-gmtime later to maint).

 * When a binary file gets modified and renamed on both sides of history
   to different locations, both files would be written to the working
   tree but both would have the contents from "ours".  This has been
   corrected so that the path from each side gets their original content.

 * Other code cleanup, docfix, build fix, etc.
   (merge 564956f358 jc/maintain-doc later to maint).
   (merge 7422b2a0a1 sg/commit-slab-clarify-peek later to maint).
   (merge 9c688735f6 rs/doc-passthru-fetch-options later to maint).
   (merge 757c2ba3e2 en/oidset-uninclude-hashmap later to maint).
   (merge 8312aa7d74 jc/config-tar later to maint).
   (merge d00a5bdd50 ss/submodule-foreach-cb later to maint).
   (merge 64d1022e14 ar/test-style-fixes later to maint).
   (merge 4a465443a6 ds/doc-clone-filter later to maint).
   (merge bb2dbe301b jk/t3419-drop-expensive-tests later to maint).
   (merge d3507cc712 js/test-junit-finalization-fix later to maint).
   (merge 2149b6748f bc/faq later to maint).
   (merge 12dc0879f1 jk/test-cleanup later to maint).
   (merge 344420bf0f pb/rebase-doc-typofix later to maint).
   (merge 7cd54d37dc dl/wrapper-fix-indentation later to maint).
   (merge 78725ebda9 jc/allow-strlen-substitution-in-shell-scripts later to maint).
   (merge 2ecfcdecc6 jm/gitweb-fastcgi-utf8 later to maint).
   (merge 0740d0a5d3 jk/oid-array-cleanups later to maint).
   (merge a1aba0c95c js/t0007-typofix later to maint).
   (merge 76ba7fa225 ma/config-doc-fix later to maint).
   (merge 826f0c0df2 js/subtree-doc-update-to-asciidoctor-2 later to maint).
   (merge 88eaf361e0 eb/mboxrd-doc later to maint).
   (merge 051cc54941 tm/zsh-complete-switch-restore later to maint).
   (merge 39102cf4fe ms/doc-revision-illustration-fix later to maint).
   (merge 4d9378bfad eb/gitweb-more-trailers later to maint).
   (merge bdccbf7047 mt/doc-worktree-ref later to maint).
   (merge ce9baf234f dl/push-recurse-submodules-fix later to maint).
   (merge 4153274052 bc/doc-credential-helper-value later to maint).
   (merge 5c7bb0146e jc/codingstyle-compare-with-null later to maint).

----------------------------------------------------------------

Changes since v2.26.0 are as follows:

Abhishek Kumar (1):
      commit-slab-decl.h: update include guard

Alban Gruin (3):
      sequencer: mark messages for translation
      sequencer: don't abbreviate a command if it doesn't have a short form
      t3432: test `--merge' with `rebase.abbreviateCommands = true', too

Alex Henrie (1):
      pull: warn if the user didn't say whether to rebase or to merge

Alexandr Miloslavskiy (4):
      set_git_dir: fix crash when used with real_path()
      real_path: remove unsafe API
      real_path_if_valid(): remove unsafe API
      get_superproject_working_tree(): return strbuf

Andras Kucsma (1):
      run-command: trigger PATH lookup properly on Cygwin

Andrei Rybak (2):
      t9500: remove spaces after redirect operators
      t: fix whitespace around &&

Andrew Oakley (1):
      git-p4: recover from inconsistent perforce history

Ash Holland (1):
      userdiff: support Markdown

Ben Keene (8):
      git-p4: change the expansion test from basestring to list
      git-p4: rewrite prompt to be Windows compatible
      git-p4: create new function run_git_hook
      git-p4: add p4-pre-submit exit text
      git-p4: add --no-verify option
      git-p4: restructure code in submit
      git-p4: add p4 submit hooks
      git-p4: add RCS keyword status message

Carlo Marcelo Arenas Belón (9):
      credential-store: ignore bogus lines from store file
      credential: update description for credential_from_url_gently
      credential: correct order of parameters for credential_match
      builtin/receive-pack: avoid generic function name hmac()
      t/t0000-basic: make sure subtests also use TEST_SHELL_PATH
      t/test_lib: avoid naked bash arrays in file_lineno
      credential: update gitcredentials documentation
      credential: document protocol updates
      compat: remove gmtime

Christian Couder (1):
      upload-pack: clear filter_options for each v2 fetch command

Christopher Warrington (1):
      bisect: allow CRLF line endings in "git bisect replay" input

Damien Robert (6):
      midx.c: fix an integer underflow
      doc: list all commands affected by submodule.recurse
      doc: document --recurse-submodules for reset and restore
      doc: explain how to deactivate submodule.recurse completely
      doc: be more precise on (fetch|push).recurseSubmodules
      doc: --recurse-submodules mostly applies to active submodules

Denton Liu (45):
      Makefile: ASCII-sort += lists
      t7600: use test_write_lines()
      Lib-ify fmt-merge-msg
      Lib-ify prune-packed
      t5512: don't use `test_must_fail test_cmp`
      t5512: stop losing git exit code in here-docs
      t5512: stop losing return codes of git commands
      t5550: simplify no matching line check
      t5607: reorder `nongit test_must_fail`
      t5612: don't use `test_must_fail test_cmp`
      t5612: stop losing return codes of git commands
      t5801: teach compare_refs() to accept !
      wrapper: indent with tabs
      sequencer: stop leaking buf
      sequencer: make file exists check more efficient
      sequencer: make read_oneliner() accept flags
      sequencer: configurably warn on non-existent files
      sequencer: make read_oneliner() extern
      rebase: use read_oneliner()
      sequencer: make apply_autostash() accept a path
      sequencer: rename stash_sha1 to stash_oid
      rebase: use apply_autostash() from sequencer.c
      rebase: generify reset_head()
      reset: extract reset_head() from rebase
      rebase: extract create_autostash()
      rebase: generify create_autostash()
      sequencer: extract perform_autostash() from rebase
      sequencer: unlink autostash in apply_autostash()
      sequencer: implement save_autostash()
      sequencer: implement apply_autostash_oid()
      merge: teach --autostash option
      t5520: make test_pull_autostash() accept expect_parent_num
      pull: pass --autostash to merge
      t6030: use test_path_is_missing()
      t7408: replace incorrect uses of test_must_fail
      t7508: don't use `test_must_fail test_cmp`
      t9141: use test_path_is_missing()
      t9160: use test_path_is_missing()
      t9164: use test_must_fail only on git commands
      t9819: don't use test_must_fail with p4
      Use OPT_CALLBACK and OPT_CALLBACK_F
      push: unset PARSE_OPT_OPTARG for --recurse-submodules
      rebase: save autostash entry into stash reflog on --quit
      switch: fix errors and comments related to -c and -C
      Doc: reference the "stash list" in autostash docs

Derrick Stolee (26):
      connected.c: reprepare packs for corner cases
      config: set pack.useSparse=true by default
      pack-objects: flip the use of GIT_TEST_PACK_SPARSE
      clone: document --filter options
      diff: halt tree-diff early after max_changes
      dir: refactor treat_directory to clarify control flow
      commit-graph: fix buggy --expire-time option
      t5319: replace 'touch -m' with 'test-tool chmtime'
      bloom: ignore renames when computing changed paths
      revision: --show-pulls adds helpful merges
      log-tree: make ref_filter_match() a helper method
      log: add log.excludeDecoration config option
      revision: complicated pathspecs disable filters
      tests: write commit-graph with Bloom filters
      blame: use changed-path Bloom filters
      multi-pack-index: close file descriptor after mmap
      bloom: fix whitespace around tab length
      test-bloom: fix usage typo
      sparse-checkout: stop blocking empty workdirs
      unpack-trees: avoid array out-of-bounds error
      multi-pack-index: respect repack.packKeptObjects=false
      bloom: parse commit before computing filters
      Documentation: changed-path Bloom filters use byte words
      bloom: de-duplicate directory entries
      bloom: use num_changes not nr for limit detection
      progress: call trace2_region_leave() only after calling _enter()

Elijah Newren (39):
      oidset: remove unnecessary include
      unpack-trees: fix minor typo in comment
      unpack-trees: remove unused error type
      unpack-trees: simplify verify_absent_sparse()
      unpack-trees: simplify pattern_list freeing
      t1091: make some tests a little more defensive against failures
      unpack-trees: allow check_updates() to work on a different index
      unpack-trees: do not mark a dirty path with SKIP_WORKTREE
      unpack-trees: pull sparse-checkout pattern reading into a new function
      unpack-trees: add a new update_sparsity() function
      sparse-checkout: use new update_sparsity() function
      sparse-checkout: use improved unpack_trees porcelain messages
      unpack-trees: move ERROR_WOULD_LOSE_SUBMODULE earlier
      unpack-trees: rename ERROR_* fields meant for warnings to WARNING_*
      unpack-trees: split display_error_msgs() into two
      unpack-trees: make sparse path messages sound like warnings
      unpack-trees: provide warnings on sparse updates for unmerged paths too
      unpack-trees: failure to set SKIP_WORKTREE bits always just a warning
      sparse-checkout: provide a new reapply subcommand
      pull: avoid running both merge and rebase
      t7063: more thorough status checking
      t3000: add more testcases testing a variety of ls-files issues
      dir: fix simple typo in comment
      dir: consolidate treat_path() and treat_one_path()
      dir: fix broken comment
      dir: fix confusion based on variable tense
      dir: replace exponential algorithm with a linear one
      dir: include DIR_KEEP_UNTRACKED_CONTENTS handling in treat_directory()
      dir: replace double pathspec matching with single in treat_directory()
      Fix error-prone fill_directory() API; make it only return matches
      completion: fix 'git add' on paths under an untracked directory
      git-rebase.txt: add another hook to the hooks section, and explain more
      sequencer: honor GIT_REFLOG_ACTION
      rebase -i: mark commits that begin empty in todo editor
      rebase: reinstate --no-keep-empty
      rebase: fix an incompatible-options error message
      rebase: display an error if --root and --fork-point are both provided
      merge-recursive: fix rename/rename(1to2) for working tree with a binary
      unpack-trees: also allow get_progress() to work on a different index

Emily Shaffer (8):
      help: move list_config_help to builtin/help
      bugreport: add tool to generate debugging info
      bugreport: gather git version and build info
      bugreport: add uname info
      bugreport: add compiler info
      bugreport: drop extraneous includes
      bugreport: collect list of populated hooks
      trace2: log progress time and throughput

Emma Brooks (3):
      format-patch: teach --no-encode-email-headers
      Documentation: explain "mboxrd" pretty format
      gitweb: Recognize *-to and Closes/Fixes trailers

Eric Sunshine (1):
      restore: default to HEAD when combining --staged and --worktree

Garima Singh (13):
      commit-graph: define and use MAX_NUM_CHUNKS
      bloom.c: add the murmur3 hash implementation
      bloom.c: introduce core Bloom filter constructs
      bloom.c: core Bloom filter implementation for changed paths.
      commit-graph: compute Bloom filters for changed paths
      commit-graph: examine commits by generation number
      commit-graph: write Bloom filters to commit graph file
      commit-graph: reuse existing Bloom filters during write
      commit-graph: add --changed-paths option to write subcommand
      revision.c: use Bloom filters to speed up path based revision walks
      revision.c: add trace2 stats around Bloom filter usage
      t4216: add end to end tests for git log with Bloom filters
      commit-graph: add GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS test flag

Hans Jerry Illikainen (2):
      t: increase test coverage of signature verification output
      gpg-interface: prefer check_signature() for GPG verification

Heba Waly (4):
      advice: extract vadvise() from advise()
      advice: change "setupStreamFailure" to "setUpstreamFailure"
      advice: revamp advise API
      tag: use new advice API to check visibility

Jeff King (51):
      credential: avoid writing values with newlines
      t/lib-credential: use test_i18ncmp to check stderr
      credential: detect unrepresentable values when parsing urls
      fsck: detect gitmodules URLs with embedded newlines
      t3419: drop EXPENSIVE tests
      t/lib-credential.sh: drop shebang line
      t/lib-*.sh: drop executable bit
      test-lib-functions: make packetize() more efficient
      upload-pack: handle unexpected delim packets
      p5310: stop timing non-bitmap pack-to-disk
      Makefile: avoid running curl-config multiple times
      Makefile: use curl-config --cflags
      test-lib-functions: simplify packetize() stdin code
      commit-graph: examine changed-path objects in pack order
      oid_array: use size_t for count and allocation
      oid_array: use size_t for iteration
      oid_array: rename source file from sha1-array
      test-tool: rename sha1-array to oid-array
      bisect: stop referring to sha1_array
      ref-filter: stop referring to "sha1 array"
      oidset: stop referring to sha1-array
      clone: use "quick" lookup while following tags
      Makefile: avoid running curl-config unnecessarily
      fast-import: replace custom hash with hashmap.c
      repository: mark the "refs" pointer as private
      remote: drop auto-strlen behavior of make_branch() and make_rewrite()
      parse_config_key(): return subsection len as size_t
      config: drop useless length variable in write_pair()
      git_config_parse_key(): return baselen as size_t
      config: use size_t to store parsed variable baselen
      config: reject parsing of files over INT_MAX
      credential: treat "?" and "#" in URLs as end of host
      t0300: make "quit" helper more realistic
      t0300: use more realistic inputs
      credential: parse URL without host as empty host, not unset
      credential: refuse to operate when missing host or protocol
      credential: die() when parsing invalid urls
      Git 2.17.5
      blame: drop unused parameter from maybe_changed_path
      test-bloom: fix some whitespace issues
      test-bloom: check that we have expected arguments
      commit-graph: close descriptors after mmap
      t0000: disable GIT_TEST_FAIL_PREREQS in sub-tests
      gitcredentials(7): clarify quoting of helper examples
      gitcredentials(7): make shell-snippet example more realistic
      CodingGuidelines: drop arithmetic expansion advice to use "$x"
      ref-filter: apply --ignore-case to all sorting keys
      ref-filter: apply fallback refname sort only after all user sorts
      list-objects-filter: treat NULL filter_options as "disabled"
      pack-bitmap: pass object filter to fill-in traversal
      ci: allow per-branch config for GitHub Actions

Jessica Clarke (1):
      config.mak.uname: Define FREAD_READS_DIRECTORIES for GNU/Hurd

Jiang Xin (5):
      send-pack: fix inconsistent porcelain output
      t5543: never report what we do not push
      send-pack: mark failure of atomic push properly
      transport-helper: mark failure for atomic push
      transport-helper: new method reject_atomic_push()

Johannes Schindelin (37):
      cherry-pick: add test for `--skip` advice in `git commit`
      tests(junit-xml): avoid invalid XML
      import-tars: ignore the global PAX header
      tests(gpg): allow the gpg-agent to start on Windows
      t/lib-gpg.sh: stop pretending to be a stand-alone script
      tests: do not let lazy prereqs inside `test_expect_*` turn off tracing
      tests: turn GPG, GPGSM and RFC1991 into lazy prereqs
      tests: increase the verbosity of the GPG-related prereqs
      MyFirstObjectWalk: remove unnecessary conditional statement
      t0007: fix a typo
      ci/lib: if CI type is unknown, show the environment variables
      ci/lib: allow running in GitHub Actions
      ci: fix the `jobname` of the `GETTEXT_POISON` job
      subtree: fix build with AsciiDoctor 2
      mingw: do not treat `COM0` as a reserved file name
      t3904: fix incorrect demonstration of a bug
      stash -p: (partially) fix bug concerning split hunks
      mingw: help debugging by optionally executing bash with strace
      interactive: refactor code asking the user for interactive input
      ci: run gem with sudo to install asciidoctor
      README: add a build badge for the GitHub Actions runs
      ci: retire the Azure Pipelines definition
      tests: when run in Bash, annotate test failures with file name/line number
      ci: add a problem matcher for GitHub Actions
      ci: let GitHub Actions upload failed tests' directories
      t: consolidate the `is_hidden` functions
      mingw: make test_path_is_hidden more robust
      t: restrict `is_hidden` to be called only on Windows
      credential: fix grammar
      credential: optionally allow partial URLs in credential_from_url_gently()
      credential: optionally allow partial URLs in credential_from_url_gently()
      credential: handle `credential.<partial-URL>.<key>` again
      macOS/brew: let the build find gettext headers/libraries/msgfmt
      push: anonymize URLs in error messages and warnings
      credential: handle `credential.<partial-URL>.<key>` again
      rebase --autosquash: fix a potential segfault
      ci: avoid pounding on the poor ci-artifacts container

Jonathan Nieder (5):
      fsck: convert gitmodules url to URL passed to curl
      credential: treat URL without scheme as invalid
      credential: treat URL with empty scheme as invalid
      fsck: reject URL with empty host in .gitmodules
      Revert "fetch: default to protocol version 2"

Jonathan Tan (11):
      connected: always use partial clone optimization
      promisor-remote: accept 0 as oid_nr in function
      diff: make diff_populate_filespec_options struct
      diff: refactor object read
      diff: restrict when prefetching occurs
      rebase --merge: optionally skip upstreamed commits
      fetch-pack: return enum from process_acks()
      fetch-pack: in protocol v2, in_vain only after ACK
      fetch-pack: in protocol v2, reset in_vain upon ACK
      commit-graph: avoid memory leaks
      t5500: count objects through stderr, not trace

Jorge Lopez Silva (2):
      http: add client cert support for HTTPS proxies
      http: add environment variable support for HTTPS proxies

Josh Steadmon (1):
      trace2: teach Git to log environment variables

Julien Moutinho (1):
      gitweb: fix UTF-8 encoding when using CGI::Fast

Junio C Hamano (31):
      rebase: --fork-point regression fix
      describe: force long format for a name based on a mislocated tag
      update how-to-maintain-git
      parse-options: teach "git cmd -h" to show alias as alias
      clone: reorder --recursive/--recurse-submodules
      log: give --[no-]use-mailmap a more sensible synonym --[no-]mailmap
      Git 2.17.4
      separate tar.* config to its own source file
      The first batch post 2.26 cycle
      The second batch post 2.26 cycle
      t/README: suggest how to leave test early with failure
      CodingGuidelines: allow ${#posix} == strlen($posix)
      sha1-name: do not assume that the ref store is initialized
      receive-pack: compilation fix
      The third batch
      The fourth batch
      credential-store: document the file format a bit more
      Revert "commit-graph.c: introduce '--[no-]check-oids'"
      The fifth batch
      The sixth batch
      The seventh batch
      auto-gc: extract a reusable helper from "git fetch"
      auto-gc: pass --quiet down from am, commit, merge and rebase
      CodingGuidelines: do not ==/!= compare with 0 or '\0' or NULL
      The eighth batch
      The ninth batch
      Git 2.27-rc0
      Revert "t/test_lib: avoid naked bash arrays in file_lineno"
      Revert "ci: add a problem matcher for GitHub Actions"
      Revert "tests: when run in Bash, annotate test failures with file name/line number"
      Git 2.27-rc1

Li Xuejiang (1):
      git-submodule.sh: setup uninitialized variables

Martin Ågren (9):
      Doc: drop support for docbook-xsl before 1.71.1
      Doc: drop support for docbook-xsl before 1.72.0
      Doc: drop support for docbook-xsl before 1.73.0
      manpage-bold-literal.xsl: stop using git.docbook.backslash
      manpage-normal.xsl: fold in manpage-base.xsl
      INSTALL: drop support for docbook-xsl before 1.74
      user-manual.conf: don't specify [listingblock]
      config.txt: move closing "----" to cover entire listing
      merge: use skip_prefix to parse config key

Matheus Tavares (3):
      test-lib: allow short options to be bundled
      grep: follow conventions for printing paths w/ unusual chars
      config doc: fix reference to config.worktree info

Matthias Aßhauer (1):
      mingw: use modern strftime implementation if possible

Michael F. Schönitzer (1):
      docs: fix minor glitch in illustration

Nathan Sanders (1):
      mingw: cope with the Isilon network file system

Patrick Steinhardt (9):
      refs: fix segfault when aborting empty transaction
      git-update-ref.txt: add missing word
      strbuf: provide function to append whole lines
      update-ref: organize commands in an array
      update-ref: drop unused argument for `parse_refname`
      update-ref: pass end pointer instead of strbuf
      update-ref: move transaction handling into `update_refs_stdin()`
      update-ref: read commands in a line-wise fashion
      update-ref: implement interactive transaction handling

Philippe Blain (9):
      t7112: remove mention of KNOWN_FAILURE_SUBMODULE_RECURSIVE_NESTED
      t/lib-submodule-update: remove outdated test description
      t/lib-submodule-update: move a test to the right section
      unpack-trees: remove outdated description for verify_clean_submodule
      unpack-trees: check for missing submodule directory in merged_entry
      t/lib-submodule-update: add test removing nested submodules
      git-rebase.txt: fix typo
      pull doc: refer to a specific section in 'fetch' doc
      pull doc: correct outdated description of an example

Phillip Wood (6):
      t3404: use test_cmp_rev
      cherry-pick: check commit error messages
      sequencer: write CHERRY_PICK_HEAD for reword and edit
      commit: use enum value for multiple cherry-picks
      commit: encapsulate determine_whence() for sequencer
      commit: give correct advice for empty commit during a rebase

René Scharfe (4):
      pull: document more passthru options
      pull: remove --update-head-ok from documentation
      pull: pass documented fetch options on
      fsck: report non-consecutive duplicate names in trees

SZEDER Gábor (4):
      ci: use python3 in linux-gcc and osx-gcc and python2 elsewhere
      commit-slab: clarify slabname##_peek()'s return value
      ci: make MAKEFLAGS available inside the Docker container in the Linux32 job
      completion: offer '--(no-)patch' among 'git log' options

Shourya Shukla (4):
      submodule--helper.c: Rename 'cb_foreach' to 'foreach_cb'
      gitfaq: files in .gitignore are tracked
      gitfaq: fetching and pulling a repository
      submodule: port subcommand 'set-url' from shell to C

Son Luong Ngoc (1):
      midx: teach "git multi-pack-index repack" honor "git repack" configurations

Taylor Blau (24):
      t/helper/test-read-graph.c: support commit-graph chains
      builtin/commit-graph.c: support for '--split[=<strategy>]'
      builtin/commit-graph.c: introduce split strategy 'no-merge'
      builtin/commit-graph.c: introduce split strategy 'replace'
      oidset: introduce 'oidset_size'
      commit-graph.h: replace 'commit_hex' with 'commits'
      commit-graph.c: introduce '--[no-]check-oids'
      diff-tree.c: load notes machinery when required
      commit-graph.c: don't use discarded graph_name in error
      t/test-lib.sh: make ULIMIT_FILE_DESCRIPTORS available to tests
      commit-graph.c: gracefully handle file descriptor exhaustion
      t5537: use test_write_lines and indented heredocs for readability
      shallow.c: use '{commit,rollback}_shallow_file'
      tempfile.c: introduce 'create_tempfile_mode'
      lockfile.c: introduce 'hold_lock_file_for_update_mode'
      commit-graph.c: write non-split graphs as read-only
      commit-graph.c: ensure graph layers respect core.sharedRepository
      commit-graph.c: make 'commit-graph-chain's read-only
      commit: make 'commit_graft_pos' non-static
      shallow: extract a header file for shallow-related functions
      shallow.h: document '{commit,rollback}_shallow_file'
      shallow: use struct 'shallow_lock' for additional safety
      pack-bitmap.c: make object filtering functions generic
      pack-bitmap.c: support 'tree:0' filtering

Terry Moschou (1):
      complete: zsh: add missing sub cmd completion candidates

Thomas Gummerer (2):
      stash: get git_stash_config at the top level
      stash: remove the stash.useBuiltin setting

Todd Zullinger (1):
      git-bugreport.txt: adjust reference to strftime(3)

Vasil Dimov (2):
      range-diff: fix a crash in parsing git-log output
      range-diff: avoid negative string precision

Yang Zhao (12):
      git-p4: make python2.7 the oldest supported version
      git-p4: remove string type aliasing
      git-p4: encode/decode communication with p4 for python3
      git-p4: encode/decode communication with git for python3
      git-p4: convert path to unicode before processing them
      git-p4: open .gitp4-usercache.txt in text mode
      git-p4: use marshal format version 2 when sending to p4
      git-p4: fix freezing while waiting for fast-import progress
      git-p4: use functools.reduce instead of reduce
      git-p4: use dict.items() iteration for python3 compatibility
      git-p4: simplify regex pattern generation for parsing diff-tree
      git-p4: use python3's input() everywhere

brian m. carlson (34):
      builtin/pack-objects: make hash agnostic
      hash: implement and use a context cloning function
      hex: introduce parsing variants taking hash algorithms
      hex: add functions to parse hex object IDs in any algorithm
      repository: require a build flag to use SHA-256
      t: use hash-specific lookup tables to define test constants
      t6300: abstract away SHA-1-specific constants
      t6300: make hash algorithm independent
      t/helper/test-dump-split-index: initialize git repository
      t/helper: initialize repository if necessary
      t/helper: make repository tests hash independent
      setup: allow check_repository_format to read repository format
      builtin/init-db: allow specifying hash algorithm on command line
      builtin/init-db: add environment variable for new repo hash
      init-db: move writing repo version into a function
      worktree: allow repository version 1
      commit: use expected signature header for SHA-256
      fast-import: permit reading multiple marks files
      fast-import: add helper function for inserting mark object entries
      fast-import: make find_marks work on any mark set
      fast-import: add a generic function to iterate over marks
      fast-import: add options for rewriting submodules
      builtin/checkout: pass branch info down to checkout_worktree
      convert: permit passing additional metadata to filter processes
      convert: provide additional metadata to filters
      builtin/checkout: compute checkout metadata for checkouts
      builtin/clone: compute checkout metadata for clones
      builtin/rebase: compute checkout metadata for rebases
      builtin/reset: compute checkout metadata for reset
      t0021: test filter metadata for additional cases
      docs: add a FAQ
      builtin/receive-pack: use constant-time comparison for HMAC value
      credential: fix matching URLs with multiple levels in path
      docs: document credential.helper allowed values

luciano.rocha@booking.com (1):
      freshen_file(): use NULL `times' for implicit current-time

Đoàn Trần Công Danh (35):
      t4061: use POSIX compliant regex(7)
      test-lib-functions: test_cmp: eval $GIT_TEST_CMP
      t5003: drop the subshell in test_lazy_prereq
      t5003: skip conversion test if unzip -a is unavailable
      t5616: use rev-parse instead to get HEAD's object_id
      t7063: drop non-POSIX argument "-ls" from find(1)
      t4124: tweak test so that non-compliant diff(1) can also be used
      t5703: feed raw data into test-tool unpack-sideband
      rebase.c: honour --no-gpg-sign
      cherry-pick/revert: honour --no-gpg-sign in all case
      Documentation: document am --no-gpg-sign
      Documentation: reword commit --no-gpg-sign
      Documentation: merge commit-tree --[no-]gpg-sign
      Documentation: document merge option --no-gpg-sign
      ci/lib-docker: preserve required environment variables
      ci/linux32: parameterise command to switch arch
      ci: refactor docker runner script
      ci/linux32: libify install-dependencies step
      travis: build and test on Linux with musl libc and busybox
      ci/lib: set TERM environment variable if not exist
      ci: explicit install all required packages
      ci: configure GitHub Actions for CI/PR
      t4254: merge 2 steps of a single test
      mailinfo.c: avoid strlen on strings that can contains NUL
      mailinfo: disallow NUL character in mail's header
      date.c: s/is_date/set_date/
      date.c: validate and set time in a helper function
      date.c: skip fractional second part of ISO-8601
      date.c: allow compact version of ISO-8601 datetime
      test-parse-pathspec-file.c: s/0/NULL/ for pointer type
      compat/regex: move stdlib.h up in inclusion chain
      graph.c: limit linkage of internal variable
      progress.c: silence cgcc suggestion about internal linkage
      bloom: fix `make sparse` warning
      t1509: correct i18n test

마누엘 (1):
      interactive: explicitly `fflush` stdout before expecting input


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.27.0-rc0
@ 2020-05-14 23:28  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2020-05-14 23:28 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

An early preview release Git v2.27.0-rc0 is now available for
testing at the usual places.  It is comprised of 479 non-merge
commits since v2.26.0, contributed by 53 people, 16 of which are
new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.27.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.26.0 are as follows.
Welcome to the Git development community!

  Andras Kucsma, Ash Holland, Christopher Warrington, Emma
  Brooks, Jessica Clarke, Jorge Lopez Silva, Julien Moutinho,
  Li Xuejiang, luciano.rocha@booking.com, Matthias Aßhauer,
  Michael F. Schönitzer, Nathan Sanders, Son Luong Ngoc, Terry
  Moschou, Vasil Dimov, and Yang Zhao.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  마누엘, Alban Gruin, Alexandr Miloslavskiy, Alex Henrie,
  Andrei Rybak, Andrew Oakley, Ben Keene, brian m. carlson,
  Carlo Marcelo Arenas Belón, Christian Couder, Damien Robert,
  Denton Liu, Derrick Stolee, Đoàn Trần Công Danh, Elijah
  Newren, Emily Shaffer, Eric Sunshine, Garima Singh, Hans Jerry
  Illikainen, Heba Waly, Jeff King, Jiang Xin, Johannes Schindelin,
  Jonathan Nieder, Jonathan Tan, Josh Steadmon, Junio C Hamano,
  Martin Ågren, Matheus Tavares, Patrick Steinhardt, Philippe
  Blain, Phillip Wood, René Scharfe, Shourya Shukla, SZEDER
  Gábor, Taylor Blau, and Thomas Gummerer.

----------------------------------------------------------------

Git 2.27 Release Notes (draft)
==============================

Updates since v2.26
-------------------

Backward compatibility notes

 * When "git describe C" finds that commit C is pointed by a signed or
   annotated tag, which records T as its tagname in the object, the
   command gives T as its answer.  Even if the user renames or moves
   such a tag from its natural location in the "refs/tags/" hierarchy,
   "git describe C" would still give T as the answer, but in such a
   case "git show T^0" would no longer work as expected.  There may be
   nothing at "refs/tags/T" or even worse there may be a different tag
   instead.

   Starting from this version, "git describe" will always use the
   "long" version, as if the "--long" option were given, when giving
   its output based on such a misplaced tag to work around the problem.

 * "git pull" issues a warning message until the pull.rebase
   configuration variable is explicitly given, which some existing
   users may find annoying---those who prefer not to rebase need to
   set the variable to false to squelch the warning.


UI, Workflows & Features

 * A handful of options to configure SSL when talking to proxies have
   been added.

 * Smudge/clean conversion filters are now given more information
   (e.g. the object of the tree-ish in which the blob being converted
   appears, in addition to its path, which has already been given).

 * When "git describe C" finds an annotated tag with tagname A to be
   the best name to explain commit C, and the tag is stored in a
   "wrong" place in the refs/tags hierarchy, e.g. refs/tags/B, the
   command gave a warning message but used A (not B) to describe C.
   If C is exactly at the tag, the describe output would be "A", but
   "git rev-parse A^0" would not be equal as "git rev-parse C^0".  The
   behavior of the command has been changed to use the "long" form
   i.e. A-0-gOBJECTNAME, which is correctly interpreted by rev-parse.

 * "git pull" learned to warn when no pull.rebase configuration
   exists, and neither --[no-]rebase nor --ff-only is given (which
   would result a merge).

 * "git p4" learned four new hooks and also "--no-verify" option to
   bypass them (and the existing "p4-pre-submit" hook).

 * "git pull" shares many options with underlying "git fetch", but
   some of them were not documented and some of those that would make
   sense to pass down were not passed down.

 * "git rebase" learned the "--no-gpg-sign" option to countermand
   commit.gpgSign the user may have.

 * The output from "git format-patch" uses RFC 2047 encoding for
   non-ASCII letters on From: and Subject: headers, so that it can
   directly be fed to e-mail programs.  A new option has been added
   to produce these headers in raw.

 * "git log" learned "--show-pulls" that helps pathspec limited
   history views; a merge commit that takes the whole change from a
   side branch, which is normally omitted from the output, is shown
   in addition to the commits that introduce real changes.

 * The interactive input from various codepaths are consolidated and
   any prompt possibly issued earlier are fflush()ed before we read.

 * Allow "git rebase" to reapply all local commits, even if the may be
   already in the upstream, without checking first.

 * The 'pack.useSparse' configuration variable now defaults to 'true',
   enabling an optimization that has been experimental since Git 2.21.

 * "git rebase" happens to call some hooks meant for "checkout" and
   "commit" by this was not a designed behaviour than historical
   accident.  This has been documented.

 * "git merge" learns the "--autostash" option.

 * "sparse-checkout" UI improvements.

 * "git update-ref --stdin" learned a handful of new verbs to let the
   user control ref update transactions more explicitly, which helps
   as an ingredient to implement two-phase commit-style atomic
   ref-updates across multiple repositories.

 * "git commit-graph write" learned different ways to write out split
   files.

 * Introduce an extension to the commit-graph to make it efficient to
   check for the paths that were modified at each commit using Bloom
   filters.

 * The approxidate parser learns to parse seconds with fraction and
   ignore fractional part.

 * The userdiff patterns for Markdown documents have been added.

 * The sparse-checkout patterns have been forbidden from excluding all
   paths, leaving an empty working tree, for a long time.  This
   limitation has been lifted.

 * "git restore --staged --worktree" now defaults to take the contents
   out of "HEAD", instead of erring out.

 * "git p4" learned to recover from a (broken) state where a directory
   and a file are recorded at the same path in the Perforce repository
   the same way as their clients do.

 * "git multi-pack-index repack" has been taught to honor some
   repack.* configuration variables.


Performance, Internal Implementation, Development Support etc.

 * The advise API has been revamped to allow more systematic enumeration of
   advice knobs in the future.

 * SHA-256 transition continues.

 * The code to interface with GnuPG has been refactored.

 * "git stash" has kept an escape hatch to use the scripted version
   for a few releases, which got stale.  It has been removed.

 * Enable tests that require GnuPG on Windows.

 * Minor test usability improvement.

 * Trace2 enhancement to allow logging of the environment variables.

 * Test clean-up continues.

 * Perf-test update.

 * A Windows-specific test element has been made more robust against
   misuse from both user's environment and programmer's errors.

 * Various tests have been updated to work around issues found with
   shell utilities that come with busybox etc.

 * The config API made mixed uses of int and size_t types to represent
   length of various pieces of text it parsed, which has been updated
   to use the correct type (i.e. size_t) throughout.

 * The "--decorate-refs" and "--decorate-refs-exclude" options "git
   log" takes have learned a companion configuration variable
   log.excludeDecoration that sits at the lowest priority in the
   family.

 * A new CI job to build and run test suite on linux with musl libc
   has been added.

 * Update the CI configuration to use GitHub Actions, retiring the one
   based on Azure Pipelines.

 * The directory traversal code had redundant recursive calls which
   made its performance characteristics exponential with respect to
   the depth of the tree, which was corrected.

 * "git blame" learns to take advantage of the "changed-paths" Bloom
   filter stored in the commit-graph file.

 * The "bugreport" tool has been added.

 * The object walk with object filter "--filter=tree:0" can now take
   advantage of the pack bitmap when available.

 * Instead of always building all branches at GitHub via Actions,
   users can specify which branches to build.

 * Codepaths that show progress meter have been taught to also use the
   start_progress() and the stop_progress() calls as a "region" to be
   traced.


Fixes since v2.26
-----------------

 * The real_path() convenience function can easily be misused; with a
   bit of code refactoring in the callers' side, its use has been
   eliminated.
   (merge 49d3c4b481 am/real-path-fix later to maint).

 * Update "git p4" to work with Python 3.
   (merge 6bb40ed20a yz/p4-py3 later to maint).

 * The mechanism to prevent "git commit" from making an empty commit
   or amending during an interrupted cherry-pick was broken during the
   rewrite of "git rebase" in C, which has been corrected.
   (merge 430b75f720 pw/advise-rebase-skip later to maint).

 * Fix "git checkout --recurse-submodules" of a nested submodule
   hierarchy.
   (merge 846f34d351 pb/recurse-submodules-fix later to maint).

 * The "--fork-point" mode of "git rebase" regressed when the command
   was rewritten in C back in 2.20 era, which has been corrected.
   (merge f08132f889 at/rebase-fork-point-regression-fix later to maint).

 * The import-tars importer (in contrib/fast-import/) used to create
   phony files at the top-level of the repository when the archive
   contains global PAX headers, which made its own logic to detect and
   omit the common leading directory ineffective, which has been
   corrected.
   (merge c839fcff65 js/import-tars-do-not-make-phony-files-from-pax-headers later to maint).

 * Simplify the commit ancestry connectedness check in a partial clone
   repository in which "promised" objects are assumed to be obtainable
   lazily on-demand from promisor remote repositories.
   (merge 2b98478c6f jt/connectivity-check-optim-in-partial-clone later to maint).

 * The server-end of the v2 protocol to serve "git clone" and "git
   fetch" was not prepared to see a delim packets at unexpected
   places, which led to a crash.
   (merge cacae4329f jk/harden-protocol-v2-delim-handling later to maint).

 * When fed a midx that records no objects, some codepaths tried to
   loop from 0 through (num_objects-1), which, due to integer
   arithmetic wrapping around, made it nonsense operation with out of
   bounds array accesses.  The code has been corrected to reject such
   an midx file.
   (merge 796d61cdc0 dr/midx-avoid-int-underflow later to maint).

 * Utitiles run via the run_command() API were not spawned correctly
   on Cygwin, when the paths to them are given as a full path with
   backslashes.
   (merge 05ac8582bc ak/run-command-on-cygwin-fix later to maint).

 * "git pull --rebase" tried to run a rebase even after noticing that
   the pull results in a fast-forward and no rebase is needed nor
   sensible, for the past few years due to a mistake nobody noticed.
   (merge fbae70ddc6 en/pull-do-not-rebase-after-fast-forwarding later to maint).

 * "git rebase" with the merge backend did not work well when the
   rebase.abbreviateCommands configuration was set.
   (merge de9f1d3ef4 ag/rebase-merge-allow-ff-under-abbrev-command later to maint).

 * The logic to auto-follow tags by "git clone --single-branch" was
   not careful to avoid lazy-fetching unnecessary tags, which has been
   corrected.
   (merge 167a575e2d jk/use-quick-lookup-in-clone-for-tag-following later to maint).

 * "git rebase -i" did not leave the reflog entries correctly.
   (merge 1f6965f994 en/sequencer-reflog-action later to maint).

 * The more aggressive updates to remote-tracking branches we had for
   the past 7 years or so were not reflected in the documentation,
   which has been corrected.
   (merge a44088435c pb/pull-fetch-doc later to maint).

 * We've left the command line parsing of "git log :/a/b/" broken for
   about a full year without anybody noticing, which has been
   corrected.
   (merge 0220461071 jc/missing-ref-store-fix later to maint).

 * Misc fixes for Windows.
   (merge 3efc128cd5 js/mingw-fixes later to maint).

 * "git rebase" (again) learns to honor "--no-keep-empty", which lets
   the user to discard commits that are empty from the beginning (as
   opposed to the ones that become empty because of rebasing).  The
   interactive rebase also marks commits that are empty in the todo.
   (merge 50ed76148a en/rebase-no-keep-empty later to maint).

 * Parsing the host part out of URL for the credential helper has been corrected.
   (merge 4c5971e18a jk/credential-parsing-end-of-host-in-URL later to maint).

 * Document the recommended way to abort a failing test early (e.g. by
   exiting a loop), which is to say "return 1".
   (merge 7cc112dc95 jc/doc-test-leaving-early later to maint).

 * The code that refreshes the last access and modified time of
   on-disk packfiles and loose object files have been updated.
   (merge 312cd76130 lr/freshen-file-fix later to maint).

 * Validation of push certificate has been made more robust against
   timing attacks.
   (merge 719483e547 bc/constant-memequal later to maint).

 * The custom hash function used by "git fast-import" has been
   replaced with the one from hashmap.c, which gave us a nice
   performance boost.
   (merge d8410a816b jk/fast-import-use-hashmap later to maint).

 * The "git submodule" command did not initialize a few variables it
   internally uses and was affected by variable settings leaked from
   the environment.
   (merge 65d100c4dd lx/submodule-clear-variables later to maint).

 * Raise the minimum required version of docbook-xsl package to 1.74,
   as 1.74.0 was from late 2008, which is more than 10 years old, and
   drop compatibility cruft from our documentation suite.
   (merge 3c255ad660 ma/doc-discard-docbook-xsl-1.73 later to maint).

 * "git log" learns "--[no-]mailmap" as a synonym to "--[no-]use-mailmap"
   (merge 88acccda38 jc/log-no-mailmap later to maint).

 * "git commit-graph write --expire-time=<timestamp>" did not use the
   given timestamp correctly, which has been corrected.
   (merge b09b785c78 ds/commit-graph-expiry-fix later to maint).

 * Tests update to use "test-chmtime" instead of "touch -t".
   (merge e892a56845 ds/t5319-touch-fix later to maint).

 * "git diff" in a partial clone learned to avoid lazy loading blob
   objects in more casese when they are not needed.
   (merge 95acf11a3d jt/avoid-prefetch-when-able-in-diff later to maint).

 * "git push --atomic" used to show failures for refs that weren't
   even pushed, which has been corrected.
   (merge dfe1b7f19c jx/atomic-push later to maint).

 * Code in builtin/*, i.e. those can only be called from within
   built-in subcommands, that implements bulk of a couple of
   subcommands have been moved to libgit.a so that they could be used
   by others.
   (merge 9460fd48b5 dl/libify-a-few later to maint).

 * Allowing the user to split a patch hunk while "git stash -p" does
   not work well; a band-aid has been added to make this (partially)
   work better.

 * "git diff-tree --pretty --notes" used to hit an assertion failure,
   as it forgot to initialize the notes subsystem.
   (merge 5778b22b3d tb/diff-tree-with-notes later to maint).

 * "git range-diff" fixes.
   (merge 8d1675eb7f vd/range-diff-with-custom-pretty-format-fix later to maint).

 * "git grep" did not quote a path with unusual character like other
   commands (like "git diff", "git status") do, but did quote when run
   from a subdirectory, both of which has been corrected.
   (merge 45115d8490 mt/grep-cquote-path later to maint).

 * GNU/Hurd is also among the ones that need the fopen() wrapper.
   (merge 274a1328fb jc/gnu-hurd-lets-fread-read-dirs later to maint).

 * Those fetching over protocol v2 from linux-next and other kernel
   repositories are reporting that v2 often fetches way too much than
   needed.
   (merge 11c7f2a30b jn/demote-proto2-from-default later to maint).

 * The upload-pack protocol v2 gave up too early before finding a
   common ancestor, resulting in a wasteful fetch from a fork of a
   project.  This has been corrected to match the behaviour of v0
   protocol.
   (merge 2f0a093dd6 jt/v2-fetch-nego-fix later to maint).

 * The build procedure did not use the libcurl library and its include
   files correctly for a custom-built installation.
   (merge 0573831950 jk/build-with-right-curl later to maint).

 * Tighten "git mailinfo" to notice and error out when decoded result
   contains NUL in it.
   (merge 3919997447 dd/mailinfo-with-nul later to maint).

 * Fix in-core inconsistency after fetching into a shallow repository
   that broke the code to write out commit-graph.
   (merge 37b9dcabfc tb/reset-shallow later to maint).

 * The commit-graph code exhausted file descriptors easily when it
   does not have to.
   (merge c8828530b7 tb/commit-graph-fd-exhaustion-fix later to maint).

 * The multi-pack-index left mmapped file descriptors open when it
   does not have to.
   (merge 6c7ff7cf7f ds/multi-pack-index later to maint).

 * Recent update to Homebrew used by macOS folks breaks build by
   moving gettext library and necessary headers.
   (merge a0b3108618 ds/build-homebrew-gettext-fix later to maint).

 * Incompatible options "--root" and "--fork-point" of "git rebase"
   have been marked and documented as being incompatible.
   (merge a35413c378 en/rebase-root-and-fork-point-are-incompatible later to maint).

 * Error and verbose trace messages from "git push" did not redact
   credential material embedded in URLs.
   (merge d192fa5006 js/anonymise-push-url-in-errors later to maint).

 * Update the parser used for credential.<URL>.<variable>
   configuration, to handle <URL>s with '/' in them correctly.
   (merge b44d0118ac bc/wildcard-credential later to maint).

 * Recent updates broke parsing of "credential.<url>.<key>" where
   <url> is not a full URL (e.g. [credential "https://"] helper = ...)
   stopped working, which has been corrected.
   (merge 9a121b0d22 js/partial-urlmatch-2.17 later to maint).
   (merge cd93e6c029 js/partial-urlmatch later to maint).

 * Some of the files commit-graph subsystem keeps on disk did not
   correctly honor the core.sharedRepository settings and some were
   left read-write.

 * In error messages that "git switch" mentions its option to create a
   new branch, "-b/-B" options were shown, where "-c/-C" options
   should be, which has been corrected.
   (merge 7c16ef7577 dl/switch-c-option-in-error-message later to maint).

 * With the recent tightening of the code that is used to parse
   various parts of a URL for use in the credential subsystem, a
   hand-edited credential-store file causes the credential helper to
   die, which is a bit too harsh to the users.  Demote the error
   behaviour to just ignore and keep using well-formed lines instead.
   (merge c03859a665 cb/credential-store-ignore-bogus-lines later to maint).

 * The samples in the credential documentation has been updated to
   make it clear that we depict what would appear in the .git/config
   file, by adding appropriate quotes as needed..
   (merge 177681a07e jk/credential-sample-update later to maint).

 * "git branch" and other "for-each-ref" variants accepted multiple
   --sort=<key> options in the increasing order of precedence, but it
   had a few breakages around "--ignore-case" handling, and tie-breaking
   with the refname, which have been fixed.
   (merge 7c5045fc18 jk/for-each-ref-multi-key-sort-fix later to maint).

 * The coding guideline for shell scripts instructed to refer to a
   variable with dollar-sign inside arithmetic expansion to work
   around a bug in old versions of dash, which is a thing of the past.
   Now we are not forbidden from writing $((var+1)).
   (merge 32b5fe7f0e jk/arith-expansion-coding-guidelines later to maint).

 * The <stdlib.h> header on NetBSD brings in its own definition of
   hmac() function (eek), which conflicts with our own and unrelated
   function with the same name.  Our function has been renamed to work
   around the issue.
   (merge 3013118eb8 cb/avoid-colliding-with-netbsd-hmac later to maint).

 * The basic test did not honor $TEST_SHELL_PATH setting, which has
   been corrected.
   (merge 0555e4af58 cb/t0000-use-the-configured-shell later to maint).

 * Minor in-code comments and documentation updates around credential
   API.
   (merge 1aed817f99 cb/credential-doc-fixes later to maint).

 * Teach "am", "commit", "merge" and "rebase", when they are run with
   the "--quiet" option, to pass "--quiet" down to "gc --auto".
   (merge 7c3e9e8cfb jc/auto-gc-quiet later to maint).

 * The code to skip unmerged paths in the index when sparse checkout
   is in use would have made out-of-bound access of the in-core index
   when the last path was unmerged, which has been corrected.

 * Serving a "git fetch" client over "git://" and "ssh://" protocols
   using the on-wire protocol version 2 was buggy on the server end
   when the client needs to make a follow-up request to
   e.g. auto-follow tags.
   (merge 08450ef791 cc/upload-pack-v2-fetch-fix later to maint).

 * "git bisect replay" had trouble with input files when they used
   CRLF line ending, which has been corrected.
   (merge 6c722cbe5a cw/bisect-replay-with-dos later to maint).

 * "rebase -i" segfaulted when rearranging a sequence that has a
   fix-up that applies another fix-up (which may or may not be a
   fix-up of yet another step).
   (merge 02471e7e20 js/rebase-autosquash-double-fixup-fix later to maint).

 * "git fsck" ensures that the paths recorded in tree objects are
   sorted and without duplicates, but it failed to notice a case where
   a blob is followed by entries that sort before a tree with the same
   name.  This has been corrected.
   (merge 9068cfb20f rs/fsck-duplicate-names-in-trees later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 564956f358 jc/maintain-doc later to maint).
   (merge 7422b2a0a1 sg/commit-slab-clarify-peek later to maint).
   (merge 9c688735f6 rs/doc-passthru-fetch-options later to maint).
   (merge 757c2ba3e2 en/oidset-uninclude-hashmap later to maint).
   (merge 8312aa7d74 jc/config-tar later to maint).
   (merge d00a5bdd50 ss/submodule-foreach-cb later to maint).
   (merge 64d1022e14 ar/test-style-fixes later to maint).
   (merge 4a465443a6 ds/doc-clone-filter later to maint).
   (merge bb2dbe301b jk/t3419-drop-expensive-tests later to maint).
   (merge d3507cc712 js/test-junit-finalization-fix later to maint).
   (merge 2149b6748f bc/faq later to maint).
   (merge 12dc0879f1 jk/test-cleanup later to maint).
   (merge 344420bf0f pb/rebase-doc-typofix later to maint).
   (merge 7cd54d37dc dl/wrapper-fix-indentation later to maint).
   (merge 78725ebda9 jc/allow-strlen-substitution-in-shell-scripts later to maint).
   (merge 2ecfcdecc6 jm/gitweb-fastcgi-utf8 later to maint).
   (merge 0740d0a5d3 jk/oid-array-cleanups later to maint).
   (merge a1aba0c95c js/t0007-typofix later to maint).
   (merge 76ba7fa225 ma/config-doc-fix later to maint).
   (merge 826f0c0df2 js/subtree-doc-update-to-asciidoctor-2 later to maint).
   (merge 88eaf361e0 eb/mboxrd-doc later to maint).
   (merge 051cc54941 tm/zsh-complete-switch-restore later to maint).
   (merge 39102cf4fe ms/doc-revision-illustration-fix later to maint).
   (merge 4d9378bfad eb/gitweb-more-trailers later to maint).
   (merge bdccbf7047 mt/doc-worktree-ref later to maint).
   (merge ce9baf234f dl/push-recurse-submodules-fix later to maint).
   (merge 4153274052 bc/doc-credential-helper-value later to maint).
   (merge 5c7bb0146e jc/codingstyle-compare-with-null later to maint).

----------------------------------------------------------------

Changes since v2.26.0 are as follows:

Alban Gruin (3):
      sequencer: mark messages for translation
      sequencer: don't abbreviate a command if it doesn't have a short form
      t3432: test `--merge' with `rebase.abbreviateCommands = true', too

Alex Henrie (1):
      pull: warn if the user didn't say whether to rebase or to merge

Alexandr Miloslavskiy (4):
      set_git_dir: fix crash when used with real_path()
      real_path: remove unsafe API
      real_path_if_valid(): remove unsafe API
      get_superproject_working_tree(): return strbuf

Andras Kucsma (1):
      run-command: trigger PATH lookup properly on Cygwin

Andrei Rybak (2):
      t9500: remove spaces after redirect operators
      t: fix whitespace around &&

Andrew Oakley (1):
      git-p4: recover from inconsistent perforce history

Ash Holland (1):
      userdiff: support Markdown

Ben Keene (8):
      git-p4: change the expansion test from basestring to list
      git-p4: rewrite prompt to be Windows compatible
      git-p4: create new function run_git_hook
      git-p4: add p4-pre-submit exit text
      git-p4: add --no-verify option
      git-p4: restructure code in submit
      git-p4: add p4 submit hooks
      git-p4: add RCS keyword status message

Carlo Marcelo Arenas Belón (8):
      credential-store: ignore bogus lines from store file
      credential: update description for credential_from_url_gently
      credential: correct order of parameters for credential_match
      builtin/receive-pack: avoid generic function name hmac()
      t/t0000-basic: make sure subtests also use TEST_SHELL_PATH
      t/test_lib: avoid naked bash arrays in file_lineno
      credential: update gitcredentials documentation
      credential: document protocol updates

Christian Couder (1):
      upload-pack: clear filter_options for each v2 fetch command

Christopher Warrington (1):
      bisect: allow CRLF line endings in "git bisect replay" input

Damien Robert (6):
      midx.c: fix an integer underflow
      doc: list all commands affected by submodule.recurse
      doc: document --recurse-submodules for reset and restore
      doc: explain how to deactivate submodule.recurse completely
      doc: be more precise on (fetch|push).recurseSubmodules
      doc: --recurse-submodules mostly applies to active submodules

Denton Liu (45):
      Makefile: ASCII-sort += lists
      t7600: use test_write_lines()
      Lib-ify fmt-merge-msg
      Lib-ify prune-packed
      t5512: don't use `test_must_fail test_cmp`
      t5512: stop losing git exit code in here-docs
      t5512: stop losing return codes of git commands
      t5550: simplify no matching line check
      t5607: reorder `nongit test_must_fail`
      t5612: don't use `test_must_fail test_cmp`
      t5612: stop losing return codes of git commands
      t5801: teach compare_refs() to accept !
      wrapper: indent with tabs
      sequencer: stop leaking buf
      sequencer: make file exists check more efficient
      sequencer: make read_oneliner() accept flags
      sequencer: configurably warn on non-existent files
      sequencer: make read_oneliner() extern
      rebase: use read_oneliner()
      sequencer: make apply_autostash() accept a path
      sequencer: rename stash_sha1 to stash_oid
      rebase: use apply_autostash() from sequencer.c
      rebase: generify reset_head()
      reset: extract reset_head() from rebase
      rebase: extract create_autostash()
      rebase: generify create_autostash()
      sequencer: extract perform_autostash() from rebase
      sequencer: unlink autostash in apply_autostash()
      sequencer: implement save_autostash()
      sequencer: implement apply_autostash_oid()
      merge: teach --autostash option
      t5520: make test_pull_autostash() accept expect_parent_num
      pull: pass --autostash to merge
      t6030: use test_path_is_missing()
      t7408: replace incorrect uses of test_must_fail
      t7508: don't use `test_must_fail test_cmp`
      t9141: use test_path_is_missing()
      t9160: use test_path_is_missing()
      t9164: use test_must_fail only on git commands
      t9819: don't use test_must_fail with p4
      Use OPT_CALLBACK and OPT_CALLBACK_F
      push: unset PARSE_OPT_OPTARG for --recurse-submodules
      rebase: save autostash entry into stash reflog on --quit
      switch: fix errors and comments related to -c and -C
      Doc: reference the "stash list" in autostash docs

Derrick Stolee (25):
      connected.c: reprepare packs for corner cases
      config: set pack.useSparse=true by default
      pack-objects: flip the use of GIT_TEST_PACK_SPARSE
      clone: document --filter options
      diff: halt tree-diff early after max_changes
      dir: refactor treat_directory to clarify control flow
      commit-graph: fix buggy --expire-time option
      t5319: replace 'touch -m' with 'test-tool chmtime'
      bloom: ignore renames when computing changed paths
      revision: --show-pulls adds helpful merges
      log-tree: make ref_filter_match() a helper method
      log: add log.excludeDecoration config option
      revision: complicated pathspecs disable filters
      tests: write commit-graph with Bloom filters
      blame: use changed-path Bloom filters
      multi-pack-index: close file descriptor after mmap
      bloom: fix whitespace around tab length
      test-bloom: fix usage typo
      sparse-checkout: stop blocking empty workdirs
      unpack-trees: avoid array out-of-bounds error
      multi-pack-index: respect repack.packKeptObjects=false
      bloom: parse commit before computing filters
      Documentation: changed-path Bloom filters use byte words
      bloom: de-duplicate directory entries
      bloom: use num_changes not nr for limit detection

Elijah Newren (37):
      oidset: remove unnecessary include
      unpack-trees: fix minor typo in comment
      unpack-trees: remove unused error type
      unpack-trees: simplify verify_absent_sparse()
      unpack-trees: simplify pattern_list freeing
      t1091: make some tests a little more defensive against failures
      unpack-trees: allow check_updates() to work on a different index
      unpack-trees: do not mark a dirty path with SKIP_WORKTREE
      unpack-trees: pull sparse-checkout pattern reading into a new function
      unpack-trees: add a new update_sparsity() function
      sparse-checkout: use new update_sparsity() function
      sparse-checkout: use improved unpack_trees porcelain messages
      unpack-trees: move ERROR_WOULD_LOSE_SUBMODULE earlier
      unpack-trees: rename ERROR_* fields meant for warnings to WARNING_*
      unpack-trees: split display_error_msgs() into two
      unpack-trees: make sparse path messages sound like warnings
      unpack-trees: provide warnings on sparse updates for unmerged paths too
      unpack-trees: failure to set SKIP_WORKTREE bits always just a warning
      sparse-checkout: provide a new reapply subcommand
      pull: avoid running both merge and rebase
      t7063: more thorough status checking
      t3000: add more testcases testing a variety of ls-files issues
      dir: fix simple typo in comment
      dir: consolidate treat_path() and treat_one_path()
      dir: fix broken comment
      dir: fix confusion based on variable tense
      dir: replace exponential algorithm with a linear one
      dir: include DIR_KEEP_UNTRACKED_CONTENTS handling in treat_directory()
      dir: replace double pathspec matching with single in treat_directory()
      Fix error-prone fill_directory() API; make it only return matches
      completion: fix 'git add' on paths under an untracked directory
      git-rebase.txt: add another hook to the hooks section, and explain more
      sequencer: honor GIT_REFLOG_ACTION
      rebase -i: mark commits that begin empty in todo editor
      rebase: reinstate --no-keep-empty
      rebase: fix an incompatible-options error message
      rebase: display an error if --root and --fork-point are both provided

Emily Shaffer (8):
      help: move list_config_help to builtin/help
      bugreport: add tool to generate debugging info
      bugreport: gather git version and build info
      bugreport: add uname info
      bugreport: add compiler info
      bugreport: drop extraneous includes
      bugreport: collect list of populated hooks
      trace2: log progress time and throughput

Emma Brooks (3):
      format-patch: teach --no-encode-email-headers
      Documentation: explain "mboxrd" pretty format
      gitweb: Recognize *-to and Closes/Fixes trailers

Eric Sunshine (1):
      restore: default to HEAD when combining --staged and --worktree

Garima Singh (13):
      commit-graph: define and use MAX_NUM_CHUNKS
      bloom.c: add the murmur3 hash implementation
      bloom.c: introduce core Bloom filter constructs
      bloom.c: core Bloom filter implementation for changed paths.
      commit-graph: compute Bloom filters for changed paths
      commit-graph: examine commits by generation number
      commit-graph: write Bloom filters to commit graph file
      commit-graph: reuse existing Bloom filters during write
      commit-graph: add --changed-paths option to write subcommand
      revision.c: use Bloom filters to speed up path based revision walks
      revision.c: add trace2 stats around Bloom filter usage
      t4216: add end to end tests for git log with Bloom filters
      commit-graph: add GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS test flag

Hans Jerry Illikainen (2):
      t: increase test coverage of signature verification output
      gpg-interface: prefer check_signature() for GPG verification

Heba Waly (4):
      advice: extract vadvise() from advise()
      advice: change "setupStreamFailure" to "setUpstreamFailure"
      advice: revamp advise API
      tag: use new advice API to check visibility

Jeff King (51):
      credential: avoid writing values with newlines
      t/lib-credential: use test_i18ncmp to check stderr
      credential: detect unrepresentable values when parsing urls
      fsck: detect gitmodules URLs with embedded newlines
      t3419: drop EXPENSIVE tests
      t/lib-credential.sh: drop shebang line
      t/lib-*.sh: drop executable bit
      test-lib-functions: make packetize() more efficient
      upload-pack: handle unexpected delim packets
      p5310: stop timing non-bitmap pack-to-disk
      Makefile: avoid running curl-config multiple times
      Makefile: use curl-config --cflags
      test-lib-functions: simplify packetize() stdin code
      commit-graph: examine changed-path objects in pack order
      oid_array: use size_t for count and allocation
      oid_array: use size_t for iteration
      oid_array: rename source file from sha1-array
      test-tool: rename sha1-array to oid-array
      bisect: stop referring to sha1_array
      ref-filter: stop referring to "sha1 array"
      oidset: stop referring to sha1-array
      clone: use "quick" lookup while following tags
      Makefile: avoid running curl-config unnecessarily
      fast-import: replace custom hash with hashmap.c
      repository: mark the "refs" pointer as private
      remote: drop auto-strlen behavior of make_branch() and make_rewrite()
      parse_config_key(): return subsection len as size_t
      config: drop useless length variable in write_pair()
      git_config_parse_key(): return baselen as size_t
      config: use size_t to store parsed variable baselen
      config: reject parsing of files over INT_MAX
      credential: treat "?" and "#" in URLs as end of host
      t0300: make "quit" helper more realistic
      t0300: use more realistic inputs
      credential: parse URL without host as empty host, not unset
      credential: refuse to operate when missing host or protocol
      credential: die() when parsing invalid urls
      Git 2.17.5
      blame: drop unused parameter from maybe_changed_path
      test-bloom: fix some whitespace issues
      test-bloom: check that we have expected arguments
      commit-graph: close descriptors after mmap
      t0000: disable GIT_TEST_FAIL_PREREQS in sub-tests
      gitcredentials(7): clarify quoting of helper examples
      gitcredentials(7): make shell-snippet example more realistic
      CodingGuidelines: drop arithmetic expansion advice to use "$x"
      ref-filter: apply --ignore-case to all sorting keys
      ref-filter: apply fallback refname sort only after all user sorts
      list-objects-filter: treat NULL filter_options as "disabled"
      pack-bitmap: pass object filter to fill-in traversal
      ci: allow per-branch config for GitHub Actions

Jessica Clarke (1):
      config.mak.uname: Define FREAD_READS_DIRECTORIES for GNU/Hurd

Jiang Xin (5):
      send-pack: fix inconsistent porcelain output
      t5543: never report what we do not push
      send-pack: mark failure of atomic push properly
      transport-helper: mark failure for atomic push
      transport-helper: new method reject_atomic_push()

Johannes Schindelin (36):
      cherry-pick: add test for `--skip` advice in `git commit`
      tests(junit-xml): avoid invalid XML
      import-tars: ignore the global PAX header
      tests(gpg): allow the gpg-agent to start on Windows
      t/lib-gpg.sh: stop pretending to be a stand-alone script
      tests: do not let lazy prereqs inside `test_expect_*` turn off tracing
      tests: turn GPG, GPGSM and RFC1991 into lazy prereqs
      tests: increase the verbosity of the GPG-related prereqs
      MyFirstObjectWalk: remove unnecessary conditional statement
      t0007: fix a typo
      ci/lib: if CI type is unknown, show the environment variables
      ci/lib: allow running in GitHub Actions
      ci: fix the `jobname` of the `GETTEXT_POISON` job
      subtree: fix build with AsciiDoctor 2
      mingw: do not treat `COM0` as a reserved file name
      t3904: fix incorrect demonstration of a bug
      stash -p: (partially) fix bug concerning split hunks
      mingw: help debugging by optionally executing bash with strace
      interactive: refactor code asking the user for interactive input
      ci: run gem with sudo to install asciidoctor
      README: add a build badge for the GitHub Actions runs
      ci: retire the Azure Pipelines definition
      tests: when run in Bash, annotate test failures with file name/line number
      ci: add a problem matcher for GitHub Actions
      ci: let GitHub Actions upload failed tests' directories
      t: consolidate the `is_hidden` functions
      mingw: make test_path_is_hidden more robust
      t: restrict `is_hidden` to be called only on Windows
      credential: fix grammar
      credential: optionally allow partial URLs in credential_from_url_gently()
      credential: optionally allow partial URLs in credential_from_url_gently()
      credential: handle `credential.<partial-URL>.<key>` again
      macOS/brew: let the build find gettext headers/libraries/msgfmt
      push: anonymize URLs in error messages and warnings
      credential: handle `credential.<partial-URL>.<key>` again
      rebase --autosquash: fix a potential segfault

Jonathan Nieder (5):
      fsck: convert gitmodules url to URL passed to curl
      credential: treat URL without scheme as invalid
      credential: treat URL with empty scheme as invalid
      fsck: reject URL with empty host in .gitmodules
      Revert "fetch: default to protocol version 2"

Jonathan Tan (11):
      connected: always use partial clone optimization
      promisor-remote: accept 0 as oid_nr in function
      diff: make diff_populate_filespec_options struct
      diff: refactor object read
      diff: restrict when prefetching occurs
      rebase --merge: optionally skip upstreamed commits
      fetch-pack: return enum from process_acks()
      fetch-pack: in protocol v2, in_vain only after ACK
      fetch-pack: in protocol v2, reset in_vain upon ACK
      commit-graph: avoid memory leaks
      t5500: count objects through stderr, not trace

Jorge Lopez Silva (2):
      http: add client cert support for HTTPS proxies
      http: add environment variable support for HTTPS proxies

Josh Steadmon (1):
      trace2: teach Git to log environment variables

Julien Moutinho (1):
      gitweb: fix UTF-8 encoding when using CGI::Fast

Junio C Hamano (27):
      rebase: --fork-point regression fix
      describe: force long format for a name based on a mislocated tag
      update how-to-maintain-git
      parse-options: teach "git cmd -h" to show alias as alias
      clone: reorder --recursive/--recurse-submodules
      log: give --[no-]use-mailmap a more sensible synonym --[no-]mailmap
      Git 2.17.4
      separate tar.* config to its own source file
      The first batch post 2.26 cycle
      The second batch post 2.26 cycle
      t/README: suggest how to leave test early with failure
      CodingGuidelines: allow ${#posix} == strlen($posix)
      sha1-name: do not assume that the ref store is initialized
      receive-pack: compilation fix
      The third batch
      The fourth batch
      credential-store: document the file format a bit more
      Revert "commit-graph.c: introduce '--[no-]check-oids'"
      The fifth batch
      The sixth batch
      The seventh batch
      auto-gc: extract a reusable helper from "git fetch"
      auto-gc: pass --quiet down from am, commit, merge and rebase
      CodingGuidelines: do not ==/!= compare with 0 or '\0' or NULL
      The eighth batch
      The ninth batch
      Git 2.27-rc0

Li Xuejiang (1):
      git-submodule.sh: setup uninitialized variables

Martin Ågren (9):
      Doc: drop support for docbook-xsl before 1.71.1
      Doc: drop support for docbook-xsl before 1.72.0
      Doc: drop support for docbook-xsl before 1.73.0
      manpage-bold-literal.xsl: stop using git.docbook.backslash
      manpage-normal.xsl: fold in manpage-base.xsl
      INSTALL: drop support for docbook-xsl before 1.74
      user-manual.conf: don't specify [listingblock]
      config.txt: move closing "----" to cover entire listing
      merge: use skip_prefix to parse config key

Matheus Tavares (3):
      test-lib: allow short options to be bundled
      grep: follow conventions for printing paths w/ unusual chars
      config doc: fix reference to config.worktree info

Matthias Aßhauer (1):
      mingw: use modern strftime implementation if possible

Michael F. Schönitzer (1):
      docs: fix minor glitch in illustration

Nathan Sanders (1):
      mingw: cope with the Isilon network file system

Patrick Steinhardt (9):
      refs: fix segfault when aborting empty transaction
      git-update-ref.txt: add missing word
      strbuf: provide function to append whole lines
      update-ref: organize commands in an array
      update-ref: drop unused argument for `parse_refname`
      update-ref: pass end pointer instead of strbuf
      update-ref: move transaction handling into `update_refs_stdin()`
      update-ref: read commands in a line-wise fashion
      update-ref: implement interactive transaction handling

Philippe Blain (9):
      t7112: remove mention of KNOWN_FAILURE_SUBMODULE_RECURSIVE_NESTED
      t/lib-submodule-update: remove outdated test description
      t/lib-submodule-update: move a test to the right section
      unpack-trees: remove outdated description for verify_clean_submodule
      unpack-trees: check for missing submodule directory in merged_entry
      t/lib-submodule-update: add test removing nested submodules
      git-rebase.txt: fix typo
      pull doc: refer to a specific section in 'fetch' doc
      pull doc: correct outdated description of an example

Phillip Wood (6):
      t3404: use test_cmp_rev
      cherry-pick: check commit error messages
      sequencer: write CHERRY_PICK_HEAD for reword and edit
      commit: use enum value for multiple cherry-picks
      commit: encapsulate determine_whence() for sequencer
      commit: give correct advice for empty commit during a rebase

René Scharfe (4):
      pull: document more passthru options
      pull: remove --update-head-ok from documentation
      pull: pass documented fetch options on
      fsck: report non-consecutive duplicate names in trees

SZEDER Gábor (4):
      ci: use python3 in linux-gcc and osx-gcc and python2 elsewhere
      commit-slab: clarify slabname##_peek()'s return value
      ci: make MAKEFLAGS available inside the Docker container in the Linux32 job
      completion: offer '--(no-)patch' among 'git log' options

Shourya Shukla (4):
      submodule--helper.c: Rename 'cb_foreach' to 'foreach_cb'
      gitfaq: files in .gitignore are tracked
      gitfaq: fetching and pulling a repository
      submodule: port subcommand 'set-url' from shell to C

Son Luong Ngoc (1):
      midx: teach "git multi-pack-index repack" honor "git repack" configurations

Taylor Blau (24):
      t/helper/test-read-graph.c: support commit-graph chains
      builtin/commit-graph.c: support for '--split[=<strategy>]'
      builtin/commit-graph.c: introduce split strategy 'no-merge'
      builtin/commit-graph.c: introduce split strategy 'replace'
      oidset: introduce 'oidset_size'
      commit-graph.h: replace 'commit_hex' with 'commits'
      commit-graph.c: introduce '--[no-]check-oids'
      diff-tree.c: load notes machinery when required
      commit-graph.c: don't use discarded graph_name in error
      t/test-lib.sh: make ULIMIT_FILE_DESCRIPTORS available to tests
      commit-graph.c: gracefully handle file descriptor exhaustion
      t5537: use test_write_lines and indented heredocs for readability
      shallow.c: use '{commit,rollback}_shallow_file'
      tempfile.c: introduce 'create_tempfile_mode'
      lockfile.c: introduce 'hold_lock_file_for_update_mode'
      commit-graph.c: write non-split graphs as read-only
      commit-graph.c: ensure graph layers respect core.sharedRepository
      commit-graph.c: make 'commit-graph-chain's read-only
      commit: make 'commit_graft_pos' non-static
      shallow: extract a header file for shallow-related functions
      shallow.h: document '{commit,rollback}_shallow_file'
      shallow: use struct 'shallow_lock' for additional safety
      pack-bitmap.c: make object filtering functions generic
      pack-bitmap.c: support 'tree:0' filtering

Terry Moschou (1):
      complete: zsh: add missing sub cmd completion candidates

Thomas Gummerer (2):
      stash: get git_stash_config at the top level
      stash: remove the stash.useBuiltin setting

Vasil Dimov (2):
      range-diff: fix a crash in parsing git-log output
      range-diff: avoid negative string precision

Yang Zhao (12):
      git-p4: make python2.7 the oldest supported version
      git-p4: remove string type aliasing
      git-p4: encode/decode communication with p4 for python3
      git-p4: encode/decode communication with git for python3
      git-p4: convert path to unicode before processing them
      git-p4: open .gitp4-usercache.txt in text mode
      git-p4: use marshal format version 2 when sending to p4
      git-p4: fix freezing while waiting for fast-import progress
      git-p4: use functools.reduce instead of reduce
      git-p4: use dict.items() iteration for python3 compatibility
      git-p4: simplify regex pattern generation for parsing diff-tree
      git-p4: use python3's input() everywhere

brian m. carlson (34):
      builtin/pack-objects: make hash agnostic
      hash: implement and use a context cloning function
      hex: introduce parsing variants taking hash algorithms
      hex: add functions to parse hex object IDs in any algorithm
      repository: require a build flag to use SHA-256
      t: use hash-specific lookup tables to define test constants
      t6300: abstract away SHA-1-specific constants
      t6300: make hash algorithm independent
      t/helper/test-dump-split-index: initialize git repository
      t/helper: initialize repository if necessary
      t/helper: make repository tests hash independent
      setup: allow check_repository_format to read repository format
      builtin/init-db: allow specifying hash algorithm on command line
      builtin/init-db: add environment variable for new repo hash
      init-db: move writing repo version into a function
      worktree: allow repository version 1
      commit: use expected signature header for SHA-256
      fast-import: permit reading multiple marks files
      fast-import: add helper function for inserting mark object entries
      fast-import: make find_marks work on any mark set
      fast-import: add a generic function to iterate over marks
      fast-import: add options for rewriting submodules
      builtin/checkout: pass branch info down to checkout_worktree
      convert: permit passing additional metadata to filter processes
      convert: provide additional metadata to filters
      builtin/checkout: compute checkout metadata for checkouts
      builtin/clone: compute checkout metadata for clones
      builtin/rebase: compute checkout metadata for rebases
      builtin/reset: compute checkout metadata for reset
      t0021: test filter metadata for additional cases
      docs: add a FAQ
      builtin/receive-pack: use constant-time comparison for HMAC value
      credential: fix matching URLs with multiple levels in path
      docs: document credential.helper allowed values

luciano.rocha@booking.com (1):
      freshen_file(): use NULL `times' for implicit current-time

Đoàn Trần Công Danh (34):
      t4061: use POSIX compliant regex(7)
      test-lib-functions: test_cmp: eval $GIT_TEST_CMP
      t5003: drop the subshell in test_lazy_prereq
      t5003: skip conversion test if unzip -a is unavailable
      t5616: use rev-parse instead to get HEAD's object_id
      t7063: drop non-POSIX argument "-ls" from find(1)
      t4124: tweak test so that non-compliant diff(1) can also be used
      t5703: feed raw data into test-tool unpack-sideband
      rebase.c: honour --no-gpg-sign
      cherry-pick/revert: honour --no-gpg-sign in all case
      Documentation: document am --no-gpg-sign
      Documentation: reword commit --no-gpg-sign
      Documentation: merge commit-tree --[no-]gpg-sign
      Documentation: document merge option --no-gpg-sign
      ci/lib-docker: preserve required environment variables
      ci/linux32: parameterise command to switch arch
      ci: refactor docker runner script
      ci/linux32: libify install-dependencies step
      travis: build and test on Linux with musl libc and busybox
      ci/lib: set TERM environment variable if not exist
      ci: explicit install all required packages
      ci: configure GitHub Actions for CI/PR
      t4254: merge 2 steps of a single test
      mailinfo.c: avoid strlen on strings that can contains NUL
      mailinfo: disallow NUL character in mail's header
      date.c: s/is_date/set_date/
      date.c: validate and set time in a helper function
      date.c: skip fractional second part of ISO-8601
      date.c: allow compact version of ISO-8601 datetime
      test-parse-pathspec-file.c: s/0/NULL/ for pointer type
      compat/regex: move stdlib.h up in inclusion chain
      graph.c: limit linkage of internal variable
      progress.c: silence cgcc suggestion about internal linkage
      bloom: fix `make sparse` warning

마누엘 (1):
      interactive: explicitly `fflush` stdout before expecting input


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.27.0-rc0
@ 2020-05-14 23:27  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2020-05-14 23:27 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

An early preview release Git v2.27.0-rc0 is now available for
testing at the usual places.  It is comprised of 479 non-merge
commits since v2.26.0, contributed by 53 people, 16 of which are
new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.27.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.26.0 are as follows.
Welcome to the Git development community!

  Andras Kucsma, Ash Holland, Christopher Warrington, Emma
  Brooks, Jessica Clarke, Jorge Lopez Silva, Julien Moutinho,
  Li Xuejiang, luciano.rocha@booking.com, Matthias Aßhauer,
  Michael F. Schönitzer, Nathan Sanders, Son Luong Ngoc, Terry
  Moschou, Vasil Dimov, and Yang Zhao.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  마누엘, Alban Gruin, Alexandr Miloslavskiy, Alex Henrie,
  Andrei Rybak, Andrew Oakley, Ben Keene, brian m. carlson,
  Carlo Marcelo Arenas Belón, Christian Couder, Damien Robert,
  Denton Liu, Derrick Stolee, Đoàn Trần Công Danh, Elijah
  Newren, Emily Shaffer, Eric Sunshine, Garima Singh, Hans Jerry
  Illikainen, Heba Waly, Jeff King, Jiang Xin, Johannes Schindelin,
  Jonathan Nieder, Jonathan Tan, Josh Steadmon, Junio C Hamano,
  Martin Ågren, Matheus Tavares, Patrick Steinhardt, Philippe
  Blain, Phillip Wood, René Scharfe, Shourya Shukla, SZEDER
  Gábor, Taylor Blau, and Thomas Gummerer.

----------------------------------------------------------------

Git 2.27 Release Notes (draft)
==============================

Updates since v2.26
-------------------

Backward compatibility notes

 * When "git describe C" finds that commit C is pointed by a signed or
   annotated tag, which records T as its tagname in the object, the
   command gives T as its answer.  Even if the user renames or moves
   such a tag from its natural location in the "refs/tags/" hierarchy,
   "git describe C" would still give T as the answer, but in such a
   case "git show T^0" would no longer work as expected.  There may be
   nothing at "refs/tags/T" or even worse there may be a different tag
   instead.

   Starting from this version, "git describe" will always use the
   "long" version, as if the "--long" option were given, when giving
   its output based on such a misplaced tag to work around the problem.

 * "git pull" issues a warning message until the pull.rebase
   configuration variable is explicitly given, which some existing
   users may find annoying---those who prefer not to rebase need to
   set the variable to false to squelch the warning.


UI, Workflows & Features

 * A handful of options to configure SSL when talking to proxies have
   been added.

 * Smudge/clean conversion filters are now given more information
   (e.g. the object of the tree-ish in which the blob being converted
   appears, in addition to its path, which has already been given).

 * When "git describe C" finds an annotated tag with tagname A to be
   the best name to explain commit C, and the tag is stored in a
   "wrong" place in the refs/tags hierarchy, e.g. refs/tags/B, the
   command gave a warning message but used A (not B) to describe C.
   If C is exactly at the tag, the describe output would be "A", but
   "git rev-parse A^0" would not be equal as "git rev-parse C^0".  The
   behavior of the command has been changed to use the "long" form
   i.e. A-0-gOBJECTNAME, which is correctly interpreted by rev-parse.

 * "git pull" learned to warn when no pull.rebase configuration
   exists, and neither --[no-]rebase nor --ff-only is given (which
   would result a merge).

 * "git p4" learned four new hooks and also "--no-verify" option to
   bypass them (and the existing "p4-pre-submit" hook).

 * "git pull" shares many options with underlying "git fetch", but
   some of them were not documented and some of those that would make
   sense to pass down were not passed down.

 * "git rebase" learned the "--no-gpg-sign" option to countermand
   commit.gpgSign the user may have.

 * The output from "git format-patch" uses RFC 2047 encoding for
   non-ASCII letters on From: and Subject: headers, so that it can
   directly be fed to e-mail programs.  A new option has been added
   to produce these headers in raw.

 * "git log" learned "--show-pulls" that helps pathspec limited
   history views; a merge commit that takes the whole change from a
   side branch, which is normally omitted from the output, is shown
   in addition to the commits that introduce real changes.

 * The interactive input from various codepaths are consolidated and
   any prompt possibly issued earlier are fflush()ed before we read.

 * Allow "git rebase" to reapply all local commits, even if the may be
   already in the upstream, without checking first.

 * The 'pack.useSparse' configuration variable now defaults to 'true',
   enabling an optimization that has been experimental since Git 2.21.

 * "git rebase" happens to call some hooks meant for "checkout" and
   "commit" by this was not a designed behaviour than historical
   accident.  This has been documented.

 * "git merge" learns the "--autostash" option.

 * "sparse-checkout" UI improvements.

 * "git update-ref --stdin" learned a handful of new verbs to let the
   user control ref update transactions more explicitly, which helps
   as an ingredient to implement two-phase commit-style atomic
   ref-updates across multiple repositories.

 * "git commit-graph write" learned different ways to write out split
   files.

 * Introduce an extension to the commit-graph to make it efficient to
   check for the paths that were modified at each commit using Bloom
   filters.

 * The approxidate parser learns to parse seconds with fraction and
   ignore fractional part.

 * The userdiff patterns for Markdown documents have been added.

 * The sparse-checkout patterns have been forbidden from excluding all
   paths, leaving an empty working tree, for a long time.  This
   limitation has been lifted.

 * "git restore --staged --worktree" now defaults to take the contents
   out of "HEAD", instead of erring out.

 * "git p4" learned to recover from a (broken) state where a directory
   and a file are recorded at the same path in the Perforce repository
   the same way as their clients do.

 * "git multi-pack-index repack" has been taught to honor some
   repack.* configuration variables.


Performance, Internal Implementation, Development Support etc.

 * The advise API has been revamped to allow more systematic enumeration of
   advice knobs in the future.

 * SHA-256 transition continues.

 * The code to interface with GnuPG has been refactored.

 * "git stash" has kept an escape hatch to use the scripted version
   for a few releases, which got stale.  It has been removed.

 * Enable tests that require GnuPG on Windows.

 * Minor test usability improvement.

 * Trace2 enhancement to allow logging of the environment variables.

 * Test clean-up continues.

 * Perf-test update.

 * A Windows-specific test element has been made more robust against
   misuse from both user's environment and programmer's errors.

 * Various tests have been updated to work around issues found with
   shell utilities that come with busybox etc.

 * The config API made mixed uses of int and size_t types to represent
   length of various pieces of text it parsed, which has been updated
   to use the correct type (i.e. size_t) throughout.

 * The "--decorate-refs" and "--decorate-refs-exclude" options "git
   log" takes have learned a companion configuration variable
   log.excludeDecoration that sits at the lowest priority in the
   family.

 * A new CI job to build and run test suite on linux with musl libc
   has been added.

 * Update the CI configuration to use GitHub Actions, retiring the one
   based on Azure Pipelines.

 * The directory traversal code had redundant recursive calls which
   made its performance characteristics exponential with respect to
   the depth of the tree, which was corrected.

 * "git blame" learns to take advantage of the "changed-paths" Bloom
   filter stored in the commit-graph file.

 * The "bugreport" tool has been added.

 * The object walk with object filter "--filter=tree:0" can now take
   advantage of the pack bitmap when available.

 * Instead of always building all branches at GitHub via Actions,
   users can specify which branches to build.

 * Codepaths that show progress meter have been taught to also use the
   start_progress() and the stop_progress() calls as a "region" to be
   traced.


Fixes since v2.26
-----------------

 * The real_path() convenience function can easily be misused; with a
   bit of code refactoring in the callers' side, its use has been
   eliminated.
   (merge 49d3c4b481 am/real-path-fix later to maint).

 * Update "git p4" to work with Python 3.
   (merge 6bb40ed20a yz/p4-py3 later to maint).

 * The mechanism to prevent "git commit" from making an empty commit
   or amending during an interrupted cherry-pick was broken during the
   rewrite of "git rebase" in C, which has been corrected.
   (merge 430b75f720 pw/advise-rebase-skip later to maint).

 * Fix "git checkout --recurse-submodules" of a nested submodule
   hierarchy.
   (merge 846f34d351 pb/recurse-submodules-fix later to maint).

 * The "--fork-point" mode of "git rebase" regressed when the command
   was rewritten in C back in 2.20 era, which has been corrected.
   (merge f08132f889 at/rebase-fork-point-regression-fix later to maint).

 * The import-tars importer (in contrib/fast-import/) used to create
   phony files at the top-level of the repository when the archive
   contains global PAX headers, which made its own logic to detect and
   omit the common leading directory ineffective, which has been
   corrected.
   (merge c839fcff65 js/import-tars-do-not-make-phony-files-from-pax-headers later to maint).

 * Simplify the commit ancestry connectedness check in a partial clone
   repository in which "promised" objects are assumed to be obtainable
   lazily on-demand from promisor remote repositories.
   (merge 2b98478c6f jt/connectivity-check-optim-in-partial-clone later to maint).

 * The server-end of the v2 protocol to serve "git clone" and "git
   fetch" was not prepared to see a delim packets at unexpected
   places, which led to a crash.
   (merge cacae4329f jk/harden-protocol-v2-delim-handling later to maint).

 * When fed a midx that records no objects, some codepaths tried to
   loop from 0 through (num_objects-1), which, due to integer
   arithmetic wrapping around, made it nonsense operation with out of
   bounds array accesses.  The code has been corrected to reject such
   an midx file.
   (merge 796d61cdc0 dr/midx-avoid-int-underflow later to maint).

 * Utitiles run via the run_command() API were not spawned correctly
   on Cygwin, when the paths to them are given as a full path with
   backslashes.
   (merge 05ac8582bc ak/run-command-on-cygwin-fix later to maint).

 * "git pull --rebase" tried to run a rebase even after noticing that
   the pull results in a fast-forward and no rebase is needed nor
   sensible, for the past few years due to a mistake nobody noticed.
   (merge fbae70ddc6 en/pull-do-not-rebase-after-fast-forwarding later to maint).

 * "git rebase" with the merge backend did not work well when the
   rebase.abbreviateCommands configuration was set.
   (merge de9f1d3ef4 ag/rebase-merge-allow-ff-under-abbrev-command later to maint).

 * The logic to auto-follow tags by "git clone --single-branch" was
   not careful to avoid lazy-fetching unnecessary tags, which has been
   corrected.
   (merge 167a575e2d jk/use-quick-lookup-in-clone-for-tag-following later to maint).

 * "git rebase -i" did not leave the reflog entries correctly.
   (merge 1f6965f994 en/sequencer-reflog-action later to maint).

 * The more aggressive updates to remote-tracking branches we had for
   the past 7 years or so were not reflected in the documentation,
   which has been corrected.
   (merge a44088435c pb/pull-fetch-doc later to maint).

 * We've left the command line parsing of "git log :/a/b/" broken for
   about a full year without anybody noticing, which has been
   corrected.
   (merge 0220461071 jc/missing-ref-store-fix later to maint).

 * Misc fixes for Windows.
   (merge 3efc128cd5 js/mingw-fixes later to maint).

 * "git rebase" (again) learns to honor "--no-keep-empty", which lets
   the user to discard commits that are empty from the beginning (as
   opposed to the ones that become empty because of rebasing).  The
   interactive rebase also marks commits that are empty in the todo.
   (merge 50ed76148a en/rebase-no-keep-empty later to maint).

 * Parsing the host part out of URL for the credential helper has been corrected.
   (merge 4c5971e18a jk/credential-parsing-end-of-host-in-URL later to maint).

 * Document the recommended way to abort a failing test early (e.g. by
   exiting a loop), which is to say "return 1".
   (merge 7cc112dc95 jc/doc-test-leaving-early later to maint).

 * The code that refreshes the last access and modified time of
   on-disk packfiles and loose object files have been updated.
   (merge 312cd76130 lr/freshen-file-fix later to maint).

 * Validation of push certificate has been made more robust against
   timing attacks.
   (merge 719483e547 bc/constant-memequal later to maint).

 * The custom hash function used by "git fast-import" has been
   replaced with the one from hashmap.c, which gave us a nice
   performance boost.
   (merge d8410a816b jk/fast-import-use-hashmap later to maint).

 * The "git submodule" command did not initialize a few variables it
   internally uses and was affected by variable settings leaked from
   the environment.
   (merge 65d100c4dd lx/submodule-clear-variables later to maint).

 * Raise the minimum required version of docbook-xsl package to 1.74,
   as 1.74.0 was from late 2008, which is more than 10 years old, and
   drop compatibility cruft from our documentation suite.
   (merge 3c255ad660 ma/doc-discard-docbook-xsl-1.73 later to maint).

 * "git log" learns "--[no-]mailmap" as a synonym to "--[no-]use-mailmap"
   (merge 88acccda38 jc/log-no-mailmap later to maint).

 * "git commit-graph write --expire-time=<timestamp>" did not use the
   given timestamp correctly, which has been corrected.
   (merge b09b785c78 ds/commit-graph-expiry-fix later to maint).

 * Tests update to use "test-chmtime" instead of "touch -t".
   (merge e892a56845 ds/t5319-touch-fix later to maint).

 * "git diff" in a partial clone learned to avoid lazy loading blob
   objects in more casese when they are not needed.
   (merge 95acf11a3d jt/avoid-prefetch-when-able-in-diff later to maint).

 * "git push --atomic" used to show failures for refs that weren't
   even pushed, which has been corrected.
   (merge dfe1b7f19c jx/atomic-push later to maint).

 * Code in builtin/*, i.e. those can only be called from within
   built-in subcommands, that implements bulk of a couple of
   subcommands have been moved to libgit.a so that they could be used
   by others.
   (merge 9460fd48b5 dl/libify-a-few later to maint).

 * Allowing the user to split a patch hunk while "git stash -p" does
   not work well; a band-aid has been added to make this (partially)
   work better.

 * "git diff-tree --pretty --notes" used to hit an assertion failure,
   as it forgot to initialize the notes subsystem.
   (merge 5778b22b3d tb/diff-tree-with-notes later to maint).

 * "git range-diff" fixes.
   (merge 8d1675eb7f vd/range-diff-with-custom-pretty-format-fix later to maint).

 * "git grep" did not quote a path with unusual character like other
   commands (like "git diff", "git status") do, but did quote when run
   from a subdirectory, both of which has been corrected.
   (merge 45115d8490 mt/grep-cquote-path later to maint).

 * GNU/Hurd is also among the ones that need the fopen() wrapper.
   (merge 274a1328fb jc/gnu-hurd-lets-fread-read-dirs later to maint).

 * Those fetching over protocol v2 from linux-next and other kernel
   repositories are reporting that v2 often fetches way too much than
   needed.
   (merge 11c7f2a30b jn/demote-proto2-from-default later to maint).

 * The upload-pack protocol v2 gave up too early before finding a
   common ancestor, resulting in a wasteful fetch from a fork of a
   project.  This has been corrected to match the behaviour of v0
   protocol.
   (merge 2f0a093dd6 jt/v2-fetch-nego-fix later to maint).

 * The build procedure did not use the libcurl library and its include
   files correctly for a custom-built installation.
   (merge 0573831950 jk/build-with-right-curl later to maint).

 * Tighten "git mailinfo" to notice and error out when decoded result
   contains NUL in it.
   (merge 3919997447 dd/mailinfo-with-nul later to maint).

 * Fix in-core inconsistency after fetching into a shallow repository
   that broke the code to write out commit-graph.
   (merge 37b9dcabfc tb/reset-shallow later to maint).

 * The commit-graph code exhausted file descriptors easily when it
   does not have to.
   (merge c8828530b7 tb/commit-graph-fd-exhaustion-fix later to maint).

 * The multi-pack-index left mmapped file descriptors open when it
   does not have to.
   (merge 6c7ff7cf7f ds/multi-pack-index later to maint).

 * Recent update to Homebrew used by macOS folks breaks build by
   moving gettext library and necessary headers.
   (merge a0b3108618 ds/build-homebrew-gettext-fix later to maint).

 * Incompatible options "--root" and "--fork-point" of "git rebase"
   have been marked and documented as being incompatible.
   (merge a35413c378 en/rebase-root-and-fork-point-are-incompatible later to maint).

 * Error and verbose trace messages from "git push" did not redact
   credential material embedded in URLs.
   (merge d192fa5006 js/anonymise-push-url-in-errors later to maint).

 * Update the parser used for credential.<URL>.<variable>
   configuration, to handle <URL>s with '/' in them correctly.
   (merge b44d0118ac bc/wildcard-credential later to maint).

 * Recent updates broke parsing of "credential.<url>.<key>" where
   <url> is not a full URL (e.g. [credential "https://"] helper = ...)
   stopped working, which has been corrected.
   (merge 9a121b0d22 js/partial-urlmatch-2.17 later to maint).
   (merge cd93e6c029 js/partial-urlmatch later to maint).

 * Some of the files commit-graph subsystem keeps on disk did not
   correctly honor the core.sharedRepository settings and some were
   left read-write.

 * In error messages that "git switch" mentions its option to create a
   new branch, "-b/-B" options were shown, where "-c/-C" options
   should be, which has been corrected.
   (merge 7c16ef7577 dl/switch-c-option-in-error-message later to maint).

 * With the recent tightening of the code that is used to parse
   various parts of a URL for use in the credential subsystem, a
   hand-edited credential-store file causes the credential helper to
   die, which is a bit too harsh to the users.  Demote the error
   behaviour to just ignore and keep using well-formed lines instead.
   (merge c03859a665 cb/credential-store-ignore-bogus-lines later to maint).

 * The samples in the credential documentation has been updated to
   make it clear that we depict what would appear in the .git/config
   file, by adding appropriate quotes as needed..
   (merge 177681a07e jk/credential-sample-update later to maint).

 * "git branch" and other "for-each-ref" variants accepted multiple
   --sort=<key> options in the increasing order of precedence, but it
   had a few breakages around "--ignore-case" handling, and tie-breaking
   with the refname, which have been fixed.
   (merge 7c5045fc18 jk/for-each-ref-multi-key-sort-fix later to maint).

 * The coding guideline for shell scripts instructed to refer to a
   variable with dollar-sign inside arithmetic expansion to work
   around a bug in old versions of dash, which is a thing of the past.
   Now we are not forbidden from writing $((var+1)).
   (merge 32b5fe7f0e jk/arith-expansion-coding-guidelines later to maint).

 * The <stdlib.h> header on NetBSD brings in its own definition of
   hmac() function (eek), which conflicts with our own and unrelated
   function with the same name.  Our function has been renamed to work
   around the issue.
   (merge 3013118eb8 cb/avoid-colliding-with-netbsd-hmac later to maint).

 * The basic test did not honor $TEST_SHELL_PATH setting, which has
   been corrected.
   (merge 0555e4af58 cb/t0000-use-the-configured-shell later to maint).

 * Minor in-code comments and documentation updates around credential
   API.
   (merge 1aed817f99 cb/credential-doc-fixes later to maint).

 * Teach "am", "commit", "merge" and "rebase", when they are run with
   the "--quiet" option, to pass "--quiet" down to "gc --auto".
   (merge 7c3e9e8cfb jc/auto-gc-quiet later to maint).

 * The code to skip unmerged paths in the index when sparse checkout
   is in use would have made out-of-bound access of the in-core index
   when the last path was unmerged, which has been corrected.

 * Serving a "git fetch" client over "git://" and "ssh://" protocols
   using the on-wire protocol version 2 was buggy on the server end
   when the client needs to make a follow-up request to
   e.g. auto-follow tags.
   (merge 08450ef791 cc/upload-pack-v2-fetch-fix later to maint).

 * "git bisect replay" had trouble with input files when they used
   CRLF line ending, which has been corrected.
   (merge 6c722cbe5a cw/bisect-replay-with-dos later to maint).

 * "rebase -i" segfaulted when rearranging a sequence that has a
   fix-up that applies another fix-up (which may or may not be a
   fix-up of yet another step).
   (merge 02471e7e20 js/rebase-autosquash-double-fixup-fix later to maint).

 * "git fsck" ensures that the paths recorded in tree objects are
   sorted and without duplicates, but it failed to notice a case where
   a blob is followed by entries that sort before a tree with the same
   name.  This has been corrected.
   (merge 9068cfb20f rs/fsck-duplicate-names-in-trees later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 564956f358 jc/maintain-doc later to maint).
   (merge 7422b2a0a1 sg/commit-slab-clarify-peek later to maint).
   (merge 9c688735f6 rs/doc-passthru-fetch-options later to maint).
   (merge 757c2ba3e2 en/oidset-uninclude-hashmap later to maint).
   (merge 8312aa7d74 jc/config-tar later to maint).
   (merge d00a5bdd50 ss/submodule-foreach-cb later to maint).
   (merge 64d1022e14 ar/test-style-fixes later to maint).
   (merge 4a465443a6 ds/doc-clone-filter later to maint).
   (merge bb2dbe301b jk/t3419-drop-expensive-tests later to maint).
   (merge d3507cc712 js/test-junit-finalization-fix later to maint).
   (merge 2149b6748f bc/faq later to maint).
   (merge 12dc0879f1 jk/test-cleanup later to maint).
   (merge 344420bf0f pb/rebase-doc-typofix later to maint).
   (merge 7cd54d37dc dl/wrapper-fix-indentation later to maint).
   (merge 78725ebda9 jc/allow-strlen-substitution-in-shell-scripts later to maint).
   (merge 2ecfcdecc6 jm/gitweb-fastcgi-utf8 later to maint).
   (merge 0740d0a5d3 jk/oid-array-cleanups later to maint).
   (merge a1aba0c95c js/t0007-typofix later to maint).
   (merge 76ba7fa225 ma/config-doc-fix later to maint).
   (merge 826f0c0df2 js/subtree-doc-update-to-asciidoctor-2 later to maint).
   (merge 88eaf361e0 eb/mboxrd-doc later to maint).
   (merge 051cc54941 tm/zsh-complete-switch-restore later to maint).
   (merge 39102cf4fe ms/doc-revision-illustration-fix later to maint).
   (merge 4d9378bfad eb/gitweb-more-trailers later to maint).
   (merge bdccbf7047 mt/doc-worktree-ref later to maint).
   (merge ce9baf234f dl/push-recurse-submodules-fix later to maint).
   (merge 4153274052 bc/doc-credential-helper-value later to maint).
   (merge 5c7bb0146e jc/codingstyle-compare-with-null later to maint).

----------------------------------------------------------------

Changes since v2.26.0 are as follows:

Alban Gruin (3):
      sequencer: mark messages for translation
      sequencer: don't abbreviate a command if it doesn't have a short form
      t3432: test `--merge' with `rebase.abbreviateCommands = true', too

Alex Henrie (1):
      pull: warn if the user didn't say whether to rebase or to merge

Alexandr Miloslavskiy (4):
      set_git_dir: fix crash when used with real_path()
      real_path: remove unsafe API
      real_path_if_valid(): remove unsafe API
      get_superproject_working_tree(): return strbuf

Andras Kucsma (1):
      run-command: trigger PATH lookup properly on Cygwin

Andrei Rybak (2):
      t9500: remove spaces after redirect operators
      t: fix whitespace around &&

Andrew Oakley (1):
      git-p4: recover from inconsistent perforce history

Ash Holland (1):
      userdiff: support Markdown

Ben Keene (8):
      git-p4: change the expansion test from basestring to list
      git-p4: rewrite prompt to be Windows compatible
      git-p4: create new function run_git_hook
      git-p4: add p4-pre-submit exit text
      git-p4: add --no-verify option
      git-p4: restructure code in submit
      git-p4: add p4 submit hooks
      git-p4: add RCS keyword status message

Carlo Marcelo Arenas Belón (8):
      credential-store: ignore bogus lines from store file
      credential: update description for credential_from_url_gently
      credential: correct order of parameters for credential_match
      builtin/receive-pack: avoid generic function name hmac()
      t/t0000-basic: make sure subtests also use TEST_SHELL_PATH
      t/test_lib: avoid naked bash arrays in file_lineno
      credential: update gitcredentials documentation
      credential: document protocol updates

Christian Couder (1):
      upload-pack: clear filter_options for each v2 fetch command

Christopher Warrington (1):
      bisect: allow CRLF line endings in "git bisect replay" input

Damien Robert (6):
      midx.c: fix an integer underflow
      doc: list all commands affected by submodule.recurse
      doc: document --recurse-submodules for reset and restore
      doc: explain how to deactivate submodule.recurse completely
      doc: be more precise on (fetch|push).recurseSubmodules
      doc: --recurse-submodules mostly applies to active submodules

Denton Liu (45):
      Makefile: ASCII-sort += lists
      t7600: use test_write_lines()
      Lib-ify fmt-merge-msg
      Lib-ify prune-packed
      t5512: don't use `test_must_fail test_cmp`
      t5512: stop losing git exit code in here-docs
      t5512: stop losing return codes of git commands
      t5550: simplify no matching line check
      t5607: reorder `nongit test_must_fail`
      t5612: don't use `test_must_fail test_cmp`
      t5612: stop losing return codes of git commands
      t5801: teach compare_refs() to accept !
      wrapper: indent with tabs
      sequencer: stop leaking buf
      sequencer: make file exists check more efficient
      sequencer: make read_oneliner() accept flags
      sequencer: configurably warn on non-existent files
      sequencer: make read_oneliner() extern
      rebase: use read_oneliner()
      sequencer: make apply_autostash() accept a path
      sequencer: rename stash_sha1 to stash_oid
      rebase: use apply_autostash() from sequencer.c
      rebase: generify reset_head()
      reset: extract reset_head() from rebase
      rebase: extract create_autostash()
      rebase: generify create_autostash()
      sequencer: extract perform_autostash() from rebase
      sequencer: unlink autostash in apply_autostash()
      sequencer: implement save_autostash()
      sequencer: implement apply_autostash_oid()
      merge: teach --autostash option
      t5520: make test_pull_autostash() accept expect_parent_num
      pull: pass --autostash to merge
      t6030: use test_path_is_missing()
      t7408: replace incorrect uses of test_must_fail
      t7508: don't use `test_must_fail test_cmp`
      t9141: use test_path_is_missing()
      t9160: use test_path_is_missing()
      t9164: use test_must_fail only on git commands
      t9819: don't use test_must_fail with p4
      Use OPT_CALLBACK and OPT_CALLBACK_F
      push: unset PARSE_OPT_OPTARG for --recurse-submodules
      rebase: save autostash entry into stash reflog on --quit
      switch: fix errors and comments related to -c and -C
      Doc: reference the "stash list" in autostash docs

Derrick Stolee (25):
      connected.c: reprepare packs for corner cases
      config: set pack.useSparse=true by default
      pack-objects: flip the use of GIT_TEST_PACK_SPARSE
      clone: document --filter options
      diff: halt tree-diff early after max_changes
      dir: refactor treat_directory to clarify control flow
      commit-graph: fix buggy --expire-time option
      t5319: replace 'touch -m' with 'test-tool chmtime'
      bloom: ignore renames when computing changed paths
      revision: --show-pulls adds helpful merges
      log-tree: make ref_filter_match() a helper method
      log: add log.excludeDecoration config option
      revision: complicated pathspecs disable filters
      tests: write commit-graph with Bloom filters
      blame: use changed-path Bloom filters
      multi-pack-index: close file descriptor after mmap
      bloom: fix whitespace around tab length
      test-bloom: fix usage typo
      sparse-checkout: stop blocking empty workdirs
      unpack-trees: avoid array out-of-bounds error
      multi-pack-index: respect repack.packKeptObjects=false
      bloom: parse commit before computing filters
      Documentation: changed-path Bloom filters use byte words
      bloom: de-duplicate directory entries
      bloom: use num_changes not nr for limit detection

Elijah Newren (37):
      oidset: remove unnecessary include
      unpack-trees: fix minor typo in comment
      unpack-trees: remove unused error type
      unpack-trees: simplify verify_absent_sparse()
      unpack-trees: simplify pattern_list freeing
      t1091: make some tests a little more defensive against failures
      unpack-trees: allow check_updates() to work on a different index
      unpack-trees: do not mark a dirty path with SKIP_WORKTREE
      unpack-trees: pull sparse-checkout pattern reading into a new function
      unpack-trees: add a new update_sparsity() function
      sparse-checkout: use new update_sparsity() function
      sparse-checkout: use improved unpack_trees porcelain messages
      unpack-trees: move ERROR_WOULD_LOSE_SUBMODULE earlier
      unpack-trees: rename ERROR_* fields meant for warnings to WARNING_*
      unpack-trees: split display_error_msgs() into two
      unpack-trees: make sparse path messages sound like warnings
      unpack-trees: provide warnings on sparse updates for unmerged paths too
      unpack-trees: failure to set SKIP_WORKTREE bits always just a warning
      sparse-checkout: provide a new reapply subcommand
      pull: avoid running both merge and rebase
      t7063: more thorough status checking
      t3000: add more testcases testing a variety of ls-files issues
      dir: fix simple typo in comment
      dir: consolidate treat_path() and treat_one_path()
      dir: fix broken comment
      dir: fix confusion based on variable tense
      dir: replace exponential algorithm with a linear one
      dir: include DIR_KEEP_UNTRACKED_CONTENTS handling in treat_directory()
      dir: replace double pathspec matching with single in treat_directory()
      Fix error-prone fill_directory() API; make it only return matches
      completion: fix 'git add' on paths under an untracked directory
      git-rebase.txt: add another hook to the hooks section, and explain more
      sequencer: honor GIT_REFLOG_ACTION
      rebase -i: mark commits that begin empty in todo editor
      rebase: reinstate --no-keep-empty
      rebase: fix an incompatible-options error message
      rebase: display an error if --root and --fork-point are both provided

Emily Shaffer (8):
      help: move list_config_help to builtin/help
      bugreport: add tool to generate debugging info
      bugreport: gather git version and build info
      bugreport: add uname info
      bugreport: add compiler info
      bugreport: drop extraneous includes
      bugreport: collect list of populated hooks
      trace2: log progress time and throughput

Emma Brooks (3):
      format-patch: teach --no-encode-email-headers
      Documentation: explain "mboxrd" pretty format
      gitweb: Recognize *-to and Closes/Fixes trailers

Eric Sunshine (1):
      restore: default to HEAD when combining --staged and --worktree

Garima Singh (13):
      commit-graph: define and use MAX_NUM_CHUNKS
      bloom.c: add the murmur3 hash implementation
      bloom.c: introduce core Bloom filter constructs
      bloom.c: core Bloom filter implementation for changed paths.
      commit-graph: compute Bloom filters for changed paths
      commit-graph: examine commits by generation number
      commit-graph: write Bloom filters to commit graph file
      commit-graph: reuse existing Bloom filters during write
      commit-graph: add --changed-paths option to write subcommand
      revision.c: use Bloom filters to speed up path based revision walks
      revision.c: add trace2 stats around Bloom filter usage
      t4216: add end to end tests for git log with Bloom filters
      commit-graph: add GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS test flag

Hans Jerry Illikainen (2):
      t: increase test coverage of signature verification output
      gpg-interface: prefer check_signature() for GPG verification

Heba Waly (4):
      advice: extract vadvise() from advise()
      advice: change "setupStreamFailure" to "setUpstreamFailure"
      advice: revamp advise API
      tag: use new advice API to check visibility

Jeff King (51):
      credential: avoid writing values with newlines
      t/lib-credential: use test_i18ncmp to check stderr
      credential: detect unrepresentable values when parsing urls
      fsck: detect gitmodules URLs with embedded newlines
      t3419: drop EXPENSIVE tests
      t/lib-credential.sh: drop shebang line
      t/lib-*.sh: drop executable bit
      test-lib-functions: make packetize() more efficient
      upload-pack: handle unexpected delim packets
      p5310: stop timing non-bitmap pack-to-disk
      Makefile: avoid running curl-config multiple times
      Makefile: use curl-config --cflags
      test-lib-functions: simplify packetize() stdin code
      commit-graph: examine changed-path objects in pack order
      oid_array: use size_t for count and allocation
      oid_array: use size_t for iteration
      oid_array: rename source file from sha1-array
      test-tool: rename sha1-array to oid-array
      bisect: stop referring to sha1_array
      ref-filter: stop referring to "sha1 array"
      oidset: stop referring to sha1-array
      clone: use "quick" lookup while following tags
      Makefile: avoid running curl-config unnecessarily
      fast-import: replace custom hash with hashmap.c
      repository: mark the "refs" pointer as private
      remote: drop auto-strlen behavior of make_branch() and make_rewrite()
      parse_config_key(): return subsection len as size_t
      config: drop useless length variable in write_pair()
      git_config_parse_key(): return baselen as size_t
      config: use size_t to store parsed variable baselen
      config: reject parsing of files over INT_MAX
      credential: treat "?" and "#" in URLs as end of host
      t0300: make "quit" helper more realistic
      t0300: use more realistic inputs
      credential: parse URL without host as empty host, not unset
      credential: refuse to operate when missing host or protocol
      credential: die() when parsing invalid urls
      Git 2.17.5
      blame: drop unused parameter from maybe_changed_path
      test-bloom: fix some whitespace issues
      test-bloom: check that we have expected arguments
      commit-graph: close descriptors after mmap
      t0000: disable GIT_TEST_FAIL_PREREQS in sub-tests
      gitcredentials(7): clarify quoting of helper examples
      gitcredentials(7): make shell-snippet example more realistic
      CodingGuidelines: drop arithmetic expansion advice to use "$x"
      ref-filter: apply --ignore-case to all sorting keys
      ref-filter: apply fallback refname sort only after all user sorts
      list-objects-filter: treat NULL filter_options as "disabled"
      pack-bitmap: pass object filter to fill-in traversal
      ci: allow per-branch config for GitHub Actions

Jessica Clarke (1):
      config.mak.uname: Define FREAD_READS_DIRECTORIES for GNU/Hurd

Jiang Xin (5):
      send-pack: fix inconsistent porcelain output
      t5543: never report what we do not push
      send-pack: mark failure of atomic push properly
      transport-helper: mark failure for atomic push
      transport-helper: new method reject_atomic_push()

Johannes Schindelin (36):
      cherry-pick: add test for `--skip` advice in `git commit`
      tests(junit-xml): avoid invalid XML
      import-tars: ignore the global PAX header
      tests(gpg): allow the gpg-agent to start on Windows
      t/lib-gpg.sh: stop pretending to be a stand-alone script
      tests: do not let lazy prereqs inside `test_expect_*` turn off tracing
      tests: turn GPG, GPGSM and RFC1991 into lazy prereqs
      tests: increase the verbosity of the GPG-related prereqs
      MyFirstObjectWalk: remove unnecessary conditional statement
      t0007: fix a typo
      ci/lib: if CI type is unknown, show the environment variables
      ci/lib: allow running in GitHub Actions
      ci: fix the `jobname` of the `GETTEXT_POISON` job
      subtree: fix build with AsciiDoctor 2
      mingw: do not treat `COM0` as a reserved file name
      t3904: fix incorrect demonstration of a bug
      stash -p: (partially) fix bug concerning split hunks
      mingw: help debugging by optionally executing bash with strace
      interactive: refactor code asking the user for interactive input
      ci: run gem with sudo to install asciidoctor
      README: add a build badge for the GitHub Actions runs
      ci: retire the Azure Pipelines definition
      tests: when run in Bash, annotate test failures with file name/line number
      ci: add a problem matcher for GitHub Actions
      ci: let GitHub Actions upload failed tests' directories
      t: consolidate the `is_hidden` functions
      mingw: make test_path_is_hidden more robust
      t: restrict `is_hidden` to be called only on Windows
      credential: fix grammar
      credential: optionally allow partial URLs in credential_from_url_gently()
      credential: optionally allow partial URLs in credential_from_url_gently()
      credential: handle `credential.<partial-URL>.<key>` again
      macOS/brew: let the build find gettext headers/libraries/msgfmt
      push: anonymize URLs in error messages and warnings
      credential: handle `credential.<partial-URL>.<key>` again
      rebase --autosquash: fix a potential segfault

Jonathan Nieder (5):
      fsck: convert gitmodules url to URL passed to curl
      credential: treat URL without scheme as invalid
      credential: treat URL with empty scheme as invalid
      fsck: reject URL with empty host in .gitmodules
      Revert "fetch: default to protocol version 2"

Jonathan Tan (11):
      connected: always use partial clone optimization
      promisor-remote: accept 0 as oid_nr in function
      diff: make diff_populate_filespec_options struct
      diff: refactor object read
      diff: restrict when prefetching occurs
      rebase --merge: optionally skip upstreamed commits
      fetch-pack: return enum from process_acks()
      fetch-pack: in protocol v2, in_vain only after ACK
      fetch-pack: in protocol v2, reset in_vain upon ACK
      commit-graph: avoid memory leaks
      t5500: count objects through stderr, not trace

Jorge Lopez Silva (2):
      http: add client cert support for HTTPS proxies
      http: add environment variable support for HTTPS proxies

Josh Steadmon (1):
      trace2: teach Git to log environment variables

Julien Moutinho (1):
      gitweb: fix UTF-8 encoding when using CGI::Fast

Junio C Hamano (27):
      rebase: --fork-point regression fix
      describe: force long format for a name based on a mislocated tag
      update how-to-maintain-git
      parse-options: teach "git cmd -h" to show alias as alias
      clone: reorder --recursive/--recurse-submodules
      log: give --[no-]use-mailmap a more sensible synonym --[no-]mailmap
      Git 2.17.4
      separate tar.* config to its own source file
      The first batch post 2.26 cycle
      The second batch post 2.26 cycle
      t/README: suggest how to leave test early with failure
      CodingGuidelines: allow ${#posix} == strlen($posix)
      sha1-name: do not assume that the ref store is initialized
      receive-pack: compilation fix
      The third batch
      The fourth batch
      credential-store: document the file format a bit more
      Revert "commit-graph.c: introduce '--[no-]check-oids'"
      The fifth batch
      The sixth batch
      The seventh batch
      auto-gc: extract a reusable helper from "git fetch"
      auto-gc: pass --quiet down from am, commit, merge and rebase
      CodingGuidelines: do not ==/!= compare with 0 or '\0' or NULL
      The eighth batch
      The ninth batch
      Git 2.27-rc0

Li Xuejiang (1):
      git-submodule.sh: setup uninitialized variables

Martin Ågren (9):
      Doc: drop support for docbook-xsl before 1.71.1
      Doc: drop support for docbook-xsl before 1.72.0
      Doc: drop support for docbook-xsl before 1.73.0
      manpage-bold-literal.xsl: stop using git.docbook.backslash
      manpage-normal.xsl: fold in manpage-base.xsl
      INSTALL: drop support for docbook-xsl before 1.74
      user-manual.conf: don't specify [listingblock]
      config.txt: move closing "----" to cover entire listing
      merge: use skip_prefix to parse config key

Matheus Tavares (3):
      test-lib: allow short options to be bundled
      grep: follow conventions for printing paths w/ unusual chars
      config doc: fix reference to config.worktree info

Matthias Aßhauer (1):
      mingw: use modern strftime implementation if possible

Michael F. Schönitzer (1):
      docs: fix minor glitch in illustration

Nathan Sanders (1):
      mingw: cope with the Isilon network file system

Patrick Steinhardt (9):
      refs: fix segfault when aborting empty transaction
      git-update-ref.txt: add missing word
      strbuf: provide function to append whole lines
      update-ref: organize commands in an array
      update-ref: drop unused argument for `parse_refname`
      update-ref: pass end pointer instead of strbuf
      update-ref: move transaction handling into `update_refs_stdin()`
      update-ref: read commands in a line-wise fashion
      update-ref: implement interactive transaction handling

Philippe Blain (9):
      t7112: remove mention of KNOWN_FAILURE_SUBMODULE_RECURSIVE_NESTED
      t/lib-submodule-update: remove outdated test description
      t/lib-submodule-update: move a test to the right section
      unpack-trees: remove outdated description for verify_clean_submodule
      unpack-trees: check for missing submodule directory in merged_entry
      t/lib-submodule-update: add test removing nested submodules
      git-rebase.txt: fix typo
      pull doc: refer to a specific section in 'fetch' doc
      pull doc: correct outdated description of an example

Phillip Wood (6):
      t3404: use test_cmp_rev
      cherry-pick: check commit error messages
      sequencer: write CHERRY_PICK_HEAD for reword and edit
      commit: use enum value for multiple cherry-picks
      commit: encapsulate determine_whence() for sequencer
      commit: give correct advice for empty commit during a rebase

René Scharfe (4):
      pull: document more passthru options
      pull: remove --update-head-ok from documentation
      pull: pass documented fetch options on
      fsck: report non-consecutive duplicate names in trees

SZEDER Gábor (4):
      ci: use python3 in linux-gcc and osx-gcc and python2 elsewhere
      commit-slab: clarify slabname##_peek()'s return value
      ci: make MAKEFLAGS available inside the Docker container in the Linux32 job
      completion: offer '--(no-)patch' among 'git log' options

Shourya Shukla (4):
      submodule--helper.c: Rename 'cb_foreach' to 'foreach_cb'
      gitfaq: files in .gitignore are tracked
      gitfaq: fetching and pulling a repository
      submodule: port subcommand 'set-url' from shell to C

Son Luong Ngoc (1):
      midx: teach "git multi-pack-index repack" honor "git repack" configurations

Taylor Blau (24):
      t/helper/test-read-graph.c: support commit-graph chains
      builtin/commit-graph.c: support for '--split[=<strategy>]'
      builtin/commit-graph.c: introduce split strategy 'no-merge'
      builtin/commit-graph.c: introduce split strategy 'replace'
      oidset: introduce 'oidset_size'
      commit-graph.h: replace 'commit_hex' with 'commits'
      commit-graph.c: introduce '--[no-]check-oids'
      diff-tree.c: load notes machinery when required
      commit-graph.c: don't use discarded graph_name in error
      t/test-lib.sh: make ULIMIT_FILE_DESCRIPTORS available to tests
      commit-graph.c: gracefully handle file descriptor exhaustion
      t5537: use test_write_lines and indented heredocs for readability
      shallow.c: use '{commit,rollback}_shallow_file'
      tempfile.c: introduce 'create_tempfile_mode'
      lockfile.c: introduce 'hold_lock_file_for_update_mode'
      commit-graph.c: write non-split graphs as read-only
      commit-graph.c: ensure graph layers respect core.sharedRepository
      commit-graph.c: make 'commit-graph-chain's read-only
      commit: make 'commit_graft_pos' non-static
      shallow: extract a header file for shallow-related functions
      shallow.h: document '{commit,rollback}_shallow_file'
      shallow: use struct 'shallow_lock' for additional safety
      pack-bitmap.c: make object filtering functions generic
      pack-bitmap.c: support 'tree:0' filtering

Terry Moschou (1):
      complete: zsh: add missing sub cmd completion candidates

Thomas Gummerer (2):
      stash: get git_stash_config at the top level
      stash: remove the stash.useBuiltin setting

Vasil Dimov (2):
      range-diff: fix a crash in parsing git-log output
      range-diff: avoid negative string precision

Yang Zhao (12):
      git-p4: make python2.7 the oldest supported version
      git-p4: remove string type aliasing
      git-p4: encode/decode communication with p4 for python3
      git-p4: encode/decode communication with git for python3
      git-p4: convert path to unicode before processing them
      git-p4: open .gitp4-usercache.txt in text mode
      git-p4: use marshal format version 2 when sending to p4
      git-p4: fix freezing while waiting for fast-import progress
      git-p4: use functools.reduce instead of reduce
      git-p4: use dict.items() iteration for python3 compatibility
      git-p4: simplify regex pattern generation for parsing diff-tree
      git-p4: use python3's input() everywhere

brian m. carlson (34):
      builtin/pack-objects: make hash agnostic
      hash: implement and use a context cloning function
      hex: introduce parsing variants taking hash algorithms
      hex: add functions to parse hex object IDs in any algorithm
      repository: require a build flag to use SHA-256
      t: use hash-specific lookup tables to define test constants
      t6300: abstract away SHA-1-specific constants
      t6300: make hash algorithm independent
      t/helper/test-dump-split-index: initialize git repository
      t/helper: initialize repository if necessary
      t/helper: make repository tests hash independent
      setup: allow check_repository_format to read repository format
      builtin/init-db: allow specifying hash algorithm on command line
      builtin/init-db: add environment variable for new repo hash
      init-db: move writing repo version into a function
      worktree: allow repository version 1
      commit: use expected signature header for SHA-256
      fast-import: permit reading multiple marks files
      fast-import: add helper function for inserting mark object entries
      fast-import: make find_marks work on any mark set
      fast-import: add a generic function to iterate over marks
      fast-import: add options for rewriting submodules
      builtin/checkout: pass branch info down to checkout_worktree
      convert: permit passing additional metadata to filter processes
      convert: provide additional metadata to filters
      builtin/checkout: compute checkout metadata for checkouts
      builtin/clone: compute checkout metadata for clones
      builtin/rebase: compute checkout metadata for rebases
      builtin/reset: compute checkout metadata for reset
      t0021: test filter metadata for additional cases
      docs: add a FAQ
      builtin/receive-pack: use constant-time comparison for HMAC value
      credential: fix matching URLs with multiple levels in path
      docs: document credential.helper allowed values

luciano.rocha@booking.com (1):
      freshen_file(): use NULL `times' for implicit current-time

Đoàn Trần Công Danh (34):
      t4061: use POSIX compliant regex(7)
      test-lib-functions: test_cmp: eval $GIT_TEST_CMP
      t5003: drop the subshell in test_lazy_prereq
      t5003: skip conversion test if unzip -a is unavailable
      t5616: use rev-parse instead to get HEAD's object_id
      t7063: drop non-POSIX argument "-ls" from find(1)
      t4124: tweak test so that non-compliant diff(1) can also be used
      t5703: feed raw data into test-tool unpack-sideband
      rebase.c: honour --no-gpg-sign
      cherry-pick/revert: honour --no-gpg-sign in all case
      Documentation: document am --no-gpg-sign
      Documentation: reword commit --no-gpg-sign
      Documentation: merge commit-tree --[no-]gpg-sign
      Documentation: document merge option --no-gpg-sign
      ci/lib-docker: preserve required environment variables
      ci/linux32: parameterise command to switch arch
      ci: refactor docker runner script
      ci/linux32: libify install-dependencies step
      travis: build and test on Linux with musl libc and busybox
      ci/lib: set TERM environment variable if not exist
      ci: explicit install all required packages
      ci: configure GitHub Actions for CI/PR
      t4254: merge 2 steps of a single test
      mailinfo.c: avoid strlen on strings that can contains NUL
      mailinfo: disallow NUL character in mail's header
      date.c: s/is_date/set_date/
      date.c: validate and set time in a helper function
      date.c: skip fractional second part of ISO-8601
      date.c: allow compact version of ISO-8601 datetime
      test-parse-pathspec-file.c: s/0/NULL/ for pointer type
      compat/regex: move stdlib.h up in inclusion chain
      graph.c: limit linkage of internal variable
      progress.c: silence cgcc suggestion about internal linkage
      bloom: fix `make sparse` warning

마누엘 (1):
      interactive: explicitly `fflush` stdout before expecting input


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.26.0
@ 2020-03-23  1:10  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2020-03-23  1:10 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

The latest feature release Git v2.26.0 is now available at the
usual places.  It is comprised of 504 non-merge commits since
v2.25.0, contributed by 64 people, 12 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.26.0'
tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.25.0 are as follows.
Welcome to the Git development community!

  Abhishek Kumar, Benno Evers, Emir Sarı, Eyal Soha, Harald
  van Dijk, Jacques Bodin-Hullin, Kir Kolyshkin, Lucius Hu,
  Luke Bonanomi, Peter Kaestle, Rasmus Jonsson, and Shourya Shukla.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alban Gruin, Alessandro Menti, Alexander Shopov, Alexandr
  Miloslavskiy, Beat Bolli, Bert Wesarg, brian m. carlson,
  Christian Stimming, Christopher Diaz Riveros, David Turner,
  Denton Liu, Derrick Stolee, Đoàn Trần Công Danh, Elijah
  Newren, Emily Shaffer, Eric Sunshine, Fangyi Zhou, Hans
  Jerry Illikainen, Hariom Verma, Heba Waly, Jean-Noël Avila,
  Jeff King, Jiang Xin, Johan Herland, Johannes Berg, Johannes
  Schindelin, Johannes Sixt, Jonathan Nieder, Jonathan Tan, Jordi
  Mas, Junio C Hamano, Kevin Willford, Kyle Meyer, Luke Diamand,
  Martin Ågren, Masaya Suzuki, Matheus Tavares, Matthew Rogers,
  Matthias Rüster, Miriam Rubio, Paolo Bonzini, Peter Krefting,
  Philippe Blain, Pranit Bauva, Pratyush Yadav, Ralf Thielow,
  René Scharfe, SZEDER Gábor, Tanushree Tumane, Taylor Blau,
  Trần Ngọc Quân, and Yi-Jyun Pan.

----------------------------------------------------------------

Git 2.26 Release Notes
======================

Updates since v2.25
-------------------

Backward compatibility notes

 * "git rebase" uses a different backend that is based on the 'merge'
   machinery by default.  There are a few known differences in the
   behaviour from the traditional machinery based on patch+apply.

   If your workflow is negatively affected by this change, please
   report it to git@vger.kernel.org so that we can take a look into
   it.  After doing so, you can set the 'rebase.backend' configuration
   variable to 'apply', in order to use the old default behaviour in
   the meantime.


UI, Workflows & Features

 * Sample credential helper for using .netrc has been updated to work
   out of the box.

 * gpg.minTrustLevel configuration variable has been introduced to
   tell various signature verification codepaths the required minimum
   trust level.

 * The command line completion (in contrib/) learned to complete
   subcommands and arguments to "git worktree".

 * Disambiguation logic to tell revisions and pathspec apart has been
   tweaked so that backslash-escaped glob special characters do not
   count in the "wildcards are pathspec" rule.

 * One effect of specifying where the GIT_DIR is (either with the
   environment variable, or with the "git --git-dir=<where> cmd"
   option) is to disable the repository discovery.  This has been
   placed a bit more stress in the documentation, as new users often
   get confused.

 * Two help messages given when "git add" notices the user gave it
   nothing to add have been updated to use advise() API.

 * A new version of fsmonitor-watchman hook has been introduced, to
   avoid races.

 * "git config" learned to show in which "scope", in addition to in
   which file, each config setting comes from.

 * The basic 7 colors learned the brighter counterparts
   (e.g. "brightred").

 * "git sparse-checkout" learned a new "add" subcommand.

 * A configuration element used for credential subsystem can now use
   wildcard pattern to specify for which set of URLs the entry
   applies.

 * "git clone --recurse-submodules --single-branch" now uses the same
   single-branch option when cloning the submodules.

 * "git rm" and "git stash" learns the new "--pathspec-from-file"
   option.

 * "git am --show-current-patch" is a way to show the piece of e-mail
   for the stopped step, which is not suitable to directly feed "git
   apply" (it is designed to be a good "git am" input).  It learned a
   new option to show only the patch part.

 * Handling of conflicting renames in merge-recursive have further
   been made consistent with how existing codepaths try to mimic what
   is done to add/add conflicts.


Performance, Internal Implementation, Development Support etc.

 * Tell .editorconfig that in this project, *.txt files are indented
   with tabs.

 * The test-lint machinery knew to check "VAR=VAL shell_function"
   construct, but did not check "VAR= shell_function", which has been
   corrected.

 * Replace "git config --bool" calls with "git config --type=bool" in
   sample templates.

 * The effort to move "git-add--interactive" to C continues.

 * Improve error message generation for "git submodule add".

 * Preparation of test scripts for the day when the object names will
   use SHA-256 continues.

 * Warn programmers about pretend_object_file() that allows the code
   to tentatively use in-core objects.

 * The way "git pack-objects" reuses objects stored in existing pack
   to generate its result has been improved.

 * The transport protocol version 2 becomes the default one.

 * Traditionally, we avoided threaded grep while searching in objects
   (as opposed to files in the working tree) as accesses to the object
   layer is not thread-safe.  This limitation is getting lifted.

 * "git rebase -i" (and friends) used to unnecessarily check out the
   tip of the branch to be rebased, which has been corrected.

 * A low-level API function get_oid(), that accepts various ways to
   name an object, used to issue end-user facing error messages
   without l10n, which has been updated to be translatable.

 * Unneeded connectivity check is now disabled in a partial clone when
   fetching into it.

 * Some rough edges in the sparse-checkout feature, especially around
   the cone mode, have been cleaned up.

 * The diff-* plumbing family of subcommands now pay attention to the
   diff.wsErrorHighlight configuration, which has been ignored before;
   this allows "git add -p" to also show the whitespace problems to
   the end user.

 * Some codepaths were given a repository instance as a parameter to
   work in the repository, but passed the_repository instance to its
   callees, which has been cleaned up (somewhat).

 * Memory footprint and performance of "git name-rev" has been
   improved.

 * The object reachability bitmap machinery and the partial cloning
   machinery were not prepared to work well together, because some
   object-filtering criteria that partial clones use inherently rely
   on object traversal, but the bitmap machinery is an optimization
   to bypass that object traversal.  There however are some cases
   where they can work together, and they were taught about them.

 * "git rebase" has learned to use the merge backend (i.e. the
   machinery that drives "rebase -i") by default, while allowing
   "--apply" option to use the "apply" backend (e.g. the moral
   equivalent of "format-patch piped to am").  The rebase.backend
   configuration variable can be set to customize.

 * Underlying machinery of "git bisect--helper" is being refactored
   into pieces that are more easily reused.


Fixes since v2.25
-----------------

 * "git commit" gives output similar to "git status" when there is
   nothing to commit, but without honoring the advise.statusHints
   configuration variable, which has been corrected.

 * has_object_file() said "no" given an object registered to the
   system via pretend_object_file(), making it inconsistent with
   read_object_file(), causing lazy fetch to attempt fetching an
   empty tree from promisor remotes.

 * Complete an update to tutorial that encourages "git switch" over
   "git checkout" that was done only half-way.

 * C pedantry ;-) fix.

 * The code that tries to skip over the entries for the paths in a
   single directory using the cache-tree was not careful enough
   against corrupt index file.

 * Reduce unnecessary round-trip when running "ls-remote" over the
   stateless RPC mechanism.

 * "git restore --staged" did not correctly update the cache-tree
   structure, resulting in bogus trees to be written afterwards, which
   has been corrected.

 * The code recently added to move to the entry beyond the ones in the
   same directory in the index in the sparse-cone mode did not count
   the number of entries to skip over incorrectly, which has been
   corrected.

 * Rendering by "git log --graph" of ancestry lines leading to a merge
   commit were made suboptimal to waste vertical space a bit with a
   recent update, which has been corrected.

 * Work around test breakages caused by custom regex engine used in
   libasan, when address sanitizer is used with more recent versions
   of gcc and clang.

 * Minor bugfixes to "git add -i" that has recently been rewritten in C.

 * "git fetch --refmap=" option has got a better documentation.

 * "git checkout X" did not correctly fail when X is not a local
   branch but could name more than one remote-tracking branches
   (i.e. to be dwimmed as the starting point to create a corresponding
   local branch), which has been corrected.
   (merge fa74180d08 am/checkout-file-and-ref-ref-ambiguity later to maint).

 * Corner case bugs in "git clean" that stems from a (necessarily for
   performance reasons) awkward calling convention in the directory
   enumeration API has been corrected.

 * A fetch that is told to recursively fetch updates in submodules
   inevitably produces reams of output, and it becomes hard to spot
   error messages.  The command has been taught to enumerate
   submodules that had errors at the end of the operation.
   (merge 0222540827 es/fetch-show-failed-submodules-atend later to maint).

 * The "--recurse-submodules" option of various subcommands did not
   work well when run in an alternate worktree, which has been
   corrected.

 * Futureproofing a test not to depend on the current implementation
   detail.

 * Running "git rm" on a submodule failed unnecessarily when
   .gitmodules is only cache-dirty, which has been corrected.

 * C pedantry ;-) fix.

 * "git grep --no-index" should not get affected by the contents of
   the .gitmodules file but when "--recurse-submodules" is given or
   the "submodule.recurse" variable is set, it did.  Now these
   settings are ignored in the "--no-index" mode.

 * Technical details of the bundle format has been documented.

 * Unhelpful warning messages during documentation build have been squelched.

 * "git rebase -i" identifies existing commits in its todo file with
   their abbreviated object name, which could become ambiguous as it
   goes to create new commits, and has a mechanism to avoid ambiguity
   in the main part of its execution.  A few other cases however were
   not covered by the protection against ambiguity, which has been
   corrected.

 * Allow the rebase.missingCommitsCheck configuration to kick in when
   "rebase --edit-todo" and "rebase --continue" restarts the procedure.
   (merge 5a5445d878 ag/edit-todo-drop-check later to maint).

 * The way "git submodule status" reports an initialized but not yet
   populated submodule has not been reimplemented correctly when a
   part of the "git submodule" command was rewritten in C, which has
   been corrected.
   (merge f38c92452d pk/status-of-uncloned-submodule later to maint).

 * The code to automatically shrink the fan-out in the notes tree had
   an off-by-one bug, which has been killed.

 * The index-pack code now diagnoses a bad input packstream that
   records the same object twice when it is used as delta base; the
   code used to declare a software bug when encountering such an
   input, but it is an input error.


 * The code to compute the commit-graph has been taught to use a more
   robust way to tell if two object directories refer to the same
   thing.
   (merge a7df60cac8 tb/commit-graph-object-dir later to maint).

 * "git remote rename X Y" needs to adjust configuration variables
   (e.g. branch.<name>.remote) whose value used to be X to Y.
   branch.<name>.pushRemote is now also updated.

 * Update to doc-diff.

 * Doc markup fix.

 * "git check-ignore" did not work when the given path is explicitly
   marked as not ignored with a negative entry in the .gitignore file.

 * The merge-recursive machinery failed to refresh the cache entry for
   a merge result in a couple of places, resulting in an unnecessary
   merge failure, which has been fixed.

 * Fix for a bug revealed by a recent change to make the protocol v2
   the default.

 * In rare cases "git worktree add <path>" could think that <path>
   was already a registered worktree even when it wasn't and refuse
   to add the new worktree. This has been corrected.
   (merge bb69b3b009 es/worktree-avoid-duplication-fix later to maint).

 * "git push" should stop from updating a branch that is checked out
   when receive.denyCurrentBranch configuration is set, but it failed
   to pay attention to checkouts in secondary worktrees.  This has
   been corrected.
   (merge 4d864895a2 hv/receive-denycurrent-everywhere later to maint).

 * "git rebase BASE BRANCH" rebased/updated the tip of BRANCH and
   checked it out, even when the BRANCH is checked out in a different
   worktree.  This has been corrected.
   (merge b5cabb4a96 es/do-not-let-rebase-switch-to-protected-branch later to maint).

 * "git describe" in a repository with multiple root commits sometimes
   gave up looking for the best tag to describe a given commit with
   too early, which has been adjusted.

 * "git merge signed-tag" while lacking the public key started to say
   "No signature", which was utterly wrong.  This regression has been
   reverted.

 * MinGW's poll() emulation has been improved.

 * "git show" and others gave an object name in raw format in its
   error output, which has been corrected to give it in hex.

 * "git fetch" over HTTP walker protocol did not show any progress
   output.  We inherently do not know how much work remains, but still
   we can show something not to bore users.
   (merge 7655b4119d rs/show-progress-in-dumb-http-fetch later to maint).

 * Both "git ls-remote -h" and "git grep -h" give short usage help,
   like any other Git subcommand, but it is not unreasonable to expect
   that the former would behave the same as "git ls-remote --head"
   (there is no other sensible behaviour for the latter).  The
   documentation has been updated in an attempt to clarify this.

 * Other code cleanup, docfix, build fix, etc.
   (merge d0d0a357a1 am/update-pathspec-f-f-tests later to maint).
   (merge f94f7bd00d am/test-pathspec-f-f-error-cases later to maint).
   (merge c513a958b6 ss/t6025-modernize later to maint).
   (merge b441717256 dl/test-must-fail-fixes later to maint).
   (merge d031049da3 mt/sparse-checkout-doc-update later to maint).
   (merge 145136a95a jc/skip-prefix later to maint).
   (merge 5290d45134 jk/alloc-cleanups later to maint).
   (merge 7a9f8ca805 rs/parse-options-concat-dup later to maint).
   (merge 517b60564e rs/strbuf-insertstr later to maint).
   (merge f696a2b1c8 jk/mailinfo-cleanup later to maint).
   (merge de26f02db1 js/test-avoid-pipe later to maint).
   (merge a2dc43414c es/doc-mentoring later to maint).
   (merge 02bbbe9df9 es/worktree-cleanup later to maint).
   (merge 2ce6d075fa rs/micro-cleanups later to maint).
   (merge 27f182b3fc rs/blame-typefix-for-fingerprint later to maint).
   (merge 3c29e21eb0 ma/test-cleanup later to maint).
   (merge 240fc04f81 ag/rebase-remove-redundant-code later to maint).
   (merge d68ce906c7 rs/commit-graph-code-simplification later to maint).
   (merge a51d9e8f07 rj/t1050-use-test-path-is-file later to maint).
   (merge fd0bc17557 kk/complete-diff-color-moved later to maint).
   (merge 65bf820d0e en/test-cleanup later to maint).

----------------------------------------------------------------

Changes since v2.25.0 are as follows:

Abhishek Kumar (2):
      lib-log-graph: consolidate test_cmp_graph logic
      lib-log-graph: consolidate colored graph cmp logic

Alban Gruin (4):
      rebase -i: stop checking out the tip of the branch to rebase
      sequencer: move check_todo_list_from_file() to rebase-interactive.c
      rebase-interactive: warn if commit is dropped with `rebase --edit-todo'
      builtin/rebase: remove a call to get_oid() on `options.switch_to'

Alessandro Menti (2):
      l10n: it.po: update the Italian translation for Git 2.26.0 round 1
      l10n: it.po: update the Italian translation for Git 2.26.0 round 2

Alexander Shopov (2):
      l10n: bg.po: Updated Bulgarian translation (4835t)
      l10n: bg.po: Updated Bulgarian translation (4839t)

Alexandr Miloslavskiy (14):
      parse_branchname_arg(): extract part as new function
      checkout: don't revert file on ambiguous tracking branches
      t: add tests for error conditions with --pathspec-from-file
      t: fix quotes tests for --pathspec-from-file
      t: directly test parse_pathspec_file()
      doc: rm: synchronize <pathspec> description
      rm: support the --pathspec-from-file option
      doc: stash: split options from description (1)
      doc: stash: split options from description (2)
      doc: stash: document more options
      doc: stash: synchronize <pathspec> description
      stash: eliminate crude option parsing
      stash push: support the --pathspec-from-file option
      mingw: workaround for hangs when sending STDIN

Beat Bolli (1):
      unicode: update the width tables to Unicode 13.0

Benno Evers (1):
      describe: don't abort too early when searching tags

Bert Wesarg (6):
      pull --rebase/remote rename: document and honor single-letter abbreviations rebase types
      remote: clean-up by returning early to avoid one indentation
      remote: clean-up config callback
      remote rename/remove: handle branch.<name>.pushRemote config values
      config: provide access to the current line number
      remote rename/remove: gently handle remote.pushDefault config

Christian Stimming (3):
      git-gui: update pot template and German translation to current source code
      git-gui: extend translation glossary template with more terms
      git-gui: update German translation

Christopher Diaz Riveros (1):
      l10n: es: 2.26.0 round#2

David Turner (1):
      git rm submodule: succeed if .gitmodules index stat info is zero

Denton Liu (34):
      t/lib-git-p4: use test_path_is_missing()
      t0000: replace test_must_fail with run_sub_test_lib_test_err()
      t0003: use named parameters in attr_check()
      t0003: use test_must_be_empty()
      t0003: don't use `test_must_fail attr_check`
      t0020: don't use `test_must_fail has_cr`
      t0020: use ! check_packed_refs_marked
      t1306: convert `test_might_fail rm` to `rm -f`
      t1307: reorder `nongit test_must_fail`
      t1409: let sed open its own input file
      t1409: use test_path_is_missing()
      t1501: remove use of `test_might_fail cp`
      t1507: stop losing return codes of git commands
      t1507: run commands within test_expect_success
      t1507: inline full_name()
      contrib/credential/netrc: make PERL_PATH configurable
      contrib/credential/netrc: work outside a repo
      t2018: remove trailing space from test description
      t2018: add space between function name and ()
      t2018: improve style of if-statement
      .mailmap: fix erroneous authorship for Johannes Schindelin
      t2018: be more discerning when checking for expected exit codes
      t2018: teach do_checkout() to accept `!` arg
      t2018: don't lose return code of git commands
      t2018: replace "sha" with "oid"
      t3030: use test_path_is_missing()
      t3310: extract common notes_merge_files_gone()
      t3415: stop losing return codes of git commands
      t3415: increase granularity of test_auto_{fixup,squash}()
      t3419: stop losing return code of git command
      t3507: fix indentation
      t3507: use test_path_is_missing()
      t4124: only mark git command with test_must_fail
      .mailmap: map Yi-Jyun Pan's email

Derrick Stolee (26):
      unpack-trees: correctly compute result count
      graph: add test to demonstrate horizontal line bug
      graph: fix collapse of multiple edges
      clean: demonstrate a bug with pathspecs
      fetch: document and test --refmap=""
      t1091: use check_files to reduce boilerplate
      t1091: improve here-docs
      sparse-checkout: create leading directories
      clone: fix --sparse option with URLs
      sparse-checkout: cone mode does not recognize "**"
      sparse-checkout: detect short patterns
      sparse-checkout: warn on globs in cone patterns
      sparse-checkout: properly match escaped characters
      sparse-checkout: write escaped patterns in cone mode
      sparse-checkout: unquote C-style strings over --stdin
      sparse-checkout: use C-style quotes in 'list' subcommand
      sparse-checkout: escape all glob characters on write
      sparse-checkout: improve docs around 'set' in cone mode
      sparse-checkout: fix cone mode behavior mismatch
      sparse-checkout: extract add_patterns_from_input()
      sparse-checkout: extract pattern update from 'set' subcommand
      sparse-checkout: create 'add' subcommand
      sparse-checkout: work with Windows paths
      sparse-checkout: allow one-character directories in cone mode
      partial-clone: demonstrate bugs in partial fetch
      partial-clone: avoid fetching when looking for objects

Elijah Newren (36):
      unpack-trees: exit check_updates() early if updates are not wanted
      string-list: note in docs that callers can specify sorting function
      dir: treat_leading_path() and read_directory_recursive(), round 2
      git-rebase.txt: update description of --allow-empty-message
      t3404: directly test the behavior of interest
      rebase (interactive-backend): make --keep-empty the default
      rebase (interactive-backend): fix handling of commits that become empty
      t3406: simplify an already simple test
      rebase, sequencer: remove the broken GIT_QUIET handling
      rebase: make sure to pass along the quiet flag to the sequencer
      rebase: fix handling of restrict_revision
      t3432: make these tests work with either am or merge backends
      rebase: allow more types of rebases to fast-forward
      git-rebase.txt: add more details about behavioral differences of backends
      rebase: move incompatibility checks between backend options a bit earlier
      rebase: add an --am option
      git-prompt: change the prompt for interactive-based rebases
      rebase: drop '-i' from the reflog for interactive-based rebases
      rebase tests: mark tests specific to the am-backend with --am
      rebase tests: repeat some tests using the merge backend instead of am
      rebase: make the backend configurable via config setting
      rebase: change the default backend from "am" to "merge"
      rebase: rename the two primary rebase backends
      check-ignore: fix documentation and implementation to match
      t3433: new rebase testcase documenting a stat-dirty-like failure
      merge-recursive: fix the refresh logic in update_file_flags
      merge-recursive: apply collision handling unification to recursive case
      t602[1236], t6034: modernize test formatting
      t6020, t6022, t6035: update merge tests to use test helper functions
      t3035: prefer test_must_fail to bash negation for git commands
      t6022, t6046: test expected behavior instead of testing a proxy for it
      t6020: new test with interleaved lexicographic ordering of directories
      sequencer: clear state upon dropping a become-empty commit
      git-rebase.txt: highlight backend differences with commit rewording
      t6022, t6046: fix flaky files-are-updated checks
      RelNotes/2.26.0: fix various typos

Emily Shaffer (9):
      unpack-trees: watch for out-of-range index position
      fetch: emphasize failure during submodule fetch
      MyFirstContribution: add avenues for getting help
      submodule: add newline on invalid submodule error
      MyFirstContribution: rephrase contact info
      prefix_path: show gitdir when arg is outside repo
      submodule--helper: use C99 named initializer
      clone: pass --single-branch during --recurse-submodules
      prefix_path: show gitdir if worktree unavailable

Emir Sarı (5):
      l10n: tr: Add Turkish translation team info
      l10n: tr: Add Turkish translations
      l10n: tr: Add glossary for Turkish translations
      l10n: tr: v2.26.0 round 2
      l10n: tr: Fix a couple of ambiguities

Eric Sunshine (6):
      t3400: make test clean up after itself
      rebase: refuse to switch to branch already checked out elsewhere
      worktree: drop unused code from get_main_worktree()
      worktree: improve find_worktree() documentation
      worktree: add utility to find worktree by pathname
      worktree: don't allow "add" validation to be fooled by suffix matching

Eyal Soha (3):
      color.c: refactor color_output arguments
      color.c: support bright aixterm colors
      color.c: alias RGB colors 8-15 to aixterm colors

Fangyi Zhou (1):
      l10n: zh_CN: Revise v2.26.0 translation

Hans Jerry Illikainen (2):
      editorconfig: indent text files with tabs
      gpg-interface: add minTrustLevel as a configuration option

Harald van Dijk (1):
      show_one_mergetag: print non-parent in hex form.

Hariom Verma (4):
      get_main_worktree(): allow it to be called in the Git directory
      t5509: use a bare repository for test push target
      receive.denyCurrentBranch: respect all worktrees
      t2402: test worktree path when called in .git directory

Heba Waly (5):
      commit: honor advice.statusHints when rejecting an empty commit
      doc/gitcore-tutorial: fix prose to match example command
      add: use advise function to display hints
      git: update documentation for --git-dir
      add: change advice config variables used by the add API

Jacques Bodin-Hullin (1):
      parse-options: lose an unnecessary space in an error message

Jean-Noël Avila (2):
      l10n: fr v2.26.0 rnd1
      l10n: fr : v2.26.0 rnd 2

Jeff King (70):
      builtin/pack-objects: report reused packfile objects
      packfile: expose get_delta_base()
      restore: invalidate cache-tree when removing entries with --staged
      transport: don't flush when disconnecting stateless-rpc helper
      dir: restructure in a way to avoid passing around a struct dirent
      dir: point treat_leading_path() warning to the right place
      Makefile: use compat regex with SANITIZE=address
      t4018: drop "debugging" cat from hunk-header tests
      t7800: don't rely on reuse_worktree_file()
      ewah/bitmap: introduce bitmap_word_alloc()
      pack-bitmap: introduce bitmap_walk_contains()
      pack-bitmap: uninteresting oid can be outside bitmapped packfile
      pack-bitmap: simplify bitmap_has_oid_in_uninteresting()
      csum-file: introduce hashfile_total()
      pack-objects: introduce pack.allowPackReuse
      builtin/pack-objects: introduce obj_is_packed()
      pack-objects: improve partial packfile reuse
      pack-objects: add checks for duplicate objects
      pack-bitmap: don't rely on bitmap_git->reuse_objects
      sparse-checkout: fix documentation typo for core.sparseCheckoutCone
      verify_filename(): handle backslashes in "wildcards are pathspecs" rule
      merge-recursive: silence -Wxor-used-as-pow warning
      t1400: avoid "test" string comparisons
      t1506: drop space after redirection operator
      avoid computing zero offsets from NULL pointer
      xdiff: avoid computing non-zero offset from NULL pointer
      obstack: avoid computing offsets from NULL pointer
      doc: drop "explicitly given" from push.default description
      sha1-name: mark get_oid() error messages for translation
      normalize_path_copy(): document "dst" size expectations
      walker_fetch(): avoid raw array length computation
      traverse_trees(): use stack array for name entries
      diff: move diff.wsErrorHighlight to "basic" config
      tree-walk.c: break circular dependency with unpack-trees
      index-pack: downgrade twice-resolved REF_DELTA to die()
      mailinfo: treat header values as C strings
      mailinfo: simplify parsing of header values
      mailinfo: be more liberal with header whitespace
      mailinfo: factor out some repeated header handling
      pack-bitmap: factor out type iterator initialization
      pack-bitmap: fix leak of haves/wants object lists
      rev-list: fallback to non-bitmap traversal when filtering
      pack-bitmap: refuse to do a bitmap traversal with pathspecs
      rev-list: factor out bitmap-optimized routines
      rev-list: make --count work with --objects
      rev-list: allow bitmaps when counting objects
      t5310: factor out bitmap traversal comparison
      rev-list: allow commit-only bitmap traversals
      pack-bitmap: basic noop bitmap filter infrastructure
      rev-list: use bitmap filters for traversal
      bitmap: add bitmap_unset() function
      pack-bitmap: implement BLOB_NONE filtering
      pack-bitmap: implement BLOB_LIMIT filtering
      pack-objects: support filters with bitmaps
      doc: move credential helper info into gitcredentials(7)
      doc/config/push: use longer "--" line for preformatted example
      doc-diff: use single-colon rule in rendering Makefile
      run-command.h: fix mis-indented struct member
      nth_packed_object_oid(): use customary integer return
      pack-objects: read delta base oid into object_id struct
      pack-objects: convert oe_set_delta_ext() to use object_id
      pack-objects: use object_id struct in pack-reuse code
      pack-bitmap: use object_id when loading on-disk bitmaps
      pack-check: convert "internal error" die to a BUG()
      pack-check: push oid lookup into loop
      packed_object_info(): use object_id for returning delta base
      packed_object_info(): use object_id internally for delta base
      packfile: drop nth_packed_object_sha1()
      config.mak.dev: re-enable -Wformat-zero-length
      remote: drop "explicit" parameter from remote_ref_for_branch()

Jiang Xin (5):
      l10n: git.pot: v2.26.0 round 1 (73 new, 38 removed)
      l10n: git.pot: v2.26.0 round 2 (7 new, 2 removed)
      i18n: unmark a message in rebase.c
      l10n: zh_CN: for git v2.26.0 l10n round 1 and 2
      l10n: tr.po: change file mode to 644

Johan Herland (2):
      t3305: check notes fanout more carefully and robustly
      notes.c: fix off-by-one error when decreasing notes fanout

Johannes Berg (1):
      pack-format: correct multi-pack-index description

Johannes Schindelin (33):
      built-in add -p: prepare for patch modes other than "stage"
      built-in add -p: implement the "stash" and "reset" patch modes
      legacy stash -p: respect the add.interactive.usebuiltin setting
      built-in stash: use the built-in `git add -p` if so configured
      built-in add -p: implement the "checkout" patch modes
      built-in add -p: implement the "worktree" patch modes
      commit --interactive: make it work with the built-in `add -i`
      t3701: adjust difffilter test
      built-in add -p: support interactive.diffFilter
      built-in add -p: handle diff.algorithm
      terminal: make the code of disable_echo() reusable
      terminal: accommodate Git for Windows' default terminal
      terminal: add a new function to read a single keystroke
      built-in add -p: respect the `interactive.singlekey` config setting
      built-in add -p: handle Escape sequences in interactive.singlekey mode
      built-in add -p: handle Escape sequences more efficiently
      ci: include the built-in `git add -i` in the `linux-gcc` job
      msvc: accommodate for vcpkg's upgrade to OpenSSL v1.1.x
      built-in add -i: do not try to `patch`/`diff` an empty list of files
      built-in add -i: accept open-ended ranges again
      parse_insn_line(): improve error message when parsing failed
      rebase -i: re-fix short SHA-1 collision
      rebase -i: also avoid SHA-1 collisions with missingCommitsCheck
      ci: ignore rubygems warning in the "Documentation" job
      convert: fix typo
      tests: fix --write-junit-xml with subshells
      t9001, t9116: avoid pipes
      t5580: test cloning without file://, test fetching via UNC paths
      mingw: add a helper function to attach GDB to the current process
      t/lib-httpd: avoid using macOS' sed
      ci: prevent `perforce` from being quarantined
      Azure Pipeline: switch to the latest agent pools
      t5537: adjust test_oid label

Johannes Sixt (1):
      t3504: do check for conflict marker after failed cherry-pick

Jonathan Nieder (9):
      sha1-file: document how to use pretend_object_file
      fetch test: avoid use of "VAR= cmd" with a shell function
      t/check-non-portable-shell: detect "FOO= shell_func", too
      fetch test: mark test of "skipping" haves as v0-only
      fetch test: use more robust test for filtered objects
      config doc: protocol.version is not experimental
      test: request GIT_TEST_PROTOCOL_VERSION=0 when appropriate
      protocol test: let protocol.version override GIT_TEST_PROTOCOL_VERSION
      fetch: default to protocol version 2

Jonathan Tan (4):
      sha1-file: remove OBJECT_INFO_SKIP_CACHED
      t5616: make robust to delta base change
      connected: verify promisor-ness of partial clone
      fetch: forgo full connectivity check if --filter

Jordi Mas (3):
      l10n: Update Catalan translation
      l10n: Update Catalan translation
      l10n: Update Catalan translation

Junio C Hamano (21):
      The first batch post 2.25 cycle
      merge-recursive: use subtraction to flip stage
      .mailmap: fix GGG authoship screwup
      The second batch
      C: use skip_prefix() to avoid hardcoded string length
      The third batch for 2.26
      The fourth batch for 2.26
      The fifth batch for 2.26
      Git 2.25.1
      The sixth batch for 2.26
      rev-list --count: comment on the use of count_right++
      The seventh batch for 2.26
      Documentation: clarify that `-h` alone stands for `help`
      Revert "gpg-interface: prefer check_signature() for GPG verification"
      The eighth batch for 2.26
      Git 2.26-rc0
      Git 2.26-rc1
      Hopefully the final batch before -rc2
      Git 2.26-rc2
      Git 2.25.2
      Git 2.26

Kevin Willford (4):
      fsmonitor: change last update timestamp on the index_state to opaque token
      fsmonitor: handle version 2 of the hooks that will use opaque token
      fsmonitor: add fsmonitor hook scripts for version 2
      fsmonitor: update documentation for hook version and watchman hooks

Kir Kolyshkin (1):
      completion: add diff --color-moved[-ws]

Kyle Meyer (2):
      submodule add: show 'add --dry-run' stderr when aborting
      submodule foreach: replace $path with $sm_path in example

Lucius Hu (1):
      templates: fix deprecated type option `--bool`

Luke Bonanomi (1):
      git-gui--askpass: coerce answers to UTF-8 on Windows

Luke Diamand (7):
      git-p4: make closeStreams() idempotent
      git-p4: add P4CommandException to report errors talking to Perforce
      git-p4: disable some pylint warnings, to get pylint output to something manageable
      git-p4: create helper function importRevisions()
      git-p4: cleanup better on error exit
      git-p4: check for access to remote host earlier
      git-p4: avoid leak of file handle when cloning

Martin Ågren (7):
      git-filter-branch.txt: wrap "maths" notation in backticks
      name-rev: rewrite create_or_update_name()
      diff-options.txt: avoid "regex" overload in example
      t4117: check for files using `test_path_is_file`
      t9810: drop debug `cat` call
      t: drop debug `cat` calls
      t1091: don't grep for `strerror()` string

Masaya Suzuki (1):
      doc: describe Git bundle format

Matheus Tavares (21):
      grep: fix race conditions on userdiff calls
      grep: fix race conditions at grep_submodule()
      grep: fix racy calls in grep_objects()
      replace-object: make replace operations thread-safe
      object-store: allow threaded access to object reading
      grep: replace grep_read_mutex by internal obj read lock
      submodule-config: add skip_if_read option to repo_read_gitmodules()
      grep: allow submodule functions to run in parallel
      grep: protect packed_git [re-]initialization
      grep: re-enable threads in non-worktree case
      grep: move driver pre-load out of critical section
      grep: use no. of cores as the default no. of threads
      doc: sparse-checkout: mention --cone option
      completion: add support for sparse-checkout
      diff: make diff_populate_filespec() honor its repo argument
      cache-tree: use given repo's hash_algo at verify_one()
      pack-check: use given repo's hash_algo at verify_packfile()
      streaming: allow open_istream() to handle any repo
      sha1-file: pass git_hash_algo to write_object_file_prepare()
      sha1-file: pass git_hash_algo to hash_object_file()
      sha1-file: allow check_object_signature() to handle any repo

Matthew Rogers (10):
      config: fix typo in variable name
      t1300: fix over-indented HERE-DOCs
      t1300: create custom config file without special characters
      config: make scope_name non-static and rename it
      config: split repo scope to local and worktree
      config: clarify meaning of command line scoping
      config: preserve scope in do_git_config_sequence
      config: teach git_config_source to remember its scope
      submodule-config: add subomdule config scope
      config: add '--show-scope' to print the scope of a config value

Matthias Rüster (1):
      l10n: de.po: Update German translation for Git 2.26.0

Miriam Rubio (3):
      bisect--helper: convert `vocab_*` char pointers to char arrays
      bisect: use the standard 'if (!var)' way to check for 0
      bisect: add enum to represent bisect returning codes

Paolo Bonzini (5):
      parse-options: add testcases for OPT_CMDMODE()
      parse-options: convert "command mode" to a flag
      am: convert "resume" variable to a struct
      am: support --show-current-patch=raw as a synonym for--show-current-patch
      am: support --show-current-patch=diff to retrieve .git/rebase-apply/patch

Peter Kaestle (3):
      t7400: add a testcase for submodule status on empty dirs
      submodule: fix status of initialized but not cloned submodules
      t7400: testcase for submodule status on unregistered inner git repos

Peter Krefting (2):
      l10n: sv.po: Update Swedish translation (4835t0f0u)
      l10n: sv.po: Update Swedish translation (4839t0f0u)

Philippe Blain (5):
      t7410: rename to t2405-worktree-submodule.sh
      t2405: use git -C and test_commit -C instead of subshells
      t2405: clarify test descriptions and simplify test
      submodule.c: use get_git_dir() instead of get_git_common_dir()
      grep: ignore --recurse-submodules if --no-index is given

Pranit Bauva (7):
      bisect--helper: return error codes from `cmd_bisect__helper()`
      bisect: libify `exit_if_skipped_commits` to `error_if_skipped*` and its dependents
      bisect: libify `bisect_checkout`
      bisect: libify `check_merge_bases` and its dependents
      bisect: libify `check_good_are_ancestors_of_bad` and its dependents
      bisect: libify `handle_bad_merge_base` and its dependents
      bisect: libify `bisect_next_all`

Pratyush Yadav (4):
      git-gui: add missing close bracket
      git-gui: fix error popup when doing blame -> "Show History Context"
      git-gui: reduce Tcl version requirement from 8.6 to 8.5
      git-gui: create a new namespace for chord script evaluation

Ralf Thielow (3):
      submodule.c: mark more strings for translation
      rebase-interactive.c: silence format-zero-length warnings
      l10n: de.po: add missing space

Rasmus Jonsson (1):
      t1050: replace test -f with test_path_is_file

René Scharfe (21):
      name-rev: remove unused typedef
      name-rev: respect const qualifier
      name-rev: don't leak path copy in name_ref()
      name-rev: don't _peek() in create_or_update_name()
      name-rev: put struct rev_name into commit slab
      name-rev: factor out get_parent_name()
      name-rev: pre-size buffer in get_parent_name()
      name-rev: generate name strings only if they are better
      name-rev: release unused name strings
      name-rev: sort tip names before applying
      strbuf: add and use strbuf_insertstr()
      mailinfo: don't insert header prefix for handle_content_type()
      parse-options: use COPY_ARRAY in parse_options_concat()
      parse-options: factor out parse_options_count()
      parse-options: const parse_options_concat() parameters
      parse-options: simplify parse_options_dup()
      quote: use isalnum() to check for alphanumeric characters
      use strpbrk(3) to search for characters from a given set
      blame: provide type of fingerprints pointer
      commit-graph: use progress title directly
      remote-curl: show progress for fetches over dumb HTTP

SZEDER Gábor (6):
      t9902-completion: add tests for the __git_find_on_cmdline() helper
      completion: clean up the __git_find_on_cmdline() helper function
      completion: return the index of found word from __git_find_on_cmdline()
      completion: simplify completing 'git worktree' subcommands and options
      completion: list existing working trees for 'git worktree' subcommands
      completion: list paths and refs for 'git worktree add'

Shourya Shukla (2):
      t6025: modernize style
      t6025: use helpers to replace test -f <path>

Tanushree Tumane (2):
      bisect--helper: change `retval` to `res`
      bisect--helper: introduce new `decide_next()` function

Taylor Blau (5):
      t5318: don't pass non-object directory to '--object-dir'
      commit-graph.h: store an odb in 'struct write_commit_graph_context'
      commit-graph.h: store object directory in 'struct commit_graph'
      commit-graph.c: remove path normalization, comparison
      commit-graph.h: use odb in 'load_commit_graph_one_fd_st'

Trần Ngọc Quân (1):
      l10n: vi(4839t): Updated Vietnamese translation for v2.26.0

Yi-Jyun Pan (2):
      l10n: zh_TW.po: v2.26.0 round 1 (11 untranslated)
      l10n: zh_TW.po: v2.26.0 round 2 (0 untranslated)

brian m. carlson (54):
      run-command: avoid undefined behavior in exists_in_PATH
      t4054: make hash-size independent
      t4066: compute index line in diffs
      t4134: compute appropriate length constant
      t4200: make hash size independent
      t4202: abstract away SHA-1-specific constants
      t4204: make hash size independent
      t4300: abstract away SHA-1-specific constants
      t5318: update for SHA-256
      t5319: change invalid offset for SHA-256 compatibility
      t5319: make test work with SHA-256
      t5324: make hash size independent
      t5504: make hash algorithm independent
      t5510: make hash size independent
      t5512: abstract away SHA-1-specific constants
      t5530: compute results based on object length
      t5537: make hash size independent
      t5540: make hash size independent
      t5562: use $ZERO_OID
      t5601: switch into repository to hash object
      t5604: make hash independent
      docs: use "currently" for the present time
      doc: move author and committer information to git-commit(1)
      docs: expand on possible and recommended user config options
      doc: provide guidance on user.name format
      doc: dissuade users from trying to ignore tracked files
      docs: mention when increasing http.postBuffer is valuable
      t/lib-pack: support SHA-256
      t3206: make hash size independent
      t3308: make test work with SHA-256
      t3309: make test work with SHA-256
      t3310: make test work with SHA-256
      t3311: make test work with SHA-256
      t4013: make test hash independent
      t4211: move SHA-1-specific test cases into a directory
      t4211: add test cases for SHA-256
      t4060: make test work with SHA-256
      t5302: make hash size independent
      t5309: make test hash independent
      t5313: make test hash independent
      t5321: make test hash independent
      t5515: make test hash independent
      t5318: update for SHA-256
      t5607: make hash size independent
      t5703: make test work with SHA-256
      t6000: abstract away SHA-1-specific constants
      t6006: make hash size independent
      t6024: update for SHA-256
      mailmap: add an additional email address for brian m. carlson
      t1300: add test for urlmatch with multiple wildcards
      t0300: add tests for some additional cases
      credential: use the last matching username in the config
      credential: allow wildcard patterns when matching config
      t3419: prevent failure when run with EXPENSIVE

Đoàn Trần Công Danh (1):
      l10n: vi: fix translation + grammar


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.26.0-rc2
@ 2020-03-16 23:25  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2020-03-16 23:25 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.26.0-rc2 is now available for testing
at the usual places.  It is comprised of 463 non-merge commits
since v2.25.0, contributed by 48 people, 10 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.26.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.25.0 are as follows.
Welcome to the Git development community!

  Abhishek Kumar, Benno Evers, Eyal Soha, Harald van Dijk,
  Jacques Bodin-Hullin, Kir Kolyshkin, Lucius Hu, Peter Kaestle,
  Rasmus Jonsson, and Shourya Shukla.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alban Gruin, Alexandr Miloslavskiy, Bert Wesarg, brian
  m. carlson, David Turner, Denton Liu, Derrick Stolee, Elijah
  Newren, Emily Shaffer, Eric Sunshine, Hans Jerry Illikainen,
  Hariom Verma, Heba Waly, Jeff King, Jiang Xin, Johan Herland,
  Johannes Berg, Johannes Schindelin, Johannes Sixt, Jonathan
  Nieder, Jonathan Tan, Junio C Hamano, Kevin Willford, Kyle Meyer,
  Luke Diamand, Martin Ågren, Masaya Suzuki, Matheus Tavares,
  Matthew Rogers, Miriam Rubio, Paolo Bonzini, Philippe Blain,
  Pranit Bauva, Ralf Thielow, René Scharfe, SZEDER Gábor,
  Tanushree Tumane, and Taylor Blau.

----------------------------------------------------------------

Git 2.26 Release Notes (draft)
==============================

Updates since v2.25
-------------------

Backward compatibility notes

 * "git rebase" uses a different backend that is based on the 'merge'
   machinery by default.  There are a few known differences in the
   behaviour from the traditional machniery based on patch+apply.

   If your workflow is negatively affected by this change, please
   report it to git@vger.kernel.org so that we can take a look into
   it.  After doing so, you can set the 'rebase.backend' configuration
   variable to 'apply', in order to use the old default behaviour in
   the meantime.


UI, Workflows & Features

 * Sample credential helper for using .netrc has been updated to work
   out of the box.

 * gpg.minTrustLevel configuration variable has been introduced to
   tell various signature verification codepaths the required minimum
   trust level.

 * The command line completion (in contrib/) learned to complete
   subcommands and arguments to "git worktree".

 * Disambiguation logic to tell revisions and pathspec apart has been
   tweaked so that backslash-escaped glob special characters do not
   count in the "wildcards are pathspec" rule.

 * One effect of specifying where the GIT_DIR is (either with the
   environment variable, or with the "git --git-dir=<where> cmd"
   option) is to disable the repository discovery.  This has been
   placed a bit more stress in the documentation, as new users often
   get confused.

 * Two help messages given when "git add" notices the user gave it
   nothing to add have been updated to use advise() API.

 * A new version of fsmonitor-watchman hook has been introduced, to
   avoid races.

 * "git config" learned to show in which "scope", in addition to in
   which file, each config setting comes from.

 * The basic 7 colors learned the brighter counterparts
   (e.g. "brightred").

 * "git sparse-checkout" learned a new "add" subcommand.

 * A configuration element used for credential subsystem can now use
   wildcard pattern to specify for which set of URLs the entry
   applies.

 * "git clone --recurse-submodules --single-branch" now uses the same
   single-branch option when cloning the submodules.

 * "git rm" and "git stash" learns the new "--pathspec-from-file"
   option.

 * "git am --short-current-patch" is a way to show the piece of e-mail
   for the stopped step, which is not suitable to directly feed "git
   apply" (it is designed to be a good "git am" input).  It learned a
   new option to show only the patch part.

 * Handling of conflicting renames in merge-recursive have further
   been made consistent with how existing codepaths try to mimic what
   is done to add/add conflicts.


Performance, Internal Implementation, Development Support etc.

 * Tell .editorconfig that in this project, *.txt files are indented
   with tabs.

 * The test-lint machinery knew to check "VAR=VAL shell_function"
   construct, but did not check "VAR= shell_funciton", which has been
   corrected.

 * Replace "git config --bool" calls with "git config --type=bool" in
   sample templates.

 * The effort to move "git-add--interactive" to C continues.

 * Improve error message generation for "git submodule add".

 * Preparation of test scripts for the day when the object names will
   use SHA-256 continues.

 * Warn programmers about pretend_object_file() that allows the code
   to tentatively use in-core objects.

 * The way "git pack-objects" reuses objects stored in existing pack
   to generate its result has been improved.

 * The transport protocol version 2 becomes the default one.

 * Traditionally, we avoided threaded grep while searching in objects
   (as opposed to files in the working tree) as accesses to the object
   layer is not thread-safe.  This limitation is getting lifted.

 * "git rebase -i" (and friends) used to unnecessarily check out the
   tip of the branch to be rebased, which has been corrected.

 * A low-level API function get_oid(), that accepts various ways to
   name an object, used to issue end-user facing error messages
   without l10n, which has been updated to be translatable.

 * Unneeded connectivity check is now disabled in a partial clone when
   fetching into it.

 * Some rough edges in the sparse-checkout feature, especially around
   the cone mode, have been cleaned up.

 * The diff-* plumbing family of subcommands now pay attention to the
   diff.wsErrorHighlight configuration, which has been ignored before;
   this allows "git add -p" to also show the whitespace problems to
   the end user.

 * Some codepaths were given a repository instance as a parameter to
   work in the repository, but passed the_repository instance to its
   callees, which has been cleaned up (somewhat).

 * Memory footprint and performance of "git name-rev" has been
   improved.

 * The object reachability bitmap machinery and the partial cloning
   machinery were not prepared to work well together, because some
   object-filtering criteria that partial clones use inherently rely
   on object traversal, but the bitmap machinery is an optimization
   to bypass that object traversal.  There however are some cases
   where they can work together, and they were taught about them.

 * "git rebase" has learned to use the merge backend (i.e. the
   machinery that drives "rebase -i") by default, while allowing
   "--apply" option to use the "apply" backend (e.g. the moral
   equivalent of "format-patch piped to am").  The rebase.backend
   configuration variable can be set to customize.

 * Underlying machinery of "git bisect--helper" is being refactored
   into pieces that are more easily reused.


Fixes since v2.25
-----------------

 * "git commit" gives output similar to "git status" when there is
   nothing to commit, but without honoring the advise.statusHints
   configuration variable, which has been corrected.

 * has_object_file() said "no" given an object registered to the
   system via pretend_object_file(), making it inconsistent with
   read_object_file(), causing lazy fetch to attempt fetching an
   empty tree from promisor remotes.

 * Complete an update to tutorial that encourages "git switch" over
   "git checkout" that was done only half-way.

 * C pedantry ;-) fix.

 * The code that tries to skip over the entries for the paths in a
   single directory using the cache-tree was not careful enough
   against corrupt index file.

 * Reduce unnecessary round-trip when running "ls-remote" over the
   stateless RPC mechanism.

 * "git restore --staged" did not correctly update the cache-tree
   structure, resulting in bogus trees to be written afterwards, which
   has been corrected.

 * The code recently added to move to the entry beyond the ones in the
   same directory in the index in the sparse-cone mode did not count
   the number of entries to skip over incorrectly, which has been
   corrected.

 * Rendering by "git log --graph" of ancestry lines leading to a merge
   commit were made suboptimal to waste vertical space a bit with a
   recent update, which has been corrected.

 * Work around test breakages caused by custom regex engine used in
   libasan, when address sanitizer is used with more recent versions
   of gcc and clang.

 * Minor bugfixes to "git add -i" that has recently been rewritten in C.
   (merge 849e43cc18 js/builtin-add-i-cmds later to maint).

 * "git fetch --refmap=" option has got a better documentation.

 * "git checkout X" did not correctly fail when X is not a local
   branch but could name more than one remote-tracking branches
   (i.e. to be dwimmed as the starting point to create a corresponding
   local branch), which has been corrected.
   (merge fa74180d08 am/checkout-file-and-ref-ref-ambiguity later to maint).

 * Corner case bugs in "git clean" that stems from a (necessarily for
   performance reasons) awkward calling convention in the directory
   enumeration API has been corrected.

 * A fetch that is told to recursively fetch updates in submodules
   inevitably produces reams of output, and it becomes hard to spot
   error messages.  The command has been taught to enumerate
   submodules that had errors at the end of the operation.
   (merge 0222540827 es/fetch-show-failed-submodules-atend later to maint).

 * The "--recurse-submodules" option of various subcommands did not
   work well when run in an alternate worktree, which has been
   corrected.
   (merge a9472afb63 pb/recurse-submodule-in-worktree-fix later to maint).

 * Futureproofing a test not to depend on the current implementation
   detail.

 * Running "git rm" on a submodule failed unnecessarily when
   .gitmodules is only cache-dirty, which has been corrected.
   (merge 7edee32985 dt/submodule-rm-with-stale-cache later to maint).

 * C pedantry ;-) fix.
   (merge cf82bff73f jk/clang-sanitizer-fixes later to maint).

 * "git grep --no-index" should not get affected by the contents of
   the .gitmodules file but when "--recurse-submodules" is given or
   the "submodule.recurse" variable is set, it did.  Now these
   settings are ignored in the "--no-index" mode.

 * Technical details of the bundle format has been documented.

 * Unhelpful warning messages during documentation build have been squelched.

 * "git rebase -i" identifies existing commits in its todo file with
   their abbreviated object name, which could become ambigous as it
   goes to create new commits, and has a mechanism to avoid ambiguity
   in the main part of its execution.  A few other cases however were
   not covered by the protection against ambiguity, which has been
   corrected.
   (merge 26027625dd js/rebase-i-with-colliding-hash later to maint).

 * Allow the rebase.missingCommitsCheck configuration to kick in when
   "rebase --edit-todo" and "rebase --continue" restarts the procedure.
   (merge 5a5445d878 ag/edit-todo-drop-check later to maint).

 * The way "git submodule status" reports an initialized but not yet
   populated submodule has not been reimplemented correctly when a
   part of the "git submodule" command was rewritten in C, which has
   been corrected.
   (merge f38c92452d pk/status-of-uncloned-submodule later to maint).

 * The code to automatically shrink the fan-out in the notes tree had
   an off-by-one bug, which has been killed.
   (merge dbc27477ff jh/notes-fanout-fix later to maint).

 * The index-pack code now diagnoses a bad input packstream that
   records the same object twice when it is used as delta base; the
   code used to declare a software bug when encountering such an
   input, but it is an input error.
   (merge a21781011f jk/index-pack-dupfix later to maint).

 * The code to compute the commit-graph has been taught to use a more
   robust way to tell if two object directories refer to the same
   thing.
   (merge a7df60cac8 tb/commit-graph-object-dir later to maint).

 * "git remote rename X Y" needs to adjust configuration variables
   (e.g. branch.<name>.remote) whose value used to be X to Y.
   branch.<name>.pushRemote is now also updated.

 * Update to doc-diff.
   (merge 2607d39da3 jk/doc-diff-parallel later to maint).

 * Doc markup fix.
   (merge 0aa6ce3094 jk/push-option-doc-markup-fix later to maint).

 * "git check-ignore" did not work when the given path is explicitly
   marked as not ignored with a negative entry in the .gitignore file.
   (merge 7ec8125fba en/check-ignore later to maint).

 * The merge-recursive machinery failed to refresh the cache entry for
   a merge result in a couple of places, resulting in an unnecessary
   merge failure, which has been fixed.
   (merge fb1c18fc46 en/t3433-rebase-stat-dirty-failure later to maint).

 * Fix for a bug revealed by a recent change to make the protocol v2
   the default.
   (merge 3e96c66805 ds/partial-clone-fixes later to maint).

 * In rare cases "git worktree add <path>" could think that <path>
   was already a registered worktree even when it wasn't and refuse
   to add the new worktree. This has been corrected.
   (merge bb69b3b009 es/worktree-avoid-duplication-fix later to maint).

 * "git push" should stop from updating a branch that is checked out
   when receive.denyCurrentBranch configuration is set, but it failed
   to pay attention to checkouts in secondary worktrees.  This has
   been corrected.
   (merge 4d864895a2 hv/receive-denycurrent-everywhere later to maint).

 * "git rebase BASE BRANCH" rebased/updated the tip of BRANCH and
   checked it out, even when the BRANCH is checked out in a different
   worktree.  This has been corrected.
   (merge b5cabb4a96 es/do-not-let-rebase-switch-to-protected-branch later to maint).

 * "git describe" in a repository with multiple root commits sometimes
   gave up looking for the best tag to describe a given commit with
   too early, which has been adjusted.

 * "git merge signed-tag" while lacking the public key started to say
   "No signature", which was utterly wrong.  This regression has been
   reverted.
   (merge 0106b1d4be hi/gpg-use-check-signature later to maint).

 * MinGW's poll() emulation has been improved.
   (merge 94f4d01932 am/mingw-poll-fix later to maint).

 * "git show" and others gave an object name in raw format in its
   error output, which has been corrected to give it in hex.
   (merge 237a28173f hd/show-one-mergetag-fix later to maint).

 * "git fetch" over HTTP walker protocol did not show any progress
   output.  We inherently do not know how much work remains, but still
   we can show something not to bore users.
   (merge 7655b4119d rs/show-progress-in-dumb-http-fetch later to maint).

 * Both "git ls-remote -h" and "git grep -h" give short usage help,
   like any other Git subcommand, but it is not unreasonable to expect
   that the former would behave the same as "git ls-remote --head"
   (there is no other sensible behaviour for the latter).  The
   documentation has been updated in an attempt to clarify this.
   (merge 1ff466c018 jc/doc-single-h-is-for-help later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 26f924d50e en/simplify-check-updates-in-unpack-trees later to maint).
   (merge d0d0a357a1 am/update-pathspec-f-f-tests later to maint).
   (merge f94f7bd00d am/test-pathspec-f-f-error-cases later to maint).
   (merge c513a958b6 ss/t6025-modernize later to maint).
   (merge b441717256 dl/test-must-fail-fixes later to maint).
   (merge d031049da3 mt/sparse-checkout-doc-update later to maint).
   (merge 145136a95a jc/skip-prefix later to maint).
   (merge 5290d45134 jk/alloc-cleanups later to maint).
   (merge 7a9f8ca805 rs/parse-options-concat-dup later to maint).
   (merge 517b60564e rs/strbuf-insertstr later to maint).
   (merge f696a2b1c8 jk/mailinfo-cleanup later to maint).
   (merge 076ee3e8a2 js/test-write-junit-xml-fix later to maint).
   (merge de26f02db1 js/test-avoid-pipe later to maint).
   (merge bfe2bbb47f js/test-unc-fetch later to maint).
   (merge 08809c09aa js/mingw-open-in-gdb later to maint).
   (merge cc4f2eb828 jk/doc-credential-helper later to maint).
   (merge e0020b2f82 es/outside-repo-errmsg-hints later to maint).
   (merge a2dc43414c es/doc-mentoring later to maint).
   (merge 539052f42f jk/run-command-formatfix later to maint).
   (merge 02bbbe9df9 es/worktree-cleanup later to maint).
   (merge 2ce6d075fa rs/micro-cleanups later to maint).
   (merge 27f182b3fc rs/blame-typefix-for-fingerprint later to maint).
   (merge 3c29e21eb0 ma/test-cleanup later to maint).
   (merge 240fc04f81 ag/rebase-remove-redundant-code later to maint).
   (merge 7f487ce062 js/ci-windows-update later to maint).
   (merge d68ce906c7 rs/commit-graph-code-simplification later to maint).
   (merge a51d9e8f07 rj/t1050-use-test-path-is-file later to maint).
   (merge fd0bc17557 kk/complete-diff-color-moved later to maint).
   (merge 65bf820d0e en/test-cleanup later to maint).

----------------------------------------------------------------

Changes since v2.25.0 are as follows:

Abhishek Kumar (2):
      lib-log-graph: consolidate test_cmp_graph logic
      lib-log-graph: consolidate colored graph cmp logic

Alban Gruin (4):
      rebase -i: stop checking out the tip of the branch to rebase
      sequencer: move check_todo_list_from_file() to rebase-interactive.c
      rebase-interactive: warn if commit is dropped with `rebase --edit-todo'
      builtin/rebase: remove a call to get_oid() on `options.switch_to'

Alexandr Miloslavskiy (14):
      parse_branchname_arg(): extract part as new function
      checkout: don't revert file on ambiguous tracking branches
      t: add tests for error conditions with --pathspec-from-file
      t: fix quotes tests for --pathspec-from-file
      t: directly test parse_pathspec_file()
      doc: rm: synchronize <pathspec> description
      rm: support the --pathspec-from-file option
      doc: stash: split options from description (1)
      doc: stash: split options from description (2)
      doc: stash: document more options
      doc: stash: synchronize <pathspec> description
      stash: eliminate crude option parsing
      stash push: support the --pathspec-from-file option
      mingw: workaround for hangs when sending STDIN

Benno Evers (1):
      describe: don't abort too early when searching tags

Bert Wesarg (6):
      pull --rebase/remote rename: document and honor single-letter abbreviations rebase types
      remote: clean-up by returning early to avoid one indentation
      remote: clean-up config callback
      remote rename/remove: handle branch.<name>.pushRemote config values
      config: provide access to the current line number
      remote rename/remove: gently handle remote.pushDefault config

David Turner (1):
      git rm submodule: succeed if .gitmodules index stat info is zero

Denton Liu (34):
      t/lib-git-p4: use test_path_is_missing()
      t0000: replace test_must_fail with run_sub_test_lib_test_err()
      t0003: use named parameters in attr_check()
      t0003: use test_must_be_empty()
      t0003: don't use `test_must_fail attr_check`
      t0020: don't use `test_must_fail has_cr`
      t0020: use ! check_packed_refs_marked
      t1306: convert `test_might_fail rm` to `rm -f`
      t1307: reorder `nongit test_must_fail`
      t1409: let sed open its own input file
      t1409: use test_path_is_missing()
      t1501: remove use of `test_might_fail cp`
      t1507: stop losing return codes of git commands
      t1507: run commands within test_expect_success
      t1507: inline full_name()
      contrib/credential/netrc: make PERL_PATH configurable
      contrib/credential/netrc: work outside a repo
      t2018: remove trailing space from test description
      t2018: add space between function name and ()
      t2018: improve style of if-statement
      .mailmap: fix erroneous authorship for Johannes Schindelin
      t2018: be more discerning when checking for expected exit codes
      t2018: teach do_checkout() to accept `!` arg
      t2018: don't lose return code of git commands
      t2018: replace "sha" with "oid"
      t3030: use test_path_is_missing()
      t3310: extract common notes_merge_files_gone()
      t3415: stop losing return codes of git commands
      t3415: increase granularity of test_auto_{fixup,squash}()
      t3419: stop losing return code of git command
      t3507: fix indentation
      t3507: use test_path_is_missing()
      t4124: only mark git command with test_must_fail
      .mailmap: map Yi-Jyun Pan's email

Derrick Stolee (26):
      unpack-trees: correctly compute result count
      graph: add test to demonstrate horizontal line bug
      graph: fix collapse of multiple edges
      clean: demonstrate a bug with pathspecs
      fetch: document and test --refmap=""
      t1091: use check_files to reduce boilerplate
      t1091: improve here-docs
      sparse-checkout: create leading directories
      clone: fix --sparse option with URLs
      sparse-checkout: cone mode does not recognize "**"
      sparse-checkout: detect short patterns
      sparse-checkout: warn on globs in cone patterns
      sparse-checkout: properly match escaped characters
      sparse-checkout: write escaped patterns in cone mode
      sparse-checkout: unquote C-style strings over --stdin
      sparse-checkout: use C-style quotes in 'list' subcommand
      sparse-checkout: escape all glob characters on write
      sparse-checkout: improve docs around 'set' in cone mode
      sparse-checkout: fix cone mode behavior mismatch
      sparse-checkout: extract add_patterns_from_input()
      sparse-checkout: extract pattern update from 'set' subcommand
      sparse-checkout: create 'add' subcommand
      sparse-checkout: work with Windows paths
      sparse-checkout: allow one-character directories in cone mode
      partial-clone: demonstrate bugs in partial fetch
      partial-clone: avoid fetching when looking for objects

Elijah Newren (35):
      unpack-trees: exit check_updates() early if updates are not wanted
      string-list: note in docs that callers can specify sorting function
      dir: treat_leading_path() and read_directory_recursive(), round 2
      git-rebase.txt: update description of --allow-empty-message
      t3404: directly test the behavior of interest
      rebase (interactive-backend): make --keep-empty the default
      rebase (interactive-backend): fix handling of commits that become empty
      t3406: simplify an already simple test
      rebase, sequencer: remove the broken GIT_QUIET handling
      rebase: make sure to pass along the quiet flag to the sequencer
      rebase: fix handling of restrict_revision
      t3432: make these tests work with either am or merge backends
      rebase: allow more types of rebases to fast-forward
      git-rebase.txt: add more details about behavioral differences of backends
      rebase: move incompatibility checks between backend options a bit earlier
      rebase: add an --am option
      git-prompt: change the prompt for interactive-based rebases
      rebase: drop '-i' from the reflog for interactive-based rebases
      rebase tests: mark tests specific to the am-backend with --am
      rebase tests: repeat some tests using the merge backend instead of am
      rebase: make the backend configurable via config setting
      rebase: change the default backend from "am" to "merge"
      rebase: rename the two primary rebase backends
      check-ignore: fix documentation and implementation to match
      t3433: new rebase testcase documenting a stat-dirty-like failure
      merge-recursive: fix the refresh logic in update_file_flags
      merge-recursive: apply collision handling unification to recursive case
      t602[1236], t6034: modernize test formatting
      t6020, t6022, t6035: update merge tests to use test helper functions
      t3035: prefer test_must_fail to bash negation for git commands
      t6022, t6046: test expected behavior instead of testing a proxy for it
      t6020: new test with interleaved lexicographic ordering of directories
      sequencer: clear state upon dropping a become-empty commit
      git-rebase.txt: highlight backend differences with commit rewording
      t6022, t6046: fix flaky files-are-updated checks

Emily Shaffer (9):
      unpack-trees: watch for out-of-range index position
      fetch: emphasize failure during submodule fetch
      MyFirstContribution: add avenues for getting help
      submodule: add newline on invalid submodule error
      MyFirstContribution: rephrase contact info
      prefix_path: show gitdir when arg is outside repo
      submodule--helper: use C99 named initializer
      clone: pass --single-branch during --recurse-submodules
      prefix_path: show gitdir if worktree unavailable

Eric Sunshine (6):
      t3400: make test clean up after itself
      rebase: refuse to switch to branch already checked out elsewhere
      worktree: drop unused code from get_main_worktree()
      worktree: improve find_worktree() documentation
      worktree: add utility to find worktree by pathname
      worktree: don't allow "add" validation to be fooled by suffix matching

Eyal Soha (3):
      color.c: refactor color_output arguments
      color.c: support bright aixterm colors
      color.c: alias RGB colors 8-15 to aixterm colors

Hans Jerry Illikainen (2):
      editorconfig: indent text files with tabs
      gpg-interface: add minTrustLevel as a configuration option

Harald van Dijk (1):
      show_one_mergetag: print non-parent in hex form.

Hariom Verma (4):
      get_main_worktree(): allow it to be called in the Git directory
      t5509: use a bare repository for test push target
      receive.denyCurrentBranch: respect all worktrees
      t2402: test worktree path when called in .git directory

Heba Waly (5):
      commit: honor advice.statusHints when rejecting an empty commit
      doc/gitcore-tutorial: fix prose to match example command
      add: use advise function to display hints
      git: update documentation for --git-dir
      add: change advice config variables used by the add API

Jacques Bodin-Hullin (1):
      parse-options: lose an unnecessary space in an error message

Jeff King (70):
      builtin/pack-objects: report reused packfile objects
      packfile: expose get_delta_base()
      restore: invalidate cache-tree when removing entries with --staged
      transport: don't flush when disconnecting stateless-rpc helper
      dir: restructure in a way to avoid passing around a struct dirent
      dir: point treat_leading_path() warning to the right place
      Makefile: use compat regex with SANITIZE=address
      t4018: drop "debugging" cat from hunk-header tests
      t7800: don't rely on reuse_worktree_file()
      ewah/bitmap: introduce bitmap_word_alloc()
      pack-bitmap: introduce bitmap_walk_contains()
      pack-bitmap: uninteresting oid can be outside bitmapped packfile
      pack-bitmap: simplify bitmap_has_oid_in_uninteresting()
      csum-file: introduce hashfile_total()
      pack-objects: introduce pack.allowPackReuse
      builtin/pack-objects: introduce obj_is_packed()
      pack-objects: improve partial packfile reuse
      pack-objects: add checks for duplicate objects
      pack-bitmap: don't rely on bitmap_git->reuse_objects
      sparse-checkout: fix documentation typo for core.sparseCheckoutCone
      verify_filename(): handle backslashes in "wildcards are pathspecs" rule
      merge-recursive: silence -Wxor-used-as-pow warning
      t1400: avoid "test" string comparisons
      t1506: drop space after redirection operator
      avoid computing zero offsets from NULL pointer
      xdiff: avoid computing non-zero offset from NULL pointer
      obstack: avoid computing offsets from NULL pointer
      doc: drop "explicitly given" from push.default description
      sha1-name: mark get_oid() error messages for translation
      normalize_path_copy(): document "dst" size expectations
      walker_fetch(): avoid raw array length computation
      traverse_trees(): use stack array for name entries
      diff: move diff.wsErrorHighlight to "basic" config
      tree-walk.c: break circular dependency with unpack-trees
      index-pack: downgrade twice-resolved REF_DELTA to die()
      mailinfo: treat header values as C strings
      mailinfo: simplify parsing of header values
      mailinfo: be more liberal with header whitespace
      mailinfo: factor out some repeated header handling
      pack-bitmap: factor out type iterator initialization
      pack-bitmap: fix leak of haves/wants object lists
      rev-list: fallback to non-bitmap traversal when filtering
      pack-bitmap: refuse to do a bitmap traversal with pathspecs
      rev-list: factor out bitmap-optimized routines
      rev-list: make --count work with --objects
      rev-list: allow bitmaps when counting objects
      t5310: factor out bitmap traversal comparison
      rev-list: allow commit-only bitmap traversals
      pack-bitmap: basic noop bitmap filter infrastructure
      rev-list: use bitmap filters for traversal
      bitmap: add bitmap_unset() function
      pack-bitmap: implement BLOB_NONE filtering
      pack-bitmap: implement BLOB_LIMIT filtering
      pack-objects: support filters with bitmaps
      doc: move credential helper info into gitcredentials(7)
      doc/config/push: use longer "--" line for preformatted example
      doc-diff: use single-colon rule in rendering Makefile
      run-command.h: fix mis-indented struct member
      nth_packed_object_oid(): use customary integer return
      pack-objects: read delta base oid into object_id struct
      pack-objects: convert oe_set_delta_ext() to use object_id
      pack-objects: use object_id struct in pack-reuse code
      pack-bitmap: use object_id when loading on-disk bitmaps
      pack-check: convert "internal error" die to a BUG()
      pack-check: push oid lookup into loop
      packed_object_info(): use object_id for returning delta base
      packed_object_info(): use object_id internally for delta base
      packfile: drop nth_packed_object_sha1()
      config.mak.dev: re-enable -Wformat-zero-length
      remote: drop "explicit" parameter from remote_ref_for_branch()

Jiang Xin (1):
      i18n: unmark a message in rebase.c

Johan Herland (2):
      t3305: check notes fanout more carefully and robustly
      notes.c: fix off-by-one error when decreasing notes fanout

Johannes Berg (1):
      pack-format: correct multi-pack-index description

Johannes Schindelin (33):
      built-in add -p: prepare for patch modes other than "stage"
      built-in add -p: implement the "stash" and "reset" patch modes
      legacy stash -p: respect the add.interactive.usebuiltin setting
      built-in stash: use the built-in `git add -p` if so configured
      built-in add -p: implement the "checkout" patch modes
      built-in add -p: implement the "worktree" patch modes
      commit --interactive: make it work with the built-in `add -i`
      t3701: adjust difffilter test
      built-in add -p: support interactive.diffFilter
      built-in add -p: handle diff.algorithm
      terminal: make the code of disable_echo() reusable
      terminal: accommodate Git for Windows' default terminal
      terminal: add a new function to read a single keystroke
      built-in add -p: respect the `interactive.singlekey` config setting
      built-in add -p: handle Escape sequences in interactive.singlekey mode
      built-in add -p: handle Escape sequences more efficiently
      ci: include the built-in `git add -i` in the `linux-gcc` job
      msvc: accommodate for vcpkg's upgrade to OpenSSL v1.1.x
      built-in add -i: do not try to `patch`/`diff` an empty list of files
      built-in add -i: accept open-ended ranges again
      parse_insn_line(): improve error message when parsing failed
      rebase -i: re-fix short SHA-1 collision
      rebase -i: also avoid SHA-1 collisions with missingCommitsCheck
      ci: ignore rubygems warning in the "Documentation" job
      convert: fix typo
      tests: fix --write-junit-xml with subshells
      t9001, t9116: avoid pipes
      t5580: test cloning without file://, test fetching via UNC paths
      mingw: add a helper function to attach GDB to the current process
      t/lib-httpd: avoid using macOS' sed
      ci: prevent `perforce` from being quarantined
      Azure Pipeline: switch to the latest agent pools
      t5537: adjust test_oid label

Johannes Sixt (1):
      t3504: do check for conflict marker after failed cherry-pick

Jonathan Nieder (9):
      sha1-file: document how to use pretend_object_file
      fetch test: avoid use of "VAR= cmd" with a shell function
      t/check-non-portable-shell: detect "FOO= shell_func", too
      fetch test: mark test of "skipping" haves as v0-only
      fetch test: use more robust test for filtered objects
      config doc: protocol.version is not experimental
      test: request GIT_TEST_PROTOCOL_VERSION=0 when appropriate
      protocol test: let protocol.version override GIT_TEST_PROTOCOL_VERSION
      fetch: default to protocol version 2

Jonathan Tan (4):
      sha1-file: remove OBJECT_INFO_SKIP_CACHED
      t5616: make robust to delta base change
      connected: verify promisor-ness of partial clone
      fetch: forgo full connectivity check if --filter

Junio C Hamano (19):
      The first batch post 2.25 cycle
      merge-recursive: use subtraction to flip stage
      .mailmap: fix GGG authoship screwup
      The second batch
      C: use skip_prefix() to avoid hardcoded string length
      The third batch for 2.26
      The fourth batch for 2.26
      The fifth batch for 2.26
      Git 2.25.1
      The sixth batch for 2.26
      rev-list --count: comment on the use of count_right++
      The seventh batch for 2.26
      Documentation: clarify that `-h` alone stands for `help`
      Revert "gpg-interface: prefer check_signature() for GPG verification"
      The eighth batch for 2.26
      Git 2.26-rc0
      Git 2.26-rc1
      Hopefully the final batch before -rc2
      Git 2.26-rc2

Kevin Willford (4):
      fsmonitor: change last update timestamp on the index_state to opaque token
      fsmonitor: handle version 2 of the hooks that will use opaque token
      fsmonitor: add fsmonitor hook scripts for version 2
      fsmonitor: update documentation for hook version and watchman hooks

Kir Kolyshkin (1):
      completion: add diff --color-moved[-ws]

Kyle Meyer (2):
      submodule add: show 'add --dry-run' stderr when aborting
      submodule foreach: replace $path with $sm_path in example

Lucius Hu (1):
      templates: fix deprecated type option `--bool`

Luke Diamand (7):
      git-p4: make closeStreams() idempotent
      git-p4: add P4CommandException to report errors talking to Perforce
      git-p4: disable some pylint warnings, to get pylint output to something manageable
      git-p4: create helper function importRevisions()
      git-p4: cleanup better on error exit
      git-p4: check for access to remote host earlier
      git-p4: avoid leak of file handle when cloning

Martin Ågren (7):
      git-filter-branch.txt: wrap "maths" notation in backticks
      name-rev: rewrite create_or_update_name()
      diff-options.txt: avoid "regex" overload in example
      t4117: check for files using `test_path_is_file`
      t9810: drop debug `cat` call
      t: drop debug `cat` calls
      t1091: don't grep for `strerror()` string

Masaya Suzuki (1):
      doc: describe Git bundle format

Matheus Tavares (21):
      grep: fix race conditions on userdiff calls
      grep: fix race conditions at grep_submodule()
      grep: fix racy calls in grep_objects()
      replace-object: make replace operations thread-safe
      object-store: allow threaded access to object reading
      grep: replace grep_read_mutex by internal obj read lock
      submodule-config: add skip_if_read option to repo_read_gitmodules()
      grep: allow submodule functions to run in parallel
      grep: protect packed_git [re-]initialization
      grep: re-enable threads in non-worktree case
      grep: move driver pre-load out of critical section
      grep: use no. of cores as the default no. of threads
      doc: sparse-checkout: mention --cone option
      completion: add support for sparse-checkout
      diff: make diff_populate_filespec() honor its repo argument
      cache-tree: use given repo's hash_algo at verify_one()
      pack-check: use given repo's hash_algo at verify_packfile()
      streaming: allow open_istream() to handle any repo
      sha1-file: pass git_hash_algo to write_object_file_prepare()
      sha1-file: pass git_hash_algo to hash_object_file()
      sha1-file: allow check_object_signature() to handle any repo

Matthew Rogers (10):
      config: fix typo in variable name
      t1300: fix over-indented HERE-DOCs
      t1300: create custom config file without special characters
      config: make scope_name non-static and rename it
      config: split repo scope to local and worktree
      config: clarify meaning of command line scoping
      config: preserve scope in do_git_config_sequence
      config: teach git_config_source to remember its scope
      submodule-config: add subomdule config scope
      config: add '--show-scope' to print the scope of a config value

Miriam Rubio (3):
      bisect--helper: convert `vocab_*` char pointers to char arrays
      bisect: use the standard 'if (!var)' way to check for 0
      bisect: add enum to represent bisect returning codes

Paolo Bonzini (5):
      parse-options: add testcases for OPT_CMDMODE()
      parse-options: convert "command mode" to a flag
      am: convert "resume" variable to a struct
      am: support --show-current-patch=raw as a synonym for--show-current-patch
      am: support --show-current-patch=diff to retrieve .git/rebase-apply/patch

Peter Kaestle (3):
      t7400: add a testcase for submodule status on empty dirs
      submodule: fix status of initialized but not cloned submodules
      t7400: testcase for submodule status on unregistered inner git repos

Philippe Blain (5):
      t7410: rename to t2405-worktree-submodule.sh
      t2405: use git -C and test_commit -C instead of subshells
      t2405: clarify test descriptions and simplify test
      submodule.c: use get_git_dir() instead of get_git_common_dir()
      grep: ignore --recurse-submodules if --no-index is given

Pranit Bauva (7):
      bisect--helper: return error codes from `cmd_bisect__helper()`
      bisect: libify `exit_if_skipped_commits` to `error_if_skipped*` and its dependents
      bisect: libify `bisect_checkout`
      bisect: libify `check_merge_bases` and its dependents
      bisect: libify `check_good_are_ancestors_of_bad` and its dependents
      bisect: libify `handle_bad_merge_base` and its dependents
      bisect: libify `bisect_next_all`

Ralf Thielow (2):
      submodule.c: mark more strings for translation
      rebase-interactive.c: silence format-zero-length warnings

Rasmus Jonsson (1):
      t1050: replace test -f with test_path_is_file

René Scharfe (21):
      name-rev: remove unused typedef
      name-rev: respect const qualifier
      name-rev: don't leak path copy in name_ref()
      name-rev: don't _peek() in create_or_update_name()
      name-rev: put struct rev_name into commit slab
      name-rev: factor out get_parent_name()
      name-rev: pre-size buffer in get_parent_name()
      name-rev: generate name strings only if they are better
      name-rev: release unused name strings
      name-rev: sort tip names before applying
      strbuf: add and use strbuf_insertstr()
      mailinfo: don't insert header prefix for handle_content_type()
      parse-options: use COPY_ARRAY in parse_options_concat()
      parse-options: factor out parse_options_count()
      parse-options: const parse_options_concat() parameters
      parse-options: simplify parse_options_dup()
      quote: use isalnum() to check for alphanumeric characters
      use strpbrk(3) to search for characters from a given set
      blame: provide type of fingerprints pointer
      commit-graph: use progress title directly
      remote-curl: show progress for fetches over dumb HTTP

SZEDER Gábor (6):
      t9902-completion: add tests for the __git_find_on_cmdline() helper
      completion: clean up the __git_find_on_cmdline() helper function
      completion: return the index of found word from __git_find_on_cmdline()
      completion: simplify completing 'git worktree' subcommands and options
      completion: list existing working trees for 'git worktree' subcommands
      completion: list paths and refs for 'git worktree add'

Shourya Shukla (2):
      t6025: modernize style
      t6025: use helpers to replace test -f <path>

Tanushree Tumane (2):
      bisect--helper: change `retval` to `res`
      bisect--helper: introduce new `decide_next()` function

Taylor Blau (5):
      t5318: don't pass non-object directory to '--object-dir'
      commit-graph.h: store an odb in 'struct write_commit_graph_context'
      commit-graph.h: store object directory in 'struct commit_graph'
      commit-graph.c: remove path normalization, comparison
      commit-graph.h: use odb in 'load_commit_graph_one_fd_st'

brian m. carlson (53):
      run-command: avoid undefined behavior in exists_in_PATH
      t4054: make hash-size independent
      t4066: compute index line in diffs
      t4134: compute appropriate length constant
      t4200: make hash size independent
      t4202: abstract away SHA-1-specific constants
      t4204: make hash size independent
      t4300: abstract away SHA-1-specific constants
      t5318: update for SHA-256
      t5319: change invalid offset for SHA-256 compatibility
      t5319: make test work with SHA-256
      t5324: make hash size independent
      t5504: make hash algorithm independent
      t5510: make hash size independent
      t5512: abstract away SHA-1-specific constants
      t5530: compute results based on object length
      t5537: make hash size independent
      t5540: make hash size independent
      t5562: use $ZERO_OID
      t5601: switch into repository to hash object
      t5604: make hash independent
      docs: use "currently" for the present time
      doc: move author and committer information to git-commit(1)
      docs: expand on possible and recommended user config options
      doc: provide guidance on user.name format
      doc: dissuade users from trying to ignore tracked files
      docs: mention when increasing http.postBuffer is valuable
      t/lib-pack: support SHA-256
      t3206: make hash size independent
      t3308: make test work with SHA-256
      t3309: make test work with SHA-256
      t3310: make test work with SHA-256
      t3311: make test work with SHA-256
      t4013: make test hash independent
      t4211: move SHA-1-specific test cases into a directory
      t4211: add test cases for SHA-256
      t4060: make test work with SHA-256
      t5302: make hash size independent
      t5309: make test hash independent
      t5313: make test hash independent
      t5321: make test hash independent
      t5515: make test hash independent
      t5318: update for SHA-256
      t5607: make hash size independent
      t5703: make test work with SHA-256
      t6000: abstract away SHA-1-specific constants
      t6006: make hash size independent
      t6024: update for SHA-256
      mailmap: add an additional email address for brian m. carlson
      t1300: add test for urlmatch with multiple wildcards
      t0300: add tests for some additional cases
      credential: use the last matching username in the config
      credential: allow wildcard patterns when matching config


^ permalink raw reply	[relevance 2%]

* [PATCH v2 0/2] Fix 2.26.0 rebase regression and documentation shortcoming
  @ 2020-03-11 15:30  5% ` Elijah Newren via GitGitGadget
  0 siblings, 0 replies; 162+ results
From: Elijah Newren via GitGitGadget @ 2020-03-11 15:30 UTC (permalink / raw)
  To: git; +Cc: Phillip Wood, Jeff King, Junio C Hamano, Elijah Newren

This two commit series addresses two points raised by Peff about rebase
backend issues. The first is a two-line fix to a regression in 2.26.0 (when
"the eighth batch for 2.26.0" added the dropping of commits which become
empty, if the last commit in the series was the one that became empty the
rebase would complete without cleaning out state files), and the other is
just a documentation update about a backend difference that we were
previously unaware of.

Changes since v1:

 * Clean out any MERGE_MSG file in addition to CHERRY_PICK_HEAD, and add a
   test

Elijah Newren (2):
  sequencer: clear state upon dropping a become-empty commit
  git-rebase.txt: highlight backend differences with commit rewording

 Documentation/git-rebase.txt | 10 ++++++++++
 sequencer.c                  |  2 ++
 t/t3424-rebase-empty.sh      |  8 ++++++++
 3 files changed, 20 insertions(+)


base-commit: b4374e96c84ed9394fed363973eb540da308ed4f
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-722%2Fnewren%2Frebase-fixups-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-722/newren/rebase-fixups-v2
Pull-Request: https://github.com/git/git/pull/722

Range-diff vs v1:

 1:  132f769adb0 ! 1:  84b89d78435 sequencer: clear CHERRY_PICK_HEAD upon dropping a become-empty commit
     @@ -1,6 +1,6 @@
      Author: Elijah Newren <newren@gmail.com>
      
     -    sequencer: clear CHERRY_PICK_HEAD upon dropping a become-empty commit
     +    sequencer: clear state upon dropping a become-empty commit
      
          In commit e98c4269c8 ("rebase (interactive-backend): fix handling of
          commits that become empty", 2020-02-15), the merge backend was changed
     @@ -9,10 +9,10 @@
          upstream).  This new code path did not need to go through the process of
          creating a commit, since we were dropping the commit instead.
          Unfortunately, this also means we bypassed the clearing of the
     -    CHERRY_PICK_HEAD file, which if there were no further commits to
     -    cherry-pick would mean that the rebase would end but assume there was
     -    still an operation in progress.  Ensure that we clear CHERRY_PICK_HEAD
     -    when we decide to drop the commit.
     +    CHERRY_PICK_HEAD and MERGE_MSG files, which if there were no further
     +    commits to cherry-pick would mean that the rebase would end but assume
     +    there was still an operation in progress.  Ensure that we clear such
     +    state files when we decide to drop the commit.
      
          Signed-off-by: Elijah Newren <newren@gmail.com>
      
     @@ -24,6 +24,24 @@
       	} else if (allow == 2) {
       		drop_commit = 1;
      +		unlink(git_path_cherry_pick_head(r));
     ++		unlink(git_path_merge_msg(r));
       		fprintf(stderr,
       			_("dropping %s %s -- patch contents already upstream\n"),
       			oid_to_hex(&commit->object.oid), msg.subject);
     +
     + diff --git a/t/t3424-rebase-empty.sh b/t/t3424-rebase-empty.sh
     + --- a/t/t3424-rebase-empty.sh
     + +++ b/t/t3424-rebase-empty.sh
     +@@
     + 	test_cmp expect actual
     + '
     + 
     ++test_expect_success 'rebase --merge does not leave state laying around' '
     ++	git checkout -B testing localmods~2 &&
     ++	git rebase --merge upstream &&
     ++
     ++	test_path_is_missing .git/CHERRY_PICK_HEAD &&
     ++	test_path_is_missing .git/MERGE_MSG
     ++'
     ++
     + test_done
 2:  12932b847ef = 2:  6d51cff41d9 git-rebase.txt: highlight backend differences with commit rewording

-- 
gitgitgadget

^ permalink raw reply	[relevance 5%]

* Re: [ANNOUNCE] Git v2.26.0-rc1
  @ 2020-03-11  5:25  6%   ` Elijah Newren
  0 siblings, 0 replies; 162+ results
From: Elijah Newren @ 2020-03-11  5:25 UTC (permalink / raw)
  To: Jeff King; +Cc: Junio C Hamano, Git Mailing List

On Tue, Mar 10, 2020 at 10:40 AM Jeff King <peff@peff.net> wrote:
>
> On Tue, Mar 10, 2020 at 07:57:11AM -0700, Junio C Hamano wrote:
>
> >  * "git rebase" has learned to use the merge backend (i.e. the
> >    machinery that drives "rebase -i") by default, while allowing
> >    "--apply" option to use the "apply" backend (e.g. the moral
> >    equivalent of "format-patch piped to am").  The rebase.backend
> >    configuration variable can be set to customize.
>
> I noticed a few behavior changes that I think are related to this
> switch. I'm not sure to what degree we'd consider these a problem
> (though the second I think may be an existing bug in the merge backend
> that's just getting more attention), but it seems like the time to raise
> the issue is now, before the release. :)
>
> The first change is that we'll now open an editor when continuing a
> conflicted rebase. You can see it by running this:
>
>   for backend in apply merge; do
>     echo "==> Running with rebase.backend=$backend"
>
>     # new repo
>     rm -rf repo
>     git init -q repo
>     cd repo
>
>     # create two conflicting branches
>     echo base >base && git add base && git commit -qm base
>     echo master >file && git add file && git commit -qm master
>     git checkout -q -b side HEAD^
>     echo side >file && git add file && git commit -qm side
>
>     # rebase on master, hit the conflict, then resolve it
>     git -c rebase.backend=$backend rebase master
>     echo resolved >file
>     git add file
>
>     # continue the rebase, noting whether we used the editor
>     GIT_EDITOR='echo >&2 running editor on:' git rebase --continue
>   done
>
> We won't run the editor the "apply" backend, but do for "merge".  I'm
> not sure how big a deal this is. It bit me because I have a script which
> runs rebase in a "while read" shell loop, with stdin coming from a pipe
> feeding the loop. It auto-continues when rerere is able to fix up the
> conflicts, but the editor complains about stdin not being a tty and
> dies.
>
> I'd imagine that's a pretty rare situation, and it was easy enough to
> fix up. But I wonder if we should be more careful about making sure the
> behavior is more identical. On the other hand, I imagine this is the way
> the merge backend has always behaved, so it would be a change in
> behavior for people who had been using it already. I guess the _most_
> compatible thing would be a merge-that-behaves-more-like-apply backend,
> but I'm not sure if we want to support that forever.

This behavior did not always exist with the merge backend, it began
with commit 68aa495b59 ("rebase: implement --merge via the interactive
machinery", 2018-12-11).  Before that, there was not too much in
sequencer.c or its predecessors for non-interactive rebases, so I
wouldn't give much weight to historical precedent for how the merge
backend behaves here.

However, as Junio argues elsewhere in this thread, the apply backend
should probably be the one that is considered to be buggy here.
Although fixing the apply backend is probably best, and adding an
escape hatch such as --no-edit as Junio suggests for the merge backend
makes sense, given where we are in the 2.26 cycle, I only sent off a
patch to document this difference for now.

> The second thing I noticed is more clearly a bug, I think. If we have a
> patch that is skipped because it was already applied, we get stuck in
> "cherry-picking" mode. Try:
>
>   for backend in apply merge; do
>     echo "==> Running with rebase.backend=$backend"
>
>     # new repo
>     rm -rf repo
>     git init -q repo
>     cd repo
>
>     echo base >file && git add file && git commit -qm base
>     # do this in two steps so we don't match patch-id
>     echo one >file && git commit -qam master-1
>     echo two >file && git commit -qam master-2
>
>     git checkout -q -b side HEAD~2
>     echo two >file && git commit -qam side
>
>     # start a rebase, which should realize that the patch is a noop
>     git -c rebase.backend=$backend rebase master
>
>     # see what state "status" reports us in
>     git status
>   done
>
> For the "apply" case, I get:
>
>   ==> Running with rebase.backend=apply
>   First, rewinding head to replay your work on top of it...
>   Applying: side
>   Using index info to reconstruct a base tree...
>   M     file
>   Falling back to patching base and 3-way merge...
>   No changes -- Patch already applied.
>   On branch side
>   nothing to commit, working tree clean
>
> So we complete the rebase, and git-status shows nothing. But for the
> merge backend:
>
>   ==> Running with rebase.backend=merge
>   dropping f8b25a2cd2a3a0e64d820efe2fcbae81dec98616 side -- patch contents already upstream
>   Successfully rebased and updated refs/heads/side.
>   On branch side
>   You are currently cherry-picking commit f8b25a2.
>
>   nothing to commit, working tree clean
>
> Oops. If I "git rebase --continue" from there, I get "No rebase in
> progress?". Doing "git cherry-pick --skip" clears it. I guess the issue
> is the continued presence of .git/CHERRY_PICK_HEAD.

Yes, definitely a bug, and new as of "the eighth batch for
git-2.26.0", a few days before 2.26.0-rc0.  I found a one-liner fix.

> As you can see from the output above (and the earlier snippet, if you
> run it), there are also a bunch of minor stderr output changes. I think
> these probably aren't worth caring about.

Agreed; also, these output differences are already documented in
"Behavioral Differences" of the git-rebase manpage.


Thanks for the careful reports; new series up at
https://lore.kernel.org/git/pull.722.git.git.1583903621.gitgitgadget@gmail.com/
to address the issues raised.

^ permalink raw reply	[relevance 6%]

* [ANNOUNCE] Git v2.26.0-rc1
@ 2020-03-10 14:57  2% Junio C Hamano
    0 siblings, 1 reply; 162+ results
From: Junio C Hamano @ 2020-03-10 14:57 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.26.0-rc1 is now available for testing
at the usual places.  It is comprised of 453 non-merge commits
since v2.25.0, contributed by 47 people, 10 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.26.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.25.0 are as follows.
Welcome to the Git development community!

  Abhishek Kumar, Benno Evers, Eyal Soha, Harald van Dijk,
  Jacques Bodin-Hullin, Kir Kolyshkin, Lucius Hu, Peter Kaestle,
  Rasmus Jonsson, and Shourya Shukla.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alban Gruin, Alexandr Miloslavskiy, Bert Wesarg, brian
  m. carlson, David Turner, Denton Liu, Derrick Stolee, Elijah
  Newren, Emily Shaffer, Eric Sunshine, Hans Jerry Illikainen,
  Hariom Verma, Heba Waly, Jeff King, Johan Herland, Johannes Berg,
  Johannes Schindelin, Johannes Sixt, Jonathan Nieder, Jonathan
  Tan, Junio C Hamano, Kevin Willford, Kyle Meyer, Luke Diamand,
  Martin Ågren, Masaya Suzuki, Matheus Tavares, Matthew Rogers,
  Miriam Rubio, Paolo Bonzini, Philippe Blain, Pranit Bauva,
  Ralf Thielow, René Scharfe, SZEDER Gábor, Tanushree Tumane,
  and Taylor Blau.

----------------------------------------------------------------

Git 2.26 Release Notes (draft)
==============================

Updates since v2.25
-------------------

UI, Workflows & Features

 * Sample credential helper for using .netrc has been updated to work
   out of the box.

 * gpg.minTrustLevel configuration variable has been introduced to
   tell various signature verification codepaths the required minimum
   trust level.

 * The command line completion (in contrib/) learned to complete
   subcommands and arguments to "git worktree".

 * Disambiguation logic to tell revisions and pathspec apart has been
   tweaked so that backslash-escaped glob special characters do not
   count in the "wildcards are pathspec" rule.

 * One effect of specifying where the GIT_DIR is (either with the
   environment variable, or with the "git --git-dir=<where> cmd"
   option) is to disable the repository discovery.  This has been
   placed a bit more stress in the documentation, as new users often
   get confused.

 * Two help messages given when "git add" notices the user gave it
   nothing to add have been updated to use advise() API.

 * A new version of fsmonitor-watchman hook has been introduced, to
   avoid races.

 * "git config" learned to show in which "scope", in addition to in
   which file, each config setting comes from.

 * The basic 7 colors learned the brighter counterparts
   (e.g. "brightred").

 * "git sparse-checkout" learned a new "add" subcommand.

 * A configuration element used for credential subsystem can now use
   wildcard pattern to specify for which set of URLs the entry
   applies.

 * "git clone --recurse-submodules --single-branch" now uses the same
   single-branch option when cloning the submodules.

 * "git rm" and "git stash" learns the new "--pathspec-from-file"
   option.

 * "git am --short-current-patch" is a way to show the piece of e-mail
   for the stopped step, which is not suitable to directly feed "git
   apply" (it is designed to be a good "git am" input).  It learned a
   new option to show only the patch part.

 * Handling of conflicting renames in merge-recursive have further
   been made consistent with how existing codepaths try to mimic what
   is done to add/add conflicts.


Performance, Internal Implementation, Development Support etc.

 * Tell .editorconfig that in this project, *.txt files are indented
   with tabs.

 * The test-lint machinery knew to check "VAR=VAL shell_function"
   construct, but did not check "VAR= shell_funciton", which has been
   corrected.

 * Replace "git config --bool" calls with "git config --type=bool" in
   sample templates.

 * The effort to move "git-add--interactive" to C continues.

 * Improve error message generation for "git submodule add".

 * Preparation of test scripts for the day when the object names will
   use SHA-256 continues.

 * Warn programmers about pretend_object_file() that allows the code
   to tentatively use in-core objects.

 * The way "git pack-objects" reuses objects stored in existing pack
   to generate its result has been improved.

 * The transport protocol version 2 becomes the default one.

 * Traditionally, we avoided threaded grep while searching in objects
   (as opposed to files in the working tree) as accesses to the object
   layer is not thread-safe.  This limitation is getting lifted.

 * "git rebase -i" (and friends) used to unnecessarily check out the
   tip of the branch to be rebased, which has been corrected.

 * A low-level API function get_oid(), that accepts various ways to
   name an object, used to issue end-user facing error messages
   without l10n, which has been updated to be translatable.

 * Unneeded connectivity check is now disabled in a partial clone when
   fetching into it.

 * Some rough edges in the sparse-checkout feature, especially around
   the cone mode, have been cleaned up.

 * The diff-* plumbing family of subcommands now pay attention to the
   diff.wsErrorHighlight configuration, which has been ignored before;
   this allows "git add -p" to also show the whitespace problems to
   the end user.

 * Some codepaths were given a repository instance as a parameter to
   work in the repository, but passed the_repository instance to its
   callees, which has been cleaned up (somewhat).

 * Memory footprint and performance of "git name-rev" has been
   improved.

 * The object reachability bitmap machinery and the partial cloning
   machinery were not prepared to work well together, because some
   object-filtering criteria that partial clones use inherently rely
   on object traversal, but the bitmap machinery is an optimization
   to bypass that object traversal.  There however are some cases
   where they can work together, and they were taught about them.

 * "git rebase" has learned to use the merge backend (i.e. the
   machinery that drives "rebase -i") by default, while allowing
   "--apply" option to use the "apply" backend (e.g. the moral
   equivalent of "format-patch piped to am").  The rebase.backend
   configuration variable can be set to customize.

 * Underlying machinery of "git bisect--helper" is being refactored
   into pieces that are more easily reused.


Fixes since v2.25
-----------------

 * "git commit" gives output similar to "git status" when there is
   nothing to commit, but without honoring the advise.statusHints
   configuration variable, which has been corrected.

 * has_object_file() said "no" given an object registered to the
   system via pretend_object_file(), making it inconsistent with
   read_object_file(), causing lazy fetch to attempt fetching an
   empty tree from promisor remotes.

 * Complete an update to tutorial that encourages "git switch" over
   "git checkout" that was done only half-way.

 * C pedantry ;-) fix.

 * The code that tries to skip over the entries for the paths in a
   single directory using the cache-tree was not careful enough
   against corrupt index file.

 * Reduce unnecessary round-trip when running "ls-remote" over the
   stateless RPC mechanism.

 * "git restore --staged" did not correctly update the cache-tree
   structure, resulting in bogus trees to be written afterwards, which
   has been corrected.

 * The code recently added to move to the entry beyond the ones in the
   same directory in the index in the sparse-cone mode did not count
   the number of entries to skip over incorrectly, which has been
   corrected.

 * Rendering by "git log --graph" of ancestry lines leading to a merge
   commit were made suboptimal to waste vertical space a bit with a
   recent update, which has been corrected.

 * Work around test breakages caused by custom regex engine used in
   libasan, when address sanitizer is used with more recent versions
   of gcc and clang.

 * Minor bugfixes to "git add -i" that has recently been rewritten in C.
   (merge 849e43cc18 js/builtin-add-i-cmds later to maint).

 * "git fetch --refmap=" option has got a better documentation.

 * "git checkout X" did not correctly fail when X is not a local
   branch but could name more than one remote-tracking branches
   (i.e. to be dwimmed as the starting point to create a corresponding
   local branch), which has been corrected.
   (merge fa74180d08 am/checkout-file-and-ref-ref-ambiguity later to maint).

 * Corner case bugs in "git clean" that stems from a (necessarily for
   performance reasons) awkward calling convention in the directory
   enumeration API has been corrected.

 * A fetch that is told to recursively fetch updates in submodules
   inevitably produces reams of output, and it becomes hard to spot
   error messages.  The command has been taught to enumerate
   submodules that had errors at the end of the operation.
   (merge 0222540827 es/fetch-show-failed-submodules-atend later to maint).

 * The "--recurse-submodules" option of various subcommands did not
   work well when run in an alternate worktree, which has been
   corrected.
   (merge a9472afb63 pb/recurse-submodule-in-worktree-fix later to maint).

 * Futureproofing a test not to depend on the current implementation
   detail.

 * Running "git rm" on a submodule failed unnecessarily when
   .gitmodules is only cache-dirty, which has been corrected.
   (merge 7edee32985 dt/submodule-rm-with-stale-cache later to maint).

 * C pedantry ;-) fix.
   (merge cf82bff73f jk/clang-sanitizer-fixes later to maint).

 * "git grep --no-index" should not get affected by the contents of
   the .gitmodules file but when "--recurse-submodules" is given or
   the "submodule.recurse" variable is set, it did.  Now these
   settings are ignored in the "--no-index" mode.

 * Technical details of the bundle format has been documented.

 * Unhelpful warning messages during documentation build have been squelched.

 * "git rebase -i" identifies existing commits in its todo file with
   their abbreviated object name, which could become ambigous as it
   goes to create new commits, and has a mechanism to avoid ambiguity
   in the main part of its execution.  A few other cases however were
   not covered by the protection against ambiguity, which has been
   corrected.
   (merge 26027625dd js/rebase-i-with-colliding-hash later to maint).

 * Allow the rebase.missingCommitsCheck configuration to kick in when
   "rebase --edit-todo" and "rebase --continue" restarts the procedure.
   (merge 5a5445d878 ag/edit-todo-drop-check later to maint).

 * The way "git submodule status" reports an initialized but not yet
   populated submodule has not been reimplemented correctly when a
   part of the "git submodule" command was rewritten in C, which has
   been corrected.
   (merge f38c92452d pk/status-of-uncloned-submodule later to maint).

 * The code to automatically shrink the fan-out in the notes tree had
   an off-by-one bug, which has been killed.
   (merge dbc27477ff jh/notes-fanout-fix later to maint).

 * The index-pack code now diagnoses a bad input packstream that
   records the same object twice when it is used as delta base; the
   code used to declare a software bug when encountering such an
   input, but it is an input error.
   (merge a21781011f jk/index-pack-dupfix later to maint).

 * The code to compute the commit-graph has been taught to use a more
   robust way to tell if two object directories refer to the same
   thing.
   (merge a7df60cac8 tb/commit-graph-object-dir later to maint).

 * "git remote rename X Y" needs to adjust configuration variables
   (e.g. branch.<name>.remote) whose value used to be X to Y.
   branch.<name>.pushRemote is now also updated.

 * Update to doc-diff.
   (merge 2607d39da3 jk/doc-diff-parallel later to maint).

 * Doc markup fix.
   (merge 0aa6ce3094 jk/push-option-doc-markup-fix later to maint).

 * "git check-ignore" did not work when the given path is explicitly
   marked as not ignored with a negative entry in the .gitignore file.
   (merge 7ec8125fba en/check-ignore later to maint).

 * The merge-recursive machinery failed to refresh the cache entry for
   a merge result in a couple of places, resulting in an unnecessary
   merge failure, which has been fixed.
   (merge fb1c18fc46 en/t3433-rebase-stat-dirty-failure later to maint).

 * Fix for a bug revealed by a recent change to make the protocol v2
   the default.
   (merge 3e96c66805 ds/partial-clone-fixes later to maint).

 * In rare cases "git worktree add <path>" could think that <path>
   was already a registered worktree even when it wasn't and refuse
   to add the new worktree. This has been corrected.
   (merge bb69b3b009 es/worktree-avoid-duplication-fix later to maint).

 * "git push" should stop from updating a branch that is checked out
   when receive.denyCurrentBranch configuration is set, but it failed
   to pay attention to checkouts in secondary worktrees.  This has
   been corrected.
   (merge 4d864895a2 hv/receive-denycurrent-everywhere later to maint).

 * "git rebase BASE BRANCH" rebased/updated the tip of BRANCH and
   checked it out, even when the BRANCH is checked out in a different
   worktree.  This has been corrected.
   (merge b5cabb4a96 es/do-not-let-rebase-switch-to-protected-branch later to maint).

 * "git describe" in a repository with multiple root commits sometimes
   gave up looking for the best tag to describe a given commit with
   too early, which has been adjusted.

 * "git merge signed-tag" while lacking the public key started to say
   "No signature", which was utterly wrong.  This regression has been
   reverted.
   (merge 0106b1d4be hi/gpg-use-check-signature later to maint).

 * MinGW's poll() emulation has been improved.
   (merge 94f4d01932 am/mingw-poll-fix later to maint).

 * "git show" and others gave an object name in raw format in its
   error output, which has been corrected to give it in hex.
   (merge 237a28173f hd/show-one-mergetag-fix later to maint).

 * "git fetch" over HTTP walker protocol did not show any progress
   output.  We inherently do not know how much work remains, but still
   we can show something not to bore users.
   (merge 7655b4119d rs/show-progress-in-dumb-http-fetch later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 26f924d50e en/simplify-check-updates-in-unpack-trees later to maint).
   (merge d0d0a357a1 am/update-pathspec-f-f-tests later to maint).
   (merge f94f7bd00d am/test-pathspec-f-f-error-cases later to maint).
   (merge c513a958b6 ss/t6025-modernize later to maint).
   (merge b441717256 dl/test-must-fail-fixes later to maint).
   (merge d031049da3 mt/sparse-checkout-doc-update later to maint).
   (merge 145136a95a jc/skip-prefix later to maint).
   (merge 5290d45134 jk/alloc-cleanups later to maint).
   (merge 7a9f8ca805 rs/parse-options-concat-dup later to maint).
   (merge 517b60564e rs/strbuf-insertstr later to maint).
   (merge f696a2b1c8 jk/mailinfo-cleanup later to maint).
   (merge 076ee3e8a2 js/test-write-junit-xml-fix later to maint).
   (merge de26f02db1 js/test-avoid-pipe later to maint).
   (merge bfe2bbb47f js/test-unc-fetch later to maint).
   (merge 08809c09aa js/mingw-open-in-gdb later to maint).
   (merge cc4f2eb828 jk/doc-credential-helper later to maint).
   (merge e0020b2f82 es/outside-repo-errmsg-hints later to maint).
   (merge a2dc43414c es/doc-mentoring later to maint).
   (merge 539052f42f jk/run-command-formatfix later to maint).
   (merge 02bbbe9df9 es/worktree-cleanup later to maint).
   (merge 2ce6d075fa rs/micro-cleanups later to maint).
   (merge 27f182b3fc rs/blame-typefix-for-fingerprint later to maint).
   (merge 3c29e21eb0 ma/test-cleanup later to maint).
   (merge 240fc04f81 ag/rebase-remove-redundant-code later to maint).
   (merge 7f487ce062 js/ci-windows-update later to maint).
   (merge d68ce906c7 rs/commit-graph-code-simplification later to maint).
   (merge a51d9e8f07 rj/t1050-use-test-path-is-file later to maint).
   (merge fd0bc17557 kk/complete-diff-color-moved later to maint).
   (merge 65bf820d0e en/test-cleanup later to maint).

----------------------------------------------------------------

Changes since v2.25.0 are as follows:

Abhishek Kumar (2):
      lib-log-graph: consolidate test_cmp_graph logic
      lib-log-graph: consolidate colored graph cmp logic

Alban Gruin (4):
      rebase -i: stop checking out the tip of the branch to rebase
      sequencer: move check_todo_list_from_file() to rebase-interactive.c
      rebase-interactive: warn if commit is dropped with `rebase --edit-todo'
      builtin/rebase: remove a call to get_oid() on `options.switch_to'

Alexandr Miloslavskiy (14):
      parse_branchname_arg(): extract part as new function
      checkout: don't revert file on ambiguous tracking branches
      t: add tests for error conditions with --pathspec-from-file
      t: fix quotes tests for --pathspec-from-file
      t: directly test parse_pathspec_file()
      doc: rm: synchronize <pathspec> description
      rm: support the --pathspec-from-file option
      doc: stash: split options from description (1)
      doc: stash: split options from description (2)
      doc: stash: document more options
      doc: stash: synchronize <pathspec> description
      stash: eliminate crude option parsing
      stash push: support the --pathspec-from-file option
      mingw: workaround for hangs when sending STDIN

Benno Evers (1):
      describe: don't abort too early when searching tags

Bert Wesarg (6):
      pull --rebase/remote rename: document and honor single-letter abbreviations rebase types
      remote: clean-up by returning early to avoid one indentation
      remote: clean-up config callback
      remote rename/remove: handle branch.<name>.pushRemote config values
      config: provide access to the current line number
      remote rename/remove: gently handle remote.pushDefault config

David Turner (1):
      git rm submodule: succeed if .gitmodules index stat info is zero

Denton Liu (34):
      t/lib-git-p4: use test_path_is_missing()
      t0000: replace test_must_fail with run_sub_test_lib_test_err()
      t0003: use named parameters in attr_check()
      t0003: use test_must_be_empty()
      t0003: don't use `test_must_fail attr_check`
      t0020: don't use `test_must_fail has_cr`
      t0020: use ! check_packed_refs_marked
      t1306: convert `test_might_fail rm` to `rm -f`
      t1307: reorder `nongit test_must_fail`
      t1409: let sed open its own input file
      t1409: use test_path_is_missing()
      t1501: remove use of `test_might_fail cp`
      t1507: stop losing return codes of git commands
      t1507: run commands within test_expect_success
      t1507: inline full_name()
      contrib/credential/netrc: make PERL_PATH configurable
      contrib/credential/netrc: work outside a repo
      t2018: remove trailing space from test description
      t2018: add space between function name and ()
      t2018: improve style of if-statement
      .mailmap: fix erroneous authorship for Johannes Schindelin
      t2018: be more discerning when checking for expected exit codes
      t2018: teach do_checkout() to accept `!` arg
      t2018: don't lose return code of git commands
      t2018: replace "sha" with "oid"
      t3030: use test_path_is_missing()
      t3310: extract common notes_merge_files_gone()
      t3415: stop losing return codes of git commands
      t3415: increase granularity of test_auto_{fixup,squash}()
      t3419: stop losing return code of git command
      t3507: fix indentation
      t3507: use test_path_is_missing()
      t4124: only mark git command with test_must_fail
      .mailmap: map Yi-Jyun Pan's email

Derrick Stolee (26):
      unpack-trees: correctly compute result count
      graph: add test to demonstrate horizontal line bug
      graph: fix collapse of multiple edges
      clean: demonstrate a bug with pathspecs
      fetch: document and test --refmap=""
      t1091: use check_files to reduce boilerplate
      t1091: improve here-docs
      sparse-checkout: create leading directories
      clone: fix --sparse option with URLs
      sparse-checkout: cone mode does not recognize "**"
      sparse-checkout: detect short patterns
      sparse-checkout: warn on globs in cone patterns
      sparse-checkout: properly match escaped characters
      sparse-checkout: write escaped patterns in cone mode
      sparse-checkout: unquote C-style strings over --stdin
      sparse-checkout: use C-style quotes in 'list' subcommand
      sparse-checkout: escape all glob characters on write
      sparse-checkout: improve docs around 'set' in cone mode
      sparse-checkout: fix cone mode behavior mismatch
      sparse-checkout: extract add_patterns_from_input()
      sparse-checkout: extract pattern update from 'set' subcommand
      sparse-checkout: create 'add' subcommand
      sparse-checkout: work with Windows paths
      sparse-checkout: allow one-character directories in cone mode
      partial-clone: demonstrate bugs in partial fetch
      partial-clone: avoid fetching when looking for objects

Elijah Newren (32):
      unpack-trees: exit check_updates() early if updates are not wanted
      string-list: note in docs that callers can specify sorting function
      dir: treat_leading_path() and read_directory_recursive(), round 2
      git-rebase.txt: update description of --allow-empty-message
      t3404: directly test the behavior of interest
      rebase (interactive-backend): make --keep-empty the default
      rebase (interactive-backend): fix handling of commits that become empty
      t3406: simplify an already simple test
      rebase, sequencer: remove the broken GIT_QUIET handling
      rebase: make sure to pass along the quiet flag to the sequencer
      rebase: fix handling of restrict_revision
      t3432: make these tests work with either am or merge backends
      rebase: allow more types of rebases to fast-forward
      git-rebase.txt: add more details about behavioral differences of backends
      rebase: move incompatibility checks between backend options a bit earlier
      rebase: add an --am option
      git-prompt: change the prompt for interactive-based rebases
      rebase: drop '-i' from the reflog for interactive-based rebases
      rebase tests: mark tests specific to the am-backend with --am
      rebase tests: repeat some tests using the merge backend instead of am
      rebase: make the backend configurable via config setting
      rebase: change the default backend from "am" to "merge"
      rebase: rename the two primary rebase backends
      check-ignore: fix documentation and implementation to match
      t3433: new rebase testcase documenting a stat-dirty-like failure
      merge-recursive: fix the refresh logic in update_file_flags
      merge-recursive: apply collision handling unification to recursive case
      t602[1236], t6034: modernize test formatting
      t6020, t6022, t6035: update merge tests to use test helper functions
      t3035: prefer test_must_fail to bash negation for git commands
      t6022, t6046: test expected behavior instead of testing a proxy for it
      t6020: new test with interleaved lexicographic ordering of directories

Emily Shaffer (8):
      unpack-trees: watch for out-of-range index position
      fetch: emphasize failure during submodule fetch
      MyFirstContribution: add avenues for getting help
      submodule: add newline on invalid submodule error
      MyFirstContribution: rephrase contact info
      prefix_path: show gitdir when arg is outside repo
      submodule--helper: use C99 named initializer
      clone: pass --single-branch during --recurse-submodules

Eric Sunshine (6):
      t3400: make test clean up after itself
      rebase: refuse to switch to branch already checked out elsewhere
      worktree: drop unused code from get_main_worktree()
      worktree: improve find_worktree() documentation
      worktree: add utility to find worktree by pathname
      worktree: don't allow "add" validation to be fooled by suffix matching

Eyal Soha (3):
      color.c: refactor color_output arguments
      color.c: support bright aixterm colors
      color.c: alias RGB colors 8-15 to aixterm colors

Hans Jerry Illikainen (2):
      editorconfig: indent text files with tabs
      gpg-interface: add minTrustLevel as a configuration option

Harald van Dijk (1):
      show_one_mergetag: print non-parent in hex form.

Hariom Verma (4):
      get_main_worktree(): allow it to be called in the Git directory
      t5509: use a bare repository for test push target
      receive.denyCurrentBranch: respect all worktrees
      t2402: test worktree path when called in .git directory

Heba Waly (5):
      commit: honor advice.statusHints when rejecting an empty commit
      doc/gitcore-tutorial: fix prose to match example command
      add: use advise function to display hints
      git: update documentation for --git-dir
      add: change advice config variables used by the add API

Jacques Bodin-Hullin (1):
      parse-options: lose an unnecessary space in an error message

Jeff King (69):
      builtin/pack-objects: report reused packfile objects
      packfile: expose get_delta_base()
      restore: invalidate cache-tree when removing entries with --staged
      transport: don't flush when disconnecting stateless-rpc helper
      dir: restructure in a way to avoid passing around a struct dirent
      dir: point treat_leading_path() warning to the right place
      Makefile: use compat regex with SANITIZE=address
      t4018: drop "debugging" cat from hunk-header tests
      t7800: don't rely on reuse_worktree_file()
      ewah/bitmap: introduce bitmap_word_alloc()
      pack-bitmap: introduce bitmap_walk_contains()
      pack-bitmap: uninteresting oid can be outside bitmapped packfile
      pack-bitmap: simplify bitmap_has_oid_in_uninteresting()
      csum-file: introduce hashfile_total()
      pack-objects: introduce pack.allowPackReuse
      builtin/pack-objects: introduce obj_is_packed()
      pack-objects: improve partial packfile reuse
      pack-objects: add checks for duplicate objects
      pack-bitmap: don't rely on bitmap_git->reuse_objects
      sparse-checkout: fix documentation typo for core.sparseCheckoutCone
      verify_filename(): handle backslashes in "wildcards are pathspecs" rule
      merge-recursive: silence -Wxor-used-as-pow warning
      t1400: avoid "test" string comparisons
      t1506: drop space after redirection operator
      avoid computing zero offsets from NULL pointer
      xdiff: avoid computing non-zero offset from NULL pointer
      obstack: avoid computing offsets from NULL pointer
      doc: drop "explicitly given" from push.default description
      sha1-name: mark get_oid() error messages for translation
      normalize_path_copy(): document "dst" size expectations
      walker_fetch(): avoid raw array length computation
      traverse_trees(): use stack array for name entries
      diff: move diff.wsErrorHighlight to "basic" config
      tree-walk.c: break circular dependency with unpack-trees
      index-pack: downgrade twice-resolved REF_DELTA to die()
      mailinfo: treat header values as C strings
      mailinfo: simplify parsing of header values
      mailinfo: be more liberal with header whitespace
      mailinfo: factor out some repeated header handling
      pack-bitmap: factor out type iterator initialization
      pack-bitmap: fix leak of haves/wants object lists
      rev-list: fallback to non-bitmap traversal when filtering
      pack-bitmap: refuse to do a bitmap traversal with pathspecs
      rev-list: factor out bitmap-optimized routines
      rev-list: make --count work with --objects
      rev-list: allow bitmaps when counting objects
      t5310: factor out bitmap traversal comparison
      rev-list: allow commit-only bitmap traversals
      pack-bitmap: basic noop bitmap filter infrastructure
      rev-list: use bitmap filters for traversal
      bitmap: add bitmap_unset() function
      pack-bitmap: implement BLOB_NONE filtering
      pack-bitmap: implement BLOB_LIMIT filtering
      pack-objects: support filters with bitmaps
      doc: move credential helper info into gitcredentials(7)
      doc/config/push: use longer "--" line for preformatted example
      doc-diff: use single-colon rule in rendering Makefile
      run-command.h: fix mis-indented struct member
      nth_packed_object_oid(): use customary integer return
      pack-objects: read delta base oid into object_id struct
      pack-objects: convert oe_set_delta_ext() to use object_id
      pack-objects: use object_id struct in pack-reuse code
      pack-bitmap: use object_id when loading on-disk bitmaps
      pack-check: convert "internal error" die to a BUG()
      pack-check: push oid lookup into loop
      packed_object_info(): use object_id for returning delta base
      packed_object_info(): use object_id internally for delta base
      packfile: drop nth_packed_object_sha1()
      config.mak.dev: re-enable -Wformat-zero-length

Johan Herland (2):
      t3305: check notes fanout more carefully and robustly
      notes.c: fix off-by-one error when decreasing notes fanout

Johannes Berg (1):
      pack-format: correct multi-pack-index description

Johannes Schindelin (33):
      built-in add -p: prepare for patch modes other than "stage"
      built-in add -p: implement the "stash" and "reset" patch modes
      legacy stash -p: respect the add.interactive.usebuiltin setting
      built-in stash: use the built-in `git add -p` if so configured
      built-in add -p: implement the "checkout" patch modes
      built-in add -p: implement the "worktree" patch modes
      commit --interactive: make it work with the built-in `add -i`
      t3701: adjust difffilter test
      built-in add -p: support interactive.diffFilter
      built-in add -p: handle diff.algorithm
      terminal: make the code of disable_echo() reusable
      terminal: accommodate Git for Windows' default terminal
      terminal: add a new function to read a single keystroke
      built-in add -p: respect the `interactive.singlekey` config setting
      built-in add -p: handle Escape sequences in interactive.singlekey mode
      built-in add -p: handle Escape sequences more efficiently
      ci: include the built-in `git add -i` in the `linux-gcc` job
      msvc: accommodate for vcpkg's upgrade to OpenSSL v1.1.x
      built-in add -i: do not try to `patch`/`diff` an empty list of files
      built-in add -i: accept open-ended ranges again
      parse_insn_line(): improve error message when parsing failed
      rebase -i: re-fix short SHA-1 collision
      rebase -i: also avoid SHA-1 collisions with missingCommitsCheck
      ci: ignore rubygems warning in the "Documentation" job
      convert: fix typo
      tests: fix --write-junit-xml with subshells
      t9001, t9116: avoid pipes
      t5580: test cloning without file://, test fetching via UNC paths
      mingw: add a helper function to attach GDB to the current process
      t/lib-httpd: avoid using macOS' sed
      ci: prevent `perforce` from being quarantined
      Azure Pipeline: switch to the latest agent pools
      t5537: adjust test_oid label

Johannes Sixt (1):
      t3504: do check for conflict marker after failed cherry-pick

Jonathan Nieder (9):
      sha1-file: document how to use pretend_object_file
      fetch test: avoid use of "VAR= cmd" with a shell function
      t/check-non-portable-shell: detect "FOO= shell_func", too
      fetch test: mark test of "skipping" haves as v0-only
      fetch test: use more robust test for filtered objects
      config doc: protocol.version is not experimental
      test: request GIT_TEST_PROTOCOL_VERSION=0 when appropriate
      protocol test: let protocol.version override GIT_TEST_PROTOCOL_VERSION
      fetch: default to protocol version 2

Jonathan Tan (4):
      sha1-file: remove OBJECT_INFO_SKIP_CACHED
      t5616: make robust to delta base change
      connected: verify promisor-ness of partial clone
      fetch: forgo full connectivity check if --filter

Junio C Hamano (16):
      The first batch post 2.25 cycle
      merge-recursive: use subtraction to flip stage
      .mailmap: fix GGG authoship screwup
      The second batch
      C: use skip_prefix() to avoid hardcoded string length
      The third batch for 2.26
      The fourth batch for 2.26
      The fifth batch for 2.26
      Git 2.25.1
      The sixth batch for 2.26
      rev-list --count: comment on the use of count_right++
      The seventh batch for 2.26
      Revert "gpg-interface: prefer check_signature() for GPG verification"
      The eighth batch for 2.26
      Git 2.26-rc0
      Git 2.26-rc1

Kevin Willford (4):
      fsmonitor: change last update timestamp on the index_state to opaque token
      fsmonitor: handle version 2 of the hooks that will use opaque token
      fsmonitor: add fsmonitor hook scripts for version 2
      fsmonitor: update documentation for hook version and watchman hooks

Kir Kolyshkin (1):
      completion: add diff --color-moved[-ws]

Kyle Meyer (2):
      submodule add: show 'add --dry-run' stderr when aborting
      submodule foreach: replace $path with $sm_path in example

Lucius Hu (1):
      templates: fix deprecated type option `--bool`

Luke Diamand (7):
      git-p4: make closeStreams() idempotent
      git-p4: add P4CommandException to report errors talking to Perforce
      git-p4: disable some pylint warnings, to get pylint output to something manageable
      git-p4: create helper function importRevisions()
      git-p4: cleanup better on error exit
      git-p4: check for access to remote host earlier
      git-p4: avoid leak of file handle when cloning

Martin Ågren (6):
      git-filter-branch.txt: wrap "maths" notation in backticks
      name-rev: rewrite create_or_update_name()
      diff-options.txt: avoid "regex" overload in example
      t4117: check for files using `test_path_is_file`
      t9810: drop debug `cat` call
      t: drop debug `cat` calls

Masaya Suzuki (1):
      doc: describe Git bundle format

Matheus Tavares (21):
      grep: fix race conditions on userdiff calls
      grep: fix race conditions at grep_submodule()
      grep: fix racy calls in grep_objects()
      replace-object: make replace operations thread-safe
      object-store: allow threaded access to object reading
      grep: replace grep_read_mutex by internal obj read lock
      submodule-config: add skip_if_read option to repo_read_gitmodules()
      grep: allow submodule functions to run in parallel
      grep: protect packed_git [re-]initialization
      grep: re-enable threads in non-worktree case
      grep: move driver pre-load out of critical section
      grep: use no. of cores as the default no. of threads
      doc: sparse-checkout: mention --cone option
      completion: add support for sparse-checkout
      diff: make diff_populate_filespec() honor its repo argument
      cache-tree: use given repo's hash_algo at verify_one()
      pack-check: use given repo's hash_algo at verify_packfile()
      streaming: allow open_istream() to handle any repo
      sha1-file: pass git_hash_algo to write_object_file_prepare()
      sha1-file: pass git_hash_algo to hash_object_file()
      sha1-file: allow check_object_signature() to handle any repo

Matthew Rogers (10):
      config: fix typo in variable name
      t1300: fix over-indented HERE-DOCs
      t1300: create custom config file without special characters
      config: make scope_name non-static and rename it
      config: split repo scope to local and worktree
      config: clarify meaning of command line scoping
      config: preserve scope in do_git_config_sequence
      config: teach git_config_source to remember its scope
      submodule-config: add subomdule config scope
      config: add '--show-scope' to print the scope of a config value

Miriam Rubio (3):
      bisect--helper: convert `vocab_*` char pointers to char arrays
      bisect: use the standard 'if (!var)' way to check for 0
      bisect: add enum to represent bisect returning codes

Paolo Bonzini (5):
      parse-options: add testcases for OPT_CMDMODE()
      parse-options: convert "command mode" to a flag
      am: convert "resume" variable to a struct
      am: support --show-current-patch=raw as a synonym for--show-current-patch
      am: support --show-current-patch=diff to retrieve .git/rebase-apply/patch

Peter Kaestle (3):
      t7400: add a testcase for submodule status on empty dirs
      submodule: fix status of initialized but not cloned submodules
      t7400: testcase for submodule status on unregistered inner git repos

Philippe Blain (5):
      t7410: rename to t2405-worktree-submodule.sh
      t2405: use git -C and test_commit -C instead of subshells
      t2405: clarify test descriptions and simplify test
      submodule.c: use get_git_dir() instead of get_git_common_dir()
      grep: ignore --recurse-submodules if --no-index is given

Pranit Bauva (7):
      bisect--helper: return error codes from `cmd_bisect__helper()`
      bisect: libify `exit_if_skipped_commits` to `error_if_skipped*` and its dependents
      bisect: libify `bisect_checkout`
      bisect: libify `check_merge_bases` and its dependents
      bisect: libify `check_good_are_ancestors_of_bad` and its dependents
      bisect: libify `handle_bad_merge_base` and its dependents
      bisect: libify `bisect_next_all`

Ralf Thielow (2):
      submodule.c: mark more strings for translation
      rebase-interactive.c: silence format-zero-length warnings

Rasmus Jonsson (1):
      t1050: replace test -f with test_path_is_file

René Scharfe (21):
      name-rev: remove unused typedef
      name-rev: respect const qualifier
      name-rev: don't leak path copy in name_ref()
      name-rev: don't _peek() in create_or_update_name()
      name-rev: put struct rev_name into commit slab
      name-rev: factor out get_parent_name()
      name-rev: pre-size buffer in get_parent_name()
      name-rev: generate name strings only if they are better
      name-rev: release unused name strings
      name-rev: sort tip names before applying
      strbuf: add and use strbuf_insertstr()
      mailinfo: don't insert header prefix for handle_content_type()
      parse-options: use COPY_ARRAY in parse_options_concat()
      parse-options: factor out parse_options_count()
      parse-options: const parse_options_concat() parameters
      parse-options: simplify parse_options_dup()
      quote: use isalnum() to check for alphanumeric characters
      use strpbrk(3) to search for characters from a given set
      blame: provide type of fingerprints pointer
      commit-graph: use progress title directly
      remote-curl: show progress for fetches over dumb HTTP

SZEDER Gábor (6):
      t9902-completion: add tests for the __git_find_on_cmdline() helper
      completion: clean up the __git_find_on_cmdline() helper function
      completion: return the index of found word from __git_find_on_cmdline()
      completion: simplify completing 'git worktree' subcommands and options
      completion: list existing working trees for 'git worktree' subcommands
      completion: list paths and refs for 'git worktree add'

Shourya Shukla (2):
      t6025: modernize style
      t6025: use helpers to replace test -f <path>

Tanushree Tumane (2):
      bisect--helper: change `retval` to `res`
      bisect--helper: introduce new `decide_next()` function

Taylor Blau (5):
      t5318: don't pass non-object directory to '--object-dir'
      commit-graph.h: store an odb in 'struct write_commit_graph_context'
      commit-graph.h: store object directory in 'struct commit_graph'
      commit-graph.c: remove path normalization, comparison
      commit-graph.h: use odb in 'load_commit_graph_one_fd_st'

brian m. carlson (53):
      run-command: avoid undefined behavior in exists_in_PATH
      t4054: make hash-size independent
      t4066: compute index line in diffs
      t4134: compute appropriate length constant
      t4200: make hash size independent
      t4202: abstract away SHA-1-specific constants
      t4204: make hash size independent
      t4300: abstract away SHA-1-specific constants
      t5318: update for SHA-256
      t5319: change invalid offset for SHA-256 compatibility
      t5319: make test work with SHA-256
      t5324: make hash size independent
      t5504: make hash algorithm independent
      t5510: make hash size independent
      t5512: abstract away SHA-1-specific constants
      t5530: compute results based on object length
      t5537: make hash size independent
      t5540: make hash size independent
      t5562: use $ZERO_OID
      t5601: switch into repository to hash object
      t5604: make hash independent
      docs: use "currently" for the present time
      doc: move author and committer information to git-commit(1)
      docs: expand on possible and recommended user config options
      doc: provide guidance on user.name format
      doc: dissuade users from trying to ignore tracked files
      docs: mention when increasing http.postBuffer is valuable
      t/lib-pack: support SHA-256
      t3206: make hash size independent
      t3308: make test work with SHA-256
      t3309: make test work with SHA-256
      t3310: make test work with SHA-256
      t3311: make test work with SHA-256
      t4013: make test hash independent
      t4211: move SHA-1-specific test cases into a directory
      t4211: add test cases for SHA-256
      t4060: make test work with SHA-256
      t5302: make hash size independent
      t5309: make test hash independent
      t5313: make test hash independent
      t5321: make test hash independent
      t5515: make test hash independent
      t5318: update for SHA-256
      t5607: make hash size independent
      t5703: make test work with SHA-256
      t6000: abstract away SHA-1-specific constants
      t6006: make hash size independent
      t6024: update for SHA-256
      mailmap: add an additional email address for brian m. carlson
      t1300: add test for urlmatch with multiple wildcards
      t0300: add tests for some additional cases
      credential: use the last matching username in the config
      credential: allow wildcard patterns when matching config


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.26.0-rc0
@ 2020-03-05 22:02  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2020-03-05 22:02 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

An early preview release Git v2.26.0-rc0 is now available for
testing at the usual places.  It is comprised of 426 non-merge
commits since v2.25.0, contributed by 43 people, 7 of which are
new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.26.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.25.0 are as follows.
Welcome to the Git development community!

  Abhishek Kumar, Benno Evers, Eyal Soha, Jacques Bodin-Hullin,
  Lucius Hu, Peter Kaestle, and Shourya Shukla.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alban Gruin, Alexandr Miloslavskiy, Bert Wesarg, brian
  m. carlson, David Turner, Denton Liu, Derrick Stolee, Elijah
  Newren, Emily Shaffer, Eric Sunshine, Hans Jerry Illikainen,
  Hariom Verma, Heba Waly, Jeff King, Johan Herland, Johannes Berg,
  Johannes Schindelin, Johannes Sixt, Jonathan Nieder, Jonathan
  Tan, Junio C Hamano, Kevin Willford, Kyle Meyer, Luke Diamand,
  Martin Ågren, Masaya Suzuki, Matheus Tavares, Matthew Rogers,
  Miriam Rubio, Philippe Blain, Pranit Bauva, Ralf Thielow,
  René Scharfe, SZEDER Gábor, Tanushree Tumane, and Taylor Blau.

----------------------------------------------------------------

Git 2.26 Release Notes (draft)
==============================

Updates since v2.25
-------------------

UI, Workflows & Features

 * Sample credential helper for using .netrc has been updated to work
   out of the box.

 * gpg.minTrustLevel configuration variable has been introduced to
   tell various signature verification codepaths the required minimum
   trust level.

 * The command line completion (in contrib/) learned to complete
   subcommands and arguments to "git worktree".

 * Disambiguation logic to tell revisions and pathspec apart has been
   tweaked so that backslash-escaped glob special characters do not
   count in the "wildcards are pathspec" rule.

 * One effect of specifying where the GIT_DIR is (either with the
   environment variable, or with the "git --git-dir=<where> cmd"
   option) is to disable the repository discovery.  This has been
   placed a bit more stress in the documentation, as new users often
   get confused.

 * Two help messages given when "git add" notices the user gave it
   nothing to add have been updated to use advise() API.

 * A new version of fsmonitor-watchman hook has been introduced, to
   avoid races.

 * "git config" learned to show in which "scope", in addition to in
   which file, each config setting comes from.

 * The basic 7 colors learned the brighter counterparts
   (e.g. "brightred").

 * "git sparse-checkout" learned a new "add" subcommand.

 * A configuration element used for credential subsystem can now use
   wildcard pattern to specify for which set of URLs the entry
   applies.

 * "git clone --recurse-submodules --single-branch" now uses the same
   single-branch option when cloning the submodules.


Performance, Internal Implementation, Development Support etc.

 * Tell .editorconfig that in this project, *.txt files are indented
   with tabs.

 * The test-lint machinery knew to check "VAR=VAL shell_function"
   construct, but did not check "VAR= shell_funciton", which has been
   corrected.

 * Replace "git config --bool" calls with "git config --type=bool" in
   sample templates.

 * The effort to move "git-add--interactive" to C continues.

 * Improve error message generation for "git submodule add".

 * Preparation of test scripts for the day when the object names will
   use SHA-256 continues.

 * Warn programmers about pretend_object_file() that allows the code
   to tentatively use in-core objects.

 * The way "git pack-objects" reuses objects stored in existing pack
   to generate its result has been improved.

 * The transport protocol version 2 becomes the default one.

 * Traditionally, we avoided threaded grep while searching in objects
   (as opposed to files in the working tree) as accesses to the object
   layer is not thread-safe.  This limitation is getting lifted.

 * "git rebase -i" (and friends) used to unnecessarily check out the
   tip of the branch to be rebased, which has been corrected.

 * A low-level API function get_oid(), that accepts various ways to
   name an object, used to issue end-user facing error messages
   without l10n, which has been updated to be translatable.

 * Unneeded connectivity check is now disabled in a partial clone when
   fetching into it.

 * Some rough edges in the sparse-checkout feature, especially around
   the cone mode, have been cleaned up.

 * The diff-* plumbing family of subcommands now pay attention to the
   diff.wsErrorHighlight configuration, which has been ignored before;
   this allows "git add -p" to also show the whitespace problems to
   the end user.

 * Some codepaths were given a repository instance as a parameter to
   work in the repository, but passed the_repository instance to its
   callees, which has been cleaned up (somewhat).

 * Memory footprint and performance of "git name-rev" has been
   improved.

 * The object reachability bitmap machinery and the partial cloning
   machinery were not prepared to work well together, because some
   object-filtering criteria that partial clones use inherently rely
   on object traversal, but the bitmap machinery is an optimization
   to bypass that object traversal.  There however are some cases
   where they can work together, and they were taught about them.

 * "git rebase" has learned to use the merge backend (i.e. the
   machinery that drives "rebase -i") by default, while allowing
   "--apply" option to use the "apply" backend (e.g. the moral
   equivalent of "format-patch piped to am").  The rebase.backend
   configuration variable can be set to customize.

 * Underlying machinery of "git bisect--helper" is being refactored
   into pieces that are more easily reused.


Fixes since v2.25
-----------------

 * "git commit" gives output similar to "git status" when there is
   nothing to commit, but without honoring the advise.statusHints
   configuration variable, which has been corrected.

 * has_object_file() said "no" given an object registered to the
   system via pretend_object_file(), making it inconsistent with
   read_object_file(), causing lazy fetch to attempt fetching an
   empty tree from promisor remotes.

 * Complete an update to tutorial that encourages "git switch" over
   "git checkout" that was done only half-way.

 * C pedantry ;-) fix.

 * The code that tries to skip over the entries for the paths in a
   single directory using the cache-tree was not careful enough
   against corrupt index file.

 * Reduce unnecessary round-trip when running "ls-remote" over the
   stateless RPC mechanism.

 * "git restore --staged" did not correctly update the cache-tree
   structure, resulting in bogus trees to be written afterwards, which
   has been corrected.

 * The code recently added to move to the entry beyond the ones in the
   same directory in the index in the sparse-cone mode did not count
   the number of entries to skip over incorrectly, which has been
   corrected.

 * Rendering by "git log --graph" of ancestry lines leading to a merge
   commit were made suboptimal to waste vertical space a bit with a
   recent update, which has been corrected.

 * Work around test breakages caused by custom regex engine used in
   libasan, when address sanitizer is used with more recent versions
   of gcc and clang.

 * Minor bugfixes to "git add -i" that has recently been rewritten in C.
   (merge 849e43cc18 js/builtin-add-i-cmds later to maint).

 * "git fetch --refmap=" option has got a better documentation.

 * "git checkout X" did not correctly fail when X is not a local
   branch but could name more than one remote-tracking branches
   (i.e. to be dwimmed as the starting point to create a corresponding
   local branch), which has been corrected.
   (merge fa74180d08 am/checkout-file-and-ref-ref-ambiguity later to maint).

 * Corner case bugs in "git clean" that stems from a (necessarily for
   performance reasons) awkward calling convention in the directory
   enumeration API has been corrected.

 * A fetch that is told to recursively fetch updates in submodules
   inevitably produces reams of output, and it becomes hard to spot
   error messages.  The command has been taught to enumerate
   submodules that had errors at the end of the operation.
   (merge 0222540827 es/fetch-show-failed-submodules-atend later to maint).

 * The "--recurse-submodules" option of various subcommands did not
   work well when run in an alternate worktree, which has been
   corrected.
   (merge a9472afb63 pb/recurse-submodule-in-worktree-fix later to maint).

 * Futureproofing a test not to depend on the current implementation
   detail.

 * Running "git rm" on a submodule failed unnecessarily when
   .gitmodules is only cache-dirty, which has been corrected.
   (merge 7edee32985 dt/submodule-rm-with-stale-cache later to maint).

 * C pedantry ;-) fix.
   (merge cf82bff73f jk/clang-sanitizer-fixes later to maint).

 * "git grep --no-index" should not get affected by the contents of
   the .gitmodules file but when "--recurse-submodules" is given or
   the "submodule.recurse" variable is set, it did.  Now these
   settings are ignored in the "--no-index" mode.

 * Technical details of the bundle format has been documented.

 * Unhelpful warning messages during documentation build have been squelched.

 * "git rebase -i" identifies existing commits in its todo file with
   their abbreviated object name, which could become ambigous as it
   goes to create new commits, and has a mechanism to avoid ambiguity
   in the main part of its execution.  A few other cases however were
   not covered by the protection against ambiguity, which has been
   corrected.
   (merge 26027625dd js/rebase-i-with-colliding-hash later to maint).

 * Allow the rebase.missingCommitsCheck configuration to kick in when
   "rebase --edit-todo" and "rebase --continue" restarts the procedure.
   (merge 5a5445d878 ag/edit-todo-drop-check later to maint).

 * The way "git submodule status" reports an initialized but not yet
   populated submodule has not been reimplemented correctly when a
   part of the "git submodule" command was rewritten in C, which has
   been corrected.
   (merge f38c92452d pk/status-of-uncloned-submodule later to maint).

 * The code to automatically shrink the fan-out in the notes tree had
   an off-by-one bug, which has been killed.
   (merge dbc27477ff jh/notes-fanout-fix later to maint).

 * The index-pack code now diagnoses a bad input packstream that
   records the same object twice when it is used as delta base; the
   code used to declare a software bug when encountering such an
   input, but it is an input error.
   (merge a21781011f jk/index-pack-dupfix later to maint).

 * The code to compute the commit-graph has been taught to use a more
   robust way to tell if two object directories refer to the same
   thing.
   (merge a7df60cac8 tb/commit-graph-object-dir later to maint).

 * "git remote rename X Y" needs to adjust configuration variables
   (e.g. branch.<name>.remote) whose value used to be X to Y.
   branch.<name>.pushRemote is now also updated.

 * Update to doc-diff.
   (merge 2607d39da3 jk/doc-diff-parallel later to maint).

 * Doc markup fix.
   (merge 0aa6ce3094 jk/push-option-doc-markup-fix later to maint).

 * "git check-ignore" did not work when the given path is explicitly
   marked as not ignored with a negative entry in the .gitignore file.
   (merge 7ec8125fba en/check-ignore later to maint).

 * The merge-recursive machinery failed to refresh the cache entry for
   a merge result in a couple of places, resulting in an unnecessary
   merge failure, which has been fixed.
   (merge fb1c18fc46 en/t3433-rebase-stat-dirty-failure later to maint).

 * Fix for a bug revealed by a recent change to make the protocol v2
   the default.
   (merge 3e96c66805 ds/partial-clone-fixes later to maint).

 * In rare cases "git worktree add <path>" could think that <path>
   was already a registered worktree even when it wasn't and refuse
   to add the new worktree. This has been corrected.
   (merge bb69b3b009 es/worktree-avoid-duplication-fix later to maint).

 * "git push" should stop from updating a branch that is checked out
   when receive.denyCurrentBranch configuration is set, but it failed
   to pay attention to checkouts in secondary worktrees.  This has
   been corrected.
   (merge 4d864895a2 hv/receive-denycurrent-everywhere later to maint).

 * "git rebase BASE BRANCH" rebased/updated the tip of BRANCH and
   checked it out, even when the BRANCH is checked out in a different
   worktree.  This has been corrected.
   (merge b5cabb4a96 es/do-not-let-rebase-switch-to-protected-branch later to maint).

 * "git describe" in a repository with multiple root commits sometimes
   gave up looking for the best tag to describe a given commit with
   too early, which has been adjusted.

 * "git merge signed-tag" while lacking the public key started to say
   "No signature", which was utterly wrong.  This regression has been
   reverted.
   (merge 0106b1d4be hi/gpg-use-check-signature later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 26f924d50e en/simplify-check-updates-in-unpack-trees later to maint).
   (merge d0d0a357a1 am/update-pathspec-f-f-tests later to maint).
   (merge f94f7bd00d am/test-pathspec-f-f-error-cases later to maint).
   (merge c513a958b6 ss/t6025-modernize later to maint).
   (merge b441717256 dl/test-must-fail-fixes later to maint).
   (merge d031049da3 mt/sparse-checkout-doc-update later to maint).
   (merge 145136a95a jc/skip-prefix later to maint).
   (merge 5290d45134 jk/alloc-cleanups later to maint).
   (merge 7a9f8ca805 rs/parse-options-concat-dup later to maint).
   (merge 517b60564e rs/strbuf-insertstr later to maint).
   (merge f696a2b1c8 jk/mailinfo-cleanup later to maint).
   (merge 076ee3e8a2 js/test-write-junit-xml-fix later to maint).
   (merge de26f02db1 js/test-avoid-pipe later to maint).
   (merge bfe2bbb47f js/test-unc-fetch later to maint).
   (merge 08809c09aa js/mingw-open-in-gdb later to maint).
   (merge cc4f2eb828 jk/doc-credential-helper later to maint).
   (merge e0020b2f82 es/outside-repo-errmsg-hints later to maint).
   (merge a2dc43414c es/doc-mentoring later to maint).
   (merge 539052f42f jk/run-command-formatfix later to maint).
   (merge 02bbbe9df9 es/worktree-cleanup later to maint).
   (merge 2ce6d075fa rs/micro-cleanups later to maint).
   (merge 27f182b3fc rs/blame-typefix-for-fingerprint later to maint).
   (merge 3c29e21eb0 ma/test-cleanup later to maint).
   (merge 240fc04f81 ag/rebase-remove-redundant-code later to maint).
   (merge 7f487ce062 js/ci-windows-update later to maint).
   (merge d68ce906c7 rs/commit-graph-code-simplification later to maint).

----------------------------------------------------------------

Changes since v2.25.0 are as follows:

Abhishek Kumar (2):
      lib-log-graph: consolidate test_cmp_graph logic
      lib-log-graph: consolidate colored graph cmp logic

Alban Gruin (4):
      rebase -i: stop checking out the tip of the branch to rebase
      sequencer: move check_todo_list_from_file() to rebase-interactive.c
      rebase-interactive: warn if commit is dropped with `rebase --edit-todo'
      builtin/rebase: remove a call to get_oid() on `options.switch_to'

Alexandr Miloslavskiy (5):
      parse_branchname_arg(): extract part as new function
      checkout: don't revert file on ambiguous tracking branches
      t: add tests for error conditions with --pathspec-from-file
      t: fix quotes tests for --pathspec-from-file
      t: directly test parse_pathspec_file()

Benno Evers (1):
      describe: don't abort too early when searching tags

Bert Wesarg (6):
      pull --rebase/remote rename: document and honor single-letter abbreviations rebase types
      remote: clean-up by returning early to avoid one indentation
      remote: clean-up config callback
      remote rename/remove: handle branch.<name>.pushRemote config values
      config: provide access to the current line number
      remote rename/remove: gently handle remote.pushDefault config

David Turner (1):
      git rm submodule: succeed if .gitmodules index stat info is zero

Denton Liu (34):
      t/lib-git-p4: use test_path_is_missing()
      t0000: replace test_must_fail with run_sub_test_lib_test_err()
      t0003: use named parameters in attr_check()
      t0003: use test_must_be_empty()
      t0003: don't use `test_must_fail attr_check`
      t0020: don't use `test_must_fail has_cr`
      t0020: use ! check_packed_refs_marked
      t1306: convert `test_might_fail rm` to `rm -f`
      t1307: reorder `nongit test_must_fail`
      t1409: let sed open its own input file
      t1409: use test_path_is_missing()
      t1501: remove use of `test_might_fail cp`
      t1507: stop losing return codes of git commands
      t1507: run commands within test_expect_success
      t1507: inline full_name()
      contrib/credential/netrc: make PERL_PATH configurable
      contrib/credential/netrc: work outside a repo
      t2018: remove trailing space from test description
      t2018: add space between function name and ()
      t2018: improve style of if-statement
      .mailmap: fix erroneous authorship for Johannes Schindelin
      t2018: be more discerning when checking for expected exit codes
      t2018: teach do_checkout() to accept `!` arg
      t2018: don't lose return code of git commands
      t2018: replace "sha" with "oid"
      t3030: use test_path_is_missing()
      t3310: extract common notes_merge_files_gone()
      t3415: stop losing return codes of git commands
      t3415: increase granularity of test_auto_{fixup,squash}()
      t3419: stop losing return code of git command
      t3507: fix indentation
      t3507: use test_path_is_missing()
      t4124: only mark git command with test_must_fail
      .mailmap: map Yi-Jyun Pan's email

Derrick Stolee (26):
      unpack-trees: correctly compute result count
      graph: add test to demonstrate horizontal line bug
      graph: fix collapse of multiple edges
      clean: demonstrate a bug with pathspecs
      fetch: document and test --refmap=""
      t1091: use check_files to reduce boilerplate
      t1091: improve here-docs
      sparse-checkout: create leading directories
      clone: fix --sparse option with URLs
      sparse-checkout: cone mode does not recognize "**"
      sparse-checkout: detect short patterns
      sparse-checkout: warn on globs in cone patterns
      sparse-checkout: properly match escaped characters
      sparse-checkout: write escaped patterns in cone mode
      sparse-checkout: unquote C-style strings over --stdin
      sparse-checkout: use C-style quotes in 'list' subcommand
      sparse-checkout: escape all glob characters on write
      sparse-checkout: improve docs around 'set' in cone mode
      sparse-checkout: fix cone mode behavior mismatch
      sparse-checkout: extract add_patterns_from_input()
      sparse-checkout: extract pattern update from 'set' subcommand
      sparse-checkout: create 'add' subcommand
      sparse-checkout: work with Windows paths
      sparse-checkout: allow one-character directories in cone mode
      partial-clone: demonstrate bugs in partial fetch
      partial-clone: avoid fetching when looking for objects

Elijah Newren (26):
      unpack-trees: exit check_updates() early if updates are not wanted
      string-list: note in docs that callers can specify sorting function
      dir: treat_leading_path() and read_directory_recursive(), round 2
      git-rebase.txt: update description of --allow-empty-message
      t3404: directly test the behavior of interest
      rebase (interactive-backend): make --keep-empty the default
      rebase (interactive-backend): fix handling of commits that become empty
      t3406: simplify an already simple test
      rebase, sequencer: remove the broken GIT_QUIET handling
      rebase: make sure to pass along the quiet flag to the sequencer
      rebase: fix handling of restrict_revision
      t3432: make these tests work with either am or merge backends
      rebase: allow more types of rebases to fast-forward
      git-rebase.txt: add more details about behavioral differences of backends
      rebase: move incompatibility checks between backend options a bit earlier
      rebase: add an --am option
      git-prompt: change the prompt for interactive-based rebases
      rebase: drop '-i' from the reflog for interactive-based rebases
      rebase tests: mark tests specific to the am-backend with --am
      rebase tests: repeat some tests using the merge backend instead of am
      rebase: make the backend configurable via config setting
      rebase: change the default backend from "am" to "merge"
      rebase: rename the two primary rebase backends
      check-ignore: fix documentation and implementation to match
      t3433: new rebase testcase documenting a stat-dirty-like failure
      merge-recursive: fix the refresh logic in update_file_flags

Emily Shaffer (8):
      unpack-trees: watch for out-of-range index position
      fetch: emphasize failure during submodule fetch
      MyFirstContribution: add avenues for getting help
      submodule: add newline on invalid submodule error
      MyFirstContribution: rephrase contact info
      prefix_path: show gitdir when arg is outside repo
      submodule--helper: use C99 named initializer
      clone: pass --single-branch during --recurse-submodules

Eric Sunshine (6):
      t3400: make test clean up after itself
      rebase: refuse to switch to branch already checked out elsewhere
      worktree: drop unused code from get_main_worktree()
      worktree: improve find_worktree() documentation
      worktree: add utility to find worktree by pathname
      worktree: don't allow "add" validation to be fooled by suffix matching

Eyal Soha (3):
      color.c: refactor color_output arguments
      color.c: support bright aixterm colors
      color.c: alias RGB colors 8-15 to aixterm colors

Hans Jerry Illikainen (2):
      editorconfig: indent text files with tabs
      gpg-interface: add minTrustLevel as a configuration option

Hariom Verma (4):
      get_main_worktree(): allow it to be called in the Git directory
      t5509: use a bare repository for test push target
      receive.denyCurrentBranch: respect all worktrees
      t2402: test worktree path when called in .git directory

Heba Waly (5):
      commit: honor advice.statusHints when rejecting an empty commit
      doc/gitcore-tutorial: fix prose to match example command
      add: use advise function to display hints
      git: update documentation for --git-dir
      add: change advice config variables used by the add API

Jacques Bodin-Hullin (1):
      parse-options: lose an unnecessary space in an error message

Jeff King (68):
      builtin/pack-objects: report reused packfile objects
      packfile: expose get_delta_base()
      restore: invalidate cache-tree when removing entries with --staged
      transport: don't flush when disconnecting stateless-rpc helper
      dir: restructure in a way to avoid passing around a struct dirent
      dir: point treat_leading_path() warning to the right place
      Makefile: use compat regex with SANITIZE=address
      t4018: drop "debugging" cat from hunk-header tests
      t7800: don't rely on reuse_worktree_file()
      ewah/bitmap: introduce bitmap_word_alloc()
      pack-bitmap: introduce bitmap_walk_contains()
      pack-bitmap: uninteresting oid can be outside bitmapped packfile
      pack-bitmap: simplify bitmap_has_oid_in_uninteresting()
      csum-file: introduce hashfile_total()
      pack-objects: introduce pack.allowPackReuse
      builtin/pack-objects: introduce obj_is_packed()
      pack-objects: improve partial packfile reuse
      pack-objects: add checks for duplicate objects
      pack-bitmap: don't rely on bitmap_git->reuse_objects
      sparse-checkout: fix documentation typo for core.sparseCheckoutCone
      verify_filename(): handle backslashes in "wildcards are pathspecs" rule
      merge-recursive: silence -Wxor-used-as-pow warning
      t1400: avoid "test" string comparisons
      t1506: drop space after redirection operator
      avoid computing zero offsets from NULL pointer
      xdiff: avoid computing non-zero offset from NULL pointer
      obstack: avoid computing offsets from NULL pointer
      doc: drop "explicitly given" from push.default description
      sha1-name: mark get_oid() error messages for translation
      normalize_path_copy(): document "dst" size expectations
      walker_fetch(): avoid raw array length computation
      traverse_trees(): use stack array for name entries
      diff: move diff.wsErrorHighlight to "basic" config
      tree-walk.c: break circular dependency with unpack-trees
      index-pack: downgrade twice-resolved REF_DELTA to die()
      mailinfo: treat header values as C strings
      mailinfo: simplify parsing of header values
      mailinfo: be more liberal with header whitespace
      mailinfo: factor out some repeated header handling
      pack-bitmap: factor out type iterator initialization
      pack-bitmap: fix leak of haves/wants object lists
      rev-list: fallback to non-bitmap traversal when filtering
      pack-bitmap: refuse to do a bitmap traversal with pathspecs
      rev-list: factor out bitmap-optimized routines
      rev-list: make --count work with --objects
      rev-list: allow bitmaps when counting objects
      t5310: factor out bitmap traversal comparison
      rev-list: allow commit-only bitmap traversals
      pack-bitmap: basic noop bitmap filter infrastructure
      rev-list: use bitmap filters for traversal
      bitmap: add bitmap_unset() function
      pack-bitmap: implement BLOB_NONE filtering
      pack-bitmap: implement BLOB_LIMIT filtering
      pack-objects: support filters with bitmaps
      doc: move credential helper info into gitcredentials(7)
      doc/config/push: use longer "--" line for preformatted example
      doc-diff: use single-colon rule in rendering Makefile
      run-command.h: fix mis-indented struct member
      nth_packed_object_oid(): use customary integer return
      pack-objects: read delta base oid into object_id struct
      pack-objects: convert oe_set_delta_ext() to use object_id
      pack-objects: use object_id struct in pack-reuse code
      pack-bitmap: use object_id when loading on-disk bitmaps
      pack-check: convert "internal error" die to a BUG()
      pack-check: push oid lookup into loop
      packed_object_info(): use object_id for returning delta base
      packed_object_info(): use object_id internally for delta base
      packfile: drop nth_packed_object_sha1()

Johan Herland (2):
      t3305: check notes fanout more carefully and robustly
      notes.c: fix off-by-one error when decreasing notes fanout

Johannes Berg (1):
      pack-format: correct multi-pack-index description

Johannes Schindelin (33):
      built-in add -p: prepare for patch modes other than "stage"
      built-in add -p: implement the "stash" and "reset" patch modes
      legacy stash -p: respect the add.interactive.usebuiltin setting
      built-in stash: use the built-in `git add -p` if so configured
      built-in add -p: implement the "checkout" patch modes
      built-in add -p: implement the "worktree" patch modes
      commit --interactive: make it work with the built-in `add -i`
      t3701: adjust difffilter test
      built-in add -p: support interactive.diffFilter
      built-in add -p: handle diff.algorithm
      terminal: make the code of disable_echo() reusable
      terminal: accommodate Git for Windows' default terminal
      terminal: add a new function to read a single keystroke
      built-in add -p: respect the `interactive.singlekey` config setting
      built-in add -p: handle Escape sequences in interactive.singlekey mode
      built-in add -p: handle Escape sequences more efficiently
      ci: include the built-in `git add -i` in the `linux-gcc` job
      msvc: accommodate for vcpkg's upgrade to OpenSSL v1.1.x
      built-in add -i: do not try to `patch`/`diff` an empty list of files
      built-in add -i: accept open-ended ranges again
      parse_insn_line(): improve error message when parsing failed
      rebase -i: re-fix short SHA-1 collision
      rebase -i: also avoid SHA-1 collisions with missingCommitsCheck
      ci: ignore rubygems warning in the "Documentation" job
      convert: fix typo
      tests: fix --write-junit-xml with subshells
      t9001, t9116: avoid pipes
      t5580: test cloning without file://, test fetching via UNC paths
      mingw: add a helper function to attach GDB to the current process
      t/lib-httpd: avoid using macOS' sed
      ci: prevent `perforce` from being quarantined
      Azure Pipeline: switch to the latest agent pools
      t5537: adjust test_oid label

Johannes Sixt (1):
      t3504: do check for conflict marker after failed cherry-pick

Jonathan Nieder (9):
      sha1-file: document how to use pretend_object_file
      fetch test: avoid use of "VAR= cmd" with a shell function
      t/check-non-portable-shell: detect "FOO= shell_func", too
      fetch test: mark test of "skipping" haves as v0-only
      fetch test: use more robust test for filtered objects
      config doc: protocol.version is not experimental
      test: request GIT_TEST_PROTOCOL_VERSION=0 when appropriate
      protocol test: let protocol.version override GIT_TEST_PROTOCOL_VERSION
      fetch: default to protocol version 2

Jonathan Tan (4):
      sha1-file: remove OBJECT_INFO_SKIP_CACHED
      t5616: make robust to delta base change
      connected: verify promisor-ness of partial clone
      fetch: forgo full connectivity check if --filter

Junio C Hamano (15):
      The first batch post 2.25 cycle
      merge-recursive: use subtraction to flip stage
      .mailmap: fix GGG authoship screwup
      The second batch
      C: use skip_prefix() to avoid hardcoded string length
      The third batch for 2.26
      The fourth batch for 2.26
      The fifth batch for 2.26
      Git 2.25.1
      The sixth batch for 2.26
      rev-list --count: comment on the use of count_right++
      The seventh batch for 2.26
      Revert "gpg-interface: prefer check_signature() for GPG verification"
      The eighth batch for 2.26
      Git 2.26-rc0

Kevin Willford (4):
      fsmonitor: change last update timestamp on the index_state to opaque token
      fsmonitor: handle version 2 of the hooks that will use opaque token
      fsmonitor: add fsmonitor hook scripts for version 2
      fsmonitor: update documentation for hook version and watchman hooks

Kyle Meyer (2):
      submodule add: show 'add --dry-run' stderr when aborting
      submodule foreach: replace $path with $sm_path in example

Lucius Hu (1):
      templates: fix deprecated type option `--bool`

Luke Diamand (7):
      git-p4: make closeStreams() idempotent
      git-p4: add P4CommandException to report errors talking to Perforce
      git-p4: disable some pylint warnings, to get pylint output to something manageable
      git-p4: create helper function importRevisions()
      git-p4: cleanup better on error exit
      git-p4: check for access to remote host earlier
      git-p4: avoid leak of file handle when cloning

Martin Ågren (6):
      git-filter-branch.txt: wrap "maths" notation in backticks
      name-rev: rewrite create_or_update_name()
      diff-options.txt: avoid "regex" overload in example
      t4117: check for files using `test_path_is_file`
      t9810: drop debug `cat` call
      t: drop debug `cat` calls

Masaya Suzuki (1):
      doc: describe Git bundle format

Matheus Tavares (21):
      grep: fix race conditions on userdiff calls
      grep: fix race conditions at grep_submodule()
      grep: fix racy calls in grep_objects()
      replace-object: make replace operations thread-safe
      object-store: allow threaded access to object reading
      grep: replace grep_read_mutex by internal obj read lock
      submodule-config: add skip_if_read option to repo_read_gitmodules()
      grep: allow submodule functions to run in parallel
      grep: protect packed_git [re-]initialization
      grep: re-enable threads in non-worktree case
      grep: move driver pre-load out of critical section
      grep: use no. of cores as the default no. of threads
      doc: sparse-checkout: mention --cone option
      completion: add support for sparse-checkout
      diff: make diff_populate_filespec() honor its repo argument
      cache-tree: use given repo's hash_algo at verify_one()
      pack-check: use given repo's hash_algo at verify_packfile()
      streaming: allow open_istream() to handle any repo
      sha1-file: pass git_hash_algo to write_object_file_prepare()
      sha1-file: pass git_hash_algo to hash_object_file()
      sha1-file: allow check_object_signature() to handle any repo

Matthew Rogers (10):
      config: fix typo in variable name
      t1300: fix over-indented HERE-DOCs
      t1300: create custom config file without special characters
      config: make scope_name non-static and rename it
      config: split repo scope to local and worktree
      config: clarify meaning of command line scoping
      config: preserve scope in do_git_config_sequence
      config: teach git_config_source to remember its scope
      submodule-config: add subomdule config scope
      config: add '--show-scope' to print the scope of a config value

Miriam Rubio (3):
      bisect--helper: convert `vocab_*` char pointers to char arrays
      bisect: use the standard 'if (!var)' way to check for 0
      bisect: add enum to represent bisect returning codes

Peter Kaestle (3):
      t7400: add a testcase for submodule status on empty dirs
      submodule: fix status of initialized but not cloned submodules
      t7400: testcase for submodule status on unregistered inner git repos

Philippe Blain (5):
      t7410: rename to t2405-worktree-submodule.sh
      t2405: use git -C and test_commit -C instead of subshells
      t2405: clarify test descriptions and simplify test
      submodule.c: use get_git_dir() instead of get_git_common_dir()
      grep: ignore --recurse-submodules if --no-index is given

Pranit Bauva (7):
      bisect--helper: return error codes from `cmd_bisect__helper()`
      bisect: libify `exit_if_skipped_commits` to `error_if_skipped*` and its dependents
      bisect: libify `bisect_checkout`
      bisect: libify `check_merge_bases` and its dependents
      bisect: libify `check_good_are_ancestors_of_bad` and its dependents
      bisect: libify `handle_bad_merge_base` and its dependents
      bisect: libify `bisect_next_all`

Ralf Thielow (1):
      submodule.c: mark more strings for translation

René Scharfe (20):
      name-rev: remove unused typedef
      name-rev: respect const qualifier
      name-rev: don't leak path copy in name_ref()
      name-rev: don't _peek() in create_or_update_name()
      name-rev: put struct rev_name into commit slab
      name-rev: factor out get_parent_name()
      name-rev: pre-size buffer in get_parent_name()
      name-rev: generate name strings only if they are better
      name-rev: release unused name strings
      name-rev: sort tip names before applying
      strbuf: add and use strbuf_insertstr()
      mailinfo: don't insert header prefix for handle_content_type()
      parse-options: use COPY_ARRAY in parse_options_concat()
      parse-options: factor out parse_options_count()
      parse-options: const parse_options_concat() parameters
      parse-options: simplify parse_options_dup()
      quote: use isalnum() to check for alphanumeric characters
      use strpbrk(3) to search for characters from a given set
      blame: provide type of fingerprints pointer
      commit-graph: use progress title directly

SZEDER Gábor (6):
      t9902-completion: add tests for the __git_find_on_cmdline() helper
      completion: clean up the __git_find_on_cmdline() helper function
      completion: return the index of found word from __git_find_on_cmdline()
      completion: simplify completing 'git worktree' subcommands and options
      completion: list existing working trees for 'git worktree' subcommands
      completion: list paths and refs for 'git worktree add'

Shourya Shukla (2):
      t6025: modernize style
      t6025: use helpers to replace test -f <path>

Tanushree Tumane (2):
      bisect--helper: change `retval` to `res`
      bisect--helper: introduce new `decide_next()` function

Taylor Blau (5):
      t5318: don't pass non-object directory to '--object-dir'
      commit-graph.h: store an odb in 'struct write_commit_graph_context'
      commit-graph.h: store object directory in 'struct commit_graph'
      commit-graph.c: remove path normalization, comparison
      commit-graph.h: use odb in 'load_commit_graph_one_fd_st'

brian m. carlson (53):
      run-command: avoid undefined behavior in exists_in_PATH
      t4054: make hash-size independent
      t4066: compute index line in diffs
      t4134: compute appropriate length constant
      t4200: make hash size independent
      t4202: abstract away SHA-1-specific constants
      t4204: make hash size independent
      t4300: abstract away SHA-1-specific constants
      t5318: update for SHA-256
      t5319: change invalid offset for SHA-256 compatibility
      t5319: make test work with SHA-256
      t5324: make hash size independent
      t5504: make hash algorithm independent
      t5510: make hash size independent
      t5512: abstract away SHA-1-specific constants
      t5530: compute results based on object length
      t5537: make hash size independent
      t5540: make hash size independent
      t5562: use $ZERO_OID
      t5601: switch into repository to hash object
      t5604: make hash independent
      docs: use "currently" for the present time
      doc: move author and committer information to git-commit(1)
      docs: expand on possible and recommended user config options
      doc: provide guidance on user.name format
      doc: dissuade users from trying to ignore tracked files
      docs: mention when increasing http.postBuffer is valuable
      t/lib-pack: support SHA-256
      t3206: make hash size independent
      t3308: make test work with SHA-256
      t3309: make test work with SHA-256
      t3310: make test work with SHA-256
      t3311: make test work with SHA-256
      t4013: make test hash independent
      t4211: move SHA-1-specific test cases into a directory
      t4211: add test cases for SHA-256
      t4060: make test work with SHA-256
      t5302: make hash size independent
      t5309: make test hash independent
      t5313: make test hash independent
      t5321: make test hash independent
      t5515: make test hash independent
      t5318: update for SHA-256
      t5607: make hash size independent
      t5703: make test work with SHA-256
      t6000: abstract away SHA-1-specific constants
      t6006: make hash size independent
      t6024: update for SHA-256
      mailmap: add an additional email address for brian m. carlson
      t1300: add test for urlmatch with multiple wildcards
      t0300: add tests for some additional cases
      credential: use the last matching username in the config
      credential: allow wildcard patterns when matching config


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.24.0
@ 2019-11-04  5:36  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2019-11-04  5:36 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

The latest feature release Git v2.24.0 is now available at the
usual places.  It is comprised of 544 non-merge commits since
v2.23.0, contributed by 78 people, 21 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.24.0'
tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.23.0 are as follows.
Welcome to the Git development community!

  Alexandr Miloslavskiy, Ali Utku Selen, Ben Milman, Cameron
  Steffen, CB Bailey, Christopher Diaz Riveros, Garima Singh,
  Hervé Beraud, Jakob Jarmar, kdnakt, Kunal Tyagi, Maxim
  Belsky, Max Rothman, Norman Rasmussen, Paul Wise, Pedro Sousa,
  Philip.McGraw, Pratyush Yadav, Thomas Klaeger, William Baker,
  and YanKe.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Roben, Ævar Arnfjörð Bjarmason, Alessandro Menti,
  Alexander Shopov, Alex Henrie, Andrey Mazo, Beat Bolli, Ben
  Wijen, Bert Wesarg, Birger Skogeng Pedersen, brian m. carlson,
  Carlo Marcelo Arenas Belón, Christian Couder, Clément Chigot,
  Corentin BOMPARD, David Turner, Denton Liu, Derrick Stolee,
  Elijah Newren, Emily Shaffer, Eric Wong, Gabriele Mazzotta,
  Jean-Noël Avila, Jeff Hostetler, Jeff King, Jiang Xin, Johannes
  Schindelin, Johannes Sixt, Jonathan Tan, Jon Simons, Jordi Mas,
  Josh Steadmon, Junio C Hamano, Martin Ågren, Masaya Suzuki,
  Matheus Tavares, Matthew DeVore, Matthias Rüster, Michael
  J Gruber, Mike Hommey, Mischa POSLAWSKY, Paul Mackerras,
  Peter Krefting, Phillip Wood, René Scharfe, Robert Luberda,
  Stephen Boyd, Stephen P. Smith, Sun Chao, SZEDER Gábor,
  Tanay Abhra, Taylor Blau, Thomas Gummerer, Tobias Klauser,
  Torsten Bögershausen, Trần Ngọc Quân, and Varun Naik.

----------------------------------------------------------------

Git 2.24 Release Notes
======================

Updates since v2.23
-------------------

Backward compatibility note

 * "filter-branch" is showing its age and alternatives are available.
   From this release, we started to discourage its use and hint
   people about filter-repo.

UI, Workflows & Features

 * We now have an active interim maintainer for the Git-Gui part of
   the system.  Praise and thank Pratyush Yadav for volunteering.

 * The command line parser learned "--end-of-options" notation; the
   standard convention for scripters to have hardcoded set of options
   first on the command line, and force the command to treat end-user
   input as non-options, has been to use "--" as the delimiter, but
   that would not work for commands that use "--" as a delimiter
   between revs and pathspec.

 * A mechanism to affect the default setting for a (related) group of
   configuration variables is introduced.

 * "git fetch" learned "--set-upstream" option to help those who first
   clone from their private fork they intend to push to, add the true
   upstream via "git remote add" and then "git fetch" from it.

 * Device-tree files learned their own userdiff patterns.
   (merge 3c81760bc6 sb/userdiff-dts later to maint).

 * "git rebase --rebase-merges" learned to drive different merge
   strategies and pass strategy specific options to them.

 * A new "pre-merge-commit" hook has been introduced.

 * Command line completion updates for "git -c var.name=val" have been
   added.

 * The lazy clone machinery has been taught that there can be more
   than one promisor remote and consult them in order when downloading
   missing objects on demand.

 * The list-objects-filter API (used to create a sparse/lazy clone)
   learned to take a combined filter specification.

 * The documentation and tests for "git format-patch" have been
   cleaned up.

 * On Windows, the root level of UNC share is now allowed to be used
   just like any other directory.

 * The command line completion support (in contrib/) learned about the
   "--skip" option of "git revert" and "git cherry-pick".

 * "git rebase --keep-base <upstream>" tries to find the original base
   of the topic being rebased and rebase on top of that same base,
   which is useful when running the "git rebase -i" (and its limited
   variant "git rebase -x").

   The command also has learned to fast-forward in more cases where it
   can instead of replaying to recreate identical commits.

 * A configuration variable tells "git fetch" to write the commit
   graph after finishing.

 * "git add -i" has been taught to show the total number of hunks and
   the hunks that has been processed so far when showing prompts.

 * "git fetch --jobs=<n>" allowed <n> parallel jobs when fetching
   submodules, but this did not apply to "git fetch --multiple" that
   fetches from multiple remote repositories.  It now does.

 * The installation instruction for zsh completion script (in
   contrib/) has been a bit improved.


Performance, Internal Implementation, Development Support etc.

 * The code to write commit-graph over given commit object names has
   been made a bit more robust.

 * The first line of verbose output from each test piece now carries
   the test name and number to help scanning with eyeballs.

 * Further clean-up of the initialization code.

 * xmalloc() used to have a mechanism to ditch memory and address
   space resources as the last resort upon seeing an allocation
   failure from the underlying malloc(), which made the code complex
   and thread-unsafe with dubious benefit, as major memory resource
   users already do limit their uses with various other mechanisms.
   It has been simplified away.

 * Unnecessary full-tree diff in "git log -L" machinery has been
   optimized away.

 * The http transport lacked some optimization the native transports
   learned to avoid unnecessary ref advertisement, which has been
   corrected.

 * Preparation for SHA-256 upgrade continues in the test department.
   (merge 0c37c41d13 bc/hash-independent-tests-part-5 later to maint).

 * The memory ownership model of the "git fast-import" got
   straightened out.

 * Output from trace2 subsystem is formatted more prettily now.

 * The internal code originally invented for ".gitignore" processing
   got reshuffled and renamed to make it less tied to "excluding" and
   stress more that it is about "matching", as it has been reused for
   things like sparse checkout specification that want to check if a
   path is "included".

 * "git stash" learned to write refreshed index back to disk.

 * Coccinelle checks are done on more source files than before now.

 * The cache-tree code has been taught to be less aggressive in
   attempting to see if a tree object it computed already exists in
   the repository.

 * The code to parse and use the commit-graph file has been made more
   robust against corrupted input.

 * The hg-to-git script (in contrib/) has been updated to work with
   Python 3.

 * Update the way build artifacts in t/helper/ directory are ignored.

 * Preparation for SHA-256 upgrade continues.

 * "git log --graph" for an octopus merge is sometimes colored
   incorrectly, which is demonstrated and documented but not yet
   fixed.

 * The trace2 output, when sending them to files in a designated
   directory, can populate the directory with too many files; a
   mechanism is introduced to set the maximum number of files and
   discard further logs when the maximum is reached.

 * We have adopted a Code-of-conduct document.
   (merge 3f9ef874a7 jk/coc later to maint).


Fixes since v2.23
-----------------

 * "git grep --recurse-submodules" that looks at the working tree
   files looked at the contents in the index in submodules, instead of
   files in the working tree.
   (merge 6a289d45c0 mt/grep-submodules-working-tree later to maint).

 * Codepaths to walk tree objects have been audited for integer
   overflows and hardened.
   (merge 5aa02f9868 jk/tree-walk-overflow later to maint).

 * "git pack-refs" can lose refs that are created while running, which
   is getting corrected.
   (merge a613d4f817 sc/pack-refs-deletion-racefix later to maint).

 * "git checkout" and "git restore" to re-populate the index from a
   tree-ish (typically HEAD) did not work correctly for a path that
   was removed and then added again with the intent-to-add bit, when
   the corresponding working tree file was empty.  This has been
   corrected.

 * Compilation fix.
   (merge 70597e8386 rs/nedalloc-fixlets later to maint).

 * "git gui" learned to call the clean-up procedure before exiting.
   (merge 0d88f3d2c5 py/git-gui-do-quit later to maint).

 * We promoted the "indent heuristics" that decides where to split
   diff hunks from experimental to the default a few years ago, but
   some stale documentation still marked it as experimental, which has
   been corrected.
   (merge 64e5e1fba1 sg/diff-indent-heuristic-non-experimental later to maint).

 * Fix a mismerge that happened in 2.22 timeframe.
   (merge acb7da05ac en/checkout-mismerge-fix later to maint).

 * "git archive" recorded incorrect length in extended pax header in
   some corner cases, which has been corrected.
   (merge 71d41ff651 rs/pax-extended-header-length-fix later to maint).

 * On-demand object fetching in lazy clone incorrectly tried to fetch
   commits from submodule projects, while still working in the
   superproject, which has been corrected.
   (merge a63694f523 jt/diff-lazy-fetch-submodule-fix later to maint).

 * Prepare get_short_oid() codepath to be thread-safe.
   (merge 7cfcb16b0e rs/sort-oid-array-thread-safe later to maint).

 * "for-each-ref" and friends that show refs did not protect themselves
   against ancient tags that did not record tagger names when asked to
   show "%(taggername)", which have been corrected.
   (merge 8b3f33ef11 mp/for-each-ref-missing-name-or-email later to maint).

 * The "git am" based backend of "git rebase" ignored the result of
   updating ".gitattributes" done in one step when replaying
   subsequent steps.
   (merge 2c65d90f75 bc/reread-attributes-during-rebase later to maint).

 * Tell cURL library to use the same malloc() implementation, with the
   xmalloc() wrapper, as the rest of the system, for consistency.
   (merge 93b980e58f cb/curl-use-xmalloc later to maint).

 * Build fix to adjust .gitignore to unignore a path that we started to track.
   (merge aac6ff7b5b js/visual-studio later to maint).

 * A few implementation fixes in the notes API.
   (merge 60fe477a0b mh/notes-duplicate-entries later to maint).

 * Fix an earlier regression to "git push --all" which should have
   been forbidden when the target remote repository is set to be a
   mirror.
   (merge 8e4c8af058 tg/push-all-in-mirror-forbidden later to maint).

 * Fix an earlier regression in the test suite, which mistakenly
   stopped running HTTPD tests.
   (merge 3960290675 sg/git-test-boolean later to maint).

 * "git rebase --autostash <upstream> <branch>", when <branch> is
   different from the current branch, incorrectly moved the tip of the
   current branch, which has been corrected.
   (merge bf1e28e0ad bw/rebase-autostash-keep-current-branch later to maint).

 * Update support for Asciidoctor documentation toolchain.
   (merge 83b0b8953e ma/asciidoctor-refmiscinfo later to maint).

 * Start using DocBook 5 (instead of DocBook 4.5) as Asciidoctor 2.0
   no longer works with the older one.
   (merge f6461b82b9 bc/doc-use-docbook-5 later to maint).

 * The markup used in user-manual has been updated to work better with
   asciidoctor.
   (merge c4d2f6143a ma/user-manual-markup-update later to maint).

 * Make sure the grep machinery does not abort when seeing a payload
   that is not UTF-8 even when JIT is not in use with PCRE1.
   (merge ad7c543e3b cb/skip-utf8-check-with-pcre1 later to maint).

 * The name of the blob object that stores the filter specification
   for sparse cloning/fetching was interpreted in a wrong place in the
   code, causing Git to abort.

 * "git log --decorate-refs-exclude=<pattern>" was incorrectly
   overruled when the "--simplify-by-decoration" option is used, which
   has been corrected.
   (merge 0cc7380d88 rs/simplify-by-deco-with-deco-refs-exclude later to maint).

 * The "upload-pack" (the counterpart of "git fetch") needs to disable
   commit-graph when responding to a shallow clone/fetch request, but
   the way this was done made Git panic, which has been corrected.

 * The object traversal machinery has been optimized not to load tree
   objects when we are only interested in commit history.
   (merge 72ed80c784 jk/list-objects-optim-wo-trees later to maint).

 * The object name parser for "Nth parent" syntax has been made more
   robust against integer overflows.
   (merge 59fa5f5a25 rs/nth-parent-parse later to maint).

 * The code used in following tags in "git fetch" has been optimized.
   (merge b7e2d8bca5 ms/fetch-follow-tag-optim later to maint).

 * Regression fix for progress output.
   (merge 2bb74b53a4 sg/progress-fix later to maint).

 * A bug in merge-recursive code that triggers when a branch with a
   symbolic link is merged with a branch that replaces it with a
   directory has been fixed.
   (merge 83e3ad3b12 jt/merge-recursive-symlink-is-not-a-dir-in-way later to maint).

 * The rename detection logic sorts a list of rename source candidates
   by similarity to pick the best candidate, which means that a tie
   between sources with the same similarity is broken by the original
   location in the original candidate list (which is sorted by path).
   Force the sorting by similarity done with a stable sort, which is
   not promised by system supplied qsort(3), to ensure consistent
   results across platforms.
   (merge 2049b8dc65 js/diff-rename-force-stable-sort later to maint).

 * The code to skip "UTF" and "UTF-" prefix, when computing an advice
   message, did not work correctly when the prefix was "UTF", which
   has been fixed.
   (merge b181676ce9 rs/convert-fix-utf-without-dash later to maint).

 * The author names taken from SVN repositories may have extra leading
   or trailing whitespaces, which are now munged away.
   (merge 4ddd4bddb1 tk/git-svn-trim-author-name later to maint).

 * "git rebase -i" showed a wrong HEAD while "reword" open the editor.
   (merge b0a3186140 pw/rebase-i-show-HEAD-to-reword later to maint).

 * A few simplification and bugfixes to PCRE interface.
   (merge c581e4a749 ab/pcre-jit-fixes later to maint).

 * PCRE fixes.
   (merge ff61681b46 cb/pcre1-cleanup later to maint).

 * "git range-diff" segfaulted when diff.noprefix configuration was
   used, as it blindly expected the patch it internally generates to
   have the standard a/ and b/ prefixes.  The command now forces the
   internal patch to be built without any prefix, not to be affected
   by any end-user configuration.
   (merge 937b76ed49 js/range-diff-noprefix later to maint).

 * "git stash apply" in a subdirectory of a secondary worktree failed
   to access the worktree correctly, which has been corrected.
   (merge dfd557c978 js/stash-apply-in-secondary-worktree later to maint).

 * The merge-recursive machinery is one of the most complex parts of
   the system that accumulated cruft over time.  This large series
   cleans up the implementation quite a bit.
   (merge b657047719 en/merge-recursive-cleanup later to maint).

 * Pretty-printed command line formatter (used in e.g. reporting the
   command being run by the tracing API) had a bug that lost an
   argument that is an empty string, which has been corrected.
   (merge ce2d7ed2fd gs/sq-quote-buf-pretty later to maint).

 * "git range-diff" failed to handle mode-only change, which has been
   corrected.
   (merge 2b6a9b13ca tg/range-diff-output-update later to maint).

 * Dev support update.
   (merge 4f3c1dc5d6 dl/allow-running-cocci-verbosely later to maint).

 * "git format-patch -o <outdir>" did an equivalent of "mkdir <outdir>"
   not "mkdir -p <outdir>", which was corrected.

 * "git stash save" lost local changes to submodules, which has been
   corrected.
   (merge 556895d0c8 jj/stash-reset-only-toplevel later to maint).

 * The atomic push over smart HTTP transport did not work, which has
   been corrected.
   (merge 6f1194246a bc/smart-http-atomic-push later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge d1387d3895 en/fast-import-merge-doc later to maint).
   (merge 1c24a54ea4 bm/repository-layout-typofix later to maint).
   (merge 415b770b88 ds/midx-expire-repack later to maint).
   (merge 19800bdc3f nd/diff-parseopt later to maint).
   (merge 58166c2e9d tg/t0021-racefix later to maint).
   (merge 7027f508c7 dl/compat-cleanup later to maint).
   (merge e770fbfeff jc/test-cleanup later to maint).
   (merge 1fd881d404 rs/trace2-dst-warning later to maint).
   (merge 7e92756751 mh/http-urlmatch-cleanup later to maint).
   (merge 9784f97321 mh/release-commit-memory-fix later to maint).
   (merge 60d198d022 tb/banned-vsprintf-namefix later to maint).
   (merge 80e3658647 rs/help-unknown-ref-does-not-return later to maint).
   (merge 0a8bc7068f dt/remote-helper-doc-re-lock-option later to maint).
   (merge 27fd1e4ea7 en/merge-options-ff-and-friends later to maint).
   (merge 502c386ff9 sg/clean-nested-repo-with-ignored later to maint).
   (merge 26e3d1cbea am/mailmap-andrey-mazo later to maint).
   (merge 47b27c96fa ss/get-time-cleanup later to maint).
   (merge dd2e50a84e jk/commit-graph-cleanup later to maint).
   (merge 4fd39c76e6 cs/pretty-formats-doc-typofix later to maint).
   (merge 40e747e89d dl/submodule-set-branch later to maint).
   (merge 689a146c91 rs/commit-graph-use-list-count later to maint).
   (merge 0eb7c37a8a js/doc-patch-text later to maint).
   (merge 4b3aa170d1 rs/nth-switch-code-simplification later to maint).
   (merge 0d4304c124 ah/doc-submodule-ignore-submodules later to maint).
   (merge af78249463 cc/svn-fe-py-shebang later to maint).
   (merge 7bd97d6dff rs/alias-use-copy-array later to maint).
   (merge c46ebc2496 sg/travis-help-debug later to maint).
   (merge 24c681794f ps/my-first-contribution-alphasort later to maint).
   (merge 75b2c15435 cb/do-not-use-test-cmp-with-a later to maint).
   (merge cda0d497e3 bw/submodule-helper-usage-fix later to maint).
   (merge fe0ed5d5e9 am/visual-studio-config-fix later to maint).
   (merge 2e09c01232 sg/name-rev-cutoff-underflow-fix later to maint).
   (merge ddb3c856f3 as/shallow-slab-use-fix later to maint).
   (merge 71f4960b91 js/mingw-spawn-with-spaces-in-path later to maint).
   (merge 53d687bf5f ah/cleanups later to maint).
   (merge f537485fa5 rs/test-remove-useless-debugging-cat later to maint).
   (merge 11a3d3aadd dl/rev-list-doc-cleanup later to maint).
   (merge d928a8388a am/t0028-utf16-tests later to maint).
   (merge b05b40930e dl/t0000-skip-test-test later to maint).
   (merge 03d3b1297c js/xdiffi-comment-updates later to maint).
   (merge 57d8f4b4c7 js/doc-stash-save later to maint).
   (merge 8c1cfd58e3 ta/t1308-typofix later to maint).
   (merge fa364ad790 bb/utf8-wcwidth-cleanup later to maint).
   (merge 68b69211b2 bb/compat-util-comment-fix later to maint).
   (merge 5cc6a4be11 rs/http-push-simplify later to maint).
   (merge a81e42d235 rs/column-use-utf8-strnwidth later to maint).
   (merge 062a309d36 rs/remote-curl-use-argv-array later to maint).
   (merge 3b3c79f6c9 nr/diff-highlight-indent-fix later to maint).
   (merge 3444ec2eb2 wb/fsmonitor-bitmap-fix later to maint).
   (merge 10da030ab7 cb/pcre2-chartables-leakfix later to maint).
   (merge 60e6569a12 js/mingw-needs-hiding-fix later to maint).
   (merge 52bd3e4657 rl/gitweb-blame-prev-fix later to maint).

----------------------------------------------------------------

Changes since v2.23.0 are as follows:

Adam Roben (1):
      mingw: fix launching of externals from Unicode paths

Alessandro Menti (2):
      l10n: it.po: update the Italian translation for Git 2.24.0
      l10n: it.po: update the Italian translation for Git 2.24.0 round #2

Alex Henrie (4):
      doc: fix reference to --ignore-submodules
      commit-graph: remove a duplicate assignment
      diffcore-break: use a goto instead of a redundant if statement
      wrapper: use a loop instead of repetitive statements

Alexander Shopov (2):
      l10n: bg.po: Updated Bulgarian translation (4693)
      l10n: bg.po: Updated Bulgarian translation (4694)

Alexandr Miloslavskiy (4):
      contrib/buildsystems: fix Visual Studio Debug configuration
      t0028: fix test for UTF-16-LE-BOM
      t0028: add more tests
      t0061: fix test for argv[0] with spaces (MINGW only)

Ali Utku Selen (1):
      shallow.c: don't free unallocated slabs

Andrey Mazo (1):
      .mailmap: update email address of Andrey Mazo

Beat Bolli (3):
      grep: under --debug, show whether PCRE JIT is enabled
      utf8: use ARRAY_SIZE() in git_wcwidth()
      git-compat-util: fix documentation syntax

Ben Milman (1):
      repository-layout.txt: correct pluralization of 'object'

Ben Wijen (2):
      builtin/rebase.c: make sure the active branch isn't moved when autostashing
      builtin/rebase.c: Remove pointless message

Bert Wesarg (7):
      git-gui: convert new/amend commit radiobutton to checkbutton
      git-gui: add horizontal scrollbar to commit buffer
      builtin/submodule--helper: fix usage string for 'update-clone'
      git-gui: use existing interface to query a path's attribute
      git-gui: support for diff3 conflict style
      format-patch: create leading components of output directory
      t4014: make output-directory tests self-contained

Birger Skogeng Pedersen (2):
      git-gui: add hotkeys to set widget focus
      git-gui: add hotkey to toggle "Amend Last Commit"

CB Bailey (1):
      t4038: Remove non-portable '-a' option passed to test_cmp

Cameron Steffen (1):
      doc: minor formatting fix

Carlo Marcelo Arenas Belón (7):
      http: use xmalloc with cURL
      grep: make sure NO_LIBPCRE1_JIT disable JIT in PCRE1
      grep: refactor and simplify PCRE1 support
      grep: skip UTF8 checks explicitly
      grep: make PCRE1 aware of custom allocator
      grep: make PCRE2 aware of custom allocator
      grep: avoid leak of chartables in PCRE2

Christian Couder (15):
      t0410: remove pipes after git commands
      fetch-object: make functions return an error code
      Add initial support for many promisor remotes
      promisor-remote: implement promisor_remote_get_direct()
      promisor-remote: add promisor_remote_reinit()
      promisor-remote: use repository_format_partial_clone
      Use promisor_remote_get_direct() and has_promisor_remote()
      promisor-remote: parse remote.*.partialclonefilter
      builtin/fetch: remove unique promisor remote limitation
      t0410: test fetching from many promisor remotes
      partial-clone: add multiple remotes in the doc
      remote: add promisor and partial clone config to the doc
      Remove fetch-object.{c,h} in favor of promisor-remote.{c,h}
      Move repository_format_partial_clone to promisor-remote.c
      Move core_partial_clone_filter_default to promisor-remote.c

Christopher Diaz Riveros (1):
      l10n: es: 2.24.0 round 2

Clément Chigot (1):
      contrib/svn-fe: fix shebang for svnrdump_sim.py

Corentin BOMPARD (1):
      pull, fetch: add --set-upstream option

David Turner (1):
      clarify documentation for remote helpers

Denton Liu (50):
      packfile.h: drop extern from function declaration
      t4014: drop unnecessary blank lines from test cases
      t3431: add rebase --fork-point tests
      t3432: test rebase fast-forward behavior
      completion: merge options for cherry-pick and revert
      completion: add --skip for cherry-pick and revert
      status: mention --skip for revert and cherry-pick
      rebase: refactor can_fast_forward into goto tower
      rebase: fast-forward --onto in more cases
      rebase: fast-forward --fork-point in more cases
      rebase: teach rebase --keep-base
      mingw: apply array.cocci rule
      compat/*.[ch]: remove extern from function declarations using spatch
      t4014: s/expected/expect/
      t4014: move closing sq onto its own line
      t4014: use sq for test case names
      t4014: remove spaces after redirect operators
      t4014: use indentable here-docs
      t4014: drop redirections to /dev/null
      t4014: let sed open its own files
      t4014: use test_line_count() where possible
      t4014: remove confusing pipe in check_threading()
      t4014: stop losing return codes of git commands
      Doc: add more detail for git-format-patch
      config/format.txt: specify default value of format.coverLetter
      t: use common $SQ variable
      completion: teach rebase to use __gitcomp_builtin
      completion: teach archive to use __gitcomp_builtin
      git-submodule.txt: fix AsciiDoc formatting error
      Makefile: strip leading ./ in $(LIB_H)
      Makefile: define THIRD_PARTY_SOURCES
      Makefile: strip leading ./ in $(FIND_SOURCE_FILES)
      Makefile: run coccicheck on more source files
      gitk: rename zh_CN.po to zh_cn.po
      promisor-remote.h: drop extern from function declaration
      apply.h: include missing header
      promisor-remote.h: include missing header
      pack-bitmap.h: remove magic number
      Makefile: emulate compile in $(HCO) target better
      test-lib: let test_merge() perform octopus merges
      t4214: use test_merge
      t4214: generate expect in their own test cases
      t4214: explicitly list tags in log
      t4214: demonstrate octopus graph coloring failure
      git-rev-list.txt: prune options in synopsis
      t4014: treat rev-list output as the expected value
      t0000: cover GIT_SKIP_TESTS blindspots
      pthread.h: manually align parameter lists
      Makefile: respect $(V) in %.cocci.patch target
      t7419: change test_must_fail to ! for grep

Derrick Stolee (17):
      repo-settings: consolidate some config settings
      t6501: use 'git gc' in quiet mode
      commit-graph: turn on commit-graph by default
      repo-settings: parse core.untrackedCache
      repo-settings: create feature.manyFiles setting
      repo-settings: create feature.experimental setting
      merge-recursive: introduce an enum for detect_directory_renames values
      checkout: add simple check for 'git checkout -b'
      fetch: add fetch.writeCommitGraph config setting
      treewide: rename 'struct exclude' to 'struct path_pattern'
      treewide: rename 'struct exclude_list' to 'struct pattern_list'
      treewide: rename 'EXCL_FLAG_' to 'PATTERN_FLAG_'
      treewide: rename 'exclude' methods to 'pattern'
      unpack-trees: rename 'is_excluded_from_list()'
      repo-settings: read an int for index.version
      t5510-fetch.sh: demonstrate fetch.writeCommitGraph bug
      commit-graph: fix writing first commit-graph during fetch

Elijah Newren (55):
      git-fast-import.txt: clarify that multiple merge commits are allowed
      checkout: remove duplicate code
      merge-recursive: be consistent with assert
      checkout: provide better conflict hunk description with detached HEAD
      merge-recursive: enforce opt->ancestor != NULL when calling merge_trees()
      merge-recursive: provide a better label for diff3 common ancestor
      merge-recursive: future-proof update_file_flags() against memory leaks
      merge-recursive: remove another implicit dependency on the_repository
      Ensure index matches head before invoking merge machinery, round N
      merge-recursive: exit early if index != head
      merge-recursive: remove useless parameter in merge_trees()
      merge-recursive: don't force external callers to do our logging
      cache-tree: share code between functions writing an index as a tree
      merge-recursive: fix some overly long lines
      merge-recursive: use common name for ancestors/common/base_list
      merge-recursive: rename 'mrtree' to 'result_tree', for clarity
      merge-recursive: rename merge_options argument to opt in header
      merge-recursive: move some definitions around to clean up the header
      merge-recursive: consolidate unnecessary fields in merge_options
      merge-recursive: comment and reorder the merge_options fields
      merge-recursive: avoid losing output and leaking memory holding that output
      merge-recursive: split internal fields into a separate struct
      merge-recursive: rename MERGE_RECURSIVE_* to MERGE_VARIANT_*
      merge-recursive: add sanity checks for relevant merge_options
      merge-recursive: alphabetize include list
      merge-options.txt: clarify meaning of various ff-related options
      t3427: accelerate this test by using fast-export and fast-import
      t6006: simplify, fix, and optimize empty message test
      Recommend git-filter-repo instead of git-filter-branch
      t9902: use a non-deprecated command for testing
      t7300: add testcases showing failure to clean specified pathspecs
      dir: fix typo in comment
      dir: fix off-by-one error in match_pathspec_item
      dir: also check directories for matching pathspecs
      dir: make the DO_MATCH_SUBMODULE code reusable for a non-submodule case
      dir: if our pathspec might match files under a dir, recurse into it
      dir: add commentary explaining match_pathspec_item's return value
      git-clean.txt: do not claim we will delete files with -n/--dry-run
      clean: disambiguate the definition of -d
      clean: avoid removing untracked files in a nested git repository
      clean: rewrap overly long line
      clean: fix theoretical path corruption
      fast-export: fix exporting a tag and nothing else
      dir: special case check for the possibility that pathspec is NULL
      merge-recursive: fix the diff3 common ancestor label for virtual commits
      fast-import: fix handling of deleted tags
      fast-import: allow tags to be identified by mark labels
      fast-import: add support for new 'alias' command
      fast-export: add support for --import-marks-if-exists
      fast-export: allow user to request tags be marked with --mark-tags
      t9350: add tests for tags of things other than a commit
      fast-export: handle nested tags
      merge-recursive: fix the fix to the diff3 common ancestor label
      RelNotes/2.24.0: typofix
      RelNotes/2.24.0: fix self-contradictory note

Emily Shaffer (1):
      promisor-remote: skip move_to_tail when no-op

Eric Wong (20):
      diff: use hashmap_entry_init on moved_entry.ent
      coccicheck: detect hashmap_entry.hash assignment
      packfile: use hashmap_entry in delta_base_cache_entry
      hashmap_entry_init takes "struct hashmap_entry *"
      hashmap_get_next takes "const struct hashmap_entry *"
      hashmap_add takes "struct hashmap_entry *"
      hashmap_get takes "const struct hashmap_entry *"
      hashmap_remove takes "const struct hashmap_entry *"
      hashmap_put takes "struct hashmap_entry *"
      introduce container_of macro
      hashmap_get_next returns "struct hashmap_entry *"
      hashmap: use *_entry APIs to wrap container_of
      hashmap_get{,_from_hash} return "struct hashmap_entry *"
      hashmap_cmp_fn takes hashmap_entry params
      hashmap: use *_entry APIs for iteration
      hashmap: hashmap_{put,remove} return hashmap_entry *
      hashmap: introduce hashmap_free_entries
      OFFSETOF_VAR macro to simplify hashmap iterators
      hashmap: remove type arg from hashmap_{get,put,remove}_entry
      hashmap_entry: remove first member requirement from docs

Gabriele Mazzotta (1):
      gitk: Do not mistake unchanged lines for submodule changes

Garima Singh (3):
      commit-graph: add --[no-]progress to write and verify
      commit-graph: emit trace2 cmd_mode for each sub-command
      sq_quote_buf_pretty: don't drop empty arguments

Hervé Beraud (1):
      hg-to-git: make it compatible with both python3 and python2

Jakob Jarmar (1):
      stash: avoid recursive hard reset on submodules

Jean-Noël Avila (2):
      l10n: fr 2.24.0 rnd 1
      l10n: fr v2.24.0 rnd2

Jeff Hostetler (7):
      trace2: cleanup column alignment in perf target format
      trace2: trim whitespace in region messages in perf target format
      trace2: remove dead code in maybe_add_string_va()
      trace2: trim trailing whitespace in normal format error message
      quote: add sq_append_quote_argv_pretty()
      trace2: cleanup whitespace in normal format
      trace2: cleanup whitespace in perf format

Jeff King (32):
      setup_traverse_info(): stop copying oid
      tree-walk: drop oid from traverse_info
      tree-walk: use size_t consistently
      tree-walk: accept a raw length for traverse_path_len()
      tree-walk: add a strbuf wrapper for make_traverse_path()
      tree-walk: harden make_traverse_path() length computations
      revision: allow --end-of-options to end option parsing
      parse-options: allow --end-of-options as a synonym for "--"
      gitcli: document --end-of-options
      t1309: use short branch name in includeIf.onbranch test
      common-main: delay trace2 initialization
      config: stop checking whether the_repository is NULL
      t/perf: rename duplicate-numbered test script
      packfile: drop release_pack_memory()
      notes: avoid potential use-after-free during insertion
      fast-import: duplicate parsed encoding string
      fast-import: duplicate into history rather than passing ownership
      git-am: handle missing "author" when parsing commit
      pack-objects: use object_id in packlist_alloc()
      bulk-checkin: zero-initialize hashfile_checkpoint
      diff-delta: set size out-parameter to 0 for NULL delta
      test-read-cache: drop namelen variable
      pack-objects: drop packlist index_pos optimization
      commit-graph: turn off save_commit_buffer
      list-objects: don't queue root trees unless revs->tree_objects is set
      commit-graph: bump DIE_ON_LOAD check to actual load-time
      upload-pack: disable commit graph more gently for shallow traversal
      list-objects-filter: delay parsing of sparse oid
      list-objects-filter: use empty string instead of NULL for sparse "base"
      git_mkstemps_mode(): replace magic numbers with computed value
      add a Code of Conduct document
      CODE_OF_CONDUCT: mention individual project-leader emails

Jiang Xin (3):
      l10n: git.pot: v2.24.0 round 1 (35 new, 16 removed)
      l10n: git.pot: v2.24.0 round 2 (1 new)
      l10n: zh_CN: for git v2.24.0 l10n round 1~2

Johannes Schindelin (46):
      Drop unused git-rebase--am.sh
      t3400: stop referring to the scripted rebase
      .gitignore: there is no longer a built-in `git-rebase--interactive`
      sequencer: the `am` and `rebase--interactive` scripts are gone
      rebase: fold git-rebase--common into the -p backend
      t3427: add a clarifying comment
      t3427: simplify the `setup` test case significantly
      t3427: move the `filter-branch` invocation into the `setup` case
      t3427: condense the unnecessarily repetitive test cases into three
      t3427: fix erroneous assumption
      t3427: accommodate for the `rebase --merge` backend having been replaced
      t3427: fix another incorrect assumption
      rebase -r: support merge strategies other than `recursive`
      t/lib-rebase: prepare for testing `git rebase --rebase-merges`
      t3418: test `rebase -r` with merge strategies
      rebase -r: do not (re-)generate root commits with `--root` *and* `--onto`
      setup_git_directory(): handle UNC paths correctly
      Fix .git/ discovery at the root of UNC shares
      setup_git_directory(): handle UNC root paths correctly
      .gitignore: stop ignoring `.manifest` files
      Fix build with core.autocrlf=true
      Move git_sort(), a stable sort, into into libgit.a
      diffcore_rename(): use a stable sort
      ci: run `hdr-check` as part of the `Static Analysis` job
      range-diff: internally force `diff.noprefix=true`
      push: do not pretend to return `int` from `die_push_simple()`
      fetch: let --jobs=<n> parallelize --multiple, too
      stash apply: report status correctly even in a worktree's subdirectory
      msvc: avoid using minus operator on unsigned types
      winansi: use FLEX_ARRAY to avoid compiler warning
      compat/win32/path-utils.h: add #include guards
      msvc: ignore some libraries when linking
      msvc: handle DEVELOPER=1
      msvc: work around a bug in GetEnvironmentVariable()
      vcxproj: only copy `git-remote-http.exe` once it was built
      vcxproj: include more generated files
      test-tool run-command: learn to run (parts of) the testsuite
      tests: let --immediate and --write-junit-xml play well together
      ci: really use shallow clones on Azure Pipelines
      ci: also build and test with MS Visual Studio on Azure Pipelines
      xdiffi: fix typos and touch up comments
      doc(stash): clarify the description of `save`
      ci(visual-studio): use strict compile flags, and optimization
      ci(visual-studio): actually run the tests in parallel
      ci(osx): use new location of the `perforce` cask
      mingw: avoid a buffer overrun in `needs_hiding()`

Johannes Sixt (2):
      diff, log doc: say "patch text" instead of "patches"
      diff, log doc: small grammer, format, and language fixes

Jon Simons (2):
      t5616: test cloning/fetching with sparse:oid=<oid> filter
      list-objects-filter: give a more specific error sparse parsing error

Jonathan Tan (7):
      diff: skip GITLINK when lazy fetching missing objs
      transport-helper: skip ls-refs if unnecessary
      transport: teach all vtables to allow fetch first
      cache-tree: do not lazy-fetch tentative tree
      merge-recursive: symlink's descendants not in way
      send-pack: never fetch when checking exclusions
      fetch: delay fetch_if_missing=0 until after config

Jordi Mas (1):
      l10n: Update Catalan translation

Josh Steadmon (7):
      t7503: verify proper hook execution
      fetch: add trace2 instrumentation
      push: add trace2 instrumentation
      docs: mention trace2 target-dir mode in git-config
      docs: clarify trace2 version invariants
      trace2: discard new traces if target directory has too many files
      trace2: write discard message to sentinel files

Junio C Hamano (18):
      First batch after Git 2.23
      t: use LF variable defined in the test harness
      t3005: remove unused variable
      Second batch
      Third batch
      SubmittingPatches: git-gui has a new maintainer
      Fourth batch
      Fifth batch
      Sixth batch
      transport: push codepath can take arbitrary repository
      Seventh batch
      Eighth batch
      Ninth batch
      Git 2.24-rc0
      Eleventh batch
      Git 2.24-rc1
      Git 2.24-rc2
      Git 2.24

Kunal Tyagi (1):
      add -i: show progress counter in the prompt

Martin Ågren (16):
      Documentation: wrap blocks with "--"
      git-merge-base.txt: render indentations correctly under Asciidoctor
      Documentation: wrap config listings in "----"
      git-ls-remote.txt: wrap shell listing in "----"
      git-receive-pack.txt: wrap shell [script] listing in "----"
      git-merge-index.txt: wrap shell listing in "----"
      gitweb.conf.txt: switch pluses to backticks to help Asciidoctor
      Doc/Makefile: give mansource/-version/-manual attributes
      asciidoctor-extensions: provide `<refmiscinfo/>`
      doc-diff: replace --cut-header-footer with --cut-footer
      treewide: correct several "up-to-date" to "up to date"
      user-manual.txt: add missing section label
      user-manual.txt: change header notation
      asciidoctor-extensions.rb: handle "book" doctype in linkgit
      user-manual.txt: render ASCII art correctly under Asciidoctor
      manpage-bold-literal.xsl: match for namespaced "d:literal" in template

Masaya Suzuki (1):
      fetch: use oidset to keep the want OIDs for faster lookup

Matheus Tavares (1):
      grep: fix worktree case in submodules

Matthew DeVore (10):
      list-objects-filter: encapsulate filter components
      list-objects-filter: put omits set in filter struct
      list-objects-filter-options: always supply *errbuf
      list-objects-filter: implement composite filters
      list-objects-filter-options: move error check up
      list-objects-filter-options: make filter_spec a string_list
      strbuf: give URL-encoding API a char predicate fn
      list-objects-filter-options: allow mult. --filter
      list-objects-filter-options: clean up use of ALLOC_GROW
      list-objects-filter-options: make parser void

Matthias Rüster (1):
      l10n: de.po: Update German translation

Max Rothman (1):
      completion: add missing completions for log, diff, show

Maxim Belsky (1):
      completion: clarify installation instruction for zsh

Michael J Gruber (3):
      merge: do no-verify like commit
      git-merge: honor pre-merge-commit hook
      merge: --no-verify to bypass pre-merge-commit hook

Mike Hommey (3):
      notes: avoid leaking duplicate entries
      commit: free the right buffer in release_commit_memory
      http: don't leak urlmatch_config.vars

Mischa POSLAWSKY (1):
      ref-filter: initialize empty name or email fields

Norman Rasmussen (1):
      diff-highlight: fix a whitespace nit

Paul Mackerras (1):
      gitk: Make web links clickable

Paul Wise (1):
      gitk: Use right colour for remote refs in the "Tags and heads" dialog

Pedro Sousa (1):
      doc: MyFirstContribution: fix cmd placement instructions

Peter Krefting (2):
      l10n: sv.po: Update Swedish translation (4674t0f0u)
      l10n: sv.po: Update Swedish translation (4695t0f0u)

Philip.McGraw (1):
      git-p4: auto-delete named temporary file

Phillip Wood (3):
      rebase -i: always update HEAD before rewording
      rebase -i: check for updated todo after squash and reword
      sequencer: simplify root commit creation

Pratyush Yadav (7):
      git-gui: call do_quit before destroying the main window
      git-gui: allow reverting selected lines
      git-gui: allow reverting selected hunk
      git-gui: return early when patch fails to apply
      git-gui: allow undoing last revert
      Documentation: update the location of the git-gui repo
      git-gui: add a readme

René Scharfe (28):
      nedmalloc: do assignments only after the declaration section
      nedmalloc: avoid compiler warning about unused value
      archive-tar: report wrong pax extended header length
      archive-tar: fix pax extended header length calculation
      archive-tar: use size_t in strbuf_append_ext_header()
      archive-tar: turn length miscalculation warning into BUG
      parseopt: move definition of enum parse_opt_result up
      sha1-name: make sort_ambiguous_oid_array() thread-safe
      log-tree: always use return value of strbuf_detach()
      grep: use return value of strbuf_detach()
      trace2: use warning() directly in tr2_dst_malformed_warning()
      help: make help_unknown_ref() NORETURN
      tree: simplify parse_tree_indirect()
      tag: factor out get_tagged_oid()
      use get_tagged_oid()
      log: test --decorate-refs-exclude with --simplify-by-decoration
      log-tree: call load_ref_decorations() in get_name_decoration()
      rev-parse: demonstrate overflow of N for "foo^N" and "foo~N"
      sha1-name: check for overflow of N in "foo^N" and "foo~N"
      commit-graph: use commit_list_count()
      sha1_name: simplify strbuf handling in interpret_nth_prior_checkout()
      git: use COPY_ARRAY and MOVE_ARRAY in handle_alias()
      treewide: remove duplicate #include directives
      convert: fix handling of dashless UTF prefix in validate_encoding()
      tests: remove "cat foo" before "test_i18ngrep bar foo"
      http-push: simplify deleting a list item
      column: use utf8_strnwidth() to strip out ANSI color escapes
      remote-curl: use argv_array in parse_push()

Robert Luberda (1):
      gitweb: correctly store previous rev in javascript-actions mode

SZEDER Gábor (35):
      t5510-fetch: fix negated 'test_i18ngrep' invocation
      t5510-fetch: run non-httpd-specific test before sourcing 'lib-httpd.sh'
      t5703: run all non-httpd-specific tests before sourcing 'lib-httpd.sh'
      t: warn against adding non-httpd-specific tests after sourcing 'lib-httpd'
      t5318-commit-graph: use 'test_expect_code'
      commit-graph: turn a group of write-related macro flags into an enum
      commit-graph: error out on invalid commit oids in 'write --stdin-commits'
      t0000-basic: use realistic test script names in the verbose tests
      tests: show the test name and number at the start of verbose output
      completion: fix a typo in a comment
      completion: complete more values of more 'color.*' configuration variables
      completion: add tests for 'git config' completion
      completion: deduplicate configuration sections
      completion: use 'sort -u' to deduplicate config variable names
      completion: simplify inner 'case' pattern in __gitcomp()
      completion: split _git_config()
      completion: complete configuration sections and variable names for 'git -c'
      completion: complete values of configuration variables after 'git -c var='
      completion: complete config variables names and values for 'git clone -c'
      completion: complete config variables and values for 'git clone --config='
      worktree remove: clarify error message on dirty worktree
      diff: 'diff.indentHeuristic' is no longer experimental
      line-log: extract pathspec parsing from line ranges into a helper function
      line-log: avoid unnecessary full tree diffs
      t7300-clean: demonstrate deleting nested repo with an ignored file breakage
      t/lib-git-svn.sh: check GIT_TEST_SVN_HTTPD when running SVN HTTP tests
      ci: restore running httpd tests
      commit-graph: don't show progress percentages while expanding reachable commits
      Revert "progress: use term_clear_line()"
      Test the progress display
      t/helper: ignore only executable files
      travis-ci: do not skip successfully tested trees in debug mode
      name-rev: avoid cutoff timestamp underflow
      test-progress: fix test failures on big-endian systems
      ci: fix GCC install in the Travis CI GCC OSX job

Stephen Boyd (2):
      userdiff: add a builtin pattern for dts files
      userdiff: fix some corner cases in dts regex

Stephen P. Smith (2):
      Quit passing 'now' to date code
      test_date.c: remove reference to GIT_TEST_DATE_NOW

Sun Chao (1):
      pack-refs: always refresh after taking the lock file

Tanay Abhra (1):
      t1308-config-set: fix a test that has a typo

Taylor Blau (4):
      banned.h: fix vsprintf()'s ban message
      t/t5318: introduce failing 'git commit-graph write' tests
      commit-graph.c: handle commit parsing errors
      commit-graph.c: handle corrupt/missing trees

Thomas Gummerer (6):
      t0021: make sure clean filter runs
      push: disallow --all and refspecs when remote.<name>.mirror is set
      factor out refresh_and_write_cache function
      merge: use refresh_and_write_cache
      stash: make sure to write refreshed cache
      range-diff: don't segfault with mode-only changes

Thomas Klaeger (1):
      git-gui (Windows): use git-bash.exe if it is available

Tobias Klauser (1):
      git-svn: trim leading and trailing whitespaces in author name

Torsten Bögershausen (1):
      mingw: support UNC in git clone file://server/share/repo

Trần Ngọc Quân (1):
      l10n: vi(4694t): Updated translation for v2.24.0

Varun Naik (2):
      checkout.c: unstage empty deleted ita files
      restore: add test for deleted ita files

William Baker (2):
      fsmonitor: don't fill bitmap with entries to be removed
      t7519-status-fsmonitor: improve comments

YanKe (1):
      gitk: Add Chinese (zh_CN) translation

brian m. carlson (44):
      builtin/replace: make hash size independent
      patch-id: convert to use the_hash_algo
      fetch-pack: use parse_oid_hex
      builtin/receive-pack: switch to use the_hash_algo
      builtin/blame: switch uses of GIT_SHA1_HEXSZ to the_hash_algo
      builtin/rev-parse: switch to use the_hash_algo
      blame: remove needless comparison with GIT_SHA1_HEXSZ
      show-index: switch hard-coded constants to the_hash_algo
      connected: switch GIT_SHA1_HEXSZ to the_hash_algo
      bundle: switch to use the_hash_algo
      combine-diff: replace GIT_SHA1_HEXSZ with the_hash_algo
      config: use the_hash_algo in abbrev comparison
      sha1-lookup: switch hard-coded constants to the_hash_algo
      bisect: switch to using the_hash_algo
      sequencer: convert to use the_hash_algo
      pack-write: use hash_to_hex when writing checksums
      builtin/repack: write object IDs of the proper length
      builtin/worktree: switch null_sha1 to null_oid
      cache: remove null_sha1
      wt-status: convert struct wt_status to object_id
      packfile: replace sha1_to_hex
      builtin/index-pack: replace sha1_to_hex
      builtin/receive-pack: replace sha1_to_hex
      rerere: replace sha1_to_hex
      builtin/show-index: replace sha1_to_hex
      midx: switch to using the_hash_algo
      t3201: abstract away SHA-1-specific constants
      t3206: abstract away hash size constants
      t3301: abstract away SHA-1-specific constants
      t3305: make hash size independent
      t3306: abstract away SHA-1-specific constants
      t3404: abstract away SHA-1-specific constants
      t3430: avoid hard-coded object IDs
      t3506: make hash independent
      t3600: make hash size independent
      t3800: make hash-size independent
      t3903: abstract away SHA-1-specific constants
      t4000: make hash size independent
      t4002: make hash independent
      t4009: make hash size independent
      path: add a function to check for path suffix
      am: reload .gitattributes after patching it
      Documentation: fix build with Asciidoctor 2
      remote-curl: pass on atomic capability to remote side

kdnakt (1):
      git-gui: improve Japanese translation

Ævar Arnfjörð Bjarmason (20):
      log tests: test regex backends in "--encode=<enc>" tests
      grep: don't use PCRE2?_UTF8 with "log --encoding=<non-utf8>"
      t4210: skip more command-line encoding tests on MinGW
      grep: inline the return value of a function call used only once
      grep tests: move "grep binary" alongside the rest
      grep tests: move binary pattern tests into their own file
      grep: make the behavior for NUL-byte in patterns sane
      grep: drop support for \0 in --fixed-strings <pattern>
      grep: remove the kwset optimization
      grep: use PCRE v2 for optimized fixed-string search
      grep: remove overly paranoid BUG(...) code
      grep: stop "using" a custom JIT stack with PCRE v2
      grep: stop using a custom JIT stack with PCRE v1
      grep: consistently use "p->fixed" in compile_regexp()
      grep: create a "is_fixed" member in "grep_pat"
      grep: stess test PCRE v2 on invalid UTF-8 data
      grep: do not enter PCRE2_UTF mode on fixed matching
      t3432: distinguish "noop-same" v.s. "work-same" in "same head" tests
      t3432: test for --no-ff's interaction with fast-forward
      rebase tests: test linear branch topology


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.24.0-rc2
@ 2019-10-30  7:14  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2019-10-30  7:14 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.24.0-rc2 is now available for testing
at the usual places.  It is comprised of 515 non-merge commits
since v2.23.0, contributed by 67 people, 18 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.24.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.23.0 are as follows.
Welcome to the Git development community!

  Alexandr Miloslavskiy, Ali Utku Selen, Ben Milman, Cameron
  Steffen, CB Bailey, Garima Singh, Hervé Beraud, Jakob Jarmar,
  Kunal Tyagi, Maxim Belsky, Max Rothman, Norman Rasmussen, Paul
  Wise, Pedro Sousa, Philip.McGraw, Pratyush Yadav, William Baker,
  and YanKe.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Roben, Ævar Arnfjörð Bjarmason, Alex Henrie, Andrey Mazo,
  Beat Bolli, Ben Wijen, Bert Wesarg, Birger Skogeng Pedersen,
  brian m. carlson, Carlo Marcelo Arenas Belón, Christian
  Couder, Clément Chigot, Corentin BOMPARD, David Turner,
  Denton Liu, Derrick Stolee, Elijah Newren, Emily Shaffer,
  Eric Wong, Gabriele Mazzotta, Jeff Hostetler, Jeff King,
  Johannes Schindelin, Johannes Sixt, Jonathan Tan, Jon Simons,
  Josh Steadmon, Junio C Hamano, Martin Ågren, Masaya Suzuki,
  Matheus Tavares, Matthew DeVore, Michael J Gruber, Mike Hommey,
  Mischa POSLAWSKY, Paul Mackerras, Phillip Wood, René Scharfe,
  Robert Luberda, Stephen Boyd, Stephen P. Smith, Sun Chao,
  SZEDER Gábor, Tanay Abhra, Taylor Blau, Thomas Gummerer,
  Tobias Klauser, Torsten Bögershausen, and Varun Naik.

----------------------------------------------------------------

Git 2.24 Release Notes (draft)
==============================

Updates since v2.23
-------------------

Backward compatibility note

 * Although it is not officially deprecated, "filter-branch" is
   showing its age and alternatives are available.  From this release,
   we started to discourage its uses and hint people about
   filter-repo.

UI, Workflows & Features

 * We now have an active interim maintainer for the Git-Gui part of
   the system.  Praise and thank Pratyush Yadav for volunteering.

 * The command line parser learned "--end-of-options" notation; the
   standard convention for scripters to have hardcoded set of options
   first on the command line, and force the command to treat end-user
   input as non-options, has been to use "--" as the delimiter, but
   that would not work for commands that use "--" as a delimiter
   between revs and pathspec.

 * A mechanism to affect the default setting for a (related) group of
   configuration variables is introduced.

 * "git fetch" learned "--set-upstream" option to help those who first
   clone from their private fork they intend to push to, add the true
   upstream via "git remote add" and then "git fetch" from it.

 * Device-tree files learned their own userdiff patterns.
   (merge 3c81760bc6 sb/userdiff-dts later to maint).

 * "git rebase --rebase-merges" learned to drive different merge
   strategies and pass strategy specific options to them.

 * A new "pre-merge-commit" hook has been introduced.

 * Command line completion updates for "git -c var.name=val" have been
   added.

 * The lazy clone machinery has been taught that there can be more
   than one promisor remote and consult them in order when downloading
   missing objects on demand.

 * The list-objects-filter API (used to create a sparse/lazy clone)
   learned to take a combined filter specification.

 * The documentation and tests for "git format-patch" have been
   cleaned up.

 * On Windows, the root level of UNC share is now allowed to be used
   just like any other directory.

 * The command line completion support (in contrib/) learned about the
   "--skip" option of "git revert" and "git cherry-pick".

 * "git rebase --keep-base <upstream>" tries to find the original base
   of the topic being rebased and rebase on top of that same base,
   which is useful when running the "git rebase -i" (and its limited
   variant "git rebase -x").

   The command also has learned to fast-forward in more cases where it
   can instead of replaying to recreate identical commits.

 * A configuration variable tells "git fetch" to write the commit
   graph after finishing.

 * "git add -i" has been taught to show the total number of hunks and
   the hunks that has been processed so far when showing prompts.

 * "git fetch --jobs=<n>" allowed <n> parallel jobs when fetching
   submodules, but this did not apply to "git fetch --multiple" that
   fetches from multiple remote repositories.  It now does.

 * The installation instruction for zsh completion script (in
   contrib/) has been a bit improved.


Performance, Internal Implementation, Development Support etc.

 * The code to write commit-graph over given commit object names has
   been made a bit more robust.

 * The first line of verbose output from each test piece now carries
   the test name and number to help scanning with eyeballs.

 * Further clean-up of the initialization code.

 * xmalloc() used to have a mechanism to ditch memory and address
   space resources as the last resort upon seeing an allocation
   failure from the underlying malloc(), which made the code complex
   and thread-unsafe with dubious benefit, as major memory resource
   users already do limit their uses with various other mechanisms.
   It has been simplified away.

 * Unnecessary full-tree diff in "git log -L" machinery has been
   optimized away.

 * The http transport lacked some optimization the native transports
   learned to avoid unnecessary ref advertisement, which has been
   corrected.

 * Preparation for SHA-256 upgrade continues in the test department.
   (merge 0c37c41d13 bc/hash-independent-tests-part-5 later to maint).

 * The memory ownership model of the "git fast-import" got
   straightened out.

 * Output from trace2 subsystem is formatted more prettily now.

 * The internal code originally invented for ".gitignore" processing
   got reshuffled and renamed to make it less tied to "excluding" and
   stress more that it is about "matching", as it has been reused for
   things like sparse checkout specification that want to check if a
   path is "included".

 * "git stash" learned to write refreshed index back to disk.

 * Coccinelle checks are done on more source files than before now.

 * The cache-tree code has been taught to be less aggressive in
   attempting to see if a tree object it computed already exists in
   the repository.

 * The code to parse and use the commit-graph file has been made more
   robust against corrupted input.

 * The hg-to-git script (in contrib/) has been updated to work with
   Python 3.

 * Update the way build artifacts in t/helper/ directory are ignored.

 * Preparation for SHA-256 upgrade continues.

 * "git log --graph" for an octopus merge is sometimes colored
   incorrectly, which is demonstrated and documented but not yet
   fixed.

 * The trace2 output, when sending them to files in a designated
   directory, can populate the directory with too many files; a
   mechanism is introduced to set the maximum number of files and
   discard further logs when the maximum is reached.

 * We have adopted a Code-of-conduct document.
   (merge 3f9ef874a7 jk/coc later to maint).


Fixes since v2.23
-----------------

 * "git grep --recurse-submodules" that looks at the working tree
   files looked at the contents in the index in submodules, instead of
   files in the working tree.
   (merge 6a289d45c0 mt/grep-submodules-working-tree later to maint).

 * Codepaths to walk tree objects have been audited for integer
   overflows and hardened.
   (merge 5aa02f9868 jk/tree-walk-overflow later to maint).

 * "git pack-refs" can lose refs that are created while running, which
   is getting corrected.
   (merge a613d4f817 sc/pack-refs-deletion-racefix later to maint).

 * "git checkout" and "git restore" to re-populate the index from a
   tree-ish (typically HEAD) did not work correctly for a path that
   was removed and then added again with the intent-to-add bit, when
   the corresponding working tree file was empty.  This has been
   corrected.

 * Compilation fix.
   (merge 70597e8386 rs/nedalloc-fixlets later to maint).

 * "git gui" learned to call the clean-up procedure before exiting.
   (merge 0d88f3d2c5 py/git-gui-do-quit later to maint).

 * We promoted the "indent heuristics" that decides where to split
   diff hunks from experimental to the default a few years ago, but
   some stale documentation still marked it as experimental, which has
   been corrected.
   (merge 64e5e1fba1 sg/diff-indent-heuristic-non-experimental later to maint).

 * Fix a mismerge that happened in 2.22 timeframe.
   (merge acb7da05ac en/checkout-mismerge-fix later to maint).

 * "git archive" recorded incorrect length in extended pax header in
   some corner cases, which has been corrected.
   (merge 71d41ff651 rs/pax-extended-header-length-fix later to maint).

 * On-demand object fetching in lazy clone incorrectly tried to fetch
   commits from submodule projects, while still working in the
   superproject, which has been corrected.
   (merge a63694f523 jt/diff-lazy-fetch-submodule-fix later to maint).

 * Prepare get_short_oid() codepath to be thread-safe.
   (merge 7cfcb16b0e rs/sort-oid-array-thread-safe later to maint).

 * "for-each-ref" and friends that show refs did not protect themselves
   against ancient tags that did not record tagger names when asked to
   show "%(taggername)", which have been corrected.
   (merge 8b3f33ef11 mp/for-each-ref-missing-name-or-email later to maint).

 * The "git am" based backend of "git rebase" ignored the result of
   updating ".gitattributes" done in one step when replaying
   subsequent steps.
   (merge 2c65d90f75 bc/reread-attributes-during-rebase later to maint).

 * Tell cURL library to use the same malloc() implementation, with the
   xmalloc() wrapper, as the rest of the system, for consistency.
   (merge 93b980e58f cb/curl-use-xmalloc later to maint).

 * Build fix to adjust .gitignore to unignore a path that we started to track.
   (merge aac6ff7b5b js/visual-studio later to maint).

 * A few implementation fixes in the notes API.
   (merge 60fe477a0b mh/notes-duplicate-entries later to maint).

 * Fix an earlier regression to "git push --all" which should have
   been forbidden when the target remote repository is set to be a
   mirror.
   (merge 8e4c8af058 tg/push-all-in-mirror-forbidden later to maint).

 * Fix an earlier regression in the test suite, which mistakenly
   stopped running HTTPD tests.
   (merge 3960290675 sg/git-test-boolean later to maint).

 * "git rebase --autostash <upstream> <branch>", when <branch> is
   different from the current branch, incorrectly moved the tip of the
   current branch, which has been corrected.
   (merge bf1e28e0ad bw/rebase-autostash-keep-current-branch later to maint).

 * Update support for Asciidoctor documentation toolchain.
   (merge 83b0b8953e ma/asciidoctor-refmiscinfo later to maint).

 * Start using DocBook 5 (instead of DocBook 4.5) as Asciidoctor 2.0
   no longer works with the older one.
   (merge f6461b82b9 bc/doc-use-docbook-5 later to maint).

 * The markup used in user-manual has been updated to work better with
   asciidoctor.
   (merge c4d2f6143a ma/user-manual-markup-update later to maint).

 * Make sure the grep machinery does not abort when seeing a payload
   that is not UTF-8 even when JIT is not in use with PCRE1.
   (merge ad7c543e3b cb/skip-utf8-check-with-pcre1 later to maint).

 * The name of the blob object that stores the filter specification
   for sparse cloning/fetching was interpreted in a wrong place in the
   code, causing Git to abort.

 * "git log --decorate-refs-exclude=<pattern>" was incorrectly
   overruled when the "--simplify-by-decoration" option is used, which
   has been corrected.
   (merge 0cc7380d88 rs/simplify-by-deco-with-deco-refs-exclude later to maint).

 * The "upload-pack" (the counterpart of "git fetch") needs to disable
   commit-graph when responding to a shallow clone/fetch request, but
   the way this was done made Git panic, which has been corrected.

 * The object traversal machinery has been optimized not to load tree
   objects when we are only interested in commit history.
   (merge 72ed80c784 jk/list-objects-optim-wo-trees later to maint).

 * The object name parser for "Nth parent" syntax has been made more
   robust against integer overflows.
   (merge 59fa5f5a25 rs/nth-parent-parse later to maint).

 * The code used in following tags in "git fetch" has been optimized.
   (merge b7e2d8bca5 ms/fetch-follow-tag-optim later to maint).

 * Regression fix for progress output.
   (merge 2bb74b53a4 sg/progress-fix later to maint).

 * A bug in merge-recursive code that triggers when a branch with a
   symbolic link is merged with a branch that replaces it with a
   directory has been fixed.
   (merge 83e3ad3b12 jt/merge-recursive-symlink-is-not-a-dir-in-way later to maint).

 * The rename detection logic sorts a list of rename source candidates
   by similarity to pick the best candidate, which means that a tie
   between sources with the same similarity is broken by the original
   location in the original candidate list (which is sorted by path).
   Force the sorting by similarity done with a stable sort, which is
   not promised by system supplied qsort(3), to ensure consistent
   results across platforms.
   (merge 2049b8dc65 js/diff-rename-force-stable-sort later to maint).

 * The code to skip "UTF" and "UTF-" prefix, when computing an advice
   message, did not work correctly when the prefix was "UTF", which
   has been fixed.
   (merge b181676ce9 rs/convert-fix-utf-without-dash later to maint).

 * The author names taken from SVN repositories may have extra leading
   or trailing whitespaces, which are now munged away.
   (merge 4ddd4bddb1 tk/git-svn-trim-author-name later to maint).

 * "git rebase -i" showed a wrong HEAD while "reword" open the editor.
   (merge b0a3186140 pw/rebase-i-show-HEAD-to-reword later to maint).

 * A few simplification and bugfixes to PCRE interface.
   (merge c581e4a749 ab/pcre-jit-fixes later to maint).

 * PCRE fixes.
   (merge ff61681b46 cb/pcre1-cleanup later to maint).

 * "git range-diff" segfaulted when diff.noprefix configuration was
   used, as it blindly expected the patch it internally generates to
   have the standard a/ and b/ prefixes.  The command now forces the
   internal patch to be built without any prefix, not to be affected
   by any end-user configuration.
   (merge 937b76ed49 js/range-diff-noprefix later to maint).

 * "git stash apply" in a subdirectory of a secondary worktree failed
   to access the worktree correctly, which has been corrected.
   (merge dfd557c978 js/stash-apply-in-secondary-worktree later to maint).

 * The merge-recursive machiery is one of the most complex parts of
   the system that accumulated cruft over time.  This large series
   cleans up the implementation quite a bit.
   (merge b657047719 en/merge-recursive-cleanup later to maint).

 * Pretty-printed command line formatter (used in e.g. reporting the
   command being run by the tracing API) had a bug that lost an
   argument that is an empty string, which has been corrected.
   (merge ce2d7ed2fd gs/sq-quote-buf-pretty later to maint).

 * "git range-diff" failed to handle mode-only change, which has been
   corrected.
   (merge 2b6a9b13ca tg/range-diff-output-update later to maint).

 * Dev support update.
   (merge 4f3c1dc5d6 dl/allow-running-cocci-verbosely later to maint).

 * "git format-patch -o <outdir>" did an equivalent of "mkdir <outdir>"
   not "mkdir -p <outdir>", which was corrected.

 * "git stash save" lost local changes to submodules, which has been
   corrected.
   (merge 556895d0c8 jj/stash-reset-only-toplevel later to maint).

 * The atomic push over smart HTTP transport did not work, which has
   been corrected.
   (merge 6f1194246a bc/smart-http-atomic-push later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge d1387d3895 en/fast-import-merge-doc later to maint).
   (merge 1c24a54ea4 bm/repository-layout-typofix later to maint).
   (merge 415b770b88 ds/midx-expire-repack later to maint).
   (merge 19800bdc3f nd/diff-parseopt later to maint).
   (merge 58166c2e9d tg/t0021-racefix later to maint).
   (merge 7027f508c7 dl/compat-cleanup later to maint).
   (merge e770fbfeff jc/test-cleanup later to maint).
   (merge 1fd881d404 rs/trace2-dst-warning later to maint).
   (merge 7e92756751 mh/http-urlmatch-cleanup later to maint).
   (merge 9784f97321 mh/release-commit-memory-fix later to maint).
   (merge 60d198d022 tb/banned-vsprintf-namefix later to maint).
   (merge 80e3658647 rs/help-unknown-ref-does-not-return later to maint).
   (merge 0a8bc7068f dt/remote-helper-doc-re-lock-option later to maint).
   (merge 27fd1e4ea7 en/merge-options-ff-and-friends later to maint).
   (merge 502c386ff9 sg/clean-nested-repo-with-ignored later to maint).
   (merge 26e3d1cbea am/mailmap-andrey-mazo later to maint).
   (merge 47b27c96fa ss/get-time-cleanup later to maint).
   (merge dd2e50a84e jk/commit-graph-cleanup later to maint).
   (merge 4fd39c76e6 cs/pretty-formats-doc-typofix later to maint).
   (merge 40e747e89d dl/submodule-set-branch later to maint).
   (merge 689a146c91 rs/commit-graph-use-list-count later to maint).
   (merge 0eb7c37a8a js/doc-patch-text later to maint).
   (merge 4b3aa170d1 rs/nth-switch-code-simplification later to maint).
   (merge 0d4304c124 ah/doc-submodule-ignore-submodules later to maint).
   (merge af78249463 cc/svn-fe-py-shebang later to maint).
   (merge 7bd97d6dff rs/alias-use-copy-array later to maint).
   (merge c46ebc2496 sg/travis-help-debug later to maint).
   (merge 24c681794f ps/my-first-contribution-alphasort later to maint).
   (merge 75b2c15435 cb/do-not-use-test-cmp-with-a later to maint).
   (merge cda0d497e3 bw/submodule-helper-usage-fix later to maint).
   (merge fe0ed5d5e9 am/visual-studio-config-fix later to maint).
   (merge 2e09c01232 sg/name-rev-cutoff-underflow-fix later to maint).
   (merge ddb3c856f3 as/shallow-slab-use-fix later to maint).
   (merge 71f4960b91 js/mingw-spawn-with-spaces-in-path later to maint).
   (merge 53d687bf5f ah/cleanups later to maint).
   (merge f537485fa5 rs/test-remove-useless-debugging-cat later to maint).
   (merge 11a3d3aadd dl/rev-list-doc-cleanup later to maint).
   (merge d928a8388a am/t0028-utf16-tests later to maint).
   (merge b05b40930e dl/t0000-skip-test-test later to maint).
   (merge 03d3b1297c js/xdiffi-comment-updates later to maint).
   (merge 57d8f4b4c7 js/doc-stash-save later to maint).
   (merge 8c1cfd58e3 ta/t1308-typofix later to maint).
   (merge fa364ad790 bb/utf8-wcwidth-cleanup later to maint).
   (merge 68b69211b2 bb/compat-util-comment-fix later to maint).
   (merge 5cc6a4be11 rs/http-push-simplify later to maint).
   (merge a81e42d235 rs/column-use-utf8-strnwidth later to maint).
   (merge 062a309d36 rs/remote-curl-use-argv-array later to maint).
   (merge 3b3c79f6c9 nr/diff-highlight-indent-fix later to maint).
   (merge 3444ec2eb2 wb/fsmonitor-bitmap-fix later to maint).
   (merge 10da030ab7 cb/pcre2-chartables-leakfix later to maint).
   (merge 60e6569a12 js/mingw-needs-hiding-fix later to maint).
   (merge 52bd3e4657 rl/gitweb-blame-prev-fix later to maint).

----------------------------------------------------------------

Changes since v2.23.0 are as follows:

Adam Roben (1):
      mingw: fix launching of externals from Unicode paths

Alex Henrie (4):
      doc: fix reference to --ignore-submodules
      commit-graph: remove a duplicate assignment
      diffcore-break: use a goto instead of a redundant if statement
      wrapper: use a loop instead of repetitive statements

Alexandr Miloslavskiy (4):
      contrib/buildsystems: fix Visual Studio Debug configuration
      t0028: fix test for UTF-16-LE-BOM
      t0028: add more tests
      t0061: fix test for argv[0] with spaces (MINGW only)

Ali Utku Selen (1):
      shallow.c: don't free unallocated slabs

Andrey Mazo (1):
      .mailmap: update email address of Andrey Mazo

Beat Bolli (3):
      grep: under --debug, show whether PCRE JIT is enabled
      utf8: use ARRAY_SIZE() in git_wcwidth()
      git-compat-util: fix documentation syntax

Ben Milman (1):
      repository-layout.txt: correct pluralization of 'object'

Ben Wijen (2):
      builtin/rebase.c: make sure the active branch isn't moved when autostashing
      builtin/rebase.c: Remove pointless message

Bert Wesarg (5):
      git-gui: convert new/amend commit radiobutton to checkbutton
      git-gui: add horizontal scrollbar to commit buffer
      builtin/submodule--helper: fix usage string for 'update-clone'
      format-patch: create leading components of output directory
      t4014: make output-directory tests self-contained

Birger Skogeng Pedersen (2):
      git-gui: add hotkeys to set widget focus
      git-gui: add hotkey to toggle "Amend Last Commit"

CB Bailey (1):
      t4038: Remove non-portable '-a' option passed to test_cmp

Cameron Steffen (1):
      doc: minor formatting fix

Carlo Marcelo Arenas Belón (7):
      http: use xmalloc with cURL
      grep: make sure NO_LIBPCRE1_JIT disable JIT in PCRE1
      grep: refactor and simplify PCRE1 support
      grep: skip UTF8 checks explicitly
      grep: make PCRE1 aware of custom allocator
      grep: make PCRE2 aware of custom allocator
      grep: avoid leak of chartables in PCRE2

Christian Couder (15):
      t0410: remove pipes after git commands
      fetch-object: make functions return an error code
      Add initial support for many promisor remotes
      promisor-remote: implement promisor_remote_get_direct()
      promisor-remote: add promisor_remote_reinit()
      promisor-remote: use repository_format_partial_clone
      Use promisor_remote_get_direct() and has_promisor_remote()
      promisor-remote: parse remote.*.partialclonefilter
      builtin/fetch: remove unique promisor remote limitation
      t0410: test fetching from many promisor remotes
      partial-clone: add multiple remotes in the doc
      remote: add promisor and partial clone config to the doc
      Remove fetch-object.{c,h} in favor of promisor-remote.{c,h}
      Move repository_format_partial_clone to promisor-remote.c
      Move core_partial_clone_filter_default to promisor-remote.c

Clément Chigot (1):
      contrib/svn-fe: fix shebang for svnrdump_sim.py

Corentin BOMPARD (1):
      pull, fetch: add --set-upstream option

David Turner (1):
      clarify documentation for remote helpers

Denton Liu (50):
      packfile.h: drop extern from function declaration
      t4014: drop unnecessary blank lines from test cases
      t3431: add rebase --fork-point tests
      t3432: test rebase fast-forward behavior
      completion: merge options for cherry-pick and revert
      completion: add --skip for cherry-pick and revert
      status: mention --skip for revert and cherry-pick
      rebase: refactor can_fast_forward into goto tower
      rebase: fast-forward --onto in more cases
      rebase: fast-forward --fork-point in more cases
      rebase: teach rebase --keep-base
      mingw: apply array.cocci rule
      compat/*.[ch]: remove extern from function declarations using spatch
      t4014: s/expected/expect/
      t4014: move closing sq onto its own line
      t4014: use sq for test case names
      t4014: remove spaces after redirect operators
      t4014: use indentable here-docs
      t4014: drop redirections to /dev/null
      t4014: let sed open its own files
      t4014: use test_line_count() where possible
      t4014: remove confusing pipe in check_threading()
      t4014: stop losing return codes of git commands
      Doc: add more detail for git-format-patch
      config/format.txt: specify default value of format.coverLetter
      t: use common $SQ variable
      completion: teach rebase to use __gitcomp_builtin
      completion: teach archive to use __gitcomp_builtin
      git-submodule.txt: fix AsciiDoc formatting error
      Makefile: strip leading ./ in $(LIB_H)
      Makefile: define THIRD_PARTY_SOURCES
      Makefile: strip leading ./ in $(FIND_SOURCE_FILES)
      Makefile: run coccicheck on more source files
      gitk: rename zh_CN.po to zh_cn.po
      promisor-remote.h: drop extern from function declaration
      apply.h: include missing header
      promisor-remote.h: include missing header
      pack-bitmap.h: remove magic number
      Makefile: emulate compile in $(HCO) target better
      test-lib: let test_merge() perform octopus merges
      t4214: use test_merge
      t4214: generate expect in their own test cases
      t4214: explicitly list tags in log
      t4214: demonstrate octopus graph coloring failure
      git-rev-list.txt: prune options in synopsis
      t4014: treat rev-list output as the expected value
      t0000: cover GIT_SKIP_TESTS blindspots
      pthread.h: manually align parameter lists
      Makefile: respect $(V) in %.cocci.patch target
      t7419: change test_must_fail to ! for grep

Derrick Stolee (15):
      repo-settings: consolidate some config settings
      t6501: use 'git gc' in quiet mode
      commit-graph: turn on commit-graph by default
      repo-settings: parse core.untrackedCache
      repo-settings: create feature.manyFiles setting
      repo-settings: create feature.experimental setting
      merge-recursive: introduce an enum for detect_directory_renames values
      checkout: add simple check for 'git checkout -b'
      fetch: add fetch.writeCommitGraph config setting
      treewide: rename 'struct exclude' to 'struct path_pattern'
      treewide: rename 'struct exclude_list' to 'struct pattern_list'
      treewide: rename 'EXCL_FLAG_' to 'PATTERN_FLAG_'
      treewide: rename 'exclude' methods to 'pattern'
      unpack-trees: rename 'is_excluded_from_list()'
      repo-settings: read an int for index.version

Elijah Newren (53):
      git-fast-import.txt: clarify that multiple merge commits are allowed
      checkout: remove duplicate code
      merge-recursive: be consistent with assert
      checkout: provide better conflict hunk description with detached HEAD
      merge-recursive: enforce opt->ancestor != NULL when calling merge_trees()
      merge-recursive: provide a better label for diff3 common ancestor
      merge-recursive: future-proof update_file_flags() against memory leaks
      merge-recursive: remove another implicit dependency on the_repository
      Ensure index matches head before invoking merge machinery, round N
      merge-recursive: exit early if index != head
      merge-recursive: remove useless parameter in merge_trees()
      merge-recursive: don't force external callers to do our logging
      cache-tree: share code between functions writing an index as a tree
      merge-recursive: fix some overly long lines
      merge-recursive: use common name for ancestors/common/base_list
      merge-recursive: rename 'mrtree' to 'result_tree', for clarity
      merge-recursive: rename merge_options argument to opt in header
      merge-recursive: move some definitions around to clean up the header
      merge-recursive: consolidate unnecessary fields in merge_options
      merge-recursive: comment and reorder the merge_options fields
      merge-recursive: avoid losing output and leaking memory holding that output
      merge-recursive: split internal fields into a separate struct
      merge-recursive: rename MERGE_RECURSIVE_* to MERGE_VARIANT_*
      merge-recursive: add sanity checks for relevant merge_options
      merge-recursive: alphabetize include list
      merge-options.txt: clarify meaning of various ff-related options
      t3427: accelerate this test by using fast-export and fast-import
      t6006: simplify, fix, and optimize empty message test
      Recommend git-filter-repo instead of git-filter-branch
      t9902: use a non-deprecated command for testing
      t7300: add testcases showing failure to clean specified pathspecs
      dir: fix typo in comment
      dir: fix off-by-one error in match_pathspec_item
      dir: also check directories for matching pathspecs
      dir: make the DO_MATCH_SUBMODULE code reusable for a non-submodule case
      dir: if our pathspec might match files under a dir, recurse into it
      dir: add commentary explaining match_pathspec_item's return value
      git-clean.txt: do not claim we will delete files with -n/--dry-run
      clean: disambiguate the definition of -d
      clean: avoid removing untracked files in a nested git repository
      clean: rewrap overly long line
      clean: fix theoretical path corruption
      fast-export: fix exporting a tag and nothing else
      dir: special case check for the possibility that pathspec is NULL
      merge-recursive: fix the diff3 common ancestor label for virtual commits
      fast-import: fix handling of deleted tags
      fast-import: allow tags to be identified by mark labels
      fast-import: add support for new 'alias' command
      fast-export: add support for --import-marks-if-exists
      fast-export: allow user to request tags be marked with --mark-tags
      t9350: add tests for tags of things other than a commit
      fast-export: handle nested tags
      merge-recursive: fix the fix to the diff3 common ancestor label

Emily Shaffer (1):
      promisor-remote: skip move_to_tail when no-op

Eric Wong (20):
      diff: use hashmap_entry_init on moved_entry.ent
      coccicheck: detect hashmap_entry.hash assignment
      packfile: use hashmap_entry in delta_base_cache_entry
      hashmap_entry_init takes "struct hashmap_entry *"
      hashmap_get_next takes "const struct hashmap_entry *"
      hashmap_add takes "struct hashmap_entry *"
      hashmap_get takes "const struct hashmap_entry *"
      hashmap_remove takes "const struct hashmap_entry *"
      hashmap_put takes "struct hashmap_entry *"
      introduce container_of macro
      hashmap_get_next returns "struct hashmap_entry *"
      hashmap: use *_entry APIs to wrap container_of
      hashmap_get{,_from_hash} return "struct hashmap_entry *"
      hashmap_cmp_fn takes hashmap_entry params
      hashmap: use *_entry APIs for iteration
      hashmap: hashmap_{put,remove} return hashmap_entry *
      hashmap: introduce hashmap_free_entries
      OFFSETOF_VAR macro to simplify hashmap iterators
      hashmap: remove type arg from hashmap_{get,put,remove}_entry
      hashmap_entry: remove first member requirement from docs

Gabriele Mazzotta (1):
      gitk: Do not mistake unchanged lines for submodule changes

Garima Singh (3):
      commit-graph: add --[no-]progress to write and verify
      commit-graph: emit trace2 cmd_mode for each sub-command
      sq_quote_buf_pretty: don't drop empty arguments

Hervé Beraud (1):
      hg-to-git: make it compatible with both python3 and python2

Jakob Jarmar (1):
      stash: avoid recursive hard reset on submodules

Jeff Hostetler (7):
      trace2: cleanup column alignment in perf target format
      trace2: trim whitespace in region messages in perf target format
      trace2: remove dead code in maybe_add_string_va()
      trace2: trim trailing whitespace in normal format error message
      quote: add sq_append_quote_argv_pretty()
      trace2: cleanup whitespace in normal format
      trace2: cleanup whitespace in perf format

Jeff King (32):
      setup_traverse_info(): stop copying oid
      tree-walk: drop oid from traverse_info
      tree-walk: use size_t consistently
      tree-walk: accept a raw length for traverse_path_len()
      tree-walk: add a strbuf wrapper for make_traverse_path()
      tree-walk: harden make_traverse_path() length computations
      revision: allow --end-of-options to end option parsing
      parse-options: allow --end-of-options as a synonym for "--"
      gitcli: document --end-of-options
      t1309: use short branch name in includeIf.onbranch test
      common-main: delay trace2 initialization
      config: stop checking whether the_repository is NULL
      t/perf: rename duplicate-numbered test script
      packfile: drop release_pack_memory()
      notes: avoid potential use-after-free during insertion
      fast-import: duplicate parsed encoding string
      fast-import: duplicate into history rather than passing ownership
      git-am: handle missing "author" when parsing commit
      pack-objects: use object_id in packlist_alloc()
      bulk-checkin: zero-initialize hashfile_checkpoint
      diff-delta: set size out-parameter to 0 for NULL delta
      test-read-cache: drop namelen variable
      pack-objects: drop packlist index_pos optimization
      commit-graph: turn off save_commit_buffer
      list-objects: don't queue root trees unless revs->tree_objects is set
      commit-graph: bump DIE_ON_LOAD check to actual load-time
      upload-pack: disable commit graph more gently for shallow traversal
      list-objects-filter: delay parsing of sparse oid
      list-objects-filter: use empty string instead of NULL for sparse "base"
      git_mkstemps_mode(): replace magic numbers with computed value
      add a Code of Conduct document
      CODE_OF_CONDUCT: mention individual project-leader emails

Johannes Schindelin (45):
      Drop unused git-rebase--am.sh
      t3400: stop referring to the scripted rebase
      .gitignore: there is no longer a built-in `git-rebase--interactive`
      sequencer: the `am` and `rebase--interactive` scripts are gone
      rebase: fold git-rebase--common into the -p backend
      t3427: add a clarifying comment
      t3427: simplify the `setup` test case significantly
      t3427: move the `filter-branch` invocation into the `setup` case
      t3427: condense the unnecessarily repetitive test cases into three
      t3427: fix erroneous assumption
      t3427: accommodate for the `rebase --merge` backend having been replaced
      t3427: fix another incorrect assumption
      rebase -r: support merge strategies other than `recursive`
      t/lib-rebase: prepare for testing `git rebase --rebase-merges`
      t3418: test `rebase -r` with merge strategies
      rebase -r: do not (re-)generate root commits with `--root` *and* `--onto`
      setup_git_directory(): handle UNC paths correctly
      Fix .git/ discovery at the root of UNC shares
      setup_git_directory(): handle UNC root paths correctly
      .gitignore: stop ignoring `.manifest` files
      Move git_sort(), a stable sort, into into libgit.a
      diffcore_rename(): use a stable sort
      ci: run `hdr-check` as part of the `Static Analysis` job
      range-diff: internally force `diff.noprefix=true`
      push: do not pretend to return `int` from `die_push_simple()`
      fetch: let --jobs=<n> parallelize --multiple, too
      stash apply: report status correctly even in a worktree's subdirectory
      msvc: avoid using minus operator on unsigned types
      winansi: use FLEX_ARRAY to avoid compiler warning
      compat/win32/path-utils.h: add #include guards
      msvc: ignore some libraries when linking
      msvc: handle DEVELOPER=1
      msvc: work around a bug in GetEnvironmentVariable()
      vcxproj: only copy `git-remote-http.exe` once it was built
      vcxproj: include more generated files
      test-tool run-command: learn to run (parts of) the testsuite
      tests: let --immediate and --write-junit-xml play well together
      ci: really use shallow clones on Azure Pipelines
      ci: also build and test with MS Visual Studio on Azure Pipelines
      xdiffi: fix typos and touch up comments
      doc(stash): clarify the description of `save`
      ci(visual-studio): use strict compile flags, and optimization
      ci(visual-studio): actually run the tests in parallel
      ci(osx): use new location of the `perforce` cask
      mingw: avoid a buffer overrun in `needs_hiding()`

Johannes Sixt (2):
      diff, log doc: say "patch text" instead of "patches"
      diff, log doc: small grammer, format, and language fixes

Jon Simons (2):
      t5616: test cloning/fetching with sparse:oid=<oid> filter
      list-objects-filter: give a more specific error sparse parsing error

Jonathan Tan (6):
      diff: skip GITLINK when lazy fetching missing objs
      transport-helper: skip ls-refs if unnecessary
      transport: teach all vtables to allow fetch first
      cache-tree: do not lazy-fetch tentative tree
      merge-recursive: symlink's descendants not in way
      send-pack: never fetch when checking exclusions

Josh Steadmon (7):
      t7503: verify proper hook execution
      fetch: add trace2 instrumentation
      push: add trace2 instrumentation
      docs: mention trace2 target-dir mode in git-config
      docs: clarify trace2 version invariants
      trace2: discard new traces if target directory has too many files
      trace2: write discard message to sentinel files

Junio C Hamano (17):
      First batch after Git 2.23
      t: use LF variable defined in the test harness
      t3005: remove unused variable
      Second batch
      Third batch
      SubmittingPatches: git-gui has a new maintainer
      Fourth batch
      Fifth batch
      Sixth batch
      transport: push codepath can take arbitrary repository
      Seventh batch
      Eighth batch
      Ninth batch
      Git 2.24-rc0
      Eleventh batch
      Git 2.24-rc1
      Git 2.24-rc2

Kunal Tyagi (1):
      add -i: show progress counter in the prompt

Martin Ågren (14):
      Documentation: wrap blocks with "--"
      git-merge-base.txt: render indentations correctly under Asciidoctor
      Documentation: wrap config listings in "----"
      git-ls-remote.txt: wrap shell listing in "----"
      git-receive-pack.txt: wrap shell [script] listing in "----"
      git-merge-index.txt: wrap shell listing in "----"
      gitweb.conf.txt: switch pluses to backticks to help Asciidoctor
      Doc/Makefile: give mansource/-version/-manual attributes
      asciidoctor-extensions: provide `<refmiscinfo/>`
      doc-diff: replace --cut-header-footer with --cut-footer
      user-manual.txt: add missing section label
      user-manual.txt: change header notation
      asciidoctor-extensions.rb: handle "book" doctype in linkgit
      user-manual.txt: render ASCII art correctly under Asciidoctor

Masaya Suzuki (1):
      fetch: use oidset to keep the want OIDs for faster lookup

Matheus Tavares (1):
      grep: fix worktree case in submodules

Matthew DeVore (10):
      list-objects-filter: encapsulate filter components
      list-objects-filter: put omits set in filter struct
      list-objects-filter-options: always supply *errbuf
      list-objects-filter: implement composite filters
      list-objects-filter-options: move error check up
      list-objects-filter-options: make filter_spec a string_list
      strbuf: give URL-encoding API a char predicate fn
      list-objects-filter-options: allow mult. --filter
      list-objects-filter-options: clean up use of ALLOC_GROW
      list-objects-filter-options: make parser void

Max Rothman (1):
      completion: add missing completions for log, diff, show

Maxim Belsky (1):
      completion: clarify installation instruction for zsh

Michael J Gruber (3):
      merge: do no-verify like commit
      git-merge: honor pre-merge-commit hook
      merge: --no-verify to bypass pre-merge-commit hook

Mike Hommey (3):
      notes: avoid leaking duplicate entries
      commit: free the right buffer in release_commit_memory
      http: don't leak urlmatch_config.vars

Mischa POSLAWSKY (1):
      ref-filter: initialize empty name or email fields

Norman Rasmussen (1):
      diff-highlight: fix a whitespace nit

Paul Mackerras (1):
      gitk: Make web links clickable

Paul Wise (1):
      gitk: Use right colour for remote refs in the "Tags and heads" dialog

Pedro Sousa (1):
      doc: MyFirstContribution: fix cmd placement instructions

Philip.McGraw (1):
      git-p4: auto-delete named temporary file

Phillip Wood (3):
      rebase -i: always update HEAD before rewording
      rebase -i: check for updated todo after squash and reword
      sequencer: simplify root commit creation

Pratyush Yadav (6):
      git-gui: call do_quit before destroying the main window
      git-gui: allow reverting selected lines
      git-gui: allow reverting selected hunk
      git-gui: return early when patch fails to apply
      git-gui: allow undoing last revert
      Documentation: update the location of the git-gui repo

René Scharfe (28):
      nedmalloc: do assignments only after the declaration section
      nedmalloc: avoid compiler warning about unused value
      archive-tar: report wrong pax extended header length
      archive-tar: fix pax extended header length calculation
      archive-tar: use size_t in strbuf_append_ext_header()
      archive-tar: turn length miscalculation warning into BUG
      parseopt: move definition of enum parse_opt_result up
      sha1-name: make sort_ambiguous_oid_array() thread-safe
      log-tree: always use return value of strbuf_detach()
      grep: use return value of strbuf_detach()
      trace2: use warning() directly in tr2_dst_malformed_warning()
      help: make help_unknown_ref() NORETURN
      tree: simplify parse_tree_indirect()
      tag: factor out get_tagged_oid()
      use get_tagged_oid()
      log: test --decorate-refs-exclude with --simplify-by-decoration
      log-tree: call load_ref_decorations() in get_name_decoration()
      rev-parse: demonstrate overflow of N for "foo^N" and "foo~N"
      sha1-name: check for overflow of N in "foo^N" and "foo~N"
      commit-graph: use commit_list_count()
      sha1_name: simplify strbuf handling in interpret_nth_prior_checkout()
      git: use COPY_ARRAY and MOVE_ARRAY in handle_alias()
      treewide: remove duplicate #include directives
      convert: fix handling of dashless UTF prefix in validate_encoding()
      tests: remove "cat foo" before "test_i18ngrep bar foo"
      http-push: simplify deleting a list item
      column: use utf8_strnwidth() to strip out ANSI color escapes
      remote-curl: use argv_array in parse_push()

Robert Luberda (1):
      gitweb: correctly store previous rev in javascript-actions mode

SZEDER Gábor (35):
      t5510-fetch: fix negated 'test_i18ngrep' invocation
      t5510-fetch: run non-httpd-specific test before sourcing 'lib-httpd.sh'
      t5703: run all non-httpd-specific tests before sourcing 'lib-httpd.sh'
      t: warn against adding non-httpd-specific tests after sourcing 'lib-httpd'
      t5318-commit-graph: use 'test_expect_code'
      commit-graph: turn a group of write-related macro flags into an enum
      commit-graph: error out on invalid commit oids in 'write --stdin-commits'
      t0000-basic: use realistic test script names in the verbose tests
      tests: show the test name and number at the start of verbose output
      completion: fix a typo in a comment
      completion: complete more values of more 'color.*' configuration variables
      completion: add tests for 'git config' completion
      completion: deduplicate configuration sections
      completion: use 'sort -u' to deduplicate config variable names
      completion: simplify inner 'case' pattern in __gitcomp()
      completion: split _git_config()
      completion: complete configuration sections and variable names for 'git -c'
      completion: complete values of configuration variables after 'git -c var='
      completion: complete config variables names and values for 'git clone -c'
      completion: complete config variables and values for 'git clone --config='
      worktree remove: clarify error message on dirty worktree
      diff: 'diff.indentHeuristic' is no longer experimental
      line-log: extract pathspec parsing from line ranges into a helper function
      line-log: avoid unnecessary full tree diffs
      t7300-clean: demonstrate deleting nested repo with an ignored file breakage
      t/lib-git-svn.sh: check GIT_TEST_SVN_HTTPD when running SVN HTTP tests
      ci: restore running httpd tests
      commit-graph: don't show progress percentages while expanding reachable commits
      Revert "progress: use term_clear_line()"
      Test the progress display
      t/helper: ignore only executable files
      travis-ci: do not skip successfully tested trees in debug mode
      name-rev: avoid cutoff timestamp underflow
      test-progress: fix test failures on big-endian systems
      ci: fix GCC install in the Travis CI GCC OSX job

Stephen Boyd (2):
      userdiff: add a builtin pattern for dts files
      userdiff: fix some corner cases in dts regex

Stephen P. Smith (2):
      Quit passing 'now' to date code
      test_date.c: remove reference to GIT_TEST_DATE_NOW

Sun Chao (1):
      pack-refs: always refresh after taking the lock file

Tanay Abhra (1):
      t1308-config-set: fix a test that has a typo

Taylor Blau (4):
      banned.h: fix vsprintf()'s ban message
      t/t5318: introduce failing 'git commit-graph write' tests
      commit-graph.c: handle commit parsing errors
      commit-graph.c: handle corrupt/missing trees

Thomas Gummerer (6):
      t0021: make sure clean filter runs
      push: disallow --all and refspecs when remote.<name>.mirror is set
      factor out refresh_and_write_cache function
      merge: use refresh_and_write_cache
      stash: make sure to write refreshed cache
      range-diff: don't segfault with mode-only changes

Tobias Klauser (1):
      git-svn: trim leading and trailing whitespaces in author name

Torsten Bögershausen (1):
      mingw: support UNC in git clone file://server/share/repo

Varun Naik (2):
      checkout.c: unstage empty deleted ita files
      restore: add test for deleted ita files

William Baker (2):
      fsmonitor: don't fill bitmap with entries to be removed
      t7519-status-fsmonitor: improve comments

YanKe (1):
      gitk: Add Chinese (zh_CN) translation

brian m. carlson (44):
      builtin/replace: make hash size independent
      patch-id: convert to use the_hash_algo
      fetch-pack: use parse_oid_hex
      builtin/receive-pack: switch to use the_hash_algo
      builtin/blame: switch uses of GIT_SHA1_HEXSZ to the_hash_algo
      builtin/rev-parse: switch to use the_hash_algo
      blame: remove needless comparison with GIT_SHA1_HEXSZ
      show-index: switch hard-coded constants to the_hash_algo
      connected: switch GIT_SHA1_HEXSZ to the_hash_algo
      bundle: switch to use the_hash_algo
      combine-diff: replace GIT_SHA1_HEXSZ with the_hash_algo
      config: use the_hash_algo in abbrev comparison
      sha1-lookup: switch hard-coded constants to the_hash_algo
      bisect: switch to using the_hash_algo
      sequencer: convert to use the_hash_algo
      pack-write: use hash_to_hex when writing checksums
      builtin/repack: write object IDs of the proper length
      builtin/worktree: switch null_sha1 to null_oid
      cache: remove null_sha1
      wt-status: convert struct wt_status to object_id
      packfile: replace sha1_to_hex
      builtin/index-pack: replace sha1_to_hex
      builtin/receive-pack: replace sha1_to_hex
      rerere: replace sha1_to_hex
      builtin/show-index: replace sha1_to_hex
      midx: switch to using the_hash_algo
      t3201: abstract away SHA-1-specific constants
      t3206: abstract away hash size constants
      t3301: abstract away SHA-1-specific constants
      t3305: make hash size independent
      t3306: abstract away SHA-1-specific constants
      t3404: abstract away SHA-1-specific constants
      t3430: avoid hard-coded object IDs
      t3506: make hash independent
      t3600: make hash size independent
      t3800: make hash-size independent
      t3903: abstract away SHA-1-specific constants
      t4000: make hash size independent
      t4002: make hash independent
      t4009: make hash size independent
      path: add a function to check for path suffix
      am: reload .gitattributes after patching it
      Documentation: fix build with Asciidoctor 2
      remote-curl: pass on atomic capability to remote side

Ævar Arnfjörð Bjarmason (20):
      log tests: test regex backends in "--encode=<enc>" tests
      grep: don't use PCRE2?_UTF8 with "log --encoding=<non-utf8>"
      t4210: skip more command-line encoding tests on MinGW
      grep: inline the return value of a function call used only once
      grep tests: move "grep binary" alongside the rest
      grep tests: move binary pattern tests into their own file
      grep: make the behavior for NUL-byte in patterns sane
      grep: drop support for \0 in --fixed-strings <pattern>
      grep: remove the kwset optimization
      grep: use PCRE v2 for optimized fixed-string search
      grep: remove overly paranoid BUG(...) code
      grep: stop "using" a custom JIT stack with PCRE v2
      grep: stop using a custom JIT stack with PCRE v1
      grep: consistently use "p->fixed" in compile_regexp()
      grep: create a "is_fixed" member in "grep_pat"
      grep: stess test PCRE v2 on invalid UTF-8 data
      grep: do not enter PCRE2_UTF mode on fixed matching
      t3432: distinguish "noop-same" v.s. "work-same" in "same head" tests
      t3432: test for --no-ff's interaction with fast-forward
      rebase tests: test linear branch topology


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.24.0-rc1
@ 2019-10-24  6:00  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2019-10-24  6:00 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.24.0-rc1 is now available for testing
at the usual places.  It is comprised of 511 non-merge commits
since v2.23.0, contributed by 66 people, 18 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.24.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.23.0 are as follows.
Welcome to the Git development community!

  Alexandr Miloslavskiy, Ali Utku Selen, Ben Milman, Cameron
  Steffen, CB Bailey, Garima Singh, Hervé Beraud, Jakob Jarmar,
  Kunal Tyagi, Maxim Belsky, Max Rothman, Norman Rasmussen, Paul
  Wise, Pedro Sousa, Philip.McGraw, Pratyush Yadav, William Baker,
  and YanKe.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Roben, Ævar Arnfjörð Bjarmason, Alex Henrie, Andrey Mazo,
  Beat Bolli, Ben Wijen, Bert Wesarg, Birger Skogeng Pedersen,
  brian m. carlson, Carlo Marcelo Arenas Belón, Christian
  Couder, Clément Chigot, Corentin BOMPARD, David Turner,
  Denton Liu, Derrick Stolee, Elijah Newren, Emily Shaffer,
  Eric Wong, Gabriele Mazzotta, Jeff Hostetler, Jeff King,
  Johannes Schindelin, Johannes Sixt, Jonathan Tan, Jon Simons,
  Josh Steadmon, Junio C Hamano, Martin Ågren, Masaya Suzuki,
  Matheus Tavares, Matthew DeVore, Michael J Gruber, Mike Hommey,
  Mischa POSLAWSKY, Paul Mackerras, Phillip Wood, René Scharfe,
  Stephen Boyd, Stephen P. Smith, Sun Chao, SZEDER Gábor,
  Tanay Abhra, Taylor Blau, Thomas Gummerer, Tobias Klauser,
  Torsten Bögershausen, and Varun Naik.

----------------------------------------------------------------

Git 2.24 Release Notes (draft)
==============================

Updates since v2.23
-------------------

Backward compatibility note

 * Although it is not officially deprecated, "filter-branch" is
   showing its age and alternatives are available.  From this release,
   we started to discourage its uses and hint people about
   filter-repo.

UI, Workflows & Features

 * We now have an active interim maintainer for the Git-Gui part of
   the system.  Praise and thank Pratyush Yadav for volunteering.

 * The command line parser learned "--end-of-options" notation; the
   standard convention for scripters to have hardcoded set of options
   first on the command line, and force the command to treat end-user
   input as non-options, has been to use "--" as the delimiter, but
   that would not work for commands that use "--" as a delimiter
   between revs and pathspec.

 * A mechanism to affect the default setting for a (related) group of
   configuration variables is introduced.

 * "git fetch" learned "--set-upstream" option to help those who first
   clone from their private fork they intend to push to, add the true
   upstream via "git remote add" and then "git fetch" from it.

 * Device-tree files learned their own userdiff patterns.
   (merge 3c81760bc6 sb/userdiff-dts later to maint).

 * "git rebase --rebase-merges" learned to drive different merge
   strategies and pass strategy specific options to them.

 * A new "pre-merge-commit" hook has been introduced.

 * Command line completion updates for "git -c var.name=val" have been
   added.

 * The lazy clone machinery has been taught that there can be more
   than one promisor remote and consult them in order when downloading
   missing objects on demand.

 * The list-objects-filter API (used to create a sparse/lazy clone)
   learned to take a combined filter specification.

 * The documentation and tests for "git format-patch" have been
   cleaned up.

 * On Windows, the root level of UNC share is now allowed to be used
   just like any other directory.

 * The command line completion support (in contrib/) learned about the
   "--skip" option of "git revert" and "git cherry-pick".

 * "git rebase --keep-base <upstream>" tries to find the original base
   of the topic being rebased and rebase on top of that same base,
   which is useful when running the "git rebase -i" (and its limited
   variant "git rebase -x").

   The command also has learned to fast-forward in more cases where it
   can instead of replaying to recreate identical commits.

 * A configuration variable tells "git fetch" to write the commit
   graph after finishing.

 * "git add -i" has been taught to show the total number of hunks and
   the hunks that has been processed so far when showing prompts.

 * "git fetch --jobs=<n>" allowed <n> parallel jobs when fetching
   submodules, but this did not apply to "git fetch --multiple" that
   fetches from multiple remote repositories.  It now does.

 * The installation instruction for zsh completion script (in
   contrib/) has been a bit improved.


Performance, Internal Implementation, Development Support etc.

 * The code to write commit-graph over given commit object names has
   been made a bit more robust.

 * The first line of verbose output from each test piece now carries
   the test name and number to help scanning with eyeballs.

 * Further clean-up of the initialization code.

 * xmalloc() used to have a mechanism to ditch memory and address
   space resources as the last resort upon seeing an allocation
   failure from the underlying malloc(), which made the code complex
   and thread-unsafe with dubious benefit, as major memory resource
   users already do limit their uses with various other mechanisms.
   It has been simplified away.

 * Unnecessary full-tree diff in "git log -L" machinery has been
   optimized away.

 * The http transport lacked some optimization the native transports
   learned to avoid unnecessary ref advertisement, which has been
   corrected.

 * Preparation for SHA-256 upgrade continues in the test department.
   (merge 0c37c41d13 bc/hash-independent-tests-part-5 later to maint).

 * The memory ownership model of the "git fast-import" got
   straightened out.

 * Output from trace2 subsystem is formatted more prettily now.

 * The internal code originally invented for ".gitignore" processing
   got reshuffled and renamed to make it less tied to "excluding" and
   stress more that it is about "matching", as it has been reused for
   things like sparse checkout specification that want to check if a
   path is "included".

 * "git stash" learned to write refreshed index back to disk.

 * Coccinelle checks are done on more source files than before now.

 * The cache-tree code has been taught to be less aggressive in
   attempting to see if a tree object it computed already exists in
   the repository.

 * The code to parse and use the commit-graph file has been made more
   robust against corrupted input.

 * The hg-to-git script (in contrib/) has been updated to work with
   Python 3.

 * Update the way build artifacts in t/helper/ directory are ignored.

 * Preparation for SHA-256 upgrade continues.

 * "git log --graph" for an octopus merge is sometimes colored
   incorrectly, which is demonstrated and documented but not yet
   fixed.

 * The trace2 output, when sending them to files in a designated
   directory, can populate the directory with too many files; a
   mechanism is introduced to set the maximum number of files and
   discard further logs when the maximum is reached.

 * We have adopted a Code-of-conduct document.
   (merge 3f9ef874a7 jk/coc later to maint).


Fixes since v2.23
-----------------

 * "git grep --recurse-submodules" that looks at the working tree
   files looked at the contents in the index in submodules, instead of
   files in the working tree.
   (merge 6a289d45c0 mt/grep-submodules-working-tree later to maint).

 * Codepaths to walk tree objects have been audited for integer
   overflows and hardened.
   (merge 5aa02f9868 jk/tree-walk-overflow later to maint).

 * "git pack-refs" can lose refs that are created while running, which
   is getting corrected.
   (merge a613d4f817 sc/pack-refs-deletion-racefix later to maint).

 * "git checkout" and "git restore" to re-populate the index from a
   tree-ish (typically HEAD) did not work correctly for a path that
   was removed and then added again with the intent-to-add bit, when
   the corresponding working tree file was empty.  This has been
   corrected.

 * Compilation fix.
   (merge 70597e8386 rs/nedalloc-fixlets later to maint).

 * "git gui" learned to call the clean-up procedure before exiting.
   (merge 0d88f3d2c5 py/git-gui-do-quit later to maint).

 * We promoted the "indent heuristics" that decides where to split
   diff hunks from experimental to the default a few years ago, but
   some stale documentation still marked it as experimental, which has
   been corrected.
   (merge 64e5e1fba1 sg/diff-indent-heuristic-non-experimental later to maint).

 * Fix a mismerge that happened in 2.22 timeframe.
   (merge acb7da05ac en/checkout-mismerge-fix later to maint).

 * "git archive" recorded incorrect length in extended pax header in
   some corner cases, which has been corrected.
   (merge 71d41ff651 rs/pax-extended-header-length-fix later to maint).

 * On-demand object fetching in lazy clone incorrectly tried to fetch
   commits from submodule projects, while still working in the
   superproject, which has been corrected.
   (merge a63694f523 jt/diff-lazy-fetch-submodule-fix later to maint).

 * Prepare get_short_oid() codepath to be thread-safe.
   (merge 7cfcb16b0e rs/sort-oid-array-thread-safe later to maint).

 * "for-each-ref" and friends that show refs did not protect themselves
   against ancient tags that did not record tagger names when asked to
   show "%(taggername)", which have been corrected.
   (merge 8b3f33ef11 mp/for-each-ref-missing-name-or-email later to maint).

 * The "git am" based backend of "git rebase" ignored the result of
   updating ".gitattributes" done in one step when replaying
   subsequent steps.
   (merge 2c65d90f75 bc/reread-attributes-during-rebase later to maint).

 * Tell cURL library to use the same malloc() implementation, with the
   xmalloc() wrapper, as the rest of the system, for consistency.
   (merge 93b980e58f cb/curl-use-xmalloc later to maint).

 * Build fix to adjust .gitignore to unignore a path that we started to track.
   (merge aac6ff7b5b js/visual-studio later to maint).

 * A few implementation fixes in the notes API.
   (merge 60fe477a0b mh/notes-duplicate-entries later to maint).

 * Fix an earlier regression to "git push --all" which should have
   been forbidden when the target remote repository is set to be a
   mirror.
   (merge 8e4c8af058 tg/push-all-in-mirror-forbidden later to maint).

 * Fix an earlier regression in the test suite, which mistakenly
   stopped running HTTPD tests.
   (merge 3960290675 sg/git-test-boolean later to maint).

 * "git rebase --autostash <upstream> <branch>", when <branch> is
   different from the current branch, incorrectly moved the tip of the
   current branch, which has been corrected.
   (merge bf1e28e0ad bw/rebase-autostash-keep-current-branch later to maint).

 * Update support for Asciidoctor documentation toolchain.
   (merge 83b0b8953e ma/asciidoctor-refmiscinfo later to maint).

 * Start using DocBook 5 (instead of DocBook 4.5) as Asciidoctor 2.0
   no longer works with the older one.
   (merge f6461b82b9 bc/doc-use-docbook-5 later to maint).

 * The markup used in user-manual has been updated to work better with
   asciidoctor.
   (merge c4d2f6143a ma/user-manual-markup-update later to maint).

 * Make sure the grep machinery does not abort when seeing a payload
   that is not UTF-8 even when JIT is not in use with PCRE1.
   (merge ad7c543e3b cb/skip-utf8-check-with-pcre1 later to maint).

 * The name of the blob object that stores the filter specification
   for sparse cloning/fetching was interpreted in a wrong place in the
   code, causing Git to abort.

 * "git log --decorate-refs-exclude=<pattern>" was incorrectly
   overruled when the "--simplify-by-decoration" option is used, which
   has been corrected.
   (merge 0cc7380d88 rs/simplify-by-deco-with-deco-refs-exclude later to maint).

 * The "upload-pack" (the counterpart of "git fetch") needs to disable
   commit-graph when responding to a shallow clone/fetch request, but
   the way this was done made Git panic, which has been corrected.

 * The object traversal machinery has been optimized not to load tree
   objects when we are only interested in commit history.
   (merge 72ed80c784 jk/list-objects-optim-wo-trees later to maint).

 * The object name parser for "Nth parent" syntax has been made more
   robust against integer overflows.
   (merge 59fa5f5a25 rs/nth-parent-parse later to maint).

 * The code used in following tags in "git fetch" has been optimized.
   (merge b7e2d8bca5 ms/fetch-follow-tag-optim later to maint).

 * Regression fix for progress output.
   (merge 2bb74b53a4 sg/progress-fix later to maint).

 * A bug in merge-recursive code that triggers when a branch with a
   symbolic link is merged with a branch that replaces it with a
   directory has been fixed.
   (merge 83e3ad3b12 jt/merge-recursive-symlink-is-not-a-dir-in-way later to maint).

 * The rename detection logic sorts a list of rename source candidates
   by similarity to pick the best candidate, which means that a tie
   between sources with the same similarity is broken by the original
   location in the original candidate list (which is sorted by path).
   Force the sorting by similarity done with a stable sort, which is
   not promised by system supplied qsort(3), to ensure consistent
   results across platforms.
   (merge 2049b8dc65 js/diff-rename-force-stable-sort later to maint).

 * The code to skip "UTF" and "UTF-" prefix, when computing an advice
   message, did not work correctly when the prefix was "UTF", which
   has been fixed.
   (merge b181676ce9 rs/convert-fix-utf-without-dash later to maint).

 * The author names taken from SVN repositories may have extra leading
   or trailing whitespaces, which are now munged away.
   (merge 4ddd4bddb1 tk/git-svn-trim-author-name later to maint).

 * "git rebase -i" showed a wrong HEAD while "reword" open the editor.
   (merge b0a3186140 pw/rebase-i-show-HEAD-to-reword later to maint).

 * A few simplification and bugfixes to PCRE interface.
   (merge c581e4a749 ab/pcre-jit-fixes later to maint).

 * PCRE fixes.
   (merge ff61681b46 cb/pcre1-cleanup later to maint).

 * "git range-diff" segfaulted when diff.noprefix configuration was
   used, as it blindly expected the patch it internally generates to
   have the standard a/ and b/ prefixes.  The command now forces the
   internal patch to be built without any prefix, not to be affected
   by any end-user configuration.
   (merge 937b76ed49 js/range-diff-noprefix later to maint).

 * "git stash apply" in a subdirectory of a secondary worktree failed
   to access the worktree correctly, which has been corrected.
   (merge dfd557c978 js/stash-apply-in-secondary-worktree later to maint).

 * The merge-recursive machiery is one of the most complex parts of
   the system that accumulated cruft over time.  This large series
   cleans up the implementation quite a bit.
   (merge b657047719 en/merge-recursive-cleanup later to maint).

 * Pretty-printed command line formatter (used in e.g. reporting the
   command being run by the tracing API) had a bug that lost an
   argument that is an empty string, which has been corrected.
   (merge ce2d7ed2fd gs/sq-quote-buf-pretty later to maint).

 * "git range-diff" failed to handle mode-only change, which has been
   corrected.
   (merge 2b6a9b13ca tg/range-diff-output-update later to maint).

 * Dev support update.
   (merge 4f3c1dc5d6 dl/allow-running-cocci-verbosely later to maint).

 * "git format-patch -o <outdir>" did an equivalent of "mkdir <outdir>"
   not "mkdir -p <outdir>", which was corrected.

 * "git stash save" lost local changes to submodules, which has been
   corrected.
   (merge 556895d0c8 jj/stash-reset-only-toplevel later to maint).

 * The atomic push over smart HTTP transport did not work, which has
   been corrected.
   (merge 6f1194246a bc/smart-http-atomic-push later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge d1387d3895 en/fast-import-merge-doc later to maint).
   (merge 1c24a54ea4 bm/repository-layout-typofix later to maint).
   (merge 415b770b88 ds/midx-expire-repack later to maint).
   (merge 19800bdc3f nd/diff-parseopt later to maint).
   (merge 58166c2e9d tg/t0021-racefix later to maint).
   (merge 7027f508c7 dl/compat-cleanup later to maint).
   (merge e770fbfeff jc/test-cleanup later to maint).
   (merge 1fd881d404 rs/trace2-dst-warning later to maint).
   (merge 7e92756751 mh/http-urlmatch-cleanup later to maint).
   (merge 9784f97321 mh/release-commit-memory-fix later to maint).
   (merge 60d198d022 tb/banned-vsprintf-namefix later to maint).
   (merge 80e3658647 rs/help-unknown-ref-does-not-return later to maint).
   (merge 0a8bc7068f dt/remote-helper-doc-re-lock-option later to maint).
   (merge 27fd1e4ea7 en/merge-options-ff-and-friends later to maint).
   (merge 502c386ff9 sg/clean-nested-repo-with-ignored later to maint).
   (merge 26e3d1cbea am/mailmap-andrey-mazo later to maint).
   (merge 47b27c96fa ss/get-time-cleanup later to maint).
   (merge dd2e50a84e jk/commit-graph-cleanup later to maint).
   (merge 4fd39c76e6 cs/pretty-formats-doc-typofix later to maint).
   (merge 40e747e89d dl/submodule-set-branch later to maint).
   (merge 689a146c91 rs/commit-graph-use-list-count later to maint).
   (merge 0eb7c37a8a js/doc-patch-text later to maint).
   (merge 4b3aa170d1 rs/nth-switch-code-simplification later to maint).
   (merge 0d4304c124 ah/doc-submodule-ignore-submodules later to maint).
   (merge af78249463 cc/svn-fe-py-shebang later to maint).
   (merge 7bd97d6dff rs/alias-use-copy-array later to maint).
   (merge c46ebc2496 sg/travis-help-debug later to maint).
   (merge 24c681794f ps/my-first-contribution-alphasort later to maint).
   (merge 75b2c15435 cb/do-not-use-test-cmp-with-a later to maint).
   (merge cda0d497e3 bw/submodule-helper-usage-fix later to maint).
   (merge fe0ed5d5e9 am/visual-studio-config-fix later to maint).
   (merge 2e09c01232 sg/name-rev-cutoff-underflow-fix later to maint).
   (merge ddb3c856f3 as/shallow-slab-use-fix later to maint).
   (merge 71f4960b91 js/mingw-spawn-with-spaces-in-path later to maint).
   (merge 53d687bf5f ah/cleanups later to maint).
   (merge f537485fa5 rs/test-remove-useless-debugging-cat later to maint).
   (merge 11a3d3aadd dl/rev-list-doc-cleanup later to maint).
   (merge d928a8388a am/t0028-utf16-tests later to maint).
   (merge b05b40930e dl/t0000-skip-test-test later to maint).
   (merge 03d3b1297c js/xdiffi-comment-updates later to maint).
   (merge 57d8f4b4c7 js/doc-stash-save later to maint).
   (merge 8c1cfd58e3 ta/t1308-typofix later to maint).
   (merge fa364ad790 bb/utf8-wcwidth-cleanup later to maint).
   (merge 68b69211b2 bb/compat-util-comment-fix later to maint).
   (merge 5cc6a4be11 rs/http-push-simplify later to maint).
   (merge a81e42d235 rs/column-use-utf8-strnwidth later to maint).
   (merge 062a309d36 rs/remote-curl-use-argv-array later to maint).
   (merge 3b3c79f6c9 nr/diff-highlight-indent-fix later to maint).
   (merge 3444ec2eb2 wb/fsmonitor-bitmap-fix later to maint).
   (merge 10da030ab7 cb/pcre2-chartables-leakfix later to maint).

----------------------------------------------------------------

Changes since v2.23.0 are as follows:

Adam Roben (1):
      mingw: fix launching of externals from Unicode paths

Alex Henrie (4):
      doc: fix reference to --ignore-submodules
      commit-graph: remove a duplicate assignment
      diffcore-break: use a goto instead of a redundant if statement
      wrapper: use a loop instead of repetitive statements

Alexandr Miloslavskiy (4):
      contrib/buildsystems: fix Visual Studio Debug configuration
      t0028: fix test for UTF-16-LE-BOM
      t0028: add more tests
      t0061: fix test for argv[0] with spaces (MINGW only)

Ali Utku Selen (1):
      shallow.c: don't free unallocated slabs

Andrey Mazo (1):
      .mailmap: update email address of Andrey Mazo

Beat Bolli (3):
      grep: under --debug, show whether PCRE JIT is enabled
      utf8: use ARRAY_SIZE() in git_wcwidth()
      git-compat-util: fix documentation syntax

Ben Milman (1):
      repository-layout.txt: correct pluralization of 'object'

Ben Wijen (2):
      builtin/rebase.c: make sure the active branch isn't moved when autostashing
      builtin/rebase.c: Remove pointless message

Bert Wesarg (5):
      git-gui: convert new/amend commit radiobutton to checkbutton
      git-gui: add horizontal scrollbar to commit buffer
      builtin/submodule--helper: fix usage string for 'update-clone'
      format-patch: create leading components of output directory
      t4014: make output-directory tests self-contained

Birger Skogeng Pedersen (2):
      git-gui: add hotkeys to set widget focus
      git-gui: add hotkey to toggle "Amend Last Commit"

CB Bailey (1):
      t4038: Remove non-portable '-a' option passed to test_cmp

Cameron Steffen (1):
      doc: minor formatting fix

Carlo Marcelo Arenas Belón (7):
      http: use xmalloc with cURL
      grep: make sure NO_LIBPCRE1_JIT disable JIT in PCRE1
      grep: refactor and simplify PCRE1 support
      grep: skip UTF8 checks explicitly
      grep: make PCRE1 aware of custom allocator
      grep: make PCRE2 aware of custom allocator
      grep: avoid leak of chartables in PCRE2

Christian Couder (15):
      t0410: remove pipes after git commands
      fetch-object: make functions return an error code
      Add initial support for many promisor remotes
      promisor-remote: implement promisor_remote_get_direct()
      promisor-remote: add promisor_remote_reinit()
      promisor-remote: use repository_format_partial_clone
      Use promisor_remote_get_direct() and has_promisor_remote()
      promisor-remote: parse remote.*.partialclonefilter
      builtin/fetch: remove unique promisor remote limitation
      t0410: test fetching from many promisor remotes
      partial-clone: add multiple remotes in the doc
      remote: add promisor and partial clone config to the doc
      Remove fetch-object.{c,h} in favor of promisor-remote.{c,h}
      Move repository_format_partial_clone to promisor-remote.c
      Move core_partial_clone_filter_default to promisor-remote.c

Clément Chigot (1):
      contrib/svn-fe: fix shebang for svnrdump_sim.py

Corentin BOMPARD (1):
      pull, fetch: add --set-upstream option

David Turner (1):
      clarify documentation for remote helpers

Denton Liu (50):
      packfile.h: drop extern from function declaration
      t4014: drop unnecessary blank lines from test cases
      t3431: add rebase --fork-point tests
      t3432: test rebase fast-forward behavior
      completion: merge options for cherry-pick and revert
      completion: add --skip for cherry-pick and revert
      status: mention --skip for revert and cherry-pick
      rebase: refactor can_fast_forward into goto tower
      rebase: fast-forward --onto in more cases
      rebase: fast-forward --fork-point in more cases
      rebase: teach rebase --keep-base
      mingw: apply array.cocci rule
      compat/*.[ch]: remove extern from function declarations using spatch
      t4014: s/expected/expect/
      t4014: move closing sq onto its own line
      t4014: use sq for test case names
      t4014: remove spaces after redirect operators
      t4014: use indentable here-docs
      t4014: drop redirections to /dev/null
      t4014: let sed open its own files
      t4014: use test_line_count() where possible
      t4014: remove confusing pipe in check_threading()
      t4014: stop losing return codes of git commands
      Doc: add more detail for git-format-patch
      config/format.txt: specify default value of format.coverLetter
      t: use common $SQ variable
      completion: teach rebase to use __gitcomp_builtin
      completion: teach archive to use __gitcomp_builtin
      git-submodule.txt: fix AsciiDoc formatting error
      Makefile: strip leading ./ in $(LIB_H)
      Makefile: define THIRD_PARTY_SOURCES
      Makefile: strip leading ./ in $(FIND_SOURCE_FILES)
      Makefile: run coccicheck on more source files
      gitk: rename zh_CN.po to zh_cn.po
      promisor-remote.h: drop extern from function declaration
      apply.h: include missing header
      promisor-remote.h: include missing header
      pack-bitmap.h: remove magic number
      Makefile: emulate compile in $(HCO) target better
      test-lib: let test_merge() perform octopus merges
      t4214: use test_merge
      t4214: generate expect in their own test cases
      t4214: explicitly list tags in log
      t4214: demonstrate octopus graph coloring failure
      git-rev-list.txt: prune options in synopsis
      t4014: treat rev-list output as the expected value
      t0000: cover GIT_SKIP_TESTS blindspots
      pthread.h: manually align parameter lists
      Makefile: respect $(V) in %.cocci.patch target
      t7419: change test_must_fail to ! for grep

Derrick Stolee (15):
      repo-settings: consolidate some config settings
      t6501: use 'git gc' in quiet mode
      commit-graph: turn on commit-graph by default
      repo-settings: parse core.untrackedCache
      repo-settings: create feature.manyFiles setting
      repo-settings: create feature.experimental setting
      merge-recursive: introduce an enum for detect_directory_renames values
      checkout: add simple check for 'git checkout -b'
      fetch: add fetch.writeCommitGraph config setting
      treewide: rename 'struct exclude' to 'struct path_pattern'
      treewide: rename 'struct exclude_list' to 'struct pattern_list'
      treewide: rename 'EXCL_FLAG_' to 'PATTERN_FLAG_'
      treewide: rename 'exclude' methods to 'pattern'
      unpack-trees: rename 'is_excluded_from_list()'
      repo-settings: read an int for index.version

Elijah Newren (53):
      git-fast-import.txt: clarify that multiple merge commits are allowed
      checkout: remove duplicate code
      merge-recursive: be consistent with assert
      checkout: provide better conflict hunk description with detached HEAD
      merge-recursive: enforce opt->ancestor != NULL when calling merge_trees()
      merge-recursive: provide a better label for diff3 common ancestor
      merge-recursive: future-proof update_file_flags() against memory leaks
      merge-recursive: remove another implicit dependency on the_repository
      Ensure index matches head before invoking merge machinery, round N
      merge-recursive: exit early if index != head
      merge-recursive: remove useless parameter in merge_trees()
      merge-recursive: don't force external callers to do our logging
      cache-tree: share code between functions writing an index as a tree
      merge-recursive: fix some overly long lines
      merge-recursive: use common name for ancestors/common/base_list
      merge-recursive: rename 'mrtree' to 'result_tree', for clarity
      merge-recursive: rename merge_options argument to opt in header
      merge-recursive: move some definitions around to clean up the header
      merge-recursive: consolidate unnecessary fields in merge_options
      merge-recursive: comment and reorder the merge_options fields
      merge-recursive: avoid losing output and leaking memory holding that output
      merge-recursive: split internal fields into a separate struct
      merge-recursive: rename MERGE_RECURSIVE_* to MERGE_VARIANT_*
      merge-recursive: add sanity checks for relevant merge_options
      merge-recursive: alphabetize include list
      merge-options.txt: clarify meaning of various ff-related options
      t3427: accelerate this test by using fast-export and fast-import
      t6006: simplify, fix, and optimize empty message test
      Recommend git-filter-repo instead of git-filter-branch
      t9902: use a non-deprecated command for testing
      t7300: add testcases showing failure to clean specified pathspecs
      dir: fix typo in comment
      dir: fix off-by-one error in match_pathspec_item
      dir: also check directories for matching pathspecs
      dir: make the DO_MATCH_SUBMODULE code reusable for a non-submodule case
      dir: if our pathspec might match files under a dir, recurse into it
      dir: add commentary explaining match_pathspec_item's return value
      git-clean.txt: do not claim we will delete files with -n/--dry-run
      clean: disambiguate the definition of -d
      clean: avoid removing untracked files in a nested git repository
      clean: rewrap overly long line
      clean: fix theoretical path corruption
      fast-export: fix exporting a tag and nothing else
      dir: special case check for the possibility that pathspec is NULL
      merge-recursive: fix the diff3 common ancestor label for virtual commits
      fast-import: fix handling of deleted tags
      fast-import: allow tags to be identified by mark labels
      fast-import: add support for new 'alias' command
      fast-export: add support for --import-marks-if-exists
      fast-export: allow user to request tags be marked with --mark-tags
      t9350: add tests for tags of things other than a commit
      fast-export: handle nested tags
      merge-recursive: fix the fix to the diff3 common ancestor label

Emily Shaffer (1):
      promisor-remote: skip move_to_tail when no-op

Eric Wong (20):
      diff: use hashmap_entry_init on moved_entry.ent
      coccicheck: detect hashmap_entry.hash assignment
      packfile: use hashmap_entry in delta_base_cache_entry
      hashmap_entry_init takes "struct hashmap_entry *"
      hashmap_get_next takes "const struct hashmap_entry *"
      hashmap_add takes "struct hashmap_entry *"
      hashmap_get takes "const struct hashmap_entry *"
      hashmap_remove takes "const struct hashmap_entry *"
      hashmap_put takes "struct hashmap_entry *"
      introduce container_of macro
      hashmap_get_next returns "struct hashmap_entry *"
      hashmap: use *_entry APIs to wrap container_of
      hashmap_get{,_from_hash} return "struct hashmap_entry *"
      hashmap_cmp_fn takes hashmap_entry params
      hashmap: use *_entry APIs for iteration
      hashmap: hashmap_{put,remove} return hashmap_entry *
      hashmap: introduce hashmap_free_entries
      OFFSETOF_VAR macro to simplify hashmap iterators
      hashmap: remove type arg from hashmap_{get,put,remove}_entry
      hashmap_entry: remove first member requirement from docs

Gabriele Mazzotta (1):
      gitk: Do not mistake unchanged lines for submodule changes

Garima Singh (3):
      commit-graph: add --[no-]progress to write and verify
      commit-graph: emit trace2 cmd_mode for each sub-command
      sq_quote_buf_pretty: don't drop empty arguments

Hervé Beraud (1):
      hg-to-git: make it compatible with both python3 and python2

Jakob Jarmar (1):
      stash: avoid recursive hard reset on submodules

Jeff Hostetler (7):
      trace2: cleanup column alignment in perf target format
      trace2: trim whitespace in region messages in perf target format
      trace2: remove dead code in maybe_add_string_va()
      trace2: trim trailing whitespace in normal format error message
      quote: add sq_append_quote_argv_pretty()
      trace2: cleanup whitespace in normal format
      trace2: cleanup whitespace in perf format

Jeff King (32):
      setup_traverse_info(): stop copying oid
      tree-walk: drop oid from traverse_info
      tree-walk: use size_t consistently
      tree-walk: accept a raw length for traverse_path_len()
      tree-walk: add a strbuf wrapper for make_traverse_path()
      tree-walk: harden make_traverse_path() length computations
      revision: allow --end-of-options to end option parsing
      parse-options: allow --end-of-options as a synonym for "--"
      gitcli: document --end-of-options
      t1309: use short branch name in includeIf.onbranch test
      common-main: delay trace2 initialization
      config: stop checking whether the_repository is NULL
      t/perf: rename duplicate-numbered test script
      packfile: drop release_pack_memory()
      notes: avoid potential use-after-free during insertion
      fast-import: duplicate parsed encoding string
      fast-import: duplicate into history rather than passing ownership
      git-am: handle missing "author" when parsing commit
      pack-objects: use object_id in packlist_alloc()
      bulk-checkin: zero-initialize hashfile_checkpoint
      diff-delta: set size out-parameter to 0 for NULL delta
      test-read-cache: drop namelen variable
      pack-objects: drop packlist index_pos optimization
      commit-graph: turn off save_commit_buffer
      list-objects: don't queue root trees unless revs->tree_objects is set
      commit-graph: bump DIE_ON_LOAD check to actual load-time
      upload-pack: disable commit graph more gently for shallow traversal
      list-objects-filter: delay parsing of sparse oid
      list-objects-filter: use empty string instead of NULL for sparse "base"
      git_mkstemps_mode(): replace magic numbers with computed value
      add a Code of Conduct document
      CODE_OF_CONDUCT: mention individual project-leader emails

Johannes Schindelin (44):
      Drop unused git-rebase--am.sh
      t3400: stop referring to the scripted rebase
      .gitignore: there is no longer a built-in `git-rebase--interactive`
      sequencer: the `am` and `rebase--interactive` scripts are gone
      rebase: fold git-rebase--common into the -p backend
      t3427: add a clarifying comment
      t3427: simplify the `setup` test case significantly
      t3427: move the `filter-branch` invocation into the `setup` case
      t3427: condense the unnecessarily repetitive test cases into three
      t3427: fix erroneous assumption
      t3427: accommodate for the `rebase --merge` backend having been replaced
      t3427: fix another incorrect assumption
      rebase -r: support merge strategies other than `recursive`
      t/lib-rebase: prepare for testing `git rebase --rebase-merges`
      t3418: test `rebase -r` with merge strategies
      rebase -r: do not (re-)generate root commits with `--root` *and* `--onto`
      setup_git_directory(): handle UNC paths correctly
      Fix .git/ discovery at the root of UNC shares
      setup_git_directory(): handle UNC root paths correctly
      .gitignore: stop ignoring `.manifest` files
      Move git_sort(), a stable sort, into into libgit.a
      diffcore_rename(): use a stable sort
      ci: run `hdr-check` as part of the `Static Analysis` job
      range-diff: internally force `diff.noprefix=true`
      push: do not pretend to return `int` from `die_push_simple()`
      fetch: let --jobs=<n> parallelize --multiple, too
      stash apply: report status correctly even in a worktree's subdirectory
      msvc: avoid using minus operator on unsigned types
      winansi: use FLEX_ARRAY to avoid compiler warning
      compat/win32/path-utils.h: add #include guards
      msvc: ignore some libraries when linking
      msvc: handle DEVELOPER=1
      msvc: work around a bug in GetEnvironmentVariable()
      vcxproj: only copy `git-remote-http.exe` once it was built
      vcxproj: include more generated files
      test-tool run-command: learn to run (parts of) the testsuite
      tests: let --immediate and --write-junit-xml play well together
      ci: really use shallow clones on Azure Pipelines
      ci: also build and test with MS Visual Studio on Azure Pipelines
      xdiffi: fix typos and touch up comments
      doc(stash): clarify the description of `save`
      ci(visual-studio): use strict compile flags, and optimization
      ci(visual-studio): actually run the tests in parallel
      ci(osx): use new location of the `perforce` cask

Johannes Sixt (2):
      diff, log doc: say "patch text" instead of "patches"
      diff, log doc: small grammer, format, and language fixes

Jon Simons (2):
      t5616: test cloning/fetching with sparse:oid=<oid> filter
      list-objects-filter: give a more specific error sparse parsing error

Jonathan Tan (6):
      diff: skip GITLINK when lazy fetching missing objs
      transport-helper: skip ls-refs if unnecessary
      transport: teach all vtables to allow fetch first
      cache-tree: do not lazy-fetch tentative tree
      merge-recursive: symlink's descendants not in way
      send-pack: never fetch when checking exclusions

Josh Steadmon (7):
      t7503: verify proper hook execution
      fetch: add trace2 instrumentation
      push: add trace2 instrumentation
      docs: mention trace2 target-dir mode in git-config
      docs: clarify trace2 version invariants
      trace2: discard new traces if target directory has too many files
      trace2: write discard message to sentinel files

Junio C Hamano (16):
      First batch after Git 2.23
      t: use LF variable defined in the test harness
      t3005: remove unused variable
      Second batch
      Third batch
      SubmittingPatches: git-gui has a new maintainer
      Fourth batch
      Fifth batch
      Sixth batch
      transport: push codepath can take arbitrary repository
      Seventh batch
      Eighth batch
      Ninth batch
      Git 2.24-rc0
      Eleventh batch
      Git 2.24-rc1

Kunal Tyagi (1):
      add -i: show progress counter in the prompt

Martin Ågren (14):
      Documentation: wrap blocks with "--"
      git-merge-base.txt: render indentations correctly under Asciidoctor
      Documentation: wrap config listings in "----"
      git-ls-remote.txt: wrap shell listing in "----"
      git-receive-pack.txt: wrap shell [script] listing in "----"
      git-merge-index.txt: wrap shell listing in "----"
      gitweb.conf.txt: switch pluses to backticks to help Asciidoctor
      Doc/Makefile: give mansource/-version/-manual attributes
      asciidoctor-extensions: provide `<refmiscinfo/>`
      doc-diff: replace --cut-header-footer with --cut-footer
      user-manual.txt: add missing section label
      user-manual.txt: change header notation
      asciidoctor-extensions.rb: handle "book" doctype in linkgit
      user-manual.txt: render ASCII art correctly under Asciidoctor

Masaya Suzuki (1):
      fetch: use oidset to keep the want OIDs for faster lookup

Matheus Tavares (1):
      grep: fix worktree case in submodules

Matthew DeVore (10):
      list-objects-filter: encapsulate filter components
      list-objects-filter: put omits set in filter struct
      list-objects-filter-options: always supply *errbuf
      list-objects-filter: implement composite filters
      list-objects-filter-options: move error check up
      list-objects-filter-options: make filter_spec a string_list
      strbuf: give URL-encoding API a char predicate fn
      list-objects-filter-options: allow mult. --filter
      list-objects-filter-options: clean up use of ALLOC_GROW
      list-objects-filter-options: make parser void

Max Rothman (1):
      completion: add missing completions for log, diff, show

Maxim Belsky (1):
      completion: clarify installation instruction for zsh

Michael J Gruber (3):
      merge: do no-verify like commit
      git-merge: honor pre-merge-commit hook
      merge: --no-verify to bypass pre-merge-commit hook

Mike Hommey (3):
      notes: avoid leaking duplicate entries
      commit: free the right buffer in release_commit_memory
      http: don't leak urlmatch_config.vars

Mischa POSLAWSKY (1):
      ref-filter: initialize empty name or email fields

Norman Rasmussen (1):
      diff-highlight: fix a whitespace nit

Paul Mackerras (1):
      gitk: Make web links clickable

Paul Wise (1):
      gitk: Use right colour for remote refs in the "Tags and heads" dialog

Pedro Sousa (1):
      doc: MyFirstContribution: fix cmd placement instructions

Philip.McGraw (1):
      git-p4: auto-delete named temporary file

Phillip Wood (3):
      rebase -i: always update HEAD before rewording
      rebase -i: check for updated todo after squash and reword
      sequencer: simplify root commit creation

Pratyush Yadav (6):
      git-gui: call do_quit before destroying the main window
      git-gui: allow reverting selected lines
      git-gui: allow reverting selected hunk
      git-gui: return early when patch fails to apply
      git-gui: allow undoing last revert
      Documentation: update the location of the git-gui repo

René Scharfe (28):
      nedmalloc: do assignments only after the declaration section
      nedmalloc: avoid compiler warning about unused value
      archive-tar: report wrong pax extended header length
      archive-tar: fix pax extended header length calculation
      archive-tar: use size_t in strbuf_append_ext_header()
      archive-tar: turn length miscalculation warning into BUG
      parseopt: move definition of enum parse_opt_result up
      sha1-name: make sort_ambiguous_oid_array() thread-safe
      log-tree: always use return value of strbuf_detach()
      grep: use return value of strbuf_detach()
      trace2: use warning() directly in tr2_dst_malformed_warning()
      help: make help_unknown_ref() NORETURN
      tree: simplify parse_tree_indirect()
      tag: factor out get_tagged_oid()
      use get_tagged_oid()
      log: test --decorate-refs-exclude with --simplify-by-decoration
      log-tree: call load_ref_decorations() in get_name_decoration()
      rev-parse: demonstrate overflow of N for "foo^N" and "foo~N"
      sha1-name: check for overflow of N in "foo^N" and "foo~N"
      commit-graph: use commit_list_count()
      sha1_name: simplify strbuf handling in interpret_nth_prior_checkout()
      git: use COPY_ARRAY and MOVE_ARRAY in handle_alias()
      treewide: remove duplicate #include directives
      convert: fix handling of dashless UTF prefix in validate_encoding()
      tests: remove "cat foo" before "test_i18ngrep bar foo"
      http-push: simplify deleting a list item
      column: use utf8_strnwidth() to strip out ANSI color escapes
      remote-curl: use argv_array in parse_push()

SZEDER Gábor (35):
      t5510-fetch: fix negated 'test_i18ngrep' invocation
      t5510-fetch: run non-httpd-specific test before sourcing 'lib-httpd.sh'
      t5703: run all non-httpd-specific tests before sourcing 'lib-httpd.sh'
      t: warn against adding non-httpd-specific tests after sourcing 'lib-httpd'
      t5318-commit-graph: use 'test_expect_code'
      commit-graph: turn a group of write-related macro flags into an enum
      commit-graph: error out on invalid commit oids in 'write --stdin-commits'
      t0000-basic: use realistic test script names in the verbose tests
      tests: show the test name and number at the start of verbose output
      completion: fix a typo in a comment
      completion: complete more values of more 'color.*' configuration variables
      completion: add tests for 'git config' completion
      completion: deduplicate configuration sections
      completion: use 'sort -u' to deduplicate config variable names
      completion: simplify inner 'case' pattern in __gitcomp()
      completion: split _git_config()
      completion: complete configuration sections and variable names for 'git -c'
      completion: complete values of configuration variables after 'git -c var='
      completion: complete config variables names and values for 'git clone -c'
      completion: complete config variables and values for 'git clone --config='
      worktree remove: clarify error message on dirty worktree
      diff: 'diff.indentHeuristic' is no longer experimental
      line-log: extract pathspec parsing from line ranges into a helper function
      line-log: avoid unnecessary full tree diffs
      t7300-clean: demonstrate deleting nested repo with an ignored file breakage
      t/lib-git-svn.sh: check GIT_TEST_SVN_HTTPD when running SVN HTTP tests
      ci: restore running httpd tests
      commit-graph: don't show progress percentages while expanding reachable commits
      Revert "progress: use term_clear_line()"
      Test the progress display
      t/helper: ignore only executable files
      travis-ci: do not skip successfully tested trees in debug mode
      name-rev: avoid cutoff timestamp underflow
      test-progress: fix test failures on big-endian systems
      ci: fix GCC install in the Travis CI GCC OSX job

Stephen Boyd (2):
      userdiff: add a builtin pattern for dts files
      userdiff: fix some corner cases in dts regex

Stephen P. Smith (2):
      Quit passing 'now' to date code
      test_date.c: remove reference to GIT_TEST_DATE_NOW

Sun Chao (1):
      pack-refs: always refresh after taking the lock file

Tanay Abhra (1):
      t1308-config-set: fix a test that has a typo

Taylor Blau (4):
      banned.h: fix vsprintf()'s ban message
      t/t5318: introduce failing 'git commit-graph write' tests
      commit-graph.c: handle commit parsing errors
      commit-graph.c: handle corrupt/missing trees

Thomas Gummerer (6):
      t0021: make sure clean filter runs
      push: disallow --all and refspecs when remote.<name>.mirror is set
      factor out refresh_and_write_cache function
      merge: use refresh_and_write_cache
      stash: make sure to write refreshed cache
      range-diff: don't segfault with mode-only changes

Tobias Klauser (1):
      git-svn: trim leading and trailing whitespaces in author name

Torsten Bögershausen (1):
      mingw: support UNC in git clone file://server/share/repo

Varun Naik (2):
      checkout.c: unstage empty deleted ita files
      restore: add test for deleted ita files

William Baker (1):
      fsmonitor: don't fill bitmap with entries to be removed

YanKe (1):
      gitk: Add Chinese (zh_CN) translation

brian m. carlson (44):
      builtin/replace: make hash size independent
      patch-id: convert to use the_hash_algo
      fetch-pack: use parse_oid_hex
      builtin/receive-pack: switch to use the_hash_algo
      builtin/blame: switch uses of GIT_SHA1_HEXSZ to the_hash_algo
      builtin/rev-parse: switch to use the_hash_algo
      blame: remove needless comparison with GIT_SHA1_HEXSZ
      show-index: switch hard-coded constants to the_hash_algo
      connected: switch GIT_SHA1_HEXSZ to the_hash_algo
      bundle: switch to use the_hash_algo
      combine-diff: replace GIT_SHA1_HEXSZ with the_hash_algo
      config: use the_hash_algo in abbrev comparison
      sha1-lookup: switch hard-coded constants to the_hash_algo
      bisect: switch to using the_hash_algo
      sequencer: convert to use the_hash_algo
      pack-write: use hash_to_hex when writing checksums
      builtin/repack: write object IDs of the proper length
      builtin/worktree: switch null_sha1 to null_oid
      cache: remove null_sha1
      wt-status: convert struct wt_status to object_id
      packfile: replace sha1_to_hex
      builtin/index-pack: replace sha1_to_hex
      builtin/receive-pack: replace sha1_to_hex
      rerere: replace sha1_to_hex
      builtin/show-index: replace sha1_to_hex
      midx: switch to using the_hash_algo
      t3201: abstract away SHA-1-specific constants
      t3206: abstract away hash size constants
      t3301: abstract away SHA-1-specific constants
      t3305: make hash size independent
      t3306: abstract away SHA-1-specific constants
      t3404: abstract away SHA-1-specific constants
      t3430: avoid hard-coded object IDs
      t3506: make hash independent
      t3600: make hash size independent
      t3800: make hash-size independent
      t3903: abstract away SHA-1-specific constants
      t4000: make hash size independent
      t4002: make hash independent
      t4009: make hash size independent
      path: add a function to check for path suffix
      am: reload .gitattributes after patching it
      Documentation: fix build with Asciidoctor 2
      remote-curl: pass on atomic capability to remote side

Ævar Arnfjörð Bjarmason (20):
      log tests: test regex backends in "--encode=<enc>" tests
      grep: don't use PCRE2?_UTF8 with "log --encoding=<non-utf8>"
      t4210: skip more command-line encoding tests on MinGW
      grep: inline the return value of a function call used only once
      grep tests: move "grep binary" alongside the rest
      grep tests: move binary pattern tests into their own file
      grep: make the behavior for NUL-byte in patterns sane
      grep: drop support for \0 in --fixed-strings <pattern>
      grep: remove the kwset optimization
      grep: use PCRE v2 for optimized fixed-string search
      grep: remove overly paranoid BUG(...) code
      grep: stop "using" a custom JIT stack with PCRE v2
      grep: stop using a custom JIT stack with PCRE v1
      grep: consistently use "p->fixed" in compile_regexp()
      grep: create a "is_fixed" member in "grep_pat"
      grep: stess test PCRE v2 on invalid UTF-8 data
      grep: do not enter PCRE2_UTF mode on fixed matching
      t3432: distinguish "noop-same" v.s. "work-same" in "same head" tests
      t3432: test for --no-ff's interaction with fast-forward
      rebase tests: test linear branch topology


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.24.0-rc0
@ 2019-10-18  6:29  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2019-10-18  6:29 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

An early preview release Git v2.24.0-rc0 is now available for
testing at the usual places.  It is comprised of 493 non-merge
commits since v2.23.0, contributed by 63 people, 15 of which are
new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.24.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.23.0 are as follows.
Welcome to the Git development community!

  Alexandr Miloslavskiy, Ali Utku Selen, Ben Milman, Cameron
  Steffen, CB Bailey, Garima Singh, Hervé Beraud, Jakob Jarmar,
  Kunal Tyagi, Max Rothman, Paul Wise, Pedro Sousa, Philip.McGraw,
  Pratyush Yadav, and YanKe.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Roben, Ævar Arnfjörð Bjarmason, Alex Henrie, Andrey Mazo,
  Beat Bolli, Ben Wijen, Bert Wesarg, Birger Skogeng Pedersen,
  brian m. carlson, Carlo Marcelo Arenas Belón, Christian
  Couder, Clément Chigot, Corentin BOMPARD, David Turner,
  Denton Liu, Derrick Stolee, Elijah Newren, Emily Shaffer,
  Eric Wong, Gabriele Mazzotta, Jeff Hostetler, Jeff King,
  Johannes Schindelin, Johannes Sixt, Jonathan Tan, Jon Simons,
  Josh Steadmon, Junio C Hamano, Martin Ågren, Masaya Suzuki,
  Matheus Tavares, Matthew DeVore, Michael J Gruber, Mike Hommey,
  Mischa POSLAWSKY, Paul Mackerras, Phillip Wood, René Scharfe,
  Stephen Boyd, Stephen P. Smith, Sun Chao, SZEDER Gábor,
  Tanay Abhra, Taylor Blau, Thomas Gummerer, Tobias Klauser,
  Torsten Bögershausen, and Varun Naik.

----------------------------------------------------------------

Git 2.24 Release Notes (draft)
==============================

Updates since v2.23
-------------------

Backward compatibility note

 * Although it is not officially deprecated, "filter-branch" is
   showing its age and alternatives are available.  From this release,
   we started to discourage its uses and hint people about
   filter-repo.

UI, Workflows & Features

 * We now have an active interim maintainer for the Git-Gui part of
   the system.  Praise and thank Pratyush Yadav for volunteering.

 * The command line parser learned "--end-of-options" notation; the
   standard convention for scripters to have hardcoded set of options
   first on the command line, and force the command to treat end-user
   input as non-options, has been to use "--" as the delimiter, but
   that would not work for commands that use "--" as a delimiter
   between revs and pathspec.

 * A mechanism to affect the default setting for a (related) group of
   configuration variables is introduced.

 * "git fetch" learned "--set-upstream" option to help those who first
   clone from their private fork they intend to push to, add the true
   upstream via "git remote add" and then "git fetch" from it.

 * Device-tree files learned their own userdiff patterns.
   (merge 3c81760bc6 sb/userdiff-dts later to maint).

 * "git rebase --rebase-merges" learned to drive different merge
   strategies and pass strategy specific options to them.

 * A new "pre-merge-commit" hook has been introduced.

 * Command line completion updates for "git -c var.name=val" have been
   added.

 * The lazy clone machinery has been taught that there can be more
   than one promisor remote and consult them in order when downloading
   missing objects on demand.

 * The list-objects-filter API (used to create a sparse/lazy clone)
   learned to take a combined filter specification.

 * The documentation and tests for "git format-patch" have been
   cleaned up.

 * On Windows, the root level of UNC share is now allowed to be used
   just like any other directory.

 * The command line completion support (in contrib/) learned about the
   "--skip" option of "git revert" and "git cherry-pick".

 * "git rebase --keep-base <upstream>" tries to find the original base
   of the topic being rebased and rebase on top of that same base,
   which is useful when running the "git rebase -i" (and its limited
   variant "git rebase -x").

   The command also has learned to fast-forward in more cases where it
   can instead of replaying to recreate identical commits.

 * A configuration variable tells "git fetch" to write the commit
   graph after finishing.

 * "git add -i" has been taught to show the total number of hunks and
   the hunks that has been processed so far when showing prompts.

 * "git fetch --jobs=<n>" allowed <n> parallel jobs when fetching
   submodules, but this did not apply to "git fetch --multiple" that
   fetches from multiple remote repositories.  It now does.


Performance, Internal Implementation, Development Support etc.

 * The code to write commit-graph over given commit object names has
   been made a bit more robust.

 * The first line of verbose output from each test piece now carries
   the test name and number to help scanning with eyeballs.

 * Further clean-up of the initialization code.

 * xmalloc() used to have a mechanism to ditch memory and address
   space resources as the last resort upon seeing an allocation
   failure from the underlying malloc(), which made the code complex
   and thread-unsafe with dubious benefit, as major memory resource
   users already do limit their uses with various other mechanisms.
   It has been simplified away.

 * Unnecessary full-tree diff in "git log -L" machinery has been
   optimized away.

 * The http transport lacked some optimization the native transports
   learned to avoid unnecessary ref advertisement, which has been
   corrected.

 * Preparation for SHA-256 upgrade continues in the test department.
   (merge 0c37c41d13 bc/hash-independent-tests-part-5 later to maint).

 * The memory ownership model of the "git fast-import" got
   straightened out.

 * Output from trace2 subsystem is formatted more prettily now.

 * The internal code originally invented for ".gitignore" processing
   got reshuffled and renamed to make it less tied to "excluding" and
   stress more that it is about "matching", as it has been reused for
   things like sparse checkout specification that want to check if a
   path is "included".

 * "git stash" learned to write refreshed index back to disk.

 * Coccinelle checks are done on more source files than before now.

 * The cache-tree code has been taught to be less aggressive in
   attempting to see if a tree object it computed already exists in
   the repository.

 * The code to parse and use the commit-graph file has been made more
   robust against corrupted input.

 * The hg-to-git script (in contrib/) has been updated to work with
   Python 3.

 * Update the way build artifacts in t/helper/ directory are ignored.

 * Preparation for SHA-256 upgrade continues.

 * "git log --graph" for an octopus merge is sometimes colored
   incorrectly, which is demonstrated and documented but not yet
   fixed.

 * The trace2 output, when sending them to files in a designated
   directory, can populate the directory with too many files; a
   mechanism is introduced to set the maximum number of files and
   discard further logs when the maximum is reached.

 * We have adopted a Code-of-conduct document.
   (merge 3f9ef874a7 jk/coc later to maint).


Fixes since v2.23
-----------------

 * "git grep --recurse-submodules" that looks at the working tree
   files looked at the contents in the index in submodules, instead of
   files in the working tree.
   (merge 6a289d45c0 mt/grep-submodules-working-tree later to maint).

 * Codepaths to walk tree objects have been audited for integer
   overflows and hardened.
   (merge 5aa02f9868 jk/tree-walk-overflow later to maint).

 * "git pack-refs" can lose refs that are created while running, which
   is getting corrected.
   (merge a613d4f817 sc/pack-refs-deletion-racefix later to maint).

 * "git checkout" and "git restore" to re-populate the index from a
   tree-ish (typically HEAD) did not work correctly for a path that
   was removed and then added again with the intent-to-add bit, when
   the corresponding working tree file was empty.  This has been
   corrected.

 * Compilation fix.
   (merge 70597e8386 rs/nedalloc-fixlets later to maint).

 * "git gui" learned to call the clean-up procedure before exiting.
   (merge 0d88f3d2c5 py/git-gui-do-quit later to maint).

 * We promoted the "indent heuristics" that decides where to split
   diff hunks from experimental to the default a few years ago, but
   some stale documentation still marked it as experimental, which has
   been corrected.
   (merge 64e5e1fba1 sg/diff-indent-heuristic-non-experimental later to maint).

 * Fix a mismerge that happened in 2.22 timeframe.
   (merge acb7da05ac en/checkout-mismerge-fix later to maint).

 * "git archive" recorded incorrect length in extended pax header in
   some corner cases, which has been corrected.
   (merge 71d41ff651 rs/pax-extended-header-length-fix later to maint).

 * On-demand object fetching in lazy clone incorrectly tried to fetch
   commits from submodule projects, while still working in the
   superproject, which has been corrected.
   (merge a63694f523 jt/diff-lazy-fetch-submodule-fix later to maint).

 * Prepare get_short_oid() codepath to be thread-safe.
   (merge 7cfcb16b0e rs/sort-oid-array-thread-safe later to maint).

 * "for-each-ref" and friends that show refs did not protect themselves
   against ancient tags that did not record tagger names when asked to
   show "%(taggername)", which have been corrected.
   (merge 8b3f33ef11 mp/for-each-ref-missing-name-or-email later to maint).

 * The "git am" based backend of "git rebase" ignored the result of
   updating ".gitattributes" done in one step when replaying
   subsequent steps.
   (merge 2c65d90f75 bc/reread-attributes-during-rebase later to maint).

 * Tell cURL library to use the same malloc() implementation, with the
   xmalloc() wrapper, as the rest of the system, for consistency.
   (merge 93b980e58f cb/curl-use-xmalloc later to maint).

 * Build fix to adjust .gitignore to unignore a path that we started to track.
   (merge aac6ff7b5b js/visual-studio later to maint).

 * A few implementation fixes in the notes API.
   (merge 60fe477a0b mh/notes-duplicate-entries later to maint).

 * Fix an earlier regression to "git push --all" which should have
   been forbidden when the target remote repository is set to be a
   mirror.
   (merge 8e4c8af058 tg/push-all-in-mirror-forbidden later to maint).

 * Fix an earlier regression in the test suite, which mistakenly
   stopped running HTTPD tests.
   (merge 3960290675 sg/git-test-boolean later to maint).

 * "git rebase --autostash <upstream> <branch>", when <branch> is
   different from the current branch, incorrectly moved the tip of the
   current branch, which has been corrected.
   (merge bf1e28e0ad bw/rebase-autostash-keep-current-branch later to maint).

 * Update support for Asciidoctor documentation toolchain.
   (merge 83b0b8953e ma/asciidoctor-refmiscinfo later to maint).

 * Start using DocBook 5 (instead of DocBook 4.5) as Asciidoctor 2.0
   no longer works with the older one.
   (merge f6461b82b9 bc/doc-use-docbook-5 later to maint).

 * The markup used in user-manual has been updated to work better with
   asciidoctor.
   (merge c4d2f6143a ma/user-manual-markup-update later to maint).

 * Make sure the grep machinery does not abort when seeing a payload
   that is not UTF-8 even when JIT is not in use with PCRE1.
   (merge ad7c543e3b cb/skip-utf8-check-with-pcre1 later to maint).

 * The name of the blob object that stores the filter specification
   for sparse cloning/fetching was interpreted in a wrong place in the
   code, causing Git to abort.

 * "git log --decorate-refs-exclude=<pattern>" was incorrectly
   overruled when the "--simplify-by-decoration" option is used, which
   has been corrected.
   (merge 0cc7380d88 rs/simplify-by-deco-with-deco-refs-exclude later to maint).

 * The "upload-pack" (the counterpart of "git fetch") needs to disable
   commit-graph when responding to a shallow clone/fetch request, but
   the way this was done made Git panic, which has been corrected.

 * The object traversal machinery has been optimized not to load tree
   objects when we are only interested in commit history.
   (merge 72ed80c784 jk/list-objects-optim-wo-trees later to maint).

 * The object name parser for "Nth parent" syntax has been made more
   robust against integer overflows.
   (merge 59fa5f5a25 rs/nth-parent-parse later to maint).

 * The code used in following tags in "git fetch" has been optimized.
   (merge b7e2d8bca5 ms/fetch-follow-tag-optim later to maint).

 * Regression fix for progress output.
   (merge 2bb74b53a4 sg/progress-fix later to maint).

 * A bug in merge-recursive code that triggers when a branch with a
   symbolic link is merged with a branch that replaces it with a
   directory has been fixed.
   (merge 83e3ad3b12 jt/merge-recursive-symlink-is-not-a-dir-in-way later to maint).

 * The rename detection logic sorts a list of rename source candidates
   by similarity to pick the best candidate, which means that a tie
   between sources with the same similarity is broken by the original
   location in the original candidate list (which is sorted by path).
   Force the sorting by similarity done with a stable sort, which is
   not promised by system supplied qsort(3), to ensure consistent
   results across platforms.
   (merge 2049b8dc65 js/diff-rename-force-stable-sort later to maint).

 * The code to skip "UTF" and "UTF-" prefix, when computing an advice
   message, did not work correctly when the prefix was "UTF", which
   has been fixed.
   (merge b181676ce9 rs/convert-fix-utf-without-dash later to maint).

 * The author names taken from SVN repositories may have extra leading
   or trailing whitespaces, which are now munged away.
   (merge 4ddd4bddb1 tk/git-svn-trim-author-name later to maint).

 * "git rebase -i" showed a wrong HEAD while "reword" open the editor.
   (merge b0a3186140 pw/rebase-i-show-HEAD-to-reword later to maint).

 * A few simplification and bugfixes to PCRE interface.
   (merge c581e4a749 ab/pcre-jit-fixes later to maint).

 * PCRE fixes.
   (merge ff61681b46 cb/pcre1-cleanup later to maint).

 * "git range-diff" segfaulted when diff.noprefix configuration was
   used, as it blindly expected the patch it internally generates to
   have the standard a/ and b/ prefixes.  The command now forces the
   internal patch to be built without any prefix, not to be affected
   by any end-user configuration.
   (merge 937b76ed49 js/range-diff-noprefix later to maint).

 * "git stash apply" in a subdirectory of a secondary worktree failed
   to access the worktree correctly, which has been corrected.
   (merge dfd557c978 js/stash-apply-in-secondary-worktree later to maint).

 * The merge-recursive machiery is one of the most complex parts of
   the system that accumulated cruft over time.  This large series
   cleans up the implementation quite a bit.
   (merge b657047719 en/merge-recursive-cleanup later to maint).

 * Pretty-printed command line formatter (used in e.g. reporting the
   command being run by the tracing API) had a bug that lost an
   argument that is an empty string, which has been corrected.
   (merge ce2d7ed2fd gs/sq-quote-buf-pretty later to maint).

 * "git range-diff" failed to handle mode-only change, which has been
   corrected.
   (merge 2b6a9b13ca tg/range-diff-output-update later to maint).

 * Dev support update.
   (merge 4f3c1dc5d6 dl/allow-running-cocci-verbosely later to maint).

 * "git format-patch -o <outdir>" did an equivalent of "mkdir <outdir>"
   not "mkdir -p <outdir>", which was corrected.

 * "git stash save" lost local changes to submodules, which has been
   corrected.
   (merge 556895d0c8 jj/stash-reset-only-toplevel later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge d1387d3895 en/fast-import-merge-doc later to maint).
   (merge 1c24a54ea4 bm/repository-layout-typofix later to maint).
   (merge 415b770b88 ds/midx-expire-repack later to maint).
   (merge 19800bdc3f nd/diff-parseopt later to maint).
   (merge 58166c2e9d tg/t0021-racefix later to maint).
   (merge 7027f508c7 dl/compat-cleanup later to maint).
   (merge e770fbfeff jc/test-cleanup later to maint).
   (merge 1fd881d404 rs/trace2-dst-warning later to maint).
   (merge 7e92756751 mh/http-urlmatch-cleanup later to maint).
   (merge 9784f97321 mh/release-commit-memory-fix later to maint).
   (merge 60d198d022 tb/banned-vsprintf-namefix later to maint).
   (merge 80e3658647 rs/help-unknown-ref-does-not-return later to maint).
   (merge 0a8bc7068f dt/remote-helper-doc-re-lock-option later to maint).
   (merge 27fd1e4ea7 en/merge-options-ff-and-friends later to maint).
   (merge 502c386ff9 sg/clean-nested-repo-with-ignored later to maint).
   (merge 26e3d1cbea am/mailmap-andrey-mazo later to maint).
   (merge 47b27c96fa ss/get-time-cleanup later to maint).
   (merge dd2e50a84e jk/commit-graph-cleanup later to maint).
   (merge 4fd39c76e6 cs/pretty-formats-doc-typofix later to maint).
   (merge 40e747e89d dl/submodule-set-branch later to maint).
   (merge 689a146c91 rs/commit-graph-use-list-count later to maint).
   (merge 0eb7c37a8a js/doc-patch-text later to maint).
   (merge 4b3aa170d1 rs/nth-switch-code-simplification later to maint).
   (merge 0d4304c124 ah/doc-submodule-ignore-submodules later to maint).
   (merge af78249463 cc/svn-fe-py-shebang later to maint).
   (merge 7bd97d6dff rs/alias-use-copy-array later to maint).
   (merge c46ebc2496 sg/travis-help-debug later to maint).
   (merge 24c681794f ps/my-first-contribution-alphasort later to maint).
   (merge 75b2c15435 cb/do-not-use-test-cmp-with-a later to maint).
   (merge cda0d497e3 bw/submodule-helper-usage-fix later to maint).
   (merge fe0ed5d5e9 am/visual-studio-config-fix later to maint).
   (merge 2e09c01232 sg/name-rev-cutoff-underflow-fix later to maint).
   (merge ddb3c856f3 as/shallow-slab-use-fix later to maint).
   (merge 71f4960b91 js/mingw-spawn-with-spaces-in-path later to maint).
   (merge 53d687bf5f ah/cleanups later to maint).
   (merge f537485fa5 rs/test-remove-useless-debugging-cat later to maint).
   (merge 11a3d3aadd dl/rev-list-doc-cleanup later to maint).
   (merge d928a8388a am/t0028-utf16-tests later to maint).
   (merge b05b40930e dl/t0000-skip-test-test later to maint).
   (merge 03d3b1297c js/xdiffi-comment-updates later to maint).
   (merge 57d8f4b4c7 js/doc-stash-save later to maint).
   (merge 8c1cfd58e3 ta/t1308-typofix later to maint).
   (merge fa364ad790 bb/utf8-wcwidth-cleanup later to maint).
   (merge 68b69211b2 bb/compat-util-comment-fix later to maint).
   (merge 5cc6a4be11 rs/http-push-simplify later to maint).
   (merge a81e42d235 rs/column-use-utf8-strnwidth later to maint).
   (merge 062a309d36 rs/remote-curl-use-argv-array later to maint).

----------------------------------------------------------------

Changes since v2.23.0 are as follows:

Adam Roben (1):
      mingw: fix launching of externals from Unicode paths

Alex Henrie (4):
      doc: fix reference to --ignore-submodules
      commit-graph: remove a duplicate assignment
      diffcore-break: use a goto instead of a redundant if statement
      wrapper: use a loop instead of repetitive statements

Alexandr Miloslavskiy (4):
      contrib/buildsystems: fix Visual Studio Debug configuration
      t0028: fix test for UTF-16-LE-BOM
      t0028: add more tests
      t0061: fix test for argv[0] with spaces (MINGW only)

Ali Utku Selen (1):
      shallow.c: don't free unallocated slabs

Andrey Mazo (1):
      .mailmap: update email address of Andrey Mazo

Beat Bolli (3):
      grep: under --debug, show whether PCRE JIT is enabled
      utf8: use ARRAY_SIZE() in git_wcwidth()
      git-compat-util: fix documentation syntax

Ben Milman (1):
      repository-layout.txt: correct pluralization of 'object'

Ben Wijen (2):
      builtin/rebase.c: make sure the active branch isn't moved when autostashing
      builtin/rebase.c: Remove pointless message

Bert Wesarg (4):
      git-gui: convert new/amend commit radiobutton to checkbutton
      git-gui: add horizontal scrollbar to commit buffer
      builtin/submodule--helper: fix usage string for 'update-clone'
      format-patch: create leading components of output directory

Birger Skogeng Pedersen (2):
      git-gui: add hotkeys to set widget focus
      git-gui: add hotkey to toggle "Amend Last Commit"

CB Bailey (1):
      t4038: Remove non-portable '-a' option passed to test_cmp

Cameron Steffen (1):
      doc: minor formatting fix

Carlo Marcelo Arenas Belón (4):
      http: use xmalloc with cURL
      grep: make sure NO_LIBPCRE1_JIT disable JIT in PCRE1
      grep: refactor and simplify PCRE1 support
      grep: skip UTF8 checks explicitly

Christian Couder (15):
      t0410: remove pipes after git commands
      fetch-object: make functions return an error code
      Add initial support for many promisor remotes
      promisor-remote: implement promisor_remote_get_direct()
      promisor-remote: add promisor_remote_reinit()
      promisor-remote: use repository_format_partial_clone
      Use promisor_remote_get_direct() and has_promisor_remote()
      promisor-remote: parse remote.*.partialclonefilter
      builtin/fetch: remove unique promisor remote limitation
      t0410: test fetching from many promisor remotes
      partial-clone: add multiple remotes in the doc
      remote: add promisor and partial clone config to the doc
      Remove fetch-object.{c,h} in favor of promisor-remote.{c,h}
      Move repository_format_partial_clone to promisor-remote.c
      Move core_partial_clone_filter_default to promisor-remote.c

Clément Chigot (1):
      contrib/svn-fe: fix shebang for svnrdump_sim.py

Corentin BOMPARD (1):
      pull, fetch: add --set-upstream option

David Turner (1):
      clarify documentation for remote helpers

Denton Liu (49):
      packfile.h: drop extern from function declaration
      t4014: drop unnecessary blank lines from test cases
      t3431: add rebase --fork-point tests
      t3432: test rebase fast-forward behavior
      completion: merge options for cherry-pick and revert
      completion: add --skip for cherry-pick and revert
      status: mention --skip for revert and cherry-pick
      rebase: refactor can_fast_forward into goto tower
      rebase: fast-forward --onto in more cases
      rebase: fast-forward --fork-point in more cases
      rebase: teach rebase --keep-base
      mingw: apply array.cocci rule
      compat/*.[ch]: remove extern from function declarations using spatch
      t4014: s/expected/expect/
      t4014: move closing sq onto its own line
      t4014: use sq for test case names
      t4014: remove spaces after redirect operators
      t4014: use indentable here-docs
      t4014: drop redirections to /dev/null
      t4014: let sed open its own files
      t4014: use test_line_count() where possible
      t4014: remove confusing pipe in check_threading()
      t4014: stop losing return codes of git commands
      Doc: add more detail for git-format-patch
      config/format.txt: specify default value of format.coverLetter
      t: use common $SQ variable
      completion: teach rebase to use __gitcomp_builtin
      completion: teach archive to use __gitcomp_builtin
      git-submodule.txt: fix AsciiDoc formatting error
      Makefile: strip leading ./ in $(LIB_H)
      Makefile: define THIRD_PARTY_SOURCES
      Makefile: strip leading ./ in $(FIND_SOURCE_FILES)
      Makefile: run coccicheck on more source files
      gitk: rename zh_CN.po to zh_cn.po
      promisor-remote.h: drop extern from function declaration
      apply.h: include missing header
      promisor-remote.h: include missing header
      pack-bitmap.h: remove magic number
      Makefile: emulate compile in $(HCO) target better
      test-lib: let test_merge() perform octopus merges
      t4214: use test_merge
      t4214: generate expect in their own test cases
      t4214: explicitly list tags in log
      t4214: demonstrate octopus graph coloring failure
      git-rev-list.txt: prune options in synopsis
      t4014: treat rev-list output as the expected value
      t0000: cover GIT_SKIP_TESTS blindspots
      pthread.h: manually align parameter lists
      Makefile: respect $(V) in %.cocci.patch target

Derrick Stolee (14):
      repo-settings: consolidate some config settings
      t6501: use 'git gc' in quiet mode
      commit-graph: turn on commit-graph by default
      repo-settings: parse core.untrackedCache
      repo-settings: create feature.manyFiles setting
      repo-settings: create feature.experimental setting
      merge-recursive: introduce an enum for detect_directory_renames values
      checkout: add simple check for 'git checkout -b'
      fetch: add fetch.writeCommitGraph config setting
      treewide: rename 'struct exclude' to 'struct path_pattern'
      treewide: rename 'struct exclude_list' to 'struct pattern_list'
      treewide: rename 'EXCL_FLAG_' to 'PATTERN_FLAG_'
      treewide: rename 'exclude' methods to 'pattern'
      unpack-trees: rename 'is_excluded_from_list()'

Elijah Newren (53):
      git-fast-import.txt: clarify that multiple merge commits are allowed
      checkout: remove duplicate code
      merge-recursive: be consistent with assert
      checkout: provide better conflict hunk description with detached HEAD
      merge-recursive: enforce opt->ancestor != NULL when calling merge_trees()
      merge-recursive: provide a better label for diff3 common ancestor
      merge-recursive: future-proof update_file_flags() against memory leaks
      merge-recursive: remove another implicit dependency on the_repository
      Ensure index matches head before invoking merge machinery, round N
      merge-recursive: exit early if index != head
      merge-recursive: remove useless parameter in merge_trees()
      merge-recursive: don't force external callers to do our logging
      cache-tree: share code between functions writing an index as a tree
      merge-recursive: fix some overly long lines
      merge-recursive: use common name for ancestors/common/base_list
      merge-recursive: rename 'mrtree' to 'result_tree', for clarity
      merge-recursive: rename merge_options argument to opt in header
      merge-recursive: move some definitions around to clean up the header
      merge-recursive: consolidate unnecessary fields in merge_options
      merge-recursive: comment and reorder the merge_options fields
      merge-recursive: avoid losing output and leaking memory holding that output
      merge-recursive: split internal fields into a separate struct
      merge-recursive: rename MERGE_RECURSIVE_* to MERGE_VARIANT_*
      merge-recursive: add sanity checks for relevant merge_options
      merge-recursive: alphabetize include list
      merge-options.txt: clarify meaning of various ff-related options
      t3427: accelerate this test by using fast-export and fast-import
      t6006: simplify, fix, and optimize empty message test
      Recommend git-filter-repo instead of git-filter-branch
      t9902: use a non-deprecated command for testing
      t7300: add testcases showing failure to clean specified pathspecs
      dir: fix typo in comment
      dir: fix off-by-one error in match_pathspec_item
      dir: also check directories for matching pathspecs
      dir: make the DO_MATCH_SUBMODULE code reusable for a non-submodule case
      dir: if our pathspec might match files under a dir, recurse into it
      dir: add commentary explaining match_pathspec_item's return value
      git-clean.txt: do not claim we will delete files with -n/--dry-run
      clean: disambiguate the definition of -d
      clean: avoid removing untracked files in a nested git repository
      clean: rewrap overly long line
      clean: fix theoretical path corruption
      fast-export: fix exporting a tag and nothing else
      dir: special case check for the possibility that pathspec is NULL
      merge-recursive: fix the diff3 common ancestor label for virtual commits
      fast-import: fix handling of deleted tags
      fast-import: allow tags to be identified by mark labels
      fast-import: add support for new 'alias' command
      fast-export: add support for --import-marks-if-exists
      fast-export: allow user to request tags be marked with --mark-tags
      t9350: add tests for tags of things other than a commit
      fast-export: handle nested tags
      merge-recursive: fix the fix to the diff3 common ancestor label

Emily Shaffer (1):
      promisor-remote: skip move_to_tail when no-op

Eric Wong (20):
      diff: use hashmap_entry_init on moved_entry.ent
      coccicheck: detect hashmap_entry.hash assignment
      packfile: use hashmap_entry in delta_base_cache_entry
      hashmap_entry_init takes "struct hashmap_entry *"
      hashmap_get_next takes "const struct hashmap_entry *"
      hashmap_add takes "struct hashmap_entry *"
      hashmap_get takes "const struct hashmap_entry *"
      hashmap_remove takes "const struct hashmap_entry *"
      hashmap_put takes "struct hashmap_entry *"
      introduce container_of macro
      hashmap_get_next returns "struct hashmap_entry *"
      hashmap: use *_entry APIs to wrap container_of
      hashmap_get{,_from_hash} return "struct hashmap_entry *"
      hashmap_cmp_fn takes hashmap_entry params
      hashmap: use *_entry APIs for iteration
      hashmap: hashmap_{put,remove} return hashmap_entry *
      hashmap: introduce hashmap_free_entries
      OFFSETOF_VAR macro to simplify hashmap iterators
      hashmap: remove type arg from hashmap_{get,put,remove}_entry
      hashmap_entry: remove first member requirement from docs

Gabriele Mazzotta (1):
      gitk: Do not mistake unchanged lines for submodule changes

Garima Singh (3):
      commit-graph: add --[no-]progress to write and verify
      commit-graph: emit trace2 cmd_mode for each sub-command
      sq_quote_buf_pretty: don't drop empty arguments

Hervé Beraud (1):
      hg-to-git: make it compatible with both python3 and python2

Jakob Jarmar (1):
      stash: avoid recursive hard reset on submodules

Jeff Hostetler (7):
      trace2: cleanup column alignment in perf target format
      trace2: trim whitespace in region messages in perf target format
      trace2: remove dead code in maybe_add_string_va()
      trace2: trim trailing whitespace in normal format error message
      quote: add sq_append_quote_argv_pretty()
      trace2: cleanup whitespace in normal format
      trace2: cleanup whitespace in perf format

Jeff King (32):
      setup_traverse_info(): stop copying oid
      tree-walk: drop oid from traverse_info
      tree-walk: use size_t consistently
      tree-walk: accept a raw length for traverse_path_len()
      tree-walk: add a strbuf wrapper for make_traverse_path()
      tree-walk: harden make_traverse_path() length computations
      revision: allow --end-of-options to end option parsing
      parse-options: allow --end-of-options as a synonym for "--"
      gitcli: document --end-of-options
      t1309: use short branch name in includeIf.onbranch test
      common-main: delay trace2 initialization
      config: stop checking whether the_repository is NULL
      t/perf: rename duplicate-numbered test script
      packfile: drop release_pack_memory()
      notes: avoid potential use-after-free during insertion
      fast-import: duplicate parsed encoding string
      fast-import: duplicate into history rather than passing ownership
      git-am: handle missing "author" when parsing commit
      pack-objects: use object_id in packlist_alloc()
      bulk-checkin: zero-initialize hashfile_checkpoint
      diff-delta: set size out-parameter to 0 for NULL delta
      test-read-cache: drop namelen variable
      pack-objects: drop packlist index_pos optimization
      commit-graph: turn off save_commit_buffer
      list-objects: don't queue root trees unless revs->tree_objects is set
      commit-graph: bump DIE_ON_LOAD check to actual load-time
      upload-pack: disable commit graph more gently for shallow traversal
      list-objects-filter: delay parsing of sparse oid
      list-objects-filter: use empty string instead of NULL for sparse "base"
      git_mkstemps_mode(): replace magic numbers with computed value
      add a Code of Conduct document
      CODE_OF_CONDUCT: mention individual project-leader emails

Johannes Schindelin (41):
      Drop unused git-rebase--am.sh
      t3400: stop referring to the scripted rebase
      .gitignore: there is no longer a built-in `git-rebase--interactive`
      sequencer: the `am` and `rebase--interactive` scripts are gone
      rebase: fold git-rebase--common into the -p backend
      t3427: add a clarifying comment
      t3427: simplify the `setup` test case significantly
      t3427: move the `filter-branch` invocation into the `setup` case
      t3427: condense the unnecessarily repetitive test cases into three
      t3427: fix erroneous assumption
      t3427: accommodate for the `rebase --merge` backend having been replaced
      t3427: fix another incorrect assumption
      rebase -r: support merge strategies other than `recursive`
      t/lib-rebase: prepare for testing `git rebase --rebase-merges`
      t3418: test `rebase -r` with merge strategies
      rebase -r: do not (re-)generate root commits with `--root` *and* `--onto`
      setup_git_directory(): handle UNC paths correctly
      Fix .git/ discovery at the root of UNC shares
      setup_git_directory(): handle UNC root paths correctly
      .gitignore: stop ignoring `.manifest` files
      Move git_sort(), a stable sort, into into libgit.a
      diffcore_rename(): use a stable sort
      ci: run `hdr-check` as part of the `Static Analysis` job
      range-diff: internally force `diff.noprefix=true`
      push: do not pretend to return `int` from `die_push_simple()`
      fetch: let --jobs=<n> parallelize --multiple, too
      stash apply: report status correctly even in a worktree's subdirectory
      msvc: avoid using minus operator on unsigned types
      winansi: use FLEX_ARRAY to avoid compiler warning
      compat/win32/path-utils.h: add #include guards
      msvc: ignore some libraries when linking
      msvc: handle DEVELOPER=1
      msvc: work around a bug in GetEnvironmentVariable()
      vcxproj: only copy `git-remote-http.exe` once it was built
      vcxproj: include more generated files
      test-tool run-command: learn to run (parts of) the testsuite
      tests: let --immediate and --write-junit-xml play well together
      ci: really use shallow clones on Azure Pipelines
      ci: also build and test with MS Visual Studio on Azure Pipelines
      xdiffi: fix typos and touch up comments
      doc(stash): clarify the description of `save`

Johannes Sixt (2):
      diff, log doc: say "patch text" instead of "patches"
      diff, log doc: small grammer, format, and language fixes

Jon Simons (2):
      t5616: test cloning/fetching with sparse:oid=<oid> filter
      list-objects-filter: give a more specific error sparse parsing error

Jonathan Tan (6):
      diff: skip GITLINK when lazy fetching missing objs
      transport-helper: skip ls-refs if unnecessary
      transport: teach all vtables to allow fetch first
      cache-tree: do not lazy-fetch tentative tree
      merge-recursive: symlink's descendants not in way
      send-pack: never fetch when checking exclusions

Josh Steadmon (7):
      t7503: verify proper hook execution
      fetch: add trace2 instrumentation
      push: add trace2 instrumentation
      docs: mention trace2 target-dir mode in git-config
      docs: clarify trace2 version invariants
      trace2: discard new traces if target directory has too many files
      trace2: write discard message to sentinel files

Junio C Hamano (14):
      First batch after Git 2.23
      t: use LF variable defined in the test harness
      t3005: remove unused variable
      Second batch
      Third batch
      SubmittingPatches: git-gui has a new maintainer
      Fourth batch
      Fifth batch
      Sixth batch
      transport: push codepath can take arbitrary repository
      Seventh batch
      Eighth batch
      Ninth batch
      Git 2.24-rc0

Kunal Tyagi (1):
      add -i: show progress counter in the prompt

Martin Ågren (14):
      Documentation: wrap blocks with "--"
      git-merge-base.txt: render indentations correctly under Asciidoctor
      Documentation: wrap config listings in "----"
      git-ls-remote.txt: wrap shell listing in "----"
      git-receive-pack.txt: wrap shell [script] listing in "----"
      git-merge-index.txt: wrap shell listing in "----"
      gitweb.conf.txt: switch pluses to backticks to help Asciidoctor
      Doc/Makefile: give mansource/-version/-manual attributes
      asciidoctor-extensions: provide `<refmiscinfo/>`
      doc-diff: replace --cut-header-footer with --cut-footer
      user-manual.txt: add missing section label
      user-manual.txt: change header notation
      asciidoctor-extensions.rb: handle "book" doctype in linkgit
      user-manual.txt: render ASCII art correctly under Asciidoctor

Masaya Suzuki (1):
      fetch: use oidset to keep the want OIDs for faster lookup

Matheus Tavares (1):
      grep: fix worktree case in submodules

Matthew DeVore (10):
      list-objects-filter: encapsulate filter components
      list-objects-filter: put omits set in filter struct
      list-objects-filter-options: always supply *errbuf
      list-objects-filter: implement composite filters
      list-objects-filter-options: move error check up
      list-objects-filter-options: make filter_spec a string_list
      strbuf: give URL-encoding API a char predicate fn
      list-objects-filter-options: allow mult. --filter
      list-objects-filter-options: clean up use of ALLOC_GROW
      list-objects-filter-options: make parser void

Max Rothman (1):
      completion: add missing completions for log, diff, show

Michael J Gruber (3):
      merge: do no-verify like commit
      git-merge: honor pre-merge-commit hook
      merge: --no-verify to bypass pre-merge-commit hook

Mike Hommey (3):
      notes: avoid leaking duplicate entries
      commit: free the right buffer in release_commit_memory
      http: don't leak urlmatch_config.vars

Mischa POSLAWSKY (1):
      ref-filter: initialize empty name or email fields

Paul Mackerras (1):
      gitk: Make web links clickable

Paul Wise (1):
      gitk: Use right colour for remote refs in the "Tags and heads" dialog

Pedro Sousa (1):
      doc: MyFirstContribution: fix cmd placement instructions

Philip.McGraw (1):
      git-p4: auto-delete named temporary file

Phillip Wood (3):
      rebase -i: always update HEAD before rewording
      rebase -i: check for updated todo after squash and reword
      sequencer: simplify root commit creation

Pratyush Yadav (6):
      git-gui: call do_quit before destroying the main window
      git-gui: allow reverting selected lines
      git-gui: allow reverting selected hunk
      git-gui: return early when patch fails to apply
      git-gui: allow undoing last revert
      Documentation: update the location of the git-gui repo

René Scharfe (28):
      nedmalloc: do assignments only after the declaration section
      nedmalloc: avoid compiler warning about unused value
      archive-tar: report wrong pax extended header length
      archive-tar: fix pax extended header length calculation
      archive-tar: use size_t in strbuf_append_ext_header()
      archive-tar: turn length miscalculation warning into BUG
      parseopt: move definition of enum parse_opt_result up
      sha1-name: make sort_ambiguous_oid_array() thread-safe
      log-tree: always use return value of strbuf_detach()
      grep: use return value of strbuf_detach()
      trace2: use warning() directly in tr2_dst_malformed_warning()
      help: make help_unknown_ref() NORETURN
      tree: simplify parse_tree_indirect()
      tag: factor out get_tagged_oid()
      use get_tagged_oid()
      log: test --decorate-refs-exclude with --simplify-by-decoration
      log-tree: call load_ref_decorations() in get_name_decoration()
      rev-parse: demonstrate overflow of N for "foo^N" and "foo~N"
      sha1-name: check for overflow of N in "foo^N" and "foo~N"
      commit-graph: use commit_list_count()
      sha1_name: simplify strbuf handling in interpret_nth_prior_checkout()
      git: use COPY_ARRAY and MOVE_ARRAY in handle_alias()
      treewide: remove duplicate #include directives
      convert: fix handling of dashless UTF prefix in validate_encoding()
      tests: remove "cat foo" before "test_i18ngrep bar foo"
      http-push: simplify deleting a list item
      column: use utf8_strnwidth() to strip out ANSI color escapes
      remote-curl: use argv_array in parse_push()

SZEDER Gábor (33):
      t5510-fetch: fix negated 'test_i18ngrep' invocation
      t5510-fetch: run non-httpd-specific test before sourcing 'lib-httpd.sh'
      t5703: run all non-httpd-specific tests before sourcing 'lib-httpd.sh'
      t: warn against adding non-httpd-specific tests after sourcing 'lib-httpd'
      t5318-commit-graph: use 'test_expect_code'
      commit-graph: turn a group of write-related macro flags into an enum
      commit-graph: error out on invalid commit oids in 'write --stdin-commits'
      t0000-basic: use realistic test script names in the verbose tests
      tests: show the test name and number at the start of verbose output
      completion: fix a typo in a comment
      completion: complete more values of more 'color.*' configuration variables
      completion: add tests for 'git config' completion
      completion: deduplicate configuration sections
      completion: use 'sort -u' to deduplicate config variable names
      completion: simplify inner 'case' pattern in __gitcomp()
      completion: split _git_config()
      completion: complete configuration sections and variable names for 'git -c'
      completion: complete values of configuration variables after 'git -c var='
      completion: complete config variables names and values for 'git clone -c'
      completion: complete config variables and values for 'git clone --config='
      worktree remove: clarify error message on dirty worktree
      diff: 'diff.indentHeuristic' is no longer experimental
      line-log: extract pathspec parsing from line ranges into a helper function
      line-log: avoid unnecessary full tree diffs
      t7300-clean: demonstrate deleting nested repo with an ignored file breakage
      t/lib-git-svn.sh: check GIT_TEST_SVN_HTTPD when running SVN HTTP tests
      ci: restore running httpd tests
      commit-graph: don't show progress percentages while expanding reachable commits
      Revert "progress: use term_clear_line()"
      Test the progress display
      t/helper: ignore only executable files
      travis-ci: do not skip successfully tested trees in debug mode
      name-rev: avoid cutoff timestamp underflow

Stephen Boyd (1):
      userdiff: add a builtin pattern for dts files

Stephen P. Smith (2):
      Quit passing 'now' to date code
      test_date.c: remove reference to GIT_TEST_DATE_NOW

Sun Chao (1):
      pack-refs: always refresh after taking the lock file

Tanay Abhra (1):
      t1308-config-set: fix a test that has a typo

Taylor Blau (4):
      banned.h: fix vsprintf()'s ban message
      t/t5318: introduce failing 'git commit-graph write' tests
      commit-graph.c: handle commit parsing errors
      commit-graph.c: handle corrupt/missing trees

Thomas Gummerer (6):
      t0021: make sure clean filter runs
      push: disallow --all and refspecs when remote.<name>.mirror is set
      factor out refresh_and_write_cache function
      merge: use refresh_and_write_cache
      stash: make sure to write refreshed cache
      range-diff: don't segfault with mode-only changes

Tobias Klauser (1):
      git-svn: trim leading and trailing whitespaces in author name

Torsten Bögershausen (1):
      mingw: support UNC in git clone file://server/share/repo

Varun Naik (2):
      checkout.c: unstage empty deleted ita files
      restore: add test for deleted ita files

YanKe (1):
      gitk: Add Chinese (zh_CN) translation

brian m. carlson (43):
      builtin/replace: make hash size independent
      patch-id: convert to use the_hash_algo
      fetch-pack: use parse_oid_hex
      builtin/receive-pack: switch to use the_hash_algo
      builtin/blame: switch uses of GIT_SHA1_HEXSZ to the_hash_algo
      builtin/rev-parse: switch to use the_hash_algo
      blame: remove needless comparison with GIT_SHA1_HEXSZ
      show-index: switch hard-coded constants to the_hash_algo
      connected: switch GIT_SHA1_HEXSZ to the_hash_algo
      bundle: switch to use the_hash_algo
      combine-diff: replace GIT_SHA1_HEXSZ with the_hash_algo
      config: use the_hash_algo in abbrev comparison
      sha1-lookup: switch hard-coded constants to the_hash_algo
      bisect: switch to using the_hash_algo
      sequencer: convert to use the_hash_algo
      pack-write: use hash_to_hex when writing checksums
      builtin/repack: write object IDs of the proper length
      builtin/worktree: switch null_sha1 to null_oid
      cache: remove null_sha1
      wt-status: convert struct wt_status to object_id
      packfile: replace sha1_to_hex
      builtin/index-pack: replace sha1_to_hex
      builtin/receive-pack: replace sha1_to_hex
      rerere: replace sha1_to_hex
      builtin/show-index: replace sha1_to_hex
      midx: switch to using the_hash_algo
      t3201: abstract away SHA-1-specific constants
      t3206: abstract away hash size constants
      t3301: abstract away SHA-1-specific constants
      t3305: make hash size independent
      t3306: abstract away SHA-1-specific constants
      t3404: abstract away SHA-1-specific constants
      t3430: avoid hard-coded object IDs
      t3506: make hash independent
      t3600: make hash size independent
      t3800: make hash-size independent
      t3903: abstract away SHA-1-specific constants
      t4000: make hash size independent
      t4002: make hash independent
      t4009: make hash size independent
      path: add a function to check for path suffix
      am: reload .gitattributes after patching it
      Documentation: fix build with Asciidoctor 2

Ævar Arnfjörð Bjarmason (20):
      log tests: test regex backends in "--encode=<enc>" tests
      grep: don't use PCRE2?_UTF8 with "log --encoding=<non-utf8>"
      t4210: skip more command-line encoding tests on MinGW
      grep: inline the return value of a function call used only once
      grep tests: move "grep binary" alongside the rest
      grep tests: move binary pattern tests into their own file
      grep: make the behavior for NUL-byte in patterns sane
      grep: drop support for \0 in --fixed-strings <pattern>
      grep: remove the kwset optimization
      grep: use PCRE v2 for optimized fixed-string search
      grep: remove overly paranoid BUG(...) code
      grep: stop "using" a custom JIT stack with PCRE v2
      grep: stop using a custom JIT stack with PCRE v1
      grep: consistently use "p->fixed" in compile_regexp()
      grep: create a "is_fixed" member in "grep_pat"
      grep: stess test PCRE v2 on invalid UTF-8 data
      grep: do not enter PCRE2_UTF mode on fixed matching
      t3432: distinguish "noop-same" v.s. "work-same" in "same head" tests
      t3432: test for --no-ff's interaction with fast-forward
      rebase tests: test linear branch topology


^ permalink raw reply	[relevance 2%]

* Re: [ANNOUNCE] Git v2.22.0
  2019-06-07 21:31  2% [ANNOUNCE] Git v2.22.0 Junio C Hamano
@ 2019-06-07 22:48  0% ` Bhaskar Chowdhury
  0 siblings, 0 replies; 162+ results
From: Bhaskar Chowdhury @ 2019-06-07 22:48 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Linux Kernel, git-packagers

[-- Attachment #1: Type: text/plain, Size: 73593 bytes --]

Thanks, a bunch Junio!

On 14:31 Fri 07 Jun , Junio C Hamano wrote:
>The latest feature release Git v2.22.0 is now available at the
>usual places.  It is comprised of 745 non-merge commits since
>v2.21.0, contributed by 74 people, 18 of which are new faces.
>
>The tarballs are found at:
>
>    https://www.kernel.org/pub/software/scm/git/
>
>The following public repositories all have a copy of the 'v2.22.0'
>tag and the 'master' branch that the tag points at:
>
>  url = https://kernel.googlesource.com/pub/scm/git/git
>  url = git://repo.or.cz/alt-git.git
>  url = https://github.com/gitster/git
>
>New contributors whose contributions weren't in v2.21.0 are as follows.
>Welcome to the Git development community!
>
>  Alexander Blesius, Baruch Siach, Boxuan Li, Cédric Malard,
>  Chris Mayo, Chris. Webster, Clément Chigot, Corentin BOMPARD,
>  Damien Robert, Dustin Spicuzza, Emily Shaffer, Michal Suchanek,
>  Rohit Ashiwal, Sun Chao, Tanushree Tumane, Vadim Kochan,
>  William Hubbs, and Yash Bhatambare.
>
>Returning contributors who helped this release are as follows.
>Thanks for your continued support.
>
>  Ævar Arnfjörð Bjarmason, Alban Gruin, Alessandro Menti,
>  Alexander Shopov, Anders Waldenborg, Andreas Heiduk, Andrei
>  Rybak, Beat Bolli, Ben Peart, Brandon Richardson, brian
>  m. carlson, Carlo Marcelo Arenas Belón, Christian Couder,
>  Christopher Díaz Riveros, Daniels Umanovskis, David Aguilar,
>  David Kastrup, Denton Liu, Derrick Stolee, Elijah Newren, Eric
>  Sunshine, Eric Wong, Fangyi Zhou, İsmail Dönmez, Jean-Noël
>  Avila, Jeff Hostetler, Jeff King, Jiang Xin, Joel Teichroeb,
>  Joey Hess, Johannes Schindelin, Jonathan Tan, Jordi Mas, Josh
>  Steadmon, Junio C Hamano, Kyle Meyer, Martin Ågren, Matthew
>  Kraai, Matthias Rüster, Mike Hommey, Nguyễn Thái Ngọc
>  Duy, Paul-Sebastian Ungureanu, Peter Krefting, Philip Oakley,
>  Phillip Wood, Ralf Thielow, Ramsay Jones, René Scharfe, Robert
>  P. J. Day, Sven Strickroth, SZEDER Gábor, Taylor Blau, Thomas
>  Gummerer, Todd Zullinger, Torsten Bögershausen, and Trần
>  Ngọc Quân.
>
>----------------------------------------------------------------
>
>Git 2.22 Release Notes
>======================
>
>Updates since v2.21
>-------------------
>
>Backward compatibility note
>
> * The filter specification "--filter=sparse:path=<path>" used to
>   create a lazy/partial clone has been removed.  Using a blob that is
>   part of the project as sparse specification is still supported with
>   the "--filter=sparse:oid=<blob>" option.
>
>UI, Workflows & Features
>
> * "git checkout --no-overlay" can be used to trigger a new mode of
>   checking out paths out of the tree-ish, that allows paths that
>   match the pathspec that are in the current index and working tree
>   and are not in the tree-ish.
>
> * The %(trailers) formatter in "git log --format=..."  now allows to
>   optionally pick trailers selectively by keyword, show only values,
>   etc.
>
> * Four new configuration variables {author,committer}.{name,email}
>   have been introduced to override user.{name,email} in more specific
>   cases.
>
> * Command-line completion (in contrib/) learned to tab-complete the
>   "git submodule absorbgitdirs" subcommand.
>
> * "git branch" learned a new subcommand "--show-current".
>
> * Output from "diff --cc" did not show the original paths when the
>   merge involved renames.  A new option adds the paths in the
>   original trees to the output.
>
> * The command line completion (in contrib/) has been taught to
>   complete more subcommand parameters.
>
> * The final report from "git bisect" used to show the suspected
>   culprit using a raw "diff-tree", with which there is no output for
>   a merge commit.  This has been updated to use a more modern and
>   human readable output that still is concise enough.
>
> * "git rebase --rebase-merges" replaces its old "--preserve-merges"
>   option; the latter is now marked as deprecated.
>
> * Error message given while cloning with --recurse-submodules has
>   been updated.
>
> * The completion helper code now pays attention to repository-local
>   configuration (when available), which allows --list-cmds to honour
>   a repository specific setting of completion.commands, for example.
>
> * "git mergetool" learned to offer Sublime Merge (smerge) as one of
>   its backends.
>
> * A new hook "post-index-change" is called when the on-disk index
>   file changes, which can help e.g. a virtualized working tree
>   implementation.
>
> * "git difftool" can now run outside a repository.
>
> * "git checkout -m <other>" was about carrying the differences
>   between HEAD and the working-tree files forward while checking out
>   another branch, and ignored the differences between HEAD and the
>   index.  The command has been taught to abort when the index and the
>   HEAD are different.
>
> * A progress indicator has been added to the "index-pack" step, which
>   often makes users wait for completion during "git clone".
>
> * "git submodule" learns "set-branch" subcommand that allows the
>   submodule.*.branch settings to be modified.
>
> * "git merge-recursive" backend recently learned a new heuristics to
>   infer file movement based on how other files in the same directory
>   moved.  As this is inherently less robust heuristics than the one
>   based on the content similarity of the file itself (rather than
>   based on what its neighbours are doing), it sometimes gives an
>   outcome unexpected by the end users.  This has been toned down to
>   leave the renamed paths in higher/conflicted stages in the index so
>   that the user can examine and confirm the result.
>
> * "git tag" learned to give an advice suggesting it might be a
>   mistake when creating an annotated or signed tag that points at
>   another tag.
>
> * The "git pack-objects" command learned to report the number of
>   objects it packed via the trace2 mechanism.
>
> * The list of conflicted paths shown in the editor while concluding a
>   conflicted merge was shown above the scissors line when the
>   clean-up mode is set to "scissors", even though it was commented
>   out just like the list of updated paths and other information to
>   help the user explain the merge better.
>
> * The trace2 tracing facility learned to auto-generate a filename
>   when told to log to a directory.
>
> * "git clone" learned a new --server-option option when talking over
>   the protocol version 2.
>
> * The connectivity bitmaps are created by default in bare
>   repositories now; also the pathname hash-cache is created by
>   default to avoid making crappy deltas when repacking.
>
> * "git branch new A...B" and "git checkout -b new A...B" have been
>   taught that in their contexts, the notation A...B means "the merge
>   base between these two commits", just like "git checkout A...B"
>   detaches HEAD at that commit.
>
> * Update "git difftool" and "git mergetool" so that the combinations
>   of {diff,merge}.{tool,guitool} configuration variables serve as
>   fallback settings of each other in a sensible order.
>
> * The "--dir-diff" mode of "git difftool" is not useful in "--no-index"
>   mode; they are now explicitly marked as mutually incompatible.
>
>
>Performance, Internal Implementation, Development Support etc.
>
> * The diff machinery, one of the oldest parts of the system, which
>   long predates the parse-options API, uses fairly long and complex
>   handcrafted option parser.  This is being rewritten to use the
>   parse-options API.
>
> * The implementation of pack-redundant has been updated for
>   performance in a repository with many packfiles.
>
> * A more structured way to obtain execution trace has been added.
>
> * "git prune" has been taught to take advantage of reachability
>   bitmap when able.
>
> * The command line parser of "git commit-tree" has been rewritten to
>   use the parse-options API.
>
> * Suggest GitGitGadget instead of submitGit as a way to submit
>   patches based on GitHub PR to us.
>
> * The test framework has been updated to help developers by making it
>   easier to run most of the tests under different versions of
>   over-the-wire protocols.
>
> * Dev support update to make it easier to compare two formatted
>   results from our documentation.
>
> * The scripted "git rebase" implementation has been retired.
>
> * "git multi-pack-index verify" did not scale well with the number of
>   packfiles, which is being improved.
>
> * "git stash" has been rewritten in C.
>
> * The "check-docs" Makefile target to support developers has been
>   updated.
>
> * The tests have been updated not to rely on the abbreviated option
>   names the parse-options API offers, to protect us from an
>   abbreviated form of an option that used to be unique within the
>   command getting non-unique when a new option that share the same
>   prefix is added.
>
> * The scripted version of "git rebase -i" wrote and rewrote the todo
>   list many times during a single step of its operation, and the
>   recent C-rewrite made a faithful conversion of the logic to C.  The
>   implementation has been updated to carry necessary information
>   around in-core to avoid rewriting the same file over and over
>   unnecessarily.
>
> * Test framework update to more robustly clean up leftover files and
>   processes after tests are done.
>
> * Conversion from unsigned char[20] to struct object_id continues.
>
> * While running "git diff" in a lazy clone, we can upfront know which
>   missing blobs we will need, instead of waiting for the on-demand
>   machinery to discover them one by one.  The code learned to aim to
>   achieve better performance by batching the request for these
>   promised blobs.
>
> * During an initial "git clone --depth=..." partial clone, it is
>   pointless to spend cycles for a large portion of the connectivity
>   check that enumerates and skips promisor objects (which by
>   definition is all objects fetched from the other side).  This has
>   been optimized out.
>
> * Mechanically and systematically drop "extern" from function
>   declaration.
>
> * The script to aggregate perf result unconditionally depended on
>   libjson-perl even though it did not have to, which has been
>   corrected.
>
> * The internal implementation of "git rebase -i" has been updated to
>   avoid forking a separate "rebase--interactive" process.
>
> * Allow DEP and ASLR for Windows build to for security hardening.
>
> * Performance test framework has been broken and measured the version
>   of Git that happens to be on $PATH, not the specified one to
>   measure, for a while, which has been corrected.
>
> * Optionally "make coccicheck" can feed multiple source files to
>   spatch, gaining performance while spending more memory.
>
> * Attempt to use an abbreviated option in "git clone --recurs" is
>   responded by a request to disambiguate between --recursive and
>   --recurse-submodules, which is bad because these two are synonyms.
>   The parse-options API has been extended to define such synonyms
>   more easily and not produce an unnecessary failure.
>
> * A pair of private functions in http.c that had names similar to
>   fread/fwrite did not return the number of elements, which was found
>   to be confusing.
>
> * Update collision-detecting SHA-1 code to build properly on HP-UX.
>
>
>Fixes since v2.21
>-----------------
>
> * "git prune-packed" did not notice and complain against excess
>   arguments given from the command line, which now it does.
>   (merge 9b0bd87ed2 rj/prune-packed-excess-args later to maint).
>
> * Split-index fix.
>   (merge 6e37c8ed3c nd/split-index-null-base-fix later to maint).
>
> * "git diff --no-index" may still want to access Git goodies like
>   --ext-diff and --textconv, but so far these have been ignored,
>   which has been corrected.
>   (merge 287ab28bfa jk/diff-no-index-initialize later to maint).
>
> * Unify RPC code for smart http in protocol v0/v1 and v2, which fixes
>   a bug in the latter (lack of authentication retry) and generally
>   improves the code base.
>   (merge a97d00799a jt/http-auth-proto-v2-fix later to maint).
>
> * The include file compat/bswap.h has been updated so that it is safe
>   to (accidentally) include it more than once.
>   (merge 33aa579a55 jk/guard-bswap-header later to maint).
>
> * The set of header files used by "make hdr-check" unconditionally
>   included sha256/gcrypt.h, even when it is not used, causing the
>   make target to fail.  We now skip it when GCRYPT_SHA256 is not in
>   use.
>   (merge f23aa18e7f rj/hdr-check-gcrypt-fix later to maint).
>
> * The Makefile uses 'find' utility to enumerate all the *.h header
>   files, which is expensive on platforms with slow filesystems; it
>   now optionally uses "ls-files" if working within a repository,
>   which is a trick similar to how all sources are enumerated to run
>   ETAGS on.
>   (merge 92b88eba9f js/find-lib-h-with-ls-files-when-possible later to maint).
>
> * "git rebase" that was reimplemented in C did not set ORIG_HEAD
>   correctly, which has been corrected.
>   (merge cbd29ead92 js/rebase-orig-head-fix later to maint).
>
> * Dev support.
>   (merge f545737144 js/stress-test-ui-tweak later to maint).
>
> * CFLAGS now can be tweaked when invoking Make while using
>   DEVELOPER=YesPlease; this did not work well before.
>   (merge 6d5d4b4e93 ab/makefile-help-devs-more later to maint).
>
> * "git fsck --connectivity-only" omits computation necessary to sift
>   the objects that are not reachable from any of the refs into
>   unreachable and dangling.  This is now enabled when dangling
>   objects are requested (which is done by default, but can be
>   overridden with the "--no-dangling" option).
>   (merge 8d8c2a5aef jk/fsck-doc later to maint).
>
> * On platforms where "git fetch" is killed with SIGPIPE (e.g. OSX),
>   the upload-pack that runs on the other end that hangs up after
>   detecting an error could cause "git fetch" to die with a signal,
>   which led to a flaky test.  "git fetch" now ignores SIGPIPE during
>   the network portion of its operation (this is not a problem as we
>   check the return status from our write(2)s).
>   (merge 143588949c jk/no-sigpipe-during-network-transport later to maint).
>
> * A recent update broke "is this object available to us?" check for
>   well-known objects like an empty tree (which should yield "yes",
>   even when there is no on-disk object for an empty tree), which has
>   been corrected.
>   (merge f06ab027ef jk/virtual-objects-do-exist later to maint).
>
> * The setup code has been cleaned up to avoid leaks around the
>   repository_format structure.
>   (merge e8805af1c3 ma/clear-repository-format later to maint).
>
> * "git config --type=color ..." is meant to replace "git config --get-color"
>   but there is a slight difference that wasn't documented, which is
>   now fixed.
>   (merge cd8e7593b9 jk/config-type-color-ends-with-lf later to maint).
>
> * When the "clean" filter can reduce the size of a huge file in the
>   working tree down to a small "token" (a la Git LFS), there is no
>   point in allocating a huge scratch area upfront, but the buffer is
>   sized based on the original file size.  The convert mechanism now
>   allocates very minimum and reallocates as it receives the output
>   from the clean filter process.
>   (merge 02156ab031 jh/resize-convert-scratch-buffer later to maint).
>
> * "git rebase" uses the refs/rewritten/ hierarchy to store its
>   intermediate states, which inherently makes the hierarchy per
>   worktree, but it didn't quite work well.
>   (merge b9317d55a3 nd/rewritten-ref-is-per-worktree later to maint).
>
> * "git log -L<from>,<to>:<path>" with "-s" did not suppress the patch
>   output as it should.  This has been corrected.
>   (merge 05314efaea jk/line-log-with-patch later to maint).
>
> * "git worktree add" used to do a "find an available name with stat
>   and then mkdir", which is race-prone.  This has been fixed by using
>   mkdir and reacting to EEXIST in a loop.
>   (merge 7af01f2367 ms/worktree-add-atomic-mkdir later to maint).
>
> * Build update for SHA-1 with collision detection.
>   (merge 07a20f569b jk/sha1dc later to maint).
>
> * Build procedure has been fixed around use of asciidoctor instead of
>   asciidoc.
>   (merge 185f9a0ea0 ma/asciidoctor-fixes later to maint).
>
> * remote-http transport did not anonymize URLs reported in its error
>   messages at places.
>   (merge c1284b21f2 js/anonymize-remote-curl-diag later to maint).
>
> * Error messages given from the http transport have been updated so
>   that they can be localized.
>   (merge ed8b4132c8 js/remote-curl-i18n later to maint).
>
> * "git init" forgot to read platform-specific repository
>   configuration, which made Windows port to ignore settings of
>   core.hidedotfiles, for example.
>
> * A corner-case object name ambiguity while the sequencer machinery
>   is working (e.g. "rebase -i -x") has been fixed.
>
> * "git format-patch" did not diagnose an error while opening the
>   output file for the cover-letter, which has been corrected.
>   (merge 2fe95f494c jc/format-patch-error-check later to maint).
>
> * "git checkout -f <branch>" while the index has an unmerged path
>   incorrectly left some paths in an unmerged state, which has been
>   corrected.
>
> * A corner case bug in the refs API has been corrected.
>   (merge d3322eb28b jk/refs-double-abort later to maint).
>
> * Unicode update.
>   (merge 584b62c37b bb/unicode-12 later to maint).
>
> * dumb-http walker has been updated to share more error recovery
>   strategy with the normal codepath.
>
> * A buglet in configuration parser has been fixed.
>   (merge 19e7fdaa58 nd/include-if-wildmatch later to maint).
>
> * The documentation for "git read-tree --reset -u" has been updated.
>   (merge b5a0bd694c nd/read-tree-reset-doc later to maint).
>
> * Code clean-up around a much-less-important-than-it-used-to-be
>   update_server_info() function.
>   (merge b3223761c8 jk/server-info-rabbit-hole later to maint).
>
> * The message given when "git commit -a <paths>" errors out has been
>   updated.
>   (merge 5a1dbd48bc nd/commit-a-with-paths-msg-update later to maint).
>
> * "git cherry-pick --options A..B", after giving control back to the
>   user to ask help resolving a conflicted step, did not honor the
>   options it originally received, which has been corrected.
>
> * Various glitches in "git gc" around reflog handling have been fixed.
>
> * The code to read from commit-graph file has been cleanup with more
>   careful error checking before using data read from it.
>
> * Performance fix around "git fetch" that grabs many refs.
>   (merge b764300912 jt/fetch-pack-wanted-refs-optim later to maint).
>
> * Protocol v2 support in "git fetch-pack" of shallow clones has been
>   corrected.
>
> * Performance fix around "git blame", especially in a linear history
>   (which is the norm we should optimize for).
>   (merge f892014943 dk/blame-keep-origin-blob later to maint).
>
> * Performance fix for "rev-list --parents -- pathspec".
>   (merge 8320b1dbe7 jk/revision-rewritten-parents-in-prio-queue later to maint).
>
> * Updating the display with progress message has been cleaned up to
>   deal better with overlong messages.
>   (merge 545dc345eb sg/overlong-progress-fix later to maint).
>
> * "git blame -- path" in a non-bare repository starts blaming from
>   the working tree, and the same command in a bare repository errors
>   out because there is no working tree by definition.  The command
>   has been taught to instead start blaming from the commit at HEAD,
>   which is more useful.
>   (merge a544fb08f8 sg/blame-in-bare-start-at-head later to maint).
>
> * An underallocation in the code to read the untracked cache
>   extension has been corrected.
>   (merge 3a7b45a623 js/untracked-cache-allocfix later to maint).
>
> * The code is updated to check the result of memory allocation before
>   it is used in more places, by using xmalloc and/or xcalloc calls.
>   (merge 999b951b28 jk/xmalloc later to maint).
>
> * The GETTEXT_POISON test option has been quite broken ever since it
>   was made runtime-tunable, which has been fixed.
>   (merge f88b9cb603 jc/gettext-test-fix later to maint).
>
> * Test fix on APFS that is incapable of store paths in Latin-1.
>   (merge 3889149619 js/iso8895-test-on-apfs later to maint).
>
> * "git submodule foreach <command> --quiet" did not pass the option
>   down correctly, which has been corrected.
>   (merge a282f5a906 nd/submodule-foreach-quiet later to maint).
>
> * "git send-email" has been taught to use quoted-printable when the
>   payload contains carriage-return.  The use of the mechanism is in
>   line with the design originally added the codepath that chooses QP
>   when the payload has overly long lines.
>   (merge 74d76a1701 bc/send-email-qp-cr later to maint).
>
> * The recently added feature to add addresses that are on
>   anything-by: trailers in 'git send-email' was found to be way too
>   eager and considered nonsense strings as if they can be legitimate
>   beginning of *-by: trailer.  This has been tightened.
>
> * Builds with gettext broke on recent macOS w/ Homebrew, which
>   seems to have stopped including from /usr/local/include; this
>   has been corrected.
>   (merge 92a1377a2a js/macos-gettext-build later to maint).
>
> * Running "git add" on a repository created inside the current
>   repository is an explicit indication that the user wants to add it
>   as a submodule, but when the HEAD of the inner repository is on an
>   unborn branch, it cannot be added as a submodule.  Worse, the files
>   in its working tree can be added as if they are a part of the outer
>   repository, which is not what the user wants.  These problems are
>   being addressed.
>   (merge f937bc2f86 km/empty-repo-is-still-a-repo later to maint).
>
> * "git cherry-pick" run with the "-x" or the "--signoff" option used
>   to (and more importantly, ought to) clean up the commit log message
>   with the --cleanup=space option by default, but this has been
>   broken since late 2017.  This has been fixed.
>
> * When given a tag that points at a commit-ish, "git replace --graft"
>   failed to peel the tag before writing a replace ref, which did not
>   make sense because the old graft mechanism the feature wants to
>   mimic only allowed to replace one commit object with another.
>   This has been fixed.
>   (merge ee521ec4cb cc/replace-graft-peel-tags later to maint).
>
> * Code tightening against a "wrong" object appearing where an object
>   of a different type is expected, instead of blindly assuming that
>   the connection between objects are correctly made.
>   (merge 97dd512af7 tb/unexpected later to maint).
>
> * An earlier update for MinGW and Cygwin accidentally broke MSVC build,
>   which has been fixed.
>   (merge 22c3634c0f ss/msvc-path-utils-fix later to maint).
>
> * %(push:track) token used in the --format option to "git
>   for-each-ref" and friends was not showing the right branch, which
>   has been fixed.
>   (merge c646d0934e dr/ref-filter-push-track-fix later to maint).
>
> * "make check-docs", "git help -a", etc. did not account for cases
>   where a particular build may deliberately omit some subcommands,
>   which has been corrected.
>
> * The logic to tell if a Git repository has a working tree protects
>   "git branch -D" from removing the branch that is currently checked
>   out by mistake.  The implementation of this logic was broken for
>   repositories with unusual name, which unfortunately is the norm for
>   submodules these days.  This has been fixed.
>   (merge f3534c98e4 jt/submodule-repo-is-with-worktree later to maint).
>
> * AIX shared the same build issues with other BSDs around fileno(fp),
>   which has been corrected.
>   (merge ee662bf5c6 cc/aix-has-fileno-as-a-macro later to maint).
>
> * The autoconf generated configure script failed to use the right
>   gettext() implementations from -libintl by ignoring useless stub
>   implementations shipped in some C library, which has been
>   corrected.
>   (merge b71e56a683 vk/autoconf-gettext later to maint).
>
> * Fix index-pack perf test so that the repeated invocations always
>   run in an empty repository, which emulates the initial clone
>   situation better.
>   (merge 775c71e16d jk/p5302-avoid-collision-check-cost later to maint).
>
> * A "ls-files" that emulates "find" to enumerate files in the working
>   tree resulted in duplicated Makefile rules that caused the build to
>   issue an unnecessary warning during a trial build after merge
>   conflicts are resolved in working tree *.h files but before the
>   resolved results are added to the index.  This has been corrected.
>
> * "git cherry-pick" (and "revert" that shares the same runtime engine)
>   that deals with multiple commits got confused when the final step
>   gets stopped with a conflict and the user concluded the sequence
>   with "git commit".  Attempt to fix it by cleaning up the state
>   files used by these commands in such a situation.
>   (merge 4a72486de9 pw/clean-sequencer-state-upon-final-commit later to maint).
>
> * On a filesystem like HFS+, the names of the refs stored as filesystem
>   entities may become different from what the end-user expects, just
>   like files in the working tree get "renamed".  Work around the
>   mismatch by paying attention to the core.precomposeUnicode
>   configuration.
>   (merge 8e712ef6fc en/unicode-in-refnames later to maint).
>
> * The code to generate the multi-pack idx file was not prepared to
>   see too many packfiles and ran out of open file descriptor, which
>   has been corrected.
>
> * To run tests for Git SVN, our scripts for CI used to install the
>   git-svn package (in the hope that it would bring in the right
>   dependencies).  This has been updated to install the more direct
>   dependency, namely, libsvn-perl.
>   (merge db864306cf sg/ci-libsvn-perl later to maint).
>
> * "git cvsexportcommit" running on msys did not expect cvsnt showed
>   "cvs status" output with CRLF line endings.
>
> * The fsmonitor interface got out of sync after the in-core index
>   file gets discarded, which has been corrected.
>   (merge 398a3b0899 js/fsmonitor-refresh-after-discarding-index later to maint).
>
> * "git status" did not know that the "label" instruction in the
>   todo-list "rebase -i -r" uses should not be shown as a hex object
>   name.
>
> * A prerequisite check in the test suite to see if a working jgit is
>   available was made more robust.
>   (merge abd0f28983 tz/test-lib-check-working-jgit later to maint).
>
> * The codepath to parse :<path> that obtains the object name for an
>   indexed object has been made more robust.
>
> * Code cleanup, docfix, build fix, etc.
>   (merge 11f470aee7 jc/test-yes-doc later to maint).
>   (merge 90503a240b js/doc-symref-in-proto-v1 later to maint).
>   (merge 5c326d1252 jk/unused-params later to maint).
>   (merge 68cabbfda3 dl/doc-submodule-wo-subcommand later to maint).
>   (merge 9903623761 ab/receive-pack-use-after-free-fix later to maint).
>   (merge 1ede45e44b en/merge-options-doc later to maint).
>   (merge 3e14dd2c8e rd/doc-hook-used-in-sample later to maint).
>   (merge c271dc28fd nd/no-more-check-racy later to maint).
>   (merge e6e15194a8 yb/utf-16le-bom-spellfix later to maint).
>   (merge bb101aaf0c rd/attr.c-comment-typofix later to maint).
>   (merge 716a5af812 rd/gc-prune-doc-fix later to maint).
>   (merge 50b206371d js/untravis-windows later to maint).
>   (merge dbf47215e3 js/rebase-recreate-merge later to maint).
>   (merge 56cb2d30f8 dl/reset-doc-no-wrt-abbrev later to maint).
>   (merge 64eca306a2 ja/dir-rename-doc-markup-fix later to maint).
>   (merge af91b0230c dl/ignore-docs later to maint).
>   (merge 59a06e947b ra/t3600-test-path-funcs later to maint).
>   (merge e041d0781b ar/t4150-remove-cruft later to maint).
>   (merge 8d75a1d183 ma/asciidoctor-fixes-more later to maint).
>   (merge 74cc547b0f mh/pack-protocol-doc-fix later to maint).
>   (merge ed31851fa6 ab/doc-misc-typofixes later to maint).
>   (merge a7256debd4 nd/checkout-m-doc-update later to maint).
>   (merge 3a9e1ad78d jt/t5551-protocol-v2-does-not-have-half-auth later to maint).
>   (merge 0b918b75af sg/t5318-cleanup later to maint).
>   (merge 68ed71b53c cb/doco-mono later to maint).
>   (merge a34dca2451 nd/interpret-trailers-docfix later to maint).
>   (merge cf7b857a77 en/fast-import-parsing-fix later to maint).
>   (merge fe61ccbc35 po/rerere-doc-fmt later to maint).
>   (merge ffea0248bf po/describe-not-necessarily-7 later to maint).
>   (merge 7cb7283adb tg/ls-files-debug-format-fix later to maint).
>   (merge f64a21bd82 tz/doc-apostrophe-no-longer-needed later to maint).
>   (merge dbe7b41019 js/t3301-unbreak-notes-test later to maint).
>   (merge d8083e4180 km/t3000-retitle later to maint).
>   (merge 9e4cbccbd7 tz/git-svn-doc-markup-fix later to maint).
>   (merge da9ca955a7 jk/ls-files-doc-markup-fix later to maint).
>   (merge 6804ba3a58 cw/diff-highlight later to maint).
>   (merge 1a8787144d nd/submodule-helper-incomplete-line-fix later to maint).
>   (merge d9ef573837 jk/apache-lsan later to maint).
>   (merge c871fbee2b js/t6500-use-windows-pid-on-mingw later to maint).
>   (merge ce4c7bfc90 bl/t4253-exit-code-from-format-patch later to maint).
>   (merge 397a46db78 js/t5580-unc-alternate-test later to maint).
>   (merge d4907720a2 cm/notes-comment-fix later to maint).
>   (merge 9dde06de13 cb/http-push-null-in-message-fix later to maint).
>   (merge 4c785c0edc js/rebase-config-bitfix later to maint).
>   (merge 8e9fe16c87 es/doc-gitsubmodules-markup later to maint).
>
>----------------------------------------------------------------
>
>Changes since v2.21.0 are as follows:
>
>Alban Gruin (18):
>      sequencer: changes in parse_insn_buffer()
>      sequencer: make the todo_list structure public
>      sequencer: remove the 'arg' field from todo_item
>      sequencer: refactor transform_todos() to work on a todo_list
>      sequencer: introduce todo_list_write_to_file()
>      sequencer: refactor check_todo_list() to work on a todo_list
>      sequencer: refactor sequencer_add_exec_commands() to work on a todo_list
>      sequencer: refactor rearrange_squash() to work on a todo_list
>      sequencer: make sequencer_make_script() write its script to a strbuf
>      sequencer: change complete_action() to use the refactored functions
>      rebase--interactive: move sequencer_add_exec_commands()
>      rebase--interactive: move rearrange_squash_in_todo_file()
>      sequencer: refactor skip_unnecessary_picks() to work on a todo_list
>      rebase-interactive: use todo_list_write_to_file() in edit_todo_list()
>      rebase-interactive: append_todo_help() changes
>      rebase-interactive: rewrite edit_todo_list() to handle the initial edit
>      sequencer: use edit_todo_list() in complete_action()
>      rebase--interactive: move transform_todo_file()
>
>Alessandro Menti (1):
>      l10n: it.po: Updated Italian translation
>
>Alexander Blesius (1):
>      doc: fix typos in man pages
>
>Alexander Shopov (4):
>      gitk: Update Bulgarian translation (317t)
>      l10n: bg.po: Updated Bulgarian translation (4577t)
>      l10n: bg.po: Updated Bulgarian translation (4580t)
>      l10n: bg.po: Updated Bulgarian translation (4581t)
>
>Anders Waldenborg (7):
>      doc: group pretty-format.txt placeholders descriptions
>      pretty: allow %(trailers) options with explicit value
>      pretty: single return path in %(trailers) handling
>      pretty: allow showing specific trailers
>      pretty: add support for "valueonly" option in %(trailers)
>      strbuf: separate callback for strbuf_expand:ing literals
>      pretty: add support for separator option in %(trailers)
>
>Andreas Heiduk (1):
>      revisions.txt: remove ambibuity between <rev>:<path> and :<path>
>
>Andrei Rybak (1):
>      t4150: remove unused variable
>
>Baruch Siach (1):
>      send-email: don't cc *-by lines with '-' prefix
>
>Beat Bolli (1):
>      unicode: update the width tables to Unicode 12
>
>Ben Peart (1):
>      read-cache: add post-index-change hook
>
>Boxuan Li (1):
>      t4253-am-keep-cr-dos: avoid using pipes
>
>Brandon Richardson (1):
>      commit-tree: utilize parse-options api
>
>Carlo Marcelo Arenas Belón (1):
>      http-push: prevent format overflow warning with gcc >= 9
>
>Chris Mayo (1):
>      notes: correct documentation of format_display_notes()
>
>Chris. Webster (1):
>      diff-highlight: use correct /dev/null for UNIX and Windows
>
>Christian Couder (5):
>      t6050: use test_line_count instead of wc -l
>      t6050: redirect expected error output to a file
>      replace: peel tag when passing a tag as parent to --graft
>      replace: peel tag when passing a tag first to --graft
>      list-objects-filter: disable 'sparse:path' filters
>
>Christopher Díaz Riveros (3):
>      l10n: es: 2.22.0 round 1
>      l10n: es: 2.22.0 round 2
>      l10n: es: 2.22.0 round 3
>
>Clément Chigot (2):
>      Makefile: use fileno macro work around on AIX
>      git-compat-util: work around for access(X_OK) under root
>
>Corentin BOMPARD (2):
>      doc/CodingGuidelines: URLs and paths as monospace
>      doc: format pathnames and URLs as monospace.
>
>Cédric Malard (1):
>      l10n: fr.po: Review French translation
>
>Damien Robert (1):
>      ref-filter: use correct branch for %(push:track)
>
>Daniels Umanovskis (1):
>      branch: introduce --show-current display option
>
>David Aguilar (2):
>      mergetools: add support for smerge (Sublime Merge)
>      contrib/completion: add smerge to the mergetool completion candidates
>
>David Kastrup (1):
>      blame.c: don't drop origin blobs as eagerly
>
>Denton Liu (38):
>      completion: complete git submodule absorbgitdirs
>      git-submodule.txt: "--branch <branch>" option defaults to 'master'
>      submodule--helper: teach config subcommand --unset
>      submodule: document default behavior
>      git-reset.txt: clarify documentation
>      git-clean.txt: clarify ignore pattern files
>      docs: move core.excludesFile from git-add to gitignore
>      contrib/subtree: ensure only one rev is provided
>      midx.c: convert FLEX_ALLOC_MEM to FLEX_ALLOC_STR
>      cocci: FLEX_ALLOC_MEM to FLEX_ALLOC_STR
>      tag: fix formatting
>      submodule: teach set-branch subcommand
>      tag: advise on nested tags
>      t7600: clean up style
>      t3507: clean up style
>      t7604: clean up style
>      t7502: clean up style
>      commit: extract cleanup_mode functions to sequencer
>      parse-options.h: extract common --cleanup option
>      merge: cleanup messages like commit
>      merge: add scissors line on merge conflict
>      cherry-pick/revert: add scissors line on merge conflict
>      t7610: unsuppress output
>      t7610: add mergetool --gui tests
>      *.[ch]: remove extern from function declarations using spatch
>      *.[ch]: remove extern from function declarations using sed
>      *.[ch]: manually align parameter lists
>      t2018: cleanup in current test
>      branch: make create_branch accept a merge base rev
>      revisions.txt: change "rev" to "<rev>"
>      revisions.txt: mark optional rev arguments with []
>      revisions.txt: mention <rev>~ form
>      tag: fix typo in nested tagging hint
>      mergetool: use get_merge_tool function
>      mergetool--lib: create gui_mode function
>      mergetool: fallback to tool when guitool unavailable
>      difftool: make --gui, --tool and --extcmd mutually exclusive
>      difftool: fallback on merge.guitool
>
>Derrick Stolee (4):
>      trace2:data: pack-objects: add trace2 regions
>      midx: pass a repository pointer
>      midx: add packs to packed_git linked list
>      trace2: add variable description to git.txt
>
>Dustin Spicuzza (1):
>      cvsexportcommit: force crlf translation
>
>Elijah Newren (24):
>      log,diff-tree: add --combined-all-paths option
>      merge-options.txt: correct wording of --no-commit option
>      t9300: demonstrate bug with get-mark and empty orphan commits
>      git-fast-import.txt: fix wording about where ls command can appear
>      fast-import: check most prominent commands first
>      fast-import: only allow cat-blob requests where it makes sense
>      fast-import: fix erroneous handling of get-mark with empty orphan commits
>      Use 'unsigned short' for mode, like diff_filespec does
>      merge-recursive: rename merge_options argument from 'o' to 'opt'
>      merge-recursive: rename diff_filespec 'one' to 'o'
>      merge-recursive: rename locals 'o' and 'a' to 'obuf' and 'abuf'
>      merge-recursive: use 'ci' for rename_conflict_info variable name
>      merge-recursive: move some struct declarations together
>      merge-recursive: shrink rename_conflict_info
>      merge-recursive: remove ren[12]_other fields from rename_conflict_info
>      merge-recursive: track branch where rename occurred in rename struct
>      merge-recursive: cleanup handle_rename_* function signatures
>      merge-recursive: switch from (oid,mode) pairs to a diff_filespec
>      t6043: fix copied test description to match its purpose
>      merge-recursive: track information associated with directory renames
>      merge-recursive: give callers of handle_content_merge() access to contents
>      merge-recursive: switch directory rename detection default
>      Honor core.precomposeUnicode in more places
>      merge-recursive: restore accidentally dropped setting of path
>
>Emily Shaffer (1):
>      gitsubmodules: align html and nroff lists
>
>Eric Sunshine (1):
>      check-non-portable-shell: support Perl versions older than 5.10
>
>Eric Wong (1):
>      repack: enable bitmaps by default on bare repos
>
>Fangyi Zhou (1):
>      l10n: zh_CN: Revision for git v2.22.0 l10n
>
>Jean-Noël Avila (6):
>      l10n: fr.po remove obsolete entries
>      Doc: fix misleading asciidoc formating
>      l10n: fr.po v2.22.0.rnd1
>      diff: fix mistake in translatable strings
>      l10n: fr.po v2.22.0 round 2
>      l10n: fr v2.22.0 rnd 3
>
>Jeff Hostetler (30):
>      trace2: Documentation/technical/api-trace2.txt
>      trace2: create new combined trace facility
>      trace2: collect Windows-specific process information
>      trace2:data: add trace2 regions to wt-status
>      trace2:data: add editor/pager child classification
>      trace2:data: add trace2 sub-process classification
>      trace2:data: add trace2 transport child classification
>      trace2:data: add subverb to checkout command
>      trace2:data: add subverb to reset command
>      trace2:data: add trace2 hook classification
>      trace2:data: add subverb for rebase
>      trace2:data: add trace2 instrumentation to index read/write
>      trace2: t/helper/test-trace2, t0210.sh, t0211.sh, t0212.sh
>      trace2: add for_each macros to clang-format
>      progress: add sparse mode to force 100% complete message
>      trace2:data: add trace2 data to midx
>      midx: add progress indicators in multi-pack-index verify
>      midx: during verify group objects by packfile to speed verification
>      config: initialize opts structure in repo_read_config()
>      trace2: refactor setting process starting time
>      trace2: add absolute elapsed time to start event
>      trace2: find exec-dir before trace2 initialization
>      config: add read_very_early_config()
>      trace2: use system/global config for default trace2 settings
>      trace2: report peak memory usage of the process
>      trace2: clarify UTC datetime formatting
>      trace2: make SIDs more unique
>      trace2: update docs to describe system/global config settings
>      trace2: fixup access problem on /etc/gitconfig in read_very_early_config
>      trace2: fix tracing when NO_PTHREADS is defined
>
>Jeff King (92):
>      prune: lazily perform reachability traversal
>      prune: use bitmaps for reachability traversal
>      prune: check SEEN flag for reachability
>      t5304: rename "sha1" variables to "oid"
>      diff: drop options parameter from diffcore_fix_diff_index()
>      diff: drop unused color reset parameters
>      diff: drop unused emit data parameter from sane_truncate_line()
>      diff: drop complete_rewrite parameter from run_external_diff()
>      merge-recursive: drop several unused parameters
>      pack-objects: drop unused parameter from oe_map_new_pack()
>      files-backend: drop refs parameter from split_symref_update()
>      ref-filter: drop unused buf/sz pairs
>      ref-filter: drop unused "obj" parameters
>      ref-filter: drop unused "sz" parameters
>      diff: reuse diff setup for --no-index case
>      bisect: use string arguments to feed internal diff-tree
>      bisect: fix internal diff-tree config loading
>      bisect: make diff-tree output prettier
>      fetch: avoid calling write_or_die()
>      fetch: ignore SIGPIPE during network operation
>      rev-list: allow cached objects in existence check
>      doc/fsck: clarify --connectivity-only behavior
>      fsck: always compute USED flags for unreachable objects
>      compat/bswap: add include header guards
>      config: document --type=color output is a complete line
>      line-log: suppress diff output with "-s"
>      line-log: detect unsupported formats
>      point pull requesters to GitGitGadget
>      Makefile: fix unaligned loads in sha1dc with UBSan
>      t5310: correctly remove bitmaps for jgit test
>      pack-objects: default to writing bitmap hash-cache
>      perf-lib.sh: rely on test-lib.sh for --tee handling
>      revision: drop some unused "revs" parameters
>      log: drop unused rev_info from early output
>      log: drop unused "len" from show_tagger()
>      update-index: drop unused prefix_length parameter from do_reupdate()
>      test-date: drop unused "now" parameter from parse_dates()
>      unpack-trees: drop name_entry from traverse_by_cache_tree()
>      unpack-trees: drop unused error_type parameters
>      report_path_error(): drop unused prefix parameter
>      fetch_pack(): drop unused parameters
>      parse-options: drop unused ctx parameter from show_gitcomp()
>      pretty: drop unused "type" parameter in needs_rfc2047_encoding()
>      pretty: drop unused strbuf from parse_padding_placeholder()
>      git: read local config in --list-cmds
>      completion: fix multiple command removals
>      parse_opt_ref_sorting: always use with NONEG flag
>      refs/files-backend: handle packed transaction prepare failure
>      refs/files-backend: don't look at an aborted transaction
>      http: factor out curl result code normalization
>      http: normalize curl results for dumb loose and alternates fetches
>      http: use normalize_curl_result() instead of manual conversion
>      revision: use a prio_queue to hold rewritten parents
>      get_commit_tree(): return NULL for broken tree
>      rev-list: let traversal die when --missing is not in use
>      rev-list: detect broken root trees
>      test-prio-queue: use xmalloc
>      xdiff: use git-compat-util
>      xdiff: use xmalloc/xrealloc
>      progress: use xmalloc/xcalloc
>      t5516: drop ok=sigpipe from unreachable-want tests
>      t5530: check protocol response for "not our ref"
>      upload-pack: send ERR packet for non-tip objects
>      pkt-line: prepare buffer before handling ERR packets
>      fetch: use free_refs()
>      remote.c: make singular free_ref() public
>      fetch: do not consider peeled tags as advertised tips
>      packfile.h: drop extern from function declarations
>      pack-revindex: open index if necessary
>      t5319: fix bogus cat-file argument
>      t5319: drop useless --buffer from cat-file
>      midx: check both pack and index names for containment
>      packfile: fix pack basename computation
>      http: simplify parsing of remote objects/info/packs
>      server-info: fix blind pointer arithmetic
>      server-info: simplify cleanup in parse_pack_def()
>      server-info: use strbuf to read old info/packs file
>      server-info: drop nr_alloc struct member
>      server-info: drop objdirlen pointer arithmetic
>      update_info_refs(): drop unused force parameter
>      t5304: add a test for pruning with bitmaps
>      untracked-cache: be defensive about missing NULs in index
>      untracked-cache: simplify parsing by dropping "next"
>      untracked-cache: simplify parsing by dropping "len"
>      p5302: create the repo in each index-pack test
>      doc/ls-files: put nested list for "-t" option into block
>      t/perf: depend on perl JSON only when using --codespeed
>      t/perf: add perf script for partial clones
>      coccicheck: optionally batch spatch invocations
>      t/lib-httpd: pass LSAN_OPTIONS through apache
>      coccicheck: make batch size of 0 mean "unlimited"
>      get_oid: handle NULL repo->index
>
>Jiang Xin (9):
>      t5323: test cases for git-pack-redundant
>      pack-redundant: delay creation of unique_objects
>      pack-redundant: rename pack_list.all_objects
>      pack-redundant: consistent sort method
>      l10n: git.pot: v2.22.0 round 1 (270 new, 56 removed)
>      l10n: git.pot: v2.22.0 round 2 (6 new, 3 removed)
>      i18n: fix typos found during l10n for git 2.22.0
>      l10n: git.pot: v2.22.0 round 3 (3 new, 2 removed)
>      l10n: zh_CN: for git v2.22.0 l10n round 1~3
>
>Joel Teichroeb (5):
>      stash: improve option parsing test coverage
>      stash: convert apply to builtin
>      stash: convert drop and clear to builtin
>      stash: convert branch to builtin
>      stash: convert pop to builtin
>
>Joey Hess (1):
>      convert: avoid malloc of original file size
>
>Johannes Schindelin (67):
>      ident: add the ability to provide a "fallback identity"
>      travis: remove the hack to build the Windows job on Azure Pipelines
>      tests: let --stress-limit=<N> imply --stress
>      tests: introduce --stress-jobs=<N>
>      built-in rebase: no need to check out `onto` twice
>      built-in rebase: use the correct reflog when switching branches
>      built-in rebase: demonstrate that ORIG_HEAD is not set correctly
>      built-in rebase: set ORIG_HEAD just once, before the rebase
>      Makefile: use `git ls-files` to list header files, if possible
>      curl: anonymize URLs in error messages and warnings
>      remote-curl: mark all error messages for translation
>      stash: add back the original, scripted `git stash`
>      stash: optionally use the scripted version again
>      tests: add a special setup where stash.useBuiltin is off
>      legacy stash: fix "rudimentary backport of -q"
>      built-in stash: handle :(glob) pathspecs again
>      mingw: drop MakeMaker reference
>      mingw: allow building with an MSYS2 runtime v3.x
>      rebase: deprecate --preserve-merges
>      mingw: respect core.hidedotfiles = false in git-init again
>      test-lib: introduce 'test_atexit'
>      git-daemon: use 'test_atexit` to stop 'git-daemon'
>      git p4 test: use 'test_atexit' to kill p4d and the watchdog process
>      rebase -i: demonstrate obscure loose object cache bug
>      sequencer: improve error message when an OID could not be parsed
>      sequencer: move stale comment into correct location
>      get_oid(): when an object was not found, try harder
>      difftool: remove obsolete (and misleading) comment
>      parse-options: make OPT_ARGUMENT() more useful
>      difftool: allow running outside Git worktrees with --no-index
>      docs: move gitremote-helpers into section 7
>      docs: do not document the `git remote-testgit` command
>      check-docs: really look at the documented commands again
>      check-docs: do not expect guide pages to correspond to commands
>      check-docs: fix for setups where executables have an extension
>      tests (rebase): spell out the `--keep-empty` option
>      tests (rebase): spell out the `--force-rebase` option
>      t7810: do not abbreviate `--no-exclude-standard` nor `--invert-match`
>      t5531: avoid using an abbreviated option
>      tests (push): do not abbreviate the `--follow-tags` option
>      tests (status): spell out the `--find-renames` option in full
>      tests (pack-objects): use the full, unabbreviated `--revs` option
>      t3301: fix false negative
>      untracked cache: fix off-by-one
>      tests: disallow the use of abbreviated options (by default)
>      t9822: skip tests if file names cannot be ISO-8859-1 encoded
>      macOS: make sure that gettext is found
>      remote-testgit: move it into the support directory for t5801
>      Makefile: drop the NO_INSTALL variable
>      help -a: do not list commands that are excluded from the build
>      check-docs: allow command-list.txt to contain excluded commands
>      docs: exclude documentation for commands that have been excluded
>      check-docs: do not bother checking for legacy scripts' documentation
>      test-tool: handle the `-C <directory>` option just like `git`
>      Turn `git serve` into a test helper
>      t5580: verify that alternates can be UNC paths
>      fsmonitor: demonstrate that it is not refreshed after discard_index()
>      fsmonitor: force a refresh after the index was discarded
>      t6500(mingw): use the Windows PID of the shell
>      difftool --no-index: error out on --dir-diff (and don't crash)
>      status: fix display of rebase -ir's `label` command
>      parse-options: adjust `parse_opt_unknown_cb()`s declared return type
>      stash: document stash.useBuiltin
>      rebase: replace incorrect logical negation by correct bitwise one
>      tests: mark a couple more test cases as requiring `rebase -p`
>      docs: say that `--rebase=preserve` is deprecated
>      rebase docs: recommend `-r` over `-p`
>
>Jonathan Tan (25):
>      remote-curl: reduce scope of rpc_state.argv
>      remote-curl: reduce scope of rpc_state.stdin_preamble
>      remote-curl: reduce scope of rpc_state.result
>      remote-curl: refactor reading into rpc_state's buf
>      remote-curl: use post_rpc() for protocol v2 also
>      tests: define GIT_TEST_PROTOCOL_VERSION
>      t5601: check ssh command only with protocol v0
>      tests: always test fetch of unreachable with v0
>      t5503: fix overspecification of trace expectation
>      t5512: compensate for v0 only sending HEAD symrefs
>      t5700: only run with protocol version 1
>      tests: fix protocol version for overspecifications
>      t5552: compensate for v2 filtering ref adv.
>      submodule: explain first attempt failure clearly
>      t5551: mark half-auth no-op fetch test as v0-only
>      fetch-pack: call prepare_shallow_info only if v0
>      fetch-pack: respect --no-update-shallow in v2
>      sha1-file: support OBJECT_INFO_FOR_PREFETCH
>      fetch-pack: binary search when storing wanted-refs
>      diff: batch fetching of missing blobs
>      pack-objects: write objects packed to trace2
>      transport: die if server options are unsupported
>      clone: send server options when using protocol v2
>      worktree: update is_bare heuristics
>      fetch-pack: send server options after command
>
>Jordi Mas (2):
>      l10n: Fixes to Catalan translation
>      l10n: Update Catalan translation
>
>Josh Steadmon (5):
>      protocol-capabilities.txt: document symref
>      trace2: write to directory targets
>      clone: do faster object check for partial clones
>      trace2: fix incorrect function pointer check
>      commit-graph: fix memory leak
>
>Junio C Hamano (19):
>      test: caution on our version of 'yes'
>      builtin/log: downcase the beginning of error messages
>      format-patch: notice failure to open cover letter for writing
>      Start 2.22 cycle
>      The second batch
>      The third batch
>      The fourth batch
>      gettext tests: export the restored GIT_TEST_GETTEXT_POISON
>      The fifth batch
>      The sixth batch
>      Makefile: dedup list of files obtained from ls-files
>      The seventh batch
>      The eighth batch
>      Git 2.22-rc0
>      pkt-line: drop 'const'-ness of a param to set_packet_header()
>      Git 2.22-rc1
>      Git 2.22-rc2
>      Git 2.22-rc3
>      Git 2.22
>
>Kyle Meyer (5):
>      rebase docs: fix "gitlink" typo
>      submodule: refuse to add repository with no commits
>      dir: do not traverse repositories with no commits
>      add: error appropriately on repository with no commits
>      t3000 (ls-files -o): widen description to reflect current tests
>
>Martin Ågren (14):
>      setup: free old value before setting `work_tree`
>      setup: fix memory leaks with `struct repository_format`
>      config/diff.txt: drop spurious backtick
>      config/fsck.txt: avoid starting line with dash
>      git.txt: remove empty line before list continuation
>      git-svn.txt: drop escaping '\' that ends up being rendered
>      Documentation: turn middle-of-line tabs into spaces
>      Documentation/Makefile: add missing xsl dependencies for manpages
>      Documentation/Makefile: add missing dependency on asciidoctor-extensions
>      asciidoctor-extensions: fix spurious space after linkgit
>      Doc: auto-detect changed build flags
>      doc-diff: let `render_tree()` take an explicit directory name
>      doc-diff: support diffing from/to AsciiDoc(tor)
>      doc-diff: add `--cut-header-footer`
>
>Matthew Kraai (1):
>      t3903: add test for --intent-to-add file
>
>Matthias Rüster (2):
>      l10n: TEAMS: Change German translation team leader
>      l10n: de.po: Update German translation
>
>Michal Suchanek (1):
>      worktree: fix worktree add race
>
>Mike Hommey (2):
>      fix pack protocol example client/server communication
>      Make fread/fwrite-like functions in http.c more like fread/fwrite.
>
>Nguyễn Thái Ngọc Duy (129):
>      parse-options.h: remove extern on function prototypes
>      parse-options: add one-shot mode
>      parse-options: disable option abbreviation with PARSE_OPT_KEEP_UNKNOWN
>      parse-options: add OPT_BITOP()
>      parse-options: stop abusing 'callback' for lowlevel callbacks
>      parse-options: avoid magic return codes
>      parse-options: allow ll_callback with OPTION_CALLBACK
>      diff.h: keep forward struct declarations sorted
>      diff.h: avoid bit fields in struct diff_flags
>      diff.c: prepare to use parse_options() for parsing
>      diff.c: convert -u|-p|--patch
>      diff.c: convert -U|--unified
>      diff.c: convert -W|--[no-]function-context
>      diff.c: convert --raw
>      read-cache.c: fix writing "link" index ext with null base oid
>      completion: add more parameter value completion
>      diff-parseopt: convert --patch-with-raw
>      diff-parseopt: convert --numstat and --shortstat
>      diff-parseopt: convert --dirstat and friends
>      diff-parseopt: convert --check
>      diff-parseopt: convert --summary
>      diff-parseopt: convert --patch-with-stat
>      diff-parseopt: convert --name-only
>      diff-parseopt: convert --name-status
>      diff-parseopt: convert -s|--no-patch
>      diff-parseopt: convert --stat*
>      diff-parseopt: convert --[no-]compact-summary
>      diff-parseopt: convert --output-*
>      diff-parseopt: convert -B|--break-rewrites
>      diff-parseopt: convert -M|--find-renames
>      diff-parseopt: convert -D|--irreversible-delete
>      diff-parseopt: convert -C|--find-copies
>      diff-parseopt: convert --find-copies-harder
>      diff-parseopt: convert --no-renames|--[no--rename-empty
>      diff-parseopt: convert --relative
>      diff-parseopt: convert --[no-]minimal
>      diff-parseopt: convert --ignore-some-changes
>      Delete check-racy.c
>      diff-parseopt: convert --[no-]indent-heuristic
>      diff-parseopt: convert --patience
>      diff-parseopt: convert --histogram
>      diff-parseopt: convert --diff-algorithm
>      diff-parseopt: convert --anchored
>      diff-parseopt: convert --binary
>      diff-parseopt: convert --full-index
>      diff-parseopt: convert -a|--text
>      diff-parseopt: convert -R
>      diff-parseopt: convert --[no-]follow
>      diff-parseopt: convert --[no-]color
>      diff-parseopt: convert --word-diff
>      diff-parseopt: convert --word-diff-regex
>      diff-parseopt: convert --color-words
>      diff-parseopt: convert --exit-code
>      diff-parseopt: convert --quiet
>      diff-parseopt: convert --ext-diff
>      diff-parseopt: convert --textconv
>      diff-parseopt: convert --ignore-submodules
>      diff-parseopt: convert --submodule
>      files-backend.c: factor out per-worktree code in loose_fill_ref_dir()
>      files-backend.c: reduce duplication in add_per_worktree_entries_to_dir()
>      Make sure refs/rewritten/ is per-worktree
>      unpack-trees: fix oneway_merge accidentally carry over stage index
>      checkout.txt: note about losing staged changes with --merge
>      commit: improve error message in "-a <paths>" case
>      unpack-trees: keep gently check inside add_rejected_path
>      unpack-trees: rename "gently" flag to "quiet"
>      read-tree: add --quiet
>      checkout: prevent losing staged changes with --merge
>      diff-parseopt: convert --ws-error-highlight
>      diff-parseopt: convert --ita-[in]visible-in-index
>      diff-parseopt: convert -z
>      diff-parseopt: convert -l
>      diff-parseopt: convert -S|-G
>      diff-parseopt: convert --pickaxe-all|--pickaxe-regex
>      diff-parseopt: convert -O
>      diff-parseopt: convert --find-object
>      diff-parseopt: convert --diff-filter
>      diff-parseopt: convert --[no-]abbrev
>      diff-parseopt: convert --[src|dst]-prefix
>      diff-parseopt: convert --line-prefix
>      diff-parseopt: convert --no-prefix
>      diff-parseopt: convert --inter-hunk-context
>      diff-parseopt: convert --[no-]color-moved
>      diff-parseopt: convert --color-moved-ws
>      diff.c: allow --no-color-moved-ws
>      range-diff: use parse_options() instead of diff_opt_parse()
>      diff --no-index: use parse_options() instead of diff_opt_parse()
>      am: avoid diff_opt_parse()
>      config: correct '**' matching in includeIf patterns
>      interpret-trailers.txt: start the desc line with a capital letter
>      read-tree.txt: clarify --reset and worktree changes
>      packfile.c: add repo_approximate_object_count()
>      refs.c: add refs_ref_exists()
>      refs.c: add refs_shorten_unambiguous_ref()
>      refs.c: remove the_repo from substitute_branch_name()
>      refs.c: remove the_repo from expand_ref()
>      refs.c: add repo_dwim_ref()
>      refs.c: add repo_dwim_log()
>      refs.c: remove the_repo from read_ref_at()
>      submodule foreach: fix "<command> --quiet" not being respected
>      commit.cocci: refactor code, avoid double rewrite
>      commit.c: add repo_get_commit_tree()
>      sha1-name.c: remove the_repo from sort_ambiguous()
>      sha1-name.c: remove the_repo from find_abbrev_len_packed()
>      sha1-name.c: add repo_find_unique_abbrev_r()
>      sha1-name.c: store and use repo in struct disambiguate_state
>      sha1-name.c: add repo_for_each_abbrev()
>      sha1-name.c: remove the_repo from get_short_oid()
>      sha1-name.c: remove the_repo from interpret_nth_prior_checkout()
>      sha1-name.c: remove the_repo from interpret_branch_mark()
>      sha1-name.c: add repo_interpret_branch_name()
>      sha1-name.c: remove the_repo from get_oid_oneline()
>      sha1-name.c: remove the_repo from get_describe_name()
>      sha1-name.c: remove the_repo from get_oid_basic()
>      sha1-name.c: remove the_repo from get_oid_1()
>      sha1-name.c: remove the_repo from handle_one_ref()
>      sha1-name.c: remove the_repo from diagnose_invalid_index_path()
>      sha1-name.c: remove the_repo from resolve_relative_path()
>      sha1-name.c: remove the_repo from get_oid_with_context_1()
>      sha1-name.c: add repo_get_oid()
>      submodule-config.c: use repo_get_oid for reading .gitmodules
>      sha1-name.c: remove the_repo from maybe_die_on_misspelt_object_name
>      sha1-name.c: remove the_repo from other get_oid_*
>      sha1-name.c: remove the_repo from get_oid_mb()
>      parse-options: don't emit "ambiguous option" for aliases
>      submodule--helper: add a missing \n
>      diff-parseopt: correct variable types that are used by parseopt
>      diff-parseopt: restore -U (no argument) behavior
>      parse-options: check empty value in OPT_INTEGER and OPT_ABBREV
>
>Paul-Sebastian Ungureanu (17):
>      sha1-name.c: add `get_oidf()` which acts like `get_oid()`
>      strbuf.c: add `strbuf_join_argv()`
>      strbuf.c: add `strbuf_insertf()` and `strbuf_vinsertf()`
>      t3903: modernize style
>      stash: rename test cases to be more descriptive
>      stash: add tests for `git stash show` config
>      stash: mention options in `show` synopsis
>      stash: convert list to builtin
>      stash: convert show to builtin
>      stash: convert store to builtin
>      stash: convert create to builtin
>      stash: convert push to builtin
>      stash: make push -q quiet
>      stash: convert save to builtin
>      stash: optimize `get_untracked_files()` and `check_changes()`
>      stash: replace all `write-tree` child processes with API calls
>      stash: convert `stash--helper.c` into `stash.c`
>
>Peter Krefting (2):
>      l10n: sv.po: Update Swedish translation
>      l10n: sv.po: Update Swedish translation (4577t0f0u)
>
>Philip Oakley (2):
>      rerere doc: quote `rerere.enabled`
>      describe doc: remove '7-char' abbreviation reference
>
>Phillip Wood (21):
>      am/cherry-pick/rebase/revert: document --rerere-autoupdate
>      merge: tweak --rerere-autoupdate documentation
>      sequencer: break some long lines
>      cherry-pick: demonstrate option amnesia
>      cherry-pick --continue: remember options
>      commit/reset: try to clean up sequencer state
>      fix cherry-pick/revert status after commit
>      sequencer: fix cleanup with --signoff and -x
>      sequencer.c: save and restore cleanup mode
>      sequencer: always discard index after checkout
>      rebase: don't translate trace strings
>      rebase: rename write_basic_state()
>      rebase: use OPT_RERERE_AUTOUPDATE()
>      rebase -i: combine rebase--interactive.c with rebase.c
>      rebase -i: remove duplication
>      rebase -i: use struct commit when parsing options
>      rebase -i: use struct object_id for squash_onto
>      rebase -i: use struct rebase_options to parse args
>      rebase -i: use struct rebase_options in do_interactive_rebase()
>      rebase: use a common action enum
>      rebase -i: run without forking rebase--interactive
>
>Ralf Thielow (1):
>      l10n: de.po: improve description of 'git reset --quiet'
>
>Ramsay Jones (2):
>      prune-packed: check for too many arguments
>      Makefile: fix 'hdr-check' when GCRYPT not installed
>
>René Scharfe (1):
>      get-tar-commit-id: parse comment record
>
>Robert P. J. Day (3):
>      mention use of "hooks.allownonascii" in "man githooks"
>      docs/git-gc: fix typo "--prune=all" to "--prune=now"
>      attr.c: ".gitattribute" -> ".gitattributes" (comments)
>
>Rohit Ashiwal (3):
>      test functions: add function `test_file_not_empty`
>      t3600: modernize style
>      t3600: use helpers to replace test -d/f/e/s <path>
>
>SZEDER Gábor (27):
>      test-lib: fix interrupt handling with 'dash' and '--verbose-log -x'
>      t/lib-git-daemon: make sure to kill the 'git-daemon' process
>      tests: use 'test_atexit' to stop httpd
>      t0301-credential-cache: use 'test_atexit' to stop the credentials helper
>      git p4 test: clean up the p4d cleanup functions
>      git p4 test: simplify timeout handling
>      git p4 test: disable '-x' tracing in the p4d watchdog loop
>      t9811-git-p4-label-import: fix pipeline negation
>      t5318-commit-graph: remove unused variable
>      Documentation/git-diff-tree.txt: fix formatting
>      Documentation/technical/api-config.txt: fix formatting
>      Documentation/technical/protocol-v2.txt: fix formatting
>      ci: install Asciidoctor in 'ci/install-dependencies.sh'
>      index-pack: show progress while checking objects
>      ci: stick with Asciidoctor v1.5.8 for now
>      ci: fix AsciiDoc/Asciidoctor stderr check in the documentation build job
>      progress: make display_progress() return void
>      progress: assemble percentage and counters in a strbuf before printing
>      blame: default to HEAD in a bare repo when no start commit is given
>      builtin rebase: use FREE_AND_NULL
>      builtin rebase: use oideq()
>      progress: clear previous progress update dynamically
>      progress: break too long progress bar lines
>      ci: install 'libsvn-perl' instead of 'git-svn'
>      trace2: rename environment variables to GIT_TRACE2*
>      trace2: document the supported values of GIT_TRACE2* env variables
>      progress: avoid empty line when breaking the progress line
>
>Sun Chao (2):
>      pack-redundant: delete redundant code
>      pack-redundant: new algorithm to find min packs
>
>Sven Strickroth (1):
>      MSVC: include compat/win32/path-utils.h for MSVC, too, for real_path()
>
>Tanushree Tumane (1):
>      mingw: remove obsolete IPv6-related code
>
>Taylor Blau (4):
>      t: move 'hex2oct' into test-lib-functions.sh
>      t: introduce tests for unexpected object types
>      list-objects.c: handle unexpected non-blob entries
>      list-objects.c: handle unexpected non-tree entries
>
>Thomas Gummerer (15):
>      move worktree tests to t24*
>      entry: factor out unlink_entry function
>      entry: support CE_WT_REMOVE flag in checkout_entry
>      read-cache: add invalidate parameter to remove_marked_cache_entries
>      checkout: clarify comment
>      checkout: factor out mark_cache_entry_for_checkout function
>      checkout: introduce --{,no-}overlay option
>      checkout: introduce checkout.overlayMode config
>      revert "checkout: introduce checkout.overlayMode config"
>      ident: don't require calling prepare_fallback_ident first
>      stash: drop unused parameter
>      stash: pass pathspec as pointer
>      glossary: add definition for overlay
>      stash: setup default diff output format if necessary
>      ls-files: use correct format string
>
>Todd Zullinger (9):
>      t4038-diff-combined: quote paths with whitespace
>      t9902: test multiple removals via completion.commands
>      completion: use __git when calling --list-cmds
>      Documentation/rev-list-options: wrap --date=<format> block with "--"
>      Documentation/git-status: fix titles in porcelain v2 section
>      Documentation/git-svn: improve asciidoctor compatibility
>      Documentation/git-show-branch: avoid literal {apostrophe}
>      test-lib: try harder to ensure a working jgit
>      RelNotes: minor typo fixes in 2.22.0 draft
>
>Torsten Bögershausen (1):
>      trace2: NULL is not allowed for va_list
>
>Trần Ngọc Quân (4):
>      l10n: Updated Vietnamese translation for v2.21 rd2
>      l10n: vi.po(4577t): Updated Vietnamese translation for v2.22.0 round 1
>      l10n: vi.po(4580t): Updated Vietnamese translation for v2.22.0 round 2
>      l10n: vi.po(4581t): Updated Vietnamese translation for v2.22.0 round 3
>
>Vadim Kochan (1):
>      autoconf: #include <libintl.h> when checking for gettext()
>
>William Hubbs (1):
>      config: allow giving separate author and committer idents
>
>Yash Bhatambare (1):
>      gitattributes.txt: fix typo
>
>brian m. carlson (35):
>      t/lib-submodule-update: use appropriate length constant
>      khash: move oid hash table definition
>      pack-bitmap: make bitmap header handling hash agnostic
>      pack-bitmap: convert struct stored_bitmap to object_id
>      pack-bitmap: replace sha1_to_hex
>      pack-bitmap: switch hard-coded constants to the_hash_algo
>      pack-bitmap: switch hash tables to use struct object_id
>      submodule: avoid hard-coded constants
>      notes-merge: switch to use the_hash_algo
>      notes: make hash size independent
>      notes: replace sha1_to_hex
>      object-store: rename and expand packed_git's sha1 member
>      builtin/name-rev: make hash-size independent
>      fast-import: make hash-size independent
>      fast-import: replace sha1_to_hex
>      builtin/am: make hash size independent
>      builtin/pull: make hash-size independent
>      http-push: convert to use the_hash_algo
>      http-backend: allow 64-character hex names
>      http-push: remove remaining uses of sha1_to_hex
>      http-walker: replace sha1_to_hex
>      http: replace hard-coded constant with the_hash_algo
>      http: compute hash of downloaded objects using the_hash_algo
>      http: replace sha1_to_hex
>      remote-curl: make hash size independent
>      hash: add a function to lookup hash algorithm by length
>      builtin/get-tar-commit-id: make hash size independent
>      archive: convert struct archiver_args to object_id
>      refspec: make hash size independent
>      builtin/difftool: use parse_oid_hex
>      dir: make untracked cache extension hash size independent
>      read-cache: read data in a hash-independent way
>      Git.pm: make hash size independent
>      gitweb: make hash size independent
>      send-email: default to quoted-printable when CR is present
>
>Ævar Arnfjörð Bjarmason (44):
>      receive-pack: fix use-after-free bug
>      commit-graph tests: split up corrupt_graph_and_verify()
>      commit-graph tests: test a graph that's too small
>      Makefile: remove an out-of-date comment
>      Makefile: move "strip" assignment down from flags
>      Makefile: add/remove comments at top and tweak whitespace
>      Makefile: Move *_LIBS assignment into its own section
>      Makefile: move the setting of *FLAGS closer to "include"
>      Makefile: allow for combining DEVELOPER=1 and CFLAGS="..."
>      gc: remove redundant check for gc_auto_threshold
>      gc: convert to using the_hash_algo
>      gc: refactor a "call me once" pattern
>      reflog tests: make use of "test_config" idiom
>      reflog tests: test for the "points nowhere" warning
>      rebase: remove the rebase.useBuiltin setting
>      gc docs: modernize the advice for manually running "gc"
>      gc docs: stop noting "repack" flags
>      gc docs: clean grammar for "gc.bigPackThreshold"
>      commit-graph: fix segfault on e.g. "git status"
>      commit-graph: don't early exit(1) on e.g. "git status"
>      commit-graph: don't pass filename to load_commit_graph_one_fd_st()
>      commit-graph verify: detect inability to read the graph
>      commit-graph write: don't die if the existing graph is corrupt
>      commit-graph: improve & i18n error messages
>      reflog tests: assert lack of early exit with expiry="never"
>      gc: handle & check gc.reflogExpire config
>      test-lib: whitelist GIT_TR2_* in the environment
>      gc docs: include the "gc.*" section from "config" in "gc"
>      gc docs: re-flow the "gc.*" section in "config"
>      gc docs: fix formatting for "gc.writeCommitGraph"
>      gc docs: note how --aggressive impacts --window & --depth
>      gc docs: downplay the usefulness of --aggressive
>      gc docs: note "gc --aggressive" in "fast-import"
>      gc docs: clarify that "gc" doesn't throw away referenced objects
>      gc docs: remove incorrect reference to gc.auto=0
>      perf README: correct docs for 3c8f12c96c regression
>      perf aggregate: remove GIT_TEST_INSTALLED from --codespeed
>      perf-lib.sh: make "./run <revisions>" use the correct gits
>      perf-lib.sh: remove GIT_TEST_INSTALLED from perf-lib.sh
>      perf tests: add "bindir" prefix to git tree test results
>      perf-lib.sh: forbid the use of GIT_TEST_INSTALLED
>      trace2: fix up a missing "leave" entry point
>      trace2: fix up a missing "leave" entry point
>      sha1dc: update from upstream
>
>İsmail Dönmez (2):
>      mingw: do not let ld strip relocations
>      mingw: enable DEP and ASLR
>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[relevance 0%]

* [ANNOUNCE] Git v2.22.0
@ 2019-06-07 21:31  2% Junio C Hamano
  2019-06-07 22:48  0% ` Bhaskar Chowdhury
  0 siblings, 1 reply; 162+ results
From: Junio C Hamano @ 2019-06-07 21:31 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

The latest feature release Git v2.22.0 is now available at the
usual places.  It is comprised of 745 non-merge commits since
v2.21.0, contributed by 74 people, 18 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.22.0'
tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.21.0 are as follows.
Welcome to the Git development community!

  Alexander Blesius, Baruch Siach, Boxuan Li, Cédric Malard,
  Chris Mayo, Chris. Webster, Clément Chigot, Corentin BOMPARD,
  Damien Robert, Dustin Spicuzza, Emily Shaffer, Michal Suchanek,
  Rohit Ashiwal, Sun Chao, Tanushree Tumane, Vadim Kochan,
  William Hubbs, and Yash Bhatambare.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alban Gruin, Alessandro Menti,
  Alexander Shopov, Anders Waldenborg, Andreas Heiduk, Andrei
  Rybak, Beat Bolli, Ben Peart, Brandon Richardson, brian
  m. carlson, Carlo Marcelo Arenas Belón, Christian Couder,
  Christopher Díaz Riveros, Daniels Umanovskis, David Aguilar,
  David Kastrup, Denton Liu, Derrick Stolee, Elijah Newren, Eric
  Sunshine, Eric Wong, Fangyi Zhou, İsmail Dönmez, Jean-Noël
  Avila, Jeff Hostetler, Jeff King, Jiang Xin, Joel Teichroeb,
  Joey Hess, Johannes Schindelin, Jonathan Tan, Jordi Mas, Josh
  Steadmon, Junio C Hamano, Kyle Meyer, Martin Ågren, Matthew
  Kraai, Matthias Rüster, Mike Hommey, Nguyễn Thái Ngọc
  Duy, Paul-Sebastian Ungureanu, Peter Krefting, Philip Oakley,
  Phillip Wood, Ralf Thielow, Ramsay Jones, René Scharfe, Robert
  P. J. Day, Sven Strickroth, SZEDER Gábor, Taylor Blau, Thomas
  Gummerer, Todd Zullinger, Torsten Bögershausen, and Trần
  Ngọc Quân.

----------------------------------------------------------------

Git 2.22 Release Notes
======================

Updates since v2.21
-------------------

Backward compatibility note

 * The filter specification "--filter=sparse:path=<path>" used to
   create a lazy/partial clone has been removed.  Using a blob that is
   part of the project as sparse specification is still supported with
   the "--filter=sparse:oid=<blob>" option.

UI, Workflows & Features

 * "git checkout --no-overlay" can be used to trigger a new mode of
   checking out paths out of the tree-ish, that allows paths that
   match the pathspec that are in the current index and working tree
   and are not in the tree-ish.

 * The %(trailers) formatter in "git log --format=..."  now allows to
   optionally pick trailers selectively by keyword, show only values,
   etc.

 * Four new configuration variables {author,committer}.{name,email}
   have been introduced to override user.{name,email} in more specific
   cases.

 * Command-line completion (in contrib/) learned to tab-complete the
   "git submodule absorbgitdirs" subcommand.

 * "git branch" learned a new subcommand "--show-current".

 * Output from "diff --cc" did not show the original paths when the
   merge involved renames.  A new option adds the paths in the
   original trees to the output.

 * The command line completion (in contrib/) has been taught to
   complete more subcommand parameters.

 * The final report from "git bisect" used to show the suspected
   culprit using a raw "diff-tree", with which there is no output for
   a merge commit.  This has been updated to use a more modern and
   human readable output that still is concise enough.

 * "git rebase --rebase-merges" replaces its old "--preserve-merges"
   option; the latter is now marked as deprecated.

 * Error message given while cloning with --recurse-submodules has
   been updated.

 * The completion helper code now pays attention to repository-local
   configuration (when available), which allows --list-cmds to honour
   a repository specific setting of completion.commands, for example.

 * "git mergetool" learned to offer Sublime Merge (smerge) as one of
   its backends.

 * A new hook "post-index-change" is called when the on-disk index
   file changes, which can help e.g. a virtualized working tree
   implementation.

 * "git difftool" can now run outside a repository.

 * "git checkout -m <other>" was about carrying the differences
   between HEAD and the working-tree files forward while checking out
   another branch, and ignored the differences between HEAD and the
   index.  The command has been taught to abort when the index and the
   HEAD are different.

 * A progress indicator has been added to the "index-pack" step, which
   often makes users wait for completion during "git clone".

 * "git submodule" learns "set-branch" subcommand that allows the
   submodule.*.branch settings to be modified.

 * "git merge-recursive" backend recently learned a new heuristics to
   infer file movement based on how other files in the same directory
   moved.  As this is inherently less robust heuristics than the one
   based on the content similarity of the file itself (rather than
   based on what its neighbours are doing), it sometimes gives an
   outcome unexpected by the end users.  This has been toned down to
   leave the renamed paths in higher/conflicted stages in the index so
   that the user can examine and confirm the result.

 * "git tag" learned to give an advice suggesting it might be a
   mistake when creating an annotated or signed tag that points at
   another tag.

 * The "git pack-objects" command learned to report the number of
   objects it packed via the trace2 mechanism.

 * The list of conflicted paths shown in the editor while concluding a
   conflicted merge was shown above the scissors line when the
   clean-up mode is set to "scissors", even though it was commented
   out just like the list of updated paths and other information to
   help the user explain the merge better.

 * The trace2 tracing facility learned to auto-generate a filename
   when told to log to a directory.

 * "git clone" learned a new --server-option option when talking over
   the protocol version 2.

 * The connectivity bitmaps are created by default in bare
   repositories now; also the pathname hash-cache is created by
   default to avoid making crappy deltas when repacking.

 * "git branch new A...B" and "git checkout -b new A...B" have been
   taught that in their contexts, the notation A...B means "the merge
   base between these two commits", just like "git checkout A...B"
   detaches HEAD at that commit.

 * Update "git difftool" and "git mergetool" so that the combinations
   of {diff,merge}.{tool,guitool} configuration variables serve as
   fallback settings of each other in a sensible order.

 * The "--dir-diff" mode of "git difftool" is not useful in "--no-index"
   mode; they are now explicitly marked as mutually incompatible.


Performance, Internal Implementation, Development Support etc.

 * The diff machinery, one of the oldest parts of the system, which
   long predates the parse-options API, uses fairly long and complex
   handcrafted option parser.  This is being rewritten to use the
   parse-options API.

 * The implementation of pack-redundant has been updated for
   performance in a repository with many packfiles.

 * A more structured way to obtain execution trace has been added.

 * "git prune" has been taught to take advantage of reachability
   bitmap when able.

 * The command line parser of "git commit-tree" has been rewritten to
   use the parse-options API.

 * Suggest GitGitGadget instead of submitGit as a way to submit
   patches based on GitHub PR to us.

 * The test framework has been updated to help developers by making it
   easier to run most of the tests under different versions of
   over-the-wire protocols.

 * Dev support update to make it easier to compare two formatted
   results from our documentation.

 * The scripted "git rebase" implementation has been retired.

 * "git multi-pack-index verify" did not scale well with the number of
   packfiles, which is being improved.

 * "git stash" has been rewritten in C.

 * The "check-docs" Makefile target to support developers has been
   updated.

 * The tests have been updated not to rely on the abbreviated option
   names the parse-options API offers, to protect us from an
   abbreviated form of an option that used to be unique within the
   command getting non-unique when a new option that share the same
   prefix is added.

 * The scripted version of "git rebase -i" wrote and rewrote the todo
   list many times during a single step of its operation, and the
   recent C-rewrite made a faithful conversion of the logic to C.  The
   implementation has been updated to carry necessary information
   around in-core to avoid rewriting the same file over and over
   unnecessarily.

 * Test framework update to more robustly clean up leftover files and
   processes after tests are done.

 * Conversion from unsigned char[20] to struct object_id continues.

 * While running "git diff" in a lazy clone, we can upfront know which
   missing blobs we will need, instead of waiting for the on-demand
   machinery to discover them one by one.  The code learned to aim to
   achieve better performance by batching the request for these
   promised blobs.

 * During an initial "git clone --depth=..." partial clone, it is
   pointless to spend cycles for a large portion of the connectivity
   check that enumerates and skips promisor objects (which by
   definition is all objects fetched from the other side).  This has
   been optimized out.

 * Mechanically and systematically drop "extern" from function
   declaration.

 * The script to aggregate perf result unconditionally depended on
   libjson-perl even though it did not have to, which has been
   corrected.

 * The internal implementation of "git rebase -i" has been updated to
   avoid forking a separate "rebase--interactive" process.

 * Allow DEP and ASLR for Windows build to for security hardening.

 * Performance test framework has been broken and measured the version
   of Git that happens to be on $PATH, not the specified one to
   measure, for a while, which has been corrected.

 * Optionally "make coccicheck" can feed multiple source files to
   spatch, gaining performance while spending more memory.

 * Attempt to use an abbreviated option in "git clone --recurs" is
   responded by a request to disambiguate between --recursive and
   --recurse-submodules, which is bad because these two are synonyms.
   The parse-options API has been extended to define such synonyms
   more easily and not produce an unnecessary failure.

 * A pair of private functions in http.c that had names similar to
   fread/fwrite did not return the number of elements, which was found
   to be confusing.

 * Update collision-detecting SHA-1 code to build properly on HP-UX.


Fixes since v2.21
-----------------

 * "git prune-packed" did not notice and complain against excess
   arguments given from the command line, which now it does.
   (merge 9b0bd87ed2 rj/prune-packed-excess-args later to maint).

 * Split-index fix.
   (merge 6e37c8ed3c nd/split-index-null-base-fix later to maint).

 * "git diff --no-index" may still want to access Git goodies like
   --ext-diff and --textconv, but so far these have been ignored,
   which has been corrected.
   (merge 287ab28bfa jk/diff-no-index-initialize later to maint).

 * Unify RPC code for smart http in protocol v0/v1 and v2, which fixes
   a bug in the latter (lack of authentication retry) and generally
   improves the code base.
   (merge a97d00799a jt/http-auth-proto-v2-fix later to maint).

 * The include file compat/bswap.h has been updated so that it is safe
   to (accidentally) include it more than once.
   (merge 33aa579a55 jk/guard-bswap-header later to maint).

 * The set of header files used by "make hdr-check" unconditionally
   included sha256/gcrypt.h, even when it is not used, causing the
   make target to fail.  We now skip it when GCRYPT_SHA256 is not in
   use.
   (merge f23aa18e7f rj/hdr-check-gcrypt-fix later to maint).

 * The Makefile uses 'find' utility to enumerate all the *.h header
   files, which is expensive on platforms with slow filesystems; it
   now optionally uses "ls-files" if working within a repository,
   which is a trick similar to how all sources are enumerated to run
   ETAGS on.
   (merge 92b88eba9f js/find-lib-h-with-ls-files-when-possible later to maint).

 * "git rebase" that was reimplemented in C did not set ORIG_HEAD
   correctly, which has been corrected.
   (merge cbd29ead92 js/rebase-orig-head-fix later to maint).

 * Dev support.
   (merge f545737144 js/stress-test-ui-tweak later to maint).

 * CFLAGS now can be tweaked when invoking Make while using
   DEVELOPER=YesPlease; this did not work well before.
   (merge 6d5d4b4e93 ab/makefile-help-devs-more later to maint).

 * "git fsck --connectivity-only" omits computation necessary to sift
   the objects that are not reachable from any of the refs into
   unreachable and dangling.  This is now enabled when dangling
   objects are requested (which is done by default, but can be
   overridden with the "--no-dangling" option).
   (merge 8d8c2a5aef jk/fsck-doc later to maint).

 * On platforms where "git fetch" is killed with SIGPIPE (e.g. OSX),
   the upload-pack that runs on the other end that hangs up after
   detecting an error could cause "git fetch" to die with a signal,
   which led to a flaky test.  "git fetch" now ignores SIGPIPE during
   the network portion of its operation (this is not a problem as we
   check the return status from our write(2)s).
   (merge 143588949c jk/no-sigpipe-during-network-transport later to maint).

 * A recent update broke "is this object available to us?" check for
   well-known objects like an empty tree (which should yield "yes",
   even when there is no on-disk object for an empty tree), which has
   been corrected.
   (merge f06ab027ef jk/virtual-objects-do-exist later to maint).

 * The setup code has been cleaned up to avoid leaks around the
   repository_format structure.
   (merge e8805af1c3 ma/clear-repository-format later to maint).

 * "git config --type=color ..." is meant to replace "git config --get-color"
   but there is a slight difference that wasn't documented, which is
   now fixed.
   (merge cd8e7593b9 jk/config-type-color-ends-with-lf later to maint).

 * When the "clean" filter can reduce the size of a huge file in the
   working tree down to a small "token" (a la Git LFS), there is no
   point in allocating a huge scratch area upfront, but the buffer is
   sized based on the original file size.  The convert mechanism now
   allocates very minimum and reallocates as it receives the output
   from the clean filter process.
   (merge 02156ab031 jh/resize-convert-scratch-buffer later to maint).

 * "git rebase" uses the refs/rewritten/ hierarchy to store its
   intermediate states, which inherently makes the hierarchy per
   worktree, but it didn't quite work well.
   (merge b9317d55a3 nd/rewritten-ref-is-per-worktree later to maint).

 * "git log -L<from>,<to>:<path>" with "-s" did not suppress the patch
   output as it should.  This has been corrected.
   (merge 05314efaea jk/line-log-with-patch later to maint).

 * "git worktree add" used to do a "find an available name with stat
   and then mkdir", which is race-prone.  This has been fixed by using
   mkdir and reacting to EEXIST in a loop.
   (merge 7af01f2367 ms/worktree-add-atomic-mkdir later to maint).

 * Build update for SHA-1 with collision detection.
   (merge 07a20f569b jk/sha1dc later to maint).

 * Build procedure has been fixed around use of asciidoctor instead of
   asciidoc.
   (merge 185f9a0ea0 ma/asciidoctor-fixes later to maint).

 * remote-http transport did not anonymize URLs reported in its error
   messages at places.
   (merge c1284b21f2 js/anonymize-remote-curl-diag later to maint).

 * Error messages given from the http transport have been updated so
   that they can be localized.
   (merge ed8b4132c8 js/remote-curl-i18n later to maint).

 * "git init" forgot to read platform-specific repository
   configuration, which made Windows port to ignore settings of
   core.hidedotfiles, for example.

 * A corner-case object name ambiguity while the sequencer machinery
   is working (e.g. "rebase -i -x") has been fixed.

 * "git format-patch" did not diagnose an error while opening the
   output file for the cover-letter, which has been corrected.
   (merge 2fe95f494c jc/format-patch-error-check later to maint).

 * "git checkout -f <branch>" while the index has an unmerged path
   incorrectly left some paths in an unmerged state, which has been
   corrected.

 * A corner case bug in the refs API has been corrected.
   (merge d3322eb28b jk/refs-double-abort later to maint).

 * Unicode update.
   (merge 584b62c37b bb/unicode-12 later to maint).

 * dumb-http walker has been updated to share more error recovery
   strategy with the normal codepath.

 * A buglet in configuration parser has been fixed.
   (merge 19e7fdaa58 nd/include-if-wildmatch later to maint).

 * The documentation for "git read-tree --reset -u" has been updated.
   (merge b5a0bd694c nd/read-tree-reset-doc later to maint).

 * Code clean-up around a much-less-important-than-it-used-to-be
   update_server_info() function.
   (merge b3223761c8 jk/server-info-rabbit-hole later to maint).

 * The message given when "git commit -a <paths>" errors out has been
   updated.
   (merge 5a1dbd48bc nd/commit-a-with-paths-msg-update later to maint).

 * "git cherry-pick --options A..B", after giving control back to the
   user to ask help resolving a conflicted step, did not honor the
   options it originally received, which has been corrected.

 * Various glitches in "git gc" around reflog handling have been fixed.

 * The code to read from commit-graph file has been cleanup with more
   careful error checking before using data read from it.

 * Performance fix around "git fetch" that grabs many refs.
   (merge b764300912 jt/fetch-pack-wanted-refs-optim later to maint).

 * Protocol v2 support in "git fetch-pack" of shallow clones has been
   corrected.

 * Performance fix around "git blame", especially in a linear history
   (which is the norm we should optimize for).
   (merge f892014943 dk/blame-keep-origin-blob later to maint).

 * Performance fix for "rev-list --parents -- pathspec".
   (merge 8320b1dbe7 jk/revision-rewritten-parents-in-prio-queue later to maint).

 * Updating the display with progress message has been cleaned up to
   deal better with overlong messages.
   (merge 545dc345eb sg/overlong-progress-fix later to maint).

 * "git blame -- path" in a non-bare repository starts blaming from
   the working tree, and the same command in a bare repository errors
   out because there is no working tree by definition.  The command
   has been taught to instead start blaming from the commit at HEAD,
   which is more useful.
   (merge a544fb08f8 sg/blame-in-bare-start-at-head later to maint).

 * An underallocation in the code to read the untracked cache
   extension has been corrected.
   (merge 3a7b45a623 js/untracked-cache-allocfix later to maint).

 * The code is updated to check the result of memory allocation before
   it is used in more places, by using xmalloc and/or xcalloc calls.
   (merge 999b951b28 jk/xmalloc later to maint).

 * The GETTEXT_POISON test option has been quite broken ever since it
   was made runtime-tunable, which has been fixed.
   (merge f88b9cb603 jc/gettext-test-fix later to maint).

 * Test fix on APFS that is incapable of store paths in Latin-1.
   (merge 3889149619 js/iso8895-test-on-apfs later to maint).

 * "git submodule foreach <command> --quiet" did not pass the option
   down correctly, which has been corrected.
   (merge a282f5a906 nd/submodule-foreach-quiet later to maint).

 * "git send-email" has been taught to use quoted-printable when the
   payload contains carriage-return.  The use of the mechanism is in
   line with the design originally added the codepath that chooses QP
   when the payload has overly long lines.
   (merge 74d76a1701 bc/send-email-qp-cr later to maint).

 * The recently added feature to add addresses that are on
   anything-by: trailers in 'git send-email' was found to be way too
   eager and considered nonsense strings as if they can be legitimate
   beginning of *-by: trailer.  This has been tightened.

 * Builds with gettext broke on recent macOS w/ Homebrew, which
   seems to have stopped including from /usr/local/include; this
   has been corrected.
   (merge 92a1377a2a js/macos-gettext-build later to maint).

 * Running "git add" on a repository created inside the current
   repository is an explicit indication that the user wants to add it
   as a submodule, but when the HEAD of the inner repository is on an
   unborn branch, it cannot be added as a submodule.  Worse, the files
   in its working tree can be added as if they are a part of the outer
   repository, which is not what the user wants.  These problems are
   being addressed.
   (merge f937bc2f86 km/empty-repo-is-still-a-repo later to maint).

 * "git cherry-pick" run with the "-x" or the "--signoff" option used
   to (and more importantly, ought to) clean up the commit log message
   with the --cleanup=space option by default, but this has been
   broken since late 2017.  This has been fixed.

 * When given a tag that points at a commit-ish, "git replace --graft"
   failed to peel the tag before writing a replace ref, which did not
   make sense because the old graft mechanism the feature wants to
   mimic only allowed to replace one commit object with another.
   This has been fixed.
   (merge ee521ec4cb cc/replace-graft-peel-tags later to maint).

 * Code tightening against a "wrong" object appearing where an object
   of a different type is expected, instead of blindly assuming that
   the connection between objects are correctly made.
   (merge 97dd512af7 tb/unexpected later to maint).

 * An earlier update for MinGW and Cygwin accidentally broke MSVC build,
   which has been fixed.
   (merge 22c3634c0f ss/msvc-path-utils-fix later to maint).

 * %(push:track) token used in the --format option to "git
   for-each-ref" and friends was not showing the right branch, which
   has been fixed.
   (merge c646d0934e dr/ref-filter-push-track-fix later to maint).

 * "make check-docs", "git help -a", etc. did not account for cases
   where a particular build may deliberately omit some subcommands,
   which has been corrected.

 * The logic to tell if a Git repository has a working tree protects
   "git branch -D" from removing the branch that is currently checked
   out by mistake.  The implementation of this logic was broken for
   repositories with unusual name, which unfortunately is the norm for
   submodules these days.  This has been fixed.
   (merge f3534c98e4 jt/submodule-repo-is-with-worktree later to maint).

 * AIX shared the same build issues with other BSDs around fileno(fp),
   which has been corrected.
   (merge ee662bf5c6 cc/aix-has-fileno-as-a-macro later to maint).

 * The autoconf generated configure script failed to use the right
   gettext() implementations from -libintl by ignoring useless stub
   implementations shipped in some C library, which has been
   corrected.
   (merge b71e56a683 vk/autoconf-gettext later to maint).

 * Fix index-pack perf test so that the repeated invocations always
   run in an empty repository, which emulates the initial clone
   situation better.
   (merge 775c71e16d jk/p5302-avoid-collision-check-cost later to maint).

 * A "ls-files" that emulates "find" to enumerate files in the working
   tree resulted in duplicated Makefile rules that caused the build to
   issue an unnecessary warning during a trial build after merge
   conflicts are resolved in working tree *.h files but before the
   resolved results are added to the index.  This has been corrected.

 * "git cherry-pick" (and "revert" that shares the same runtime engine)
   that deals with multiple commits got confused when the final step
   gets stopped with a conflict and the user concluded the sequence
   with "git commit".  Attempt to fix it by cleaning up the state
   files used by these commands in such a situation.
   (merge 4a72486de9 pw/clean-sequencer-state-upon-final-commit later to maint).

 * On a filesystem like HFS+, the names of the refs stored as filesystem
   entities may become different from what the end-user expects, just
   like files in the working tree get "renamed".  Work around the
   mismatch by paying attention to the core.precomposeUnicode
   configuration.
   (merge 8e712ef6fc en/unicode-in-refnames later to maint).

 * The code to generate the multi-pack idx file was not prepared to
   see too many packfiles and ran out of open file descriptor, which
   has been corrected.

 * To run tests for Git SVN, our scripts for CI used to install the
   git-svn package (in the hope that it would bring in the right
   dependencies).  This has been updated to install the more direct
   dependency, namely, libsvn-perl.
   (merge db864306cf sg/ci-libsvn-perl later to maint).

 * "git cvsexportcommit" running on msys did not expect cvsnt showed
   "cvs status" output with CRLF line endings.

 * The fsmonitor interface got out of sync after the in-core index
   file gets discarded, which has been corrected.
   (merge 398a3b0899 js/fsmonitor-refresh-after-discarding-index later to maint).

 * "git status" did not know that the "label" instruction in the
   todo-list "rebase -i -r" uses should not be shown as a hex object
   name.

 * A prerequisite check in the test suite to see if a working jgit is
   available was made more robust.
   (merge abd0f28983 tz/test-lib-check-working-jgit later to maint).

 * The codepath to parse :<path> that obtains the object name for an
   indexed object has been made more robust.

 * Code cleanup, docfix, build fix, etc.
   (merge 11f470aee7 jc/test-yes-doc later to maint).
   (merge 90503a240b js/doc-symref-in-proto-v1 later to maint).
   (merge 5c326d1252 jk/unused-params later to maint).
   (merge 68cabbfda3 dl/doc-submodule-wo-subcommand later to maint).
   (merge 9903623761 ab/receive-pack-use-after-free-fix later to maint).
   (merge 1ede45e44b en/merge-options-doc later to maint).
   (merge 3e14dd2c8e rd/doc-hook-used-in-sample later to maint).
   (merge c271dc28fd nd/no-more-check-racy later to maint).
   (merge e6e15194a8 yb/utf-16le-bom-spellfix later to maint).
   (merge bb101aaf0c rd/attr.c-comment-typofix later to maint).
   (merge 716a5af812 rd/gc-prune-doc-fix later to maint).
   (merge 50b206371d js/untravis-windows later to maint).
   (merge dbf47215e3 js/rebase-recreate-merge later to maint).
   (merge 56cb2d30f8 dl/reset-doc-no-wrt-abbrev later to maint).
   (merge 64eca306a2 ja/dir-rename-doc-markup-fix later to maint).
   (merge af91b0230c dl/ignore-docs later to maint).
   (merge 59a06e947b ra/t3600-test-path-funcs later to maint).
   (merge e041d0781b ar/t4150-remove-cruft later to maint).
   (merge 8d75a1d183 ma/asciidoctor-fixes-more later to maint).
   (merge 74cc547b0f mh/pack-protocol-doc-fix later to maint).
   (merge ed31851fa6 ab/doc-misc-typofixes later to maint).
   (merge a7256debd4 nd/checkout-m-doc-update later to maint).
   (merge 3a9e1ad78d jt/t5551-protocol-v2-does-not-have-half-auth later to maint).
   (merge 0b918b75af sg/t5318-cleanup later to maint).
   (merge 68ed71b53c cb/doco-mono later to maint).
   (merge a34dca2451 nd/interpret-trailers-docfix later to maint).
   (merge cf7b857a77 en/fast-import-parsing-fix later to maint).
   (merge fe61ccbc35 po/rerere-doc-fmt later to maint).
   (merge ffea0248bf po/describe-not-necessarily-7 later to maint).
   (merge 7cb7283adb tg/ls-files-debug-format-fix later to maint).
   (merge f64a21bd82 tz/doc-apostrophe-no-longer-needed later to maint).
   (merge dbe7b41019 js/t3301-unbreak-notes-test later to maint).
   (merge d8083e4180 km/t3000-retitle later to maint).
   (merge 9e4cbccbd7 tz/git-svn-doc-markup-fix later to maint).
   (merge da9ca955a7 jk/ls-files-doc-markup-fix later to maint).
   (merge 6804ba3a58 cw/diff-highlight later to maint).
   (merge 1a8787144d nd/submodule-helper-incomplete-line-fix later to maint).
   (merge d9ef573837 jk/apache-lsan later to maint).
   (merge c871fbee2b js/t6500-use-windows-pid-on-mingw later to maint).
   (merge ce4c7bfc90 bl/t4253-exit-code-from-format-patch later to maint).
   (merge 397a46db78 js/t5580-unc-alternate-test later to maint).
   (merge d4907720a2 cm/notes-comment-fix later to maint).
   (merge 9dde06de13 cb/http-push-null-in-message-fix later to maint).
   (merge 4c785c0edc js/rebase-config-bitfix later to maint).
   (merge 8e9fe16c87 es/doc-gitsubmodules-markup later to maint).

----------------------------------------------------------------

Changes since v2.21.0 are as follows:

Alban Gruin (18):
      sequencer: changes in parse_insn_buffer()
      sequencer: make the todo_list structure public
      sequencer: remove the 'arg' field from todo_item
      sequencer: refactor transform_todos() to work on a todo_list
      sequencer: introduce todo_list_write_to_file()
      sequencer: refactor check_todo_list() to work on a todo_list
      sequencer: refactor sequencer_add_exec_commands() to work on a todo_list
      sequencer: refactor rearrange_squash() to work on a todo_list
      sequencer: make sequencer_make_script() write its script to a strbuf
      sequencer: change complete_action() to use the refactored functions
      rebase--interactive: move sequencer_add_exec_commands()
      rebase--interactive: move rearrange_squash_in_todo_file()
      sequencer: refactor skip_unnecessary_picks() to work on a todo_list
      rebase-interactive: use todo_list_write_to_file() in edit_todo_list()
      rebase-interactive: append_todo_help() changes
      rebase-interactive: rewrite edit_todo_list() to handle the initial edit
      sequencer: use edit_todo_list() in complete_action()
      rebase--interactive: move transform_todo_file()

Alessandro Menti (1):
      l10n: it.po: Updated Italian translation

Alexander Blesius (1):
      doc: fix typos in man pages

Alexander Shopov (4):
      gitk: Update Bulgarian translation (317t)
      l10n: bg.po: Updated Bulgarian translation (4577t)
      l10n: bg.po: Updated Bulgarian translation (4580t)
      l10n: bg.po: Updated Bulgarian translation (4581t)

Anders Waldenborg (7):
      doc: group pretty-format.txt placeholders descriptions
      pretty: allow %(trailers) options with explicit value
      pretty: single return path in %(trailers) handling
      pretty: allow showing specific trailers
      pretty: add support for "valueonly" option in %(trailers)
      strbuf: separate callback for strbuf_expand:ing literals
      pretty: add support for separator option in %(trailers)

Andreas Heiduk (1):
      revisions.txt: remove ambibuity between <rev>:<path> and :<path>

Andrei Rybak (1):
      t4150: remove unused variable

Baruch Siach (1):
      send-email: don't cc *-by lines with '-' prefix

Beat Bolli (1):
      unicode: update the width tables to Unicode 12

Ben Peart (1):
      read-cache: add post-index-change hook

Boxuan Li (1):
      t4253-am-keep-cr-dos: avoid using pipes

Brandon Richardson (1):
      commit-tree: utilize parse-options api

Carlo Marcelo Arenas Belón (1):
      http-push: prevent format overflow warning with gcc >= 9

Chris Mayo (1):
      notes: correct documentation of format_display_notes()

Chris. Webster (1):
      diff-highlight: use correct /dev/null for UNIX and Windows

Christian Couder (5):
      t6050: use test_line_count instead of wc -l
      t6050: redirect expected error output to a file
      replace: peel tag when passing a tag as parent to --graft
      replace: peel tag when passing a tag first to --graft
      list-objects-filter: disable 'sparse:path' filters

Christopher Díaz Riveros (3):
      l10n: es: 2.22.0 round 1
      l10n: es: 2.22.0 round 2
      l10n: es: 2.22.0 round 3

Clément Chigot (2):
      Makefile: use fileno macro work around on AIX
      git-compat-util: work around for access(X_OK) under root

Corentin BOMPARD (2):
      doc/CodingGuidelines: URLs and paths as monospace
      doc: format pathnames and URLs as monospace.

Cédric Malard (1):
      l10n: fr.po: Review French translation

Damien Robert (1):
      ref-filter: use correct branch for %(push:track)

Daniels Umanovskis (1):
      branch: introduce --show-current display option

David Aguilar (2):
      mergetools: add support for smerge (Sublime Merge)
      contrib/completion: add smerge to the mergetool completion candidates

David Kastrup (1):
      blame.c: don't drop origin blobs as eagerly

Denton Liu (38):
      completion: complete git submodule absorbgitdirs
      git-submodule.txt: "--branch <branch>" option defaults to 'master'
      submodule--helper: teach config subcommand --unset
      submodule: document default behavior
      git-reset.txt: clarify documentation
      git-clean.txt: clarify ignore pattern files
      docs: move core.excludesFile from git-add to gitignore
      contrib/subtree: ensure only one rev is provided
      midx.c: convert FLEX_ALLOC_MEM to FLEX_ALLOC_STR
      cocci: FLEX_ALLOC_MEM to FLEX_ALLOC_STR
      tag: fix formatting
      submodule: teach set-branch subcommand
      tag: advise on nested tags
      t7600: clean up style
      t3507: clean up style
      t7604: clean up style
      t7502: clean up style
      commit: extract cleanup_mode functions to sequencer
      parse-options.h: extract common --cleanup option
      merge: cleanup messages like commit
      merge: add scissors line on merge conflict
      cherry-pick/revert: add scissors line on merge conflict
      t7610: unsuppress output
      t7610: add mergetool --gui tests
      *.[ch]: remove extern from function declarations using spatch
      *.[ch]: remove extern from function declarations using sed
      *.[ch]: manually align parameter lists
      t2018: cleanup in current test
      branch: make create_branch accept a merge base rev
      revisions.txt: change "rev" to "<rev>"
      revisions.txt: mark optional rev arguments with []
      revisions.txt: mention <rev>~ form
      tag: fix typo in nested tagging hint
      mergetool: use get_merge_tool function
      mergetool--lib: create gui_mode function
      mergetool: fallback to tool when guitool unavailable
      difftool: make --gui, --tool and --extcmd mutually exclusive
      difftool: fallback on merge.guitool

Derrick Stolee (4):
      trace2:data: pack-objects: add trace2 regions
      midx: pass a repository pointer
      midx: add packs to packed_git linked list
      trace2: add variable description to git.txt

Dustin Spicuzza (1):
      cvsexportcommit: force crlf translation

Elijah Newren (24):
      log,diff-tree: add --combined-all-paths option
      merge-options.txt: correct wording of --no-commit option
      t9300: demonstrate bug with get-mark and empty orphan commits
      git-fast-import.txt: fix wording about where ls command can appear
      fast-import: check most prominent commands first
      fast-import: only allow cat-blob requests where it makes sense
      fast-import: fix erroneous handling of get-mark with empty orphan commits
      Use 'unsigned short' for mode, like diff_filespec does
      merge-recursive: rename merge_options argument from 'o' to 'opt'
      merge-recursive: rename diff_filespec 'one' to 'o'
      merge-recursive: rename locals 'o' and 'a' to 'obuf' and 'abuf'
      merge-recursive: use 'ci' for rename_conflict_info variable name
      merge-recursive: move some struct declarations together
      merge-recursive: shrink rename_conflict_info
      merge-recursive: remove ren[12]_other fields from rename_conflict_info
      merge-recursive: track branch where rename occurred in rename struct
      merge-recursive: cleanup handle_rename_* function signatures
      merge-recursive: switch from (oid,mode) pairs to a diff_filespec
      t6043: fix copied test description to match its purpose
      merge-recursive: track information associated with directory renames
      merge-recursive: give callers of handle_content_merge() access to contents
      merge-recursive: switch directory rename detection default
      Honor core.precomposeUnicode in more places
      merge-recursive: restore accidentally dropped setting of path

Emily Shaffer (1):
      gitsubmodules: align html and nroff lists

Eric Sunshine (1):
      check-non-portable-shell: support Perl versions older than 5.10

Eric Wong (1):
      repack: enable bitmaps by default on bare repos

Fangyi Zhou (1):
      l10n: zh_CN: Revision for git v2.22.0 l10n

Jean-Noël Avila (6):
      l10n: fr.po remove obsolete entries
      Doc: fix misleading asciidoc formating
      l10n: fr.po v2.22.0.rnd1
      diff: fix mistake in translatable strings
      l10n: fr.po v2.22.0 round 2
      l10n: fr v2.22.0 rnd 3

Jeff Hostetler (30):
      trace2: Documentation/technical/api-trace2.txt
      trace2: create new combined trace facility
      trace2: collect Windows-specific process information
      trace2:data: add trace2 regions to wt-status
      trace2:data: add editor/pager child classification
      trace2:data: add trace2 sub-process classification
      trace2:data: add trace2 transport child classification
      trace2:data: add subverb to checkout command
      trace2:data: add subverb to reset command
      trace2:data: add trace2 hook classification
      trace2:data: add subverb for rebase
      trace2:data: add trace2 instrumentation to index read/write
      trace2: t/helper/test-trace2, t0210.sh, t0211.sh, t0212.sh
      trace2: add for_each macros to clang-format
      progress: add sparse mode to force 100% complete message
      trace2:data: add trace2 data to midx
      midx: add progress indicators in multi-pack-index verify
      midx: during verify group objects by packfile to speed verification
      config: initialize opts structure in repo_read_config()
      trace2: refactor setting process starting time
      trace2: add absolute elapsed time to start event
      trace2: find exec-dir before trace2 initialization
      config: add read_very_early_config()
      trace2: use system/global config for default trace2 settings
      trace2: report peak memory usage of the process
      trace2: clarify UTC datetime formatting
      trace2: make SIDs more unique
      trace2: update docs to describe system/global config settings
      trace2: fixup access problem on /etc/gitconfig in read_very_early_config
      trace2: fix tracing when NO_PTHREADS is defined

Jeff King (92):
      prune: lazily perform reachability traversal
      prune: use bitmaps for reachability traversal
      prune: check SEEN flag for reachability
      t5304: rename "sha1" variables to "oid"
      diff: drop options parameter from diffcore_fix_diff_index()
      diff: drop unused color reset parameters
      diff: drop unused emit data parameter from sane_truncate_line()
      diff: drop complete_rewrite parameter from run_external_diff()
      merge-recursive: drop several unused parameters
      pack-objects: drop unused parameter from oe_map_new_pack()
      files-backend: drop refs parameter from split_symref_update()
      ref-filter: drop unused buf/sz pairs
      ref-filter: drop unused "obj" parameters
      ref-filter: drop unused "sz" parameters
      diff: reuse diff setup for --no-index case
      bisect: use string arguments to feed internal diff-tree
      bisect: fix internal diff-tree config loading
      bisect: make diff-tree output prettier
      fetch: avoid calling write_or_die()
      fetch: ignore SIGPIPE during network operation
      rev-list: allow cached objects in existence check
      doc/fsck: clarify --connectivity-only behavior
      fsck: always compute USED flags for unreachable objects
      compat/bswap: add include header guards
      config: document --type=color output is a complete line
      line-log: suppress diff output with "-s"
      line-log: detect unsupported formats
      point pull requesters to GitGitGadget
      Makefile: fix unaligned loads in sha1dc with UBSan
      t5310: correctly remove bitmaps for jgit test
      pack-objects: default to writing bitmap hash-cache
      perf-lib.sh: rely on test-lib.sh for --tee handling
      revision: drop some unused "revs" parameters
      log: drop unused rev_info from early output
      log: drop unused "len" from show_tagger()
      update-index: drop unused prefix_length parameter from do_reupdate()
      test-date: drop unused "now" parameter from parse_dates()
      unpack-trees: drop name_entry from traverse_by_cache_tree()
      unpack-trees: drop unused error_type parameters
      report_path_error(): drop unused prefix parameter
      fetch_pack(): drop unused parameters
      parse-options: drop unused ctx parameter from show_gitcomp()
      pretty: drop unused "type" parameter in needs_rfc2047_encoding()
      pretty: drop unused strbuf from parse_padding_placeholder()
      git: read local config in --list-cmds
      completion: fix multiple command removals
      parse_opt_ref_sorting: always use with NONEG flag
      refs/files-backend: handle packed transaction prepare failure
      refs/files-backend: don't look at an aborted transaction
      http: factor out curl result code normalization
      http: normalize curl results for dumb loose and alternates fetches
      http: use normalize_curl_result() instead of manual conversion
      revision: use a prio_queue to hold rewritten parents
      get_commit_tree(): return NULL for broken tree
      rev-list: let traversal die when --missing is not in use
      rev-list: detect broken root trees
      test-prio-queue: use xmalloc
      xdiff: use git-compat-util
      xdiff: use xmalloc/xrealloc
      progress: use xmalloc/xcalloc
      t5516: drop ok=sigpipe from unreachable-want tests
      t5530: check protocol response for "not our ref"
      upload-pack: send ERR packet for non-tip objects
      pkt-line: prepare buffer before handling ERR packets
      fetch: use free_refs()
      remote.c: make singular free_ref() public
      fetch: do not consider peeled tags as advertised tips
      packfile.h: drop extern from function declarations
      pack-revindex: open index if necessary
      t5319: fix bogus cat-file argument
      t5319: drop useless --buffer from cat-file
      midx: check both pack and index names for containment
      packfile: fix pack basename computation
      http: simplify parsing of remote objects/info/packs
      server-info: fix blind pointer arithmetic
      server-info: simplify cleanup in parse_pack_def()
      server-info: use strbuf to read old info/packs file
      server-info: drop nr_alloc struct member
      server-info: drop objdirlen pointer arithmetic
      update_info_refs(): drop unused force parameter
      t5304: add a test for pruning with bitmaps
      untracked-cache: be defensive about missing NULs in index
      untracked-cache: simplify parsing by dropping "next"
      untracked-cache: simplify parsing by dropping "len"
      p5302: create the repo in each index-pack test
      doc/ls-files: put nested list for "-t" option into block
      t/perf: depend on perl JSON only when using --codespeed
      t/perf: add perf script for partial clones
      coccicheck: optionally batch spatch invocations
      t/lib-httpd: pass LSAN_OPTIONS through apache
      coccicheck: make batch size of 0 mean "unlimited"
      get_oid: handle NULL repo->index

Jiang Xin (9):
      t5323: test cases for git-pack-redundant
      pack-redundant: delay creation of unique_objects
      pack-redundant: rename pack_list.all_objects
      pack-redundant: consistent sort method
      l10n: git.pot: v2.22.0 round 1 (270 new, 56 removed)
      l10n: git.pot: v2.22.0 round 2 (6 new, 3 removed)
      i18n: fix typos found during l10n for git 2.22.0
      l10n: git.pot: v2.22.0 round 3 (3 new, 2 removed)
      l10n: zh_CN: for git v2.22.0 l10n round 1~3

Joel Teichroeb (5):
      stash: improve option parsing test coverage
      stash: convert apply to builtin
      stash: convert drop and clear to builtin
      stash: convert branch to builtin
      stash: convert pop to builtin

Joey Hess (1):
      convert: avoid malloc of original file size

Johannes Schindelin (67):
      ident: add the ability to provide a "fallback identity"
      travis: remove the hack to build the Windows job on Azure Pipelines
      tests: let --stress-limit=<N> imply --stress
      tests: introduce --stress-jobs=<N>
      built-in rebase: no need to check out `onto` twice
      built-in rebase: use the correct reflog when switching branches
      built-in rebase: demonstrate that ORIG_HEAD is not set correctly
      built-in rebase: set ORIG_HEAD just once, before the rebase
      Makefile: use `git ls-files` to list header files, if possible
      curl: anonymize URLs in error messages and warnings
      remote-curl: mark all error messages for translation
      stash: add back the original, scripted `git stash`
      stash: optionally use the scripted version again
      tests: add a special setup where stash.useBuiltin is off
      legacy stash: fix "rudimentary backport of -q"
      built-in stash: handle :(glob) pathspecs again
      mingw: drop MakeMaker reference
      mingw: allow building with an MSYS2 runtime v3.x
      rebase: deprecate --preserve-merges
      mingw: respect core.hidedotfiles = false in git-init again
      test-lib: introduce 'test_atexit'
      git-daemon: use 'test_atexit` to stop 'git-daemon'
      git p4 test: use 'test_atexit' to kill p4d and the watchdog process
      rebase -i: demonstrate obscure loose object cache bug
      sequencer: improve error message when an OID could not be parsed
      sequencer: move stale comment into correct location
      get_oid(): when an object was not found, try harder
      difftool: remove obsolete (and misleading) comment
      parse-options: make OPT_ARGUMENT() more useful
      difftool: allow running outside Git worktrees with --no-index
      docs: move gitremote-helpers into section 7
      docs: do not document the `git remote-testgit` command
      check-docs: really look at the documented commands again
      check-docs: do not expect guide pages to correspond to commands
      check-docs: fix for setups where executables have an extension
      tests (rebase): spell out the `--keep-empty` option
      tests (rebase): spell out the `--force-rebase` option
      t7810: do not abbreviate `--no-exclude-standard` nor `--invert-match`
      t5531: avoid using an abbreviated option
      tests (push): do not abbreviate the `--follow-tags` option
      tests (status): spell out the `--find-renames` option in full
      tests (pack-objects): use the full, unabbreviated `--revs` option
      t3301: fix false negative
      untracked cache: fix off-by-one
      tests: disallow the use of abbreviated options (by default)
      t9822: skip tests if file names cannot be ISO-8859-1 encoded
      macOS: make sure that gettext is found
      remote-testgit: move it into the support directory for t5801
      Makefile: drop the NO_INSTALL variable
      help -a: do not list commands that are excluded from the build
      check-docs: allow command-list.txt to contain excluded commands
      docs: exclude documentation for commands that have been excluded
      check-docs: do not bother checking for legacy scripts' documentation
      test-tool: handle the `-C <directory>` option just like `git`
      Turn `git serve` into a test helper
      t5580: verify that alternates can be UNC paths
      fsmonitor: demonstrate that it is not refreshed after discard_index()
      fsmonitor: force a refresh after the index was discarded
      t6500(mingw): use the Windows PID of the shell
      difftool --no-index: error out on --dir-diff (and don't crash)
      status: fix display of rebase -ir's `label` command
      parse-options: adjust `parse_opt_unknown_cb()`s declared return type
      stash: document stash.useBuiltin
      rebase: replace incorrect logical negation by correct bitwise one
      tests: mark a couple more test cases as requiring `rebase -p`
      docs: say that `--rebase=preserve` is deprecated
      rebase docs: recommend `-r` over `-p`

Jonathan Tan (25):
      remote-curl: reduce scope of rpc_state.argv
      remote-curl: reduce scope of rpc_state.stdin_preamble
      remote-curl: reduce scope of rpc_state.result
      remote-curl: refactor reading into rpc_state's buf
      remote-curl: use post_rpc() for protocol v2 also
      tests: define GIT_TEST_PROTOCOL_VERSION
      t5601: check ssh command only with protocol v0
      tests: always test fetch of unreachable with v0
      t5503: fix overspecification of trace expectation
      t5512: compensate for v0 only sending HEAD symrefs
      t5700: only run with protocol version 1
      tests: fix protocol version for overspecifications
      t5552: compensate for v2 filtering ref adv.
      submodule: explain first attempt failure clearly
      t5551: mark half-auth no-op fetch test as v0-only
      fetch-pack: call prepare_shallow_info only if v0
      fetch-pack: respect --no-update-shallow in v2
      sha1-file: support OBJECT_INFO_FOR_PREFETCH
      fetch-pack: binary search when storing wanted-refs
      diff: batch fetching of missing blobs
      pack-objects: write objects packed to trace2
      transport: die if server options are unsupported
      clone: send server options when using protocol v2
      worktree: update is_bare heuristics
      fetch-pack: send server options after command

Jordi Mas (2):
      l10n: Fixes to Catalan translation
      l10n: Update Catalan translation

Josh Steadmon (5):
      protocol-capabilities.txt: document symref
      trace2: write to directory targets
      clone: do faster object check for partial clones
      trace2: fix incorrect function pointer check
      commit-graph: fix memory leak

Junio C Hamano (19):
      test: caution on our version of 'yes'
      builtin/log: downcase the beginning of error messages
      format-patch: notice failure to open cover letter for writing
      Start 2.22 cycle
      The second batch
      The third batch
      The fourth batch
      gettext tests: export the restored GIT_TEST_GETTEXT_POISON
      The fifth batch
      The sixth batch
      Makefile: dedup list of files obtained from ls-files
      The seventh batch
      The eighth batch
      Git 2.22-rc0
      pkt-line: drop 'const'-ness of a param to set_packet_header()
      Git 2.22-rc1
      Git 2.22-rc2
      Git 2.22-rc3
      Git 2.22

Kyle Meyer (5):
      rebase docs: fix "gitlink" typo
      submodule: refuse to add repository with no commits
      dir: do not traverse repositories with no commits
      add: error appropriately on repository with no commits
      t3000 (ls-files -o): widen description to reflect current tests

Martin Ågren (14):
      setup: free old value before setting `work_tree`
      setup: fix memory leaks with `struct repository_format`
      config/diff.txt: drop spurious backtick
      config/fsck.txt: avoid starting line with dash
      git.txt: remove empty line before list continuation
      git-svn.txt: drop escaping '\' that ends up being rendered
      Documentation: turn middle-of-line tabs into spaces
      Documentation/Makefile: add missing xsl dependencies for manpages
      Documentation/Makefile: add missing dependency on asciidoctor-extensions
      asciidoctor-extensions: fix spurious space after linkgit
      Doc: auto-detect changed build flags
      doc-diff: let `render_tree()` take an explicit directory name
      doc-diff: support diffing from/to AsciiDoc(tor)
      doc-diff: add `--cut-header-footer`

Matthew Kraai (1):
      t3903: add test for --intent-to-add file

Matthias Rüster (2):
      l10n: TEAMS: Change German translation team leader
      l10n: de.po: Update German translation

Michal Suchanek (1):
      worktree: fix worktree add race

Mike Hommey (2):
      fix pack protocol example client/server communication
      Make fread/fwrite-like functions in http.c more like fread/fwrite.

Nguyễn Thái Ngọc Duy (129):
      parse-options.h: remove extern on function prototypes
      parse-options: add one-shot mode
      parse-options: disable option abbreviation with PARSE_OPT_KEEP_UNKNOWN
      parse-options: add OPT_BITOP()
      parse-options: stop abusing 'callback' for lowlevel callbacks
      parse-options: avoid magic return codes
      parse-options: allow ll_callback with OPTION_CALLBACK
      diff.h: keep forward struct declarations sorted
      diff.h: avoid bit fields in struct diff_flags
      diff.c: prepare to use parse_options() for parsing
      diff.c: convert -u|-p|--patch
      diff.c: convert -U|--unified
      diff.c: convert -W|--[no-]function-context
      diff.c: convert --raw
      read-cache.c: fix writing "link" index ext with null base oid
      completion: add more parameter value completion
      diff-parseopt: convert --patch-with-raw
      diff-parseopt: convert --numstat and --shortstat
      diff-parseopt: convert --dirstat and friends
      diff-parseopt: convert --check
      diff-parseopt: convert --summary
      diff-parseopt: convert --patch-with-stat
      diff-parseopt: convert --name-only
      diff-parseopt: convert --name-status
      diff-parseopt: convert -s|--no-patch
      diff-parseopt: convert --stat*
      diff-parseopt: convert --[no-]compact-summary
      diff-parseopt: convert --output-*
      diff-parseopt: convert -B|--break-rewrites
      diff-parseopt: convert -M|--find-renames
      diff-parseopt: convert -D|--irreversible-delete
      diff-parseopt: convert -C|--find-copies
      diff-parseopt: convert --find-copies-harder
      diff-parseopt: convert --no-renames|--[no--rename-empty
      diff-parseopt: convert --relative
      diff-parseopt: convert --[no-]minimal
      diff-parseopt: convert --ignore-some-changes
      Delete check-racy.c
      diff-parseopt: convert --[no-]indent-heuristic
      diff-parseopt: convert --patience
      diff-parseopt: convert --histogram
      diff-parseopt: convert --diff-algorithm
      diff-parseopt: convert --anchored
      diff-parseopt: convert --binary
      diff-parseopt: convert --full-index
      diff-parseopt: convert -a|--text
      diff-parseopt: convert -R
      diff-parseopt: convert --[no-]follow
      diff-parseopt: convert --[no-]color
      diff-parseopt: convert --word-diff
      diff-parseopt: convert --word-diff-regex
      diff-parseopt: convert --color-words
      diff-parseopt: convert --exit-code
      diff-parseopt: convert --quiet
      diff-parseopt: convert --ext-diff
      diff-parseopt: convert --textconv
      diff-parseopt: convert --ignore-submodules
      diff-parseopt: convert --submodule
      files-backend.c: factor out per-worktree code in loose_fill_ref_dir()
      files-backend.c: reduce duplication in add_per_worktree_entries_to_dir()
      Make sure refs/rewritten/ is per-worktree
      unpack-trees: fix oneway_merge accidentally carry over stage index
      checkout.txt: note about losing staged changes with --merge
      commit: improve error message in "-a <paths>" case
      unpack-trees: keep gently check inside add_rejected_path
      unpack-trees: rename "gently" flag to "quiet"
      read-tree: add --quiet
      checkout: prevent losing staged changes with --merge
      diff-parseopt: convert --ws-error-highlight
      diff-parseopt: convert --ita-[in]visible-in-index
      diff-parseopt: convert -z
      diff-parseopt: convert -l
      diff-parseopt: convert -S|-G
      diff-parseopt: convert --pickaxe-all|--pickaxe-regex
      diff-parseopt: convert -O
      diff-parseopt: convert --find-object
      diff-parseopt: convert --diff-filter
      diff-parseopt: convert --[no-]abbrev
      diff-parseopt: convert --[src|dst]-prefix
      diff-parseopt: convert --line-prefix
      diff-parseopt: convert --no-prefix
      diff-parseopt: convert --inter-hunk-context
      diff-parseopt: convert --[no-]color-moved
      diff-parseopt: convert --color-moved-ws
      diff.c: allow --no-color-moved-ws
      range-diff: use parse_options() instead of diff_opt_parse()
      diff --no-index: use parse_options() instead of diff_opt_parse()
      am: avoid diff_opt_parse()
      config: correct '**' matching in includeIf patterns
      interpret-trailers.txt: start the desc line with a capital letter
      read-tree.txt: clarify --reset and worktree changes
      packfile.c: add repo_approximate_object_count()
      refs.c: add refs_ref_exists()
      refs.c: add refs_shorten_unambiguous_ref()
      refs.c: remove the_repo from substitute_branch_name()
      refs.c: remove the_repo from expand_ref()
      refs.c: add repo_dwim_ref()
      refs.c: add repo_dwim_log()
      refs.c: remove the_repo from read_ref_at()
      submodule foreach: fix "<command> --quiet" not being respected
      commit.cocci: refactor code, avoid double rewrite
      commit.c: add repo_get_commit_tree()
      sha1-name.c: remove the_repo from sort_ambiguous()
      sha1-name.c: remove the_repo from find_abbrev_len_packed()
      sha1-name.c: add repo_find_unique_abbrev_r()
      sha1-name.c: store and use repo in struct disambiguate_state
      sha1-name.c: add repo_for_each_abbrev()
      sha1-name.c: remove the_repo from get_short_oid()
      sha1-name.c: remove the_repo from interpret_nth_prior_checkout()
      sha1-name.c: remove the_repo from interpret_branch_mark()
      sha1-name.c: add repo_interpret_branch_name()
      sha1-name.c: remove the_repo from get_oid_oneline()
      sha1-name.c: remove the_repo from get_describe_name()
      sha1-name.c: remove the_repo from get_oid_basic()
      sha1-name.c: remove the_repo from get_oid_1()
      sha1-name.c: remove the_repo from handle_one_ref()
      sha1-name.c: remove the_repo from diagnose_invalid_index_path()
      sha1-name.c: remove the_repo from resolve_relative_path()
      sha1-name.c: remove the_repo from get_oid_with_context_1()
      sha1-name.c: add repo_get_oid()
      submodule-config.c: use repo_get_oid for reading .gitmodules
      sha1-name.c: remove the_repo from maybe_die_on_misspelt_object_name
      sha1-name.c: remove the_repo from other get_oid_*
      sha1-name.c: remove the_repo from get_oid_mb()
      parse-options: don't emit "ambiguous option" for aliases
      submodule--helper: add a missing \n
      diff-parseopt: correct variable types that are used by parseopt
      diff-parseopt: restore -U (no argument) behavior
      parse-options: check empty value in OPT_INTEGER and OPT_ABBREV

Paul-Sebastian Ungureanu (17):
      sha1-name.c: add `get_oidf()` which acts like `get_oid()`
      strbuf.c: add `strbuf_join_argv()`
      strbuf.c: add `strbuf_insertf()` and `strbuf_vinsertf()`
      t3903: modernize style
      stash: rename test cases to be more descriptive
      stash: add tests for `git stash show` config
      stash: mention options in `show` synopsis
      stash: convert list to builtin
      stash: convert show to builtin
      stash: convert store to builtin
      stash: convert create to builtin
      stash: convert push to builtin
      stash: make push -q quiet
      stash: convert save to builtin
      stash: optimize `get_untracked_files()` and `check_changes()`
      stash: replace all `write-tree` child processes with API calls
      stash: convert `stash--helper.c` into `stash.c`

Peter Krefting (2):
      l10n: sv.po: Update Swedish translation
      l10n: sv.po: Update Swedish translation (4577t0f0u)

Philip Oakley (2):
      rerere doc: quote `rerere.enabled`
      describe doc: remove '7-char' abbreviation reference

Phillip Wood (21):
      am/cherry-pick/rebase/revert: document --rerere-autoupdate
      merge: tweak --rerere-autoupdate documentation
      sequencer: break some long lines
      cherry-pick: demonstrate option amnesia
      cherry-pick --continue: remember options
      commit/reset: try to clean up sequencer state
      fix cherry-pick/revert status after commit
      sequencer: fix cleanup with --signoff and -x
      sequencer.c: save and restore cleanup mode
      sequencer: always discard index after checkout
      rebase: don't translate trace strings
      rebase: rename write_basic_state()
      rebase: use OPT_RERERE_AUTOUPDATE()
      rebase -i: combine rebase--interactive.c with rebase.c
      rebase -i: remove duplication
      rebase -i: use struct commit when parsing options
      rebase -i: use struct object_id for squash_onto
      rebase -i: use struct rebase_options to parse args
      rebase -i: use struct rebase_options in do_interactive_rebase()
      rebase: use a common action enum
      rebase -i: run without forking rebase--interactive

Ralf Thielow (1):
      l10n: de.po: improve description of 'git reset --quiet'

Ramsay Jones (2):
      prune-packed: check for too many arguments
      Makefile: fix 'hdr-check' when GCRYPT not installed

René Scharfe (1):
      get-tar-commit-id: parse comment record

Robert P. J. Day (3):
      mention use of "hooks.allownonascii" in "man githooks"
      docs/git-gc: fix typo "--prune=all" to "--prune=now"
      attr.c: ".gitattribute" -> ".gitattributes" (comments)

Rohit Ashiwal (3):
      test functions: add function `test_file_not_empty`
      t3600: modernize style
      t3600: use helpers to replace test -d/f/e/s <path>

SZEDER Gábor (27):
      test-lib: fix interrupt handling with 'dash' and '--verbose-log -x'
      t/lib-git-daemon: make sure to kill the 'git-daemon' process
      tests: use 'test_atexit' to stop httpd
      t0301-credential-cache: use 'test_atexit' to stop the credentials helper
      git p4 test: clean up the p4d cleanup functions
      git p4 test: simplify timeout handling
      git p4 test: disable '-x' tracing in the p4d watchdog loop
      t9811-git-p4-label-import: fix pipeline negation
      t5318-commit-graph: remove unused variable
      Documentation/git-diff-tree.txt: fix formatting
      Documentation/technical/api-config.txt: fix formatting
      Documentation/technical/protocol-v2.txt: fix formatting
      ci: install Asciidoctor in 'ci/install-dependencies.sh'
      index-pack: show progress while checking objects
      ci: stick with Asciidoctor v1.5.8 for now
      ci: fix AsciiDoc/Asciidoctor stderr check in the documentation build job
      progress: make display_progress() return void
      progress: assemble percentage and counters in a strbuf before printing
      blame: default to HEAD in a bare repo when no start commit is given
      builtin rebase: use FREE_AND_NULL
      builtin rebase: use oideq()
      progress: clear previous progress update dynamically
      progress: break too long progress bar lines
      ci: install 'libsvn-perl' instead of 'git-svn'
      trace2: rename environment variables to GIT_TRACE2*
      trace2: document the supported values of GIT_TRACE2* env variables
      progress: avoid empty line when breaking the progress line

Sun Chao (2):
      pack-redundant: delete redundant code
      pack-redundant: new algorithm to find min packs

Sven Strickroth (1):
      MSVC: include compat/win32/path-utils.h for MSVC, too, for real_path()

Tanushree Tumane (1):
      mingw: remove obsolete IPv6-related code

Taylor Blau (4):
      t: move 'hex2oct' into test-lib-functions.sh
      t: introduce tests for unexpected object types
      list-objects.c: handle unexpected non-blob entries
      list-objects.c: handle unexpected non-tree entries

Thomas Gummerer (15):
      move worktree tests to t24*
      entry: factor out unlink_entry function
      entry: support CE_WT_REMOVE flag in checkout_entry
      read-cache: add invalidate parameter to remove_marked_cache_entries
      checkout: clarify comment
      checkout: factor out mark_cache_entry_for_checkout function
      checkout: introduce --{,no-}overlay option
      checkout: introduce checkout.overlayMode config
      revert "checkout: introduce checkout.overlayMode config"
      ident: don't require calling prepare_fallback_ident first
      stash: drop unused parameter
      stash: pass pathspec as pointer
      glossary: add definition for overlay
      stash: setup default diff output format if necessary
      ls-files: use correct format string

Todd Zullinger (9):
      t4038-diff-combined: quote paths with whitespace
      t9902: test multiple removals via completion.commands
      completion: use __git when calling --list-cmds
      Documentation/rev-list-options: wrap --date=<format> block with "--"
      Documentation/git-status: fix titles in porcelain v2 section
      Documentation/git-svn: improve asciidoctor compatibility
      Documentation/git-show-branch: avoid literal {apostrophe}
      test-lib: try harder to ensure a working jgit
      RelNotes: minor typo fixes in 2.22.0 draft

Torsten Bögershausen (1):
      trace2: NULL is not allowed for va_list

Trần Ngọc Quân (4):
      l10n: Updated Vietnamese translation for v2.21 rd2
      l10n: vi.po(4577t): Updated Vietnamese translation for v2.22.0 round 1
      l10n: vi.po(4580t): Updated Vietnamese translation for v2.22.0 round 2
      l10n: vi.po(4581t): Updated Vietnamese translation for v2.22.0 round 3

Vadim Kochan (1):
      autoconf: #include <libintl.h> when checking for gettext()

William Hubbs (1):
      config: allow giving separate author and committer idents

Yash Bhatambare (1):
      gitattributes.txt: fix typo

brian m. carlson (35):
      t/lib-submodule-update: use appropriate length constant
      khash: move oid hash table definition
      pack-bitmap: make bitmap header handling hash agnostic
      pack-bitmap: convert struct stored_bitmap to object_id
      pack-bitmap: replace sha1_to_hex
      pack-bitmap: switch hard-coded constants to the_hash_algo
      pack-bitmap: switch hash tables to use struct object_id
      submodule: avoid hard-coded constants
      notes-merge: switch to use the_hash_algo
      notes: make hash size independent
      notes: replace sha1_to_hex
      object-store: rename and expand packed_git's sha1 member
      builtin/name-rev: make hash-size independent
      fast-import: make hash-size independent
      fast-import: replace sha1_to_hex
      builtin/am: make hash size independent
      builtin/pull: make hash-size independent
      http-push: convert to use the_hash_algo
      http-backend: allow 64-character hex names
      http-push: remove remaining uses of sha1_to_hex
      http-walker: replace sha1_to_hex
      http: replace hard-coded constant with the_hash_algo
      http: compute hash of downloaded objects using the_hash_algo
      http: replace sha1_to_hex
      remote-curl: make hash size independent
      hash: add a function to lookup hash algorithm by length
      builtin/get-tar-commit-id: make hash size independent
      archive: convert struct archiver_args to object_id
      refspec: make hash size independent
      builtin/difftool: use parse_oid_hex
      dir: make untracked cache extension hash size independent
      read-cache: read data in a hash-independent way
      Git.pm: make hash size independent
      gitweb: make hash size independent
      send-email: default to quoted-printable when CR is present

Ævar Arnfjörð Bjarmason (44):
      receive-pack: fix use-after-free bug
      commit-graph tests: split up corrupt_graph_and_verify()
      commit-graph tests: test a graph that's too small
      Makefile: remove an out-of-date comment
      Makefile: move "strip" assignment down from flags
      Makefile: add/remove comments at top and tweak whitespace
      Makefile: Move *_LIBS assignment into its own section
      Makefile: move the setting of *FLAGS closer to "include"
      Makefile: allow for combining DEVELOPER=1 and CFLAGS="..."
      gc: remove redundant check for gc_auto_threshold
      gc: convert to using the_hash_algo
      gc: refactor a "call me once" pattern
      reflog tests: make use of "test_config" idiom
      reflog tests: test for the "points nowhere" warning
      rebase: remove the rebase.useBuiltin setting
      gc docs: modernize the advice for manually running "gc"
      gc docs: stop noting "repack" flags
      gc docs: clean grammar for "gc.bigPackThreshold"
      commit-graph: fix segfault on e.g. "git status"
      commit-graph: don't early exit(1) on e.g. "git status"
      commit-graph: don't pass filename to load_commit_graph_one_fd_st()
      commit-graph verify: detect inability to read the graph
      commit-graph write: don't die if the existing graph is corrupt
      commit-graph: improve & i18n error messages
      reflog tests: assert lack of early exit with expiry="never"
      gc: handle & check gc.reflogExpire config
      test-lib: whitelist GIT_TR2_* in the environment
      gc docs: include the "gc.*" section from "config" in "gc"
      gc docs: re-flow the "gc.*" section in "config"
      gc docs: fix formatting for "gc.writeCommitGraph"
      gc docs: note how --aggressive impacts --window & --depth
      gc docs: downplay the usefulness of --aggressive
      gc docs: note "gc --aggressive" in "fast-import"
      gc docs: clarify that "gc" doesn't throw away referenced objects
      gc docs: remove incorrect reference to gc.auto=0
      perf README: correct docs for 3c8f12c96c regression
      perf aggregate: remove GIT_TEST_INSTALLED from --codespeed
      perf-lib.sh: make "./run <revisions>" use the correct gits
      perf-lib.sh: remove GIT_TEST_INSTALLED from perf-lib.sh
      perf tests: add "bindir" prefix to git tree test results
      perf-lib.sh: forbid the use of GIT_TEST_INSTALLED
      trace2: fix up a missing "leave" entry point
      trace2: fix up a missing "leave" entry point
      sha1dc: update from upstream

İsmail Dönmez (2):
      mingw: do not let ld strip relocations
      mingw: enable DEP and ASLR


^ permalink raw reply	[relevance 2%]

* Git for Windows v2.22.0-rc3, was Re: [ANNOUNCE] Git v2.22.0-rc3
  2019-06-03 20:23  2% [ANNOUNCE] Git v2.22.0-rc3 Junio C Hamano
  2019-06-04  1:32  0% ` Ben Humphreys
  2019-06-04  1:47  0% ` Bhaskar Chowdhury
@ 2019-06-04 14:45  0% ` Johannes Schindelin
  2 siblings, 0 replies; 162+ results
From: Johannes Schindelin @ 2019-06-04 14:45 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, git-for-windows, git-packagers

[-- Attachment #1: Type: text/plain, Size: 73951 bytes --]

Team,

I was a bit too tired last night to wait for the trusty Azure Pipelines to
finish publishing this preview, so with a bit of delay, here comes the
announcement:

https://github.com/git-for-windows/git/releases/tag/v2.22.0-rc3.windows.1

Thanks,
Johannes

On Mon, 3 Jun 2019, Junio C Hamano wrote:

> A release candidate Git v2.22.0-rc3 is now available for testing
> at the usual places.  It is comprised of 718 non-merge commits
> since v2.21.0, contributed by 67 people, 17 of which are new faces.
>
> Hopefully, this will be the last -rc during this cycle.
>
> The tarballs are found at:
>
>     https://www.kernel.org/pub/software/scm/git/testing/
>
> The following public repositories all have a copy of the
> 'v2.22.0-rc3' tag and the 'master' branch that the tag points at:
>
>   url = https://kernel.googlesource.com/pub/scm/git/git
>   url = git://repo.or.cz/alt-git.git
>   url = https://github.com/gitster/git
>
> New contributors whose contributions weren't in v2.21.0 are as follows.
> Welcome to the Git development community!
>
>   Alexander Blesius, Baruch Siach, Boxuan Li, Chris Mayo,
>   Chris. Webster, Clément Chigot, Corentin BOMPARD, Damien Robert,
>   Dustin Spicuzza, Emily Shaffer, Michal Suchanek, Rohit Ashiwal,
>   Sun Chao, Tanushree Tumane, Vadim Kochan, William Hubbs, and
>   Yash Bhatambare.
>
> Returning contributors who helped this release are as follows.
> Thanks for your continued support.
>
>   Ævar Arnfjörð Bjarmason, Alban Gruin, Alexander Shopov, Anders
>   Waldenborg, Andreas Heiduk, Andrei Rybak, Beat Bolli, Ben Peart,
>   Brandon Richardson, brian m. carlson, Carlo Marcelo Arenas
>   Belón, Christian Couder, Daniels Umanovskis, David Aguilar,
>   David Kastrup, Denton Liu, Derrick Stolee, Elijah Newren, Eric
>   Sunshine, Eric Wong, İsmail Dönmez, Jean-Noël Avila, Jeff
>   Hostetler, Jeff King, Jiang Xin, Joel Teichroeb, Joey Hess,
>   Johannes Schindelin, Jonathan Tan, Jordi Mas, Josh Steadmon,
>   Junio C Hamano, Kyle Meyer, Martin Ågren, Matthew Kraai, Mike
>   Hommey, Nguyễn Thái Ngọc Duy, Paul-Sebastian Ungureanu,
>   Philip Oakley, Phillip Wood, Ramsay Jones, René Scharfe,
>   Robert P. J. Day, Sven Strickroth, SZEDER Gábor, Taylor Blau,
>   Thomas Gummerer, Todd Zullinger, Torsten Bögershausen, and
>   Trần Ngọc Quân.
>
> ----------------------------------------------------------------
>
> Git 2.22 Release Notes (draft)
> ==============================
>
> Updates since v2.21
> -------------------
>
> Backward compatibility note
>
>  * The filter specification "--filter=sparse:path=<path>" used to
>    create a lazy/partial clone has been removed.  Using a blob that is
>    part of the project as sparse specification is still supported with
>    the "--filter=sparse:oid=<blob>" option.
>
> UI, Workflows & Features
>
>  * "git checkout --no-overlay" can be used to trigger a new mode of
>    checking out paths out of the tree-ish, that allows paths that
>    match the pathspec that are in the current index and working tree
>    and are not in the tree-ish.
>
>  * The %(trailers) formatter in "git log --format=..."  now allows to
>    optionally pick trailers selectively by keyword, show only values,
>    etc.
>
>  * Four new configuration variables {author,committer}.{name,email}
>    have been introduced to override user.{name,email} in more specific
>    cases.
>
>  * Command-line completion (in contrib/) learned to tab-complete the
>    "git submodule absorbgitdirs" subcommand.
>
>  * "git branch" learned a new subcommand "--show-current".
>
>  * Output from "diff --cc" did not show the original paths when the
>    merge involved renames.  A new option adds the paths in the
>    original trees to the output.
>
>  * The command line completion (in contrib/) has been taught to
>    complete more subcommand parameters.
>
>  * The final report from "git bisect" used to show the suspected
>    culprit using a raw "diff-tree", with which there is no output for
>    a merge commit.  This has been updated to use a more modern and
>    human readable output that still is concise enough.
>
>  * "git rebase --rebase-merges" replaces its old "--preserve-merges"
>    option; the latter is now marked as deprecated.
>
>  * Error message given while cloning with --recurse-submodules has
>    been updated.
>
>  * The completion helper code now pays attention to repository-local
>    configuration (when available), which allows --list-cmds to honour
>    a repository specific setting of completion.commands, for example.
>
>  * "git mergetool" learned to offer Sublime Merge (smerge) as one of
>    its backends.
>
>  * A new hook "post-index-change" is called when the on-disk index
>    file changes, which can help e.g. a virtualized working tree
>    implementation.
>
>  * "git difftool" can now run outside a repository.
>
>  * "git checkout -m <other>" was about carrying the differences
>    between HEAD and the working-tree files forward while checking out
>    another branch, and ignored the differences between HEAD and the
>    index.  The command has been taught to abort when the index and the
>    HEAD are different.
>
>  * A progress indicator has been added to the "index-pack" step, which
>    often makes users wait for completion during "git clone".
>
>  * "git submodule" learns "set-branch" subcommand that allows the
>    submodule.*.branch settings to be modified.
>
>  * "git merge-recursive" backend recently learned a new heuristics to
>    infer file movement based on how other files in the same directory
>    moved.  As this is inherently less robust heuristics than the one
>    based on the content similarity of the file itself (rather than
>    based on what its neighbours are doing), it sometimes gives an
>    outcome unexpected by the end users.  This has been toned down to
>    leave the renamed paths in higher/conflicted stages in the index so
>    that the user can examine and confirm the result.
>
>  * "git tag" learned to give an advice suggesting it might be a
>    mistake when creating an annotated or signed tag that points at
>    another tag.
>
>  * The "git pack-objects" command learned to report the number of
>    objects it packed via the trace2 mechanism.
>
>  * The list of conflicted paths shown in the editor while concluding a
>    conflicted merge was shown above the scissors line when the
>    clean-up mode is set to "scissors", even though it was commented
>    out just like the list of updated paths and other information to
>    help the user explain the merge better.
>
>  * The trace2 tracing facility learned to auto-generate a filename
>    when told to log to a directory.
>
>  * "git clone" learned a new --server-option option when talking over
>    the protocol version 2.
>
>  * The connectivity bitmaps are created by default in bare
>    repositories now; also the pathname hash-cache is created by
>    default to avoid making crappy deltas when repacking.
>
>  * "git branch new A...B" and "git checkout -b new A...B" have been
>    taught that in their contexts, the notation A...B means "the merge
>    base between these two commits", just like "git checkout A...B"
>    detaches HEAD at that commit.
>
>  * Update "git difftool" and "git mergetool" so that the combinations
>    of {diff,merge}.{tool,guitool} configuration variables serve as
>    fallback settings of each other in a sensible order.
>
>  * The "--dir-diff" mode of "git difftool" is not useful in "--no-index"
>    mode; they are now explicitly marked as mutually incompatible.
>
>
> Performance, Internal Implementation, Development Support etc.
>
>  * The diff machinery, one of the oldest parts of the system, which
>    long predates the parse-options API, uses fairly long and complex
>    handcrafted option parser.  This is being rewritten to use the
>    parse-options API.
>
>  * The implementation of pack-redundant has been updated for
>    performance in a repository with many packfiles.
>
>  * A more structured way to obtain execution trace has been added.
>
>  * "git prune" has been taught to take advantage of reachability
>    bitmap when able.
>
>  * The command line parser of "git commit-tree" has been rewritten to
>    use the parse-options API.
>
>  * Suggest GitGitGadget instead of submitGit as a way to submit
>    patches based on GitHub PR to us.
>
>  * The test framework has been updated to help developers by making it
>    easier to run most of the tests under different versions of
>    over-the-wire protocols.
>
>  * Dev support update to make it easier to compare two formatted
>    results from our documentation.
>
>  * The scripted "git rebase" implementation has been retired.
>
>  * "git multi-pack-index verify" did not scale well with the number of
>    packfiles, which is being improved.
>
>  * "git stash" has been rewritten in C.
>
>  * The "check-docs" Makefile target to support developers has been
>    updated.
>
>  * The tests have been updated not to rely on the abbreviated option
>    names the parse-options API offers, to protect us from an
>    abbreviated form of an option that used to be unique within the
>    command getting non-unique when a new option that share the same
>    prefix is added.
>
>  * The scripted version of "git rebase -i" wrote and rewrote the todo
>    list many times during a single step of its operation, and the
>    recent C-rewrite made a faithful conversion of the logic to C.  The
>    implementation has been updated to carry necessary information
>    around in-core to avoid rewriting the same file over and over
>    unnecessarily.
>
>  * Test framework update to more robustly clean up leftover files and
>    processes after tests are done.
>
>  * Conversion from unsigned char[20] to struct object_id continues.
>
>  * While running "git diff" in a lazy clone, we can upfront know which
>    missing blobs we will need, instead of waiting for the on-demand
>    machinery to discover them one by one.  The code learned to aim to
>    achieve better performance by batching the request for these
>    promised blobs.
>
>  * During an initial "git clone --depth=..." partial clone, it is
>    pointless to spend cycles for a large portion of the connectivity
>    check that enumerates and skips promisor objects (which by
>    definition is all objects fetched from the other side).  This has
>    been optimized out.
>
>  * Mechanically and systematically drop "extern" from function
>    declaration.
>
>  * The script to aggregate perf result unconditionally depended on
>    libjson-perl even though it did not have to, which has been
>    corrected.
>
>  * The internal implementation of "git rebase -i" has been updated to
>    avoid forking a separate "rebase--interactive" process.
>
>  * Allow DEP and ASLR for Windows build to for security hardening.
>
>  * Performance test framework has been broken and measured the version
>    of Git that happens to be on $PATH, not the specified one to
>    measure, for a while, which has been corrected.
>
>  * Optionally "make coccicheck" can feed multiple source files to
>    spatch, gaining performance while spending more memory.
>
>  * Attempt to use an abbreviated option in "git clone --recurs" is
>    responded by a request to disambiguate between --recursive and
>    --recurse-submodules, which is bad because these two are synonyms.
>    The parse-options API has been extended to define such synonyms
>    more easily and not produce an unnecessary failure.
>
>  * A pair of private functions in http.c that had names similar to
>    fread/fwrite did not return the number of elements, which was found
>    to be confusing.
>
>  * Update collision-detecting SHA-1 code to build properly on HP-UX.
>
>
> Fixes since v2.21
> -----------------
>
>  * "git prune-packed" did not notice and complain against excess
>    arguments given from the command line, which now it does.
>    (merge 9b0bd87ed2 rj/prune-packed-excess-args later to maint).
>
>  * Split-index fix.
>    (merge 6e37c8ed3c nd/split-index-null-base-fix later to maint).
>
>  * "git diff --no-index" may still want to access Git goodies like
>    --ext-diff and --textconv, but so far these have been ignored,
>    which has been corrected.
>    (merge 287ab28bfa jk/diff-no-index-initialize later to maint).
>
>  * Unify RPC code for smart http in protocol v0/v1 and v2, which fixes
>    a bug in the latter (lack of authentication retry) and generally
>    improves the code base.
>    (merge a97d00799a jt/http-auth-proto-v2-fix later to maint).
>
>  * The include file compat/bswap.h has been updated so that it is safe
>    to (accidentally) include it more than once.
>    (merge 33aa579a55 jk/guard-bswap-header later to maint).
>
>  * The set of header files used by "make hdr-check" unconditionally
>    included sha256/gcrypt.h, even when it is not used, causing the
>    make target to fail.  We now skip it when GCRYPT_SHA256 is not in
>    use.
>    (merge f23aa18e7f rj/hdr-check-gcrypt-fix later to maint).
>
>  * The Makefile uses 'find' utility to enumerate all the *.h header
>    files, which is expensive on platforms with slow filesystems; it
>    now optionally uses "ls-files" if working within a repository,
>    which is a trick similar to how all sources are enumerated to run
>    ETAGS on.
>    (merge 92b88eba9f js/find-lib-h-with-ls-files-when-possible later to maint).
>
>  * "git rebase" that was reimplemented in C did not set ORIG_HEAD
>    correctly, which has been corrected.
>    (merge cbd29ead92 js/rebase-orig-head-fix later to maint).
>
>  * Dev support.
>    (merge f545737144 js/stress-test-ui-tweak later to maint).
>
>  * CFLAGS now can be tweaked when invoking Make while using
>    DEVELOPER=YesPlease; this did not work well before.
>    (merge 6d5d4b4e93 ab/makefile-help-devs-more later to maint).
>
>  * "git fsck --connectivity-only" omits computation necessary to sift
>    the objects that are not reachable from any of the refs into
>    unreachable and dangling.  This is now enabled when dangling
>    objects are requested (which is done by default, but can be
>    overridden with the "--no-dangling" option).
>    (merge 8d8c2a5aef jk/fsck-doc later to maint).
>
>  * On platforms where "git fetch" is killed with SIGPIPE (e.g. OSX),
>    the upload-pack that runs on the other end that hangs up after
>    detecting an error could cause "git fetch" to die with a signal,
>    which led to a flaky test.  "git fetch" now ignores SIGPIPE during
>    the network portion of its operation (this is not a problem as we
>    check the return status from our write(2)s).
>    (merge 143588949c jk/no-sigpipe-during-network-transport later to maint).
>
>  * A recent update broke "is this object available to us?" check for
>    well-known objects like an empty tree (which should yield "yes",
>    even when there is no on-disk object for an empty tree), which has
>    been corrected.
>    (merge f06ab027ef jk/virtual-objects-do-exist later to maint).
>
>  * The setup code has been cleaned up to avoid leaks around the
>    repository_format structure.
>    (merge e8805af1c3 ma/clear-repository-format later to maint).
>
>  * "git config --type=color ..." is meant to replace "git config --get-color"
>    but there is a slight difference that wasn't documented, which is
>    now fixed.
>    (merge cd8e7593b9 jk/config-type-color-ends-with-lf later to maint).
>
>  * When the "clean" filter can reduce the size of a huge file in the
>    working tree down to a small "token" (a la Git LFS), there is no
>    point in allocating a huge scratch area upfront, but the buffer is
>    sized based on the original file size.  The convert mechanism now
>    allocates very minimum and reallocates as it receives the output
>    from the clean filter process.
>    (merge 02156ab031 jh/resize-convert-scratch-buffer later to maint).
>
>  * "git rebase" uses the refs/rewritten/ hierarchy to store its
>    intermediate states, which inherently makes the hierarchy per
>    worktree, but it didn't quite work well.
>    (merge b9317d55a3 nd/rewritten-ref-is-per-worktree later to maint).
>
>  * "git log -L<from>,<to>:<path>" with "-s" did not suppress the patch
>    output as it should.  This has been corrected.
>    (merge 05314efaea jk/line-log-with-patch later to maint).
>
>  * "git worktree add" used to do a "find an available name with stat
>    and then mkdir", which is race-prone.  This has been fixed by using
>    mkdir and reacting to EEXIST in a loop.
>    (merge 7af01f2367 ms/worktree-add-atomic-mkdir later to maint).
>
>  * Build update for SHA-1 with collision detection.
>    (merge 07a20f569b jk/sha1dc later to maint).
>
>  * Build procedure has been fixed around use of asciidoctor instead of
>    asciidoc.
>    (merge 185f9a0ea0 ma/asciidoctor-fixes later to maint).
>
>  * remote-http transport did not anonymize URLs reported in its error
>    messages at places.
>    (merge c1284b21f2 js/anonymize-remote-curl-diag later to maint).
>
>  * Error messages given from the http transport have been updated so
>    that they can be localized.
>    (merge ed8b4132c8 js/remote-curl-i18n later to maint).
>
>  * "git init" forgot to read platform-specific repository
>    configuration, which made Windows port to ignore settings of
>    core.hidedotfiles, for example.
>
>  * A corner-case object name ambiguity while the sequencer machinery
>    is working (e.g. "rebase -i -x") has been fixed.
>
>  * "git format-patch" did not diagnose an error while opening the
>    output file for the cover-letter, which has been corrected.
>    (merge 2fe95f494c jc/format-patch-error-check later to maint).
>
>  * "git checkout -f <branch>" while the index has an unmerged path
>    incorrectly left some paths in an unmerged state, which has been
>    corrected.
>
>  * A corner case bug in the refs API has been corrected.
>    (merge d3322eb28b jk/refs-double-abort later to maint).
>
>  * Unicode update.
>    (merge 584b62c37b bb/unicode-12 later to maint).
>
>  * dumb-http walker has been updated to share more error recovery
>    strategy with the normal codepath.
>
>  * A buglet in configuration parser has been fixed.
>    (merge 19e7fdaa58 nd/include-if-wildmatch later to maint).
>
>  * The documentation for "git read-tree --reset -u" has been updated.
>    (merge b5a0bd694c nd/read-tree-reset-doc later to maint).
>
>  * Code clean-up around a much-less-important-than-it-used-to-be
>    update_server_info() function.
>    (merge b3223761c8 jk/server-info-rabbit-hole later to maint).
>
>  * The message given when "git commit -a <paths>" errors out has been
>    updated.
>    (merge 5a1dbd48bc nd/commit-a-with-paths-msg-update later to maint).
>
>  * "git cherry-pick --options A..B", after giving control back to the
>    user to ask help resolving a conflicted step, did not honor the
>    options it originally received, which has been corrected.
>
>  * Various glitches in "git gc" around reflog handling have been fixed.
>
>  * The code to read from commit-graph file has been cleanup with more
>    careful error checking before using data read from it.
>
>  * Performance fix around "git fetch" that grabs many refs.
>    (merge b764300912 jt/fetch-pack-wanted-refs-optim later to maint).
>
>  * Protocol v2 support in "git fetch-pack" of shallow clones has been
>    corrected.
>
>  * Performance fix around "git blame", especially in a linear history
>    (which is the norm we should optimize for).
>    (merge f892014943 dk/blame-keep-origin-blob later to maint).
>
>  * Performance fix for "rev-list --parents -- pathspec".
>    (merge 8320b1dbe7 jk/revision-rewritten-parents-in-prio-queue later to maint).
>
>  * Updating the display with progress message has been cleaned up to
>    deal better with overlong messages.
>    (merge 545dc345eb sg/overlong-progress-fix later to maint).
>
>  * "git blame -- path" in a non-bare repository starts blaming from
>    the working tree, and the same command in a bare repository errors
>    out because there is no working tree by definition.  The command
>    has been taught to instead start blaming from the commit at HEAD,
>    which is more useful.
>    (merge a544fb08f8 sg/blame-in-bare-start-at-head later to maint).
>
>  * An underallocation in the code to read the untracked cache
>    extension has been corrected.
>    (merge 3a7b45a623 js/untracked-cache-allocfix later to maint).
>
>  * The code is updated to check the result of memory allocation before
>    it is used in more places, by using xmalloc and/or xcalloc calls.
>    (merge 999b951b28 jk/xmalloc later to maint).
>
>  * The GETTEXT_POISON test option has been quite broken ever since it
>    was made runtime-tunable, which has been fixed.
>    (merge f88b9cb603 jc/gettext-test-fix later to maint).
>
>  * Test fix on APFS that is incapable of store paths in Latin-1.
>    (merge 3889149619 js/iso8895-test-on-apfs later to maint).
>
>  * "git submodule foreach <command> --quiet" did not pass the option
>    down correctly, which has been corrected.
>    (merge a282f5a906 nd/submodule-foreach-quiet later to maint).
>
>  * "git send-email" has been taught to use quoted-printable when the
>    payload contains carriage-return.  The use of the mechanism is in
>    line with the design originally added the codepath that chooses QP
>    when the payload has overly long lines.
>    (merge 74d76a1701 bc/send-email-qp-cr later to maint).
>
>  * The recently added feature to add addresses that are on
>    anything-by: trailers in 'git send-email' was found to be way too
>    eager and considered nonsense strings as if they can be legitimate
>    beginning of *-by: trailer.  This has been tightened.
>
>  * Builds with gettext broke on recent macOS w/ Homebrew, which
>    seems to have stopped including from /usr/local/include; this
>    has been corrected.
>    (merge 92a1377a2a js/macos-gettext-build later to maint).
>
>  * Running "git add" on a repository created inside the current
>    repository is an explicit indication that the user wants to add it
>    as a submodule, but when the HEAD of the inner repository is on an
>    unborn branch, it cannot be added as a submodule.  Worse, the files
>    in its working tree can be added as if they are a part of the outer
>    repository, which is not what the user wants.  These problems are
>    being addressed.
>    (merge f937bc2f86 km/empty-repo-is-still-a-repo later to maint).
>
>  * "git cherry-pick" run with the "-x" or the "--signoff" option used
>    to (and more importantly, ought to) clean up the commit log message
>    with the --cleanup=space option by default, but this has been
>    broken since late 2017.  This has been fixed.
>
>  * When given a tag that points at a commit-ish, "git replace --graft"
>    failed to peel the tag before writing a replace ref, which did not
>    make sense because the old graft mechanism the feature wants to
>    mimic only allowed to replace one commit object with another.
>    This has been fixed.
>    (merge ee521ec4cb cc/replace-graft-peel-tags later to maint).
>
>  * Code tightening against a "wrong" object appearing where an object
>    of a different type is expected, instead of blindly assuming that
>    the connection between objects are correctly made.
>    (merge 97dd512af7 tb/unexpected later to maint).
>
>  * An earlier update for MinGW and Cygwin accidentally broke MSVC build,
>    which has been fixed.
>    (merge 22c3634c0f ss/msvc-path-utils-fix later to maint).
>
>  * %(push:track) token used in the --format option to "git
>    for-each-ref" and friends was not showing the right branch, which
>    has been fixed.
>    (merge c646d0934e dr/ref-filter-push-track-fix later to maint).
>
>  * "make check-docs", "git help -a", etc. did not account for cases
>    where a particular build may deliberately omit some subcommands,
>    which has been corrected.
>
>  * The logic to tell if a Git repository has a working tree protects
>    "git branch -D" from removing the branch that is currently checked
>    out by mistake.  The implementation of this logic was broken for
>    repositories with unusual name, which unfortunately is the norm for
>    submodules these days.  This has been fixed.
>    (merge f3534c98e4 jt/submodule-repo-is-with-worktree later to maint).
>
>  * AIX shared the same build issues with other BSDs around fileno(fp),
>    which has been corrected.
>    (merge ee662bf5c6 cc/aix-has-fileno-as-a-macro later to maint).
>
>  * The autoconf generated configure script failed to use the right
>    gettext() implementations from -libintl by ignoring useless stub
>    implementations shipped in some C library, which has been
>    corrected.
>    (merge b71e56a683 vk/autoconf-gettext later to maint).
>
>  * Fix index-pack perf test so that the repeated invocations always
>    run in an empty repository, which emulates the initial clone
>    situation better.
>    (merge 775c71e16d jk/p5302-avoid-collision-check-cost later to maint).
>
>  * A "ls-files" that emulates "find" to enumerate files in the working
>    tree resulted in duplicated Makefile rules that caused the build to
>    issue an unnecessary warning during a trial build after merge
>    conflicts are resolved in working tree *.h files but before the
>    resolved results are added to the index.  This has been corrected.
>
>  * "git cherry-pick" (and "revert" that shares the same runtime engine)
>    that deals with multiple commits got confused when the final step
>    gets stopped with a conflict and the user concluded the sequence
>    with "git commit".  Attempt to fix it by cleaning up the state
>    files used by these commands in such a situation.
>    (merge 4a72486de9 pw/clean-sequencer-state-upon-final-commit later to maint).
>
>  * On a filesystem like HFS+, the names of the refs stored as filesystem
>    entities may become different from what the end-user expects, just
>    like files in the working tree get "renamed".  Work around the
>    mismatch by paying attention to the core.precomposeUnicode
>    configuration.
>    (merge 8e712ef6fc en/unicode-in-refnames later to maint).
>
>  * The code to generate the multi-pack idx file was not prepared to
>    see too many packfiles and ran out of open file descriptor, which
>    has been corrected.
>
>  * To run tests for Git SVN, our scripts for CI used to install the
>    git-svn package (in the hope that it would bring in the right
>    dependencies).  This has been updated to install the more direct
>    dependency, namely, libsvn-perl.
>    (merge db864306cf sg/ci-libsvn-perl later to maint).
>
>  * "git cvsexportcommit" running on msys did not expect cvsnt showed
>    "cvs status" output with CRLF line endings.
>
>  * The fsmonitor interface got out of sync after the in-core index
>    file gets discarded, which has been corrected.
>    (merge 398a3b0899 js/fsmonitor-refresh-after-discarding-index later to maint).
>
>  * "git status" did not know that the "label" instruction in the
>    todo-list "rebase -i -r" uses should not be shown as a hex object
>    name.
>
>  * A prerequisite check in the test suite to see if a working jgit is
>    available was made more robust.
>    (merge abd0f28983 tz/test-lib-check-working-jgit later to maint).
>
>  * The codepath to parse :<path> that obtains the object name for an
>    indexed object has been made more robust.
>
>  * Code cleanup, docfix, build fix, etc.
>    (merge 11f470aee7 jc/test-yes-doc later to maint).
>    (merge 90503a240b js/doc-symref-in-proto-v1 later to maint).
>    (merge 5c326d1252 jk/unused-params later to maint).
>    (merge 68cabbfda3 dl/doc-submodule-wo-subcommand later to maint).
>    (merge 9903623761 ab/receive-pack-use-after-free-fix later to maint).
>    (merge 1ede45e44b en/merge-options-doc later to maint).
>    (merge 3e14dd2c8e rd/doc-hook-used-in-sample later to maint).
>    (merge c271dc28fd nd/no-more-check-racy later to maint).
>    (merge e6e15194a8 yb/utf-16le-bom-spellfix later to maint).
>    (merge bb101aaf0c rd/attr.c-comment-typofix later to maint).
>    (merge 716a5af812 rd/gc-prune-doc-fix later to maint).
>    (merge 50b206371d js/untravis-windows later to maint).
>    (merge dbf47215e3 js/rebase-recreate-merge later to maint).
>    (merge 56cb2d30f8 dl/reset-doc-no-wrt-abbrev later to maint).
>    (merge 64eca306a2 ja/dir-rename-doc-markup-fix later to maint).
>    (merge af91b0230c dl/ignore-docs later to maint).
>    (merge 59a06e947b ra/t3600-test-path-funcs later to maint).
>    (merge e041d0781b ar/t4150-remove-cruft later to maint).
>    (merge 8d75a1d183 ma/asciidoctor-fixes-more later to maint).
>    (merge 74cc547b0f mh/pack-protocol-doc-fix later to maint).
>    (merge ed31851fa6 ab/doc-misc-typofixes later to maint).
>    (merge a7256debd4 nd/checkout-m-doc-update later to maint).
>    (merge 3a9e1ad78d jt/t5551-protocol-v2-does-not-have-half-auth later to maint).
>    (merge 0b918b75af sg/t5318-cleanup later to maint).
>    (merge 68ed71b53c cb/doco-mono later to maint).
>    (merge a34dca2451 nd/interpret-trailers-docfix later to maint).
>    (merge cf7b857a77 en/fast-import-parsing-fix later to maint).
>    (merge fe61ccbc35 po/rerere-doc-fmt later to maint).
>    (merge ffea0248bf po/describe-not-necessarily-7 later to maint).
>    (merge 7cb7283adb tg/ls-files-debug-format-fix later to maint).
>    (merge f64a21bd82 tz/doc-apostrophe-no-longer-needed later to maint).
>    (merge dbe7b41019 js/t3301-unbreak-notes-test later to maint).
>    (merge d8083e4180 km/t3000-retitle later to maint).
>    (merge 9e4cbccbd7 tz/git-svn-doc-markup-fix later to maint).
>    (merge da9ca955a7 jk/ls-files-doc-markup-fix later to maint).
>    (merge 6804ba3a58 cw/diff-highlight later to maint).
>    (merge 1a8787144d nd/submodule-helper-incomplete-line-fix later to maint).
>    (merge d9ef573837 jk/apache-lsan later to maint).
>    (merge c871fbee2b js/t6500-use-windows-pid-on-mingw later to maint).
>    (merge ce4c7bfc90 bl/t4253-exit-code-from-format-patch later to maint).
>    (merge 397a46db78 js/t5580-unc-alternate-test later to maint).
>    (merge d4907720a2 cm/notes-comment-fix later to maint).
>    (merge 9dde06de13 cb/http-push-null-in-message-fix later to maint).
>    (merge 4c785c0edc js/rebase-config-bitfix later to maint).
>    (merge 8e9fe16c87 es/doc-gitsubmodules-markup later to maint).
>
> ----------------------------------------------------------------
>
> Changes since v2.21.0 are as follows:
>
> Alban Gruin (18):
>       sequencer: changes in parse_insn_buffer()
>       sequencer: make the todo_list structure public
>       sequencer: remove the 'arg' field from todo_item
>       sequencer: refactor transform_todos() to work on a todo_list
>       sequencer: introduce todo_list_write_to_file()
>       sequencer: refactor check_todo_list() to work on a todo_list
>       sequencer: refactor sequencer_add_exec_commands() to work on a todo_list
>       sequencer: refactor rearrange_squash() to work on a todo_list
>       sequencer: make sequencer_make_script() write its script to a strbuf
>       sequencer: change complete_action() to use the refactored functions
>       rebase--interactive: move sequencer_add_exec_commands()
>       rebase--interactive: move rearrange_squash_in_todo_file()
>       sequencer: refactor skip_unnecessary_picks() to work on a todo_list
>       rebase-interactive: use todo_list_write_to_file() in edit_todo_list()
>       rebase-interactive: append_todo_help() changes
>       rebase-interactive: rewrite edit_todo_list() to handle the initial edit
>       sequencer: use edit_todo_list() in complete_action()
>       rebase--interactive: move transform_todo_file()
>
> Alexander Blesius (1):
>       doc: fix typos in man pages
>
> Alexander Shopov (1):
>       gitk: Update Bulgarian translation (317t)
>
> Anders Waldenborg (7):
>       doc: group pretty-format.txt placeholders descriptions
>       pretty: allow %(trailers) options with explicit value
>       pretty: single return path in %(trailers) handling
>       pretty: allow showing specific trailers
>       pretty: add support for "valueonly" option in %(trailers)
>       strbuf: separate callback for strbuf_expand:ing literals
>       pretty: add support for separator option in %(trailers)
>
> Andreas Heiduk (1):
>       revisions.txt: remove ambibuity between <rev>:<path> and :<path>
>
> Andrei Rybak (1):
>       t4150: remove unused variable
>
> Baruch Siach (1):
>       send-email: don't cc *-by lines with '-' prefix
>
> Beat Bolli (1):
>       unicode: update the width tables to Unicode 12
>
> Ben Peart (1):
>       read-cache: add post-index-change hook
>
> Boxuan Li (1):
>       t4253-am-keep-cr-dos: avoid using pipes
>
> Brandon Richardson (1):
>       commit-tree: utilize parse-options api
>
> Carlo Marcelo Arenas Belón (1):
>       http-push: prevent format overflow warning with gcc >= 9
>
> Chris Mayo (1):
>       notes: correct documentation of format_display_notes()
>
> Chris. Webster (1):
>       diff-highlight: use correct /dev/null for UNIX and Windows
>
> Christian Couder (5):
>       t6050: use test_line_count instead of wc -l
>       t6050: redirect expected error output to a file
>       replace: peel tag when passing a tag as parent to --graft
>       replace: peel tag when passing a tag first to --graft
>       list-objects-filter: disable 'sparse:path' filters
>
> Clément Chigot (2):
>       Makefile: use fileno macro work around on AIX
>       git-compat-util: work around for access(X_OK) under root
>
> Corentin BOMPARD (2):
>       doc/CodingGuidelines: URLs and paths as monospace
>       doc: format pathnames and URLs as monospace.
>
> Damien Robert (1):
>       ref-filter: use correct branch for %(push:track)
>
> Daniels Umanovskis (1):
>       branch: introduce --show-current display option
>
> David Aguilar (2):
>       mergetools: add support for smerge (Sublime Merge)
>       contrib/completion: add smerge to the mergetool completion candidates
>
> David Kastrup (1):
>       blame.c: don't drop origin blobs as eagerly
>
> Denton Liu (38):
>       completion: complete git submodule absorbgitdirs
>       git-submodule.txt: "--branch <branch>" option defaults to 'master'
>       submodule--helper: teach config subcommand --unset
>       submodule: document default behavior
>       git-reset.txt: clarify documentation
>       git-clean.txt: clarify ignore pattern files
>       docs: move core.excludesFile from git-add to gitignore
>       contrib/subtree: ensure only one rev is provided
>       midx.c: convert FLEX_ALLOC_MEM to FLEX_ALLOC_STR
>       cocci: FLEX_ALLOC_MEM to FLEX_ALLOC_STR
>       tag: fix formatting
>       submodule: teach set-branch subcommand
>       tag: advise on nested tags
>       t7600: clean up style
>       t3507: clean up style
>       t7604: clean up style
>       t7502: clean up style
>       commit: extract cleanup_mode functions to sequencer
>       parse-options.h: extract common --cleanup option
>       merge: cleanup messages like commit
>       merge: add scissors line on merge conflict
>       cherry-pick/revert: add scissors line on merge conflict
>       t7610: unsuppress output
>       t7610: add mergetool --gui tests
>       *.[ch]: remove extern from function declarations using spatch
>       *.[ch]: remove extern from function declarations using sed
>       *.[ch]: manually align parameter lists
>       t2018: cleanup in current test
>       branch: make create_branch accept a merge base rev
>       revisions.txt: change "rev" to "<rev>"
>       revisions.txt: mark optional rev arguments with []
>       revisions.txt: mention <rev>~ form
>       tag: fix typo in nested tagging hint
>       mergetool: use get_merge_tool function
>       mergetool--lib: create gui_mode function
>       mergetool: fallback to tool when guitool unavailable
>       difftool: make --gui, --tool and --extcmd mutually exclusive
>       difftool: fallback on merge.guitool
>
> Derrick Stolee (4):
>       trace2:data: pack-objects: add trace2 regions
>       midx: pass a repository pointer
>       midx: add packs to packed_git linked list
>       trace2: add variable description to git.txt
>
> Dustin Spicuzza (1):
>       cvsexportcommit: force crlf translation
>
> Elijah Newren (23):
>       log,diff-tree: add --combined-all-paths option
>       merge-options.txt: correct wording of --no-commit option
>       t9300: demonstrate bug with get-mark and empty orphan commits
>       git-fast-import.txt: fix wording about where ls command can appear
>       fast-import: check most prominent commands first
>       fast-import: only allow cat-blob requests where it makes sense
>       fast-import: fix erroneous handling of get-mark with empty orphan commits
>       Use 'unsigned short' for mode, like diff_filespec does
>       merge-recursive: rename merge_options argument from 'o' to 'opt'
>       merge-recursive: rename diff_filespec 'one' to 'o'
>       merge-recursive: rename locals 'o' and 'a' to 'obuf' and 'abuf'
>       merge-recursive: use 'ci' for rename_conflict_info variable name
>       merge-recursive: move some struct declarations together
>       merge-recursive: shrink rename_conflict_info
>       merge-recursive: remove ren[12]_other fields from rename_conflict_info
>       merge-recursive: track branch where rename occurred in rename struct
>       merge-recursive: cleanup handle_rename_* function signatures
>       merge-recursive: switch from (oid,mode) pairs to a diff_filespec
>       t6043: fix copied test description to match its purpose
>       merge-recursive: track information associated with directory renames
>       merge-recursive: give callers of handle_content_merge() access to contents
>       merge-recursive: switch directory rename detection default
>       Honor core.precomposeUnicode in more places
>
> Emily Shaffer (1):
>       gitsubmodules: align html and nroff lists
>
> Eric Sunshine (1):
>       check-non-portable-shell: support Perl versions older than 5.10
>
> Eric Wong (1):
>       repack: enable bitmaps by default on bare repos
>
> Jean-Noël Avila (3):
>       l10n: fr.po remove obsolete entries
>       Doc: fix misleading asciidoc formating
>       diff: fix mistake in translatable strings
>
> Jeff Hostetler (30):
>       trace2: Documentation/technical/api-trace2.txt
>       trace2: create new combined trace facility
>       trace2: collect Windows-specific process information
>       trace2:data: add trace2 regions to wt-status
>       trace2:data: add editor/pager child classification
>       trace2:data: add trace2 sub-process classification
>       trace2:data: add trace2 transport child classification
>       trace2:data: add subverb to checkout command
>       trace2:data: add subverb to reset command
>       trace2:data: add trace2 hook classification
>       trace2:data: add subverb for rebase
>       trace2:data: add trace2 instrumentation to index read/write
>       trace2: t/helper/test-trace2, t0210.sh, t0211.sh, t0212.sh
>       trace2: add for_each macros to clang-format
>       progress: add sparse mode to force 100% complete message
>       trace2:data: add trace2 data to midx
>       midx: add progress indicators in multi-pack-index verify
>       midx: during verify group objects by packfile to speed verification
>       config: initialize opts structure in repo_read_config()
>       trace2: refactor setting process starting time
>       trace2: add absolute elapsed time to start event
>       trace2: find exec-dir before trace2 initialization
>       config: add read_very_early_config()
>       trace2: use system/global config for default trace2 settings
>       trace2: report peak memory usage of the process
>       trace2: clarify UTC datetime formatting
>       trace2: make SIDs more unique
>       trace2: update docs to describe system/global config settings
>       trace2: fixup access problem on /etc/gitconfig in read_very_early_config
>       trace2: fix tracing when NO_PTHREADS is defined
>
> Jeff King (92):
>       prune: lazily perform reachability traversal
>       prune: use bitmaps for reachability traversal
>       prune: check SEEN flag for reachability
>       t5304: rename "sha1" variables to "oid"
>       diff: drop options parameter from diffcore_fix_diff_index()
>       diff: drop unused color reset parameters
>       diff: drop unused emit data parameter from sane_truncate_line()
>       diff: drop complete_rewrite parameter from run_external_diff()
>       merge-recursive: drop several unused parameters
>       pack-objects: drop unused parameter from oe_map_new_pack()
>       files-backend: drop refs parameter from split_symref_update()
>       ref-filter: drop unused buf/sz pairs
>       ref-filter: drop unused "obj" parameters
>       ref-filter: drop unused "sz" parameters
>       diff: reuse diff setup for --no-index case
>       bisect: use string arguments to feed internal diff-tree
>       bisect: fix internal diff-tree config loading
>       bisect: make diff-tree output prettier
>       fetch: avoid calling write_or_die()
>       fetch: ignore SIGPIPE during network operation
>       rev-list: allow cached objects in existence check
>       doc/fsck: clarify --connectivity-only behavior
>       fsck: always compute USED flags for unreachable objects
>       compat/bswap: add include header guards
>       config: document --type=color output is a complete line
>       line-log: suppress diff output with "-s"
>       line-log: detect unsupported formats
>       point pull requesters to GitGitGadget
>       Makefile: fix unaligned loads in sha1dc with UBSan
>       t5310: correctly remove bitmaps for jgit test
>       pack-objects: default to writing bitmap hash-cache
>       perf-lib.sh: rely on test-lib.sh for --tee handling
>       revision: drop some unused "revs" parameters
>       log: drop unused rev_info from early output
>       log: drop unused "len" from show_tagger()
>       update-index: drop unused prefix_length parameter from do_reupdate()
>       test-date: drop unused "now" parameter from parse_dates()
>       unpack-trees: drop name_entry from traverse_by_cache_tree()
>       unpack-trees: drop unused error_type parameters
>       report_path_error(): drop unused prefix parameter
>       fetch_pack(): drop unused parameters
>       parse-options: drop unused ctx parameter from show_gitcomp()
>       pretty: drop unused "type" parameter in needs_rfc2047_encoding()
>       pretty: drop unused strbuf from parse_padding_placeholder()
>       git: read local config in --list-cmds
>       completion: fix multiple command removals
>       parse_opt_ref_sorting: always use with NONEG flag
>       refs/files-backend: handle packed transaction prepare failure
>       refs/files-backend: don't look at an aborted transaction
>       http: factor out curl result code normalization
>       http: normalize curl results for dumb loose and alternates fetches
>       http: use normalize_curl_result() instead of manual conversion
>       revision: use a prio_queue to hold rewritten parents
>       get_commit_tree(): return NULL for broken tree
>       rev-list: let traversal die when --missing is not in use
>       rev-list: detect broken root trees
>       test-prio-queue: use xmalloc
>       xdiff: use git-compat-util
>       xdiff: use xmalloc/xrealloc
>       progress: use xmalloc/xcalloc
>       t5516: drop ok=sigpipe from unreachable-want tests
>       t5530: check protocol response for "not our ref"
>       upload-pack: send ERR packet for non-tip objects
>       pkt-line: prepare buffer before handling ERR packets
>       fetch: use free_refs()
>       remote.c: make singular free_ref() public
>       fetch: do not consider peeled tags as advertised tips
>       packfile.h: drop extern from function declarations
>       pack-revindex: open index if necessary
>       t5319: fix bogus cat-file argument
>       t5319: drop useless --buffer from cat-file
>       midx: check both pack and index names for containment
>       packfile: fix pack basename computation
>       http: simplify parsing of remote objects/info/packs
>       server-info: fix blind pointer arithmetic
>       server-info: simplify cleanup in parse_pack_def()
>       server-info: use strbuf to read old info/packs file
>       server-info: drop nr_alloc struct member
>       server-info: drop objdirlen pointer arithmetic
>       update_info_refs(): drop unused force parameter
>       t5304: add a test for pruning with bitmaps
>       untracked-cache: be defensive about missing NULs in index
>       untracked-cache: simplify parsing by dropping "next"
>       untracked-cache: simplify parsing by dropping "len"
>       p5302: create the repo in each index-pack test
>       doc/ls-files: put nested list for "-t" option into block
>       t/perf: depend on perl JSON only when using --codespeed
>       t/perf: add perf script for partial clones
>       coccicheck: optionally batch spatch invocations
>       t/lib-httpd: pass LSAN_OPTIONS through apache
>       coccicheck: make batch size of 0 mean "unlimited"
>       get_oid: handle NULL repo->index
>
> Jiang Xin (5):
>       t5323: test cases for git-pack-redundant
>       pack-redundant: delay creation of unique_objects
>       pack-redundant: rename pack_list.all_objects
>       pack-redundant: consistent sort method
>       i18n: fix typos found during l10n for git 2.22.0
>
> Joel Teichroeb (5):
>       stash: improve option parsing test coverage
>       stash: convert apply to builtin
>       stash: convert drop and clear to builtin
>       stash: convert branch to builtin
>       stash: convert pop to builtin
>
> Joey Hess (1):
>       convert: avoid malloc of original file size
>
> Johannes Schindelin (67):
>       ident: add the ability to provide a "fallback identity"
>       travis: remove the hack to build the Windows job on Azure Pipelines
>       tests: let --stress-limit=<N> imply --stress
>       tests: introduce --stress-jobs=<N>
>       built-in rebase: no need to check out `onto` twice
>       built-in rebase: use the correct reflog when switching branches
>       built-in rebase: demonstrate that ORIG_HEAD is not set correctly
>       built-in rebase: set ORIG_HEAD just once, before the rebase
>       Makefile: use `git ls-files` to list header files, if possible
>       curl: anonymize URLs in error messages and warnings
>       remote-curl: mark all error messages for translation
>       stash: add back the original, scripted `git stash`
>       stash: optionally use the scripted version again
>       tests: add a special setup where stash.useBuiltin is off
>       legacy stash: fix "rudimentary backport of -q"
>       built-in stash: handle :(glob) pathspecs again
>       mingw: drop MakeMaker reference
>       mingw: allow building with an MSYS2 runtime v3.x
>       rebase: deprecate --preserve-merges
>       mingw: respect core.hidedotfiles = false in git-init again
>       test-lib: introduce 'test_atexit'
>       git-daemon: use 'test_atexit` to stop 'git-daemon'
>       git p4 test: use 'test_atexit' to kill p4d and the watchdog process
>       rebase -i: demonstrate obscure loose object cache bug
>       sequencer: improve error message when an OID could not be parsed
>       sequencer: move stale comment into correct location
>       get_oid(): when an object was not found, try harder
>       difftool: remove obsolete (and misleading) comment
>       parse-options: make OPT_ARGUMENT() more useful
>       difftool: allow running outside Git worktrees with --no-index
>       docs: move gitremote-helpers into section 7
>       docs: do not document the `git remote-testgit` command
>       check-docs: really look at the documented commands again
>       check-docs: do not expect guide pages to correspond to commands
>       check-docs: fix for setups where executables have an extension
>       tests (rebase): spell out the `--keep-empty` option
>       tests (rebase): spell out the `--force-rebase` option
>       t7810: do not abbreviate `--no-exclude-standard` nor `--invert-match`
>       t5531: avoid using an abbreviated option
>       tests (push): do not abbreviate the `--follow-tags` option
>       tests (status): spell out the `--find-renames` option in full
>       tests (pack-objects): use the full, unabbreviated `--revs` option
>       t3301: fix false negative
>       untracked cache: fix off-by-one
>       tests: disallow the use of abbreviated options (by default)
>       t9822: skip tests if file names cannot be ISO-8859-1 encoded
>       macOS: make sure that gettext is found
>       remote-testgit: move it into the support directory for t5801
>       Makefile: drop the NO_INSTALL variable
>       help -a: do not list commands that are excluded from the build
>       check-docs: allow command-list.txt to contain excluded commands
>       docs: exclude documentation for commands that have been excluded
>       check-docs: do not bother checking for legacy scripts' documentation
>       test-tool: handle the `-C <directory>` option just like `git`
>       Turn `git serve` into a test helper
>       t5580: verify that alternates can be UNC paths
>       fsmonitor: demonstrate that it is not refreshed after discard_index()
>       fsmonitor: force a refresh after the index was discarded
>       t6500(mingw): use the Windows PID of the shell
>       difftool --no-index: error out on --dir-diff (and don't crash)
>       status: fix display of rebase -ir's `label` command
>       parse-options: adjust `parse_opt_unknown_cb()`s declared return type
>       stash: document stash.useBuiltin
>       rebase: replace incorrect logical negation by correct bitwise one
>       tests: mark a couple more test cases as requiring `rebase -p`
>       docs: say that `--rebase=preserve` is deprecated
>       rebase docs: recommend `-r` over `-p`
>
> Jonathan Tan (25):
>       remote-curl: reduce scope of rpc_state.argv
>       remote-curl: reduce scope of rpc_state.stdin_preamble
>       remote-curl: reduce scope of rpc_state.result
>       remote-curl: refactor reading into rpc_state's buf
>       remote-curl: use post_rpc() for protocol v2 also
>       tests: define GIT_TEST_PROTOCOL_VERSION
>       t5601: check ssh command only with protocol v0
>       tests: always test fetch of unreachable with v0
>       t5503: fix overspecification of trace expectation
>       t5512: compensate for v0 only sending HEAD symrefs
>       t5700: only run with protocol version 1
>       tests: fix protocol version for overspecifications
>       t5552: compensate for v2 filtering ref adv.
>       submodule: explain first attempt failure clearly
>       t5551: mark half-auth no-op fetch test as v0-only
>       fetch-pack: call prepare_shallow_info only if v0
>       fetch-pack: respect --no-update-shallow in v2
>       sha1-file: support OBJECT_INFO_FOR_PREFETCH
>       fetch-pack: binary search when storing wanted-refs
>       diff: batch fetching of missing blobs
>       pack-objects: write objects packed to trace2
>       transport: die if server options are unsupported
>       clone: send server options when using protocol v2
>       worktree: update is_bare heuristics
>       fetch-pack: send server options after command
>
> Jordi Mas (1):
>       l10n: Fixes to Catalan translation
>
> Josh Steadmon (5):
>       protocol-capabilities.txt: document symref
>       trace2: write to directory targets
>       clone: do faster object check for partial clones
>       trace2: fix incorrect function pointer check
>       commit-graph: fix memory leak
>
> Junio C Hamano (18):
>       test: caution on our version of 'yes'
>       builtin/log: downcase the beginning of error messages
>       format-patch: notice failure to open cover letter for writing
>       Start 2.22 cycle
>       The second batch
>       The third batch
>       The fourth batch
>       gettext tests: export the restored GIT_TEST_GETTEXT_POISON
>       The fifth batch
>       The sixth batch
>       Makefile: dedup list of files obtained from ls-files
>       The seventh batch
>       The eighth batch
>       Git 2.22-rc0
>       pkt-line: drop 'const'-ness of a param to set_packet_header()
>       Git 2.22-rc1
>       Git 2.22-rc2
>       Git 2.22-rc3
>
> Kyle Meyer (5):
>       rebase docs: fix "gitlink" typo
>       submodule: refuse to add repository with no commits
>       dir: do not traverse repositories with no commits
>       add: error appropriately on repository with no commits
>       t3000 (ls-files -o): widen description to reflect current tests
>
> Martin Ågren (14):
>       setup: free old value before setting `work_tree`
>       setup: fix memory leaks with `struct repository_format`
>       config/diff.txt: drop spurious backtick
>       config/fsck.txt: avoid starting line with dash
>       git.txt: remove empty line before list continuation
>       git-svn.txt: drop escaping '\' that ends up being rendered
>       Documentation: turn middle-of-line tabs into spaces
>       Documentation/Makefile: add missing xsl dependencies for manpages
>       Documentation/Makefile: add missing dependency on asciidoctor-extensions
>       asciidoctor-extensions: fix spurious space after linkgit
>       Doc: auto-detect changed build flags
>       doc-diff: let `render_tree()` take an explicit directory name
>       doc-diff: support diffing from/to AsciiDoc(tor)
>       doc-diff: add `--cut-header-footer`
>
> Matthew Kraai (1):
>       t3903: add test for --intent-to-add file
>
> Michal Suchanek (1):
>       worktree: fix worktree add race
>
> Mike Hommey (2):
>       fix pack protocol example client/server communication
>       Make fread/fwrite-like functions in http.c more like fread/fwrite.
>
> Nguyễn Thái Ngọc Duy (129):
>       parse-options.h: remove extern on function prototypes
>       parse-options: add one-shot mode
>       parse-options: disable option abbreviation with PARSE_OPT_KEEP_UNKNOWN
>       parse-options: add OPT_BITOP()
>       parse-options: stop abusing 'callback' for lowlevel callbacks
>       parse-options: avoid magic return codes
>       parse-options: allow ll_callback with OPTION_CALLBACK
>       diff.h: keep forward struct declarations sorted
>       diff.h: avoid bit fields in struct diff_flags
>       diff.c: prepare to use parse_options() for parsing
>       diff.c: convert -u|-p|--patch
>       diff.c: convert -U|--unified
>       diff.c: convert -W|--[no-]function-context
>       diff.c: convert --raw
>       read-cache.c: fix writing "link" index ext with null base oid
>       completion: add more parameter value completion
>       diff-parseopt: convert --patch-with-raw
>       diff-parseopt: convert --numstat and --shortstat
>       diff-parseopt: convert --dirstat and friends
>       diff-parseopt: convert --check
>       diff-parseopt: convert --summary
>       diff-parseopt: convert --patch-with-stat
>       diff-parseopt: convert --name-only
>       diff-parseopt: convert --name-status
>       diff-parseopt: convert -s|--no-patch
>       diff-parseopt: convert --stat*
>       diff-parseopt: convert --[no-]compact-summary
>       diff-parseopt: convert --output-*
>       diff-parseopt: convert -B|--break-rewrites
>       diff-parseopt: convert -M|--find-renames
>       diff-parseopt: convert -D|--irreversible-delete
>       diff-parseopt: convert -C|--find-copies
>       diff-parseopt: convert --find-copies-harder
>       diff-parseopt: convert --no-renames|--[no--rename-empty
>       diff-parseopt: convert --relative
>       diff-parseopt: convert --[no-]minimal
>       diff-parseopt: convert --ignore-some-changes
>       Delete check-racy.c
>       diff-parseopt: convert --[no-]indent-heuristic
>       diff-parseopt: convert --patience
>       diff-parseopt: convert --histogram
>       diff-parseopt: convert --diff-algorithm
>       diff-parseopt: convert --anchored
>       diff-parseopt: convert --binary
>       diff-parseopt: convert --full-index
>       diff-parseopt: convert -a|--text
>       diff-parseopt: convert -R
>       diff-parseopt: convert --[no-]follow
>       diff-parseopt: convert --[no-]color
>       diff-parseopt: convert --word-diff
>       diff-parseopt: convert --word-diff-regex
>       diff-parseopt: convert --color-words
>       diff-parseopt: convert --exit-code
>       diff-parseopt: convert --quiet
>       diff-parseopt: convert --ext-diff
>       diff-parseopt: convert --textconv
>       diff-parseopt: convert --ignore-submodules
>       diff-parseopt: convert --submodule
>       files-backend.c: factor out per-worktree code in loose_fill_ref_dir()
>       files-backend.c: reduce duplication in add_per_worktree_entries_to_dir()
>       Make sure refs/rewritten/ is per-worktree
>       unpack-trees: fix oneway_merge accidentally carry over stage index
>       checkout.txt: note about losing staged changes with --merge
>       commit: improve error message in "-a <paths>" case
>       unpack-trees: keep gently check inside add_rejected_path
>       unpack-trees: rename "gently" flag to "quiet"
>       read-tree: add --quiet
>       checkout: prevent losing staged changes with --merge
>       diff-parseopt: convert --ws-error-highlight
>       diff-parseopt: convert --ita-[in]visible-in-index
>       diff-parseopt: convert -z
>       diff-parseopt: convert -l
>       diff-parseopt: convert -S|-G
>       diff-parseopt: convert --pickaxe-all|--pickaxe-regex
>       diff-parseopt: convert -O
>       diff-parseopt: convert --find-object
>       diff-parseopt: convert --diff-filter
>       diff-parseopt: convert --[no-]abbrev
>       diff-parseopt: convert --[src|dst]-prefix
>       diff-parseopt: convert --line-prefix
>       diff-parseopt: convert --no-prefix
>       diff-parseopt: convert --inter-hunk-context
>       diff-parseopt: convert --[no-]color-moved
>       diff-parseopt: convert --color-moved-ws
>       diff.c: allow --no-color-moved-ws
>       range-diff: use parse_options() instead of diff_opt_parse()
>       diff --no-index: use parse_options() instead of diff_opt_parse()
>       am: avoid diff_opt_parse()
>       config: correct '**' matching in includeIf patterns
>       interpret-trailers.txt: start the desc line with a capital letter
>       read-tree.txt: clarify --reset and worktree changes
>       packfile.c: add repo_approximate_object_count()
>       refs.c: add refs_ref_exists()
>       refs.c: add refs_shorten_unambiguous_ref()
>       refs.c: remove the_repo from substitute_branch_name()
>       refs.c: remove the_repo from expand_ref()
>       refs.c: add repo_dwim_ref()
>       refs.c: add repo_dwim_log()
>       refs.c: remove the_repo from read_ref_at()
>       submodule foreach: fix "<command> --quiet" not being respected
>       commit.cocci: refactor code, avoid double rewrite
>       commit.c: add repo_get_commit_tree()
>       sha1-name.c: remove the_repo from sort_ambiguous()
>       sha1-name.c: remove the_repo from find_abbrev_len_packed()
>       sha1-name.c: add repo_find_unique_abbrev_r()
>       sha1-name.c: store and use repo in struct disambiguate_state
>       sha1-name.c: add repo_for_each_abbrev()
>       sha1-name.c: remove the_repo from get_short_oid()
>       sha1-name.c: remove the_repo from interpret_nth_prior_checkout()
>       sha1-name.c: remove the_repo from interpret_branch_mark()
>       sha1-name.c: add repo_interpret_branch_name()
>       sha1-name.c: remove the_repo from get_oid_oneline()
>       sha1-name.c: remove the_repo from get_describe_name()
>       sha1-name.c: remove the_repo from get_oid_basic()
>       sha1-name.c: remove the_repo from get_oid_1()
>       sha1-name.c: remove the_repo from handle_one_ref()
>       sha1-name.c: remove the_repo from diagnose_invalid_index_path()
>       sha1-name.c: remove the_repo from resolve_relative_path()
>       sha1-name.c: remove the_repo from get_oid_with_context_1()
>       sha1-name.c: add repo_get_oid()
>       submodule-config.c: use repo_get_oid for reading .gitmodules
>       sha1-name.c: remove the_repo from maybe_die_on_misspelt_object_name
>       sha1-name.c: remove the_repo from other get_oid_*
>       sha1-name.c: remove the_repo from get_oid_mb()
>       parse-options: don't emit "ambiguous option" for aliases
>       submodule--helper: add a missing \n
>       diff-parseopt: correct variable types that are used by parseopt
>       diff-parseopt: restore -U (no argument) behavior
>       parse-options: check empty value in OPT_INTEGER and OPT_ABBREV
>
> Paul-Sebastian Ungureanu (17):
>       sha1-name.c: add `get_oidf()` which acts like `get_oid()`
>       strbuf.c: add `strbuf_join_argv()`
>       strbuf.c: add `strbuf_insertf()` and `strbuf_vinsertf()`
>       t3903: modernize style
>       stash: rename test cases to be more descriptive
>       stash: add tests for `git stash show` config
>       stash: mention options in `show` synopsis
>       stash: convert list to builtin
>       stash: convert show to builtin
>       stash: convert store to builtin
>       stash: convert create to builtin
>       stash: convert push to builtin
>       stash: make push -q quiet
>       stash: convert save to builtin
>       stash: optimize `get_untracked_files()` and `check_changes()`
>       stash: replace all `write-tree` child processes with API calls
>       stash: convert `stash--helper.c` into `stash.c`
>
> Philip Oakley (2):
>       rerere doc: quote `rerere.enabled`
>       describe doc: remove '7-char' abbreviation reference
>
> Phillip Wood (21):
>       am/cherry-pick/rebase/revert: document --rerere-autoupdate
>       merge: tweak --rerere-autoupdate documentation
>       sequencer: break some long lines
>       cherry-pick: demonstrate option amnesia
>       cherry-pick --continue: remember options
>       commit/reset: try to clean up sequencer state
>       fix cherry-pick/revert status after commit
>       sequencer: fix cleanup with --signoff and -x
>       sequencer.c: save and restore cleanup mode
>       sequencer: always discard index after checkout
>       rebase: don't translate trace strings
>       rebase: rename write_basic_state()
>       rebase: use OPT_RERERE_AUTOUPDATE()
>       rebase -i: combine rebase--interactive.c with rebase.c
>       rebase -i: remove duplication
>       rebase -i: use struct commit when parsing options
>       rebase -i: use struct object_id for squash_onto
>       rebase -i: use struct rebase_options to parse args
>       rebase -i: use struct rebase_options in do_interactive_rebase()
>       rebase: use a common action enum
>       rebase -i: run without forking rebase--interactive
>
> Ramsay Jones (2):
>       prune-packed: check for too many arguments
>       Makefile: fix 'hdr-check' when GCRYPT not installed
>
> René Scharfe (1):
>       get-tar-commit-id: parse comment record
>
> Robert P. J. Day (3):
>       mention use of "hooks.allownonascii" in "man githooks"
>       docs/git-gc: fix typo "--prune=all" to "--prune=now"
>       attr.c: ".gitattribute" -> ".gitattributes" (comments)
>
> Rohit Ashiwal (3):
>       test functions: add function `test_file_not_empty`
>       t3600: modernize style
>       t3600: use helpers to replace test -d/f/e/s <path>
>
> SZEDER Gábor (27):
>       test-lib: fix interrupt handling with 'dash' and '--verbose-log -x'
>       t/lib-git-daemon: make sure to kill the 'git-daemon' process
>       tests: use 'test_atexit' to stop httpd
>       t0301-credential-cache: use 'test_atexit' to stop the credentials helper
>       git p4 test: clean up the p4d cleanup functions
>       git p4 test: simplify timeout handling
>       git p4 test: disable '-x' tracing in the p4d watchdog loop
>       t9811-git-p4-label-import: fix pipeline negation
>       t5318-commit-graph: remove unused variable
>       Documentation/git-diff-tree.txt: fix formatting
>       Documentation/technical/api-config.txt: fix formatting
>       Documentation/technical/protocol-v2.txt: fix formatting
>       ci: install Asciidoctor in 'ci/install-dependencies.sh'
>       index-pack: show progress while checking objects
>       ci: stick with Asciidoctor v1.5.8 for now
>       ci: fix AsciiDoc/Asciidoctor stderr check in the documentation build job
>       progress: make display_progress() return void
>       progress: assemble percentage and counters in a strbuf before printing
>       blame: default to HEAD in a bare repo when no start commit is given
>       builtin rebase: use FREE_AND_NULL
>       builtin rebase: use oideq()
>       progress: clear previous progress update dynamically
>       progress: break too long progress bar lines
>       ci: install 'libsvn-perl' instead of 'git-svn'
>       trace2: rename environment variables to GIT_TRACE2*
>       trace2: document the supported values of GIT_TRACE2* env variables
>       progress: avoid empty line when breaking the progress line
>
> Sun Chao (2):
>       pack-redundant: delete redundant code
>       pack-redundant: new algorithm to find min packs
>
> Sven Strickroth (1):
>       MSVC: include compat/win32/path-utils.h for MSVC, too, for real_path()
>
> Tanushree Tumane (1):
>       mingw: remove obsolete IPv6-related code
>
> Taylor Blau (4):
>       t: move 'hex2oct' into test-lib-functions.sh
>       t: introduce tests for unexpected object types
>       list-objects.c: handle unexpected non-blob entries
>       list-objects.c: handle unexpected non-tree entries
>
> Thomas Gummerer (15):
>       move worktree tests to t24*
>       entry: factor out unlink_entry function
>       entry: support CE_WT_REMOVE flag in checkout_entry
>       read-cache: add invalidate parameter to remove_marked_cache_entries
>       checkout: clarify comment
>       checkout: factor out mark_cache_entry_for_checkout function
>       checkout: introduce --{,no-}overlay option
>       checkout: introduce checkout.overlayMode config
>       revert "checkout: introduce checkout.overlayMode config"
>       ident: don't require calling prepare_fallback_ident first
>       stash: drop unused parameter
>       stash: pass pathspec as pointer
>       glossary: add definition for overlay
>       stash: setup default diff output format if necessary
>       ls-files: use correct format string
>
> Todd Zullinger (9):
>       t4038-diff-combined: quote paths with whitespace
>       t9902: test multiple removals via completion.commands
>       completion: use __git when calling --list-cmds
>       Documentation/rev-list-options: wrap --date=<format> block with "--"
>       Documentation/git-status: fix titles in porcelain v2 section
>       Documentation/git-svn: improve asciidoctor compatibility
>       Documentation/git-show-branch: avoid literal {apostrophe}
>       test-lib: try harder to ensure a working jgit
>       RelNotes: minor typo fixes in 2.22.0 draft
>
> Torsten Bögershausen (1):
>       trace2: NULL is not allowed for va_list
>
> Trần Ngọc Quân (1):
>       l10n: Updated Vietnamese translation for v2.21 rd2
>
> Vadim Kochan (1):
>       autoconf: #include <libintl.h> when checking for gettext()
>
> William Hubbs (1):
>       config: allow giving separate author and committer idents
>
> Yash Bhatambare (1):
>       gitattributes.txt: fix typo
>
> brian m. carlson (35):
>       t/lib-submodule-update: use appropriate length constant
>       khash: move oid hash table definition
>       pack-bitmap: make bitmap header handling hash agnostic
>       pack-bitmap: convert struct stored_bitmap to object_id
>       pack-bitmap: replace sha1_to_hex
>       pack-bitmap: switch hard-coded constants to the_hash_algo
>       pack-bitmap: switch hash tables to use struct object_id
>       submodule: avoid hard-coded constants
>       notes-merge: switch to use the_hash_algo
>       notes: make hash size independent
>       notes: replace sha1_to_hex
>       object-store: rename and expand packed_git's sha1 member
>       builtin/name-rev: make hash-size independent
>       fast-import: make hash-size independent
>       fast-import: replace sha1_to_hex
>       builtin/am: make hash size independent
>       builtin/pull: make hash-size independent
>       http-push: convert to use the_hash_algo
>       http-backend: allow 64-character hex names
>       http-push: remove remaining uses of sha1_to_hex
>       http-walker: replace sha1_to_hex
>       http: replace hard-coded constant with the_hash_algo
>       http: compute hash of downloaded objects using the_hash_algo
>       http: replace sha1_to_hex
>       remote-curl: make hash size independent
>       hash: add a function to lookup hash algorithm by length
>       builtin/get-tar-commit-id: make hash size independent
>       archive: convert struct archiver_args to object_id
>       refspec: make hash size independent
>       builtin/difftool: use parse_oid_hex
>       dir: make untracked cache extension hash size independent
>       read-cache: read data in a hash-independent way
>       Git.pm: make hash size independent
>       gitweb: make hash size independent
>       send-email: default to quoted-printable when CR is present
>
> Ævar Arnfjörð Bjarmason (44):
>       receive-pack: fix use-after-free bug
>       commit-graph tests: split up corrupt_graph_and_verify()
>       commit-graph tests: test a graph that's too small
>       Makefile: remove an out-of-date comment
>       Makefile: move "strip" assignment down from flags
>       Makefile: add/remove comments at top and tweak whitespace
>       Makefile: Move *_LIBS assignment into its own section
>       Makefile: move the setting of *FLAGS closer to "include"
>       Makefile: allow for combining DEVELOPER=1 and CFLAGS="..."
>       gc: remove redundant check for gc_auto_threshold
>       gc: convert to using the_hash_algo
>       gc: refactor a "call me once" pattern
>       reflog tests: make use of "test_config" idiom
>       reflog tests: test for the "points nowhere" warning
>       rebase: remove the rebase.useBuiltin setting
>       gc docs: modernize the advice for manually running "gc"
>       gc docs: stop noting "repack" flags
>       gc docs: clean grammar for "gc.bigPackThreshold"
>       commit-graph: fix segfault on e.g. "git status"
>       commit-graph: don't early exit(1) on e.g. "git status"
>       commit-graph: don't pass filename to load_commit_graph_one_fd_st()
>       commit-graph verify: detect inability to read the graph
>       commit-graph write: don't die if the existing graph is corrupt
>       commit-graph: improve & i18n error messages
>       reflog tests: assert lack of early exit with expiry="never"
>       gc: handle & check gc.reflogExpire config
>       test-lib: whitelist GIT_TR2_* in the environment
>       gc docs: include the "gc.*" section from "config" in "gc"
>       gc docs: re-flow the "gc.*" section in "config"
>       gc docs: fix formatting for "gc.writeCommitGraph"
>       gc docs: note how --aggressive impacts --window & --depth
>       gc docs: downplay the usefulness of --aggressive
>       gc docs: note "gc --aggressive" in "fast-import"
>       gc docs: clarify that "gc" doesn't throw away referenced objects
>       gc docs: remove incorrect reference to gc.auto=0
>       perf README: correct docs for 3c8f12c96c regression
>       perf aggregate: remove GIT_TEST_INSTALLED from --codespeed
>       perf-lib.sh: make "./run <revisions>" use the correct gits
>       perf-lib.sh: remove GIT_TEST_INSTALLED from perf-lib.sh
>       perf tests: add "bindir" prefix to git tree test results
>       perf-lib.sh: forbid the use of GIT_TEST_INSTALLED
>       trace2: fix up a missing "leave" entry point
>       trace2: fix up a missing "leave" entry point
>       sha1dc: update from upstream
>
> İsmail Dönmez (2):
>       mingw: do not let ld strip relocations
>       mingw: enable DEP and ASLR
>
> --
> You received this message because you are subscribed to the Google Groups "git-packagers" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to git-packagers+unsubscribe@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/git-packagers/xmqqlfyito3a.fsf%40gitster-ct.c.googlers.com.
> For more options, visit https://groups.google.com/d/optout.
>

^ permalink raw reply	[relevance 0%]

* Re: [ANNOUNCE] Git v2.22.0-rc3
  2019-06-03 20:23  2% [ANNOUNCE] Git v2.22.0-rc3 Junio C Hamano
  2019-06-04  1:32  0% ` Ben Humphreys
@ 2019-06-04  1:47  0% ` Bhaskar Chowdhury
  2019-06-04 14:45  0% ` Git for Windows v2.22.0-rc3, was " Johannes Schindelin
  2 siblings, 0 replies; 162+ results
From: Bhaskar Chowdhury @ 2019-06-04  1:47 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Linux Kernel, git-packagers

[-- Attachment #1: Type: text/plain, Size: 71981 bytes --]

Thanks, a bunch Junio!

On 13:23 Mon 03 Jun , Junio C Hamano wrote:
>A release candidate Git v2.22.0-rc3 is now available for testing
>at the usual places.  It is comprised of 718 non-merge commits
>since v2.21.0, contributed by 67 people, 17 of which are new faces.
>
>Hopefully, this will be the last -rc during this cycle.
>
>The tarballs are found at:
>
>    https://www.kernel.org/pub/software/scm/git/testing/
>
>The following public repositories all have a copy of the
>'v2.22.0-rc3' tag and the 'master' branch that the tag points at:
>
>  url = https://kernel.googlesource.com/pub/scm/git/git
>  url = git://repo.or.cz/alt-git.git
>  url = https://github.com/gitster/git
>
>New contributors whose contributions weren't in v2.21.0 are as follows.
>Welcome to the Git development community!
>
>  Alexander Blesius, Baruch Siach, Boxuan Li, Chris Mayo,
>  Chris. Webster, Clément Chigot, Corentin BOMPARD, Damien Robert,
>  Dustin Spicuzza, Emily Shaffer, Michal Suchanek, Rohit Ashiwal,
>  Sun Chao, Tanushree Tumane, Vadim Kochan, William Hubbs, and
>  Yash Bhatambare.
>
>Returning contributors who helped this release are as follows.
>Thanks for your continued support.
>
>  Ævar Arnfjörð Bjarmason, Alban Gruin, Alexander Shopov, Anders
>  Waldenborg, Andreas Heiduk, Andrei Rybak, Beat Bolli, Ben Peart,
>  Brandon Richardson, brian m. carlson, Carlo Marcelo Arenas
>  Belón, Christian Couder, Daniels Umanovskis, David Aguilar,
>  David Kastrup, Denton Liu, Derrick Stolee, Elijah Newren, Eric
>  Sunshine, Eric Wong, İsmail Dönmez, Jean-Noël Avila, Jeff
>  Hostetler, Jeff King, Jiang Xin, Joel Teichroeb, Joey Hess,
>  Johannes Schindelin, Jonathan Tan, Jordi Mas, Josh Steadmon,
>  Junio C Hamano, Kyle Meyer, Martin Ågren, Matthew Kraai, Mike
>  Hommey, Nguyễn Thái Ngọc Duy, Paul-Sebastian Ungureanu,
>  Philip Oakley, Phillip Wood, Ramsay Jones, René Scharfe,
>  Robert P. J. Day, Sven Strickroth, SZEDER Gábor, Taylor Blau,
>  Thomas Gummerer, Todd Zullinger, Torsten Bögershausen, and
>  Trần Ngọc Quân.
>
>----------------------------------------------------------------
>
>Git 2.22 Release Notes (draft)
>==============================
>
>Updates since v2.21
>-------------------
>
>Backward compatibility note
>
> * The filter specification "--filter=sparse:path=<path>" used to
>   create a lazy/partial clone has been removed.  Using a blob that is
>   part of the project as sparse specification is still supported with
>   the "--filter=sparse:oid=<blob>" option.
>
>UI, Workflows & Features
>
> * "git checkout --no-overlay" can be used to trigger a new mode of
>   checking out paths out of the tree-ish, that allows paths that
>   match the pathspec that are in the current index and working tree
>   and are not in the tree-ish.
>
> * The %(trailers) formatter in "git log --format=..."  now allows to
>   optionally pick trailers selectively by keyword, show only values,
>   etc.
>
> * Four new configuration variables {author,committer}.{name,email}
>   have been introduced to override user.{name,email} in more specific
>   cases.
>
> * Command-line completion (in contrib/) learned to tab-complete the
>   "git submodule absorbgitdirs" subcommand.
>
> * "git branch" learned a new subcommand "--show-current".
>
> * Output from "diff --cc" did not show the original paths when the
>   merge involved renames.  A new option adds the paths in the
>   original trees to the output.
>
> * The command line completion (in contrib/) has been taught to
>   complete more subcommand parameters.
>
> * The final report from "git bisect" used to show the suspected
>   culprit using a raw "diff-tree", with which there is no output for
>   a merge commit.  This has been updated to use a more modern and
>   human readable output that still is concise enough.
>
> * "git rebase --rebase-merges" replaces its old "--preserve-merges"
>   option; the latter is now marked as deprecated.
>
> * Error message given while cloning with --recurse-submodules has
>   been updated.
>
> * The completion helper code now pays attention to repository-local
>   configuration (when available), which allows --list-cmds to honour
>   a repository specific setting of completion.commands, for example.
>
> * "git mergetool" learned to offer Sublime Merge (smerge) as one of
>   its backends.
>
> * A new hook "post-index-change" is called when the on-disk index
>   file changes, which can help e.g. a virtualized working tree
>   implementation.
>
> * "git difftool" can now run outside a repository.
>
> * "git checkout -m <other>" was about carrying the differences
>   between HEAD and the working-tree files forward while checking out
>   another branch, and ignored the differences between HEAD and the
>   index.  The command has been taught to abort when the index and the
>   HEAD are different.
>
> * A progress indicator has been added to the "index-pack" step, which
>   often makes users wait for completion during "git clone".
>
> * "git submodule" learns "set-branch" subcommand that allows the
>   submodule.*.branch settings to be modified.
>
> * "git merge-recursive" backend recently learned a new heuristics to
>   infer file movement based on how other files in the same directory
>   moved.  As this is inherently less robust heuristics than the one
>   based on the content similarity of the file itself (rather than
>   based on what its neighbours are doing), it sometimes gives an
>   outcome unexpected by the end users.  This has been toned down to
>   leave the renamed paths in higher/conflicted stages in the index so
>   that the user can examine and confirm the result.
>
> * "git tag" learned to give an advice suggesting it might be a
>   mistake when creating an annotated or signed tag that points at
>   another tag.
>
> * The "git pack-objects" command learned to report the number of
>   objects it packed via the trace2 mechanism.
>
> * The list of conflicted paths shown in the editor while concluding a
>   conflicted merge was shown above the scissors line when the
>   clean-up mode is set to "scissors", even though it was commented
>   out just like the list of updated paths and other information to
>   help the user explain the merge better.
>
> * The trace2 tracing facility learned to auto-generate a filename
>   when told to log to a directory.
>
> * "git clone" learned a new --server-option option when talking over
>   the protocol version 2.
>
> * The connectivity bitmaps are created by default in bare
>   repositories now; also the pathname hash-cache is created by
>   default to avoid making crappy deltas when repacking.
>
> * "git branch new A...B" and "git checkout -b new A...B" have been
>   taught that in their contexts, the notation A...B means "the merge
>   base between these two commits", just like "git checkout A...B"
>   detaches HEAD at that commit.
>
> * Update "git difftool" and "git mergetool" so that the combinations
>   of {diff,merge}.{tool,guitool} configuration variables serve as
>   fallback settings of each other in a sensible order.
>
> * The "--dir-diff" mode of "git difftool" is not useful in "--no-index"
>   mode; they are now explicitly marked as mutually incompatible.
>
>
>Performance, Internal Implementation, Development Support etc.
>
> * The diff machinery, one of the oldest parts of the system, which
>   long predates the parse-options API, uses fairly long and complex
>   handcrafted option parser.  This is being rewritten to use the
>   parse-options API.
>
> * The implementation of pack-redundant has been updated for
>   performance in a repository with many packfiles.
>
> * A more structured way to obtain execution trace has been added.
>
> * "git prune" has been taught to take advantage of reachability
>   bitmap when able.
>
> * The command line parser of "git commit-tree" has been rewritten to
>   use the parse-options API.
>
> * Suggest GitGitGadget instead of submitGit as a way to submit
>   patches based on GitHub PR to us.
>
> * The test framework has been updated to help developers by making it
>   easier to run most of the tests under different versions of
>   over-the-wire protocols.
>
> * Dev support update to make it easier to compare two formatted
>   results from our documentation.
>
> * The scripted "git rebase" implementation has been retired.
>
> * "git multi-pack-index verify" did not scale well with the number of
>   packfiles, which is being improved.
>
> * "git stash" has been rewritten in C.
>
> * The "check-docs" Makefile target to support developers has been
>   updated.
>
> * The tests have been updated not to rely on the abbreviated option
>   names the parse-options API offers, to protect us from an
>   abbreviated form of an option that used to be unique within the
>   command getting non-unique when a new option that share the same
>   prefix is added.
>
> * The scripted version of "git rebase -i" wrote and rewrote the todo
>   list many times during a single step of its operation, and the
>   recent C-rewrite made a faithful conversion of the logic to C.  The
>   implementation has been updated to carry necessary information
>   around in-core to avoid rewriting the same file over and over
>   unnecessarily.
>
> * Test framework update to more robustly clean up leftover files and
>   processes after tests are done.
>
> * Conversion from unsigned char[20] to struct object_id continues.
>
> * While running "git diff" in a lazy clone, we can upfront know which
>   missing blobs we will need, instead of waiting for the on-demand
>   machinery to discover them one by one.  The code learned to aim to
>   achieve better performance by batching the request for these
>   promised blobs.
>
> * During an initial "git clone --depth=..." partial clone, it is
>   pointless to spend cycles for a large portion of the connectivity
>   check that enumerates and skips promisor objects (which by
>   definition is all objects fetched from the other side).  This has
>   been optimized out.
>
> * Mechanically and systematically drop "extern" from function
>   declaration.
>
> * The script to aggregate perf result unconditionally depended on
>   libjson-perl even though it did not have to, which has been
>   corrected.
>
> * The internal implementation of "git rebase -i" has been updated to
>   avoid forking a separate "rebase--interactive" process.
>
> * Allow DEP and ASLR for Windows build to for security hardening.
>
> * Performance test framework has been broken and measured the version
>   of Git that happens to be on $PATH, not the specified one to
>   measure, for a while, which has been corrected.
>
> * Optionally "make coccicheck" can feed multiple source files to
>   spatch, gaining performance while spending more memory.
>
> * Attempt to use an abbreviated option in "git clone --recurs" is
>   responded by a request to disambiguate between --recursive and
>   --recurse-submodules, which is bad because these two are synonyms.
>   The parse-options API has been extended to define such synonyms
>   more easily and not produce an unnecessary failure.
>
> * A pair of private functions in http.c that had names similar to
>   fread/fwrite did not return the number of elements, which was found
>   to be confusing.
>
> * Update collision-detecting SHA-1 code to build properly on HP-UX.
>
>
>Fixes since v2.21
>-----------------
>
> * "git prune-packed" did not notice and complain against excess
>   arguments given from the command line, which now it does.
>   (merge 9b0bd87ed2 rj/prune-packed-excess-args later to maint).
>
> * Split-index fix.
>   (merge 6e37c8ed3c nd/split-index-null-base-fix later to maint).
>
> * "git diff --no-index" may still want to access Git goodies like
>   --ext-diff and --textconv, but so far these have been ignored,
>   which has been corrected.
>   (merge 287ab28bfa jk/diff-no-index-initialize later to maint).
>
> * Unify RPC code for smart http in protocol v0/v1 and v2, which fixes
>   a bug in the latter (lack of authentication retry) and generally
>   improves the code base.
>   (merge a97d00799a jt/http-auth-proto-v2-fix later to maint).
>
> * The include file compat/bswap.h has been updated so that it is safe
>   to (accidentally) include it more than once.
>   (merge 33aa579a55 jk/guard-bswap-header later to maint).
>
> * The set of header files used by "make hdr-check" unconditionally
>   included sha256/gcrypt.h, even when it is not used, causing the
>   make target to fail.  We now skip it when GCRYPT_SHA256 is not in
>   use.
>   (merge f23aa18e7f rj/hdr-check-gcrypt-fix later to maint).
>
> * The Makefile uses 'find' utility to enumerate all the *.h header
>   files, which is expensive on platforms with slow filesystems; it
>   now optionally uses "ls-files" if working within a repository,
>   which is a trick similar to how all sources are enumerated to run
>   ETAGS on.
>   (merge 92b88eba9f js/find-lib-h-with-ls-files-when-possible later to maint).
>
> * "git rebase" that was reimplemented in C did not set ORIG_HEAD
>   correctly, which has been corrected.
>   (merge cbd29ead92 js/rebase-orig-head-fix later to maint).
>
> * Dev support.
>   (merge f545737144 js/stress-test-ui-tweak later to maint).
>
> * CFLAGS now can be tweaked when invoking Make while using
>   DEVELOPER=YesPlease; this did not work well before.
>   (merge 6d5d4b4e93 ab/makefile-help-devs-more later to maint).
>
> * "git fsck --connectivity-only" omits computation necessary to sift
>   the objects that are not reachable from any of the refs into
>   unreachable and dangling.  This is now enabled when dangling
>   objects are requested (which is done by default, but can be
>   overridden with the "--no-dangling" option).
>   (merge 8d8c2a5aef jk/fsck-doc later to maint).
>
> * On platforms where "git fetch" is killed with SIGPIPE (e.g. OSX),
>   the upload-pack that runs on the other end that hangs up after
>   detecting an error could cause "git fetch" to die with a signal,
>   which led to a flaky test.  "git fetch" now ignores SIGPIPE during
>   the network portion of its operation (this is not a problem as we
>   check the return status from our write(2)s).
>   (merge 143588949c jk/no-sigpipe-during-network-transport later to maint).
>
> * A recent update broke "is this object available to us?" check for
>   well-known objects like an empty tree (which should yield "yes",
>   even when there is no on-disk object for an empty tree), which has
>   been corrected.
>   (merge f06ab027ef jk/virtual-objects-do-exist later to maint).
>
> * The setup code has been cleaned up to avoid leaks around the
>   repository_format structure.
>   (merge e8805af1c3 ma/clear-repository-format later to maint).
>
> * "git config --type=color ..." is meant to replace "git config --get-color"
>   but there is a slight difference that wasn't documented, which is
>   now fixed.
>   (merge cd8e7593b9 jk/config-type-color-ends-with-lf later to maint).
>
> * When the "clean" filter can reduce the size of a huge file in the
>   working tree down to a small "token" (a la Git LFS), there is no
>   point in allocating a huge scratch area upfront, but the buffer is
>   sized based on the original file size.  The convert mechanism now
>   allocates very minimum and reallocates as it receives the output
>   from the clean filter process.
>   (merge 02156ab031 jh/resize-convert-scratch-buffer later to maint).
>
> * "git rebase" uses the refs/rewritten/ hierarchy to store its
>   intermediate states, which inherently makes the hierarchy per
>   worktree, but it didn't quite work well.
>   (merge b9317d55a3 nd/rewritten-ref-is-per-worktree later to maint).
>
> * "git log -L<from>,<to>:<path>" with "-s" did not suppress the patch
>   output as it should.  This has been corrected.
>   (merge 05314efaea jk/line-log-with-patch later to maint).
>
> * "git worktree add" used to do a "find an available name with stat
>   and then mkdir", which is race-prone.  This has been fixed by using
>   mkdir and reacting to EEXIST in a loop.
>   (merge 7af01f2367 ms/worktree-add-atomic-mkdir later to maint).
>
> * Build update for SHA-1 with collision detection.
>   (merge 07a20f569b jk/sha1dc later to maint).
>
> * Build procedure has been fixed around use of asciidoctor instead of
>   asciidoc.
>   (merge 185f9a0ea0 ma/asciidoctor-fixes later to maint).
>
> * remote-http transport did not anonymize URLs reported in its error
>   messages at places.
>   (merge c1284b21f2 js/anonymize-remote-curl-diag later to maint).
>
> * Error messages given from the http transport have been updated so
>   that they can be localized.
>   (merge ed8b4132c8 js/remote-curl-i18n later to maint).
>
> * "git init" forgot to read platform-specific repository
>   configuration, which made Windows port to ignore settings of
>   core.hidedotfiles, for example.
>
> * A corner-case object name ambiguity while the sequencer machinery
>   is working (e.g. "rebase -i -x") has been fixed.
>
> * "git format-patch" did not diagnose an error while opening the
>   output file for the cover-letter, which has been corrected.
>   (merge 2fe95f494c jc/format-patch-error-check later to maint).
>
> * "git checkout -f <branch>" while the index has an unmerged path
>   incorrectly left some paths in an unmerged state, which has been
>   corrected.
>
> * A corner case bug in the refs API has been corrected.
>   (merge d3322eb28b jk/refs-double-abort later to maint).
>
> * Unicode update.
>   (merge 584b62c37b bb/unicode-12 later to maint).
>
> * dumb-http walker has been updated to share more error recovery
>   strategy with the normal codepath.
>
> * A buglet in configuration parser has been fixed.
>   (merge 19e7fdaa58 nd/include-if-wildmatch later to maint).
>
> * The documentation for "git read-tree --reset -u" has been updated.
>   (merge b5a0bd694c nd/read-tree-reset-doc later to maint).
>
> * Code clean-up around a much-less-important-than-it-used-to-be
>   update_server_info() function.
>   (merge b3223761c8 jk/server-info-rabbit-hole later to maint).
>
> * The message given when "git commit -a <paths>" errors out has been
>   updated.
>   (merge 5a1dbd48bc nd/commit-a-with-paths-msg-update later to maint).
>
> * "git cherry-pick --options A..B", after giving control back to the
>   user to ask help resolving a conflicted step, did not honor the
>   options it originally received, which has been corrected.
>
> * Various glitches in "git gc" around reflog handling have been fixed.
>
> * The code to read from commit-graph file has been cleanup with more
>   careful error checking before using data read from it.
>
> * Performance fix around "git fetch" that grabs many refs.
>   (merge b764300912 jt/fetch-pack-wanted-refs-optim later to maint).
>
> * Protocol v2 support in "git fetch-pack" of shallow clones has been
>   corrected.
>
> * Performance fix around "git blame", especially in a linear history
>   (which is the norm we should optimize for).
>   (merge f892014943 dk/blame-keep-origin-blob later to maint).
>
> * Performance fix for "rev-list --parents -- pathspec".
>   (merge 8320b1dbe7 jk/revision-rewritten-parents-in-prio-queue later to maint).
>
> * Updating the display with progress message has been cleaned up to
>   deal better with overlong messages.
>   (merge 545dc345eb sg/overlong-progress-fix later to maint).
>
> * "git blame -- path" in a non-bare repository starts blaming from
>   the working tree, and the same command in a bare repository errors
>   out because there is no working tree by definition.  The command
>   has been taught to instead start blaming from the commit at HEAD,
>   which is more useful.
>   (merge a544fb08f8 sg/blame-in-bare-start-at-head later to maint).
>
> * An underallocation in the code to read the untracked cache
>   extension has been corrected.
>   (merge 3a7b45a623 js/untracked-cache-allocfix later to maint).
>
> * The code is updated to check the result of memory allocation before
>   it is used in more places, by using xmalloc and/or xcalloc calls.
>   (merge 999b951b28 jk/xmalloc later to maint).
>
> * The GETTEXT_POISON test option has been quite broken ever since it
>   was made runtime-tunable, which has been fixed.
>   (merge f88b9cb603 jc/gettext-test-fix later to maint).
>
> * Test fix on APFS that is incapable of store paths in Latin-1.
>   (merge 3889149619 js/iso8895-test-on-apfs later to maint).
>
> * "git submodule foreach <command> --quiet" did not pass the option
>   down correctly, which has been corrected.
>   (merge a282f5a906 nd/submodule-foreach-quiet later to maint).
>
> * "git send-email" has been taught to use quoted-printable when the
>   payload contains carriage-return.  The use of the mechanism is in
>   line with the design originally added the codepath that chooses QP
>   when the payload has overly long lines.
>   (merge 74d76a1701 bc/send-email-qp-cr later to maint).
>
> * The recently added feature to add addresses that are on
>   anything-by: trailers in 'git send-email' was found to be way too
>   eager and considered nonsense strings as if they can be legitimate
>   beginning of *-by: trailer.  This has been tightened.
>
> * Builds with gettext broke on recent macOS w/ Homebrew, which
>   seems to have stopped including from /usr/local/include; this
>   has been corrected.
>   (merge 92a1377a2a js/macos-gettext-build later to maint).
>
> * Running "git add" on a repository created inside the current
>   repository is an explicit indication that the user wants to add it
>   as a submodule, but when the HEAD of the inner repository is on an
>   unborn branch, it cannot be added as a submodule.  Worse, the files
>   in its working tree can be added as if they are a part of the outer
>   repository, which is not what the user wants.  These problems are
>   being addressed.
>   (merge f937bc2f86 km/empty-repo-is-still-a-repo later to maint).
>
> * "git cherry-pick" run with the "-x" or the "--signoff" option used
>   to (and more importantly, ought to) clean up the commit log message
>   with the --cleanup=space option by default, but this has been
>   broken since late 2017.  This has been fixed.
>
> * When given a tag that points at a commit-ish, "git replace --graft"
>   failed to peel the tag before writing a replace ref, which did not
>   make sense because the old graft mechanism the feature wants to
>   mimic only allowed to replace one commit object with another.
>   This has been fixed.
>   (merge ee521ec4cb cc/replace-graft-peel-tags later to maint).
>
> * Code tightening against a "wrong" object appearing where an object
>   of a different type is expected, instead of blindly assuming that
>   the connection between objects are correctly made.
>   (merge 97dd512af7 tb/unexpected later to maint).
>
> * An earlier update for MinGW and Cygwin accidentally broke MSVC build,
>   which has been fixed.
>   (merge 22c3634c0f ss/msvc-path-utils-fix later to maint).
>
> * %(push:track) token used in the --format option to "git
>   for-each-ref" and friends was not showing the right branch, which
>   has been fixed.
>   (merge c646d0934e dr/ref-filter-push-track-fix later to maint).
>
> * "make check-docs", "git help -a", etc. did not account for cases
>   where a particular build may deliberately omit some subcommands,
>   which has been corrected.
>
> * The logic to tell if a Git repository has a working tree protects
>   "git branch -D" from removing the branch that is currently checked
>   out by mistake.  The implementation of this logic was broken for
>   repositories with unusual name, which unfortunately is the norm for
>   submodules these days.  This has been fixed.
>   (merge f3534c98e4 jt/submodule-repo-is-with-worktree later to maint).
>
> * AIX shared the same build issues with other BSDs around fileno(fp),
>   which has been corrected.
>   (merge ee662bf5c6 cc/aix-has-fileno-as-a-macro later to maint).
>
> * The autoconf generated configure script failed to use the right
>   gettext() implementations from -libintl by ignoring useless stub
>   implementations shipped in some C library, which has been
>   corrected.
>   (merge b71e56a683 vk/autoconf-gettext later to maint).
>
> * Fix index-pack perf test so that the repeated invocations always
>   run in an empty repository, which emulates the initial clone
>   situation better.
>   (merge 775c71e16d jk/p5302-avoid-collision-check-cost later to maint).
>
> * A "ls-files" that emulates "find" to enumerate files in the working
>   tree resulted in duplicated Makefile rules that caused the build to
>   issue an unnecessary warning during a trial build after merge
>   conflicts are resolved in working tree *.h files but before the
>   resolved results are added to the index.  This has been corrected.
>
> * "git cherry-pick" (and "revert" that shares the same runtime engine)
>   that deals with multiple commits got confused when the final step
>   gets stopped with a conflict and the user concluded the sequence
>   with "git commit".  Attempt to fix it by cleaning up the state
>   files used by these commands in such a situation.
>   (merge 4a72486de9 pw/clean-sequencer-state-upon-final-commit later to maint).
>
> * On a filesystem like HFS+, the names of the refs stored as filesystem
>   entities may become different from what the end-user expects, just
>   like files in the working tree get "renamed".  Work around the
>   mismatch by paying attention to the core.precomposeUnicode
>   configuration.
>   (merge 8e712ef6fc en/unicode-in-refnames later to maint).
>
> * The code to generate the multi-pack idx file was not prepared to
>   see too many packfiles and ran out of open file descriptor, which
>   has been corrected.
>
> * To run tests for Git SVN, our scripts for CI used to install the
>   git-svn package (in the hope that it would bring in the right
>   dependencies).  This has been updated to install the more direct
>   dependency, namely, libsvn-perl.
>   (merge db864306cf sg/ci-libsvn-perl later to maint).
>
> * "git cvsexportcommit" running on msys did not expect cvsnt showed
>   "cvs status" output with CRLF line endings.
>
> * The fsmonitor interface got out of sync after the in-core index
>   file gets discarded, which has been corrected.
>   (merge 398a3b0899 js/fsmonitor-refresh-after-discarding-index later to maint).
>
> * "git status" did not know that the "label" instruction in the
>   todo-list "rebase -i -r" uses should not be shown as a hex object
>   name.
>
> * A prerequisite check in the test suite to see if a working jgit is
>   available was made more robust.
>   (merge abd0f28983 tz/test-lib-check-working-jgit later to maint).
>
> * The codepath to parse :<path> that obtains the object name for an
>   indexed object has been made more robust.
>
> * Code cleanup, docfix, build fix, etc.
>   (merge 11f470aee7 jc/test-yes-doc later to maint).
>   (merge 90503a240b js/doc-symref-in-proto-v1 later to maint).
>   (merge 5c326d1252 jk/unused-params later to maint).
>   (merge 68cabbfda3 dl/doc-submodule-wo-subcommand later to maint).
>   (merge 9903623761 ab/receive-pack-use-after-free-fix later to maint).
>   (merge 1ede45e44b en/merge-options-doc later to maint).
>   (merge 3e14dd2c8e rd/doc-hook-used-in-sample later to maint).
>   (merge c271dc28fd nd/no-more-check-racy later to maint).
>   (merge e6e15194a8 yb/utf-16le-bom-spellfix later to maint).
>   (merge bb101aaf0c rd/attr.c-comment-typofix later to maint).
>   (merge 716a5af812 rd/gc-prune-doc-fix later to maint).
>   (merge 50b206371d js/untravis-windows later to maint).
>   (merge dbf47215e3 js/rebase-recreate-merge later to maint).
>   (merge 56cb2d30f8 dl/reset-doc-no-wrt-abbrev later to maint).
>   (merge 64eca306a2 ja/dir-rename-doc-markup-fix later to maint).
>   (merge af91b0230c dl/ignore-docs later to maint).
>   (merge 59a06e947b ra/t3600-test-path-funcs later to maint).
>   (merge e041d0781b ar/t4150-remove-cruft later to maint).
>   (merge 8d75a1d183 ma/asciidoctor-fixes-more later to maint).
>   (merge 74cc547b0f mh/pack-protocol-doc-fix later to maint).
>   (merge ed31851fa6 ab/doc-misc-typofixes later to maint).
>   (merge a7256debd4 nd/checkout-m-doc-update later to maint).
>   (merge 3a9e1ad78d jt/t5551-protocol-v2-does-not-have-half-auth later to maint).
>   (merge 0b918b75af sg/t5318-cleanup later to maint).
>   (merge 68ed71b53c cb/doco-mono later to maint).
>   (merge a34dca2451 nd/interpret-trailers-docfix later to maint).
>   (merge cf7b857a77 en/fast-import-parsing-fix later to maint).
>   (merge fe61ccbc35 po/rerere-doc-fmt later to maint).
>   (merge ffea0248bf po/describe-not-necessarily-7 later to maint).
>   (merge 7cb7283adb tg/ls-files-debug-format-fix later to maint).
>   (merge f64a21bd82 tz/doc-apostrophe-no-longer-needed later to maint).
>   (merge dbe7b41019 js/t3301-unbreak-notes-test later to maint).
>   (merge d8083e4180 km/t3000-retitle later to maint).
>   (merge 9e4cbccbd7 tz/git-svn-doc-markup-fix later to maint).
>   (merge da9ca955a7 jk/ls-files-doc-markup-fix later to maint).
>   (merge 6804ba3a58 cw/diff-highlight later to maint).
>   (merge 1a8787144d nd/submodule-helper-incomplete-line-fix later to maint).
>   (merge d9ef573837 jk/apache-lsan later to maint).
>   (merge c871fbee2b js/t6500-use-windows-pid-on-mingw later to maint).
>   (merge ce4c7bfc90 bl/t4253-exit-code-from-format-patch later to maint).
>   (merge 397a46db78 js/t5580-unc-alternate-test later to maint).
>   (merge d4907720a2 cm/notes-comment-fix later to maint).
>   (merge 9dde06de13 cb/http-push-null-in-message-fix later to maint).
>   (merge 4c785c0edc js/rebase-config-bitfix later to maint).
>   (merge 8e9fe16c87 es/doc-gitsubmodules-markup later to maint).
>
>----------------------------------------------------------------
>
>Changes since v2.21.0 are as follows:
>
>Alban Gruin (18):
>      sequencer: changes in parse_insn_buffer()
>      sequencer: make the todo_list structure public
>      sequencer: remove the 'arg' field from todo_item
>      sequencer: refactor transform_todos() to work on a todo_list
>      sequencer: introduce todo_list_write_to_file()
>      sequencer: refactor check_todo_list() to work on a todo_list
>      sequencer: refactor sequencer_add_exec_commands() to work on a todo_list
>      sequencer: refactor rearrange_squash() to work on a todo_list
>      sequencer: make sequencer_make_script() write its script to a strbuf
>      sequencer: change complete_action() to use the refactored functions
>      rebase--interactive: move sequencer_add_exec_commands()
>      rebase--interactive: move rearrange_squash_in_todo_file()
>      sequencer: refactor skip_unnecessary_picks() to work on a todo_list
>      rebase-interactive: use todo_list_write_to_file() in edit_todo_list()
>      rebase-interactive: append_todo_help() changes
>      rebase-interactive: rewrite edit_todo_list() to handle the initial edit
>      sequencer: use edit_todo_list() in complete_action()
>      rebase--interactive: move transform_todo_file()
>
>Alexander Blesius (1):
>      doc: fix typos in man pages
>
>Alexander Shopov (1):
>      gitk: Update Bulgarian translation (317t)
>
>Anders Waldenborg (7):
>      doc: group pretty-format.txt placeholders descriptions
>      pretty: allow %(trailers) options with explicit value
>      pretty: single return path in %(trailers) handling
>      pretty: allow showing specific trailers
>      pretty: add support for "valueonly" option in %(trailers)
>      strbuf: separate callback for strbuf_expand:ing literals
>      pretty: add support for separator option in %(trailers)
>
>Andreas Heiduk (1):
>      revisions.txt: remove ambibuity between <rev>:<path> and :<path>
>
>Andrei Rybak (1):
>      t4150: remove unused variable
>
>Baruch Siach (1):
>      send-email: don't cc *-by lines with '-' prefix
>
>Beat Bolli (1):
>      unicode: update the width tables to Unicode 12
>
>Ben Peart (1):
>      read-cache: add post-index-change hook
>
>Boxuan Li (1):
>      t4253-am-keep-cr-dos: avoid using pipes
>
>Brandon Richardson (1):
>      commit-tree: utilize parse-options api
>
>Carlo Marcelo Arenas Belón (1):
>      http-push: prevent format overflow warning with gcc >= 9
>
>Chris Mayo (1):
>      notes: correct documentation of format_display_notes()
>
>Chris. Webster (1):
>      diff-highlight: use correct /dev/null for UNIX and Windows
>
>Christian Couder (5):
>      t6050: use test_line_count instead of wc -l
>      t6050: redirect expected error output to a file
>      replace: peel tag when passing a tag as parent to --graft
>      replace: peel tag when passing a tag first to --graft
>      list-objects-filter: disable 'sparse:path' filters
>
>Clément Chigot (2):
>      Makefile: use fileno macro work around on AIX
>      git-compat-util: work around for access(X_OK) under root
>
>Corentin BOMPARD (2):
>      doc/CodingGuidelines: URLs and paths as monospace
>      doc: format pathnames and URLs as monospace.
>
>Damien Robert (1):
>      ref-filter: use correct branch for %(push:track)
>
>Daniels Umanovskis (1):
>      branch: introduce --show-current display option
>
>David Aguilar (2):
>      mergetools: add support for smerge (Sublime Merge)
>      contrib/completion: add smerge to the mergetool completion candidates
>
>David Kastrup (1):
>      blame.c: don't drop origin blobs as eagerly
>
>Denton Liu (38):
>      completion: complete git submodule absorbgitdirs
>      git-submodule.txt: "--branch <branch>" option defaults to 'master'
>      submodule--helper: teach config subcommand --unset
>      submodule: document default behavior
>      git-reset.txt: clarify documentation
>      git-clean.txt: clarify ignore pattern files
>      docs: move core.excludesFile from git-add to gitignore
>      contrib/subtree: ensure only one rev is provided
>      midx.c: convert FLEX_ALLOC_MEM to FLEX_ALLOC_STR
>      cocci: FLEX_ALLOC_MEM to FLEX_ALLOC_STR
>      tag: fix formatting
>      submodule: teach set-branch subcommand
>      tag: advise on nested tags
>      t7600: clean up style
>      t3507: clean up style
>      t7604: clean up style
>      t7502: clean up style
>      commit: extract cleanup_mode functions to sequencer
>      parse-options.h: extract common --cleanup option
>      merge: cleanup messages like commit
>      merge: add scissors line on merge conflict
>      cherry-pick/revert: add scissors line on merge conflict
>      t7610: unsuppress output
>      t7610: add mergetool --gui tests
>      *.[ch]: remove extern from function declarations using spatch
>      *.[ch]: remove extern from function declarations using sed
>      *.[ch]: manually align parameter lists
>      t2018: cleanup in current test
>      branch: make create_branch accept a merge base rev
>      revisions.txt: change "rev" to "<rev>"
>      revisions.txt: mark optional rev arguments with []
>      revisions.txt: mention <rev>~ form
>      tag: fix typo in nested tagging hint
>      mergetool: use get_merge_tool function
>      mergetool--lib: create gui_mode function
>      mergetool: fallback to tool when guitool unavailable
>      difftool: make --gui, --tool and --extcmd mutually exclusive
>      difftool: fallback on merge.guitool
>
>Derrick Stolee (4):
>      trace2:data: pack-objects: add trace2 regions
>      midx: pass a repository pointer
>      midx: add packs to packed_git linked list
>      trace2: add variable description to git.txt
>
>Dustin Spicuzza (1):
>      cvsexportcommit: force crlf translation
>
>Elijah Newren (23):
>      log,diff-tree: add --combined-all-paths option
>      merge-options.txt: correct wording of --no-commit option
>      t9300: demonstrate bug with get-mark and empty orphan commits
>      git-fast-import.txt: fix wording about where ls command can appear
>      fast-import: check most prominent commands first
>      fast-import: only allow cat-blob requests where it makes sense
>      fast-import: fix erroneous handling of get-mark with empty orphan commits
>      Use 'unsigned short' for mode, like diff_filespec does
>      merge-recursive: rename merge_options argument from 'o' to 'opt'
>      merge-recursive: rename diff_filespec 'one' to 'o'
>      merge-recursive: rename locals 'o' and 'a' to 'obuf' and 'abuf'
>      merge-recursive: use 'ci' for rename_conflict_info variable name
>      merge-recursive: move some struct declarations together
>      merge-recursive: shrink rename_conflict_info
>      merge-recursive: remove ren[12]_other fields from rename_conflict_info
>      merge-recursive: track branch where rename occurred in rename struct
>      merge-recursive: cleanup handle_rename_* function signatures
>      merge-recursive: switch from (oid,mode) pairs to a diff_filespec
>      t6043: fix copied test description to match its purpose
>      merge-recursive: track information associated with directory renames
>      merge-recursive: give callers of handle_content_merge() access to contents
>      merge-recursive: switch directory rename detection default
>      Honor core.precomposeUnicode in more places
>
>Emily Shaffer (1):
>      gitsubmodules: align html and nroff lists
>
>Eric Sunshine (1):
>      check-non-portable-shell: support Perl versions older than 5.10
>
>Eric Wong (1):
>      repack: enable bitmaps by default on bare repos
>
>Jean-Noël Avila (3):
>      l10n: fr.po remove obsolete entries
>      Doc: fix misleading asciidoc formating
>      diff: fix mistake in translatable strings
>
>Jeff Hostetler (30):
>      trace2: Documentation/technical/api-trace2.txt
>      trace2: create new combined trace facility
>      trace2: collect Windows-specific process information
>      trace2:data: add trace2 regions to wt-status
>      trace2:data: add editor/pager child classification
>      trace2:data: add trace2 sub-process classification
>      trace2:data: add trace2 transport child classification
>      trace2:data: add subverb to checkout command
>      trace2:data: add subverb to reset command
>      trace2:data: add trace2 hook classification
>      trace2:data: add subverb for rebase
>      trace2:data: add trace2 instrumentation to index read/write
>      trace2: t/helper/test-trace2, t0210.sh, t0211.sh, t0212.sh
>      trace2: add for_each macros to clang-format
>      progress: add sparse mode to force 100% complete message
>      trace2:data: add trace2 data to midx
>      midx: add progress indicators in multi-pack-index verify
>      midx: during verify group objects by packfile to speed verification
>      config: initialize opts structure in repo_read_config()
>      trace2: refactor setting process starting time
>      trace2: add absolute elapsed time to start event
>      trace2: find exec-dir before trace2 initialization
>      config: add read_very_early_config()
>      trace2: use system/global config for default trace2 settings
>      trace2: report peak memory usage of the process
>      trace2: clarify UTC datetime formatting
>      trace2: make SIDs more unique
>      trace2: update docs to describe system/global config settings
>      trace2: fixup access problem on /etc/gitconfig in read_very_early_config
>      trace2: fix tracing when NO_PTHREADS is defined
>
>Jeff King (92):
>      prune: lazily perform reachability traversal
>      prune: use bitmaps for reachability traversal
>      prune: check SEEN flag for reachability
>      t5304: rename "sha1" variables to "oid"
>      diff: drop options parameter from diffcore_fix_diff_index()
>      diff: drop unused color reset parameters
>      diff: drop unused emit data parameter from sane_truncate_line()
>      diff: drop complete_rewrite parameter from run_external_diff()
>      merge-recursive: drop several unused parameters
>      pack-objects: drop unused parameter from oe_map_new_pack()
>      files-backend: drop refs parameter from split_symref_update()
>      ref-filter: drop unused buf/sz pairs
>      ref-filter: drop unused "obj" parameters
>      ref-filter: drop unused "sz" parameters
>      diff: reuse diff setup for --no-index case
>      bisect: use string arguments to feed internal diff-tree
>      bisect: fix internal diff-tree config loading
>      bisect: make diff-tree output prettier
>      fetch: avoid calling write_or_die()
>      fetch: ignore SIGPIPE during network operation
>      rev-list: allow cached objects in existence check
>      doc/fsck: clarify --connectivity-only behavior
>      fsck: always compute USED flags for unreachable objects
>      compat/bswap: add include header guards
>      config: document --type=color output is a complete line
>      line-log: suppress diff output with "-s"
>      line-log: detect unsupported formats
>      point pull requesters to GitGitGadget
>      Makefile: fix unaligned loads in sha1dc with UBSan
>      t5310: correctly remove bitmaps for jgit test
>      pack-objects: default to writing bitmap hash-cache
>      perf-lib.sh: rely on test-lib.sh for --tee handling
>      revision: drop some unused "revs" parameters
>      log: drop unused rev_info from early output
>      log: drop unused "len" from show_tagger()
>      update-index: drop unused prefix_length parameter from do_reupdate()
>      test-date: drop unused "now" parameter from parse_dates()
>      unpack-trees: drop name_entry from traverse_by_cache_tree()
>      unpack-trees: drop unused error_type parameters
>      report_path_error(): drop unused prefix parameter
>      fetch_pack(): drop unused parameters
>      parse-options: drop unused ctx parameter from show_gitcomp()
>      pretty: drop unused "type" parameter in needs_rfc2047_encoding()
>      pretty: drop unused strbuf from parse_padding_placeholder()
>      git: read local config in --list-cmds
>      completion: fix multiple command removals
>      parse_opt_ref_sorting: always use with NONEG flag
>      refs/files-backend: handle packed transaction prepare failure
>      refs/files-backend: don't look at an aborted transaction
>      http: factor out curl result code normalization
>      http: normalize curl results for dumb loose and alternates fetches
>      http: use normalize_curl_result() instead of manual conversion
>      revision: use a prio_queue to hold rewritten parents
>      get_commit_tree(): return NULL for broken tree
>      rev-list: let traversal die when --missing is not in use
>      rev-list: detect broken root trees
>      test-prio-queue: use xmalloc
>      xdiff: use git-compat-util
>      xdiff: use xmalloc/xrealloc
>      progress: use xmalloc/xcalloc
>      t5516: drop ok=sigpipe from unreachable-want tests
>      t5530: check protocol response for "not our ref"
>      upload-pack: send ERR packet for non-tip objects
>      pkt-line: prepare buffer before handling ERR packets
>      fetch: use free_refs()
>      remote.c: make singular free_ref() public
>      fetch: do not consider peeled tags as advertised tips
>      packfile.h: drop extern from function declarations
>      pack-revindex: open index if necessary
>      t5319: fix bogus cat-file argument
>      t5319: drop useless --buffer from cat-file
>      midx: check both pack and index names for containment
>      packfile: fix pack basename computation
>      http: simplify parsing of remote objects/info/packs
>      server-info: fix blind pointer arithmetic
>      server-info: simplify cleanup in parse_pack_def()
>      server-info: use strbuf to read old info/packs file
>      server-info: drop nr_alloc struct member
>      server-info: drop objdirlen pointer arithmetic
>      update_info_refs(): drop unused force parameter
>      t5304: add a test for pruning with bitmaps
>      untracked-cache: be defensive about missing NULs in index
>      untracked-cache: simplify parsing by dropping "next"
>      untracked-cache: simplify parsing by dropping "len"
>      p5302: create the repo in each index-pack test
>      doc/ls-files: put nested list for "-t" option into block
>      t/perf: depend on perl JSON only when using --codespeed
>      t/perf: add perf script for partial clones
>      coccicheck: optionally batch spatch invocations
>      t/lib-httpd: pass LSAN_OPTIONS through apache
>      coccicheck: make batch size of 0 mean "unlimited"
>      get_oid: handle NULL repo->index
>
>Jiang Xin (5):
>      t5323: test cases for git-pack-redundant
>      pack-redundant: delay creation of unique_objects
>      pack-redundant: rename pack_list.all_objects
>      pack-redundant: consistent sort method
>      i18n: fix typos found during l10n for git 2.22.0
>
>Joel Teichroeb (5):
>      stash: improve option parsing test coverage
>      stash: convert apply to builtin
>      stash: convert drop and clear to builtin
>      stash: convert branch to builtin
>      stash: convert pop to builtin
>
>Joey Hess (1):
>      convert: avoid malloc of original file size
>
>Johannes Schindelin (67):
>      ident: add the ability to provide a "fallback identity"
>      travis: remove the hack to build the Windows job on Azure Pipelines
>      tests: let --stress-limit=<N> imply --stress
>      tests: introduce --stress-jobs=<N>
>      built-in rebase: no need to check out `onto` twice
>      built-in rebase: use the correct reflog when switching branches
>      built-in rebase: demonstrate that ORIG_HEAD is not set correctly
>      built-in rebase: set ORIG_HEAD just once, before the rebase
>      Makefile: use `git ls-files` to list header files, if possible
>      curl: anonymize URLs in error messages and warnings
>      remote-curl: mark all error messages for translation
>      stash: add back the original, scripted `git stash`
>      stash: optionally use the scripted version again
>      tests: add a special setup where stash.useBuiltin is off
>      legacy stash: fix "rudimentary backport of -q"
>      built-in stash: handle :(glob) pathspecs again
>      mingw: drop MakeMaker reference
>      mingw: allow building with an MSYS2 runtime v3.x
>      rebase: deprecate --preserve-merges
>      mingw: respect core.hidedotfiles = false in git-init again
>      test-lib: introduce 'test_atexit'
>      git-daemon: use 'test_atexit` to stop 'git-daemon'
>      git p4 test: use 'test_atexit' to kill p4d and the watchdog process
>      rebase -i: demonstrate obscure loose object cache bug
>      sequencer: improve error message when an OID could not be parsed
>      sequencer: move stale comment into correct location
>      get_oid(): when an object was not found, try harder
>      difftool: remove obsolete (and misleading) comment
>      parse-options: make OPT_ARGUMENT() more useful
>      difftool: allow running outside Git worktrees with --no-index
>      docs: move gitremote-helpers into section 7
>      docs: do not document the `git remote-testgit` command
>      check-docs: really look at the documented commands again
>      check-docs: do not expect guide pages to correspond to commands
>      check-docs: fix for setups where executables have an extension
>      tests (rebase): spell out the `--keep-empty` option
>      tests (rebase): spell out the `--force-rebase` option
>      t7810: do not abbreviate `--no-exclude-standard` nor `--invert-match`
>      t5531: avoid using an abbreviated option
>      tests (push): do not abbreviate the `--follow-tags` option
>      tests (status): spell out the `--find-renames` option in full
>      tests (pack-objects): use the full, unabbreviated `--revs` option
>      t3301: fix false negative
>      untracked cache: fix off-by-one
>      tests: disallow the use of abbreviated options (by default)
>      t9822: skip tests if file names cannot be ISO-8859-1 encoded
>      macOS: make sure that gettext is found
>      remote-testgit: move it into the support directory for t5801
>      Makefile: drop the NO_INSTALL variable
>      help -a: do not list commands that are excluded from the build
>      check-docs: allow command-list.txt to contain excluded commands
>      docs: exclude documentation for commands that have been excluded
>      check-docs: do not bother checking for legacy scripts' documentation
>      test-tool: handle the `-C <directory>` option just like `git`
>      Turn `git serve` into a test helper
>      t5580: verify that alternates can be UNC paths
>      fsmonitor: demonstrate that it is not refreshed after discard_index()
>      fsmonitor: force a refresh after the index was discarded
>      t6500(mingw): use the Windows PID of the shell
>      difftool --no-index: error out on --dir-diff (and don't crash)
>      status: fix display of rebase -ir's `label` command
>      parse-options: adjust `parse_opt_unknown_cb()`s declared return type
>      stash: document stash.useBuiltin
>      rebase: replace incorrect logical negation by correct bitwise one
>      tests: mark a couple more test cases as requiring `rebase -p`
>      docs: say that `--rebase=preserve` is deprecated
>      rebase docs: recommend `-r` over `-p`
>
>Jonathan Tan (25):
>      remote-curl: reduce scope of rpc_state.argv
>      remote-curl: reduce scope of rpc_state.stdin_preamble
>      remote-curl: reduce scope of rpc_state.result
>      remote-curl: refactor reading into rpc_state's buf
>      remote-curl: use post_rpc() for protocol v2 also
>      tests: define GIT_TEST_PROTOCOL_VERSION
>      t5601: check ssh command only with protocol v0
>      tests: always test fetch of unreachable with v0
>      t5503: fix overspecification of trace expectation
>      t5512: compensate for v0 only sending HEAD symrefs
>      t5700: only run with protocol version 1
>      tests: fix protocol version for overspecifications
>      t5552: compensate for v2 filtering ref adv.
>      submodule: explain first attempt failure clearly
>      t5551: mark half-auth no-op fetch test as v0-only
>      fetch-pack: call prepare_shallow_info only if v0
>      fetch-pack: respect --no-update-shallow in v2
>      sha1-file: support OBJECT_INFO_FOR_PREFETCH
>      fetch-pack: binary search when storing wanted-refs
>      diff: batch fetching of missing blobs
>      pack-objects: write objects packed to trace2
>      transport: die if server options are unsupported
>      clone: send server options when using protocol v2
>      worktree: update is_bare heuristics
>      fetch-pack: send server options after command
>
>Jordi Mas (1):
>      l10n: Fixes to Catalan translation
>
>Josh Steadmon (5):
>      protocol-capabilities.txt: document symref
>      trace2: write to directory targets
>      clone: do faster object check for partial clones
>      trace2: fix incorrect function pointer check
>      commit-graph: fix memory leak
>
>Junio C Hamano (18):
>      test: caution on our version of 'yes'
>      builtin/log: downcase the beginning of error messages
>      format-patch: notice failure to open cover letter for writing
>      Start 2.22 cycle
>      The second batch
>      The third batch
>      The fourth batch
>      gettext tests: export the restored GIT_TEST_GETTEXT_POISON
>      The fifth batch
>      The sixth batch
>      Makefile: dedup list of files obtained from ls-files
>      The seventh batch
>      The eighth batch
>      Git 2.22-rc0
>      pkt-line: drop 'const'-ness of a param to set_packet_header()
>      Git 2.22-rc1
>      Git 2.22-rc2
>      Git 2.22-rc3
>
>Kyle Meyer (5):
>      rebase docs: fix "gitlink" typo
>      submodule: refuse to add repository with no commits
>      dir: do not traverse repositories with no commits
>      add: error appropriately on repository with no commits
>      t3000 (ls-files -o): widen description to reflect current tests
>
>Martin Ågren (14):
>      setup: free old value before setting `work_tree`
>      setup: fix memory leaks with `struct repository_format`
>      config/diff.txt: drop spurious backtick
>      config/fsck.txt: avoid starting line with dash
>      git.txt: remove empty line before list continuation
>      git-svn.txt: drop escaping '\' that ends up being rendered
>      Documentation: turn middle-of-line tabs into spaces
>      Documentation/Makefile: add missing xsl dependencies for manpages
>      Documentation/Makefile: add missing dependency on asciidoctor-extensions
>      asciidoctor-extensions: fix spurious space after linkgit
>      Doc: auto-detect changed build flags
>      doc-diff: let `render_tree()` take an explicit directory name
>      doc-diff: support diffing from/to AsciiDoc(tor)
>      doc-diff: add `--cut-header-footer`
>
>Matthew Kraai (1):
>      t3903: add test for --intent-to-add file
>
>Michal Suchanek (1):
>      worktree: fix worktree add race
>
>Mike Hommey (2):
>      fix pack protocol example client/server communication
>      Make fread/fwrite-like functions in http.c more like fread/fwrite.
>
>Nguyễn Thái Ngọc Duy (129):
>      parse-options.h: remove extern on function prototypes
>      parse-options: add one-shot mode
>      parse-options: disable option abbreviation with PARSE_OPT_KEEP_UNKNOWN
>      parse-options: add OPT_BITOP()
>      parse-options: stop abusing 'callback' for lowlevel callbacks
>      parse-options: avoid magic return codes
>      parse-options: allow ll_callback with OPTION_CALLBACK
>      diff.h: keep forward struct declarations sorted
>      diff.h: avoid bit fields in struct diff_flags
>      diff.c: prepare to use parse_options() for parsing
>      diff.c: convert -u|-p|--patch
>      diff.c: convert -U|--unified
>      diff.c: convert -W|--[no-]function-context
>      diff.c: convert --raw
>      read-cache.c: fix writing "link" index ext with null base oid
>      completion: add more parameter value completion
>      diff-parseopt: convert --patch-with-raw
>      diff-parseopt: convert --numstat and --shortstat
>      diff-parseopt: convert --dirstat and friends
>      diff-parseopt: convert --check
>      diff-parseopt: convert --summary
>      diff-parseopt: convert --patch-with-stat
>      diff-parseopt: convert --name-only
>      diff-parseopt: convert --name-status
>      diff-parseopt: convert -s|--no-patch
>      diff-parseopt: convert --stat*
>      diff-parseopt: convert --[no-]compact-summary
>      diff-parseopt: convert --output-*
>      diff-parseopt: convert -B|--break-rewrites
>      diff-parseopt: convert -M|--find-renames
>      diff-parseopt: convert -D|--irreversible-delete
>      diff-parseopt: convert -C|--find-copies
>      diff-parseopt: convert --find-copies-harder
>      diff-parseopt: convert --no-renames|--[no--rename-empty
>      diff-parseopt: convert --relative
>      diff-parseopt: convert --[no-]minimal
>      diff-parseopt: convert --ignore-some-changes
>      Delete check-racy.c
>      diff-parseopt: convert --[no-]indent-heuristic
>      diff-parseopt: convert --patience
>      diff-parseopt: convert --histogram
>      diff-parseopt: convert --diff-algorithm
>      diff-parseopt: convert --anchored
>      diff-parseopt: convert --binary
>      diff-parseopt: convert --full-index
>      diff-parseopt: convert -a|--text
>      diff-parseopt: convert -R
>      diff-parseopt: convert --[no-]follow
>      diff-parseopt: convert --[no-]color
>      diff-parseopt: convert --word-diff
>      diff-parseopt: convert --word-diff-regex
>      diff-parseopt: convert --color-words
>      diff-parseopt: convert --exit-code
>      diff-parseopt: convert --quiet
>      diff-parseopt: convert --ext-diff
>      diff-parseopt: convert --textconv
>      diff-parseopt: convert --ignore-submodules
>      diff-parseopt: convert --submodule
>      files-backend.c: factor out per-worktree code in loose_fill_ref_dir()
>      files-backend.c: reduce duplication in add_per_worktree_entries_to_dir()
>      Make sure refs/rewritten/ is per-worktree
>      unpack-trees: fix oneway_merge accidentally carry over stage index
>      checkout.txt: note about losing staged changes with --merge
>      commit: improve error message in "-a <paths>" case
>      unpack-trees: keep gently check inside add_rejected_path
>      unpack-trees: rename "gently" flag to "quiet"
>      read-tree: add --quiet
>      checkout: prevent losing staged changes with --merge
>      diff-parseopt: convert --ws-error-highlight
>      diff-parseopt: convert --ita-[in]visible-in-index
>      diff-parseopt: convert -z
>      diff-parseopt: convert -l
>      diff-parseopt: convert -S|-G
>      diff-parseopt: convert --pickaxe-all|--pickaxe-regex
>      diff-parseopt: convert -O
>      diff-parseopt: convert --find-object
>      diff-parseopt: convert --diff-filter
>      diff-parseopt: convert --[no-]abbrev
>      diff-parseopt: convert --[src|dst]-prefix
>      diff-parseopt: convert --line-prefix
>      diff-parseopt: convert --no-prefix
>      diff-parseopt: convert --inter-hunk-context
>      diff-parseopt: convert --[no-]color-moved
>      diff-parseopt: convert --color-moved-ws
>      diff.c: allow --no-color-moved-ws
>      range-diff: use parse_options() instead of diff_opt_parse()
>      diff --no-index: use parse_options() instead of diff_opt_parse()
>      am: avoid diff_opt_parse()
>      config: correct '**' matching in includeIf patterns
>      interpret-trailers.txt: start the desc line with a capital letter
>      read-tree.txt: clarify --reset and worktree changes
>      packfile.c: add repo_approximate_object_count()
>      refs.c: add refs_ref_exists()
>      refs.c: add refs_shorten_unambiguous_ref()
>      refs.c: remove the_repo from substitute_branch_name()
>      refs.c: remove the_repo from expand_ref()
>      refs.c: add repo_dwim_ref()
>      refs.c: add repo_dwim_log()
>      refs.c: remove the_repo from read_ref_at()
>      submodule foreach: fix "<command> --quiet" not being respected
>      commit.cocci: refactor code, avoid double rewrite
>      commit.c: add repo_get_commit_tree()
>      sha1-name.c: remove the_repo from sort_ambiguous()
>      sha1-name.c: remove the_repo from find_abbrev_len_packed()
>      sha1-name.c: add repo_find_unique_abbrev_r()
>      sha1-name.c: store and use repo in struct disambiguate_state
>      sha1-name.c: add repo_for_each_abbrev()
>      sha1-name.c: remove the_repo from get_short_oid()
>      sha1-name.c: remove the_repo from interpret_nth_prior_checkout()
>      sha1-name.c: remove the_repo from interpret_branch_mark()
>      sha1-name.c: add repo_interpret_branch_name()
>      sha1-name.c: remove the_repo from get_oid_oneline()
>      sha1-name.c: remove the_repo from get_describe_name()
>      sha1-name.c: remove the_repo from get_oid_basic()
>      sha1-name.c: remove the_repo from get_oid_1()
>      sha1-name.c: remove the_repo from handle_one_ref()
>      sha1-name.c: remove the_repo from diagnose_invalid_index_path()
>      sha1-name.c: remove the_repo from resolve_relative_path()
>      sha1-name.c: remove the_repo from get_oid_with_context_1()
>      sha1-name.c: add repo_get_oid()
>      submodule-config.c: use repo_get_oid for reading .gitmodules
>      sha1-name.c: remove the_repo from maybe_die_on_misspelt_object_name
>      sha1-name.c: remove the_repo from other get_oid_*
>      sha1-name.c: remove the_repo from get_oid_mb()
>      parse-options: don't emit "ambiguous option" for aliases
>      submodule--helper: add a missing \n
>      diff-parseopt: correct variable types that are used by parseopt
>      diff-parseopt: restore -U (no argument) behavior
>      parse-options: check empty value in OPT_INTEGER and OPT_ABBREV
>
>Paul-Sebastian Ungureanu (17):
>      sha1-name.c: add `get_oidf()` which acts like `get_oid()`
>      strbuf.c: add `strbuf_join_argv()`
>      strbuf.c: add `strbuf_insertf()` and `strbuf_vinsertf()`
>      t3903: modernize style
>      stash: rename test cases to be more descriptive
>      stash: add tests for `git stash show` config
>      stash: mention options in `show` synopsis
>      stash: convert list to builtin
>      stash: convert show to builtin
>      stash: convert store to builtin
>      stash: convert create to builtin
>      stash: convert push to builtin
>      stash: make push -q quiet
>      stash: convert save to builtin
>      stash: optimize `get_untracked_files()` and `check_changes()`
>      stash: replace all `write-tree` child processes with API calls
>      stash: convert `stash--helper.c` into `stash.c`
>
>Philip Oakley (2):
>      rerere doc: quote `rerere.enabled`
>      describe doc: remove '7-char' abbreviation reference
>
>Phillip Wood (21):
>      am/cherry-pick/rebase/revert: document --rerere-autoupdate
>      merge: tweak --rerere-autoupdate documentation
>      sequencer: break some long lines
>      cherry-pick: demonstrate option amnesia
>      cherry-pick --continue: remember options
>      commit/reset: try to clean up sequencer state
>      fix cherry-pick/revert status after commit
>      sequencer: fix cleanup with --signoff and -x
>      sequencer.c: save and restore cleanup mode
>      sequencer: always discard index after checkout
>      rebase: don't translate trace strings
>      rebase: rename write_basic_state()
>      rebase: use OPT_RERERE_AUTOUPDATE()
>      rebase -i: combine rebase--interactive.c with rebase.c
>      rebase -i: remove duplication
>      rebase -i: use struct commit when parsing options
>      rebase -i: use struct object_id for squash_onto
>      rebase -i: use struct rebase_options to parse args
>      rebase -i: use struct rebase_options in do_interactive_rebase()
>      rebase: use a common action enum
>      rebase -i: run without forking rebase--interactive
>
>Ramsay Jones (2):
>      prune-packed: check for too many arguments
>      Makefile: fix 'hdr-check' when GCRYPT not installed
>
>René Scharfe (1):
>      get-tar-commit-id: parse comment record
>
>Robert P. J. Day (3):
>      mention use of "hooks.allownonascii" in "man githooks"
>      docs/git-gc: fix typo "--prune=all" to "--prune=now"
>      attr.c: ".gitattribute" -> ".gitattributes" (comments)
>
>Rohit Ashiwal (3):
>      test functions: add function `test_file_not_empty`
>      t3600: modernize style
>      t3600: use helpers to replace test -d/f/e/s <path>
>
>SZEDER Gábor (27):
>      test-lib: fix interrupt handling with 'dash' and '--verbose-log -x'
>      t/lib-git-daemon: make sure to kill the 'git-daemon' process
>      tests: use 'test_atexit' to stop httpd
>      t0301-credential-cache: use 'test_atexit' to stop the credentials helper
>      git p4 test: clean up the p4d cleanup functions
>      git p4 test: simplify timeout handling
>      git p4 test: disable '-x' tracing in the p4d watchdog loop
>      t9811-git-p4-label-import: fix pipeline negation
>      t5318-commit-graph: remove unused variable
>      Documentation/git-diff-tree.txt: fix formatting
>      Documentation/technical/api-config.txt: fix formatting
>      Documentation/technical/protocol-v2.txt: fix formatting
>      ci: install Asciidoctor in 'ci/install-dependencies.sh'
>      index-pack: show progress while checking objects
>      ci: stick with Asciidoctor v1.5.8 for now
>      ci: fix AsciiDoc/Asciidoctor stderr check in the documentation build job
>      progress: make display_progress() return void
>      progress: assemble percentage and counters in a strbuf before printing
>      blame: default to HEAD in a bare repo when no start commit is given
>      builtin rebase: use FREE_AND_NULL
>      builtin rebase: use oideq()
>      progress: clear previous progress update dynamically
>      progress: break too long progress bar lines
>      ci: install 'libsvn-perl' instead of 'git-svn'
>      trace2: rename environment variables to GIT_TRACE2*
>      trace2: document the supported values of GIT_TRACE2* env variables
>      progress: avoid empty line when breaking the progress line
>
>Sun Chao (2):
>      pack-redundant: delete redundant code
>      pack-redundant: new algorithm to find min packs
>
>Sven Strickroth (1):
>      MSVC: include compat/win32/path-utils.h for MSVC, too, for real_path()
>
>Tanushree Tumane (1):
>      mingw: remove obsolete IPv6-related code
>
>Taylor Blau (4):
>      t: move 'hex2oct' into test-lib-functions.sh
>      t: introduce tests for unexpected object types
>      list-objects.c: handle unexpected non-blob entries
>      list-objects.c: handle unexpected non-tree entries
>
>Thomas Gummerer (15):
>      move worktree tests to t24*
>      entry: factor out unlink_entry function
>      entry: support CE_WT_REMOVE flag in checkout_entry
>      read-cache: add invalidate parameter to remove_marked_cache_entries
>      checkout: clarify comment
>      checkout: factor out mark_cache_entry_for_checkout function
>      checkout: introduce --{,no-}overlay option
>      checkout: introduce checkout.overlayMode config
>      revert "checkout: introduce checkout.overlayMode config"
>      ident: don't require calling prepare_fallback_ident first
>      stash: drop unused parameter
>      stash: pass pathspec as pointer
>      glossary: add definition for overlay
>      stash: setup default diff output format if necessary
>      ls-files: use correct format string
>
>Todd Zullinger (9):
>      t4038-diff-combined: quote paths with whitespace
>      t9902: test multiple removals via completion.commands
>      completion: use __git when calling --list-cmds
>      Documentation/rev-list-options: wrap --date=<format> block with "--"
>      Documentation/git-status: fix titles in porcelain v2 section
>      Documentation/git-svn: improve asciidoctor compatibility
>      Documentation/git-show-branch: avoid literal {apostrophe}
>      test-lib: try harder to ensure a working jgit
>      RelNotes: minor typo fixes in 2.22.0 draft
>
>Torsten Bögershausen (1):
>      trace2: NULL is not allowed for va_list
>
>Trần Ngọc Quân (1):
>      l10n: Updated Vietnamese translation for v2.21 rd2
>
>Vadim Kochan (1):
>      autoconf: #include <libintl.h> when checking for gettext()
>
>William Hubbs (1):
>      config: allow giving separate author and committer idents
>
>Yash Bhatambare (1):
>      gitattributes.txt: fix typo
>
>brian m. carlson (35):
>      t/lib-submodule-update: use appropriate length constant
>      khash: move oid hash table definition
>      pack-bitmap: make bitmap header handling hash agnostic
>      pack-bitmap: convert struct stored_bitmap to object_id
>      pack-bitmap: replace sha1_to_hex
>      pack-bitmap: switch hard-coded constants to the_hash_algo
>      pack-bitmap: switch hash tables to use struct object_id
>      submodule: avoid hard-coded constants
>      notes-merge: switch to use the_hash_algo
>      notes: make hash size independent
>      notes: replace sha1_to_hex
>      object-store: rename and expand packed_git's sha1 member
>      builtin/name-rev: make hash-size independent
>      fast-import: make hash-size independent
>      fast-import: replace sha1_to_hex
>      builtin/am: make hash size independent
>      builtin/pull: make hash-size independent
>      http-push: convert to use the_hash_algo
>      http-backend: allow 64-character hex names
>      http-push: remove remaining uses of sha1_to_hex
>      http-walker: replace sha1_to_hex
>      http: replace hard-coded constant with the_hash_algo
>      http: compute hash of downloaded objects using the_hash_algo
>      http: replace sha1_to_hex
>      remote-curl: make hash size independent
>      hash: add a function to lookup hash algorithm by length
>      builtin/get-tar-commit-id: make hash size independent
>      archive: convert struct archiver_args to object_id
>      refspec: make hash size independent
>      builtin/difftool: use parse_oid_hex
>      dir: make untracked cache extension hash size independent
>      read-cache: read data in a hash-independent way
>      Git.pm: make hash size independent
>      gitweb: make hash size independent
>      send-email: default to quoted-printable when CR is present
>
>Ævar Arnfjörð Bjarmason (44):
>      receive-pack: fix use-after-free bug
>      commit-graph tests: split up corrupt_graph_and_verify()
>      commit-graph tests: test a graph that's too small
>      Makefile: remove an out-of-date comment
>      Makefile: move "strip" assignment down from flags
>      Makefile: add/remove comments at top and tweak whitespace
>      Makefile: Move *_LIBS assignment into its own section
>      Makefile: move the setting of *FLAGS closer to "include"
>      Makefile: allow for combining DEVELOPER=1 and CFLAGS="..."
>      gc: remove redundant check for gc_auto_threshold
>      gc: convert to using the_hash_algo
>      gc: refactor a "call me once" pattern
>      reflog tests: make use of "test_config" idiom
>      reflog tests: test for the "points nowhere" warning
>      rebase: remove the rebase.useBuiltin setting
>      gc docs: modernize the advice for manually running "gc"
>      gc docs: stop noting "repack" flags
>      gc docs: clean grammar for "gc.bigPackThreshold"
>      commit-graph: fix segfault on e.g. "git status"
>      commit-graph: don't early exit(1) on e.g. "git status"
>      commit-graph: don't pass filename to load_commit_graph_one_fd_st()
>      commit-graph verify: detect inability to read the graph
>      commit-graph write: don't die if the existing graph is corrupt
>      commit-graph: improve & i18n error messages
>      reflog tests: assert lack of early exit with expiry="never"
>      gc: handle & check gc.reflogExpire config
>      test-lib: whitelist GIT_TR2_* in the environment
>      gc docs: include the "gc.*" section from "config" in "gc"
>      gc docs: re-flow the "gc.*" section in "config"
>      gc docs: fix formatting for "gc.writeCommitGraph"
>      gc docs: note how --aggressive impacts --window & --depth
>      gc docs: downplay the usefulness of --aggressive
>      gc docs: note "gc --aggressive" in "fast-import"
>      gc docs: clarify that "gc" doesn't throw away referenced objects
>      gc docs: remove incorrect reference to gc.auto=0
>      perf README: correct docs for 3c8f12c96c regression
>      perf aggregate: remove GIT_TEST_INSTALLED from --codespeed
>      perf-lib.sh: make "./run <revisions>" use the correct gits
>      perf-lib.sh: remove GIT_TEST_INSTALLED from perf-lib.sh
>      perf tests: add "bindir" prefix to git tree test results
>      perf-lib.sh: forbid the use of GIT_TEST_INSTALLED
>      trace2: fix up a missing "leave" entry point
>      trace2: fix up a missing "leave" entry point
>      sha1dc: update from upstream
>
>İsmail Dönmez (2):
>      mingw: do not let ld strip relocations
>      mingw: enable DEP and ASLR
>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[relevance 0%]

* Re: [ANNOUNCE] Git v2.22.0-rc3
  2019-06-03 20:23  2% [ANNOUNCE] Git v2.22.0-rc3 Junio C Hamano
@ 2019-06-04  1:32  0% ` Ben Humphreys
  2019-06-04  1:47  0% ` Bhaskar Chowdhury
  2019-06-04 14:45  0% ` Git for Windows v2.22.0-rc3, was " Johannes Schindelin
  2 siblings, 0 replies; 162+ results
From: Ben Humphreys @ 2019-06-04  1:32 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

Hi folks,

I’m one of the Bitbucket Server developers and I just wanted to let
you know of one of our test cases that is now failing on the 2.22.0
release candidates (tested rc2 and rc3). I’m still looking into it,
but figure the release is probably imminent so worth reporting sooner
than later.

The problem seems to be related to some recent changes in
merge-recursive.c. I’ve made available our test dataset and the
following steps will reproduce the problem:

$ git --version
git version 2.22.0.rc3

$ git clone https://bitbucket.org/ben_humphreys/merge-dataset.git
$ cd merge-dataset
$ git checkout branch_that_has_rename_add_triggering_content_conflict_trgt
$ git merge origin/branch_that_has_rename_add_triggering_content_conflict_src
Assertion failed: (a->path && b->path), function merge_3way, file
merge-recursive.c, line 1044.
Abort trap: 6

The assertion is failing because b->path is null:

(lldb) print a->path
(char *const) $2 = 0x00007f8e177025f8 "count.txt"
(lldb) print b->path
(char *const) $3 = 0x0000000000000000 <no value available>

On Git 2.21.0 the merge succeeds (with conflicts as expected):

$ git merge origin/branch_that_has_rename_add_triggering_content_conflict_src
CONFLICT (rename/add): Rename numbers.txt->count.txt in
origin/branch_that_has_rename_add_triggering_content_conflict_src.
Added count.txt in HEAD
Auto-merging version of count.txt from numbers.txt
Auto-merging count.txt
Automatic merge failed; fix conflicts and then commit the result.

I’ll let you know if I get any further investigating this.

Best Regards,
Ben Humphreys


On Tue, Jun 4, 2019 at 6:23 AM Junio C Hamano <gitster@pobox.com> wrote:
>
> A release candidate Git v2.22.0-rc3 is now available for testing
> at the usual places.  It is comprised of 718 non-merge commits
> since v2.21.0, contributed by 67 people, 17 of which are new faces.
>
> Hopefully, this will be the last -rc during this cycle.
>
> The tarballs are found at:
>
>     https://www.kernel.org/pub/software/scm/git/testing/
>
> The following public repositories all have a copy of the
> 'v2.22.0-rc3' tag and the 'master' branch that the tag points at:
>
>   url = https://kernel.googlesource.com/pub/scm/git/git
>   url = git://repo.or.cz/alt-git.git
>   url = https://github.com/gitster/git
>
> New contributors whose contributions weren't in v2.21.0 are as follows.
> Welcome to the Git development community!
>
>   Alexander Blesius, Baruch Siach, Boxuan Li, Chris Mayo,
>   Chris. Webster, Clément Chigot, Corentin BOMPARD, Damien Robert,
>   Dustin Spicuzza, Emily Shaffer, Michal Suchanek, Rohit Ashiwal,
>   Sun Chao, Tanushree Tumane, Vadim Kochan, William Hubbs, and
>   Yash Bhatambare.
>
> Returning contributors who helped this release are as follows.
> Thanks for your continued support.
>
>   Ævar Arnfjörð Bjarmason, Alban Gruin, Alexander Shopov, Anders
>   Waldenborg, Andreas Heiduk, Andrei Rybak, Beat Bolli, Ben Peart,
>   Brandon Richardson, brian m. carlson, Carlo Marcelo Arenas
>   Belón, Christian Couder, Daniels Umanovskis, David Aguilar,
>   David Kastrup, Denton Liu, Derrick Stolee, Elijah Newren, Eric
>   Sunshine, Eric Wong, İsmail Dönmez, Jean-Noël Avila, Jeff
>   Hostetler, Jeff King, Jiang Xin, Joel Teichroeb, Joey Hess,
>   Johannes Schindelin, Jonathan Tan, Jordi Mas, Josh Steadmon,
>   Junio C Hamano, Kyle Meyer, Martin Ågren, Matthew Kraai, Mike
>   Hommey, Nguyễn Thái Ngọc Duy, Paul-Sebastian Ungureanu,
>   Philip Oakley, Phillip Wood, Ramsay Jones, René Scharfe,
>   Robert P. J. Day, Sven Strickroth, SZEDER Gábor, Taylor Blau,
>   Thomas Gummerer, Todd Zullinger, Torsten Bögershausen, and
>   Trần Ngọc Quân.
>
> ----------------------------------------------------------------
>
> Git 2.22 Release Notes (draft)
> ==============================
>
> Updates since v2.21
> -------------------
>
> Backward compatibility note
>
>  * The filter specification "--filter=sparse:path=<path>" used to
>    create a lazy/partial clone has been removed.  Using a blob that is
>    part of the project as sparse specification is still supported with
>    the "--filter=sparse:oid=<blob>" option.
>
> UI, Workflows & Features
>
>  * "git checkout --no-overlay" can be used to trigger a new mode of
>    checking out paths out of the tree-ish, that allows paths that
>    match the pathspec that are in the current index and working tree
>    and are not in the tree-ish.
>
>  * The %(trailers) formatter in "git log --format=..."  now allows to
>    optionally pick trailers selectively by keyword, show only values,
>    etc.
>
>  * Four new configuration variables {author,committer}.{name,email}
>    have been introduced to override user.{name,email} in more specific
>    cases.
>
>  * Command-line completion (in contrib/) learned to tab-complete the
>    "git submodule absorbgitdirs" subcommand.
>
>  * "git branch" learned a new subcommand "--show-current".
>
>  * Output from "diff --cc" did not show the original paths when the
>    merge involved renames.  A new option adds the paths in the
>    original trees to the output.
>
>  * The command line completion (in contrib/) has been taught to
>    complete more subcommand parameters.
>
>  * The final report from "git bisect" used to show the suspected
>    culprit using a raw "diff-tree", with which there is no output for
>    a merge commit.  This has been updated to use a more modern and
>    human readable output that still is concise enough.
>
>  * "git rebase --rebase-merges" replaces its old "--preserve-merges"
>    option; the latter is now marked as deprecated.
>
>  * Error message given while cloning with --recurse-submodules has
>    been updated.
>
>  * The completion helper code now pays attention to repository-local
>    configuration (when available), which allows --list-cmds to honour
>    a repository specific setting of completion.commands, for example.
>
>  * "git mergetool" learned to offer Sublime Merge (smerge) as one of
>    its backends.
>
>  * A new hook "post-index-change" is called when the on-disk index
>    file changes, which can help e.g. a virtualized working tree
>    implementation.
>
>  * "git difftool" can now run outside a repository.
>
>  * "git checkout -m <other>" was about carrying the differences
>    between HEAD and the working-tree files forward while checking out
>    another branch, and ignored the differences between HEAD and the
>    index.  The command has been taught to abort when the index and the
>    HEAD are different.
>
>  * A progress indicator has been added to the "index-pack" step, which
>    often makes users wait for completion during "git clone".
>
>  * "git submodule" learns "set-branch" subcommand that allows the
>    submodule.*.branch settings to be modified.
>
>  * "git merge-recursive" backend recently learned a new heuristics to
>    infer file movement based on how other files in the same directory
>    moved.  As this is inherently less robust heuristics than the one
>    based on the content similarity of the file itself (rather than
>    based on what its neighbours are doing), it sometimes gives an
>    outcome unexpected by the end users.  This has been toned down to
>    leave the renamed paths in higher/conflicted stages in the index so
>    that the user can examine and confirm the result.
>
>  * "git tag" learned to give an advice suggesting it might be a
>    mistake when creating an annotated or signed tag that points at
>    another tag.
>
>  * The "git pack-objects" command learned to report the number of
>    objects it packed via the trace2 mechanism.
>
>  * The list of conflicted paths shown in the editor while concluding a
>    conflicted merge was shown above the scissors line when the
>    clean-up mode is set to "scissors", even though it was commented
>    out just like the list of updated paths and other information to
>    help the user explain the merge better.
>
>  * The trace2 tracing facility learned to auto-generate a filename
>    when told to log to a directory.
>
>  * "git clone" learned a new --server-option option when talking over
>    the protocol version 2.
>
>  * The connectivity bitmaps are created by default in bare
>    repositories now; also the pathname hash-cache is created by
>    default to avoid making crappy deltas when repacking.
>
>  * "git branch new A...B" and "git checkout -b new A...B" have been
>    taught that in their contexts, the notation A...B means "the merge
>    base between these two commits", just like "git checkout A...B"
>    detaches HEAD at that commit.
>
>  * Update "git difftool" and "git mergetool" so that the combinations
>    of {diff,merge}.{tool,guitool} configuration variables serve as
>    fallback settings of each other in a sensible order.
>
>  * The "--dir-diff" mode of "git difftool" is not useful in "--no-index"
>    mode; they are now explicitly marked as mutually incompatible.
>
>
> Performance, Internal Implementation, Development Support etc.
>
>  * The diff machinery, one of the oldest parts of the system, which
>    long predates the parse-options API, uses fairly long and complex
>    handcrafted option parser.  This is being rewritten to use the
>    parse-options API.
>
>  * The implementation of pack-redundant has been updated for
>    performance in a repository with many packfiles.
>
>  * A more structured way to obtain execution trace has been added.
>
>  * "git prune" has been taught to take advantage of reachability
>    bitmap when able.
>
>  * The command line parser of "git commit-tree" has been rewritten to
>    use the parse-options API.
>
>  * Suggest GitGitGadget instead of submitGit as a way to submit
>    patches based on GitHub PR to us.
>
>  * The test framework has been updated to help developers by making it
>    easier to run most of the tests under different versions of
>    over-the-wire protocols.
>
>  * Dev support update to make it easier to compare two formatted
>    results from our documentation.
>
>  * The scripted "git rebase" implementation has been retired.
>
>  * "git multi-pack-index verify" did not scale well with the number of
>    packfiles, which is being improved.
>
>  * "git stash" has been rewritten in C.
>
>  * The "check-docs" Makefile target to support developers has been
>    updated.
>
>  * The tests have been updated not to rely on the abbreviated option
>    names the parse-options API offers, to protect us from an
>    abbreviated form of an option that used to be unique within the
>    command getting non-unique when a new option that share the same
>    prefix is added.
>
>  * The scripted version of "git rebase -i" wrote and rewrote the todo
>    list many times during a single step of its operation, and the
>    recent C-rewrite made a faithful conversion of the logic to C.  The
>    implementation has been updated to carry necessary information
>    around in-core to avoid rewriting the same file over and over
>    unnecessarily.
>
>  * Test framework update to more robustly clean up leftover files and
>    processes after tests are done.
>
>  * Conversion from unsigned char[20] to struct object_id continues.
>
>  * While running "git diff" in a lazy clone, we can upfront know which
>    missing blobs we will need, instead of waiting for the on-demand
>    machinery to discover them one by one.  The code learned to aim to
>    achieve better performance by batching the request for these
>    promised blobs.
>
>  * During an initial "git clone --depth=..." partial clone, it is
>    pointless to spend cycles for a large portion of the connectivity
>    check that enumerates and skips promisor objects (which by
>    definition is all objects fetched from the other side).  This has
>    been optimized out.
>
>  * Mechanically and systematically drop "extern" from function
>    declaration.
>
>  * The script to aggregate perf result unconditionally depended on
>    libjson-perl even though it did not have to, which has been
>    corrected.
>
>  * The internal implementation of "git rebase -i" has been updated to
>    avoid forking a separate "rebase--interactive" process.
>
>  * Allow DEP and ASLR for Windows build to for security hardening.
>
>  * Performance test framework has been broken and measured the version
>    of Git that happens to be on $PATH, not the specified one to
>    measure, for a while, which has been corrected.
>
>  * Optionally "make coccicheck" can feed multiple source files to
>    spatch, gaining performance while spending more memory.
>
>  * Attempt to use an abbreviated option in "git clone --recurs" is
>    responded by a request to disambiguate between --recursive and
>    --recurse-submodules, which is bad because these two are synonyms.
>    The parse-options API has been extended to define such synonyms
>    more easily and not produce an unnecessary failure.
>
>  * A pair of private functions in http.c that had names similar to
>    fread/fwrite did not return the number of elements, which was found
>    to be confusing.
>
>  * Update collision-detecting SHA-1 code to build properly on HP-UX.
>
>
> Fixes since v2.21
> -----------------
>
>  * "git prune-packed" did not notice and complain against excess
>    arguments given from the command line, which now it does.
>    (merge 9b0bd87ed2 rj/prune-packed-excess-args later to maint).
>
>  * Split-index fix.
>    (merge 6e37c8ed3c nd/split-index-null-base-fix later to maint).
>
>  * "git diff --no-index" may still want to access Git goodies like
>    --ext-diff and --textconv, but so far these have been ignored,
>    which has been corrected.
>    (merge 287ab28bfa jk/diff-no-index-initialize later to maint).
>
>  * Unify RPC code for smart http in protocol v0/v1 and v2, which fixes
>    a bug in the latter (lack of authentication retry) and generally
>    improves the code base.
>    (merge a97d00799a jt/http-auth-proto-v2-fix later to maint).
>
>  * The include file compat/bswap.h has been updated so that it is safe
>    to (accidentally) include it more than once.
>    (merge 33aa579a55 jk/guard-bswap-header later to maint).
>
>  * The set of header files used by "make hdr-check" unconditionally
>    included sha256/gcrypt.h, even when it is not used, causing the
>    make target to fail.  We now skip it when GCRYPT_SHA256 is not in
>    use.
>    (merge f23aa18e7f rj/hdr-check-gcrypt-fix later to maint).
>
>  * The Makefile uses 'find' utility to enumerate all the *.h header
>    files, which is expensive on platforms with slow filesystems; it
>    now optionally uses "ls-files" if working within a repository,
>    which is a trick similar to how all sources are enumerated to run
>    ETAGS on.
>    (merge 92b88eba9f js/find-lib-h-with-ls-files-when-possible later to maint).
>
>  * "git rebase" that was reimplemented in C did not set ORIG_HEAD
>    correctly, which has been corrected.
>    (merge cbd29ead92 js/rebase-orig-head-fix later to maint).
>
>  * Dev support.
>    (merge f545737144 js/stress-test-ui-tweak later to maint).
>
>  * CFLAGS now can be tweaked when invoking Make while using
>    DEVELOPER=YesPlease; this did not work well before.
>    (merge 6d5d4b4e93 ab/makefile-help-devs-more later to maint).
>
>  * "git fsck --connectivity-only" omits computation necessary to sift
>    the objects that are not reachable from any of the refs into
>    unreachable and dangling.  This is now enabled when dangling
>    objects are requested (which is done by default, but can be
>    overridden with the "--no-dangling" option).
>    (merge 8d8c2a5aef jk/fsck-doc later to maint).
>
>  * On platforms where "git fetch" is killed with SIGPIPE (e.g. OSX),
>    the upload-pack that runs on the other end that hangs up after
>    detecting an error could cause "git fetch" to die with a signal,
>    which led to a flaky test.  "git fetch" now ignores SIGPIPE during
>    the network portion of its operation (this is not a problem as we
>    check the return status from our write(2)s).
>    (merge 143588949c jk/no-sigpipe-during-network-transport later to maint).
>
>  * A recent update broke "is this object available to us?" check for
>    well-known objects like an empty tree (which should yield "yes",
>    even when there is no on-disk object for an empty tree), which has
>    been corrected.
>    (merge f06ab027ef jk/virtual-objects-do-exist later to maint).
>
>  * The setup code has been cleaned up to avoid leaks around the
>    repository_format structure.
>    (merge e8805af1c3 ma/clear-repository-format later to maint).
>
>  * "git config --type=color ..." is meant to replace "git config --get-color"
>    but there is a slight difference that wasn't documented, which is
>    now fixed.
>    (merge cd8e7593b9 jk/config-type-color-ends-with-lf later to maint).
>
>  * When the "clean" filter can reduce the size of a huge file in the
>    working tree down to a small "token" (a la Git LFS), there is no
>    point in allocating a huge scratch area upfront, but the buffer is
>    sized based on the original file size.  The convert mechanism now
>    allocates very minimum and reallocates as it receives the output
>    from the clean filter process.
>    (merge 02156ab031 jh/resize-convert-scratch-buffer later to maint).
>
>  * "git rebase" uses the refs/rewritten/ hierarchy to store its
>    intermediate states, which inherently makes the hierarchy per
>    worktree, but it didn't quite work well.
>    (merge b9317d55a3 nd/rewritten-ref-is-per-worktree later to maint).
>
>  * "git log -L<from>,<to>:<path>" with "-s" did not suppress the patch
>    output as it should.  This has been corrected.
>    (merge 05314efaea jk/line-log-with-patch later to maint).
>
>  * "git worktree add" used to do a "find an available name with stat
>    and then mkdir", which is race-prone.  This has been fixed by using
>    mkdir and reacting to EEXIST in a loop.
>    (merge 7af01f2367 ms/worktree-add-atomic-mkdir later to maint).
>
>  * Build update for SHA-1 with collision detection.
>    (merge 07a20f569b jk/sha1dc later to maint).
>
>  * Build procedure has been fixed around use of asciidoctor instead of
>    asciidoc.
>    (merge 185f9a0ea0 ma/asciidoctor-fixes later to maint).
>
>  * remote-http transport did not anonymize URLs reported in its error
>    messages at places.
>    (merge c1284b21f2 js/anonymize-remote-curl-diag later to maint).
>
>  * Error messages given from the http transport have been updated so
>    that they can be localized.
>    (merge ed8b4132c8 js/remote-curl-i18n later to maint).
>
>  * "git init" forgot to read platform-specific repository
>    configuration, which made Windows port to ignore settings of
>    core.hidedotfiles, for example.
>
>  * A corner-case object name ambiguity while the sequencer machinery
>    is working (e.g. "rebase -i -x") has been fixed.
>
>  * "git format-patch" did not diagnose an error while opening the
>    output file for the cover-letter, which has been corrected.
>    (merge 2fe95f494c jc/format-patch-error-check later to maint).
>
>  * "git checkout -f <branch>" while the index has an unmerged path
>    incorrectly left some paths in an unmerged state, which has been
>    corrected.
>
>  * A corner case bug in the refs API has been corrected.
>    (merge d3322eb28b jk/refs-double-abort later to maint).
>
>  * Unicode update.
>    (merge 584b62c37b bb/unicode-12 later to maint).
>
>  * dumb-http walker has been updated to share more error recovery
>    strategy with the normal codepath.
>
>  * A buglet in configuration parser has been fixed.
>    (merge 19e7fdaa58 nd/include-if-wildmatch later to maint).
>
>  * The documentation for "git read-tree --reset -u" has been updated.
>    (merge b5a0bd694c nd/read-tree-reset-doc later to maint).
>
>  * Code clean-up around a much-less-important-than-it-used-to-be
>    update_server_info() function.
>    (merge b3223761c8 jk/server-info-rabbit-hole later to maint).
>
>  * The message given when "git commit -a <paths>" errors out has been
>    updated.
>    (merge 5a1dbd48bc nd/commit-a-with-paths-msg-update later to maint).
>
>  * "git cherry-pick --options A..B", after giving control back to the
>    user to ask help resolving a conflicted step, did not honor the
>    options it originally received, which has been corrected.
>
>  * Various glitches in "git gc" around reflog handling have been fixed.
>
>  * The code to read from commit-graph file has been cleanup with more
>    careful error checking before using data read from it.
>
>  * Performance fix around "git fetch" that grabs many refs.
>    (merge b764300912 jt/fetch-pack-wanted-refs-optim later to maint).
>
>  * Protocol v2 support in "git fetch-pack" of shallow clones has been
>    corrected.
>
>  * Performance fix around "git blame", especially in a linear history
>    (which is the norm we should optimize for).
>    (merge f892014943 dk/blame-keep-origin-blob later to maint).
>
>  * Performance fix for "rev-list --parents -- pathspec".
>    (merge 8320b1dbe7 jk/revision-rewritten-parents-in-prio-queue later to maint).
>
>  * Updating the display with progress message has been cleaned up to
>    deal better with overlong messages.
>    (merge 545dc345eb sg/overlong-progress-fix later to maint).
>
>  * "git blame -- path" in a non-bare repository starts blaming from
>    the working tree, and the same command in a bare repository errors
>    out because there is no working tree by definition.  The command
>    has been taught to instead start blaming from the commit at HEAD,
>    which is more useful.
>    (merge a544fb08f8 sg/blame-in-bare-start-at-head later to maint).
>
>  * An underallocation in the code to read the untracked cache
>    extension has been corrected.
>    (merge 3a7b45a623 js/untracked-cache-allocfix later to maint).
>
>  * The code is updated to check the result of memory allocation before
>    it is used in more places, by using xmalloc and/or xcalloc calls.
>    (merge 999b951b28 jk/xmalloc later to maint).
>
>  * The GETTEXT_POISON test option has been quite broken ever since it
>    was made runtime-tunable, which has been fixed.
>    (merge f88b9cb603 jc/gettext-test-fix later to maint).
>
>  * Test fix on APFS that is incapable of store paths in Latin-1.
>    (merge 3889149619 js/iso8895-test-on-apfs later to maint).
>
>  * "git submodule foreach <command> --quiet" did not pass the option
>    down correctly, which has been corrected.
>    (merge a282f5a906 nd/submodule-foreach-quiet later to maint).
>
>  * "git send-email" has been taught to use quoted-printable when the
>    payload contains carriage-return.  The use of the mechanism is in
>    line with the design originally added the codepath that chooses QP
>    when the payload has overly long lines.
>    (merge 74d76a1701 bc/send-email-qp-cr later to maint).
>
>  * The recently added feature to add addresses that are on
>    anything-by: trailers in 'git send-email' was found to be way too
>    eager and considered nonsense strings as if they can be legitimate
>    beginning of *-by: trailer.  This has been tightened.
>
>  * Builds with gettext broke on recent macOS w/ Homebrew, which
>    seems to have stopped including from /usr/local/include; this
>    has been corrected.
>    (merge 92a1377a2a js/macos-gettext-build later to maint).
>
>  * Running "git add" on a repository created inside the current
>    repository is an explicit indication that the user wants to add it
>    as a submodule, but when the HEAD of the inner repository is on an
>    unborn branch, it cannot be added as a submodule.  Worse, the files
>    in its working tree can be added as if they are a part of the outer
>    repository, which is not what the user wants.  These problems are
>    being addressed.
>    (merge f937bc2f86 km/empty-repo-is-still-a-repo later to maint).
>
>  * "git cherry-pick" run with the "-x" or the "--signoff" option used
>    to (and more importantly, ought to) clean up the commit log message
>    with the --cleanup=space option by default, but this has been
>    broken since late 2017.  This has been fixed.
>
>  * When given a tag that points at a commit-ish, "git replace --graft"
>    failed to peel the tag before writing a replace ref, which did not
>    make sense because the old graft mechanism the feature wants to
>    mimic only allowed to replace one commit object with another.
>    This has been fixed.
>    (merge ee521ec4cb cc/replace-graft-peel-tags later to maint).
>
>  * Code tightening against a "wrong" object appearing where an object
>    of a different type is expected, instead of blindly assuming that
>    the connection between objects are correctly made.
>    (merge 97dd512af7 tb/unexpected later to maint).
>
>  * An earlier update for MinGW and Cygwin accidentally broke MSVC build,
>    which has been fixed.
>    (merge 22c3634c0f ss/msvc-path-utils-fix later to maint).
>
>  * %(push:track) token used in the --format option to "git
>    for-each-ref" and friends was not showing the right branch, which
>    has been fixed.
>    (merge c646d0934e dr/ref-filter-push-track-fix later to maint).
>
>  * "make check-docs", "git help -a", etc. did not account for cases
>    where a particular build may deliberately omit some subcommands,
>    which has been corrected.
>
>  * The logic to tell if a Git repository has a working tree protects
>    "git branch -D" from removing the branch that is currently checked
>    out by mistake.  The implementation of this logic was broken for
>    repositories with unusual name, which unfortunately is the norm for
>    submodules these days.  This has been fixed.
>    (merge f3534c98e4 jt/submodule-repo-is-with-worktree later to maint).
>
>  * AIX shared the same build issues with other BSDs around fileno(fp),
>    which has been corrected.
>    (merge ee662bf5c6 cc/aix-has-fileno-as-a-macro later to maint).
>
>  * The autoconf generated configure script failed to use the right
>    gettext() implementations from -libintl by ignoring useless stub
>    implementations shipped in some C library, which has been
>    corrected.
>    (merge b71e56a683 vk/autoconf-gettext later to maint).
>
>  * Fix index-pack perf test so that the repeated invocations always
>    run in an empty repository, which emulates the initial clone
>    situation better.
>    (merge 775c71e16d jk/p5302-avoid-collision-check-cost later to maint).
>
>  * A "ls-files" that emulates "find" to enumerate files in the working
>    tree resulted in duplicated Makefile rules that caused the build to
>    issue an unnecessary warning during a trial build after merge
>    conflicts are resolved in working tree *.h files but before the
>    resolved results are added to the index.  This has been corrected.
>
>  * "git cherry-pick" (and "revert" that shares the same runtime engine)
>    that deals with multiple commits got confused when the final step
>    gets stopped with a conflict and the user concluded the sequence
>    with "git commit".  Attempt to fix it by cleaning up the state
>    files used by these commands in such a situation.
>    (merge 4a72486de9 pw/clean-sequencer-state-upon-final-commit later to maint).
>
>  * On a filesystem like HFS+, the names of the refs stored as filesystem
>    entities may become different from what the end-user expects, just
>    like files in the working tree get "renamed".  Work around the
>    mismatch by paying attention to the core.precomposeUnicode
>    configuration.
>    (merge 8e712ef6fc en/unicode-in-refnames later to maint).
>
>  * The code to generate the multi-pack idx file was not prepared to
>    see too many packfiles and ran out of open file descriptor, which
>    has been corrected.
>
>  * To run tests for Git SVN, our scripts for CI used to install the
>    git-svn package (in the hope that it would bring in the right
>    dependencies).  This has been updated to install the more direct
>    dependency, namely, libsvn-perl.
>    (merge db864306cf sg/ci-libsvn-perl later to maint).
>
>  * "git cvsexportcommit" running on msys did not expect cvsnt showed
>    "cvs status" output with CRLF line endings.
>
>  * The fsmonitor interface got out of sync after the in-core index
>    file gets discarded, which has been corrected.
>    (merge 398a3b0899 js/fsmonitor-refresh-after-discarding-index later to maint).
>
>  * "git status" did not know that the "label" instruction in the
>    todo-list "rebase -i -r" uses should not be shown as a hex object
>    name.
>
>  * A prerequisite check in the test suite to see if a working jgit is
>    available was made more robust.
>    (merge abd0f28983 tz/test-lib-check-working-jgit later to maint).
>
>  * The codepath to parse :<path> that obtains the object name for an
>    indexed object has been made more robust.
>
>  * Code cleanup, docfix, build fix, etc.
>    (merge 11f470aee7 jc/test-yes-doc later to maint).
>    (merge 90503a240b js/doc-symref-in-proto-v1 later to maint).
>    (merge 5c326d1252 jk/unused-params later to maint).
>    (merge 68cabbfda3 dl/doc-submodule-wo-subcommand later to maint).
>    (merge 9903623761 ab/receive-pack-use-after-free-fix later to maint).
>    (merge 1ede45e44b en/merge-options-doc later to maint).
>    (merge 3e14dd2c8e rd/doc-hook-used-in-sample later to maint).
>    (merge c271dc28fd nd/no-more-check-racy later to maint).
>    (merge e6e15194a8 yb/utf-16le-bom-spellfix later to maint).
>    (merge bb101aaf0c rd/attr.c-comment-typofix later to maint).
>    (merge 716a5af812 rd/gc-prune-doc-fix later to maint).
>    (merge 50b206371d js/untravis-windows later to maint).
>    (merge dbf47215e3 js/rebase-recreate-merge later to maint).
>    (merge 56cb2d30f8 dl/reset-doc-no-wrt-abbrev later to maint).
>    (merge 64eca306a2 ja/dir-rename-doc-markup-fix later to maint).
>    (merge af91b0230c dl/ignore-docs later to maint).
>    (merge 59a06e947b ra/t3600-test-path-funcs later to maint).
>    (merge e041d0781b ar/t4150-remove-cruft later to maint).
>    (merge 8d75a1d183 ma/asciidoctor-fixes-more later to maint).
>    (merge 74cc547b0f mh/pack-protocol-doc-fix later to maint).
>    (merge ed31851fa6 ab/doc-misc-typofixes later to maint).
>    (merge a7256debd4 nd/checkout-m-doc-update later to maint).
>    (merge 3a9e1ad78d jt/t5551-protocol-v2-does-not-have-half-auth later to maint).
>    (merge 0b918b75af sg/t5318-cleanup later to maint).
>    (merge 68ed71b53c cb/doco-mono later to maint).
>    (merge a34dca2451 nd/interpret-trailers-docfix later to maint).
>    (merge cf7b857a77 en/fast-import-parsing-fix later to maint).
>    (merge fe61ccbc35 po/rerere-doc-fmt later to maint).
>    (merge ffea0248bf po/describe-not-necessarily-7 later to maint).
>    (merge 7cb7283adb tg/ls-files-debug-format-fix later to maint).
>    (merge f64a21bd82 tz/doc-apostrophe-no-longer-needed later to maint).
>    (merge dbe7b41019 js/t3301-unbreak-notes-test later to maint).
>    (merge d8083e4180 km/t3000-retitle later to maint).
>    (merge 9e4cbccbd7 tz/git-svn-doc-markup-fix later to maint).
>    (merge da9ca955a7 jk/ls-files-doc-markup-fix later to maint).
>    (merge 6804ba3a58 cw/diff-highlight later to maint).
>    (merge 1a8787144d nd/submodule-helper-incomplete-line-fix later to maint).
>    (merge d9ef573837 jk/apache-lsan later to maint).
>    (merge c871fbee2b js/t6500-use-windows-pid-on-mingw later to maint).
>    (merge ce4c7bfc90 bl/t4253-exit-code-from-format-patch later to maint).
>    (merge 397a46db78 js/t5580-unc-alternate-test later to maint).
>    (merge d4907720a2 cm/notes-comment-fix later to maint).
>    (merge 9dde06de13 cb/http-push-null-in-message-fix later to maint).
>    (merge 4c785c0edc js/rebase-config-bitfix later to maint).
>    (merge 8e9fe16c87 es/doc-gitsubmodules-markup later to maint).
>
> ----------------------------------------------------------------
>
> Changes since v2.21.0 are as follows:
>
> Alban Gruin (18):
>       sequencer: changes in parse_insn_buffer()
>       sequencer: make the todo_list structure public
>       sequencer: remove the 'arg' field from todo_item
>       sequencer: refactor transform_todos() to work on a todo_list
>       sequencer: introduce todo_list_write_to_file()
>       sequencer: refactor check_todo_list() to work on a todo_list
>       sequencer: refactor sequencer_add_exec_commands() to work on a todo_list
>       sequencer: refactor rearrange_squash() to work on a todo_list
>       sequencer: make sequencer_make_script() write its script to a strbuf
>       sequencer: change complete_action() to use the refactored functions
>       rebase--interactive: move sequencer_add_exec_commands()
>       rebase--interactive: move rearrange_squash_in_todo_file()
>       sequencer: refactor skip_unnecessary_picks() to work on a todo_list
>       rebase-interactive: use todo_list_write_to_file() in edit_todo_list()
>       rebase-interactive: append_todo_help() changes
>       rebase-interactive: rewrite edit_todo_list() to handle the initial edit
>       sequencer: use edit_todo_list() in complete_action()
>       rebase--interactive: move transform_todo_file()
>
> Alexander Blesius (1):
>       doc: fix typos in man pages
>
> Alexander Shopov (1):
>       gitk: Update Bulgarian translation (317t)
>
> Anders Waldenborg (7):
>       doc: group pretty-format.txt placeholders descriptions
>       pretty: allow %(trailers) options with explicit value
>       pretty: single return path in %(trailers) handling
>       pretty: allow showing specific trailers
>       pretty: add support for "valueonly" option in %(trailers)
>       strbuf: separate callback for strbuf_expand:ing literals
>       pretty: add support for separator option in %(trailers)
>
> Andreas Heiduk (1):
>       revisions.txt: remove ambibuity between <rev>:<path> and :<path>
>
> Andrei Rybak (1):
>       t4150: remove unused variable
>
> Baruch Siach (1):
>       send-email: don't cc *-by lines with '-' prefix
>
> Beat Bolli (1):
>       unicode: update the width tables to Unicode 12
>
> Ben Peart (1):
>       read-cache: add post-index-change hook
>
> Boxuan Li (1):
>       t4253-am-keep-cr-dos: avoid using pipes
>
> Brandon Richardson (1):
>       commit-tree: utilize parse-options api
>
> Carlo Marcelo Arenas Belón (1):
>       http-push: prevent format overflow warning with gcc >= 9
>
> Chris Mayo (1):
>       notes: correct documentation of format_display_notes()
>
> Chris. Webster (1):
>       diff-highlight: use correct /dev/null for UNIX and Windows
>
> Christian Couder (5):
>       t6050: use test_line_count instead of wc -l
>       t6050: redirect expected error output to a file
>       replace: peel tag when passing a tag as parent to --graft
>       replace: peel tag when passing a tag first to --graft
>       list-objects-filter: disable 'sparse:path' filters
>
> Clément Chigot (2):
>       Makefile: use fileno macro work around on AIX
>       git-compat-util: work around for access(X_OK) under root
>
> Corentin BOMPARD (2):
>       doc/CodingGuidelines: URLs and paths as monospace
>       doc: format pathnames and URLs as monospace.
>
> Damien Robert (1):
>       ref-filter: use correct branch for %(push:track)
>
> Daniels Umanovskis (1):
>       branch: introduce --show-current display option
>
> David Aguilar (2):
>       mergetools: add support for smerge (Sublime Merge)
>       contrib/completion: add smerge to the mergetool completion candidates
>
> David Kastrup (1):
>       blame.c: don't drop origin blobs as eagerly
>
> Denton Liu (38):
>       completion: complete git submodule absorbgitdirs
>       git-submodule.txt: "--branch <branch>" option defaults to 'master'
>       submodule--helper: teach config subcommand --unset
>       submodule: document default behavior
>       git-reset.txt: clarify documentation
>       git-clean.txt: clarify ignore pattern files
>       docs: move core.excludesFile from git-add to gitignore
>       contrib/subtree: ensure only one rev is provided
>       midx.c: convert FLEX_ALLOC_MEM to FLEX_ALLOC_STR
>       cocci: FLEX_ALLOC_MEM to FLEX_ALLOC_STR
>       tag: fix formatting
>       submodule: teach set-branch subcommand
>       tag: advise on nested tags
>       t7600: clean up style
>       t3507: clean up style
>       t7604: clean up style
>       t7502: clean up style
>       commit: extract cleanup_mode functions to sequencer
>       parse-options.h: extract common --cleanup option
>       merge: cleanup messages like commit
>       merge: add scissors line on merge conflict
>       cherry-pick/revert: add scissors line on merge conflict
>       t7610: unsuppress output
>       t7610: add mergetool --gui tests
>       *.[ch]: remove extern from function declarations using spatch
>       *.[ch]: remove extern from function declarations using sed
>       *.[ch]: manually align parameter lists
>       t2018: cleanup in current test
>       branch: make create_branch accept a merge base rev
>       revisions.txt: change "rev" to "<rev>"
>       revisions.txt: mark optional rev arguments with []
>       revisions.txt: mention <rev>~ form
>       tag: fix typo in nested tagging hint
>       mergetool: use get_merge_tool function
>       mergetool--lib: create gui_mode function
>       mergetool: fallback to tool when guitool unavailable
>       difftool: make --gui, --tool and --extcmd mutually exclusive
>       difftool: fallback on merge.guitool
>
> Derrick Stolee (4):
>       trace2:data: pack-objects: add trace2 regions
>       midx: pass a repository pointer
>       midx: add packs to packed_git linked list
>       trace2: add variable description to git.txt
>
> Dustin Spicuzza (1):
>       cvsexportcommit: force crlf translation
>
> Elijah Newren (23):
>       log,diff-tree: add --combined-all-paths option
>       merge-options.txt: correct wording of --no-commit option
>       t9300: demonstrate bug with get-mark and empty orphan commits
>       git-fast-import.txt: fix wording about where ls command can appear
>       fast-import: check most prominent commands first
>       fast-import: only allow cat-blob requests where it makes sense
>       fast-import: fix erroneous handling of get-mark with empty orphan commits
>       Use 'unsigned short' for mode, like diff_filespec does
>       merge-recursive: rename merge_options argument from 'o' to 'opt'
>       merge-recursive: rename diff_filespec 'one' to 'o'
>       merge-recursive: rename locals 'o' and 'a' to 'obuf' and 'abuf'
>       merge-recursive: use 'ci' for rename_conflict_info variable name
>       merge-recursive: move some struct declarations together
>       merge-recursive: shrink rename_conflict_info
>       merge-recursive: remove ren[12]_other fields from rename_conflict_info
>       merge-recursive: track branch where rename occurred in rename struct
>       merge-recursive: cleanup handle_rename_* function signatures
>       merge-recursive: switch from (oid,mode) pairs to a diff_filespec
>       t6043: fix copied test description to match its purpose
>       merge-recursive: track information associated with directory renames
>       merge-recursive: give callers of handle_content_merge() access to contents
>       merge-recursive: switch directory rename detection default
>       Honor core.precomposeUnicode in more places
>
> Emily Shaffer (1):
>       gitsubmodules: align html and nroff lists
>
> Eric Sunshine (1):
>       check-non-portable-shell: support Perl versions older than 5.10
>
> Eric Wong (1):
>       repack: enable bitmaps by default on bare repos
>
> Jean-Noël Avila (3):
>       l10n: fr.po remove obsolete entries
>       Doc: fix misleading asciidoc formating
>       diff: fix mistake in translatable strings
>
> Jeff Hostetler (30):
>       trace2: Documentation/technical/api-trace2.txt
>       trace2: create new combined trace facility
>       trace2: collect Windows-specific process information
>       trace2:data: add trace2 regions to wt-status
>       trace2:data: add editor/pager child classification
>       trace2:data: add trace2 sub-process classification
>       trace2:data: add trace2 transport child classification
>       trace2:data: add subverb to checkout command
>       trace2:data: add subverb to reset command
>       trace2:data: add trace2 hook classification
>       trace2:data: add subverb for rebase
>       trace2:data: add trace2 instrumentation to index read/write
>       trace2: t/helper/test-trace2, t0210.sh, t0211.sh, t0212.sh
>       trace2: add for_each macros to clang-format
>       progress: add sparse mode to force 100% complete message
>       trace2:data: add trace2 data to midx
>       midx: add progress indicators in multi-pack-index verify
>       midx: during verify group objects by packfile to speed verification
>       config: initialize opts structure in repo_read_config()
>       trace2: refactor setting process starting time
>       trace2: add absolute elapsed time to start event
>       trace2: find exec-dir before trace2 initialization
>       config: add read_very_early_config()
>       trace2: use system/global config for default trace2 settings
>       trace2: report peak memory usage of the process
>       trace2: clarify UTC datetime formatting
>       trace2: make SIDs more unique
>       trace2: update docs to describe system/global config settings
>       trace2: fixup access problem on /etc/gitconfig in read_very_early_config
>       trace2: fix tracing when NO_PTHREADS is defined
>
> Jeff King (92):
>       prune: lazily perform reachability traversal
>       prune: use bitmaps for reachability traversal
>       prune: check SEEN flag for reachability
>       t5304: rename "sha1" variables to "oid"
>       diff: drop options parameter from diffcore_fix_diff_index()
>       diff: drop unused color reset parameters
>       diff: drop unused emit data parameter from sane_truncate_line()
>       diff: drop complete_rewrite parameter from run_external_diff()
>       merge-recursive: drop several unused parameters
>       pack-objects: drop unused parameter from oe_map_new_pack()
>       files-backend: drop refs parameter from split_symref_update()
>       ref-filter: drop unused buf/sz pairs
>       ref-filter: drop unused "obj" parameters
>       ref-filter: drop unused "sz" parameters
>       diff: reuse diff setup for --no-index case
>       bisect: use string arguments to feed internal diff-tree
>       bisect: fix internal diff-tree config loading
>       bisect: make diff-tree output prettier
>       fetch: avoid calling write_or_die()
>       fetch: ignore SIGPIPE during network operation
>       rev-list: allow cached objects in existence check
>       doc/fsck: clarify --connectivity-only behavior
>       fsck: always compute USED flags for unreachable objects
>       compat/bswap: add include header guards
>       config: document --type=color output is a complete line
>       line-log: suppress diff output with "-s"
>       line-log: detect unsupported formats
>       point pull requesters to GitGitGadget
>       Makefile: fix unaligned loads in sha1dc with UBSan
>       t5310: correctly remove bitmaps for jgit test
>       pack-objects: default to writing bitmap hash-cache
>       perf-lib.sh: rely on test-lib.sh for --tee handling
>       revision: drop some unused "revs" parameters
>       log: drop unused rev_info from early output
>       log: drop unused "len" from show_tagger()
>       update-index: drop unused prefix_length parameter from do_reupdate()
>       test-date: drop unused "now" parameter from parse_dates()
>       unpack-trees: drop name_entry from traverse_by_cache_tree()
>       unpack-trees: drop unused error_type parameters
>       report_path_error(): drop unused prefix parameter
>       fetch_pack(): drop unused parameters
>       parse-options: drop unused ctx parameter from show_gitcomp()
>       pretty: drop unused "type" parameter in needs_rfc2047_encoding()
>       pretty: drop unused strbuf from parse_padding_placeholder()
>       git: read local config in --list-cmds
>       completion: fix multiple command removals
>       parse_opt_ref_sorting: always use with NONEG flag
>       refs/files-backend: handle packed transaction prepare failure
>       refs/files-backend: don't look at an aborted transaction
>       http: factor out curl result code normalization
>       http: normalize curl results for dumb loose and alternates fetches
>       http: use normalize_curl_result() instead of manual conversion
>       revision: use a prio_queue to hold rewritten parents
>       get_commit_tree(): return NULL for broken tree
>       rev-list: let traversal die when --missing is not in use
>       rev-list: detect broken root trees
>       test-prio-queue: use xmalloc
>       xdiff: use git-compat-util
>       xdiff: use xmalloc/xrealloc
>       progress: use xmalloc/xcalloc
>       t5516: drop ok=sigpipe from unreachable-want tests
>       t5530: check protocol response for "not our ref"
>       upload-pack: send ERR packet for non-tip objects
>       pkt-line: prepare buffer before handling ERR packets
>       fetch: use free_refs()
>       remote.c: make singular free_ref() public
>       fetch: do not consider peeled tags as advertised tips
>       packfile.h: drop extern from function declarations
>       pack-revindex: open index if necessary
>       t5319: fix bogus cat-file argument
>       t5319: drop useless --buffer from cat-file
>       midx: check both pack and index names for containment
>       packfile: fix pack basename computation
>       http: simplify parsing of remote objects/info/packs
>       server-info: fix blind pointer arithmetic
>       server-info: simplify cleanup in parse_pack_def()
>       server-info: use strbuf to read old info/packs file
>       server-info: drop nr_alloc struct member
>       server-info: drop objdirlen pointer arithmetic
>       update_info_refs(): drop unused force parameter
>       t5304: add a test for pruning with bitmaps
>       untracked-cache: be defensive about missing NULs in index
>       untracked-cache: simplify parsing by dropping "next"
>       untracked-cache: simplify parsing by dropping "len"
>       p5302: create the repo in each index-pack test
>       doc/ls-files: put nested list for "-t" option into block
>       t/perf: depend on perl JSON only when using --codespeed
>       t/perf: add perf script for partial clones
>       coccicheck: optionally batch spatch invocations
>       t/lib-httpd: pass LSAN_OPTIONS through apache
>       coccicheck: make batch size of 0 mean "unlimited"
>       get_oid: handle NULL repo->index
>
> Jiang Xin (5):
>       t5323: test cases for git-pack-redundant
>       pack-redundant: delay creation of unique_objects
>       pack-redundant: rename pack_list.all_objects
>       pack-redundant: consistent sort method
>       i18n: fix typos found during l10n for git 2.22.0
>
> Joel Teichroeb (5):
>       stash: improve option parsing test coverage
>       stash: convert apply to builtin
>       stash: convert drop and clear to builtin
>       stash: convert branch to builtin
>       stash: convert pop to builtin
>
> Joey Hess (1):
>       convert: avoid malloc of original file size
>
> Johannes Schindelin (67):
>       ident: add the ability to provide a "fallback identity"
>       travis: remove the hack to build the Windows job on Azure Pipelines
>       tests: let --stress-limit=<N> imply --stress
>       tests: introduce --stress-jobs=<N>
>       built-in rebase: no need to check out `onto` twice
>       built-in rebase: use the correct reflog when switching branches
>       built-in rebase: demonstrate that ORIG_HEAD is not set correctly
>       built-in rebase: set ORIG_HEAD just once, before the rebase
>       Makefile: use `git ls-files` to list header files, if possible
>       curl: anonymize URLs in error messages and warnings
>       remote-curl: mark all error messages for translation
>       stash: add back the original, scripted `git stash`
>       stash: optionally use the scripted version again
>       tests: add a special setup where stash.useBuiltin is off
>       legacy stash: fix "rudimentary backport of -q"
>       built-in stash: handle :(glob) pathspecs again
>       mingw: drop MakeMaker reference
>       mingw: allow building with an MSYS2 runtime v3.x
>       rebase: deprecate --preserve-merges
>       mingw: respect core.hidedotfiles = false in git-init again
>       test-lib: introduce 'test_atexit'
>       git-daemon: use 'test_atexit` to stop 'git-daemon'
>       git p4 test: use 'test_atexit' to kill p4d and the watchdog process
>       rebase -i: demonstrate obscure loose object cache bug
>       sequencer: improve error message when an OID could not be parsed
>       sequencer: move stale comment into correct location
>       get_oid(): when an object was not found, try harder
>       difftool: remove obsolete (and misleading) comment
>       parse-options: make OPT_ARGUMENT() more useful
>       difftool: allow running outside Git worktrees with --no-index
>       docs: move gitremote-helpers into section 7
>       docs: do not document the `git remote-testgit` command
>       check-docs: really look at the documented commands again
>       check-docs: do not expect guide pages to correspond to commands
>       check-docs: fix for setups where executables have an extension
>       tests (rebase): spell out the `--keep-empty` option
>       tests (rebase): spell out the `--force-rebase` option
>       t7810: do not abbreviate `--no-exclude-standard` nor `--invert-match`
>       t5531: avoid using an abbreviated option
>       tests (push): do not abbreviate the `--follow-tags` option
>       tests (status): spell out the `--find-renames` option in full
>       tests (pack-objects): use the full, unabbreviated `--revs` option
>       t3301: fix false negative
>       untracked cache: fix off-by-one
>       tests: disallow the use of abbreviated options (by default)
>       t9822: skip tests if file names cannot be ISO-8859-1 encoded
>       macOS: make sure that gettext is found
>       remote-testgit: move it into the support directory for t5801
>       Makefile: drop the NO_INSTALL variable
>       help -a: do not list commands that are excluded from the build
>       check-docs: allow command-list.txt to contain excluded commands
>       docs: exclude documentation for commands that have been excluded
>       check-docs: do not bother checking for legacy scripts' documentation
>       test-tool: handle the `-C <directory>` option just like `git`
>       Turn `git serve` into a test helper
>       t5580: verify that alternates can be UNC paths
>       fsmonitor: demonstrate that it is not refreshed after discard_index()
>       fsmonitor: force a refresh after the index was discarded
>       t6500(mingw): use the Windows PID of the shell
>       difftool --no-index: error out on --dir-diff (and don't crash)
>       status: fix display of rebase -ir's `label` command
>       parse-options: adjust `parse_opt_unknown_cb()`s declared return type
>       stash: document stash.useBuiltin
>       rebase: replace incorrect logical negation by correct bitwise one
>       tests: mark a couple more test cases as requiring `rebase -p`
>       docs: say that `--rebase=preserve` is deprecated
>       rebase docs: recommend `-r` over `-p`
>
> Jonathan Tan (25):
>       remote-curl: reduce scope of rpc_state.argv
>       remote-curl: reduce scope of rpc_state.stdin_preamble
>       remote-curl: reduce scope of rpc_state.result
>       remote-curl: refactor reading into rpc_state's buf
>       remote-curl: use post_rpc() for protocol v2 also
>       tests: define GIT_TEST_PROTOCOL_VERSION
>       t5601: check ssh command only with protocol v0
>       tests: always test fetch of unreachable with v0
>       t5503: fix overspecification of trace expectation
>       t5512: compensate for v0 only sending HEAD symrefs
>       t5700: only run with protocol version 1
>       tests: fix protocol version for overspecifications
>       t5552: compensate for v2 filtering ref adv.
>       submodule: explain first attempt failure clearly
>       t5551: mark half-auth no-op fetch test as v0-only
>       fetch-pack: call prepare_shallow_info only if v0
>       fetch-pack: respect --no-update-shallow in v2
>       sha1-file: support OBJECT_INFO_FOR_PREFETCH
>       fetch-pack: binary search when storing wanted-refs
>       diff: batch fetching of missing blobs
>       pack-objects: write objects packed to trace2
>       transport: die if server options are unsupported
>       clone: send server options when using protocol v2
>       worktree: update is_bare heuristics
>       fetch-pack: send server options after command
>
> Jordi Mas (1):
>       l10n: Fixes to Catalan translation
>
> Josh Steadmon (5):
>       protocol-capabilities.txt: document symref
>       trace2: write to directory targets
>       clone: do faster object check for partial clones
>       trace2: fix incorrect function pointer check
>       commit-graph: fix memory leak
>
> Junio C Hamano (18):
>       test: caution on our version of 'yes'
>       builtin/log: downcase the beginning of error messages
>       format-patch: notice failure to open cover letter for writing
>       Start 2.22 cycle
>       The second batch
>       The third batch
>       The fourth batch
>       gettext tests: export the restored GIT_TEST_GETTEXT_POISON
>       The fifth batch
>       The sixth batch
>       Makefile: dedup list of files obtained from ls-files
>       The seventh batch
>       The eighth batch
>       Git 2.22-rc0
>       pkt-line: drop 'const'-ness of a param to set_packet_header()
>       Git 2.22-rc1
>       Git 2.22-rc2
>       Git 2.22-rc3
>
> Kyle Meyer (5):
>       rebase docs: fix "gitlink" typo
>       submodule: refuse to add repository with no commits
>       dir: do not traverse repositories with no commits
>       add: error appropriately on repository with no commits
>       t3000 (ls-files -o): widen description to reflect current tests
>
> Martin Ågren (14):
>       setup: free old value before setting `work_tree`
>       setup: fix memory leaks with `struct repository_format`
>       config/diff.txt: drop spurious backtick
>       config/fsck.txt: avoid starting line with dash
>       git.txt: remove empty line before list continuation
>       git-svn.txt: drop escaping '\' that ends up being rendered
>       Documentation: turn middle-of-line tabs into spaces
>       Documentation/Makefile: add missing xsl dependencies for manpages
>       Documentation/Makefile: add missing dependency on asciidoctor-extensions
>       asciidoctor-extensions: fix spurious space after linkgit
>       Doc: auto-detect changed build flags
>       doc-diff: let `render_tree()` take an explicit directory name
>       doc-diff: support diffing from/to AsciiDoc(tor)
>       doc-diff: add `--cut-header-footer`
>
> Matthew Kraai (1):
>       t3903: add test for --intent-to-add file
>
> Michal Suchanek (1):
>       worktree: fix worktree add race
>
> Mike Hommey (2):
>       fix pack protocol example client/server communication
>       Make fread/fwrite-like functions in http.c more like fread/fwrite.
>
> Nguyễn Thái Ngọc Duy (129):
>       parse-options.h: remove extern on function prototypes
>       parse-options: add one-shot mode
>       parse-options: disable option abbreviation with PARSE_OPT_KEEP_UNKNOWN
>       parse-options: add OPT_BITOP()
>       parse-options: stop abusing 'callback' for lowlevel callbacks
>       parse-options: avoid magic return codes
>       parse-options: allow ll_callback with OPTION_CALLBACK
>       diff.h: keep forward struct declarations sorted
>       diff.h: avoid bit fields in struct diff_flags
>       diff.c: prepare to use parse_options() for parsing
>       diff.c: convert -u|-p|--patch
>       diff.c: convert -U|--unified
>       diff.c: convert -W|--[no-]function-context
>       diff.c: convert --raw
>       read-cache.c: fix writing "link" index ext with null base oid
>       completion: add more parameter value completion
>       diff-parseopt: convert --patch-with-raw
>       diff-parseopt: convert --numstat and --shortstat
>       diff-parseopt: convert --dirstat and friends
>       diff-parseopt: convert --check
>       diff-parseopt: convert --summary
>       diff-parseopt: convert --patch-with-stat
>       diff-parseopt: convert --name-only
>       diff-parseopt: convert --name-status
>       diff-parseopt: convert -s|--no-patch
>       diff-parseopt: convert --stat*
>       diff-parseopt: convert --[no-]compact-summary
>       diff-parseopt: convert --output-*
>       diff-parseopt: convert -B|--break-rewrites
>       diff-parseopt: convert -M|--find-renames
>       diff-parseopt: convert -D|--irreversible-delete
>       diff-parseopt: convert -C|--find-copies
>       diff-parseopt: convert --find-copies-harder
>       diff-parseopt: convert --no-renames|--[no--rename-empty
>       diff-parseopt: convert --relative
>       diff-parseopt: convert --[no-]minimal
>       diff-parseopt: convert --ignore-some-changes
>       Delete check-racy.c
>       diff-parseopt: convert --[no-]indent-heuristic
>       diff-parseopt: convert --patience
>       diff-parseopt: convert --histogram
>       diff-parseopt: convert --diff-algorithm
>       diff-parseopt: convert --anchored
>       diff-parseopt: convert --binary
>       diff-parseopt: convert --full-index
>       diff-parseopt: convert -a|--text
>       diff-parseopt: convert -R
>       diff-parseopt: convert --[no-]follow
>       diff-parseopt: convert --[no-]color
>       diff-parseopt: convert --word-diff
>       diff-parseopt: convert --word-diff-regex
>       diff-parseopt: convert --color-words
>       diff-parseopt: convert --exit-code
>       diff-parseopt: convert --quiet
>       diff-parseopt: convert --ext-diff
>       diff-parseopt: convert --textconv
>       diff-parseopt: convert --ignore-submodules
>       diff-parseopt: convert --submodule
>       files-backend.c: factor out per-worktree code in loose_fill_ref_dir()
>       files-backend.c: reduce duplication in add_per_worktree_entries_to_dir()
>       Make sure refs/rewritten/ is per-worktree
>       unpack-trees: fix oneway_merge accidentally carry over stage index
>       checkout.txt: note about losing staged changes with --merge
>       commit: improve error message in "-a <paths>" case
>       unpack-trees: keep gently check inside add_rejected_path
>       unpack-trees: rename "gently" flag to "quiet"
>       read-tree: add --quiet
>       checkout: prevent losing staged changes with --merge
>       diff-parseopt: convert --ws-error-highlight
>       diff-parseopt: convert --ita-[in]visible-in-index
>       diff-parseopt: convert -z
>       diff-parseopt: convert -l
>       diff-parseopt: convert -S|-G
>       diff-parseopt: convert --pickaxe-all|--pickaxe-regex
>       diff-parseopt: convert -O
>       diff-parseopt: convert --find-object
>       diff-parseopt: convert --diff-filter
>       diff-parseopt: convert --[no-]abbrev
>       diff-parseopt: convert --[src|dst]-prefix
>       diff-parseopt: convert --line-prefix
>       diff-parseopt: convert --no-prefix
>       diff-parseopt: convert --inter-hunk-context
>       diff-parseopt: convert --[no-]color-moved
>       diff-parseopt: convert --color-moved-ws
>       diff.c: allow --no-color-moved-ws
>       range-diff: use parse_options() instead of diff_opt_parse()
>       diff --no-index: use parse_options() instead of diff_opt_parse()
>       am: avoid diff_opt_parse()
>       config: correct '**' matching in includeIf patterns
>       interpret-trailers.txt: start the desc line with a capital letter
>       read-tree.txt: clarify --reset and worktree changes
>       packfile.c: add repo_approximate_object_count()
>       refs.c: add refs_ref_exists()
>       refs.c: add refs_shorten_unambiguous_ref()
>       refs.c: remove the_repo from substitute_branch_name()
>       refs.c: remove the_repo from expand_ref()
>       refs.c: add repo_dwim_ref()
>       refs.c: add repo_dwim_log()
>       refs.c: remove the_repo from read_ref_at()
>       submodule foreach: fix "<command> --quiet" not being respected
>       commit.cocci: refactor code, avoid double rewrite
>       commit.c: add repo_get_commit_tree()
>       sha1-name.c: remove the_repo from sort_ambiguous()
>       sha1-name.c: remove the_repo from find_abbrev_len_packed()
>       sha1-name.c: add repo_find_unique_abbrev_r()
>       sha1-name.c: store and use repo in struct disambiguate_state
>       sha1-name.c: add repo_for_each_abbrev()
>       sha1-name.c: remove the_repo from get_short_oid()
>       sha1-name.c: remove the_repo from interpret_nth_prior_checkout()
>       sha1-name.c: remove the_repo from interpret_branch_mark()
>       sha1-name.c: add repo_interpret_branch_name()
>       sha1-name.c: remove the_repo from get_oid_oneline()
>       sha1-name.c: remove the_repo from get_describe_name()
>       sha1-name.c: remove the_repo from get_oid_basic()
>       sha1-name.c: remove the_repo from get_oid_1()
>       sha1-name.c: remove the_repo from handle_one_ref()
>       sha1-name.c: remove the_repo from diagnose_invalid_index_path()
>       sha1-name.c: remove the_repo from resolve_relative_path()
>       sha1-name.c: remove the_repo from get_oid_with_context_1()
>       sha1-name.c: add repo_get_oid()
>       submodule-config.c: use repo_get_oid for reading .gitmodules
>       sha1-name.c: remove the_repo from maybe_die_on_misspelt_object_name
>       sha1-name.c: remove the_repo from other get_oid_*
>       sha1-name.c: remove the_repo from get_oid_mb()
>       parse-options: don't emit "ambiguous option" for aliases
>       submodule--helper: add a missing \n
>       diff-parseopt: correct variable types that are used by parseopt
>       diff-parseopt: restore -U (no argument) behavior
>       parse-options: check empty value in OPT_INTEGER and OPT_ABBREV
>
> Paul-Sebastian Ungureanu (17):
>       sha1-name.c: add `get_oidf()` which acts like `get_oid()`
>       strbuf.c: add `strbuf_join_argv()`
>       strbuf.c: add `strbuf_insertf()` and `strbuf_vinsertf()`
>       t3903: modernize style
>       stash: rename test cases to be more descriptive
>       stash: add tests for `git stash show` config
>       stash: mention options in `show` synopsis
>       stash: convert list to builtin
>       stash: convert show to builtin
>       stash: convert store to builtin
>       stash: convert create to builtin
>       stash: convert push to builtin
>       stash: make push -q quiet
>       stash: convert save to builtin
>       stash: optimize `get_untracked_files()` and `check_changes()`
>       stash: replace all `write-tree` child processes with API calls
>       stash: convert `stash--helper.c` into `stash.c`
>
> Philip Oakley (2):
>       rerere doc: quote `rerere.enabled`
>       describe doc: remove '7-char' abbreviation reference
>
> Phillip Wood (21):
>       am/cherry-pick/rebase/revert: document --rerere-autoupdate
>       merge: tweak --rerere-autoupdate documentation
>       sequencer: break some long lines
>       cherry-pick: demonstrate option amnesia
>       cherry-pick --continue: remember options
>       commit/reset: try to clean up sequencer state
>       fix cherry-pick/revert status after commit
>       sequencer: fix cleanup with --signoff and -x
>       sequencer.c: save and restore cleanup mode
>       sequencer: always discard index after checkout
>       rebase: don't translate trace strings
>       rebase: rename write_basic_state()
>       rebase: use OPT_RERERE_AUTOUPDATE()
>       rebase -i: combine rebase--interactive.c with rebase.c
>       rebase -i: remove duplication
>       rebase -i: use struct commit when parsing options
>       rebase -i: use struct object_id for squash_onto
>       rebase -i: use struct rebase_options to parse args
>       rebase -i: use struct rebase_options in do_interactive_rebase()
>       rebase: use a common action enum
>       rebase -i: run without forking rebase--interactive
>
> Ramsay Jones (2):
>       prune-packed: check for too many arguments
>       Makefile: fix 'hdr-check' when GCRYPT not installed
>
> René Scharfe (1):
>       get-tar-commit-id: parse comment record
>
> Robert P. J. Day (3):
>       mention use of "hooks.allownonascii" in "man githooks"
>       docs/git-gc: fix typo "--prune=all" to "--prune=now"
>       attr.c: ".gitattribute" -> ".gitattributes" (comments)
>
> Rohit Ashiwal (3):
>       test functions: add function `test_file_not_empty`
>       t3600: modernize style
>       t3600: use helpers to replace test -d/f/e/s <path>
>
> SZEDER Gábor (27):
>       test-lib: fix interrupt handling with 'dash' and '--verbose-log -x'
>       t/lib-git-daemon: make sure to kill the 'git-daemon' process
>       tests: use 'test_atexit' to stop httpd
>       t0301-credential-cache: use 'test_atexit' to stop the credentials helper
>       git p4 test: clean up the p4d cleanup functions
>       git p4 test: simplify timeout handling
>       git p4 test: disable '-x' tracing in the p4d watchdog loop
>       t9811-git-p4-label-import: fix pipeline negation
>       t5318-commit-graph: remove unused variable
>       Documentation/git-diff-tree.txt: fix formatting
>       Documentation/technical/api-config.txt: fix formatting
>       Documentation/technical/protocol-v2.txt: fix formatting
>       ci: install Asciidoctor in 'ci/install-dependencies.sh'
>       index-pack: show progress while checking objects
>       ci: stick with Asciidoctor v1.5.8 for now
>       ci: fix AsciiDoc/Asciidoctor stderr check in the documentation build job
>       progress: make display_progress() return void
>       progress: assemble percentage and counters in a strbuf before printing
>       blame: default to HEAD in a bare repo when no start commit is given
>       builtin rebase: use FREE_AND_NULL
>       builtin rebase: use oideq()
>       progress: clear previous progress update dynamically
>       progress: break too long progress bar lines
>       ci: install 'libsvn-perl' instead of 'git-svn'
>       trace2: rename environment variables to GIT_TRACE2*
>       trace2: document the supported values of GIT_TRACE2* env variables
>       progress: avoid empty line when breaking the progress line
>
> Sun Chao (2):
>       pack-redundant: delete redundant code
>       pack-redundant: new algorithm to find min packs
>
> Sven Strickroth (1):
>       MSVC: include compat/win32/path-utils.h for MSVC, too, for real_path()
>
> Tanushree Tumane (1):
>       mingw: remove obsolete IPv6-related code
>
> Taylor Blau (4):
>       t: move 'hex2oct' into test-lib-functions.sh
>       t: introduce tests for unexpected object types
>       list-objects.c: handle unexpected non-blob entries
>       list-objects.c: handle unexpected non-tree entries
>
> Thomas Gummerer (15):
>       move worktree tests to t24*
>       entry: factor out unlink_entry function
>       entry: support CE_WT_REMOVE flag in checkout_entry
>       read-cache: add invalidate parameter to remove_marked_cache_entries
>       checkout: clarify comment
>       checkout: factor out mark_cache_entry_for_checkout function
>       checkout: introduce --{,no-}overlay option
>       checkout: introduce checkout.overlayMode config
>       revert "checkout: introduce checkout.overlayMode config"
>       ident: don't require calling prepare_fallback_ident first
>       stash: drop unused parameter
>       stash: pass pathspec as pointer
>       glossary: add definition for overlay
>       stash: setup default diff output format if necessary
>       ls-files: use correct format string
>
> Todd Zullinger (9):
>       t4038-diff-combined: quote paths with whitespace
>       t9902: test multiple removals via completion.commands
>       completion: use __git when calling --list-cmds
>       Documentation/rev-list-options: wrap --date=<format> block with "--"
>       Documentation/git-status: fix titles in porcelain v2 section
>       Documentation/git-svn: improve asciidoctor compatibility
>       Documentation/git-show-branch: avoid literal {apostrophe}
>       test-lib: try harder to ensure a working jgit
>       RelNotes: minor typo fixes in 2.22.0 draft
>
> Torsten Bögershausen (1):
>       trace2: NULL is not allowed for va_list
>
> Trần Ngọc Quân (1):
>       l10n: Updated Vietnamese translation for v2.21 rd2
>
> Vadim Kochan (1):
>       autoconf: #include <libintl.h> when checking for gettext()
>
> William Hubbs (1):
>       config: allow giving separate author and committer idents
>
> Yash Bhatambare (1):
>       gitattributes.txt: fix typo
>
> brian m. carlson (35):
>       t/lib-submodule-update: use appropriate length constant
>       khash: move oid hash table definition
>       pack-bitmap: make bitmap header handling hash agnostic
>       pack-bitmap: convert struct stored_bitmap to object_id
>       pack-bitmap: replace sha1_to_hex
>       pack-bitmap: switch hard-coded constants to the_hash_algo
>       pack-bitmap: switch hash tables to use struct object_id
>       submodule: avoid hard-coded constants
>       notes-merge: switch to use the_hash_algo
>       notes: make hash size independent
>       notes: replace sha1_to_hex
>       object-store: rename and expand packed_git's sha1 member
>       builtin/name-rev: make hash-size independent
>       fast-import: make hash-size independent
>       fast-import: replace sha1_to_hex
>       builtin/am: make hash size independent
>       builtin/pull: make hash-size independent
>       http-push: convert to use the_hash_algo
>       http-backend: allow 64-character hex names
>       http-push: remove remaining uses of sha1_to_hex
>       http-walker: replace sha1_to_hex
>       http: replace hard-coded constant with the_hash_algo
>       http: compute hash of downloaded objects using the_hash_algo
>       http: replace sha1_to_hex
>       remote-curl: make hash size independent
>       hash: add a function to lookup hash algorithm by length
>       builtin/get-tar-commit-id: make hash size independent
>       archive: convert struct archiver_args to object_id
>       refspec: make hash size independent
>       builtin/difftool: use parse_oid_hex
>       dir: make untracked cache extension hash size independent
>       read-cache: read data in a hash-independent way
>       Git.pm: make hash size independent
>       gitweb: make hash size independent
>       send-email: default to quoted-printable when CR is present
>
> Ævar Arnfjörð Bjarmason (44):
>       receive-pack: fix use-after-free bug
>       commit-graph tests: split up corrupt_graph_and_verify()
>       commit-graph tests: test a graph that's too small
>       Makefile: remove an out-of-date comment
>       Makefile: move "strip" assignment down from flags
>       Makefile: add/remove comments at top and tweak whitespace
>       Makefile: Move *_LIBS assignment into its own section
>       Makefile: move the setting of *FLAGS closer to "include"
>       Makefile: allow for combining DEVELOPER=1 and CFLAGS="..."
>       gc: remove redundant check for gc_auto_threshold
>       gc: convert to using the_hash_algo
>       gc: refactor a "call me once" pattern
>       reflog tests: make use of "test_config" idiom
>       reflog tests: test for the "points nowhere" warning
>       rebase: remove the rebase.useBuiltin setting
>       gc docs: modernize the advice for manually running "gc"
>       gc docs: stop noting "repack" flags
>       gc docs: clean grammar for "gc.bigPackThreshold"
>       commit-graph: fix segfault on e.g. "git status"
>       commit-graph: don't early exit(1) on e.g. "git status"
>       commit-graph: don't pass filename to load_commit_graph_one_fd_st()
>       commit-graph verify: detect inability to read the graph
>       commit-graph write: don't die if the existing graph is corrupt
>       commit-graph: improve & i18n error messages
>       reflog tests: assert lack of early exit with expiry="never"
>       gc: handle & check gc.reflogExpire config
>       test-lib: whitelist GIT_TR2_* in the environment
>       gc docs: include the "gc.*" section from "config" in "gc"
>       gc docs: re-flow the "gc.*" section in "config"
>       gc docs: fix formatting for "gc.writeCommitGraph"
>       gc docs: note how --aggressive impacts --window & --depth
>       gc docs: downplay the usefulness of --aggressive
>       gc docs: note "gc --aggressive" in "fast-import"
>       gc docs: clarify that "gc" doesn't throw away referenced objects
>       gc docs: remove incorrect reference to gc.auto=0
>       perf README: correct docs for 3c8f12c96c regression
>       perf aggregate: remove GIT_TEST_INSTALLED from --codespeed
>       perf-lib.sh: make "./run <revisions>" use the correct gits
>       perf-lib.sh: remove GIT_TEST_INSTALLED from perf-lib.sh
>       perf tests: add "bindir" prefix to git tree test results
>       perf-lib.sh: forbid the use of GIT_TEST_INSTALLED
>       trace2: fix up a missing "leave" entry point
>       trace2: fix up a missing "leave" entry point
>       sha1dc: update from upstream
>
> İsmail Dönmez (2):
>       mingw: do not let ld strip relocations
>       mingw: enable DEP and ASLR
>

^ permalink raw reply	[relevance 0%]

* [ANNOUNCE] Git v2.22.0-rc3
@ 2019-06-03 20:23  2% Junio C Hamano
  2019-06-04  1:32  0% ` Ben Humphreys
                   ` (2 more replies)
  0 siblings, 3 replies; 162+ results
From: Junio C Hamano @ 2019-06-03 20:23 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.22.0-rc3 is now available for testing
at the usual places.  It is comprised of 718 non-merge commits
since v2.21.0, contributed by 67 people, 17 of which are new faces.

Hopefully, this will be the last -rc during this cycle.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.22.0-rc3' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.21.0 are as follows.
Welcome to the Git development community!

  Alexander Blesius, Baruch Siach, Boxuan Li, Chris Mayo,
  Chris. Webster, Clément Chigot, Corentin BOMPARD, Damien Robert,
  Dustin Spicuzza, Emily Shaffer, Michal Suchanek, Rohit Ashiwal,
  Sun Chao, Tanushree Tumane, Vadim Kochan, William Hubbs, and
  Yash Bhatambare.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alban Gruin, Alexander Shopov, Anders
  Waldenborg, Andreas Heiduk, Andrei Rybak, Beat Bolli, Ben Peart,
  Brandon Richardson, brian m. carlson, Carlo Marcelo Arenas
  Belón, Christian Couder, Daniels Umanovskis, David Aguilar,
  David Kastrup, Denton Liu, Derrick Stolee, Elijah Newren, Eric
  Sunshine, Eric Wong, İsmail Dönmez, Jean-Noël Avila, Jeff
  Hostetler, Jeff King, Jiang Xin, Joel Teichroeb, Joey Hess,
  Johannes Schindelin, Jonathan Tan, Jordi Mas, Josh Steadmon,
  Junio C Hamano, Kyle Meyer, Martin Ågren, Matthew Kraai, Mike
  Hommey, Nguyễn Thái Ngọc Duy, Paul-Sebastian Ungureanu,
  Philip Oakley, Phillip Wood, Ramsay Jones, René Scharfe,
  Robert P. J. Day, Sven Strickroth, SZEDER Gábor, Taylor Blau,
  Thomas Gummerer, Todd Zullinger, Torsten Bögershausen, and
  Trần Ngọc Quân.

----------------------------------------------------------------

Git 2.22 Release Notes (draft)
==============================

Updates since v2.21
-------------------

Backward compatibility note

 * The filter specification "--filter=sparse:path=<path>" used to
   create a lazy/partial clone has been removed.  Using a blob that is
   part of the project as sparse specification is still supported with
   the "--filter=sparse:oid=<blob>" option.

UI, Workflows & Features

 * "git checkout --no-overlay" can be used to trigger a new mode of
   checking out paths out of the tree-ish, that allows paths that
   match the pathspec that are in the current index and working tree
   and are not in the tree-ish.

 * The %(trailers) formatter in "git log --format=..."  now allows to
   optionally pick trailers selectively by keyword, show only values,
   etc.

 * Four new configuration variables {author,committer}.{name,email}
   have been introduced to override user.{name,email} in more specific
   cases.

 * Command-line completion (in contrib/) learned to tab-complete the
   "git submodule absorbgitdirs" subcommand.

 * "git branch" learned a new subcommand "--show-current".

 * Output from "diff --cc" did not show the original paths when the
   merge involved renames.  A new option adds the paths in the
   original trees to the output.

 * The command line completion (in contrib/) has been taught to
   complete more subcommand parameters.

 * The final report from "git bisect" used to show the suspected
   culprit using a raw "diff-tree", with which there is no output for
   a merge commit.  This has been updated to use a more modern and
   human readable output that still is concise enough.

 * "git rebase --rebase-merges" replaces its old "--preserve-merges"
   option; the latter is now marked as deprecated.

 * Error message given while cloning with --recurse-submodules has
   been updated.

 * The completion helper code now pays attention to repository-local
   configuration (when available), which allows --list-cmds to honour
   a repository specific setting of completion.commands, for example.

 * "git mergetool" learned to offer Sublime Merge (smerge) as one of
   its backends.

 * A new hook "post-index-change" is called when the on-disk index
   file changes, which can help e.g. a virtualized working tree
   implementation.

 * "git difftool" can now run outside a repository.

 * "git checkout -m <other>" was about carrying the differences
   between HEAD and the working-tree files forward while checking out
   another branch, and ignored the differences between HEAD and the
   index.  The command has been taught to abort when the index and the
   HEAD are different.

 * A progress indicator has been added to the "index-pack" step, which
   often makes users wait for completion during "git clone".

 * "git submodule" learns "set-branch" subcommand that allows the
   submodule.*.branch settings to be modified.

 * "git merge-recursive" backend recently learned a new heuristics to
   infer file movement based on how other files in the same directory
   moved.  As this is inherently less robust heuristics than the one
   based on the content similarity of the file itself (rather than
   based on what its neighbours are doing), it sometimes gives an
   outcome unexpected by the end users.  This has been toned down to
   leave the renamed paths in higher/conflicted stages in the index so
   that the user can examine and confirm the result.

 * "git tag" learned to give an advice suggesting it might be a
   mistake when creating an annotated or signed tag that points at
   another tag.

 * The "git pack-objects" command learned to report the number of
   objects it packed via the trace2 mechanism.

 * The list of conflicted paths shown in the editor while concluding a
   conflicted merge was shown above the scissors line when the
   clean-up mode is set to "scissors", even though it was commented
   out just like the list of updated paths and other information to
   help the user explain the merge better.

 * The trace2 tracing facility learned to auto-generate a filename
   when told to log to a directory.

 * "git clone" learned a new --server-option option when talking over
   the protocol version 2.

 * The connectivity bitmaps are created by default in bare
   repositories now; also the pathname hash-cache is created by
   default to avoid making crappy deltas when repacking.

 * "git branch new A...B" and "git checkout -b new A...B" have been
   taught that in their contexts, the notation A...B means "the merge
   base between these two commits", just like "git checkout A...B"
   detaches HEAD at that commit.

 * Update "git difftool" and "git mergetool" so that the combinations
   of {diff,merge}.{tool,guitool} configuration variables serve as
   fallback settings of each other in a sensible order.

 * The "--dir-diff" mode of "git difftool" is not useful in "--no-index"
   mode; they are now explicitly marked as mutually incompatible.


Performance, Internal Implementation, Development Support etc.

 * The diff machinery, one of the oldest parts of the system, which
   long predates the parse-options API, uses fairly long and complex
   handcrafted option parser.  This is being rewritten to use the
   parse-options API.

 * The implementation of pack-redundant has been updated for
   performance in a repository with many packfiles.

 * A more structured way to obtain execution trace has been added.

 * "git prune" has been taught to take advantage of reachability
   bitmap when able.

 * The command line parser of "git commit-tree" has been rewritten to
   use the parse-options API.

 * Suggest GitGitGadget instead of submitGit as a way to submit
   patches based on GitHub PR to us.

 * The test framework has been updated to help developers by making it
   easier to run most of the tests under different versions of
   over-the-wire protocols.

 * Dev support update to make it easier to compare two formatted
   results from our documentation.

 * The scripted "git rebase" implementation has been retired.

 * "git multi-pack-index verify" did not scale well with the number of
   packfiles, which is being improved.

 * "git stash" has been rewritten in C.

 * The "check-docs" Makefile target to support developers has been
   updated.

 * The tests have been updated not to rely on the abbreviated option
   names the parse-options API offers, to protect us from an
   abbreviated form of an option that used to be unique within the
   command getting non-unique when a new option that share the same
   prefix is added.

 * The scripted version of "git rebase -i" wrote and rewrote the todo
   list many times during a single step of its operation, and the
   recent C-rewrite made a faithful conversion of the logic to C.  The
   implementation has been updated to carry necessary information
   around in-core to avoid rewriting the same file over and over
   unnecessarily.

 * Test framework update to more robustly clean up leftover files and
   processes after tests are done.

 * Conversion from unsigned char[20] to struct object_id continues.

 * While running "git diff" in a lazy clone, we can upfront know which
   missing blobs we will need, instead of waiting for the on-demand
   machinery to discover them one by one.  The code learned to aim to
   achieve better performance by batching the request for these
   promised blobs.

 * During an initial "git clone --depth=..." partial clone, it is
   pointless to spend cycles for a large portion of the connectivity
   check that enumerates and skips promisor objects (which by
   definition is all objects fetched from the other side).  This has
   been optimized out.

 * Mechanically and systematically drop "extern" from function
   declaration.

 * The script to aggregate perf result unconditionally depended on
   libjson-perl even though it did not have to, which has been
   corrected.

 * The internal implementation of "git rebase -i" has been updated to
   avoid forking a separate "rebase--interactive" process.

 * Allow DEP and ASLR for Windows build to for security hardening.

 * Performance test framework has been broken and measured the version
   of Git that happens to be on $PATH, not the specified one to
   measure, for a while, which has been corrected.

 * Optionally "make coccicheck" can feed multiple source files to
   spatch, gaining performance while spending more memory.

 * Attempt to use an abbreviated option in "git clone --recurs" is
   responded by a request to disambiguate between --recursive and
   --recurse-submodules, which is bad because these two are synonyms.
   The parse-options API has been extended to define such synonyms
   more easily and not produce an unnecessary failure.

 * A pair of private functions in http.c that had names similar to
   fread/fwrite did not return the number of elements, which was found
   to be confusing.

 * Update collision-detecting SHA-1 code to build properly on HP-UX.


Fixes since v2.21
-----------------

 * "git prune-packed" did not notice and complain against excess
   arguments given from the command line, which now it does.
   (merge 9b0bd87ed2 rj/prune-packed-excess-args later to maint).

 * Split-index fix.
   (merge 6e37c8ed3c nd/split-index-null-base-fix later to maint).

 * "git diff --no-index" may still want to access Git goodies like
   --ext-diff and --textconv, but so far these have been ignored,
   which has been corrected.
   (merge 287ab28bfa jk/diff-no-index-initialize later to maint).

 * Unify RPC code for smart http in protocol v0/v1 and v2, which fixes
   a bug in the latter (lack of authentication retry) and generally
   improves the code base.
   (merge a97d00799a jt/http-auth-proto-v2-fix later to maint).

 * The include file compat/bswap.h has been updated so that it is safe
   to (accidentally) include it more than once.
   (merge 33aa579a55 jk/guard-bswap-header later to maint).

 * The set of header files used by "make hdr-check" unconditionally
   included sha256/gcrypt.h, even when it is not used, causing the
   make target to fail.  We now skip it when GCRYPT_SHA256 is not in
   use.
   (merge f23aa18e7f rj/hdr-check-gcrypt-fix later to maint).

 * The Makefile uses 'find' utility to enumerate all the *.h header
   files, which is expensive on platforms with slow filesystems; it
   now optionally uses "ls-files" if working within a repository,
   which is a trick similar to how all sources are enumerated to run
   ETAGS on.
   (merge 92b88eba9f js/find-lib-h-with-ls-files-when-possible later to maint).

 * "git rebase" that was reimplemented in C did not set ORIG_HEAD
   correctly, which has been corrected.
   (merge cbd29ead92 js/rebase-orig-head-fix later to maint).

 * Dev support.
   (merge f545737144 js/stress-test-ui-tweak later to maint).

 * CFLAGS now can be tweaked when invoking Make while using
   DEVELOPER=YesPlease; this did not work well before.
   (merge 6d5d4b4e93 ab/makefile-help-devs-more later to maint).

 * "git fsck --connectivity-only" omits computation necessary to sift
   the objects that are not reachable from any of the refs into
   unreachable and dangling.  This is now enabled when dangling
   objects are requested (which is done by default, but can be
   overridden with the "--no-dangling" option).
   (merge 8d8c2a5aef jk/fsck-doc later to maint).

 * On platforms where "git fetch" is killed with SIGPIPE (e.g. OSX),
   the upload-pack that runs on the other end that hangs up after
   detecting an error could cause "git fetch" to die with a signal,
   which led to a flaky test.  "git fetch" now ignores SIGPIPE during
   the network portion of its operation (this is not a problem as we
   check the return status from our write(2)s).
   (merge 143588949c jk/no-sigpipe-during-network-transport later to maint).

 * A recent update broke "is this object available to us?" check for
   well-known objects like an empty tree (which should yield "yes",
   even when there is no on-disk object for an empty tree), which has
   been corrected.
   (merge f06ab027ef jk/virtual-objects-do-exist later to maint).

 * The setup code has been cleaned up to avoid leaks around the
   repository_format structure.
   (merge e8805af1c3 ma/clear-repository-format later to maint).

 * "git config --type=color ..." is meant to replace "git config --get-color"
   but there is a slight difference that wasn't documented, which is
   now fixed.
   (merge cd8e7593b9 jk/config-type-color-ends-with-lf later to maint).

 * When the "clean" filter can reduce the size of a huge file in the
   working tree down to a small "token" (a la Git LFS), there is no
   point in allocating a huge scratch area upfront, but the buffer is
   sized based on the original file size.  The convert mechanism now
   allocates very minimum and reallocates as it receives the output
   from the clean filter process.
   (merge 02156ab031 jh/resize-convert-scratch-buffer later to maint).

 * "git rebase" uses the refs/rewritten/ hierarchy to store its
   intermediate states, which inherently makes the hierarchy per
   worktree, but it didn't quite work well.
   (merge b9317d55a3 nd/rewritten-ref-is-per-worktree later to maint).

 * "git log -L<from>,<to>:<path>" with "-s" did not suppress the patch
   output as it should.  This has been corrected.
   (merge 05314efaea jk/line-log-with-patch later to maint).

 * "git worktree add" used to do a "find an available name with stat
   and then mkdir", which is race-prone.  This has been fixed by using
   mkdir and reacting to EEXIST in a loop.
   (merge 7af01f2367 ms/worktree-add-atomic-mkdir later to maint).

 * Build update for SHA-1 with collision detection.
   (merge 07a20f569b jk/sha1dc later to maint).

 * Build procedure has been fixed around use of asciidoctor instead of
   asciidoc.
   (merge 185f9a0ea0 ma/asciidoctor-fixes later to maint).

 * remote-http transport did not anonymize URLs reported in its error
   messages at places.
   (merge c1284b21f2 js/anonymize-remote-curl-diag later to maint).

 * Error messages given from the http transport have been updated so
   that they can be localized.
   (merge ed8b4132c8 js/remote-curl-i18n later to maint).

 * "git init" forgot to read platform-specific repository
   configuration, which made Windows port to ignore settings of
   core.hidedotfiles, for example.

 * A corner-case object name ambiguity while the sequencer machinery
   is working (e.g. "rebase -i -x") has been fixed.

 * "git format-patch" did not diagnose an error while opening the
   output file for the cover-letter, which has been corrected.
   (merge 2fe95f494c jc/format-patch-error-check later to maint).

 * "git checkout -f <branch>" while the index has an unmerged path
   incorrectly left some paths in an unmerged state, which has been
   corrected.

 * A corner case bug in the refs API has been corrected.
   (merge d3322eb28b jk/refs-double-abort later to maint).

 * Unicode update.
   (merge 584b62c37b bb/unicode-12 later to maint).

 * dumb-http walker has been updated to share more error recovery
   strategy with the normal codepath.

 * A buglet in configuration parser has been fixed.
   (merge 19e7fdaa58 nd/include-if-wildmatch later to maint).

 * The documentation for "git read-tree --reset -u" has been updated.
   (merge b5a0bd694c nd/read-tree-reset-doc later to maint).

 * Code clean-up around a much-less-important-than-it-used-to-be
   update_server_info() function.
   (merge b3223761c8 jk/server-info-rabbit-hole later to maint).

 * The message given when "git commit -a <paths>" errors out has been
   updated.
   (merge 5a1dbd48bc nd/commit-a-with-paths-msg-update later to maint).

 * "git cherry-pick --options A..B", after giving control back to the
   user to ask help resolving a conflicted step, did not honor the
   options it originally received, which has been corrected.

 * Various glitches in "git gc" around reflog handling have been fixed.

 * The code to read from commit-graph file has been cleanup with more
   careful error checking before using data read from it.

 * Performance fix around "git fetch" that grabs many refs.
   (merge b764300912 jt/fetch-pack-wanted-refs-optim later to maint).

 * Protocol v2 support in "git fetch-pack" of shallow clones has been
   corrected.

 * Performance fix around "git blame", especially in a linear history
   (which is the norm we should optimize for).
   (merge f892014943 dk/blame-keep-origin-blob later to maint).

 * Performance fix for "rev-list --parents -- pathspec".
   (merge 8320b1dbe7 jk/revision-rewritten-parents-in-prio-queue later to maint).

 * Updating the display with progress message has been cleaned up to
   deal better with overlong messages.
   (merge 545dc345eb sg/overlong-progress-fix later to maint).

 * "git blame -- path" in a non-bare repository starts blaming from
   the working tree, and the same command in a bare repository errors
   out because there is no working tree by definition.  The command
   has been taught to instead start blaming from the commit at HEAD,
   which is more useful.
   (merge a544fb08f8 sg/blame-in-bare-start-at-head later to maint).

 * An underallocation in the code to read the untracked cache
   extension has been corrected.
   (merge 3a7b45a623 js/untracked-cache-allocfix later to maint).

 * The code is updated to check the result of memory allocation before
   it is used in more places, by using xmalloc and/or xcalloc calls.
   (merge 999b951b28 jk/xmalloc later to maint).

 * The GETTEXT_POISON test option has been quite broken ever since it
   was made runtime-tunable, which has been fixed.
   (merge f88b9cb603 jc/gettext-test-fix later to maint).

 * Test fix on APFS that is incapable of store paths in Latin-1.
   (merge 3889149619 js/iso8895-test-on-apfs later to maint).

 * "git submodule foreach <command> --quiet" did not pass the option
   down correctly, which has been corrected.
   (merge a282f5a906 nd/submodule-foreach-quiet later to maint).

 * "git send-email" has been taught to use quoted-printable when the
   payload contains carriage-return.  The use of the mechanism is in
   line with the design originally added the codepath that chooses QP
   when the payload has overly long lines.
   (merge 74d76a1701 bc/send-email-qp-cr later to maint).

 * The recently added feature to add addresses that are on
   anything-by: trailers in 'git send-email' was found to be way too
   eager and considered nonsense strings as if they can be legitimate
   beginning of *-by: trailer.  This has been tightened.

 * Builds with gettext broke on recent macOS w/ Homebrew, which
   seems to have stopped including from /usr/local/include; this
   has been corrected.
   (merge 92a1377a2a js/macos-gettext-build later to maint).

 * Running "git add" on a repository created inside the current
   repository is an explicit indication that the user wants to add it
   as a submodule, but when the HEAD of the inner repository is on an
   unborn branch, it cannot be added as a submodule.  Worse, the files
   in its working tree can be added as if they are a part of the outer
   repository, which is not what the user wants.  These problems are
   being addressed.
   (merge f937bc2f86 km/empty-repo-is-still-a-repo later to maint).

 * "git cherry-pick" run with the "-x" or the "--signoff" option used
   to (and more importantly, ought to) clean up the commit log message
   with the --cleanup=space option by default, but this has been
   broken since late 2017.  This has been fixed.

 * When given a tag that points at a commit-ish, "git replace --graft"
   failed to peel the tag before writing a replace ref, which did not
   make sense because the old graft mechanism the feature wants to
   mimic only allowed to replace one commit object with another.
   This has been fixed.
   (merge ee521ec4cb cc/replace-graft-peel-tags later to maint).

 * Code tightening against a "wrong" object appearing where an object
   of a different type is expected, instead of blindly assuming that
   the connection between objects are correctly made.
   (merge 97dd512af7 tb/unexpected later to maint).

 * An earlier update for MinGW and Cygwin accidentally broke MSVC build,
   which has been fixed.
   (merge 22c3634c0f ss/msvc-path-utils-fix later to maint).

 * %(push:track) token used in the --format option to "git
   for-each-ref" and friends was not showing the right branch, which
   has been fixed.
   (merge c646d0934e dr/ref-filter-push-track-fix later to maint).

 * "make check-docs", "git help -a", etc. did not account for cases
   where a particular build may deliberately omit some subcommands,
   which has been corrected.

 * The logic to tell if a Git repository has a working tree protects
   "git branch -D" from removing the branch that is currently checked
   out by mistake.  The implementation of this logic was broken for
   repositories with unusual name, which unfortunately is the norm for
   submodules these days.  This has been fixed.
   (merge f3534c98e4 jt/submodule-repo-is-with-worktree later to maint).

 * AIX shared the same build issues with other BSDs around fileno(fp),
   which has been corrected.
   (merge ee662bf5c6 cc/aix-has-fileno-as-a-macro later to maint).

 * The autoconf generated configure script failed to use the right
   gettext() implementations from -libintl by ignoring useless stub
   implementations shipped in some C library, which has been
   corrected.
   (merge b71e56a683 vk/autoconf-gettext later to maint).

 * Fix index-pack perf test so that the repeated invocations always
   run in an empty repository, which emulates the initial clone
   situation better.
   (merge 775c71e16d jk/p5302-avoid-collision-check-cost later to maint).

 * A "ls-files" that emulates "find" to enumerate files in the working
   tree resulted in duplicated Makefile rules that caused the build to
   issue an unnecessary warning during a trial build after merge
   conflicts are resolved in working tree *.h files but before the
   resolved results are added to the index.  This has been corrected.

 * "git cherry-pick" (and "revert" that shares the same runtime engine)
   that deals with multiple commits got confused when the final step
   gets stopped with a conflict and the user concluded the sequence
   with "git commit".  Attempt to fix it by cleaning up the state
   files used by these commands in such a situation.
   (merge 4a72486de9 pw/clean-sequencer-state-upon-final-commit later to maint).

 * On a filesystem like HFS+, the names of the refs stored as filesystem
   entities may become different from what the end-user expects, just
   like files in the working tree get "renamed".  Work around the
   mismatch by paying attention to the core.precomposeUnicode
   configuration.
   (merge 8e712ef6fc en/unicode-in-refnames later to maint).

 * The code to generate the multi-pack idx file was not prepared to
   see too many packfiles and ran out of open file descriptor, which
   has been corrected.

 * To run tests for Git SVN, our scripts for CI used to install the
   git-svn package (in the hope that it would bring in the right
   dependencies).  This has been updated to install the more direct
   dependency, namely, libsvn-perl.
   (merge db864306cf sg/ci-libsvn-perl later to maint).

 * "git cvsexportcommit" running on msys did not expect cvsnt showed
   "cvs status" output with CRLF line endings.

 * The fsmonitor interface got out of sync after the in-core index
   file gets discarded, which has been corrected.
   (merge 398a3b0899 js/fsmonitor-refresh-after-discarding-index later to maint).

 * "git status" did not know that the "label" instruction in the
   todo-list "rebase -i -r" uses should not be shown as a hex object
   name.

 * A prerequisite check in the test suite to see if a working jgit is
   available was made more robust.
   (merge abd0f28983 tz/test-lib-check-working-jgit later to maint).

 * The codepath to parse :<path> that obtains the object name for an
   indexed object has been made more robust.

 * Code cleanup, docfix, build fix, etc.
   (merge 11f470aee7 jc/test-yes-doc later to maint).
   (merge 90503a240b js/doc-symref-in-proto-v1 later to maint).
   (merge 5c326d1252 jk/unused-params later to maint).
   (merge 68cabbfda3 dl/doc-submodule-wo-subcommand later to maint).
   (merge 9903623761 ab/receive-pack-use-after-free-fix later to maint).
   (merge 1ede45e44b en/merge-options-doc later to maint).
   (merge 3e14dd2c8e rd/doc-hook-used-in-sample later to maint).
   (merge c271dc28fd nd/no-more-check-racy later to maint).
   (merge e6e15194a8 yb/utf-16le-bom-spellfix later to maint).
   (merge bb101aaf0c rd/attr.c-comment-typofix later to maint).
   (merge 716a5af812 rd/gc-prune-doc-fix later to maint).
   (merge 50b206371d js/untravis-windows later to maint).
   (merge dbf47215e3 js/rebase-recreate-merge later to maint).
   (merge 56cb2d30f8 dl/reset-doc-no-wrt-abbrev later to maint).
   (merge 64eca306a2 ja/dir-rename-doc-markup-fix later to maint).
   (merge af91b0230c dl/ignore-docs later to maint).
   (merge 59a06e947b ra/t3600-test-path-funcs later to maint).
   (merge e041d0781b ar/t4150-remove-cruft later to maint).
   (merge 8d75a1d183 ma/asciidoctor-fixes-more later to maint).
   (merge 74cc547b0f mh/pack-protocol-doc-fix later to maint).
   (merge ed31851fa6 ab/doc-misc-typofixes later to maint).
   (merge a7256debd4 nd/checkout-m-doc-update later to maint).
   (merge 3a9e1ad78d jt/t5551-protocol-v2-does-not-have-half-auth later to maint).
   (merge 0b918b75af sg/t5318-cleanup later to maint).
   (merge 68ed71b53c cb/doco-mono later to maint).
   (merge a34dca2451 nd/interpret-trailers-docfix later to maint).
   (merge cf7b857a77 en/fast-import-parsing-fix later to maint).
   (merge fe61ccbc35 po/rerere-doc-fmt later to maint).
   (merge ffea0248bf po/describe-not-necessarily-7 later to maint).
   (merge 7cb7283adb tg/ls-files-debug-format-fix later to maint).
   (merge f64a21bd82 tz/doc-apostrophe-no-longer-needed later to maint).
   (merge dbe7b41019 js/t3301-unbreak-notes-test later to maint).
   (merge d8083e4180 km/t3000-retitle later to maint).
   (merge 9e4cbccbd7 tz/git-svn-doc-markup-fix later to maint).
   (merge da9ca955a7 jk/ls-files-doc-markup-fix later to maint).
   (merge 6804ba3a58 cw/diff-highlight later to maint).
   (merge 1a8787144d nd/submodule-helper-incomplete-line-fix later to maint).
   (merge d9ef573837 jk/apache-lsan later to maint).
   (merge c871fbee2b js/t6500-use-windows-pid-on-mingw later to maint).
   (merge ce4c7bfc90 bl/t4253-exit-code-from-format-patch later to maint).
   (merge 397a46db78 js/t5580-unc-alternate-test later to maint).
   (merge d4907720a2 cm/notes-comment-fix later to maint).
   (merge 9dde06de13 cb/http-push-null-in-message-fix later to maint).
   (merge 4c785c0edc js/rebase-config-bitfix later to maint).
   (merge 8e9fe16c87 es/doc-gitsubmodules-markup later to maint).

----------------------------------------------------------------

Changes since v2.21.0 are as follows:

Alban Gruin (18):
      sequencer: changes in parse_insn_buffer()
      sequencer: make the todo_list structure public
      sequencer: remove the 'arg' field from todo_item
      sequencer: refactor transform_todos() to work on a todo_list
      sequencer: introduce todo_list_write_to_file()
      sequencer: refactor check_todo_list() to work on a todo_list
      sequencer: refactor sequencer_add_exec_commands() to work on a todo_list
      sequencer: refactor rearrange_squash() to work on a todo_list
      sequencer: make sequencer_make_script() write its script to a strbuf
      sequencer: change complete_action() to use the refactored functions
      rebase--interactive: move sequencer_add_exec_commands()
      rebase--interactive: move rearrange_squash_in_todo_file()
      sequencer: refactor skip_unnecessary_picks() to work on a todo_list
      rebase-interactive: use todo_list_write_to_file() in edit_todo_list()
      rebase-interactive: append_todo_help() changes
      rebase-interactive: rewrite edit_todo_list() to handle the initial edit
      sequencer: use edit_todo_list() in complete_action()
      rebase--interactive: move transform_todo_file()

Alexander Blesius (1):
      doc: fix typos in man pages

Alexander Shopov (1):
      gitk: Update Bulgarian translation (317t)

Anders Waldenborg (7):
      doc: group pretty-format.txt placeholders descriptions
      pretty: allow %(trailers) options with explicit value
      pretty: single return path in %(trailers) handling
      pretty: allow showing specific trailers
      pretty: add support for "valueonly" option in %(trailers)
      strbuf: separate callback for strbuf_expand:ing literals
      pretty: add support for separator option in %(trailers)

Andreas Heiduk (1):
      revisions.txt: remove ambibuity between <rev>:<path> and :<path>

Andrei Rybak (1):
      t4150: remove unused variable

Baruch Siach (1):
      send-email: don't cc *-by lines with '-' prefix

Beat Bolli (1):
      unicode: update the width tables to Unicode 12

Ben Peart (1):
      read-cache: add post-index-change hook

Boxuan Li (1):
      t4253-am-keep-cr-dos: avoid using pipes

Brandon Richardson (1):
      commit-tree: utilize parse-options api

Carlo Marcelo Arenas Belón (1):
      http-push: prevent format overflow warning with gcc >= 9

Chris Mayo (1):
      notes: correct documentation of format_display_notes()

Chris. Webster (1):
      diff-highlight: use correct /dev/null for UNIX and Windows

Christian Couder (5):
      t6050: use test_line_count instead of wc -l
      t6050: redirect expected error output to a file
      replace: peel tag when passing a tag as parent to --graft
      replace: peel tag when passing a tag first to --graft
      list-objects-filter: disable 'sparse:path' filters

Clément Chigot (2):
      Makefile: use fileno macro work around on AIX
      git-compat-util: work around for access(X_OK) under root

Corentin BOMPARD (2):
      doc/CodingGuidelines: URLs and paths as monospace
      doc: format pathnames and URLs as monospace.

Damien Robert (1):
      ref-filter: use correct branch for %(push:track)

Daniels Umanovskis (1):
      branch: introduce --show-current display option

David Aguilar (2):
      mergetools: add support for smerge (Sublime Merge)
      contrib/completion: add smerge to the mergetool completion candidates

David Kastrup (1):
      blame.c: don't drop origin blobs as eagerly

Denton Liu (38):
      completion: complete git submodule absorbgitdirs
      git-submodule.txt: "--branch <branch>" option defaults to 'master'
      submodule--helper: teach config subcommand --unset
      submodule: document default behavior
      git-reset.txt: clarify documentation
      git-clean.txt: clarify ignore pattern files
      docs: move core.excludesFile from git-add to gitignore
      contrib/subtree: ensure only one rev is provided
      midx.c: convert FLEX_ALLOC_MEM to FLEX_ALLOC_STR
      cocci: FLEX_ALLOC_MEM to FLEX_ALLOC_STR
      tag: fix formatting
      submodule: teach set-branch subcommand
      tag: advise on nested tags
      t7600: clean up style
      t3507: clean up style
      t7604: clean up style
      t7502: clean up style
      commit: extract cleanup_mode functions to sequencer
      parse-options.h: extract common --cleanup option
      merge: cleanup messages like commit
      merge: add scissors line on merge conflict
      cherry-pick/revert: add scissors line on merge conflict
      t7610: unsuppress output
      t7610: add mergetool --gui tests
      *.[ch]: remove extern from function declarations using spatch
      *.[ch]: remove extern from function declarations using sed
      *.[ch]: manually align parameter lists
      t2018: cleanup in current test
      branch: make create_branch accept a merge base rev
      revisions.txt: change "rev" to "<rev>"
      revisions.txt: mark optional rev arguments with []
      revisions.txt: mention <rev>~ form
      tag: fix typo in nested tagging hint
      mergetool: use get_merge_tool function
      mergetool--lib: create gui_mode function
      mergetool: fallback to tool when guitool unavailable
      difftool: make --gui, --tool and --extcmd mutually exclusive
      difftool: fallback on merge.guitool

Derrick Stolee (4):
      trace2:data: pack-objects: add trace2 regions
      midx: pass a repository pointer
      midx: add packs to packed_git linked list
      trace2: add variable description to git.txt

Dustin Spicuzza (1):
      cvsexportcommit: force crlf translation

Elijah Newren (23):
      log,diff-tree: add --combined-all-paths option
      merge-options.txt: correct wording of --no-commit option
      t9300: demonstrate bug with get-mark and empty orphan commits
      git-fast-import.txt: fix wording about where ls command can appear
      fast-import: check most prominent commands first
      fast-import: only allow cat-blob requests where it makes sense
      fast-import: fix erroneous handling of get-mark with empty orphan commits
      Use 'unsigned short' for mode, like diff_filespec does
      merge-recursive: rename merge_options argument from 'o' to 'opt'
      merge-recursive: rename diff_filespec 'one' to 'o'
      merge-recursive: rename locals 'o' and 'a' to 'obuf' and 'abuf'
      merge-recursive: use 'ci' for rename_conflict_info variable name
      merge-recursive: move some struct declarations together
      merge-recursive: shrink rename_conflict_info
      merge-recursive: remove ren[12]_other fields from rename_conflict_info
      merge-recursive: track branch where rename occurred in rename struct
      merge-recursive: cleanup handle_rename_* function signatures
      merge-recursive: switch from (oid,mode) pairs to a diff_filespec
      t6043: fix copied test description to match its purpose
      merge-recursive: track information associated with directory renames
      merge-recursive: give callers of handle_content_merge() access to contents
      merge-recursive: switch directory rename detection default
      Honor core.precomposeUnicode in more places

Emily Shaffer (1):
      gitsubmodules: align html and nroff lists

Eric Sunshine (1):
      check-non-portable-shell: support Perl versions older than 5.10

Eric Wong (1):
      repack: enable bitmaps by default on bare repos

Jean-Noël Avila (3):
      l10n: fr.po remove obsolete entries
      Doc: fix misleading asciidoc formating
      diff: fix mistake in translatable strings

Jeff Hostetler (30):
      trace2: Documentation/technical/api-trace2.txt
      trace2: create new combined trace facility
      trace2: collect Windows-specific process information
      trace2:data: add trace2 regions to wt-status
      trace2:data: add editor/pager child classification
      trace2:data: add trace2 sub-process classification
      trace2:data: add trace2 transport child classification
      trace2:data: add subverb to checkout command
      trace2:data: add subverb to reset command
      trace2:data: add trace2 hook classification
      trace2:data: add subverb for rebase
      trace2:data: add trace2 instrumentation to index read/write
      trace2: t/helper/test-trace2, t0210.sh, t0211.sh, t0212.sh
      trace2: add for_each macros to clang-format
      progress: add sparse mode to force 100% complete message
      trace2:data: add trace2 data to midx
      midx: add progress indicators in multi-pack-index verify
      midx: during verify group objects by packfile to speed verification
      config: initialize opts structure in repo_read_config()
      trace2: refactor setting process starting time
      trace2: add absolute elapsed time to start event
      trace2: find exec-dir before trace2 initialization
      config: add read_very_early_config()
      trace2: use system/global config for default trace2 settings
      trace2: report peak memory usage of the process
      trace2: clarify UTC datetime formatting
      trace2: make SIDs more unique
      trace2: update docs to describe system/global config settings
      trace2: fixup access problem on /etc/gitconfig in read_very_early_config
      trace2: fix tracing when NO_PTHREADS is defined

Jeff King (92):
      prune: lazily perform reachability traversal
      prune: use bitmaps for reachability traversal
      prune: check SEEN flag for reachability
      t5304: rename "sha1" variables to "oid"
      diff: drop options parameter from diffcore_fix_diff_index()
      diff: drop unused color reset parameters
      diff: drop unused emit data parameter from sane_truncate_line()
      diff: drop complete_rewrite parameter from run_external_diff()
      merge-recursive: drop several unused parameters
      pack-objects: drop unused parameter from oe_map_new_pack()
      files-backend: drop refs parameter from split_symref_update()
      ref-filter: drop unused buf/sz pairs
      ref-filter: drop unused "obj" parameters
      ref-filter: drop unused "sz" parameters
      diff: reuse diff setup for --no-index case
      bisect: use string arguments to feed internal diff-tree
      bisect: fix internal diff-tree config loading
      bisect: make diff-tree output prettier
      fetch: avoid calling write_or_die()
      fetch: ignore SIGPIPE during network operation
      rev-list: allow cached objects in existence check
      doc/fsck: clarify --connectivity-only behavior
      fsck: always compute USED flags for unreachable objects
      compat/bswap: add include header guards
      config: document --type=color output is a complete line
      line-log: suppress diff output with "-s"
      line-log: detect unsupported formats
      point pull requesters to GitGitGadget
      Makefile: fix unaligned loads in sha1dc with UBSan
      t5310: correctly remove bitmaps for jgit test
      pack-objects: default to writing bitmap hash-cache
      perf-lib.sh: rely on test-lib.sh for --tee handling
      revision: drop some unused "revs" parameters
      log: drop unused rev_info from early output
      log: drop unused "len" from show_tagger()
      update-index: drop unused prefix_length parameter from do_reupdate()
      test-date: drop unused "now" parameter from parse_dates()
      unpack-trees: drop name_entry from traverse_by_cache_tree()
      unpack-trees: drop unused error_type parameters
      report_path_error(): drop unused prefix parameter
      fetch_pack(): drop unused parameters
      parse-options: drop unused ctx parameter from show_gitcomp()
      pretty: drop unused "type" parameter in needs_rfc2047_encoding()
      pretty: drop unused strbuf from parse_padding_placeholder()
      git: read local config in --list-cmds
      completion: fix multiple command removals
      parse_opt_ref_sorting: always use with NONEG flag
      refs/files-backend: handle packed transaction prepare failure
      refs/files-backend: don't look at an aborted transaction
      http: factor out curl result code normalization
      http: normalize curl results for dumb loose and alternates fetches
      http: use normalize_curl_result() instead of manual conversion
      revision: use a prio_queue to hold rewritten parents
      get_commit_tree(): return NULL for broken tree
      rev-list: let traversal die when --missing is not in use
      rev-list: detect broken root trees
      test-prio-queue: use xmalloc
      xdiff: use git-compat-util
      xdiff: use xmalloc/xrealloc
      progress: use xmalloc/xcalloc
      t5516: drop ok=sigpipe from unreachable-want tests
      t5530: check protocol response for "not our ref"
      upload-pack: send ERR packet for non-tip objects
      pkt-line: prepare buffer before handling ERR packets
      fetch: use free_refs()
      remote.c: make singular free_ref() public
      fetch: do not consider peeled tags as advertised tips
      packfile.h: drop extern from function declarations
      pack-revindex: open index if necessary
      t5319: fix bogus cat-file argument
      t5319: drop useless --buffer from cat-file
      midx: check both pack and index names for containment
      packfile: fix pack basename computation
      http: simplify parsing of remote objects/info/packs
      server-info: fix blind pointer arithmetic
      server-info: simplify cleanup in parse_pack_def()
      server-info: use strbuf to read old info/packs file
      server-info: drop nr_alloc struct member
      server-info: drop objdirlen pointer arithmetic
      update_info_refs(): drop unused force parameter
      t5304: add a test for pruning with bitmaps
      untracked-cache: be defensive about missing NULs in index
      untracked-cache: simplify parsing by dropping "next"
      untracked-cache: simplify parsing by dropping "len"
      p5302: create the repo in each index-pack test
      doc/ls-files: put nested list for "-t" option into block
      t/perf: depend on perl JSON only when using --codespeed
      t/perf: add perf script for partial clones
      coccicheck: optionally batch spatch invocations
      t/lib-httpd: pass LSAN_OPTIONS through apache
      coccicheck: make batch size of 0 mean "unlimited"
      get_oid: handle NULL repo->index

Jiang Xin (5):
      t5323: test cases for git-pack-redundant
      pack-redundant: delay creation of unique_objects
      pack-redundant: rename pack_list.all_objects
      pack-redundant: consistent sort method
      i18n: fix typos found during l10n for git 2.22.0

Joel Teichroeb (5):
      stash: improve option parsing test coverage
      stash: convert apply to builtin
      stash: convert drop and clear to builtin
      stash: convert branch to builtin
      stash: convert pop to builtin

Joey Hess (1):
      convert: avoid malloc of original file size

Johannes Schindelin (67):
      ident: add the ability to provide a "fallback identity"
      travis: remove the hack to build the Windows job on Azure Pipelines
      tests: let --stress-limit=<N> imply --stress
      tests: introduce --stress-jobs=<N>
      built-in rebase: no need to check out `onto` twice
      built-in rebase: use the correct reflog when switching branches
      built-in rebase: demonstrate that ORIG_HEAD is not set correctly
      built-in rebase: set ORIG_HEAD just once, before the rebase
      Makefile: use `git ls-files` to list header files, if possible
      curl: anonymize URLs in error messages and warnings
      remote-curl: mark all error messages for translation
      stash: add back the original, scripted `git stash`
      stash: optionally use the scripted version again
      tests: add a special setup where stash.useBuiltin is off
      legacy stash: fix "rudimentary backport of -q"
      built-in stash: handle :(glob) pathspecs again
      mingw: drop MakeMaker reference
      mingw: allow building with an MSYS2 runtime v3.x
      rebase: deprecate --preserve-merges
      mingw: respect core.hidedotfiles = false in git-init again
      test-lib: introduce 'test_atexit'
      git-daemon: use 'test_atexit` to stop 'git-daemon'
      git p4 test: use 'test_atexit' to kill p4d and the watchdog process
      rebase -i: demonstrate obscure loose object cache bug
      sequencer: improve error message when an OID could not be parsed
      sequencer: move stale comment into correct location
      get_oid(): when an object was not found, try harder
      difftool: remove obsolete (and misleading) comment
      parse-options: make OPT_ARGUMENT() more useful
      difftool: allow running outside Git worktrees with --no-index
      docs: move gitremote-helpers into section 7
      docs: do not document the `git remote-testgit` command
      check-docs: really look at the documented commands again
      check-docs: do not expect guide pages to correspond to commands
      check-docs: fix for setups where executables have an extension
      tests (rebase): spell out the `--keep-empty` option
      tests (rebase): spell out the `--force-rebase` option
      t7810: do not abbreviate `--no-exclude-standard` nor `--invert-match`
      t5531: avoid using an abbreviated option
      tests (push): do not abbreviate the `--follow-tags` option
      tests (status): spell out the `--find-renames` option in full
      tests (pack-objects): use the full, unabbreviated `--revs` option
      t3301: fix false negative
      untracked cache: fix off-by-one
      tests: disallow the use of abbreviated options (by default)
      t9822: skip tests if file names cannot be ISO-8859-1 encoded
      macOS: make sure that gettext is found
      remote-testgit: move it into the support directory for t5801
      Makefile: drop the NO_INSTALL variable
      help -a: do not list commands that are excluded from the build
      check-docs: allow command-list.txt to contain excluded commands
      docs: exclude documentation for commands that have been excluded
      check-docs: do not bother checking for legacy scripts' documentation
      test-tool: handle the `-C <directory>` option just like `git`
      Turn `git serve` into a test helper
      t5580: verify that alternates can be UNC paths
      fsmonitor: demonstrate that it is not refreshed after discard_index()
      fsmonitor: force a refresh after the index was discarded
      t6500(mingw): use the Windows PID of the shell
      difftool --no-index: error out on --dir-diff (and don't crash)
      status: fix display of rebase -ir's `label` command
      parse-options: adjust `parse_opt_unknown_cb()`s declared return type
      stash: document stash.useBuiltin
      rebase: replace incorrect logical negation by correct bitwise one
      tests: mark a couple more test cases as requiring `rebase -p`
      docs: say that `--rebase=preserve` is deprecated
      rebase docs: recommend `-r` over `-p`

Jonathan Tan (25):
      remote-curl: reduce scope of rpc_state.argv
      remote-curl: reduce scope of rpc_state.stdin_preamble
      remote-curl: reduce scope of rpc_state.result
      remote-curl: refactor reading into rpc_state's buf
      remote-curl: use post_rpc() for protocol v2 also
      tests: define GIT_TEST_PROTOCOL_VERSION
      t5601: check ssh command only with protocol v0
      tests: always test fetch of unreachable with v0
      t5503: fix overspecification of trace expectation
      t5512: compensate for v0 only sending HEAD symrefs
      t5700: only run with protocol version 1
      tests: fix protocol version for overspecifications
      t5552: compensate for v2 filtering ref adv.
      submodule: explain first attempt failure clearly
      t5551: mark half-auth no-op fetch test as v0-only
      fetch-pack: call prepare_shallow_info only if v0
      fetch-pack: respect --no-update-shallow in v2
      sha1-file: support OBJECT_INFO_FOR_PREFETCH
      fetch-pack: binary search when storing wanted-refs
      diff: batch fetching of missing blobs
      pack-objects: write objects packed to trace2
      transport: die if server options are unsupported
      clone: send server options when using protocol v2
      worktree: update is_bare heuristics
      fetch-pack: send server options after command

Jordi Mas (1):
      l10n: Fixes to Catalan translation

Josh Steadmon (5):
      protocol-capabilities.txt: document symref
      trace2: write to directory targets
      clone: do faster object check for partial clones
      trace2: fix incorrect function pointer check
      commit-graph: fix memory leak

Junio C Hamano (18):
      test: caution on our version of 'yes'
      builtin/log: downcase the beginning of error messages
      format-patch: notice failure to open cover letter for writing
      Start 2.22 cycle
      The second batch
      The third batch
      The fourth batch
      gettext tests: export the restored GIT_TEST_GETTEXT_POISON
      The fifth batch
      The sixth batch
      Makefile: dedup list of files obtained from ls-files
      The seventh batch
      The eighth batch
      Git 2.22-rc0
      pkt-line: drop 'const'-ness of a param to set_packet_header()
      Git 2.22-rc1
      Git 2.22-rc2
      Git 2.22-rc3

Kyle Meyer (5):
      rebase docs: fix "gitlink" typo
      submodule: refuse to add repository with no commits
      dir: do not traverse repositories with no commits
      add: error appropriately on repository with no commits
      t3000 (ls-files -o): widen description to reflect current tests

Martin Ågren (14):
      setup: free old value before setting `work_tree`
      setup: fix memory leaks with `struct repository_format`
      config/diff.txt: drop spurious backtick
      config/fsck.txt: avoid starting line with dash
      git.txt: remove empty line before list continuation
      git-svn.txt: drop escaping '\' that ends up being rendered
      Documentation: turn middle-of-line tabs into spaces
      Documentation/Makefile: add missing xsl dependencies for manpages
      Documentation/Makefile: add missing dependency on asciidoctor-extensions
      asciidoctor-extensions: fix spurious space after linkgit
      Doc: auto-detect changed build flags
      doc-diff: let `render_tree()` take an explicit directory name
      doc-diff: support diffing from/to AsciiDoc(tor)
      doc-diff: add `--cut-header-footer`

Matthew Kraai (1):
      t3903: add test for --intent-to-add file

Michal Suchanek (1):
      worktree: fix worktree add race

Mike Hommey (2):
      fix pack protocol example client/server communication
      Make fread/fwrite-like functions in http.c more like fread/fwrite.

Nguyễn Thái Ngọc Duy (129):
      parse-options.h: remove extern on function prototypes
      parse-options: add one-shot mode
      parse-options: disable option abbreviation with PARSE_OPT_KEEP_UNKNOWN
      parse-options: add OPT_BITOP()
      parse-options: stop abusing 'callback' for lowlevel callbacks
      parse-options: avoid magic return codes
      parse-options: allow ll_callback with OPTION_CALLBACK
      diff.h: keep forward struct declarations sorted
      diff.h: avoid bit fields in struct diff_flags
      diff.c: prepare to use parse_options() for parsing
      diff.c: convert -u|-p|--patch
      diff.c: convert -U|--unified
      diff.c: convert -W|--[no-]function-context
      diff.c: convert --raw
      read-cache.c: fix writing "link" index ext with null base oid
      completion: add more parameter value completion
      diff-parseopt: convert --patch-with-raw
      diff-parseopt: convert --numstat and --shortstat
      diff-parseopt: convert --dirstat and friends
      diff-parseopt: convert --check
      diff-parseopt: convert --summary
      diff-parseopt: convert --patch-with-stat
      diff-parseopt: convert --name-only
      diff-parseopt: convert --name-status
      diff-parseopt: convert -s|--no-patch
      diff-parseopt: convert --stat*
      diff-parseopt: convert --[no-]compact-summary
      diff-parseopt: convert --output-*
      diff-parseopt: convert -B|--break-rewrites
      diff-parseopt: convert -M|--find-renames
      diff-parseopt: convert -D|--irreversible-delete
      diff-parseopt: convert -C|--find-copies
      diff-parseopt: convert --find-copies-harder
      diff-parseopt: convert --no-renames|--[no--rename-empty
      diff-parseopt: convert --relative
      diff-parseopt: convert --[no-]minimal
      diff-parseopt: convert --ignore-some-changes
      Delete check-racy.c
      diff-parseopt: convert --[no-]indent-heuristic
      diff-parseopt: convert --patience
      diff-parseopt: convert --histogram
      diff-parseopt: convert --diff-algorithm
      diff-parseopt: convert --anchored
      diff-parseopt: convert --binary
      diff-parseopt: convert --full-index
      diff-parseopt: convert -a|--text
      diff-parseopt: convert -R
      diff-parseopt: convert --[no-]follow
      diff-parseopt: convert --[no-]color
      diff-parseopt: convert --word-diff
      diff-parseopt: convert --word-diff-regex
      diff-parseopt: convert --color-words
      diff-parseopt: convert --exit-code
      diff-parseopt: convert --quiet
      diff-parseopt: convert --ext-diff
      diff-parseopt: convert --textconv
      diff-parseopt: convert --ignore-submodules
      diff-parseopt: convert --submodule
      files-backend.c: factor out per-worktree code in loose_fill_ref_dir()
      files-backend.c: reduce duplication in add_per_worktree_entries_to_dir()
      Make sure refs/rewritten/ is per-worktree
      unpack-trees: fix oneway_merge accidentally carry over stage index
      checkout.txt: note about losing staged changes with --merge
      commit: improve error message in "-a <paths>" case
      unpack-trees: keep gently check inside add_rejected_path
      unpack-trees: rename "gently" flag to "quiet"
      read-tree: add --quiet
      checkout: prevent losing staged changes with --merge
      diff-parseopt: convert --ws-error-highlight
      diff-parseopt: convert --ita-[in]visible-in-index
      diff-parseopt: convert -z
      diff-parseopt: convert -l
      diff-parseopt: convert -S|-G
      diff-parseopt: convert --pickaxe-all|--pickaxe-regex
      diff-parseopt: convert -O
      diff-parseopt: convert --find-object
      diff-parseopt: convert --diff-filter
      diff-parseopt: convert --[no-]abbrev
      diff-parseopt: convert --[src|dst]-prefix
      diff-parseopt: convert --line-prefix
      diff-parseopt: convert --no-prefix
      diff-parseopt: convert --inter-hunk-context
      diff-parseopt: convert --[no-]color-moved
      diff-parseopt: convert --color-moved-ws
      diff.c: allow --no-color-moved-ws
      range-diff: use parse_options() instead of diff_opt_parse()
      diff --no-index: use parse_options() instead of diff_opt_parse()
      am: avoid diff_opt_parse()
      config: correct '**' matching in includeIf patterns
      interpret-trailers.txt: start the desc line with a capital letter
      read-tree.txt: clarify --reset and worktree changes
      packfile.c: add repo_approximate_object_count()
      refs.c: add refs_ref_exists()
      refs.c: add refs_shorten_unambiguous_ref()
      refs.c: remove the_repo from substitute_branch_name()
      refs.c: remove the_repo from expand_ref()
      refs.c: add repo_dwim_ref()
      refs.c: add repo_dwim_log()
      refs.c: remove the_repo from read_ref_at()
      submodule foreach: fix "<command> --quiet" not being respected
      commit.cocci: refactor code, avoid double rewrite
      commit.c: add repo_get_commit_tree()
      sha1-name.c: remove the_repo from sort_ambiguous()
      sha1-name.c: remove the_repo from find_abbrev_len_packed()
      sha1-name.c: add repo_find_unique_abbrev_r()
      sha1-name.c: store and use repo in struct disambiguate_state
      sha1-name.c: add repo_for_each_abbrev()
      sha1-name.c: remove the_repo from get_short_oid()
      sha1-name.c: remove the_repo from interpret_nth_prior_checkout()
      sha1-name.c: remove the_repo from interpret_branch_mark()
      sha1-name.c: add repo_interpret_branch_name()
      sha1-name.c: remove the_repo from get_oid_oneline()
      sha1-name.c: remove the_repo from get_describe_name()
      sha1-name.c: remove the_repo from get_oid_basic()
      sha1-name.c: remove the_repo from get_oid_1()
      sha1-name.c: remove the_repo from handle_one_ref()
      sha1-name.c: remove the_repo from diagnose_invalid_index_path()
      sha1-name.c: remove the_repo from resolve_relative_path()
      sha1-name.c: remove the_repo from get_oid_with_context_1()
      sha1-name.c: add repo_get_oid()
      submodule-config.c: use repo_get_oid for reading .gitmodules
      sha1-name.c: remove the_repo from maybe_die_on_misspelt_object_name
      sha1-name.c: remove the_repo from other get_oid_*
      sha1-name.c: remove the_repo from get_oid_mb()
      parse-options: don't emit "ambiguous option" for aliases
      submodule--helper: add a missing \n
      diff-parseopt: correct variable types that are used by parseopt
      diff-parseopt: restore -U (no argument) behavior
      parse-options: check empty value in OPT_INTEGER and OPT_ABBREV

Paul-Sebastian Ungureanu (17):
      sha1-name.c: add `get_oidf()` which acts like `get_oid()`
      strbuf.c: add `strbuf_join_argv()`
      strbuf.c: add `strbuf_insertf()` and `strbuf_vinsertf()`
      t3903: modernize style
      stash: rename test cases to be more descriptive
      stash: add tests for `git stash show` config
      stash: mention options in `show` synopsis
      stash: convert list to builtin
      stash: convert show to builtin
      stash: convert store to builtin
      stash: convert create to builtin
      stash: convert push to builtin
      stash: make push -q quiet
      stash: convert save to builtin
      stash: optimize `get_untracked_files()` and `check_changes()`
      stash: replace all `write-tree` child processes with API calls
      stash: convert `stash--helper.c` into `stash.c`

Philip Oakley (2):
      rerere doc: quote `rerere.enabled`
      describe doc: remove '7-char' abbreviation reference

Phillip Wood (21):
      am/cherry-pick/rebase/revert: document --rerere-autoupdate
      merge: tweak --rerere-autoupdate documentation
      sequencer: break some long lines
      cherry-pick: demonstrate option amnesia
      cherry-pick --continue: remember options
      commit/reset: try to clean up sequencer state
      fix cherry-pick/revert status after commit
      sequencer: fix cleanup with --signoff and -x
      sequencer.c: save and restore cleanup mode
      sequencer: always discard index after checkout
      rebase: don't translate trace strings
      rebase: rename write_basic_state()
      rebase: use OPT_RERERE_AUTOUPDATE()
      rebase -i: combine rebase--interactive.c with rebase.c
      rebase -i: remove duplication
      rebase -i: use struct commit when parsing options
      rebase -i: use struct object_id for squash_onto
      rebase -i: use struct rebase_options to parse args
      rebase -i: use struct rebase_options in do_interactive_rebase()
      rebase: use a common action enum
      rebase -i: run without forking rebase--interactive

Ramsay Jones (2):
      prune-packed: check for too many arguments
      Makefile: fix 'hdr-check' when GCRYPT not installed

René Scharfe (1):
      get-tar-commit-id: parse comment record

Robert P. J. Day (3):
      mention use of "hooks.allownonascii" in "man githooks"
      docs/git-gc: fix typo "--prune=all" to "--prune=now"
      attr.c: ".gitattribute" -> ".gitattributes" (comments)

Rohit Ashiwal (3):
      test functions: add function `test_file_not_empty`
      t3600: modernize style
      t3600: use helpers to replace test -d/f/e/s <path>

SZEDER Gábor (27):
      test-lib: fix interrupt handling with 'dash' and '--verbose-log -x'
      t/lib-git-daemon: make sure to kill the 'git-daemon' process
      tests: use 'test_atexit' to stop httpd
      t0301-credential-cache: use 'test_atexit' to stop the credentials helper
      git p4 test: clean up the p4d cleanup functions
      git p4 test: simplify timeout handling
      git p4 test: disable '-x' tracing in the p4d watchdog loop
      t9811-git-p4-label-import: fix pipeline negation
      t5318-commit-graph: remove unused variable
      Documentation/git-diff-tree.txt: fix formatting
      Documentation/technical/api-config.txt: fix formatting
      Documentation/technical/protocol-v2.txt: fix formatting
      ci: install Asciidoctor in 'ci/install-dependencies.sh'
      index-pack: show progress while checking objects
      ci: stick with Asciidoctor v1.5.8 for now
      ci: fix AsciiDoc/Asciidoctor stderr check in the documentation build job
      progress: make display_progress() return void
      progress: assemble percentage and counters in a strbuf before printing
      blame: default to HEAD in a bare repo when no start commit is given
      builtin rebase: use FREE_AND_NULL
      builtin rebase: use oideq()
      progress: clear previous progress update dynamically
      progress: break too long progress bar lines
      ci: install 'libsvn-perl' instead of 'git-svn'
      trace2: rename environment variables to GIT_TRACE2*
      trace2: document the supported values of GIT_TRACE2* env variables
      progress: avoid empty line when breaking the progress line

Sun Chao (2):
      pack-redundant: delete redundant code
      pack-redundant: new algorithm to find min packs

Sven Strickroth (1):
      MSVC: include compat/win32/path-utils.h for MSVC, too, for real_path()

Tanushree Tumane (1):
      mingw: remove obsolete IPv6-related code

Taylor Blau (4):
      t: move 'hex2oct' into test-lib-functions.sh
      t: introduce tests for unexpected object types
      list-objects.c: handle unexpected non-blob entries
      list-objects.c: handle unexpected non-tree entries

Thomas Gummerer (15):
      move worktree tests to t24*
      entry: factor out unlink_entry function
      entry: support CE_WT_REMOVE flag in checkout_entry
      read-cache: add invalidate parameter to remove_marked_cache_entries
      checkout: clarify comment
      checkout: factor out mark_cache_entry_for_checkout function
      checkout: introduce --{,no-}overlay option
      checkout: introduce checkout.overlayMode config
      revert "checkout: introduce checkout.overlayMode config"
      ident: don't require calling prepare_fallback_ident first
      stash: drop unused parameter
      stash: pass pathspec as pointer
      glossary: add definition for overlay
      stash: setup default diff output format if necessary
      ls-files: use correct format string

Todd Zullinger (9):
      t4038-diff-combined: quote paths with whitespace
      t9902: test multiple removals via completion.commands
      completion: use __git when calling --list-cmds
      Documentation/rev-list-options: wrap --date=<format> block with "--"
      Documentation/git-status: fix titles in porcelain v2 section
      Documentation/git-svn: improve asciidoctor compatibility
      Documentation/git-show-branch: avoid literal {apostrophe}
      test-lib: try harder to ensure a working jgit
      RelNotes: minor typo fixes in 2.22.0 draft

Torsten Bögershausen (1):
      trace2: NULL is not allowed for va_list

Trần Ngọc Quân (1):
      l10n: Updated Vietnamese translation for v2.21 rd2

Vadim Kochan (1):
      autoconf: #include <libintl.h> when checking for gettext()

William Hubbs (1):
      config: allow giving separate author and committer idents

Yash Bhatambare (1):
      gitattributes.txt: fix typo

brian m. carlson (35):
      t/lib-submodule-update: use appropriate length constant
      khash: move oid hash table definition
      pack-bitmap: make bitmap header handling hash agnostic
      pack-bitmap: convert struct stored_bitmap to object_id
      pack-bitmap: replace sha1_to_hex
      pack-bitmap: switch hard-coded constants to the_hash_algo
      pack-bitmap: switch hash tables to use struct object_id
      submodule: avoid hard-coded constants
      notes-merge: switch to use the_hash_algo
      notes: make hash size independent
      notes: replace sha1_to_hex
      object-store: rename and expand packed_git's sha1 member
      builtin/name-rev: make hash-size independent
      fast-import: make hash-size independent
      fast-import: replace sha1_to_hex
      builtin/am: make hash size independent
      builtin/pull: make hash-size independent
      http-push: convert to use the_hash_algo
      http-backend: allow 64-character hex names
      http-push: remove remaining uses of sha1_to_hex
      http-walker: replace sha1_to_hex
      http: replace hard-coded constant with the_hash_algo
      http: compute hash of downloaded objects using the_hash_algo
      http: replace sha1_to_hex
      remote-curl: make hash size independent
      hash: add a function to lookup hash algorithm by length
      builtin/get-tar-commit-id: make hash size independent
      archive: convert struct archiver_args to object_id
      refspec: make hash size independent
      builtin/difftool: use parse_oid_hex
      dir: make untracked cache extension hash size independent
      read-cache: read data in a hash-independent way
      Git.pm: make hash size independent
      gitweb: make hash size independent
      send-email: default to quoted-printable when CR is present

Ævar Arnfjörð Bjarmason (44):
      receive-pack: fix use-after-free bug
      commit-graph tests: split up corrupt_graph_and_verify()
      commit-graph tests: test a graph that's too small
      Makefile: remove an out-of-date comment
      Makefile: move "strip" assignment down from flags
      Makefile: add/remove comments at top and tweak whitespace
      Makefile: Move *_LIBS assignment into its own section
      Makefile: move the setting of *FLAGS closer to "include"
      Makefile: allow for combining DEVELOPER=1 and CFLAGS="..."
      gc: remove redundant check for gc_auto_threshold
      gc: convert to using the_hash_algo
      gc: refactor a "call me once" pattern
      reflog tests: make use of "test_config" idiom
      reflog tests: test for the "points nowhere" warning
      rebase: remove the rebase.useBuiltin setting
      gc docs: modernize the advice for manually running "gc"
      gc docs: stop noting "repack" flags
      gc docs: clean grammar for "gc.bigPackThreshold"
      commit-graph: fix segfault on e.g. "git status"
      commit-graph: don't early exit(1) on e.g. "git status"
      commit-graph: don't pass filename to load_commit_graph_one_fd_st()
      commit-graph verify: detect inability to read the graph
      commit-graph write: don't die if the existing graph is corrupt
      commit-graph: improve & i18n error messages
      reflog tests: assert lack of early exit with expiry="never"
      gc: handle & check gc.reflogExpire config
      test-lib: whitelist GIT_TR2_* in the environment
      gc docs: include the "gc.*" section from "config" in "gc"
      gc docs: re-flow the "gc.*" section in "config"
      gc docs: fix formatting for "gc.writeCommitGraph"
      gc docs: note how --aggressive impacts --window & --depth
      gc docs: downplay the usefulness of --aggressive
      gc docs: note "gc --aggressive" in "fast-import"
      gc docs: clarify that "gc" doesn't throw away referenced objects
      gc docs: remove incorrect reference to gc.auto=0
      perf README: correct docs for 3c8f12c96c regression
      perf aggregate: remove GIT_TEST_INSTALLED from --codespeed
      perf-lib.sh: make "./run <revisions>" use the correct gits
      perf-lib.sh: remove GIT_TEST_INSTALLED from perf-lib.sh
      perf tests: add "bindir" prefix to git tree test results
      perf-lib.sh: forbid the use of GIT_TEST_INSTALLED
      trace2: fix up a missing "leave" entry point
      trace2: fix up a missing "leave" entry point
      sha1dc: update from upstream

İsmail Dönmez (2):
      mingw: do not let ld strip relocations
      mingw: enable DEP and ASLR


^ permalink raw reply	[relevance 2%]

* Re: [ANNOUNCE] Git v2.22.0-rc1
  2019-05-19  9:04  2% [ANNOUNCE] Git v2.22.0-rc1 Junio C Hamano
@ 2019-05-19 20:30  0% ` Johannes Schindelin
  0 siblings, 0 replies; 162+ results
From: Johannes Schindelin @ 2019-05-19 20:30 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, git-for-windows, git-packagers

[-- Attachment #1: Type: text/plain, Size: 71780 bytes --]

Team,

Git for Windows v2.22.0-rc1 is available here:

	https://github.com/git-for-windows/git/releases/tag/v2.22.0-rc1.windows.1

Thanks,
Johannes

On Sun, 19 May 2019, Junio C Hamano wrote:

> A release candidate Git v2.22.0-rc1 is now available for testing
> at the usual places.  It is comprised of 699 non-merge commits
> since v2.21.0, contributed by 66 people, 16 of which are new faces.
>
> The tarballs are found at:
>
>     https://www.kernel.org/pub/software/scm/git/testing/
>
> The following public repositories all have a copy of the
> 'v2.22.0-rc1' tag and the 'master' branch that the tag points at:
>
>   url = https://kernel.googlesource.com/pub/scm/git/git
>   url = git://repo.or.cz/alt-git.git
>   url = https://github.com/gitster/git
>
> New contributors whose contributions weren't in v2.21.0 are as follows.
> Welcome to the Git development community!
>
>   Alexander Blesius, Baruch Siach, Boxuan Li, Chris Mayo,
>   Chris. Webster, Clément Chigot, Corentin BOMPARD, Damien
>   Robert, Dustin Spicuzza, Michal Suchanek, Rohit Ashiwal,
>   Sun Chao, Tanushree Tumane, Vadim Kochan, William Hubbs, and
>   Yash Bhatambare.
>
> Returning contributors who helped this release are as follows.
> Thanks for your continued support.
>
>   Ævar Arnfjörð Bjarmason, Alban Gruin, Alexander Shopov, Anders
>   Waldenborg, Andreas Heiduk, Andrei Rybak, Beat Bolli, Ben Peart,
>   Brandon Richardson, brian m. carlson, Carlo Marcelo Arenas
>   Belón, Christian Couder, Daniels Umanovskis, David Aguilar,
>   David Kastrup, Denton Liu, Derrick Stolee, Elijah Newren, Eric
>   Sunshine, Eric Wong, İsmail Dönmez, Jean-Noël Avila, Jeff
>   Hostetler, Jeff King, Jiang Xin, Joel Teichroeb, Joey Hess,
>   Johannes Schindelin, Jonathan Tan, Jordi Mas, Josh Steadmon,
>   Junio C Hamano, Kyle Meyer, Martin Ågren, Matthew Kraai, Mike
>   Hommey, Nguyễn Thái Ngọc Duy, Paul-Sebastian Ungureanu,
>   Philip Oakley, Phillip Wood, Ramsay Jones, René Scharfe,
>   Robert P. J. Day, Sven Strickroth, SZEDER Gábor, Taylor Blau,
>   Thomas Gummerer, Todd Zullinger, Torsten Bögershausen, and
>   Trần Ngọc Quân.
>
> ----------------------------------------------------------------
>
> Git 2.22 Release Notes (draft)
> ==============================
>
> Updates since v2.21
> -------------------
>
> UI, Workflows & Features
>
>  * "git checkout --no-overlay" can be used to trigger a new mode of
>    checking out paths out of the tree-ish, that allows paths that
>    match the pathspec that are in the current index and working tree
>    and are not in the tree-ish.
>
>  * The %(trailers) formatter in "git log --format=..."  now allows to
>    optionally pick trailers selectively by keyword, show only values,
>    etc.
>
>  * Four new configuration variables {author,committer}.{name,email}
>    have been introduced to override user.{name,email} in more specific
>    cases.
>
>  * Command-line completion (in contrib/) learned to tab-complete the
>    "git submodule absorbgitdirs" subcommand.
>
>  * "git branch" learned a new subcommand "--show-current".
>
>  * Output from "diff --cc" did not show the original paths when the
>    merge involved renames.  A new option adds the paths in the
>    original trees to the output.
>
>  * The command line completion (in contrib/) has been taught to
>    complete more subcommand parameters.
>
>  * The final report from "git bisect" used to show the suspected
>    culprit using a raw "diff-tree", with which there is no output for
>    a merge commit.  This has been updated to use a more modern and
>    human readable output that still is concise enough.
>
>  * "git rebase --rebase-merges" replaces its old "--preserve-merges"
>    option; the latter is now marked as deprecated.
>
>  * Error message given while cloning with --recurse-submodules has
>    been updated.
>
>  * The completion helper code now pays attention to repository-local
>    configuration (when available), which allows --list-cmds to honour
>    a repository specific setting of completion.commands, for example.
>
>  * "git mergetool" learned to offer Sublime Merge (smerge) as one of
>    its backends.
>
>  * A new hook "post-index-change" is called when the on-disk index
>    file changes, which can help e.g. a virtualized working tree
>    implementation.
>
>  * "git difftool" can now run outside a repository.
>
>  * "git checkout -m <other>" was about carrying the differences
>    between HEAD and the working-tree files forward while checking out
>    another branch, and ignored the differences between HEAD and the
>    index.  The command has been taught to abort when the index and the
>    HEAD are different.
>
>  * A progress indicator has been added to the "index-pack" step, which
>    often makes users wait for completion during "git clone".
>
>  * "git submodule" learns "set-branch" subcommand that allows the
>    submodule.*.branch settings to be modified.
>
>  * "git merge-recursive" backend recently learned a new heuristics to
>    infer file movement based on how other files in the same directory
>    moved.  As this is inherently less robust heuristics than the one
>    based on the content similarity of the file itself (rather than
>    based on what its neighbours are doing), it sometimes gives an
>    outcome unexpected by the end users.  This has been toned down to
>    leave the renamed paths in higher/conflicted stages in the index so
>    that the user can examine and confirm the result.
>
>  * "git tag" learned to give an advice suggesting it might be a
>    mistake when creating an annotated or signed tag that points at
>    another tag.
>
>  * The "git pack-objects" command learned to report the number of
>    objects it packed via the trace2 mechanism.
>
>  * The list of conflicted paths shown in the editor while concluding a
>    conflicted merge was shown above the scissors line when the
>    clean-up mode is set to "scissors", even though it was commented
>    out just like the list of updated paths and other information to
>    help the user explain the merge better.
>
>  * The trace2 tracing facility learned to auto-generate a filename
>    when told to log to a directory.
>
>  * "git clone" learned a new --server-option option when talking over
>    the protocol version 2.
>
>  * The connectivity bitmaps are created by default in bare
>    repositories now; also the pathname hash-cache is created by
>    default to avoid making crappy deltas when repacking.
>
>  * "git branch new A...B" and "git checkout -b new A...B" have been
>    taught that in their contexts, the notation A...B means "the merge
>    base between these two commits", just like "git checkout A...B"
>    detaches HEAD at that commit.
>
>  * Update "git difftool" and "git mergetool" so that the combinations
>    of {diff,merge}.{tool,guitool} configuration variables serve as
>    fallback settings of each other in a sensible order.
>
>  * The "--dir-diff" mode of "git difftool" is not useful in "--no-index"
>    mode; they are now explicitly marked as mutually incompatible.
>
>
> Performance, Internal Implementation, Development Support etc.
>
>  * The diff machinery, one of the oldest parts of the system, which
>    long predates the parse-options API, uses fairly long and complex
>    handcrafted option parser.  This is being rewritten to use the
>    parse-options API.
>
>  * The implementation of pack-redundant has been updated for
>    performance in a repository with many packfiles.
>
>  * A more structured way to obtain execution trace has been added.
>
>  * "git prune" has been taught to take advantage of reachability
>    bitmap when able.
>
>  * The command line parser of "git commit-tree" has been rewritten to
>    use the parse-options API.
>
>  * Suggest GitGitGadget instead of submitGit as a way to submit
>    patches based on GitHub PR to us.
>
>  * The test framework has been updated to help developers by making it
>    easier to run most of the tests under different versions of
>    over-the-wire protocols.
>
>  * Dev support update to make it easier to compare two formatted
>    results from our documentation.
>
>  * The scripted "git rebase" implementation has been retired.
>
>  * "git multi-pack-index verify" did not scale well with the number of
>    packfiles, which is being improved.
>
>  * "git stash" has been rewritten in C.
>
>  * The "check-docs" Makefile target to support developers has been
>    updated.
>
>  * The tests have been updated not to rely on the abbreviated option
>    names the parse-options API offers, to protect us from an
>    abbreviated form of an option that used to be unique within the
>    command getting non-unique when a new option that share the same
>    prefix is added.
>
>  * The scripted version of "git rebase -i" wrote and rewrote the todo
>    list many times during a single step of its operation, and the
>    recent C-rewrite made a faithful conversion of the logic to C.  The
>    implementation has been updated to carry necessary information
>    around in-core to avoid rewriting the same file over and over
>    unnecessarily.
>
>  * Test framework update to more robustly clean up leftover files and
>    processes after tests are done.
>
>  * Conversion from unsigned char[20] to struct object_id continues.
>
>  * While running "git diff" in a lazy clone, we can upfront know which
>    missing blobs we will need, instead of waiting for the on-demand
>    machinery to discover them one by one.  The code learned to aim to
>    achieve better performance by batching the request for these
>    promised blobs.
>
>  * During an initial "git clone --depth=..." partial clone, it is
>    pointless to spend cycles for a large portion of the connectivity
>    check that enumerates and skips promisor objects (which by
>    definition is all objects fetched from the other side).  This has
>    been optimized out.
>
>  * Mechanically and systematically drop "extern" from function
>    declarlation.
>
>  * The script to aggregate perf result unconditionally depended on
>    libjson-perl even though it did not have to, which has been
>    corrected.
>
>  * The internal implementation of "git rebase -i" has been updated to
>    avoid forking a separate "rebase--interactive" process.
>
>  * Allow DEP and ASLR for Windows build to for security hardening.
>
>  * Performance test framework has been broken and measured the version
>    of Git that happens to be on $PATH, not the specified one to
>    measure, for a while, which has been corrected.
>
>  * Optionally "make coccicheck" can feed multiple source files to
>    spatch, gaining performance while spending more memory.
>
>  * Attempt to use an abbreviated option in "git clone --recurs" is
>    responded by a request to disambiguate between --recursive and
>    --recurse-submodules, which is bad because these two are synonyms.
>    The parse-options API has been extended to define such synonyms
>    more easily and not produce an unnecessary failure.
>
>  * A pair of private functions in http.c that had names similar to
>    fread/fwrite did not return the number of elements, which was found
>    to be confusing.
>
>  * Update collision-detecting SHA-1 code to build properly on HP-UX.
>
>
> Fixes since v2.21
> -----------------
>
>  * "git prune-packed" did not notice and complain against excess
>    arguments given from the command line, which now it does.
>    (merge 9b0bd87ed2 rj/prune-packed-excess-args later to maint).
>
>  * Split-index fix.
>    (merge 6e37c8ed3c nd/split-index-null-base-fix later to maint).
>
>  * "git diff --no-index" may still want to access Git goodies like
>    --ext-diff and --textconv, but so far these have been ignored,
>    which has been corrected.
>    (merge 287ab28bfa jk/diff-no-index-initialize later to maint).
>
>  * Unify RPC code for smart http in protocol v0/v1 and v2, which fixes
>    a bug in the latter (lack of authentication retry) and generally
>    improves the code base.
>    (merge a97d00799a jt/http-auth-proto-v2-fix later to maint).
>
>  * The include file compat/bswap.h has been updated so that it is safe
>    to (accidentally) include it more than once.
>    (merge 33aa579a55 jk/guard-bswap-header later to maint).
>
>  * The set of header files used by "make hdr-check" unconditionally
>    included sha256/gcrypt.h, even when it is not used, causing the
>    make target to fail.  We now skip it when GCRYPT_SHA256 is not in
>    use.
>    (merge f23aa18e7f rj/hdr-check-gcrypt-fix later to maint).
>
>  * The Makefile uses 'find' utility to enumerate all the *.h header
>    files, which is expensive on platforms with slow filesystems; it
>    now optionally uses "ls-files" if working within a repository,
>    which is a trick similar to how all sources are enumerated to run
>    ETAGS on.
>    (merge 92b88eba9f js/find-lib-h-with-ls-files-when-possible later to maint).
>
>  * "git rebase" that was reimplemented in C did not set ORIG_HEAD
>    correctly, which has been corrected.
>    (merge cbd29ead92 js/rebase-orig-head-fix later to maint).
>
>  * Dev support.
>    (merge f545737144 js/stress-test-ui-tweak later to maint).
>
>  * CFLAGS now can be tweaked when invoking Make while using
>    DEVELOPER=YesPlease; this did not work well before.
>    (merge 6d5d4b4e93 ab/makefile-help-devs-more later to maint).
>
>  * "git fsck --connectivity-only" omits computation necessary to sift
>    the objects that are not reachable from any of the refs into
>    unreachable and dangling.  This is now enabled when dangling
>    objects are requested (which is done by default, but can be
>    overridden with the "--no-dangling" option).
>    (merge 8d8c2a5aef jk/fsck-doc later to maint).
>
>  * On platforms where "git fetch" is killed with SIGPIPE (e.g. OSX),
>    the upload-pack that runs on the other end that hangs up after
>    detecting an error could cause "git fetch" to die with a signal,
>    which led to a flakey test.  "git fetch" now ignores SIGPIPE during
>    the network portion of its operation (this is not a problem as we
>    check the return status from our write(2)s).
>    (merge 143588949c jk/no-sigpipe-during-network-transport later to maint).
>
>  * A recent update broke "is this object available to us?" check for
>    well-known objects like an empty tree (which should yield "yes",
>    even when there is no on-disk object for an empty tree), which has
>    been corrected.
>    (merge f06ab027ef jk/virtual-objects-do-exist later to maint).
>
>  * The setup code has been cleaned up to avoid leaks around the
>    repository_format structure.
>    (merge e8805af1c3 ma/clear-repository-format later to maint).
>
>  * "git config --type=color ..." is meant to replace "git config --get-color"
>    but there is a slight difference that wasn't documented, which is
>    now fixed.
>    (merge cd8e7593b9 jk/config-type-color-ends-with-lf later to maint).
>
>  * When the "clean" filter can reduce the size of a huge file in the
>    working tree down to a small "token" (a la Git LFS), there is no
>    point in allocating a huge scratch area upfront, but the buffer is
>    sized based on the original file size.  The convert mechanism now
>    allocates very minimum and reallocates as it receives the output
>    from the clean filter process.
>    (merge 02156ab031 jh/resize-convert-scratch-buffer later to maint).
>
>  * "git rebase" uses the refs/rewritten/ hierarchy to store its
>    intermediate states, which inherently makes the hierarchy per
>    worktree, but it didn't quite work well.
>    (merge b9317d55a3 nd/rewritten-ref-is-per-worktree later to maint).
>
>  * "git log -L<from>,<to>:<path>" with "-s" did not suppress the patch
>    output as it should.  This has been corrected.
>    (merge 05314efaea jk/line-log-with-patch later to maint).
>
>  * "git worktree add" used to do a "find an available name with stat
>    and then mkdir", which is race-prone.  This has been fixed by using
>    mkdir and reacting to EEXIST in a loop.
>    (merge 7af01f2367 ms/worktree-add-atomic-mkdir later to maint).
>
>  * Build update for SHA-1 with collision detection.
>    (merge 07a20f569b jk/sha1dc later to maint).
>
>  * Build procedure has been fixed around use of asciidoctor instead of
>    asciidoc.
>    (merge 185f9a0ea0 ma/asciidoctor-fixes later to maint).
>
>  * remote-http transport did not anonymize URLs reported in its error
>    messages at places.
>    (merge c1284b21f2 js/anonymize-remote-curl-diag later to maint).
>
>  * Error messages given from the http transport have been updated so
>    that they can be localized.
>    (merge ed8b4132c8 js/remote-curl-i18n later to maint).
>
>  * "git init" forgot to read platform-specific repository
>    configuration, which made Windows port to ignore settings of
>    core.hidedotfiles, for example.
>
>  * A corner-case object name ambiguity while the sequencer machinery
>    is working (e.g. "rebase -i -x") has been fixed.
>
>  * "git format-patch" did not diagnose an error while opening the
>    output file for the cover-letter, which has been corrected.
>    (merge 2fe95f494c jc/format-patch-error-check later to maint).
>
>  * "git checkout -f <branch>" while the index has an unmerged path
>    incorrectly left some paths in an unmerged state, which has been
>    corrected.
>
>  * A corner case bug in the refs API has been corrected.
>    (merge d3322eb28b jk/refs-double-abort later to maint).
>
>  * Unicode update.
>    (merge 584b62c37b bb/unicode-12 later to maint).
>
>  * dumb-http walker has been updated to share more error recovery
>    strategy with the normal codepath.
>
>  * A buglet in configuration parser has been fixed.
>    (merge 19e7fdaa58 nd/include-if-wildmatch later to maint).
>
>  * The documentation for "git read-tree --reset -u" has been updated.
>    (merge b5a0bd694c nd/read-tree-reset-doc later to maint).
>
>  * Code clean-up around a much-less-important-than-it-used-to-be
>    update_server_info() funtion.
>    (merge b3223761c8 jk/server-info-rabbit-hole later to maint).
>
>  * The message given when "git commit -a <paths>" errors out has been
>    updated.
>    (merge 5a1dbd48bc nd/commit-a-with-paths-msg-update later to maint).
>
>  * "git cherry-pick --options A..B", after giving control back to the
>    user to ask help resolving a conflicted step, did not honor the
>    options it originally received, which has been corrected.
>
>  * Various glitches in "git gc" around reflog handling have been fixed.
>
>  * The code to read from commit-graph file has been cleanup with more
>    careful error checking before using data read from it.
>
>  * Performance fix around "git fetch" that grabs many refs.
>    (merge b764300912 jt/fetch-pack-wanted-refs-optim later to maint).
>
>  * Protocol v2 support in "git fetch-pack" of shallow clones has been
>    corrected.
>
>  * Performance fix around "git blame", especially in a linear history
>    (which is the norm we should optimize for).
>    (merge f892014943 dk/blame-keep-origin-blob later to maint).
>
>  * Performance fix for "rev-list --parents -- pathspec".
>    (merge 8320b1dbe7 jk/revision-rewritten-parents-in-prio-queue later to maint).
>
>  * Updating the display with progress message has been cleaned up to
>    deal better with overlong messages.
>    (merge 545dc345eb sg/overlong-progress-fix later to maint).
>
>  * "git blame -- path" in a non-bare repository starts blaming from
>    the working tree, and the same command in a bare repository errors
>    out because there is no working tree by definition.  The command
>    has been taught to instead start blaming from the commit at HEAD,
>    which is more useful.
>    (merge a544fb08f8 sg/blame-in-bare-start-at-head later to maint).
>
>  * An underallocation in the code to read the untracked cache
>    extension has been corrected.
>    (merge 3a7b45a623 js/untracked-cache-allocfix later to maint).
>
>  * The code is updated to check the result of memory allocation before
>    it is used in more places, by using xmalloc and/or xcalloc calls.
>    (merge 999b951b28 jk/xmalloc later to maint).
>
>  * The GETTEXT_POISON test option has been quite broken ever since it
>    was made runtime-tunable, which has been fixed.
>    (merge f88b9cb603 jc/gettext-test-fix later to maint).
>
>  * Test fix on APFS that is incapable of store paths in Latin-1.
>    (merge 3889149619 js/iso8895-test-on-apfs later to maint).
>
>  * "git submodule foreach <command> --quiet" did not pass the option
>    down correctly, which has been corrected.
>    (merge a282f5a906 nd/submodule-foreach-quiet later to maint).
>
>  * "git send-email" has been taught to use quoted-printable when the
>    payload contains carriage-return.  The use of the mechanism is in
>    line with the design originally added the codepath that chooses QP
>    when the payload has overly long lines.
>    (merge 74d76a1701 bc/send-email-qp-cr later to maint).
>
>  * The recently added feature to add addresses that are on
>    anything-by: trailers in 'git send-email' was found to be way too
>    eager and considered nonsense strings as if they can be legitimate
>    beginning of *-by: trailer.  This has been tightened.
>
>  * Builds with gettext broke on recent macOS w/ Homebrew, which
>    seems to have stopped including from /usr/local/include; this
>    has been corrected.
>    (merge 92a1377a2a js/macos-gettext-build later to maint).
>
>  * Running "git add" on a repository created inside the current
>    repository is an explicit indication that the user wants to add it
>    as a submodule, but when the HEAD of the inner repository is on an
>    unborn branch, it cannot be added as a submodule.  Worse, the files
>    in its working tree can be added as if they are a part of the outer
>    repository, which is not what the user wants.  These problems are
>    being addressed.
>    (merge f937bc2f86 km/empty-repo-is-still-a-repo later to maint).
>
>  * "git cherry-pick" run with the "-x" or the "--signoff" option used
>    to (and more importantly, ought to) clean up the commit log message
>    with the --cleanup=space option by default, but this has been
>    broken since late 2017.  This has been fixed.
>
>  * When given a tag that points at a commit-ish, "git replace --graft"
>    failed to peel the tag before writing a replace ref, which did not
>    make sense because the old graft mechanism the feature wants to
>    mimick only allowed to replace one commit object with another.
>    This has been fixed.
>    (merge ee521ec4cb cc/replace-graft-peel-tags later to maint).
>
>  * Code tightening against a "wrong" object appearing where an object
>    of a different type is expected, instead of blindly assuming that
>    the connection between objects are correctly made.
>    (merge 97dd512af7 tb/unexpected later to maint).
>
>  * An earlier update for MinGW and Cygwin accidentally broke MSVC build,
>    which has been fixed.
>    (merge 22c3634c0f ss/msvc-path-utils-fix later to maint).
>
>  * %(push:track) token used in the --format option to "git
>    for-each-ref" and friends was not showing the right branch, which
>    has been fixed.
>    (merge c646d0934e dr/ref-filter-push-track-fix later to maint).
>
>  * "make check-docs", "git help -a", etc. did not account for cases
>    where a particular build may deliberately omit some subcommands,
>    which has been corrected.
>
>  * The logic to tell if a Git repository has a working tree protects
>    "git branch -D" from removing the branch that is currently checked
>    out by mistake.  The implementation of this logic was broken for
>    repositories with unusual name, which unfortunately is the norm for
>    submodules these days.  This has been fixed.
>    (merge f3534c98e4 jt/submodule-repo-is-with-worktree later to maint).
>
>  * AIX shared the same build issues with other BSDs around fileno(fp),
>    which has been corrected.
>    (merge ee662bf5c6 cc/aix-has-fileno-as-a-macro later to maint).
>
>  * The autoconf generated configure script failed to use the right
>    gettext() implementations from -libintl by ignoring useless stub
>    implementations shipped in some C library, which has been
>    corrected.
>    (merge b71e56a683 vk/autoconf-gettext later to maint).
>
>  * Fix index-pack perf test so that the repeated invocations always
>    run in an empty repository, which emulates the initial clone
>    situation better.
>    (merge 775c71e16d jk/p5302-avoid-collision-check-cost later to maint).
>
>  * A "ls-files" that emulates "find" to enumerate files in the working
>    tree resulted in duplicated Makefile rules that caused the build to
>    issue an unnecessary warning during a trial build after merge
>    conflicts are resolved in working tree *.h files but before the
>    resolved results are added to the index.  This has been corrected.
>
>  * "git chery-pick" (and "revert" that shares the same runtime engine)
>    that deals with multiple commits got confused when the final step
>    gets stopped with a conflict and the user concluded the sequence
>    with "git commit".  Attempt to fix it by cleaning up the state
>    files used by these commands in such a situation.
>    (merge 4a72486de9 pw/clean-sequencer-state-upon-final-commit later to maint).
>
>  * On a filesystem like HFS+, the names of the refs stored as filesystem
>    entities may become different from what the end-user expects, just
>    like files in the working tree get "renamed".  Work around the
>    mismatch by paying attention to the core.precomposeUnicode
>    configuration.
>    (merge 8e712ef6fc en/unicode-in-refnames later to maint).
>
>  * The code to generate the multi-pack idx file was not prepared to
>    see too many packfiles and ran out of open file descriptor, which
>    has been corrected.
>
>  * To run tests for Git SVN, our scripts for CI used to install the
>    git-svn package (in the hope that it would bring in the right
>    dependencies).  This has been updated to install the more direct
>    dependency, namely, libsvn-perl.
>    (merge db864306cf sg/ci-libsvn-perl later to maint).
>
>  * "git cvsexportcommit" running on msys did not expect cvsnt showed
>    "cvs status" output with CRLF line endings.
>
>  * The fsmonitor interface got out of sync after the in-core index
>    file gets discarded, which has been corrected.
>    (merge 398a3b0899 js/fsmonitor-refresh-after-discarding-index later to maint).
>
>  * "git status" did not know that the "label" instruction in the
>    todo-list "rebase -i -r" uses should not be shown as a hex object
>    name.
>
>  * A prerequiste check in the test suite to see if a working jgit is
>    available was made more robust.
>    (merge abd0f28983 tz/test-lib-check-working-jgit later to maint).
>
>  * The codepath to parse :<path> that obtains the object name for an
>    indexed object has been made more robust.
>
>  * Code cleanup, docfix, build fix, etc.
>    (merge 11f470aee7 jc/test-yes-doc later to maint).
>    (merge 90503a240b js/doc-symref-in-proto-v1 later to maint).
>    (merge 5c326d1252 jk/unused-params later to maint).
>    (merge 68cabbfda3 dl/doc-submodule-wo-subcommand later to maint).
>    (merge 9903623761 ab/receive-pack-use-after-free-fix later to maint).
>    (merge 1ede45e44b en/merge-options-doc later to maint).
>    (merge 3e14dd2c8e rd/doc-hook-used-in-sample later to maint).
>    (merge c271dc28fd nd/no-more-check-racy later to maint).
>    (merge e6e15194a8 yb/utf-16le-bom-spellfix later to maint).
>    (merge bb101aaf0c rd/attr.c-comment-typofix later to maint).
>    (merge 716a5af812 rd/gc-prune-doc-fix later to maint).
>    (merge 50b206371d js/untravis-windows later to maint).
>    (merge dbf47215e3 js/rebase-recreate-merge later to maint).
>    (merge 56cb2d30f8 dl/reset-doc-no-wrt-abbrev later to maint).
>    (merge 64eca306a2 ja/dir-rename-doc-markup-fix later to maint).
>    (merge af91b0230c dl/ignore-docs later to maint).
>    (merge 59a06e947b ra/t3600-test-path-funcs later to maint).
>    (merge e041d0781b ar/t4150-remove-cruft later to maint).
>    (merge 8d75a1d183 ma/asciidoctor-fixes-more later to maint).
>    (merge 74cc547b0f mh/pack-protocol-doc-fix later to maint).
>    (merge ed31851fa6 ab/doc-misc-typofixes later to maint).
>    (merge a7256debd4 nd/checkout-m-doc-update later to maint).
>    (merge 3a9e1ad78d jt/t5551-protocol-v2-does-not-have-half-auth later to maint).
>    (merge 0b918b75af sg/t5318-cleanup later to maint).
>    (merge 68ed71b53c cb/doco-mono later to maint).
>    (merge a34dca2451 nd/interpret-trailers-docfix later to maint).
>    (merge cf7b857a77 en/fast-import-parsing-fix later to maint).
>    (merge fe61ccbc35 po/rerere-doc-fmt later to maint).
>    (merge ffea0248bf po/describe-not-necessarily-7 later to maint).
>    (merge 7cb7283adb tg/ls-files-debug-format-fix later to maint).
>    (merge f64a21bd82 tz/doc-apostrophe-no-longer-needed later to maint).
>    (merge dbe7b41019 js/t3301-unbreak-notes-test later to maint).
>    (merge d8083e4180 km/t3000-retitle later to maint).
>    (merge 9e4cbccbd7 tz/git-svn-doc-markup-fix later to maint).
>    (merge da9ca955a7 jk/ls-files-doc-markup-fix later to maint).
>    (merge 6804ba3a58 cw/diff-highlight later to maint).
>    (merge 1a8787144d nd/submodule-helper-incomplete-line-fix later to maint).
>    (merge d9ef573837 jk/apache-lsan later to maint).
>    (merge c871fbee2b js/t6500-use-windows-pid-on-mingw later to maint).
>    (merge ce4c7bfc90 bl/t4253-exit-code-from-format-patch later to maint).
>    (merge 397a46db78 js/t5580-unc-alternate-test later to maint).
>    (merge d4907720a2 cm/notes-comment-fix later to maint).
>    (merge 9dde06de13 cb/http-push-null-in-message-fix later to maint).
>
> ----------------------------------------------------------------
>
> Changes since v2.21.0 are as follows:
>
> Alban Gruin (18):
>       sequencer: changes in parse_insn_buffer()
>       sequencer: make the todo_list structure public
>       sequencer: remove the 'arg' field from todo_item
>       sequencer: refactor transform_todos() to work on a todo_list
>       sequencer: introduce todo_list_write_to_file()
>       sequencer: refactor check_todo_list() to work on a todo_list
>       sequencer: refactor sequencer_add_exec_commands() to work on a todo_list
>       sequencer: refactor rearrange_squash() to work on a todo_list
>       sequencer: make sequencer_make_script() write its script to a strbuf
>       sequencer: change complete_action() to use the refactored functions
>       rebase--interactive: move sequencer_add_exec_commands()
>       rebase--interactive: move rearrange_squash_in_todo_file()
>       sequencer: refactor skip_unnecessary_picks() to work on a todo_list
>       rebase-interactive: use todo_list_write_to_file() in edit_todo_list()
>       rebase-interactive: append_todo_help() changes
>       rebase-interactive: rewrite edit_todo_list() to handle the initial edit
>       sequencer: use edit_todo_list() in complete_action()
>       rebase--interactive: move transform_todo_file()
>
> Alexander Blesius (1):
>       doc: fix typos in man pages
>
> Alexander Shopov (1):
>       gitk: Update Bulgarian translation (317t)
>
> Anders Waldenborg (7):
>       doc: group pretty-format.txt placeholders descriptions
>       pretty: allow %(trailers) options with explicit value
>       pretty: single return path in %(trailers) handling
>       pretty: allow showing specific trailers
>       pretty: add support for "valueonly" option in %(trailers)
>       strbuf: separate callback for strbuf_expand:ing literals
>       pretty: add support for separator option in %(trailers)
>
> Andreas Heiduk (1):
>       revisions.txt: remove ambibuity between <rev>:<path> and :<path>
>
> Andrei Rybak (1):
>       t4150: remove unused variable
>
> Baruch Siach (1):
>       send-email: don't cc *-by lines with '-' prefix
>
> Beat Bolli (1):
>       unicode: update the width tables to Unicode 12
>
> Ben Peart (1):
>       read-cache: add post-index-change hook
>
> Boxuan Li (1):
>       t4253-am-keep-cr-dos: avoid using pipes
>
> Brandon Richardson (1):
>       commit-tree: utilize parse-options api
>
> Carlo Marcelo Arenas Belón (1):
>       http-push: prevent format overflow warning with gcc >= 9
>
> Chris Mayo (1):
>       notes: correct documentation of format_display_notes()
>
> Chris. Webster (1):
>       diff-highlight: use correct /dev/null for UNIX and Windows
>
> Christian Couder (4):
>       t6050: use test_line_count instead of wc -l
>       t6050: redirect expected error output to a file
>       replace: peel tag when passing a tag as parent to --graft
>       replace: peel tag when passing a tag first to --graft
>
> Clément Chigot (2):
>       Makefile: use fileno macro work around on AIX
>       git-compat-util: work around for access(X_OK) under root
>
> Corentin BOMPARD (2):
>       doc/CodingGuidelines: URLs and paths as monospace
>       doc: format pathnames and URLs as monospace.
>
> Damien Robert (1):
>       ref-filter: use correct branch for %(push:track)
>
> Daniels Umanovskis (1):
>       branch: introduce --show-current display option
>
> David Aguilar (2):
>       mergetools: add support for smerge (Sublime Merge)
>       contrib/completion: add smerge to the mergetool completion candidates
>
> David Kastrup (1):
>       blame.c: don't drop origin blobs as eagerly
>
> Denton Liu (38):
>       completion: complete git submodule absorbgitdirs
>       git-submodule.txt: "--branch <branch>" option defaults to 'master'
>       submodule--helper: teach config subcommand --unset
>       submodule: document default behavior
>       git-reset.txt: clarify documentation
>       git-clean.txt: clarify ignore pattern files
>       docs: move core.excludesFile from git-add to gitignore
>       contrib/subtree: ensure only one rev is provided
>       midx.c: convert FLEX_ALLOC_MEM to FLEX_ALLOC_STR
>       cocci: FLEX_ALLOC_MEM to FLEX_ALLOC_STR
>       tag: fix formatting
>       submodule: teach set-branch subcommand
>       tag: advise on nested tags
>       t7600: clean up style
>       t3507: clean up style
>       t7604: clean up style
>       t7502: clean up style
>       commit: extract cleanup_mode functions to sequencer
>       parse-options.h: extract common --cleanup option
>       merge: cleanup messages like commit
>       merge: add scissors line on merge conflict
>       cherry-pick/revert: add scissors line on merge conflict
>       t7610: unsuppress output
>       t7610: add mergetool --gui tests
>       *.[ch]: remove extern from function declarations using spatch
>       *.[ch]: remove extern from function declarations using sed
>       *.[ch]: manually align parameter lists
>       t2018: cleanup in current test
>       branch: make create_branch accept a merge base rev
>       revisions.txt: change "rev" to "<rev>"
>       revisions.txt: mark optional rev arguments with []
>       revisions.txt: mention <rev>~ form
>       tag: fix typo in nested tagging hint
>       mergetool: use get_merge_tool function
>       mergetool--lib: create gui_mode function
>       mergetool: fallback to tool when guitool unavailable
>       difftool: make --gui, --tool and --extcmd mutually exclusive
>       difftool: fallback on merge.guitool
>
> Derrick Stolee (4):
>       trace2:data: pack-objects: add trace2 regions
>       midx: pass a repository pointer
>       midx: add packs to packed_git linked list
>       trace2: add variable description to git.txt
>
> Dustin Spicuzza (1):
>       cvsexportcommit: force crlf translation
>
> Elijah Newren (23):
>       log,diff-tree: add --combined-all-paths option
>       merge-options.txt: correct wording of --no-commit option
>       t9300: demonstrate bug with get-mark and empty orphan commits
>       git-fast-import.txt: fix wording about where ls command can appear
>       fast-import: check most prominent commands first
>       fast-import: only allow cat-blob requests where it makes sense
>       fast-import: fix erroneous handling of get-mark with empty orphan commits
>       Use 'unsigned short' for mode, like diff_filespec does
>       merge-recursive: rename merge_options argument from 'o' to 'opt'
>       merge-recursive: rename diff_filespec 'one' to 'o'
>       merge-recursive: rename locals 'o' and 'a' to 'obuf' and 'abuf'
>       merge-recursive: use 'ci' for rename_conflict_info variable name
>       merge-recursive: move some struct declarations together
>       merge-recursive: shrink rename_conflict_info
>       merge-recursive: remove ren[12]_other fields from rename_conflict_info
>       merge-recursive: track branch where rename occurred in rename struct
>       merge-recursive: cleanup handle_rename_* function signatures
>       merge-recursive: switch from (oid,mode) pairs to a diff_filespec
>       t6043: fix copied test description to match its purpose
>       merge-recursive: track information associated with directory renames
>       merge-recursive: give callers of handle_content_merge() access to contents
>       merge-recursive: switch directory rename detection default
>       Honor core.precomposeUnicode in more places
>
> Eric Sunshine (1):
>       check-non-portable-shell: support Perl versions older than 5.10
>
> Eric Wong (1):
>       repack: enable bitmaps by default on bare repos
>
> Jean-Noël Avila (2):
>       l10n: fr.po remove obsolete entries
>       Doc: fix misleading asciidoc formating
>
> Jeff Hostetler (29):
>       trace2: Documentation/technical/api-trace2.txt
>       trace2: create new combined trace facility
>       trace2: collect Windows-specific process information
>       trace2:data: add trace2 regions to wt-status
>       trace2:data: add editor/pager child classification
>       trace2:data: add trace2 sub-process classification
>       trace2:data: add trace2 transport child classification
>       trace2:data: add subverb to checkout command
>       trace2:data: add subverb to reset command
>       trace2:data: add trace2 hook classification
>       trace2:data: add subverb for rebase
>       trace2:data: add trace2 instrumentation to index read/write
>       trace2: t/helper/test-trace2, t0210.sh, t0211.sh, t0212.sh
>       trace2: add for_each macros to clang-format
>       progress: add sparse mode to force 100% complete message
>       trace2:data: add trace2 data to midx
>       midx: add progress indicators in multi-pack-index verify
>       midx: during verify group objects by packfile to speed verification
>       config: initialize opts structure in repo_read_config()
>       trace2: refactor setting process starting time
>       trace2: add absolute elapsed time to start event
>       trace2: find exec-dir before trace2 initialization
>       config: add read_very_early_config()
>       trace2: use system/global config for default trace2 settings
>       trace2: report peak memory usage of the process
>       trace2: clarify UTC datetime formatting
>       trace2: make SIDs more unique
>       trace2: update docs to describe system/global config settings
>       trace2: fixup access problem on /etc/gitconfig in read_very_early_config
>
> Jeff King (92):
>       prune: lazily perform reachability traversal
>       prune: use bitmaps for reachability traversal
>       prune: check SEEN flag for reachability
>       t5304: rename "sha1" variables to "oid"
>       diff: drop options parameter from diffcore_fix_diff_index()
>       diff: drop unused color reset parameters
>       diff: drop unused emit data parameter from sane_truncate_line()
>       diff: drop complete_rewrite parameter from run_external_diff()
>       merge-recursive: drop several unused parameters
>       pack-objects: drop unused parameter from oe_map_new_pack()
>       files-backend: drop refs parameter from split_symref_update()
>       ref-filter: drop unused buf/sz pairs
>       ref-filter: drop unused "obj" parameters
>       ref-filter: drop unused "sz" parameters
>       diff: reuse diff setup for --no-index case
>       bisect: use string arguments to feed internal diff-tree
>       bisect: fix internal diff-tree config loading
>       bisect: make diff-tree output prettier
>       fetch: avoid calling write_or_die()
>       fetch: ignore SIGPIPE during network operation
>       rev-list: allow cached objects in existence check
>       doc/fsck: clarify --connectivity-only behavior
>       fsck: always compute USED flags for unreachable objects
>       compat/bswap: add include header guards
>       config: document --type=color output is a complete line
>       line-log: suppress diff output with "-s"
>       line-log: detect unsupported formats
>       point pull requesters to GitGitGadget
>       Makefile: fix unaligned loads in sha1dc with UBSan
>       t5310: correctly remove bitmaps for jgit test
>       pack-objects: default to writing bitmap hash-cache
>       perf-lib.sh: rely on test-lib.sh for --tee handling
>       revision: drop some unused "revs" parameters
>       log: drop unused rev_info from early output
>       log: drop unused "len" from show_tagger()
>       update-index: drop unused prefix_length parameter from do_reupdate()
>       test-date: drop unused "now" parameter from parse_dates()
>       unpack-trees: drop name_entry from traverse_by_cache_tree()
>       unpack-trees: drop unused error_type parameters
>       report_path_error(): drop unused prefix parameter
>       fetch_pack(): drop unused parameters
>       parse-options: drop unused ctx parameter from show_gitcomp()
>       pretty: drop unused "type" parameter in needs_rfc2047_encoding()
>       pretty: drop unused strbuf from parse_padding_placeholder()
>       git: read local config in --list-cmds
>       completion: fix multiple command removals
>       parse_opt_ref_sorting: always use with NONEG flag
>       refs/files-backend: handle packed transaction prepare failure
>       refs/files-backend: don't look at an aborted transaction
>       http: factor out curl result code normalization
>       http: normalize curl results for dumb loose and alternates fetches
>       http: use normalize_curl_result() instead of manual conversion
>       revision: use a prio_queue to hold rewritten parents
>       get_commit_tree(): return NULL for broken tree
>       rev-list: let traversal die when --missing is not in use
>       rev-list: detect broken root trees
>       test-prio-queue: use xmalloc
>       xdiff: use git-compat-util
>       xdiff: use xmalloc/xrealloc
>       progress: use xmalloc/xcalloc
>       t5516: drop ok=sigpipe from unreachable-want tests
>       t5530: check protocol response for "not our ref"
>       upload-pack: send ERR packet for non-tip objects
>       pkt-line: prepare buffer before handling ERR packets
>       fetch: use free_refs()
>       remote.c: make singular free_ref() public
>       fetch: do not consider peeled tags as advertised tips
>       packfile.h: drop extern from function declarations
>       pack-revindex: open index if necessary
>       t5319: fix bogus cat-file argument
>       t5319: drop useless --buffer from cat-file
>       midx: check both pack and index names for containment
>       packfile: fix pack basename computation
>       http: simplify parsing of remote objects/info/packs
>       server-info: fix blind pointer arithmetic
>       server-info: simplify cleanup in parse_pack_def()
>       server-info: use strbuf to read old info/packs file
>       server-info: drop nr_alloc struct member
>       server-info: drop objdirlen pointer arithmetic
>       update_info_refs(): drop unused force parameter
>       t5304: add a test for pruning with bitmaps
>       untracked-cache: be defensive about missing NULs in index
>       untracked-cache: simplify parsing by dropping "next"
>       untracked-cache: simplify parsing by dropping "len"
>       p5302: create the repo in each index-pack test
>       doc/ls-files: put nested list for "-t" option into block
>       t/perf: depend on perl JSON only when using --codespeed
>       t/perf: add perf script for partial clones
>       coccicheck: optionally batch spatch invocations
>       t/lib-httpd: pass LSAN_OPTIONS through apache
>       coccicheck: make batch size of 0 mean "unlimited"
>       get_oid: handle NULL repo->index
>
> Jiang Xin (4):
>       t5323: test cases for git-pack-redundant
>       pack-redundant: delay creation of unique_objects
>       pack-redundant: rename pack_list.all_objects
>       pack-redundant: consistent sort method
>
> Joel Teichroeb (5):
>       stash: improve option parsing test coverage
>       stash: convert apply to builtin
>       stash: convert drop and clear to builtin
>       stash: convert branch to builtin
>       stash: convert pop to builtin
>
> Joey Hess (1):
>       convert: avoid malloc of original file size
>
> Johannes Schindelin (63):
>       ident: add the ability to provide a "fallback identity"
>       travis: remove the hack to build the Windows job on Azure Pipelines
>       tests: let --stress-limit=<N> imply --stress
>       tests: introduce --stress-jobs=<N>
>       built-in rebase: no need to check out `onto` twice
>       built-in rebase: use the correct reflog when switching branches
>       built-in rebase: demonstrate that ORIG_HEAD is not set correctly
>       built-in rebase: set ORIG_HEAD just once, before the rebase
>       Makefile: use `git ls-files` to list header files, if possible
>       curl: anonymize URLs in error messages and warnings
>       remote-curl: mark all error messages for translation
>       stash: add back the original, scripted `git stash`
>       stash: optionally use the scripted version again
>       tests: add a special setup where stash.useBuiltin is off
>       legacy stash: fix "rudimentary backport of -q"
>       built-in stash: handle :(glob) pathspecs again
>       mingw: drop MakeMaker reference
>       mingw: allow building with an MSYS2 runtime v3.x
>       rebase: deprecate --preserve-merges
>       mingw: respect core.hidedotfiles = false in git-init again
>       test-lib: introduce 'test_atexit'
>       git-daemon: use 'test_atexit` to stop 'git-daemon'
>       git p4 test: use 'test_atexit' to kill p4d and the watchdog process
>       rebase -i: demonstrate obscure loose object cache bug
>       sequencer: improve error message when an OID could not be parsed
>       sequencer: move stale comment into correct location
>       get_oid(): when an object was not found, try harder
>       difftool: remove obsolete (and misleading) comment
>       parse-options: make OPT_ARGUMENT() more useful
>       difftool: allow running outside Git worktrees with --no-index
>       docs: move gitremote-helpers into section 7
>       docs: do not document the `git remote-testgit` command
>       check-docs: really look at the documented commands again
>       check-docs: do not expect guide pages to correspond to commands
>       check-docs: fix for setups where executables have an extension
>       tests (rebase): spell out the `--keep-empty` option
>       tests (rebase): spell out the `--force-rebase` option
>       t7810: do not abbreviate `--no-exclude-standard` nor `--invert-match`
>       t5531: avoid using an abbreviated option
>       tests (push): do not abbreviate the `--follow-tags` option
>       tests (status): spell out the `--find-renames` option in full
>       tests (pack-objects): use the full, unabbreviated `--revs` option
>       t3301: fix false negative
>       untracked cache: fix off-by-one
>       tests: disallow the use of abbreviated options (by default)
>       t9822: skip tests if file names cannot be ISO-8859-1 encoded
>       macOS: make sure that gettext is found
>       remote-testgit: move it into the support directory for t5801
>       Makefile: drop the NO_INSTALL variable
>       help -a: do not list commands that are excluded from the build
>       check-docs: allow command-list.txt to contain excluded commands
>       docs: exclude documentation for commands that have been excluded
>       check-docs: do not bother checking for legacy scripts' documentation
>       test-tool: handle the `-C <directory>` option just like `git`
>       Turn `git serve` into a test helper
>       t5580: verify that alternates can be UNC paths
>       fsmonitor: demonstrate that it is not refreshed after discard_index()
>       fsmonitor: force a refresh after the index was discarded
>       t6500(mingw): use the Windows PID of the shell
>       difftool --no-index: error out on --dir-diff (and don't crash)
>       status: fix display of rebase -ir's `label` command
>       parse-options: adjust `parse_opt_unknown_cb()`s declared return type
>       stash: document stash.useBuiltin
>
> Jonathan Tan (24):
>       remote-curl: reduce scope of rpc_state.argv
>       remote-curl: reduce scope of rpc_state.stdin_preamble
>       remote-curl: reduce scope of rpc_state.result
>       remote-curl: refactor reading into rpc_state's buf
>       remote-curl: use post_rpc() for protocol v2 also
>       tests: define GIT_TEST_PROTOCOL_VERSION
>       t5601: check ssh command only with protocol v0
>       tests: always test fetch of unreachable with v0
>       t5503: fix overspecification of trace expectation
>       t5512: compensate for v0 only sending HEAD symrefs
>       t5700: only run with protocol version 1
>       tests: fix protocol version for overspecifications
>       t5552: compensate for v2 filtering ref adv.
>       submodule: explain first attempt failure clearly
>       t5551: mark half-auth no-op fetch test as v0-only
>       fetch-pack: call prepare_shallow_info only if v0
>       fetch-pack: respect --no-update-shallow in v2
>       sha1-file: support OBJECT_INFO_FOR_PREFETCH
>       fetch-pack: binary search when storing wanted-refs
>       diff: batch fetching of missing blobs
>       pack-objects: write objects packed to trace2
>       transport: die if server options are unsupported
>       clone: send server options when using protocol v2
>       worktree: update is_bare heuristics
>
> Jordi Mas (1):
>       l10n: Fixes to Catalan translation
>
> Josh Steadmon (5):
>       protocol-capabilities.txt: document symref
>       trace2: write to directory targets
>       clone: do faster object check for partial clones
>       trace2: fix incorrect function pointer check
>       commit-graph: fix memory leak
>
> Junio C Hamano (16):
>       test: caution on our version of 'yes'
>       builtin/log: downcase the beginning of error messages
>       format-patch: notice failure to open cover letter for writing
>       Start 2.22 cycle
>       The second batch
>       The third batch
>       The fourth batch
>       gettext tests: export the restored GIT_TEST_GETTEXT_POISON
>       The fifth batch
>       The sixth batch
>       Makefile: dedup list of files obtained from ls-files
>       The seventh batch
>       The eighth batch
>       Git 2.22-rc0
>       pkt-line: drop 'const'-ness of a param to set_packet_header()
>       Git 2.22-rc1
>
> Kyle Meyer (5):
>       rebase docs: fix "gitlink" typo
>       submodule: refuse to add repository with no commits
>       dir: do not traverse repositories with no commits
>       add: error appropriately on repository with no commits
>       t3000 (ls-files -o): widen description to reflect current tests
>
> Martin Ågren (14):
>       setup: free old value before setting `work_tree`
>       setup: fix memory leaks with `struct repository_format`
>       config/diff.txt: drop spurious backtick
>       config/fsck.txt: avoid starting line with dash
>       git.txt: remove empty line before list continuation
>       git-svn.txt: drop escaping '\' that ends up being rendered
>       Documentation: turn middle-of-line tabs into spaces
>       Documentation/Makefile: add missing xsl dependencies for manpages
>       Documentation/Makefile: add missing dependency on asciidoctor-extensions
>       asciidoctor-extensions: fix spurious space after linkgit
>       Doc: auto-detect changed build flags
>       doc-diff: let `render_tree()` take an explicit directory name
>       doc-diff: support diffing from/to AsciiDoc(tor)
>       doc-diff: add `--cut-header-footer`
>
> Matthew Kraai (1):
>       t3903: add test for --intent-to-add file
>
> Michal Suchanek (1):
>       worktree: fix worktree add race
>
> Mike Hommey (2):
>       fix pack protocol example client/server communication
>       Make fread/fwrite-like functions in http.c more like fread/fwrite.
>
> Nguyễn Thái Ngọc Duy (126):
>       parse-options.h: remove extern on function prototypes
>       parse-options: add one-shot mode
>       parse-options: disable option abbreviation with PARSE_OPT_KEEP_UNKNOWN
>       parse-options: add OPT_BITOP()
>       parse-options: stop abusing 'callback' for lowlevel callbacks
>       parse-options: avoid magic return codes
>       parse-options: allow ll_callback with OPTION_CALLBACK
>       diff.h: keep forward struct declarations sorted
>       diff.h: avoid bit fields in struct diff_flags
>       diff.c: prepare to use parse_options() for parsing
>       diff.c: convert -u|-p|--patch
>       diff.c: convert -U|--unified
>       diff.c: convert -W|--[no-]function-context
>       diff.c: convert --raw
>       read-cache.c: fix writing "link" index ext with null base oid
>       completion: add more parameter value completion
>       diff-parseopt: convert --patch-with-raw
>       diff-parseopt: convert --numstat and --shortstat
>       diff-parseopt: convert --dirstat and friends
>       diff-parseopt: convert --check
>       diff-parseopt: convert --summary
>       diff-parseopt: convert --patch-with-stat
>       diff-parseopt: convert --name-only
>       diff-parseopt: convert --name-status
>       diff-parseopt: convert -s|--no-patch
>       diff-parseopt: convert --stat*
>       diff-parseopt: convert --[no-]compact-summary
>       diff-parseopt: convert --output-*
>       diff-parseopt: convert -B|--break-rewrites
>       diff-parseopt: convert -M|--find-renames
>       diff-parseopt: convert -D|--irreversible-delete
>       diff-parseopt: convert -C|--find-copies
>       diff-parseopt: convert --find-copies-harder
>       diff-parseopt: convert --no-renames|--[no--rename-empty
>       diff-parseopt: convert --relative
>       diff-parseopt: convert --[no-]minimal
>       diff-parseopt: convert --ignore-some-changes
>       Delete check-racy.c
>       diff-parseopt: convert --[no-]indent-heuristic
>       diff-parseopt: convert --patience
>       diff-parseopt: convert --histogram
>       diff-parseopt: convert --diff-algorithm
>       diff-parseopt: convert --anchored
>       diff-parseopt: convert --binary
>       diff-parseopt: convert --full-index
>       diff-parseopt: convert -a|--text
>       diff-parseopt: convert -R
>       diff-parseopt: convert --[no-]follow
>       diff-parseopt: convert --[no-]color
>       diff-parseopt: convert --word-diff
>       diff-parseopt: convert --word-diff-regex
>       diff-parseopt: convert --color-words
>       diff-parseopt: convert --exit-code
>       diff-parseopt: convert --quiet
>       diff-parseopt: convert --ext-diff
>       diff-parseopt: convert --textconv
>       diff-parseopt: convert --ignore-submodules
>       diff-parseopt: convert --submodule
>       files-backend.c: factor out per-worktree code in loose_fill_ref_dir()
>       files-backend.c: reduce duplication in add_per_worktree_entries_to_dir()
>       Make sure refs/rewritten/ is per-worktree
>       unpack-trees: fix oneway_merge accidentally carry over stage index
>       checkout.txt: note about losing staged changes with --merge
>       commit: improve error message in "-a <paths>" case
>       unpack-trees: keep gently check inside add_rejected_path
>       unpack-trees: rename "gently" flag to "quiet"
>       read-tree: add --quiet
>       checkout: prevent losing staged changes with --merge
>       diff-parseopt: convert --ws-error-highlight
>       diff-parseopt: convert --ita-[in]visible-in-index
>       diff-parseopt: convert -z
>       diff-parseopt: convert -l
>       diff-parseopt: convert -S|-G
>       diff-parseopt: convert --pickaxe-all|--pickaxe-regex
>       diff-parseopt: convert -O
>       diff-parseopt: convert --find-object
>       diff-parseopt: convert --diff-filter
>       diff-parseopt: convert --[no-]abbrev
>       diff-parseopt: convert --[src|dst]-prefix
>       diff-parseopt: convert --line-prefix
>       diff-parseopt: convert --no-prefix
>       diff-parseopt: convert --inter-hunk-context
>       diff-parseopt: convert --[no-]color-moved
>       diff-parseopt: convert --color-moved-ws
>       diff.c: allow --no-color-moved-ws
>       range-diff: use parse_options() instead of diff_opt_parse()
>       diff --no-index: use parse_options() instead of diff_opt_parse()
>       am: avoid diff_opt_parse()
>       config: correct '**' matching in includeIf patterns
>       interpret-trailers.txt: start the desc line with a capital letter
>       read-tree.txt: clarify --reset and worktree changes
>       packfile.c: add repo_approximate_object_count()
>       refs.c: add refs_ref_exists()
>       refs.c: add refs_shorten_unambiguous_ref()
>       refs.c: remove the_repo from substitute_branch_name()
>       refs.c: remove the_repo from expand_ref()
>       refs.c: add repo_dwim_ref()
>       refs.c: add repo_dwim_log()
>       refs.c: remove the_repo from read_ref_at()
>       submodule foreach: fix "<command> --quiet" not being respected
>       commit.cocci: refactor code, avoid double rewrite
>       commit.c: add repo_get_commit_tree()
>       sha1-name.c: remove the_repo from sort_ambiguous()
>       sha1-name.c: remove the_repo from find_abbrev_len_packed()
>       sha1-name.c: add repo_find_unique_abbrev_r()
>       sha1-name.c: store and use repo in struct disambiguate_state
>       sha1-name.c: add repo_for_each_abbrev()
>       sha1-name.c: remove the_repo from get_short_oid()
>       sha1-name.c: remove the_repo from interpret_nth_prior_checkout()
>       sha1-name.c: remove the_repo from interpret_branch_mark()
>       sha1-name.c: add repo_interpret_branch_name()
>       sha1-name.c: remove the_repo from get_oid_oneline()
>       sha1-name.c: remove the_repo from get_describe_name()
>       sha1-name.c: remove the_repo from get_oid_basic()
>       sha1-name.c: remove the_repo from get_oid_1()
>       sha1-name.c: remove the_repo from handle_one_ref()
>       sha1-name.c: remove the_repo from diagnose_invalid_index_path()
>       sha1-name.c: remove the_repo from resolve_relative_path()
>       sha1-name.c: remove the_repo from get_oid_with_context_1()
>       sha1-name.c: add repo_get_oid()
>       submodule-config.c: use repo_get_oid for reading .gitmodules
>       sha1-name.c: remove the_repo from maybe_die_on_misspelt_object_name
>       sha1-name.c: remove the_repo from other get_oid_*
>       sha1-name.c: remove the_repo from get_oid_mb()
>       parse-options: don't emit "ambiguous option" for aliases
>       submodule--helper: add a missing \n
>
> Paul-Sebastian Ungureanu (17):
>       sha1-name.c: add `get_oidf()` which acts like `get_oid()`
>       strbuf.c: add `strbuf_join_argv()`
>       strbuf.c: add `strbuf_insertf()` and `strbuf_vinsertf()`
>       t3903: modernize style
>       stash: rename test cases to be more descriptive
>       stash: add tests for `git stash show` config
>       stash: mention options in `show` synopsis
>       stash: convert list to builtin
>       stash: convert show to builtin
>       stash: convert store to builtin
>       stash: convert create to builtin
>       stash: convert push to builtin
>       stash: make push -q quiet
>       stash: convert save to builtin
>       stash: optimize `get_untracked_files()` and `check_changes()`
>       stash: replace all `write-tree` child processes with API calls
>       stash: convert `stash--helper.c` into `stash.c`
>
> Philip Oakley (2):
>       rerere doc: quote `rerere.enabled`
>       describe doc: remove '7-char' abbreviation reference
>
> Phillip Wood (21):
>       am/cherry-pick/rebase/revert: document --rerere-autoupdate
>       merge: tweak --rerere-autoupdate documentation
>       sequencer: break some long lines
>       cherry-pick: demonstrate option amnesia
>       cherry-pick --continue: remember options
>       commit/reset: try to clean up sequencer state
>       fix cherry-pick/revert status after commit
>       sequencer: fix cleanup with --signoff and -x
>       sequencer.c: save and restore cleanup mode
>       sequencer: always discard index after checkout
>       rebase: don't translate trace strings
>       rebase: rename write_basic_state()
>       rebase: use OPT_RERERE_AUTOUPDATE()
>       rebase -i: combine rebase--interactive.c with rebase.c
>       rebase -i: remove duplication
>       rebase -i: use struct commit when parsing options
>       rebase -i: use struct object_id for squash_onto
>       rebase -i: use struct rebase_options to parse args
>       rebase -i: use struct rebase_options in do_interactive_rebase()
>       rebase: use a common action enum
>       rebase -i: run without forking rebase--interactive
>
> Ramsay Jones (2):
>       prune-packed: check for too many arguments
>       Makefile: fix 'hdr-check' when GCRYPT not installed
>
> René Scharfe (1):
>       get-tar-commit-id: parse comment record
>
> Robert P. J. Day (3):
>       mention use of "hooks.allownonascii" in "man githooks"
>       docs/git-gc: fix typo "--prune=all" to "--prune=now"
>       attr.c: ".gitattribute" -> ".gitattributes" (comments)
>
> Rohit Ashiwal (3):
>       test functions: add function `test_file_not_empty`
>       t3600: modernize style
>       t3600: use helpers to replace test -d/f/e/s <path>
>
> SZEDER Gábor (24):
>       test-lib: fix interrupt handling with 'dash' and '--verbose-log -x'
>       t/lib-git-daemon: make sure to kill the 'git-daemon' process
>       tests: use 'test_atexit' to stop httpd
>       t0301-credential-cache: use 'test_atexit' to stop the credentials helper
>       git p4 test: clean up the p4d cleanup functions
>       git p4 test: simplify timeout handling
>       git p4 test: disable '-x' tracing in the p4d watchdog loop
>       t9811-git-p4-label-import: fix pipeline negation
>       t5318-commit-graph: remove unused variable
>       Documentation/git-diff-tree.txt: fix formatting
>       Documentation/technical/api-config.txt: fix formatting
>       Documentation/technical/protocol-v2.txt: fix formatting
>       ci: install Asciidoctor in 'ci/install-dependencies.sh'
>       index-pack: show progress while checking objects
>       ci: stick with Asciidoctor v1.5.8 for now
>       ci: fix AsciiDoc/Asciidoctor stderr check in the documentation build job
>       progress: make display_progress() return void
>       progress: assemble percentage and counters in a strbuf before printing
>       blame: default to HEAD in a bare repo when no start commit is given
>       builtin rebase: use FREE_AND_NULL
>       builtin rebase: use oideq()
>       progress: clear previous progress update dynamically
>       progress: break too long progress bar lines
>       ci: install 'libsvn-perl' instead of 'git-svn'
>
> Sun Chao (2):
>       pack-redundant: delete redundant code
>       pack-redundant: new algorithm to find min packs
>
> Sven Strickroth (1):
>       MSVC: include compat/win32/path-utils.h for MSVC, too, for real_path()
>
> Tanushree Tumane (1):
>       mingw: remove obsolete IPv6-related code
>
> Taylor Blau (4):
>       t: move 'hex2oct' into test-lib-functions.sh
>       t: introduce tests for unexpected object types
>       list-objects.c: handle unexpected non-blob entries
>       list-objects.c: handle unexpected non-tree entries
>
> Thomas Gummerer (15):
>       move worktree tests to t24*
>       entry: factor out unlink_entry function
>       entry: support CE_WT_REMOVE flag in checkout_entry
>       read-cache: add invalidate parameter to remove_marked_cache_entries
>       checkout: clarify comment
>       checkout: factor out mark_cache_entry_for_checkout function
>       checkout: introduce --{,no-}overlay option
>       checkout: introduce checkout.overlayMode config
>       revert "checkout: introduce checkout.overlayMode config"
>       ident: don't require calling prepare_fallback_ident first
>       stash: drop unused parameter
>       stash: pass pathspec as pointer
>       glossary: add definition for overlay
>       stash: setup default diff output format if necessary
>       ls-files: use correct format string
>
> Todd Zullinger (8):
>       t4038-diff-combined: quote paths with whitespace
>       t9902: test multiple removals via completion.commands
>       completion: use __git when calling --list-cmds
>       Documentation/rev-list-options: wrap --date=<format> block with "--"
>       Documentation/git-status: fix titles in porcelain v2 section
>       Documentation/git-svn: improve asciidoctor compatibility
>       Documentation/git-show-branch: avoid literal {apostrophe}
>       test-lib: try harder to ensure a working jgit
>
> Torsten Bögershausen (1):
>       trace2: NULL is not allowed for va_list
>
> Trần Ngọc Quân (1):
>       l10n: Updated Vietnamese translation for v2.21 rd2
>
> Vadim Kochan (1):
>       autoconf: #include <libintl.h> when checking for gettext()
>
> William Hubbs (1):
>       config: allow giving separate author and committer idents
>
> Yash Bhatambare (1):
>       gitattributes.txt: fix typo
>
> brian m. carlson (35):
>       t/lib-submodule-update: use appropriate length constant
>       khash: move oid hash table definition
>       pack-bitmap: make bitmap header handling hash agnostic
>       pack-bitmap: convert struct stored_bitmap to object_id
>       pack-bitmap: replace sha1_to_hex
>       pack-bitmap: switch hard-coded constants to the_hash_algo
>       pack-bitmap: switch hash tables to use struct object_id
>       submodule: avoid hard-coded constants
>       notes-merge: switch to use the_hash_algo
>       notes: make hash size independent
>       notes: replace sha1_to_hex
>       object-store: rename and expand packed_git's sha1 member
>       builtin/name-rev: make hash-size independent
>       fast-import: make hash-size independent
>       fast-import: replace sha1_to_hex
>       builtin/am: make hash size independent
>       builtin/pull: make hash-size independent
>       http-push: convert to use the_hash_algo
>       http-backend: allow 64-character hex names
>       http-push: remove remaining uses of sha1_to_hex
>       http-walker: replace sha1_to_hex
>       http: replace hard-coded constant with the_hash_algo
>       http: compute hash of downloaded objects using the_hash_algo
>       http: replace sha1_to_hex
>       remote-curl: make hash size independent
>       hash: add a function to lookup hash algorithm by length
>       builtin/get-tar-commit-id: make hash size independent
>       archive: convert struct archiver_args to object_id
>       refspec: make hash size independent
>       builtin/difftool: use parse_oid_hex
>       dir: make untracked cache extension hash size independent
>       read-cache: read data in a hash-independent way
>       Git.pm: make hash size independent
>       gitweb: make hash size independent
>       send-email: default to quoted-printable when CR is present
>
> Ævar Arnfjörð Bjarmason (44):
>       receive-pack: fix use-after-free bug
>       commit-graph tests: split up corrupt_graph_and_verify()
>       commit-graph tests: test a graph that's too small
>       Makefile: remove an out-of-date comment
>       Makefile: move "strip" assignment down from flags
>       Makefile: add/remove comments at top and tweak whitespace
>       Makefile: Move *_LIBS assignment into its own section
>       Makefile: move the setting of *FLAGS closer to "include"
>       Makefile: allow for combining DEVELOPER=1 and CFLAGS="..."
>       gc: remove redundant check for gc_auto_threshold
>       gc: convert to using the_hash_algo
>       gc: refactor a "call me once" pattern
>       reflog tests: make use of "test_config" idiom
>       reflog tests: test for the "points nowhere" warning
>       rebase: remove the rebase.useBuiltin setting
>       gc docs: modernize the advice for manually running "gc"
>       gc docs: stop noting "repack" flags
>       gc docs: clean grammar for "gc.bigPackThreshold"
>       commit-graph: fix segfault on e.g. "git status"
>       commit-graph: don't early exit(1) on e.g. "git status"
>       commit-graph: don't pass filename to load_commit_graph_one_fd_st()
>       commit-graph verify: detect inability to read the graph
>       commit-graph write: don't die if the existing graph is corrupt
>       commit-graph: improve & i18n error messages
>       reflog tests: assert lack of early exit with expiry="never"
>       gc: handle & check gc.reflogExpire config
>       test-lib: whitelist GIT_TR2_* in the environment
>       gc docs: include the "gc.*" section from "config" in "gc"
>       gc docs: re-flow the "gc.*" section in "config"
>       gc docs: fix formatting for "gc.writeCommitGraph"
>       gc docs: note how --aggressive impacts --window & --depth
>       gc docs: downplay the usefulness of --aggressive
>       gc docs: note "gc --aggressive" in "fast-import"
>       gc docs: clarify that "gc" doesn't throw away referenced objects
>       gc docs: remove incorrect reference to gc.auto=0
>       perf README: correct docs for 3c8f12c96c regression
>       perf aggregate: remove GIT_TEST_INSTALLED from --codespeed
>       perf-lib.sh: make "./run <revisions>" use the correct gits
>       perf-lib.sh: remove GIT_TEST_INSTALLED from perf-lib.sh
>       perf tests: add "bindir" prefix to git tree test results
>       perf-lib.sh: forbid the use of GIT_TEST_INSTALLED
>       trace2: fix up a missing "leave" entry point
>       trace2: fix up a missing "leave" entry point
>       sha1dc: update from upstream
>
> İsmail Dönmez (2):
>       mingw: do not let ld strip relocations
>       mingw: enable DEP and ASLR
>
>
>

^ permalink raw reply	[relevance 0%]

* [ANNOUNCE] Git v2.22.0-rc1
@ 2019-05-19  9:04  2% Junio C Hamano
  2019-05-19 20:30  0% ` Johannes Schindelin
  0 siblings, 1 reply; 162+ results
From: Junio C Hamano @ 2019-05-19  9:04 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.22.0-rc1 is now available for testing
at the usual places.  It is comprised of 699 non-merge commits
since v2.21.0, contributed by 66 people, 16 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.22.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.21.0 are as follows.
Welcome to the Git development community!

  Alexander Blesius, Baruch Siach, Boxuan Li, Chris Mayo,
  Chris. Webster, Clément Chigot, Corentin BOMPARD, Damien
  Robert, Dustin Spicuzza, Michal Suchanek, Rohit Ashiwal,
  Sun Chao, Tanushree Tumane, Vadim Kochan, William Hubbs, and
  Yash Bhatambare.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alban Gruin, Alexander Shopov, Anders
  Waldenborg, Andreas Heiduk, Andrei Rybak, Beat Bolli, Ben Peart,
  Brandon Richardson, brian m. carlson, Carlo Marcelo Arenas
  Belón, Christian Couder, Daniels Umanovskis, David Aguilar,
  David Kastrup, Denton Liu, Derrick Stolee, Elijah Newren, Eric
  Sunshine, Eric Wong, İsmail Dönmez, Jean-Noël Avila, Jeff
  Hostetler, Jeff King, Jiang Xin, Joel Teichroeb, Joey Hess,
  Johannes Schindelin, Jonathan Tan, Jordi Mas, Josh Steadmon,
  Junio C Hamano, Kyle Meyer, Martin Ågren, Matthew Kraai, Mike
  Hommey, Nguyễn Thái Ngọc Duy, Paul-Sebastian Ungureanu,
  Philip Oakley, Phillip Wood, Ramsay Jones, René Scharfe,
  Robert P. J. Day, Sven Strickroth, SZEDER Gábor, Taylor Blau,
  Thomas Gummerer, Todd Zullinger, Torsten Bögershausen, and
  Trần Ngọc Quân.

----------------------------------------------------------------

Git 2.22 Release Notes (draft)
==============================

Updates since v2.21
-------------------

UI, Workflows & Features

 * "git checkout --no-overlay" can be used to trigger a new mode of
   checking out paths out of the tree-ish, that allows paths that
   match the pathspec that are in the current index and working tree
   and are not in the tree-ish.

 * The %(trailers) formatter in "git log --format=..."  now allows to
   optionally pick trailers selectively by keyword, show only values,
   etc.

 * Four new configuration variables {author,committer}.{name,email}
   have been introduced to override user.{name,email} in more specific
   cases.

 * Command-line completion (in contrib/) learned to tab-complete the
   "git submodule absorbgitdirs" subcommand.

 * "git branch" learned a new subcommand "--show-current".

 * Output from "diff --cc" did not show the original paths when the
   merge involved renames.  A new option adds the paths in the
   original trees to the output.

 * The command line completion (in contrib/) has been taught to
   complete more subcommand parameters.

 * The final report from "git bisect" used to show the suspected
   culprit using a raw "diff-tree", with which there is no output for
   a merge commit.  This has been updated to use a more modern and
   human readable output that still is concise enough.

 * "git rebase --rebase-merges" replaces its old "--preserve-merges"
   option; the latter is now marked as deprecated.

 * Error message given while cloning with --recurse-submodules has
   been updated.

 * The completion helper code now pays attention to repository-local
   configuration (when available), which allows --list-cmds to honour
   a repository specific setting of completion.commands, for example.

 * "git mergetool" learned to offer Sublime Merge (smerge) as one of
   its backends.

 * A new hook "post-index-change" is called when the on-disk index
   file changes, which can help e.g. a virtualized working tree
   implementation.

 * "git difftool" can now run outside a repository.

 * "git checkout -m <other>" was about carrying the differences
   between HEAD and the working-tree files forward while checking out
   another branch, and ignored the differences between HEAD and the
   index.  The command has been taught to abort when the index and the
   HEAD are different.

 * A progress indicator has been added to the "index-pack" step, which
   often makes users wait for completion during "git clone".

 * "git submodule" learns "set-branch" subcommand that allows the
   submodule.*.branch settings to be modified.

 * "git merge-recursive" backend recently learned a new heuristics to
   infer file movement based on how other files in the same directory
   moved.  As this is inherently less robust heuristics than the one
   based on the content similarity of the file itself (rather than
   based on what its neighbours are doing), it sometimes gives an
   outcome unexpected by the end users.  This has been toned down to
   leave the renamed paths in higher/conflicted stages in the index so
   that the user can examine and confirm the result.

 * "git tag" learned to give an advice suggesting it might be a
   mistake when creating an annotated or signed tag that points at
   another tag.

 * The "git pack-objects" command learned to report the number of
   objects it packed via the trace2 mechanism.

 * The list of conflicted paths shown in the editor while concluding a
   conflicted merge was shown above the scissors line when the
   clean-up mode is set to "scissors", even though it was commented
   out just like the list of updated paths and other information to
   help the user explain the merge better.

 * The trace2 tracing facility learned to auto-generate a filename
   when told to log to a directory.

 * "git clone" learned a new --server-option option when talking over
   the protocol version 2.

 * The connectivity bitmaps are created by default in bare
   repositories now; also the pathname hash-cache is created by
   default to avoid making crappy deltas when repacking.

 * "git branch new A...B" and "git checkout -b new A...B" have been
   taught that in their contexts, the notation A...B means "the merge
   base between these two commits", just like "git checkout A...B"
   detaches HEAD at that commit.

 * Update "git difftool" and "git mergetool" so that the combinations
   of {diff,merge}.{tool,guitool} configuration variables serve as
   fallback settings of each other in a sensible order.

 * The "--dir-diff" mode of "git difftool" is not useful in "--no-index"
   mode; they are now explicitly marked as mutually incompatible.


Performance, Internal Implementation, Development Support etc.

 * The diff machinery, one of the oldest parts of the system, which
   long predates the parse-options API, uses fairly long and complex
   handcrafted option parser.  This is being rewritten to use the
   parse-options API.

 * The implementation of pack-redundant has been updated for
   performance in a repository with many packfiles.

 * A more structured way to obtain execution trace has been added.

 * "git prune" has been taught to take advantage of reachability
   bitmap when able.

 * The command line parser of "git commit-tree" has been rewritten to
   use the parse-options API.

 * Suggest GitGitGadget instead of submitGit as a way to submit
   patches based on GitHub PR to us.

 * The test framework has been updated to help developers by making it
   easier to run most of the tests under different versions of
   over-the-wire protocols.

 * Dev support update to make it easier to compare two formatted
   results from our documentation.

 * The scripted "git rebase" implementation has been retired.

 * "git multi-pack-index verify" did not scale well with the number of
   packfiles, which is being improved.

 * "git stash" has been rewritten in C.

 * The "check-docs" Makefile target to support developers has been
   updated.

 * The tests have been updated not to rely on the abbreviated option
   names the parse-options API offers, to protect us from an
   abbreviated form of an option that used to be unique within the
   command getting non-unique when a new option that share the same
   prefix is added.

 * The scripted version of "git rebase -i" wrote and rewrote the todo
   list many times during a single step of its operation, and the
   recent C-rewrite made a faithful conversion of the logic to C.  The
   implementation has been updated to carry necessary information
   around in-core to avoid rewriting the same file over and over
   unnecessarily.

 * Test framework update to more robustly clean up leftover files and
   processes after tests are done.

 * Conversion from unsigned char[20] to struct object_id continues.

 * While running "git diff" in a lazy clone, we can upfront know which
   missing blobs we will need, instead of waiting for the on-demand
   machinery to discover them one by one.  The code learned to aim to
   achieve better performance by batching the request for these
   promised blobs.

 * During an initial "git clone --depth=..." partial clone, it is
   pointless to spend cycles for a large portion of the connectivity
   check that enumerates and skips promisor objects (which by
   definition is all objects fetched from the other side).  This has
   been optimized out.

 * Mechanically and systematically drop "extern" from function
   declarlation.

 * The script to aggregate perf result unconditionally depended on
   libjson-perl even though it did not have to, which has been
   corrected.

 * The internal implementation of "git rebase -i" has been updated to
   avoid forking a separate "rebase--interactive" process.

 * Allow DEP and ASLR for Windows build to for security hardening.

 * Performance test framework has been broken and measured the version
   of Git that happens to be on $PATH, not the specified one to
   measure, for a while, which has been corrected.

 * Optionally "make coccicheck" can feed multiple source files to
   spatch, gaining performance while spending more memory.

 * Attempt to use an abbreviated option in "git clone --recurs" is
   responded by a request to disambiguate between --recursive and
   --recurse-submodules, which is bad because these two are synonyms.
   The parse-options API has been extended to define such synonyms
   more easily and not produce an unnecessary failure.

 * A pair of private functions in http.c that had names similar to
   fread/fwrite did not return the number of elements, which was found
   to be confusing.

 * Update collision-detecting SHA-1 code to build properly on HP-UX.


Fixes since v2.21
-----------------

 * "git prune-packed" did not notice and complain against excess
   arguments given from the command line, which now it does.
   (merge 9b0bd87ed2 rj/prune-packed-excess-args later to maint).

 * Split-index fix.
   (merge 6e37c8ed3c nd/split-index-null-base-fix later to maint).

 * "git diff --no-index" may still want to access Git goodies like
   --ext-diff and --textconv, but so far these have been ignored,
   which has been corrected.
   (merge 287ab28bfa jk/diff-no-index-initialize later to maint).

 * Unify RPC code for smart http in protocol v0/v1 and v2, which fixes
   a bug in the latter (lack of authentication retry) and generally
   improves the code base.
   (merge a97d00799a jt/http-auth-proto-v2-fix later to maint).

 * The include file compat/bswap.h has been updated so that it is safe
   to (accidentally) include it more than once.
   (merge 33aa579a55 jk/guard-bswap-header later to maint).

 * The set of header files used by "make hdr-check" unconditionally
   included sha256/gcrypt.h, even when it is not used, causing the
   make target to fail.  We now skip it when GCRYPT_SHA256 is not in
   use.
   (merge f23aa18e7f rj/hdr-check-gcrypt-fix later to maint).

 * The Makefile uses 'find' utility to enumerate all the *.h header
   files, which is expensive on platforms with slow filesystems; it
   now optionally uses "ls-files" if working within a repository,
   which is a trick similar to how all sources are enumerated to run
   ETAGS on.
   (merge 92b88eba9f js/find-lib-h-with-ls-files-when-possible later to maint).

 * "git rebase" that was reimplemented in C did not set ORIG_HEAD
   correctly, which has been corrected.
   (merge cbd29ead92 js/rebase-orig-head-fix later to maint).

 * Dev support.
   (merge f545737144 js/stress-test-ui-tweak later to maint).

 * CFLAGS now can be tweaked when invoking Make while using
   DEVELOPER=YesPlease; this did not work well before.
   (merge 6d5d4b4e93 ab/makefile-help-devs-more later to maint).

 * "git fsck --connectivity-only" omits computation necessary to sift
   the objects that are not reachable from any of the refs into
   unreachable and dangling.  This is now enabled when dangling
   objects are requested (which is done by default, but can be
   overridden with the "--no-dangling" option).
   (merge 8d8c2a5aef jk/fsck-doc later to maint).

 * On platforms where "git fetch" is killed with SIGPIPE (e.g. OSX),
   the upload-pack that runs on the other end that hangs up after
   detecting an error could cause "git fetch" to die with a signal,
   which led to a flakey test.  "git fetch" now ignores SIGPIPE during
   the network portion of its operation (this is not a problem as we
   check the return status from our write(2)s).
   (merge 143588949c jk/no-sigpipe-during-network-transport later to maint).

 * A recent update broke "is this object available to us?" check for
   well-known objects like an empty tree (which should yield "yes",
   even when there is no on-disk object for an empty tree), which has
   been corrected.
   (merge f06ab027ef jk/virtual-objects-do-exist later to maint).

 * The setup code has been cleaned up to avoid leaks around the
   repository_format structure.
   (merge e8805af1c3 ma/clear-repository-format later to maint).

 * "git config --type=color ..." is meant to replace "git config --get-color"
   but there is a slight difference that wasn't documented, which is
   now fixed.
   (merge cd8e7593b9 jk/config-type-color-ends-with-lf later to maint).

 * When the "clean" filter can reduce the size of a huge file in the
   working tree down to a small "token" (a la Git LFS), there is no
   point in allocating a huge scratch area upfront, but the buffer is
   sized based on the original file size.  The convert mechanism now
   allocates very minimum and reallocates as it receives the output
   from the clean filter process.
   (merge 02156ab031 jh/resize-convert-scratch-buffer later to maint).

 * "git rebase" uses the refs/rewritten/ hierarchy to store its
   intermediate states, which inherently makes the hierarchy per
   worktree, but it didn't quite work well.
   (merge b9317d55a3 nd/rewritten-ref-is-per-worktree later to maint).

 * "git log -L<from>,<to>:<path>" with "-s" did not suppress the patch
   output as it should.  This has been corrected.
   (merge 05314efaea jk/line-log-with-patch later to maint).

 * "git worktree add" used to do a "find an available name with stat
   and then mkdir", which is race-prone.  This has been fixed by using
   mkdir and reacting to EEXIST in a loop.
   (merge 7af01f2367 ms/worktree-add-atomic-mkdir later to maint).

 * Build update for SHA-1 with collision detection.
   (merge 07a20f569b jk/sha1dc later to maint).

 * Build procedure has been fixed around use of asciidoctor instead of
   asciidoc.
   (merge 185f9a0ea0 ma/asciidoctor-fixes later to maint).

 * remote-http transport did not anonymize URLs reported in its error
   messages at places.
   (merge c1284b21f2 js/anonymize-remote-curl-diag later to maint).

 * Error messages given from the http transport have been updated so
   that they can be localized.
   (merge ed8b4132c8 js/remote-curl-i18n later to maint).

 * "git init" forgot to read platform-specific repository
   configuration, which made Windows port to ignore settings of
   core.hidedotfiles, for example.

 * A corner-case object name ambiguity while the sequencer machinery
   is working (e.g. "rebase -i -x") has been fixed.

 * "git format-patch" did not diagnose an error while opening the
   output file for the cover-letter, which has been corrected.
   (merge 2fe95f494c jc/format-patch-error-check later to maint).

 * "git checkout -f <branch>" while the index has an unmerged path
   incorrectly left some paths in an unmerged state, which has been
   corrected.

 * A corner case bug in the refs API has been corrected.
   (merge d3322eb28b jk/refs-double-abort later to maint).

 * Unicode update.
   (merge 584b62c37b bb/unicode-12 later to maint).

 * dumb-http walker has been updated to share more error recovery
   strategy with the normal codepath.

 * A buglet in configuration parser has been fixed.
   (merge 19e7fdaa58 nd/include-if-wildmatch later to maint).

 * The documentation for "git read-tree --reset -u" has been updated.
   (merge b5a0bd694c nd/read-tree-reset-doc later to maint).

 * Code clean-up around a much-less-important-than-it-used-to-be
   update_server_info() funtion.
   (merge b3223761c8 jk/server-info-rabbit-hole later to maint).

 * The message given when "git commit -a <paths>" errors out has been
   updated.
   (merge 5a1dbd48bc nd/commit-a-with-paths-msg-update later to maint).

 * "git cherry-pick --options A..B", after giving control back to the
   user to ask help resolving a conflicted step, did not honor the
   options it originally received, which has been corrected.

 * Various glitches in "git gc" around reflog handling have been fixed.

 * The code to read from commit-graph file has been cleanup with more
   careful error checking before using data read from it.

 * Performance fix around "git fetch" that grabs many refs.
   (merge b764300912 jt/fetch-pack-wanted-refs-optim later to maint).

 * Protocol v2 support in "git fetch-pack" of shallow clones has been
   corrected.

 * Performance fix around "git blame", especially in a linear history
   (which is the norm we should optimize for).
   (merge f892014943 dk/blame-keep-origin-blob later to maint).

 * Performance fix for "rev-list --parents -- pathspec".
   (merge 8320b1dbe7 jk/revision-rewritten-parents-in-prio-queue later to maint).

 * Updating the display with progress message has been cleaned up to
   deal better with overlong messages.
   (merge 545dc345eb sg/overlong-progress-fix later to maint).

 * "git blame -- path" in a non-bare repository starts blaming from
   the working tree, and the same command in a bare repository errors
   out because there is no working tree by definition.  The command
   has been taught to instead start blaming from the commit at HEAD,
   which is more useful.
   (merge a544fb08f8 sg/blame-in-bare-start-at-head later to maint).

 * An underallocation in the code to read the untracked cache
   extension has been corrected.
   (merge 3a7b45a623 js/untracked-cache-allocfix later to maint).

 * The code is updated to check the result of memory allocation before
   it is used in more places, by using xmalloc and/or xcalloc calls.
   (merge 999b951b28 jk/xmalloc later to maint).

 * The GETTEXT_POISON test option has been quite broken ever since it
   was made runtime-tunable, which has been fixed.
   (merge f88b9cb603 jc/gettext-test-fix later to maint).

 * Test fix on APFS that is incapable of store paths in Latin-1.
   (merge 3889149619 js/iso8895-test-on-apfs later to maint).

 * "git submodule foreach <command> --quiet" did not pass the option
   down correctly, which has been corrected.
   (merge a282f5a906 nd/submodule-foreach-quiet later to maint).

 * "git send-email" has been taught to use quoted-printable when the
   payload contains carriage-return.  The use of the mechanism is in
   line with the design originally added the codepath that chooses QP
   when the payload has overly long lines.
   (merge 74d76a1701 bc/send-email-qp-cr later to maint).

 * The recently added feature to add addresses that are on
   anything-by: trailers in 'git send-email' was found to be way too
   eager and considered nonsense strings as if they can be legitimate
   beginning of *-by: trailer.  This has been tightened.

 * Builds with gettext broke on recent macOS w/ Homebrew, which
   seems to have stopped including from /usr/local/include; this
   has been corrected.
   (merge 92a1377a2a js/macos-gettext-build later to maint).

 * Running "git add" on a repository created inside the current
   repository is an explicit indication that the user wants to add it
   as a submodule, but when the HEAD of the inner repository is on an
   unborn branch, it cannot be added as a submodule.  Worse, the files
   in its working tree can be added as if they are a part of the outer
   repository, which is not what the user wants.  These problems are
   being addressed.
   (merge f937bc2f86 km/empty-repo-is-still-a-repo later to maint).

 * "git cherry-pick" run with the "-x" or the "--signoff" option used
   to (and more importantly, ought to) clean up the commit log message
   with the --cleanup=space option by default, but this has been
   broken since late 2017.  This has been fixed.

 * When given a tag that points at a commit-ish, "git replace --graft"
   failed to peel the tag before writing a replace ref, which did not
   make sense because the old graft mechanism the feature wants to
   mimick only allowed to replace one commit object with another.
   This has been fixed.
   (merge ee521ec4cb cc/replace-graft-peel-tags later to maint).

 * Code tightening against a "wrong" object appearing where an object
   of a different type is expected, instead of blindly assuming that
   the connection between objects are correctly made.
   (merge 97dd512af7 tb/unexpected later to maint).

 * An earlier update for MinGW and Cygwin accidentally broke MSVC build,
   which has been fixed.
   (merge 22c3634c0f ss/msvc-path-utils-fix later to maint).

 * %(push:track) token used in the --format option to "git
   for-each-ref" and friends was not showing the right branch, which
   has been fixed.
   (merge c646d0934e dr/ref-filter-push-track-fix later to maint).

 * "make check-docs", "git help -a", etc. did not account for cases
   where a particular build may deliberately omit some subcommands,
   which has been corrected.

 * The logic to tell if a Git repository has a working tree protects
   "git branch -D" from removing the branch that is currently checked
   out by mistake.  The implementation of this logic was broken for
   repositories with unusual name, which unfortunately is the norm for
   submodules these days.  This has been fixed.
   (merge f3534c98e4 jt/submodule-repo-is-with-worktree later to maint).

 * AIX shared the same build issues with other BSDs around fileno(fp),
   which has been corrected.
   (merge ee662bf5c6 cc/aix-has-fileno-as-a-macro later to maint).

 * The autoconf generated configure script failed to use the right
   gettext() implementations from -libintl by ignoring useless stub
   implementations shipped in some C library, which has been
   corrected.
   (merge b71e56a683 vk/autoconf-gettext later to maint).

 * Fix index-pack perf test so that the repeated invocations always
   run in an empty repository, which emulates the initial clone
   situation better.
   (merge 775c71e16d jk/p5302-avoid-collision-check-cost later to maint).

 * A "ls-files" that emulates "find" to enumerate files in the working
   tree resulted in duplicated Makefile rules that caused the build to
   issue an unnecessary warning during a trial build after merge
   conflicts are resolved in working tree *.h files but before the
   resolved results are added to the index.  This has been corrected.

 * "git chery-pick" (and "revert" that shares the same runtime engine)
   that deals with multiple commits got confused when the final step
   gets stopped with a conflict and the user concluded the sequence
   with "git commit".  Attempt to fix it by cleaning up the state
   files used by these commands in such a situation.
   (merge 4a72486de9 pw/clean-sequencer-state-upon-final-commit later to maint).

 * On a filesystem like HFS+, the names of the refs stored as filesystem
   entities may become different from what the end-user expects, just
   like files in the working tree get "renamed".  Work around the
   mismatch by paying attention to the core.precomposeUnicode
   configuration.
   (merge 8e712ef6fc en/unicode-in-refnames later to maint).

 * The code to generate the multi-pack idx file was not prepared to
   see too many packfiles and ran out of open file descriptor, which
   has been corrected.

 * To run tests for Git SVN, our scripts for CI used to install the
   git-svn package (in the hope that it would bring in the right
   dependencies).  This has been updated to install the more direct
   dependency, namely, libsvn-perl.
   (merge db864306cf sg/ci-libsvn-perl later to maint).

 * "git cvsexportcommit" running on msys did not expect cvsnt showed
   "cvs status" output with CRLF line endings.

 * The fsmonitor interface got out of sync after the in-core index
   file gets discarded, which has been corrected.
   (merge 398a3b0899 js/fsmonitor-refresh-after-discarding-index later to maint).

 * "git status" did not know that the "label" instruction in the
   todo-list "rebase -i -r" uses should not be shown as a hex object
   name.

 * A prerequiste check in the test suite to see if a working jgit is
   available was made more robust.
   (merge abd0f28983 tz/test-lib-check-working-jgit later to maint).

 * The codepath to parse :<path> that obtains the object name for an
   indexed object has been made more robust.

 * Code cleanup, docfix, build fix, etc.
   (merge 11f470aee7 jc/test-yes-doc later to maint).
   (merge 90503a240b js/doc-symref-in-proto-v1 later to maint).
   (merge 5c326d1252 jk/unused-params later to maint).
   (merge 68cabbfda3 dl/doc-submodule-wo-subcommand later to maint).
   (merge 9903623761 ab/receive-pack-use-after-free-fix later to maint).
   (merge 1ede45e44b en/merge-options-doc later to maint).
   (merge 3e14dd2c8e rd/doc-hook-used-in-sample later to maint).
   (merge c271dc28fd nd/no-more-check-racy later to maint).
   (merge e6e15194a8 yb/utf-16le-bom-spellfix later to maint).
   (merge bb101aaf0c rd/attr.c-comment-typofix later to maint).
   (merge 716a5af812 rd/gc-prune-doc-fix later to maint).
   (merge 50b206371d js/untravis-windows later to maint).
   (merge dbf47215e3 js/rebase-recreate-merge later to maint).
   (merge 56cb2d30f8 dl/reset-doc-no-wrt-abbrev later to maint).
   (merge 64eca306a2 ja/dir-rename-doc-markup-fix later to maint).
   (merge af91b0230c dl/ignore-docs later to maint).
   (merge 59a06e947b ra/t3600-test-path-funcs later to maint).
   (merge e041d0781b ar/t4150-remove-cruft later to maint).
   (merge 8d75a1d183 ma/asciidoctor-fixes-more later to maint).
   (merge 74cc547b0f mh/pack-protocol-doc-fix later to maint).
   (merge ed31851fa6 ab/doc-misc-typofixes later to maint).
   (merge a7256debd4 nd/checkout-m-doc-update later to maint).
   (merge 3a9e1ad78d jt/t5551-protocol-v2-does-not-have-half-auth later to maint).
   (merge 0b918b75af sg/t5318-cleanup later to maint).
   (merge 68ed71b53c cb/doco-mono later to maint).
   (merge a34dca2451 nd/interpret-trailers-docfix later to maint).
   (merge cf7b857a77 en/fast-import-parsing-fix later to maint).
   (merge fe61ccbc35 po/rerere-doc-fmt later to maint).
   (merge ffea0248bf po/describe-not-necessarily-7 later to maint).
   (merge 7cb7283adb tg/ls-files-debug-format-fix later to maint).
   (merge f64a21bd82 tz/doc-apostrophe-no-longer-needed later to maint).
   (merge dbe7b41019 js/t3301-unbreak-notes-test later to maint).
   (merge d8083e4180 km/t3000-retitle later to maint).
   (merge 9e4cbccbd7 tz/git-svn-doc-markup-fix later to maint).
   (merge da9ca955a7 jk/ls-files-doc-markup-fix later to maint).
   (merge 6804ba3a58 cw/diff-highlight later to maint).
   (merge 1a8787144d nd/submodule-helper-incomplete-line-fix later to maint).
   (merge d9ef573837 jk/apache-lsan later to maint).
   (merge c871fbee2b js/t6500-use-windows-pid-on-mingw later to maint).
   (merge ce4c7bfc90 bl/t4253-exit-code-from-format-patch later to maint).
   (merge 397a46db78 js/t5580-unc-alternate-test later to maint).
   (merge d4907720a2 cm/notes-comment-fix later to maint).
   (merge 9dde06de13 cb/http-push-null-in-message-fix later to maint).

----------------------------------------------------------------

Changes since v2.21.0 are as follows:

Alban Gruin (18):
      sequencer: changes in parse_insn_buffer()
      sequencer: make the todo_list structure public
      sequencer: remove the 'arg' field from todo_item
      sequencer: refactor transform_todos() to work on a todo_list
      sequencer: introduce todo_list_write_to_file()
      sequencer: refactor check_todo_list() to work on a todo_list
      sequencer: refactor sequencer_add_exec_commands() to work on a todo_list
      sequencer: refactor rearrange_squash() to work on a todo_list
      sequencer: make sequencer_make_script() write its script to a strbuf
      sequencer: change complete_action() to use the refactored functions
      rebase--interactive: move sequencer_add_exec_commands()
      rebase--interactive: move rearrange_squash_in_todo_file()
      sequencer: refactor skip_unnecessary_picks() to work on a todo_list
      rebase-interactive: use todo_list_write_to_file() in edit_todo_list()
      rebase-interactive: append_todo_help() changes
      rebase-interactive: rewrite edit_todo_list() to handle the initial edit
      sequencer: use edit_todo_list() in complete_action()
      rebase--interactive: move transform_todo_file()

Alexander Blesius (1):
      doc: fix typos in man pages

Alexander Shopov (1):
      gitk: Update Bulgarian translation (317t)

Anders Waldenborg (7):
      doc: group pretty-format.txt placeholders descriptions
      pretty: allow %(trailers) options with explicit value
      pretty: single return path in %(trailers) handling
      pretty: allow showing specific trailers
      pretty: add support for "valueonly" option in %(trailers)
      strbuf: separate callback for strbuf_expand:ing literals
      pretty: add support for separator option in %(trailers)

Andreas Heiduk (1):
      revisions.txt: remove ambibuity between <rev>:<path> and :<path>

Andrei Rybak (1):
      t4150: remove unused variable

Baruch Siach (1):
      send-email: don't cc *-by lines with '-' prefix

Beat Bolli (1):
      unicode: update the width tables to Unicode 12

Ben Peart (1):
      read-cache: add post-index-change hook

Boxuan Li (1):
      t4253-am-keep-cr-dos: avoid using pipes

Brandon Richardson (1):
      commit-tree: utilize parse-options api

Carlo Marcelo Arenas Belón (1):
      http-push: prevent format overflow warning with gcc >= 9

Chris Mayo (1):
      notes: correct documentation of format_display_notes()

Chris. Webster (1):
      diff-highlight: use correct /dev/null for UNIX and Windows

Christian Couder (4):
      t6050: use test_line_count instead of wc -l
      t6050: redirect expected error output to a file
      replace: peel tag when passing a tag as parent to --graft
      replace: peel tag when passing a tag first to --graft

Clément Chigot (2):
      Makefile: use fileno macro work around on AIX
      git-compat-util: work around for access(X_OK) under root

Corentin BOMPARD (2):
      doc/CodingGuidelines: URLs and paths as monospace
      doc: format pathnames and URLs as monospace.

Damien Robert (1):
      ref-filter: use correct branch for %(push:track)

Daniels Umanovskis (1):
      branch: introduce --show-current display option

David Aguilar (2):
      mergetools: add support for smerge (Sublime Merge)
      contrib/completion: add smerge to the mergetool completion candidates

David Kastrup (1):
      blame.c: don't drop origin blobs as eagerly

Denton Liu (38):
      completion: complete git submodule absorbgitdirs
      git-submodule.txt: "--branch <branch>" option defaults to 'master'
      submodule--helper: teach config subcommand --unset
      submodule: document default behavior
      git-reset.txt: clarify documentation
      git-clean.txt: clarify ignore pattern files
      docs: move core.excludesFile from git-add to gitignore
      contrib/subtree: ensure only one rev is provided
      midx.c: convert FLEX_ALLOC_MEM to FLEX_ALLOC_STR
      cocci: FLEX_ALLOC_MEM to FLEX_ALLOC_STR
      tag: fix formatting
      submodule: teach set-branch subcommand
      tag: advise on nested tags
      t7600: clean up style
      t3507: clean up style
      t7604: clean up style
      t7502: clean up style
      commit: extract cleanup_mode functions to sequencer
      parse-options.h: extract common --cleanup option
      merge: cleanup messages like commit
      merge: add scissors line on merge conflict
      cherry-pick/revert: add scissors line on merge conflict
      t7610: unsuppress output
      t7610: add mergetool --gui tests
      *.[ch]: remove extern from function declarations using spatch
      *.[ch]: remove extern from function declarations using sed
      *.[ch]: manually align parameter lists
      t2018: cleanup in current test
      branch: make create_branch accept a merge base rev
      revisions.txt: change "rev" to "<rev>"
      revisions.txt: mark optional rev arguments with []
      revisions.txt: mention <rev>~ form
      tag: fix typo in nested tagging hint
      mergetool: use get_merge_tool function
      mergetool--lib: create gui_mode function
      mergetool: fallback to tool when guitool unavailable
      difftool: make --gui, --tool and --extcmd mutually exclusive
      difftool: fallback on merge.guitool

Derrick Stolee (4):
      trace2:data: pack-objects: add trace2 regions
      midx: pass a repository pointer
      midx: add packs to packed_git linked list
      trace2: add variable description to git.txt

Dustin Spicuzza (1):
      cvsexportcommit: force crlf translation

Elijah Newren (23):
      log,diff-tree: add --combined-all-paths option
      merge-options.txt: correct wording of --no-commit option
      t9300: demonstrate bug with get-mark and empty orphan commits
      git-fast-import.txt: fix wording about where ls command can appear
      fast-import: check most prominent commands first
      fast-import: only allow cat-blob requests where it makes sense
      fast-import: fix erroneous handling of get-mark with empty orphan commits
      Use 'unsigned short' for mode, like diff_filespec does
      merge-recursive: rename merge_options argument from 'o' to 'opt'
      merge-recursive: rename diff_filespec 'one' to 'o'
      merge-recursive: rename locals 'o' and 'a' to 'obuf' and 'abuf'
      merge-recursive: use 'ci' for rename_conflict_info variable name
      merge-recursive: move some struct declarations together
      merge-recursive: shrink rename_conflict_info
      merge-recursive: remove ren[12]_other fields from rename_conflict_info
      merge-recursive: track branch where rename occurred in rename struct
      merge-recursive: cleanup handle_rename_* function signatures
      merge-recursive: switch from (oid,mode) pairs to a diff_filespec
      t6043: fix copied test description to match its purpose
      merge-recursive: track information associated with directory renames
      merge-recursive: give callers of handle_content_merge() access to contents
      merge-recursive: switch directory rename detection default
      Honor core.precomposeUnicode in more places

Eric Sunshine (1):
      check-non-portable-shell: support Perl versions older than 5.10

Eric Wong (1):
      repack: enable bitmaps by default on bare repos

Jean-Noël Avila (2):
      l10n: fr.po remove obsolete entries
      Doc: fix misleading asciidoc formating

Jeff Hostetler (29):
      trace2: Documentation/technical/api-trace2.txt
      trace2: create new combined trace facility
      trace2: collect Windows-specific process information
      trace2:data: add trace2 regions to wt-status
      trace2:data: add editor/pager child classification
      trace2:data: add trace2 sub-process classification
      trace2:data: add trace2 transport child classification
      trace2:data: add subverb to checkout command
      trace2:data: add subverb to reset command
      trace2:data: add trace2 hook classification
      trace2:data: add subverb for rebase
      trace2:data: add trace2 instrumentation to index read/write
      trace2: t/helper/test-trace2, t0210.sh, t0211.sh, t0212.sh
      trace2: add for_each macros to clang-format
      progress: add sparse mode to force 100% complete message
      trace2:data: add trace2 data to midx
      midx: add progress indicators in multi-pack-index verify
      midx: during verify group objects by packfile to speed verification
      config: initialize opts structure in repo_read_config()
      trace2: refactor setting process starting time
      trace2: add absolute elapsed time to start event
      trace2: find exec-dir before trace2 initialization
      config: add read_very_early_config()
      trace2: use system/global config for default trace2 settings
      trace2: report peak memory usage of the process
      trace2: clarify UTC datetime formatting
      trace2: make SIDs more unique
      trace2: update docs to describe system/global config settings
      trace2: fixup access problem on /etc/gitconfig in read_very_early_config

Jeff King (92):
      prune: lazily perform reachability traversal
      prune: use bitmaps for reachability traversal
      prune: check SEEN flag for reachability
      t5304: rename "sha1" variables to "oid"
      diff: drop options parameter from diffcore_fix_diff_index()
      diff: drop unused color reset parameters
      diff: drop unused emit data parameter from sane_truncate_line()
      diff: drop complete_rewrite parameter from run_external_diff()
      merge-recursive: drop several unused parameters
      pack-objects: drop unused parameter from oe_map_new_pack()
      files-backend: drop refs parameter from split_symref_update()
      ref-filter: drop unused buf/sz pairs
      ref-filter: drop unused "obj" parameters
      ref-filter: drop unused "sz" parameters
      diff: reuse diff setup for --no-index case
      bisect: use string arguments to feed internal diff-tree
      bisect: fix internal diff-tree config loading
      bisect: make diff-tree output prettier
      fetch: avoid calling write_or_die()
      fetch: ignore SIGPIPE during network operation
      rev-list: allow cached objects in existence check
      doc/fsck: clarify --connectivity-only behavior
      fsck: always compute USED flags for unreachable objects
      compat/bswap: add include header guards
      config: document --type=color output is a complete line
      line-log: suppress diff output with "-s"
      line-log: detect unsupported formats
      point pull requesters to GitGitGadget
      Makefile: fix unaligned loads in sha1dc with UBSan
      t5310: correctly remove bitmaps for jgit test
      pack-objects: default to writing bitmap hash-cache
      perf-lib.sh: rely on test-lib.sh for --tee handling
      revision: drop some unused "revs" parameters
      log: drop unused rev_info from early output
      log: drop unused "len" from show_tagger()
      update-index: drop unused prefix_length parameter from do_reupdate()
      test-date: drop unused "now" parameter from parse_dates()
      unpack-trees: drop name_entry from traverse_by_cache_tree()
      unpack-trees: drop unused error_type parameters
      report_path_error(): drop unused prefix parameter
      fetch_pack(): drop unused parameters
      parse-options: drop unused ctx parameter from show_gitcomp()
      pretty: drop unused "type" parameter in needs_rfc2047_encoding()
      pretty: drop unused strbuf from parse_padding_placeholder()
      git: read local config in --list-cmds
      completion: fix multiple command removals
      parse_opt_ref_sorting: always use with NONEG flag
      refs/files-backend: handle packed transaction prepare failure
      refs/files-backend: don't look at an aborted transaction
      http: factor out curl result code normalization
      http: normalize curl results for dumb loose and alternates fetches
      http: use normalize_curl_result() instead of manual conversion
      revision: use a prio_queue to hold rewritten parents
      get_commit_tree(): return NULL for broken tree
      rev-list: let traversal die when --missing is not in use
      rev-list: detect broken root trees
      test-prio-queue: use xmalloc
      xdiff: use git-compat-util
      xdiff: use xmalloc/xrealloc
      progress: use xmalloc/xcalloc
      t5516: drop ok=sigpipe from unreachable-want tests
      t5530: check protocol response for "not our ref"
      upload-pack: send ERR packet for non-tip objects
      pkt-line: prepare buffer before handling ERR packets
      fetch: use free_refs()
      remote.c: make singular free_ref() public
      fetch: do not consider peeled tags as advertised tips
      packfile.h: drop extern from function declarations
      pack-revindex: open index if necessary
      t5319: fix bogus cat-file argument
      t5319: drop useless --buffer from cat-file
      midx: check both pack and index names for containment
      packfile: fix pack basename computation
      http: simplify parsing of remote objects/info/packs
      server-info: fix blind pointer arithmetic
      server-info: simplify cleanup in parse_pack_def()
      server-info: use strbuf to read old info/packs file
      server-info: drop nr_alloc struct member
      server-info: drop objdirlen pointer arithmetic
      update_info_refs(): drop unused force parameter
      t5304: add a test for pruning with bitmaps
      untracked-cache: be defensive about missing NULs in index
      untracked-cache: simplify parsing by dropping "next"
      untracked-cache: simplify parsing by dropping "len"
      p5302: create the repo in each index-pack test
      doc/ls-files: put nested list for "-t" option into block
      t/perf: depend on perl JSON only when using --codespeed
      t/perf: add perf script for partial clones
      coccicheck: optionally batch spatch invocations
      t/lib-httpd: pass LSAN_OPTIONS through apache
      coccicheck: make batch size of 0 mean "unlimited"
      get_oid: handle NULL repo->index

Jiang Xin (4):
      t5323: test cases for git-pack-redundant
      pack-redundant: delay creation of unique_objects
      pack-redundant: rename pack_list.all_objects
      pack-redundant: consistent sort method

Joel Teichroeb (5):
      stash: improve option parsing test coverage
      stash: convert apply to builtin
      stash: convert drop and clear to builtin
      stash: convert branch to builtin
      stash: convert pop to builtin

Joey Hess (1):
      convert: avoid malloc of original file size

Johannes Schindelin (63):
      ident: add the ability to provide a "fallback identity"
      travis: remove the hack to build the Windows job on Azure Pipelines
      tests: let --stress-limit=<N> imply --stress
      tests: introduce --stress-jobs=<N>
      built-in rebase: no need to check out `onto` twice
      built-in rebase: use the correct reflog when switching branches
      built-in rebase: demonstrate that ORIG_HEAD is not set correctly
      built-in rebase: set ORIG_HEAD just once, before the rebase
      Makefile: use `git ls-files` to list header files, if possible
      curl: anonymize URLs in error messages and warnings
      remote-curl: mark all error messages for translation
      stash: add back the original, scripted `git stash`
      stash: optionally use the scripted version again
      tests: add a special setup where stash.useBuiltin is off
      legacy stash: fix "rudimentary backport of -q"
      built-in stash: handle :(glob) pathspecs again
      mingw: drop MakeMaker reference
      mingw: allow building with an MSYS2 runtime v3.x
      rebase: deprecate --preserve-merges
      mingw: respect core.hidedotfiles = false in git-init again
      test-lib: introduce 'test_atexit'
      git-daemon: use 'test_atexit` to stop 'git-daemon'
      git p4 test: use 'test_atexit' to kill p4d and the watchdog process
      rebase -i: demonstrate obscure loose object cache bug
      sequencer: improve error message when an OID could not be parsed
      sequencer: move stale comment into correct location
      get_oid(): when an object was not found, try harder
      difftool: remove obsolete (and misleading) comment
      parse-options: make OPT_ARGUMENT() more useful
      difftool: allow running outside Git worktrees with --no-index
      docs: move gitremote-helpers into section 7
      docs: do not document the `git remote-testgit` command
      check-docs: really look at the documented commands again
      check-docs: do not expect guide pages to correspond to commands
      check-docs: fix for setups where executables have an extension
      tests (rebase): spell out the `--keep-empty` option
      tests (rebase): spell out the `--force-rebase` option
      t7810: do not abbreviate `--no-exclude-standard` nor `--invert-match`
      t5531: avoid using an abbreviated option
      tests (push): do not abbreviate the `--follow-tags` option
      tests (status): spell out the `--find-renames` option in full
      tests (pack-objects): use the full, unabbreviated `--revs` option
      t3301: fix false negative
      untracked cache: fix off-by-one
      tests: disallow the use of abbreviated options (by default)
      t9822: skip tests if file names cannot be ISO-8859-1 encoded
      macOS: make sure that gettext is found
      remote-testgit: move it into the support directory for t5801
      Makefile: drop the NO_INSTALL variable
      help -a: do not list commands that are excluded from the build
      check-docs: allow command-list.txt to contain excluded commands
      docs: exclude documentation for commands that have been excluded
      check-docs: do not bother checking for legacy scripts' documentation
      test-tool: handle the `-C <directory>` option just like `git`
      Turn `git serve` into a test helper
      t5580: verify that alternates can be UNC paths
      fsmonitor: demonstrate that it is not refreshed after discard_index()
      fsmonitor: force a refresh after the index was discarded
      t6500(mingw): use the Windows PID of the shell
      difftool --no-index: error out on --dir-diff (and don't crash)
      status: fix display of rebase -ir's `label` command
      parse-options: adjust `parse_opt_unknown_cb()`s declared return type
      stash: document stash.useBuiltin

Jonathan Tan (24):
      remote-curl: reduce scope of rpc_state.argv
      remote-curl: reduce scope of rpc_state.stdin_preamble
      remote-curl: reduce scope of rpc_state.result
      remote-curl: refactor reading into rpc_state's buf
      remote-curl: use post_rpc() for protocol v2 also
      tests: define GIT_TEST_PROTOCOL_VERSION
      t5601: check ssh command only with protocol v0
      tests: always test fetch of unreachable with v0
      t5503: fix overspecification of trace expectation
      t5512: compensate for v0 only sending HEAD symrefs
      t5700: only run with protocol version 1
      tests: fix protocol version for overspecifications
      t5552: compensate for v2 filtering ref adv.
      submodule: explain first attempt failure clearly
      t5551: mark half-auth no-op fetch test as v0-only
      fetch-pack: call prepare_shallow_info only if v0
      fetch-pack: respect --no-update-shallow in v2
      sha1-file: support OBJECT_INFO_FOR_PREFETCH
      fetch-pack: binary search when storing wanted-refs
      diff: batch fetching of missing blobs
      pack-objects: write objects packed to trace2
      transport: die if server options are unsupported
      clone: send server options when using protocol v2
      worktree: update is_bare heuristics

Jordi Mas (1):
      l10n: Fixes to Catalan translation

Josh Steadmon (5):
      protocol-capabilities.txt: document symref
      trace2: write to directory targets
      clone: do faster object check for partial clones
      trace2: fix incorrect function pointer check
      commit-graph: fix memory leak

Junio C Hamano (16):
      test: caution on our version of 'yes'
      builtin/log: downcase the beginning of error messages
      format-patch: notice failure to open cover letter for writing
      Start 2.22 cycle
      The second batch
      The third batch
      The fourth batch
      gettext tests: export the restored GIT_TEST_GETTEXT_POISON
      The fifth batch
      The sixth batch
      Makefile: dedup list of files obtained from ls-files
      The seventh batch
      The eighth batch
      Git 2.22-rc0
      pkt-line: drop 'const'-ness of a param to set_packet_header()
      Git 2.22-rc1

Kyle Meyer (5):
      rebase docs: fix "gitlink" typo
      submodule: refuse to add repository with no commits
      dir: do not traverse repositories with no commits
      add: error appropriately on repository with no commits
      t3000 (ls-files -o): widen description to reflect current tests

Martin Ågren (14):
      setup: free old value before setting `work_tree`
      setup: fix memory leaks with `struct repository_format`
      config/diff.txt: drop spurious backtick
      config/fsck.txt: avoid starting line with dash
      git.txt: remove empty line before list continuation
      git-svn.txt: drop escaping '\' that ends up being rendered
      Documentation: turn middle-of-line tabs into spaces
      Documentation/Makefile: add missing xsl dependencies for manpages
      Documentation/Makefile: add missing dependency on asciidoctor-extensions
      asciidoctor-extensions: fix spurious space after linkgit
      Doc: auto-detect changed build flags
      doc-diff: let `render_tree()` take an explicit directory name
      doc-diff: support diffing from/to AsciiDoc(tor)
      doc-diff: add `--cut-header-footer`

Matthew Kraai (1):
      t3903: add test for --intent-to-add file

Michal Suchanek (1):
      worktree: fix worktree add race

Mike Hommey (2):
      fix pack protocol example client/server communication
      Make fread/fwrite-like functions in http.c more like fread/fwrite.

Nguyễn Thái Ngọc Duy (126):
      parse-options.h: remove extern on function prototypes
      parse-options: add one-shot mode
      parse-options: disable option abbreviation with PARSE_OPT_KEEP_UNKNOWN
      parse-options: add OPT_BITOP()
      parse-options: stop abusing 'callback' for lowlevel callbacks
      parse-options: avoid magic return codes
      parse-options: allow ll_callback with OPTION_CALLBACK
      diff.h: keep forward struct declarations sorted
      diff.h: avoid bit fields in struct diff_flags
      diff.c: prepare to use parse_options() for parsing
      diff.c: convert -u|-p|--patch
      diff.c: convert -U|--unified
      diff.c: convert -W|--[no-]function-context
      diff.c: convert --raw
      read-cache.c: fix writing "link" index ext with null base oid
      completion: add more parameter value completion
      diff-parseopt: convert --patch-with-raw
      diff-parseopt: convert --numstat and --shortstat
      diff-parseopt: convert --dirstat and friends
      diff-parseopt: convert --check
      diff-parseopt: convert --summary
      diff-parseopt: convert --patch-with-stat
      diff-parseopt: convert --name-only
      diff-parseopt: convert --name-status
      diff-parseopt: convert -s|--no-patch
      diff-parseopt: convert --stat*
      diff-parseopt: convert --[no-]compact-summary
      diff-parseopt: convert --output-*
      diff-parseopt: convert -B|--break-rewrites
      diff-parseopt: convert -M|--find-renames
      diff-parseopt: convert -D|--irreversible-delete
      diff-parseopt: convert -C|--find-copies
      diff-parseopt: convert --find-copies-harder
      diff-parseopt: convert --no-renames|--[no--rename-empty
      diff-parseopt: convert --relative
      diff-parseopt: convert --[no-]minimal
      diff-parseopt: convert --ignore-some-changes
      Delete check-racy.c
      diff-parseopt: convert --[no-]indent-heuristic
      diff-parseopt: convert --patience
      diff-parseopt: convert --histogram
      diff-parseopt: convert --diff-algorithm
      diff-parseopt: convert --anchored
      diff-parseopt: convert --binary
      diff-parseopt: convert --full-index
      diff-parseopt: convert -a|--text
      diff-parseopt: convert -R
      diff-parseopt: convert --[no-]follow
      diff-parseopt: convert --[no-]color
      diff-parseopt: convert --word-diff
      diff-parseopt: convert --word-diff-regex
      diff-parseopt: convert --color-words
      diff-parseopt: convert --exit-code
      diff-parseopt: convert --quiet
      diff-parseopt: convert --ext-diff
      diff-parseopt: convert --textconv
      diff-parseopt: convert --ignore-submodules
      diff-parseopt: convert --submodule
      files-backend.c: factor out per-worktree code in loose_fill_ref_dir()
      files-backend.c: reduce duplication in add_per_worktree_entries_to_dir()
      Make sure refs/rewritten/ is per-worktree
      unpack-trees: fix oneway_merge accidentally carry over stage index
      checkout.txt: note about losing staged changes with --merge
      commit: improve error message in "-a <paths>" case
      unpack-trees: keep gently check inside add_rejected_path
      unpack-trees: rename "gently" flag to "quiet"
      read-tree: add --quiet
      checkout: prevent losing staged changes with --merge
      diff-parseopt: convert --ws-error-highlight
      diff-parseopt: convert --ita-[in]visible-in-index
      diff-parseopt: convert -z
      diff-parseopt: convert -l
      diff-parseopt: convert -S|-G
      diff-parseopt: convert --pickaxe-all|--pickaxe-regex
      diff-parseopt: convert -O
      diff-parseopt: convert --find-object
      diff-parseopt: convert --diff-filter
      diff-parseopt: convert --[no-]abbrev
      diff-parseopt: convert --[src|dst]-prefix
      diff-parseopt: convert --line-prefix
      diff-parseopt: convert --no-prefix
      diff-parseopt: convert --inter-hunk-context
      diff-parseopt: convert --[no-]color-moved
      diff-parseopt: convert --color-moved-ws
      diff.c: allow --no-color-moved-ws
      range-diff: use parse_options() instead of diff_opt_parse()
      diff --no-index: use parse_options() instead of diff_opt_parse()
      am: avoid diff_opt_parse()
      config: correct '**' matching in includeIf patterns
      interpret-trailers.txt: start the desc line with a capital letter
      read-tree.txt: clarify --reset and worktree changes
      packfile.c: add repo_approximate_object_count()
      refs.c: add refs_ref_exists()
      refs.c: add refs_shorten_unambiguous_ref()
      refs.c: remove the_repo from substitute_branch_name()
      refs.c: remove the_repo from expand_ref()
      refs.c: add repo_dwim_ref()
      refs.c: add repo_dwim_log()
      refs.c: remove the_repo from read_ref_at()
      submodule foreach: fix "<command> --quiet" not being respected
      commit.cocci: refactor code, avoid double rewrite
      commit.c: add repo_get_commit_tree()
      sha1-name.c: remove the_repo from sort_ambiguous()
      sha1-name.c: remove the_repo from find_abbrev_len_packed()
      sha1-name.c: add repo_find_unique_abbrev_r()
      sha1-name.c: store and use repo in struct disambiguate_state
      sha1-name.c: add repo_for_each_abbrev()
      sha1-name.c: remove the_repo from get_short_oid()
      sha1-name.c: remove the_repo from interpret_nth_prior_checkout()
      sha1-name.c: remove the_repo from interpret_branch_mark()
      sha1-name.c: add repo_interpret_branch_name()
      sha1-name.c: remove the_repo from get_oid_oneline()
      sha1-name.c: remove the_repo from get_describe_name()
      sha1-name.c: remove the_repo from get_oid_basic()
      sha1-name.c: remove the_repo from get_oid_1()
      sha1-name.c: remove the_repo from handle_one_ref()
      sha1-name.c: remove the_repo from diagnose_invalid_index_path()
      sha1-name.c: remove the_repo from resolve_relative_path()
      sha1-name.c: remove the_repo from get_oid_with_context_1()
      sha1-name.c: add repo_get_oid()
      submodule-config.c: use repo_get_oid for reading .gitmodules
      sha1-name.c: remove the_repo from maybe_die_on_misspelt_object_name
      sha1-name.c: remove the_repo from other get_oid_*
      sha1-name.c: remove the_repo from get_oid_mb()
      parse-options: don't emit "ambiguous option" for aliases
      submodule--helper: add a missing \n

Paul-Sebastian Ungureanu (17):
      sha1-name.c: add `get_oidf()` which acts like `get_oid()`
      strbuf.c: add `strbuf_join_argv()`
      strbuf.c: add `strbuf_insertf()` and `strbuf_vinsertf()`
      t3903: modernize style
      stash: rename test cases to be more descriptive
      stash: add tests for `git stash show` config
      stash: mention options in `show` synopsis
      stash: convert list to builtin
      stash: convert show to builtin
      stash: convert store to builtin
      stash: convert create to builtin
      stash: convert push to builtin
      stash: make push -q quiet
      stash: convert save to builtin
      stash: optimize `get_untracked_files()` and `check_changes()`
      stash: replace all `write-tree` child processes with API calls
      stash: convert `stash--helper.c` into `stash.c`

Philip Oakley (2):
      rerere doc: quote `rerere.enabled`
      describe doc: remove '7-char' abbreviation reference

Phillip Wood (21):
      am/cherry-pick/rebase/revert: document --rerere-autoupdate
      merge: tweak --rerere-autoupdate documentation
      sequencer: break some long lines
      cherry-pick: demonstrate option amnesia
      cherry-pick --continue: remember options
      commit/reset: try to clean up sequencer state
      fix cherry-pick/revert status after commit
      sequencer: fix cleanup with --signoff and -x
      sequencer.c: save and restore cleanup mode
      sequencer: always discard index after checkout
      rebase: don't translate trace strings
      rebase: rename write_basic_state()
      rebase: use OPT_RERERE_AUTOUPDATE()
      rebase -i: combine rebase--interactive.c with rebase.c
      rebase -i: remove duplication
      rebase -i: use struct commit when parsing options
      rebase -i: use struct object_id for squash_onto
      rebase -i: use struct rebase_options to parse args
      rebase -i: use struct rebase_options in do_interactive_rebase()
      rebase: use a common action enum
      rebase -i: run without forking rebase--interactive

Ramsay Jones (2):
      prune-packed: check for too many arguments
      Makefile: fix 'hdr-check' when GCRYPT not installed

René Scharfe (1):
      get-tar-commit-id: parse comment record

Robert P. J. Day (3):
      mention use of "hooks.allownonascii" in "man githooks"
      docs/git-gc: fix typo "--prune=all" to "--prune=now"
      attr.c: ".gitattribute" -> ".gitattributes" (comments)

Rohit Ashiwal (3):
      test functions: add function `test_file_not_empty`
      t3600: modernize style
      t3600: use helpers to replace test -d/f/e/s <path>

SZEDER Gábor (24):
      test-lib: fix interrupt handling with 'dash' and '--verbose-log -x'
      t/lib-git-daemon: make sure to kill the 'git-daemon' process
      tests: use 'test_atexit' to stop httpd
      t0301-credential-cache: use 'test_atexit' to stop the credentials helper
      git p4 test: clean up the p4d cleanup functions
      git p4 test: simplify timeout handling
      git p4 test: disable '-x' tracing in the p4d watchdog loop
      t9811-git-p4-label-import: fix pipeline negation
      t5318-commit-graph: remove unused variable
      Documentation/git-diff-tree.txt: fix formatting
      Documentation/technical/api-config.txt: fix formatting
      Documentation/technical/protocol-v2.txt: fix formatting
      ci: install Asciidoctor in 'ci/install-dependencies.sh'
      index-pack: show progress while checking objects
      ci: stick with Asciidoctor v1.5.8 for now
      ci: fix AsciiDoc/Asciidoctor stderr check in the documentation build job
      progress: make display_progress() return void
      progress: assemble percentage and counters in a strbuf before printing
      blame: default to HEAD in a bare repo when no start commit is given
      builtin rebase: use FREE_AND_NULL
      builtin rebase: use oideq()
      progress: clear previous progress update dynamically
      progress: break too long progress bar lines
      ci: install 'libsvn-perl' instead of 'git-svn'

Sun Chao (2):
      pack-redundant: delete redundant code
      pack-redundant: new algorithm to find min packs

Sven Strickroth (1):
      MSVC: include compat/win32/path-utils.h for MSVC, too, for real_path()

Tanushree Tumane (1):
      mingw: remove obsolete IPv6-related code

Taylor Blau (4):
      t: move 'hex2oct' into test-lib-functions.sh
      t: introduce tests for unexpected object types
      list-objects.c: handle unexpected non-blob entries
      list-objects.c: handle unexpected non-tree entries

Thomas Gummerer (15):
      move worktree tests to t24*
      entry: factor out unlink_entry function
      entry: support CE_WT_REMOVE flag in checkout_entry
      read-cache: add invalidate parameter to remove_marked_cache_entries
      checkout: clarify comment
      checkout: factor out mark_cache_entry_for_checkout function
      checkout: introduce --{,no-}overlay option
      checkout: introduce checkout.overlayMode config
      revert "checkout: introduce checkout.overlayMode config"
      ident: don't require calling prepare_fallback_ident first
      stash: drop unused parameter
      stash: pass pathspec as pointer
      glossary: add definition for overlay
      stash: setup default diff output format if necessary
      ls-files: use correct format string

Todd Zullinger (8):
      t4038-diff-combined: quote paths with whitespace
      t9902: test multiple removals via completion.commands
      completion: use __git when calling --list-cmds
      Documentation/rev-list-options: wrap --date=<format> block with "--"
      Documentation/git-status: fix titles in porcelain v2 section
      Documentation/git-svn: improve asciidoctor compatibility
      Documentation/git-show-branch: avoid literal {apostrophe}
      test-lib: try harder to ensure a working jgit

Torsten Bögershausen (1):
      trace2: NULL is not allowed for va_list

Trần Ngọc Quân (1):
      l10n: Updated Vietnamese translation for v2.21 rd2

Vadim Kochan (1):
      autoconf: #include <libintl.h> when checking for gettext()

William Hubbs (1):
      config: allow giving separate author and committer idents

Yash Bhatambare (1):
      gitattributes.txt: fix typo

brian m. carlson (35):
      t/lib-submodule-update: use appropriate length constant
      khash: move oid hash table definition
      pack-bitmap: make bitmap header handling hash agnostic
      pack-bitmap: convert struct stored_bitmap to object_id
      pack-bitmap: replace sha1_to_hex
      pack-bitmap: switch hard-coded constants to the_hash_algo
      pack-bitmap: switch hash tables to use struct object_id
      submodule: avoid hard-coded constants
      notes-merge: switch to use the_hash_algo
      notes: make hash size independent
      notes: replace sha1_to_hex
      object-store: rename and expand packed_git's sha1 member
      builtin/name-rev: make hash-size independent
      fast-import: make hash-size independent
      fast-import: replace sha1_to_hex
      builtin/am: make hash size independent
      builtin/pull: make hash-size independent
      http-push: convert to use the_hash_algo
      http-backend: allow 64-character hex names
      http-push: remove remaining uses of sha1_to_hex
      http-walker: replace sha1_to_hex
      http: replace hard-coded constant with the_hash_algo
      http: compute hash of downloaded objects using the_hash_algo
      http: replace sha1_to_hex
      remote-curl: make hash size independent
      hash: add a function to lookup hash algorithm by length
      builtin/get-tar-commit-id: make hash size independent
      archive: convert struct archiver_args to object_id
      refspec: make hash size independent
      builtin/difftool: use parse_oid_hex
      dir: make untracked cache extension hash size independent
      read-cache: read data in a hash-independent way
      Git.pm: make hash size independent
      gitweb: make hash size independent
      send-email: default to quoted-printable when CR is present

Ævar Arnfjörð Bjarmason (44):
      receive-pack: fix use-after-free bug
      commit-graph tests: split up corrupt_graph_and_verify()
      commit-graph tests: test a graph that's too small
      Makefile: remove an out-of-date comment
      Makefile: move "strip" assignment down from flags
      Makefile: add/remove comments at top and tweak whitespace
      Makefile: Move *_LIBS assignment into its own section
      Makefile: move the setting of *FLAGS closer to "include"
      Makefile: allow for combining DEVELOPER=1 and CFLAGS="..."
      gc: remove redundant check for gc_auto_threshold
      gc: convert to using the_hash_algo
      gc: refactor a "call me once" pattern
      reflog tests: make use of "test_config" idiom
      reflog tests: test for the "points nowhere" warning
      rebase: remove the rebase.useBuiltin setting
      gc docs: modernize the advice for manually running "gc"
      gc docs: stop noting "repack" flags
      gc docs: clean grammar for "gc.bigPackThreshold"
      commit-graph: fix segfault on e.g. "git status"
      commit-graph: don't early exit(1) on e.g. "git status"
      commit-graph: don't pass filename to load_commit_graph_one_fd_st()
      commit-graph verify: detect inability to read the graph
      commit-graph write: don't die if the existing graph is corrupt
      commit-graph: improve & i18n error messages
      reflog tests: assert lack of early exit with expiry="never"
      gc: handle & check gc.reflogExpire config
      test-lib: whitelist GIT_TR2_* in the environment
      gc docs: include the "gc.*" section from "config" in "gc"
      gc docs: re-flow the "gc.*" section in "config"
      gc docs: fix formatting for "gc.writeCommitGraph"
      gc docs: note how --aggressive impacts --window & --depth
      gc docs: downplay the usefulness of --aggressive
      gc docs: note "gc --aggressive" in "fast-import"
      gc docs: clarify that "gc" doesn't throw away referenced objects
      gc docs: remove incorrect reference to gc.auto=0
      perf README: correct docs for 3c8f12c96c regression
      perf aggregate: remove GIT_TEST_INSTALLED from --codespeed
      perf-lib.sh: make "./run <revisions>" use the correct gits
      perf-lib.sh: remove GIT_TEST_INSTALLED from perf-lib.sh
      perf tests: add "bindir" prefix to git tree test results
      perf-lib.sh: forbid the use of GIT_TEST_INSTALLED
      trace2: fix up a missing "leave" entry point
      trace2: fix up a missing "leave" entry point
      sha1dc: update from upstream

İsmail Dönmez (2):
      mingw: do not let ld strip relocations
      mingw: enable DEP and ASLR


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.20.0
@ 2018-12-09  8:43  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2018-12-09  8:43 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

The latest feature release Git v2.20.0 is now available at the usual
places.  It is comprised of 962 non-merge commits since v2.19.0
(this is by far the largest release in v2.x.x series), contributed
by 83 people, 26 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.20.0'
tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.19.0 are as follows.
Welcome to the Git development community!

  Aaron Lindsay, Alexander Pyhalov, Anton Serbulov, Brendan
  Forster, Carlo Marcelo Arenas Belón, Daniels Umanovskis,
  David Zych, Đoàn Trần Công Danh, Frederick Eaton, Greg
  Hurrell, James Knight, Jann Horn, Joshua Watt, Loo Rong Jie,
  Lucas De Marchi, Matthew DeVore, Mihir Mehta, Minh Nguyen,
  Nickolai Belakovski, Roger Strain, Sam McKelvie, Saulius Gurklys,
  Shulhan, Steven Fernandez, Strain, Roger L, and Tim Schumacher.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alban Gruin, Alexander Shopov,
  Andreas Gruenbacher, Andreas Heiduk, Antonio Ospite, Ben Peart,
  Brandon Williams, brian m. carlson, Christian Couder, Christian
  Hesse, Christopher Díaz Riveros, Denton Liu, Derrick Stolee,
  Elijah Newren, Eric Sunshine, Jean-Noël Avila, Jeff Hostetler,
  Jeff King, Jiang Xin, Johannes Schindelin, Johannes Sixt,
  Jonathan Nieder, Jonathan Tan, Jordi Mas, Josh Steadmon,
  Junio C Hamano, Karsten Blees, Luke Diamand, Martin Ågren,
  Max Kirillov, Michael Witten, Michał Górny, Nguyễn Thái
  Ngọc Duy, Noam Postavsky, Olga Telezhnaya, Peter Krefting,
  Phillip Wood, Pratik Karki, Rafael Ascensão, Ralf Thielow,
  Ramsay Jones, Rasmus Villemoes, René Scharfe, Sebastian Staudt,
  Stefan Beller, Stephen P. Smith, Steve Hoelzer, Sven Strickroth,
  SZEDER Gábor, Tao Qingyun, Taylor Blau, Thomas Gummerer,
  Todd Zullinger, Torsten Bögershausen, Trần Ngọc Quân,
  and Uwe Kleine-König.

----------------------------------------------------------------

Git 2.20 Release Notes
======================

Backward Compatibility Notes
----------------------------

 * "git branch -l <foo>" used to be a way to ask a reflog to be
   created while creating a new branch, but that is no longer the
   case.  It is a short-hand for "git branch --list <foo>" now.

 * "git push" into refs/tags/* hierarchy is rejected without getting
   forced, but "git fetch" (misguidedly) used the "fast forwarding"
   rule used for the refs/heads/* hierarchy; this has been corrected,
   which means some fetches of tags that did not fail with older
   version of Git will fail without "--force" with this version.

 * "git help -a" now gives verbose output (same as "git help -av").
   Those who want the old output may say "git help --no-verbose -a"..

 * "git cpn --help", when "cpn" is an alias to, say, "cherry-pick -n",
   reported only the alias expansion of "cpn" in earlier versions of
   Git.  It now runs "git cherry-pick --help" to show the manual page
   of the command, while sending the alias expansion to the standard
   error stream.

 * "git send-email" learned to grab address-looking string on any
   trailer whose name ends with "-by". This is a backward-incompatible
   change.  Adding "--suppress-cc=misc-by" on the command line, or
   setting sendemail.suppresscc configuration variable to "misc-by",
   can be used to disable this behaviour.


Updates since v2.19
-------------------

UI, Workflows & Features

 * Running "git clone" against a project that contain two files with
   pathnames that differ only in cases on a case insensitive
   filesystem would result in one of the files lost because the
   underlying filesystem is incapable of holding both at the same
   time.  An attempt is made to detect such a case and warn.

 * "git checkout -b newbranch [HEAD]" should not have to do as much as
   checking out a commit different from HEAD.  An attempt is made to
   optimize this special case.

 * "git rev-list --stdin </dev/null" used to be an error; it now shows
   no output without an error.  "git rev-list --stdin --default HEAD"
   still falls back to the given default when nothing is given on the
   standard input.

 * Lift code from GitHub to restrict delta computation so that an
   object that exists in one fork is not made into a delta against
   another object that does not appear in the same forked repository.

 * "git format-patch" learned new "--interdiff" and "--range-diff"
   options to explain the difference between this version and the
   previous attempt in the cover letter (or after the three-dashes as
   a comment).

 * "git mailinfo" used in "git am" learned to make a best-effort
   recovery of a patch corrupted by MUA that sends text/plain with
   format=flawed option.
   (merge 3aa4d81f88 rs/mailinfo-format-flowed later to maint).

 * The rules used by "git push" and "git fetch" to determine if a ref
   can or cannot be updated were inconsistent; specifically, fetching
   to update existing tags were allowed even though tags are supposed
   to be unmoving anchoring points.  "git fetch" was taught to forbid
   updates to existing tags without the "--force" option.

 * "git multi-pack-index" learned to detect corruption in the .midx
   file it uses, and this feature has been integrated into "git fsck".

 * Generation of (experimental) commit-graph files have so far been
   fairly silent, even though it takes noticeable amount of time in a
   meaningfully large repository.  The users will now see progress
   output.

 * The minimum version of Windows supported by Windows port of Git is
   now set to Vista.

 * The completion script (in contrib/) learned to complete a handful of
   options "git stash list" command takes.

 * The completion script (in contrib/) learned that "git fetch
   --multiple" only takes remote names as arguments and no refspecs.

 * "git status" learns to show progress bar when refreshing the index
   takes a long time.
   (merge ae9af12287 nd/status-refresh-progress later to maint).

 * "git help -a" and "git help -av" give different pieces of
   information, and generally the "verbose" version is more friendly
   to the new users.  "git help -a" by default now uses the more
   verbose output (with "--no-verbose", you can go back to the
   original).  Also "git help -av" now lists aliases and external
   commands, which it did not used to.

 * Unlike "grep", "git grep" by default recurses to the whole tree.
   The command learned "git grep --recursive" option, so that "git
   grep --no-recursive" can serve as a synonym to setting the
   max-depth to 0.

 * When pushing into a repository that borrows its objects from an
   alternate object store, "git receive-pack" that responds to the
   push request on the other side lists the tips of refs in the
   alternate to reduce the amount of objects transferred.  This
   sometimes is detrimental when the number of refs in the alternate
   is absurdly large, in which case the bandwidth saved in potentially
   fewer objects transferred is wasted in excessively large ref
   advertisement.  The alternate refs that are advertised are now
   configurable with a pair of configuration variables.

 * "git cmd --help" when "cmd" is aliased used to only say "cmd is
   aliased to ...".  Now it shows that to the standard error stream
   and runs "git $cmd --help" where $cmd is the first word of the
   alias expansion.

 * The documentation of "git gc" has been updated to mention that it
   is no longer limited to "pruning away crufts" but also updates
   ancillary files like commit-graph as a part of repository
   optimization.

 * "git p4 unshelve" improvements.

 * The logic to select the default user name and e-mail on Windows has
   been improved.
   (merge 501afcb8b0 js/mingw-default-ident later to maint).

 * The "rev-list --filter" feature learned to exclude all trees via
   "tree:0" filter.

 * "git send-email" learned to grab address-looking string on any
   trailer whose name ends with "-by"; --suppress-cc=misc-by on the
   command line, or setting sendemail.suppresscc configuration
   variable to "misc-by", can be used to disable this behaviour.

 * "git mergetool" learned to take the "--[no-]gui" option, just like
   "git difftool" does.

 * "git rebase -i" learned a new insn, 'break', that the user can
   insert in the to-do list.  Upon hitting it, the command returns
   control back to the user.

 * New "--pretty=format:" placeholders %GF and %GP that show the GPG
   key fingerprints have been invented.

 * On platforms with recent cURL library, http.sslBackend configuration
   variable can be used to choose a different SSL backend at runtime.
   The Windows port uses this mechanism to switch between OpenSSL and
   Secure Channel while talking over the HTTPS protocol.

 * "git send-email" learned to disable SMTP authentication via the
   "--smtp-auth=none" option, even when the smtp username is given
   (which turns the authentication on by default).

 * A fourth class of configuration files (in addition to the
   traditional "system wide", "per user in the $HOME directory" and
   "per repository in the $GIT_DIR/config") has been introduced so
   that different worktrees that share the same repository (hence the
   same $GIT_DIR/config file) can use different customization.

 * A pattern with '**' that does not have a slash on either side used
   to be an invalid one, but the code now treats such double-asterisks
   the same way as two normal asterisks that happen to be adjacent to
   each other.
   (merge e5bbe09e88 nd/wildmatch-double-asterisk later to maint).

 * The "--no-patch" option, which can be used to get a high-level
   overview without the actual line-by-line patch difference shown, of
   the "range-diff" command was earlier broken, which has been
   corrected.

 * The recently merged "rebase in C" has an escape hatch to use the
   scripted version when necessary, but it hasn't been documented,
   which has been corrected.


Performance, Internal Implementation, Development Support etc.

 * Developer builds now use -Wunused-function compilation option.

 * One of our CI tests to run with "unusual/experimental/random"
   settings now also uses commit-graph and midx.

 * When there are too many packfiles in a repository (which is not
   recommended), looking up an object in these would require
   consulting many pack .idx files; a new mechanism to have a single
   file that consolidates all of these .idx files is introduced.

 * "git submodule update" is getting rewritten piece-by-piece into C.

 * The code for computing history reachability has been shuffled,
   obtained a bunch of new tests to cover them, and then being
   improved.

 * The unpack_trees() API used in checking out a branch and merging
   walks one or more trees along with the index.  When the cache-tree
   in the index tells us that we are walking a tree whose flattened
   contents is known (i.e. matches a span in the index), as linearly
   scanning a span in the index is much more efficient than having to
   open tree objects recursively and listing their entries, the walk
   can be optimized, which has been done.

 * When creating a thin pack, which allows objects to be made into a
   delta against another object that is not in the resulting pack but
   is known to be present on the receiving end, the code learned to
   take advantage of the reachability bitmap; this allows the server
   to send a delta against a base beyond the "boundary" commit.

 * spatch transformation to replace boolean uses of !hashcmp() to
   newly introduced oideq() is added, and applied, to regain
   performance lost due to support of multiple hash algorithms.

 * Fix a bug in which the same path could be registered under multiple
   worktree entries if the path was missing (for instance, was removed
   manually).  Also, as a convenience, expand the number of cases in
   which --force is applicable.

 * Split Documentation/config.txt for easier maintenance.
   (merge 6014363f0b nd/config-split later to maint).

 * Test helper binaries clean-up.
   (merge c9a1f4161f nd/test-tool later to maint).

 * Various tests have been updated to make it easier to swap the
   hash function used for object identification.
   (merge ae0c89d41b bc/hash-independent-tests later to maint).

 * Update fsck.skipList implementation and documentation.
   (merge 371a655074 ab/fsck-skiplist later to maint).

 * An alias that expands to another alias has so far been forbidden,
   but now it is allowed to create such an alias.

 * Various test scripts have been updated for style and also correct
   handling of exit status of various commands.

 * "gc --auto" ended up calling exit(-1) upon error, which has been
   corrected to use exit(1).  Also the error reporting behaviour when
   daemonized has been updated to exit with zero status when stopping
   due to a previously discovered error (which implies there is no
   point running gc to improve the situation); we used to exit with
   failure in such a case.

 * Various codepaths in the core-ish part learned to work on an
   arbitrary in-core index structure, not necessarily the default
   instance "the_index".
   (merge b3c7eef9b0 nd/the-index later to maint).

 * Code clean-up in the internal machinery used by "git status" and
   "git commit --dry-run".
   (merge 73ba5d78b4 ss/wt-status-committable later to maint).

 * Some environment variables that control the runtime options of Git
   used during tests are getting renamed for consistency.
   (merge 4231d1ba99 bp/rename-test-env-var later to maint).

 * A pair of new extensions to the index file have been introduced.
   They allow the index file to be read in parallel for performance.

 * The oidset API was built on top of the oidmap API which in turn is
   on the hashmap API.  Replace the implementation to build on top of
   the khash API and gain performance.

 * Over some transports, fetching objects with an exact commit object
   name can be done without first seeing the ref advertisements.  The
   code has been optimized to exploit this.

 * In a partial clone that will lazily be hydrated from the
   originating repository, we generally want to avoid "does this
   object exist (locally)?" on objects that we deliberately omitted
   when we created the clone.  The cache-tree codepath (which is used
   to write a tree object out of the index) however insisted that the
   object exists, even for paths that are outside of the partial
   checkout area.  The code has been updated to avoid such a check.

 * To help developers, an EditorConfig file that attempts to follow
   the project convention has been added.
   (merge b548d698a0 bc/editorconfig later to maint).

 * The result of coverage test can be combined with "git blame" to
   check the test coverage of code introduced recently with a new
   'coverage-diff' tool (in contrib/).
   (merge 783faedd65 ds/coverage-diff later to maint).

 * An experiment to fuzz test a few areas, hopefully we can gain more
   coverage to various areas.

 * More codepaths are moving away from hardcoded hash sizes.

 * The way the Windows port figures out the current directory has been
   improved.

 * The way DLLs are loaded on the Windows port has been improved.

 * Some tests have been reorganized and renamed; "ls t/" now gives a
   better overview of what is tested for these scripts than before.

 * "git rebase" and "git rebase -i" have been reimplemented in C.

 * Windows port learned to use nano-second resolution file timestamps.

 * The overly large Documentation/config.txt file have been split into
   million little pieces.  This potentially allows each individual piece
   to be included into the manual page of the command it affects more easily.

 * Replace three string-list instances used as look-up tables in "git
   fetch" with hashmaps.

 * Unify code to read the author-script used in "git am" and the
   commands that use the sequencer machinery, e.g. "git rebase -i".

 * In preparation to the day when we can deprecate and remove the
   "rebase -p", make sure we can skip and later remove tests for
   it.

 * The history traversal used to implement the tag-following has been
   optimized by introducing a new helper.

 * The helper function to refresh the cached stat information in the
   in-core index has learned to perform the lstat() part of the
   operation in parallel on multi-core platforms.

 * The code to traverse objects for reachability, used to decide what
   objects are unreferenced and expendable, have been taught to also
   consider per-worktree refs of other worktrees as starting points to
   prevent data loss.

 * "git add" needs to internally run "diff-files" equivalent, and the
   codepath learned the same optimization as "diff-files" has to run
   lstat(2) in parallel to find which paths have been updated in the
   working tree.

 * The procedure to install dependencies before testing at Travis CI
   is getting revamped for both simplicity and flexibility, taking
   advantage of the recent move to the vm-based environment.

 * The support for format-patch (and send-email) by the command-line
   completion script (in contrib/) has been simplified a bit.

 * The revision walker machinery learned to take advantage of the
   commit generation numbers stored in the commit-graph file.

 * The codebase has been cleaned up to reduce "#ifndef NO_PTHREADS".

 * The way -lcurl library gets linked has been simplified by taking
   advantage of the fact that we can just ask curl-config command how.

 * Various functions have been audited for "-Wunused-parameter" warnings
   and bugs in them got fixed.

 * A sanity check for start-up sequence has been added in the config
   API codepath.

 * The build procedure to link for fuzzing test has been made
   customizable with a new Makefile variable.

 * The way "git rebase" parses and forwards the command line options
   meant for underlying "git am" has been revamped, which fixed for
   options with parameters that were not passed correctly.

 * Our testing framework uses a special i18n "poisoned localization"
   feature to find messages that ought to stay constant but are
   incorrectly marked to be translated.  This feature has been made
   into a runtime option (it used to be a compile-time option).

 * "git push" used to check ambiguities between object-names and
   refnames while processing the list of refs' old and new values,
   which was unnecessary (as it knew that it is feeding raw object
   names).  This has been optimized out.

 * The xcurl_off_t() helper function is used to cast size_t to
   curl_off_t, but some compilers gave warnings against the code to
   ensure the casting is done without wraparound, when size_t is
   narrower than curl_off_t.  This warning has been squelched.

 * Code preparation to replace ulong vars with size_t vars where
   appropriate continues.

 * The "test installed Git" mode of our test suite has been updated to
   work better.

 * A coding convention around the Coccinelle semantic patches to have
   two classes to ease code migration process has been proposed and
   its support has been added to the Makefile.

 * The "container" mode of TravisCI is going away.  Our .travis.yml
   file is getting prepared for the transition.
   (merge 32ee384be8 ss/travis-ci-force-vm-mode later to maint).

 * Our test scripts can now take the '-V' option as a synonym for the
   '--verbose-log' option.
   (merge a5f52c6dab sg/test-verbose-log later to maint).


Fixes since v2.19
-----------------

 * "git interpret-trailers" and its underlying machinery had a buggy
   code that attempted to ignore patch text after commit log message,
   which triggered in various codepaths that will always get the log
   message alone and never get such an input.
   (merge 66e83d9b41 jk/trailer-fixes later to maint).

 * Malformed or crafted data in packstream can make our code attempt
   to read or write past the allocated buffer and abort, instead of
   reporting an error, which has been fixed.

 * "git rebase -i" did not clear the state files correctly when a run
   of "squash/fixup" is aborted and then the user manually amended the
   commit instead, which has been corrected.
   (merge 10d2f35436 js/rebase-i-autosquash-fix later to maint).

 * When fsmonitor is in use, after operation on submodules updates
   .gitmodules, we lost track of the fact that we did so and relied on
   stale fsmonitor data.
   (merge 43f1180814 bp/mv-submodules-with-fsmonitor later to maint).

 * Fix for a long-standing bug that leaves the index file corrupt when
   it shrinks during a partial commit.
   (merge 6c003d6ffb jk/reopen-tempfile-truncate later to maint).

 * Further fix for O_APPEND emulation on Windows
   (merge eeaf7ddac7 js/mingw-o-append later to maint).

 * A corner case bugfix in "git rerere" code.
   (merge ad2bf0d9b4 en/rerere-multi-stage-1-fix later to maint).

 * "git add ':(attr:foo)'" is not supported and is supposed to be
   rejected while the command line arguments are parsed, but we fail
   to reject such a command line upfront.
   (merge 84d938b732 nd/attr-pathspec-fix later to maint).

 * Recent update broke the reachability algorithm when refs (e.g.
   tags) that point at objects that are not commit were involved,
   which has been fixed.

 * "git rebase" etc. in Git 2.19 fails to abort when given an empty
   commit log message as result of editing, which has been corrected.
   (merge a3ec9eaf38 en/sequencer-empty-edit-result-aborts later to maint).

 * The code to backfill objects in lazily cloned repository did not
   work correctly, which has been corrected.
   (merge e68302011c jt/lazy-object-fetch-fix later to maint).

 * Update error messages given by "git remote" and make them consistent.
   (merge 5025425dff ms/remote-error-message-update later to maint).

 * "git update-ref" learned to make both "--no-deref" and "--stdin"
   work at the same time.
   (merge d345e9fbe7 en/update-ref-no-deref-stdin later to maint).

 * Recently added "range-diff" had a corner-case bug to cause it
   segfault, which has been corrected.
   (merge e467a90c7a tg/range-diff-corner-case-fix later to maint).

 * The recently introduced commit-graph auxiliary data is incompatible
   with mechanisms such as replace & grafts that "breaks" immutable
   nature of the object reference relationship.  Disable optimizations
   based on its use (and updating existing commit-graph) when these
   incompatible features are in use in the repository.
   (merge 829a321569 ds/commit-graph-with-grafts later to maint).

 * The mailmap file update.
   (merge 255eb03edf jn/mailmap-update later to maint).

 * The code in "git status" sometimes hit an assertion failure.  This
   was caused by a structure that was reused without cleaning the data
   used for the first run, which has been corrected.
   (merge 3e73cc62c0 en/status-multiple-renames-to-the-same-target-fix later to maint).

 * "git fetch $repo $object" in a partial clone did not correctly
   fetch the asked-for object that is referenced by an object in
   promisor packfile, which has been fixed.

 * A corner-case bugfix.
   (merge c5cbb27cb5 sm/show-superproject-while-conflicted later to maint).

 * Various fixes to "diff --color-moved-ws".

 * A partial clone that is configured to lazily fetch missing objects
   will on-demand issue a "git fetch" request to the originating
   repository to fill not-yet-obtained objects.  The request has been
   optimized for requesting a tree object (and not the leaf blob
   objects contained in it) by telling the originating repository that
   no blobs are needed.
   (merge 4c7f9567ea jt/non-blob-lazy-fetch later to maint).

 * The codepath to support the experimental split-index mode had
   remaining "racily clean" issues fixed.
   (merge 4c490f3d32 sg/split-index-racefix later to maint).

 * "git log --graph" showing an octopus merge sometimes miscounted the
   number of display columns it is consuming to show the merge and its
   parent commits, which has been corrected.
   (merge 04005834ed np/log-graph-octopus-fix later to maint).

 * "git range-diff" did not work well when the compared ranges had
   changes in submodules and the "--submodule=log" was used.

 * The implementation of run_command() API on the UNIX platforms had a
   bug that caused a command not on $PATH to be found in the current
   directory.
   (merge f67b980771 jk/run-command-notdot later to maint).

 * A mutex used in "git pack-objects" were not correctly initialized
   and this caused "git repack" to dump core on Windows.
   (merge 34204c8166 js/pack-objects-mutex-init-fix later to maint).

 * Under certain circumstances, "git diff D:/a/b/c D:/a/b/d" on
   Windows would strip initial parts from the paths because they
   were not recognized as absolute, which has been corrected.
   (merge ffd04e92e2 js/diff-notice-has-drive-prefix later to maint).

 * The receive.denyCurrentBranch=updateInstead codepath kicked in even
   when the push should have been rejected due to other reasons, such
   as it does not fast-forward or the update-hook rejects it, which
   has been corrected.
   (merge b072a25fad jc/receive-deny-current-branch-fix later to maint).

 * The logic to determine the archive type "git archive" uses did not
   correctly kick in for "git archive --remote", which has been
   corrected.

 * "git repack" in a shallow clone did not correctly update the
   shallow points in the repository, leading to a repository that
   does not pass fsck.
   (merge 5dcfbf564c js/shallow-and-fetch-prune later to maint).

 * Some codepaths failed to form a proper URL when .gitmodules record
   the URL to a submodule repository as relative to the repository of
   superproject, which has been corrected.
   (merge e0a862fdaf sb/submodule-url-to-absolute later to maint).

 * "git fetch" over protocol v2 into a shallow repository failed to
   fetch full history behind a new tip of history that was diverged
   before the cut-off point of the history that was previously fetched
   shallowly.

 * The command line completion machinery (in contrib/) has been
   updated to allow the completion script to tweak the list of options
   that are reported by the parse-options machinery correctly.
   (merge 276b49ff34 nd/completion-negation later to maint).

 * Operations on promisor objects make sense in the context of only a
   small subset of the commands that internally use the revisions
   machinery, but the "--exclude-promisor-objects" option were taken
   and led to nonsense results by commands like "log", to which it
   didn't make much sense.  This has been corrected.
   (merge 669b1d2aae md/exclude-promisor-objects-fix later to maint).

 * A regression in Git 2.12 era made "git fsck" fall into an infinite
   loop while processing truncated loose objects.
   (merge 18ad13e5b2 jk/detect-truncated-zlib-input later to maint).

 * "git ls-remote $there foo" was broken by recent update for the
   protocol v2 and stopped showing refs that match 'foo' that are not
   refs/{heads,tags}/foo, which has been fixed.
   (merge 6a139cdd74 jk/proto-v2-ref-prefix-fix later to maint).

 * Additional comment on a tricky piece of code to help developers.
   (merge 0afbe3e806 jk/stream-pack-non-delta-clarification later to maint).

 * A couple of tests used to leave the repository in a state that is
   deliberately corrupt, which have been corrected.
   (merge aa984dbe5e ab/pack-tests-cleanup later to maint).

 * The submodule support has been updated to read from the blob at
   HEAD:.gitmodules when the .gitmodules file is missing from the
   working tree.
   (merge 2b1257e463 ao/submodule-wo-gitmodules-checked-out later to maint).

 * "git fetch" was a bit loose in parsing responses from the other side
   when talking over the protocol v2.

 * "git rev-parse --exclude=* --branches --branches"  (i.e. first
   saying "add only things that do not match '*' out of all branches"
   and then adding all branches, without any exclusion this time)
   worked as expected, but "--exclude=* --all --all" did not work the
   same way, which has been fixed.
   (merge 5221048092 ag/rev-parse-all-exclude-fix later to maint).

 * "git send-email --transfer-encoding=..." in recent versions of Git
   sometimes produced an empty "Content-Transfer-Encoding:" header,
   which has been corrected.
   (merge 3c88e46f1a al/send-email-auto-cte-fixup later to maint).

 * The interface into "xdiff" library used to discover the offset and
   size of a generated patch hunk by first formatting it into the
   textual hunk header "@@ -n,m +k,l @@" and then parsing the numbers
   out.  A new interface has been introduced to allow callers a more
   direct access to them.
   (merge 5eade0746e jk/xdiff-interface later to maint).

 * Pathspec matching against a tree object were buggy when negative
   pathspec elements were involved, which has been fixed.
   (merge b7845cebc0 nd/tree-walk-path-exclusion later to maint).

 * "git merge" and "git pull" that merges into an unborn branch used
   to completely ignore "--verify-signatures", which has been
   corrected.
   (merge 01a31f3bca jk/verify-sig-merge-into-void later to maint).

 * "git rebase --autostash" did not correctly re-attach the HEAD at times.

 * "rev-parse --exclude=<pattern> --branches=<pattern>" etc. did not
   quite work, which has been corrected.
   (merge 9ab9b5df0e ra/rev-parse-exclude-glob later to maint).

 * When editing a patch in a "git add -i" session, a hunk could be
   made to no-op.  The "git apply" program used to reject a patch with
   such a no-op hunk to catch user mistakes, but it is now updated to
   explicitly allow a no-op hunk in an edited patch.
   (merge 22cb3835b9 js/apply-recount-allow-noop later to maint).

 * The URL to an MSDN page in a comment has been updated.
   (merge 2ef2ae2917 js/mingw-msdn-url later to maint).

 * "git ls-remote --sort=<thing>" can feed an object that is not yet
   available into the comparison machinery and segfault, which has
   been corrected to check such a request upfront and reject it.

 * When "git bundle" aborts due to an empty commit ranges
   (i.e. resulting in an empty pack), it left a file descriptor to an
   lockfile open, which resulted in leftover lockfile on Windows where
   you cannot remove a file with an open file descriptor.  This has
   been corrected.
   (merge 2c8ee1f53c jk/close-duped-fd-before-unlock-for-bundle later to maint).

 * "git format-patch --stat=<width>" can be used to specify the width
   used by the diffstat (shown in the cover letter).
   (merge 284aeb7e60 nd/format-patch-cover-letter-stat-width later to maint).

 * The way .git/index and .git/sharedindex* files were initially
   created gave these files different perm bits until they were
   adjusted for shared repository settings.  This was made consistent.
   (merge c9d6c78870 cc/shared-index-permbits later to maint).

 * "git rebase --stat" to transplant a piece of history onto a totally
   unrelated history were not working before and silently showed wrong
   result.  With the recent reimplementation in C, it started to instead
   die with an error message, as the original logic was not prepared
   to cope with this case.  This has now been fixed.

 * The advice message to tell the user to migrate an existing graft
   file to the replace system when a graft file was read was shown
   even when "git replace --convert-graft-file" command, which is the
   way the message suggests to use, was running, which made little
   sense.
   (merge 8821e90a09 ab/replace-graft-with-replace-advice later to maint).

 * "git diff --raw" lost ellipses to adjust the output columns for
   some time now, but the documentation still showed them.

 * Code cleanup, docfix, build fix, etc.
   (merge 96a7501aad ts/doc-build-manpage-xsl-quietly later to maint).
   (merge b9b07efdb2 tg/conflict-marker-size later to maint).
   (merge fa0aeea770 sg/doc-trace-appends later to maint).
   (merge d64324cb60 tb/void-check-attr later to maint).
   (merge c3b9bc94b9 en/double-semicolon-fix later to maint).
   (merge 79336116f5 sg/t3701-tighten-trace later to maint).
   (merge 801fa63a90 jk/dev-build-format-security later to maint).
   (merge 0597dd62ba sb/string-list-remove-unused later to maint).
   (merge db2d36fad8 bw/protocol-v2 later to maint).
   (merge 456d7cd3a9 sg/split-index-test later to maint).
   (merge 7b6057c852 tq/refs-internal-comment-fix later to maint).
   (merge 29e8dc50ad tg/t5551-with-curl-7.61.1 later to maint).
   (merge 55f6bce2c9 fe/doc-updates later to maint).
   (merge 7987d2232d jk/check-everything-connected-is-long-gone later to maint).
   (merge 4ba3c9be47 dz/credential-doc-url-matching-rules later to maint).
   (merge 4c399442f7 ma/commit-graph-docs later to maint).
   (merge fc0503b04e ma/t1400-undebug-test later to maint).
   (merge e56b53553a nd/packobjectshook-doc-fix later to maint).
   (merge c56170a0c4 ma/mailing-list-address-in-git-help later to maint).
   (merge 6e8fc70fce rs/sequencer-oidset-insert-avoids-dups later to maint).
   (merge ad0b8f9575 mw/doc-typofixes later to maint).
   (merge d9f079ad1a jc/how-to-document-api later to maint).
   (merge b1492bf315 ma/t7005-bash-workaround later to maint).
   (merge ac1f98a0df du/rev-parse-is-plumbing later to maint).
   (merge ca8ed443a5 mm/doc-no-dashed-git later to maint).
   (merge ce366a8144 du/get-tar-commit-id-is-plumbing later to maint).
   (merge 61018fe9e0 du/cherry-is-plumbing later to maint).
   (merge c7e5fe79b9 sb/strbuf-h-update later to maint).
   (merge 8d2008196b tq/branch-create-wo-branch-get later to maint).
   (merge 2e3c894f4b tq/branch-style-fix later to maint).
   (merge c5d844af9c sg/doc-show-branch-typofix later to maint).
   (merge 081d91618b ah/doc-updates later to maint).
   (merge b84c783882 jc/cocci-preincr later to maint).
   (merge 5e495f8122 uk/merge-subtree-doc-update later to maint).
   (merge aaaa881822 jk/uploadpack-packobjectshook-fix later to maint).
   (merge 3063477445 tb/char-may-be-unsigned later to maint).
   (merge 8c64bc9420 sg/test-rebase-editor-fix later to maint).
   (merge 71571cd7d6 ma/sequencer-do-reset-saner-loop-termination later to maint).
   (merge 9a4cb8781e cb/notes-freeing-always-null-fix later to maint).
   (merge 3006f5ee16 ma/reset-doc-rendering-fix later to maint).
   (merge 4c2eb06419 sg/daemon-test-signal-fix later to maint).
   (merge d27525e519 ss/msvc-strcasecmp later to maint).

----------------------------------------------------------------

Changes since v2.19.0 are as follows:

Aaron Lindsay (1):
      send-email: avoid empty transfer encoding header

Alban Gruin (21):
      sequencer: make three functions and an enum from sequencer.c public
      rebase -i: rewrite append_todo_help() in C
      editor: add a function to launch the sequence editor
      rebase -i: rewrite the edit-todo functionality in C
      sequencer: add a new function to silence a command, except if it fails
      rebase -i: rewrite setup_reflog_action() in C
      rebase -i: rewrite checkout_onto() in C
      sequencer: refactor append_todo_help() to write its message to a buffer
      sequencer: change the way skip_unnecessary_picks() returns its result
      t3404: todo list with commented-out commands only aborts
      rebase -i: rewrite complete_action() in C
      rebase -i: remove unused modes and functions
      rebase -i: implement the logic to initialize $revisions in C
      rebase -i: rewrite the rest of init_revisions_and_shortrevisions() in C
      rebase -i: rewrite write_basic_state() in C
      rebase -i: rewrite init_basic_state() in C
      rebase -i: implement the main part of interactive rebase as a builtin
      rebase--interactive2: rewrite the submodes of interactive rebase in C
      rebase -i: remove git-rebase--interactive.sh
      rebase -i: move rebase--helper modes to rebase--interactive
      p3400: replace calls to `git checkout -b' by `git checkout -B'

Alexander Pyhalov (1):
      t7005-editor: quote filename to fix whitespace-issue

Alexander Shopov (3):
      l10n: bg.po: Updated Bulgarian translation (4185t)
      l10n: bg.po: Updated Bulgarian translation (4185t)
      l10n: bg.po: Updated Bulgarian translation (4187t)

Andreas Gruenbacher (1):
      rev-parse: clear --exclude list after 'git rev-parse --all'

Andreas Heiduk (6):
      doc: clarify boundaries of 'git worktree list --porcelain'
      doc: fix ASCII art tab spacing
      doc: fix inappropriate monospace formatting
      doc: fix descripion for 'git tag --format'
      doc: fix indentation of listing blocks in gitweb.conf.txt
      doc: fix formatting in git-update-ref

Anton Serbulov (1):
      mingw: fix getcwd when the parent directory cannot be queried

Antonio Ospite (10):
      submodule: add a print_config_from_gitmodules() helper
      submodule: factor out a config_set_in_gitmodules_file_gently function
      t7411: merge tests 5 and 6
      t7411: be nicer to future tests and really clean things up
      submodule--helper: add a new 'config' subcommand
      submodule: use the 'submodule--helper config' command
      t7506: clean up .gitmodules properly before setting up new scenario
      submodule: add a helper to check if it is safe to write to .gitmodules
      submodule: support reading .gitmodules when it's not in the working tree
      t/helper: add test-submodule-nested-repo-config

Ben Peart (19):
      checkout: optimize "git checkout -b <new_branch>"
      git-mv: allow submodules and fsmonitor to work together
      t/README: correct spelling of "uncommon"
      preload-index: use git_env_bool() not getenv() for customization
      fsmonitor: update GIT_TEST_FSMONITOR support
      read-cache: update TEST_GIT_INDEX_VERSION support
      preload-index: update GIT_FORCE_PRELOAD_TEST support
      read-cache: clean up casting and byte decoding
      eoie: add End of Index Entry (EOIE) extension
      config: add new index.threads config setting
      read-cache: load cache extensions on a worker thread
      ieot: add Index Entry Offset Table (IEOT) extension
      read-cache: load cache entries on worker threads
      reset: don't compute unstaged changes after reset when --quiet
      reset: add new reset.quiet config setting
      reset: warn when refresh_index() takes more than 2 seconds
      speed up refresh_index() by utilizing preload_index()
      add: speed up cmd_add() by utilizing read_cache_preload()
      refresh_index: remove unnecessary calls to preload_index()

Brandon Williams (1):
      config: document value 2 for protocol.version

Brendan Forster (1):
      http: add support for disabling SSL revocation checks in cURL

Carlo Marcelo Arenas Belón (8):
      unpack-trees: avoid dead store for struct progress
      multi-pack-index: avoid dead store for struct progress
      read-cache: use of memory after it is freed
      commit-slabs: move MAYBE_UNUSED out
      khash: silence -Wunused-function for delta-islands
      compat: make sure git_mmap is not expected to write
      sequencer: cleanup for gcc warning in non developer mode
      builtin/notes: remove unnecessary free

Christian Couder (3):
      pack-objects: refactor code into compute_layer_order()
      pack-objects: move tree_depth into 'struct packing_data'
      pack-objects: move 'layer' into 'struct packing_data'

Christian Hesse (2):
      subtree: add build targets 'man' and 'html'
      subtree: make install targets depend on build targets

Christopher Díaz Riveros (2):
      l10n: es.po v2.20.0 round 1
      l10n: es.po v2.20.0 round 3

Daniels Umanovskis (3):
      doc: move git-rev-parse from porcelain to plumbing
      doc: move git-get-tar-commit-id to plumbing
      doc: move git-cherry to plumbing

David Zych (1):
      doc: clarify gitcredentials path component matching

Denton Liu (3):
      mergetool: accept -g/--[no-]gui as arguments
      completion: support `git mergetool --[no-]gui`
      doc: document diff/merge.guitool config keys

Derrick Stolee (93):
      multi-pack-index: add design document
      multi-pack-index: add format details
      multi-pack-index: add builtin
      multi-pack-index: add 'write' verb
      midx: write header information to lockfile
      multi-pack-index: load into memory
      t5319: expand test data
      packfile: generalize pack directory list
      multi-pack-index: read packfile list
      multi-pack-index: write pack names in chunk
      midx: read pack names into array
      midx: sort and deduplicate objects from packfiles
      midx: write object ids in a chunk
      midx: write object id fanout chunk
      midx: write object offsets
      config: create core.multiPackIndex setting
      midx: read objects from multi-pack-index
      midx: use midx in abbreviation calculations
      midx: use existing midx when writing new one
      midx: use midx in approximate_object_count
      midx: prevent duplicate packfile loads
      packfile: skip loading index if in multi-pack-index
      midx: clear midx on repack
      commit-reach: move walk methods from commit.c
      commit.h: remove method declarations
      commit-reach: move ref_newer from remote.c
      commit-reach: move commit_contains from ref-filter
      upload-pack: make reachable() more generic
      upload-pack: refactor ok_to_give_up()
      upload-pack: generalize commit date cutoff
      commit-reach: move can_all_from_reach_with_flags
      test-reach: create new test tool for ref_newer
      test-reach: test in_merge_bases
      test-reach: test is_descendant_of
      test-reach: test get_merge_bases_many
      test-reach: test reduce_heads
      test-reach: test can_all_from_reach_with_flags
      test-reach: test commit_contains
      commit-reach: replace ref_newer logic
      commit-reach: make can_all_from_reach... linear
      commit-reach: use can_all_from_reach
      multi-pack-index: provide more helpful usage info
      multi-pack-index: store local property
      midx: mark bad packed objects
      midx: stop reporting garbage
      midx: fix bug that skips midx with alternates
      packfile: add all_packs list
      treewide: use get_all_packs
      midx: test a few commands that use get_all_packs
      pack-objects: consider packs in multi-pack-index
      commit-graph: update design document
      test-repository: properly init repo
      commit-graph: not compatible with replace objects
      commit-graph: not compatible with grafts
      commit-graph: not compatible with uninitialized repo
      commit-graph: close_commit_graph before shallow walk
      commit-graph: define GIT_TEST_COMMIT_GRAPH
      t3206-range-diff.sh: cover single-patch case
      t5318: use test_oid for HASH_LEN
      multi-pack-index: add 'verify' verb
      multi-pack-index: verify bad header
      multi-pack-index: verify corrupt chunk lookup table
      multi-pack-index: verify packname order
      multi-pack-index: verify missing pack
      multi-pack-index: verify oid fanout order
      multi-pack-index: verify oid lookup order
      multi-pack-index: fix 32-bit vs 64-bit size check
      multi-pack-index: verify object offsets
      multi-pack-index: report progress during 'verify'
      fsck: verify multi-pack-index
      commit-reach: properly peel tags
      commit-reach: fix memory and flag leaks
      commit-reach: cleanups in can_all_from_reach...
      commit-graph: clean up leaked memory during write
      commit-graph: reduce initial oid allocation
      midx: fix broken free() in close_midx()
      contrib: add coverage-diff script
      ci: add optional test variables
      commit-reach: fix first-parent heuristic
      midx: close multi-pack-index on repack
      multi-pack-index: define GIT_TEST_MULTI_PACK_INDEX
      packfile: close multi-pack-index in close_all_packs
      prio-queue: add 'peek' operation
      test-reach: add run_three_modes method
      test-reach: add rev-list tests
      revision.c: begin refactoring --topo-order logic
      commit/revisions: bookkeeping before refactoring
      revision.c: generation-based topo-order algorithm
      t6012: make rev-list tests more interesting
      commit-reach: implement get_reachable_subset
      test-reach: test get_reachable_subset
      remote: make add_missing_tags() linear
      pack-objects: ignore ambiguous object warnings

Elijah Newren (14):
      Remove superfluous trailing semicolons
      t4200: demonstrate rerere segfault on specially crafted merge
      rerere: avoid buffer overrun
      update-ref: fix type of update_flags variable to match its usage
      update-ref: allow --no-deref with --stdin
      sequencer: fix --allow-empty-message behavior, make it smarter
      merge-recursive: set paths correctly when three-way merging content
      merge-recursive: avoid wrapper function when unnecessary and wasteful
      merge-recursive: remove final remaining caller of merge_file_one()
      merge-recursive: rename merge_file_1() and merge_content()
      commit: fix erroneous BUG, 'multiple renames on the same target? how?'
      merge-recursive: improve auto-merging messages with path collisions
      merge-recursive: avoid showing conflicts with merge branch before HEAD
      fsck: move fsck_head_link() to get_default_heads() to avoid some globals

Eric Sunshine (26):
      format-patch: allow additional generated content in make_cover_letter()
      format-patch: add --interdiff option to embed diff in cover letter
      format-patch: teach --interdiff to respect -v/--reroll-count
      interdiff: teach show_interdiff() to indent interdiff
      log-tree: show_log: make commentary block delimiting reusable
      format-patch: allow --interdiff to apply to a lone-patch
      range-diff: respect diff_option.file rather than assuming 'stdout'
      range-diff: publish default creation factor
      range-diff: relieve callers of low-level configuration burden
      format-patch: add --range-diff option to embed diff in cover letter
      format-patch: extend --range-diff to accept revision range
      format-patch: teach --range-diff to respect -v/--reroll-count
      format-patch: add --creation-factor tweak for --range-diff
      format-patch: allow --range-diff to apply to a lone-patch
      worktree: don't die() in library function find_worktree()
      worktree: move delete_git_dir() earlier in file for upcoming new callers
      worktree: generalize delete_git_dir() to reduce code duplication
      worktree: prepare for more checks of whether path can become worktree
      worktree: disallow adding same path multiple times
      worktree: teach 'add' to respect --force for registered but missing path
      worktree: teach 'move' to override lock when --force given twice
      worktree: teach 'remove' to override lock when --force given twice
      worktree: delete .git/worktrees if empty after 'remove'
      doc-diff: fix non-portable 'man' invocation
      doc-diff: add --clean mode to remove temporary working gunk
      doc/Makefile: drop doc-diff worktree and temporary files on "make clean"

Frederick Eaton (3):
      git-archimport.1: specify what kind of Arch we're talking about
      git-column.1: clarify initial description, provide examples
      git-describe.1: clarify that "human readable" is also git-readable

Greg Hurrell (1):
      doc: update diff-format.txt for removed ellipses in --raw

James Knight (1):
      build: link with curl-defined linker flags

Jann Horn (2):
      patch-delta: fix oob read
      patch-delta: consistently report corruption

Jean-Noël Avila (3):
      l10n: fr.po v2.20 rnd 1
      i18n: fix small typos
      l10n: fr.po v2.20.0 round 3

Jeff Hostetler (2):
      t0051: test GIT_TRACE to a windows named pipe
      mingw: fix mingw_open_append to work with named pipes

Jeff King (98):
      branch: make "-l" a synonym for "--list"
      Add delta-islands.{c,h}
      pack-objects: add delta-islands support
      repack: add delta-islands support
      t5320: tests for delta islands
      t/perf: factor boilerplate out of test_perf
      t/perf: factor out percent calculations
      t/perf: add infrastructure for measuring sizes
      t/perf: add perf tests for fetches from a bitmapped server
      pack-bitmap: save "have" bitmap from walk
      pack-objects: reuse on-disk deltas for thin "have" objects
      SubmittingPatches: mention doc-diff
      rev-list: make empty --stdin not an error
      trailer: use size_t for string offsets
      trailer: use size_t for iterating trailer list
      trailer: pass process_trailer_opts to trailer_info_get()
      interpret-trailers: tighten check for "---" patch boundary
      interpret-trailers: allow suppressing "---" divider
      pretty, ref-filter: format %(trailers) with no_divider option
      sequencer: ignore "---" divider when parsing trailers
      append_signoff: use size_t for string offsets
      coccinelle: use <...> for function exclusion
      introduce hasheq() and oideq()
      convert "oidcmp() == 0" to oideq()
      convert "hashcmp() == 0" to hasheq()
      convert "oidcmp() != 0" to "!oideq()"
      convert "hashcmp() != 0" to "!hasheq()"
      convert hashmap comparison functions to oideq()
      read-cache: use oideq() in ce_compare functions
      show_dirstat: simplify same-content check
      doc-diff: always use oids inside worktree
      test-delta: read input into a heap buffer
      t5303: test some corrupt deltas
      patch-delta: handle truncated copy parameters
      t5303: use printf to generate delta bases
      doc/git-branch: remove obsolete "-l" references
      bitmap_has_sha1_in_uninteresting(): drop BUG check
      t5310: test delta reuse with bitmaps
      traverse_bitmap_commit_list(): don't free result
      pack-bitmap: drop "loaded" flag
      reopen_tempfile(): truncate opened file
      doc-diff: force worktree add
      config.mak.dev: add -Wformat-security
      pack-objects: handle island check for "external" delta base
      receive-pack: update comment with check_everything_connected
      submodule--helper: use "--" to signal end of clone options
      submodule-config: ban submodule urls that start with dash
      submodule-config: ban submodule paths that start with a dash
      fsck: detect submodule urls starting with dash
      fsck: detect submodule paths starting with dash
      more oideq/hasheq conversions
      transport: drop refnames from for_each_alternate_ref
      test-tool: show tool list on error
      config.mak.dev: enable -Wunused-function
      run-command: mark path lookup errors with ENOENT
      t5410: use longer path for sample script
      upload-pack: fix broken if/else chain in config callback
      t1450: check large blob in trailing-garbage test
      check_stream_sha1(): handle input underflow
      cat-file: handle streaming failures consistently
      ls-remote: do not send ref prefixes for patterns
      ls-remote: pass heads/tags prefixes to transport
      read_istream_pack_non_delta(): document input handling
      xdiff: provide a separate emit callback for hunks
      xdiff-interface: provide a separate consume callback for hunks
      rev-list: handle flags for --indexed-objects
      approxidate: handle pending number for "specials"
      pathspec: handle non-terminated strings with :(attr)
      diff: avoid generating unused hunk header lines
      diff: discard hunk headers for patch-ids earlier
      diff: use hunk callback for word-diff
      combine-diff: use an xdiff hunk callback
      diff: convert --check to use a hunk callback
      range-diff: use a hunk callback
      xdiff-interface: drop parse_hunk_header()
      apply: mark include/exclude options as NONEG
      am: handle --no-patch-format option
      ls-files: mark exclude options as NONEG
      pack-objects: mark index-version option as NONEG
      cat-file: mark batch options with NONEG
      status: mark --find-renames option with NONEG
      format-patch: mark "--no-numbered" option with NONEG
      show-branch: mark --reflog option as NONEG
      tag: mark "--message" option with NONEG
      cat-file: report an error on multiple --batch options
      apply: return -1 from option callback instead of calling exit(1)
      parse-options: drop OPT_DATE()
      assert NOARG/NONEG behavior of parse-options callbacks
      midx: double-check large object write loop
      merge: extract verify_merge_signature() helper
      merge: handle --verify-signatures for unborn branch
      pull: handle --verify-signatures for unborn branch
      approxidate: fix NULL dereference in date_time()
      bundle: dup() output descriptor closer to point-of-use
      pack-objects: fix tree_depth and layer invariants
      pack-objects: zero-initialize tree_depth/layer arrays
      pack-objects: fix off-by-one in delta-island tree-depth computation
      t5562: fix perl path

Jiang Xin (5):
      l10n: zh_CN: review for git v2.19.0 l10n
      l10n: git.pot: v2.20.0 round 1 (254 new, 27 removed)
      l10n: git.pot: v2.20.0 round 2 (2 new, 2 removed)
      l10n: git.pot: v2.20.0 round 3 (5 new, 3 removed)
      l10n: zh_CN: for git v2.20.0 l10n round 1 to 3

Johannes Schindelin (64):
      rebase -i --autosquash: demonstrate a problem skipping the last squash
      rebase -i: be careful to wrap up fixup/squash chains
      compat/poll: prepare for targeting Windows Vista
      mingw: set _WIN32_WINNT explicitly for Git for Windows
      mingw: bump the minimum Windows version to Vista
      builtin rebase: prepare for builtin rebase -i
      rebase -i: clarify what happens on a failed `exec`
      rebase -i: introduce the 'break' command
      getpwuid(mingw): initialize the structure only once
      getpwuid(mingw): provide a better default for the user name
      mingw: use domain information for default email
      http: add support for selecting SSL backends at runtime
      pack-objects: fix typo 'detla' -> 'delta'
      pack-objects (mingw): demonstrate a segmentation fault with large deltas
      pack-objects (mingw): initialize `packing_data` mutex in the correct spot
      rebase (autostash): avoid duplicate call to state_dir_path()
      rebase (autostash): store the full OID in <state-dir>/autostash
      rebase (autostash): use an explicit OID to apply the stash
      mingw: factor out code to set stat() data
      rebase --autostash: demonstrate a problem with dirty submodules
      rebase --autostash: fix issue with dirty submodules
      mingw: load system libraries the recommended way
      mingw: ensure `getcwd()` reports the correct case
      repack: point out a bug handling stale shallow info
      shallow: offer to prune only non-existing entries
      repack -ad: prune the list of shallow commits
      http: when using Secure Channel, ignore sslCAInfo by default
      t7800: fix quoting
      mingw: reencode environment variables on the fly (UTF-16 <-> UTF-8)
      config: rename `dummy` parameter to `cb` in git_default_config()
      config: allow for platform-specific core.* config settings
      config: move Windows-specific config settings into compat/mingw.c
      mingw: unset PERL5LIB by default
      mingw: fix isatty() after dup2()
      t3404: decouple some test cases from outcomes of previous test cases
      t3418: decouple test cases from a previous `rebase -p` test case
      tests: optionally skip `git rebase -p` tests
      Windows: force-recompile git.res for differing architectures
      built-in rebase: demonstrate regression with --autostash
      built-in rebase --autostash: leave the current branch alone if possible
      Update .mailmap
      rebase -r: demonstrate bug with conflicting merges
      rebase -r: do not write MERGE_HEAD unless needed
      rebase -i: include MERGE_HEAD into files to clean up
      built-in rebase --skip/--abort: clean up stale .git/<name> files
      status: rebase and merge can be in progress at the same time
      apply --recount: allow "no-op hunks"
      rebase: consolidate clean-up code before leaving reset_head()
      rebase: prepare reset_head() for more flags
      built-in rebase: reinstate `checkout -q` behavior where appropriate
      tests: fix GIT_TEST_INSTALLED's PATH to include t/helper/
      tests: respect GIT_TEST_INSTALLED when initializing repositories
      t/lib-gettext: test installed git-sh-i18n if GIT_TEST_INSTALLED is set
      mingw: use `CreateHardLink()` directly
      rebase: really just passthru the `git am` options
      rebase: validate -C<n> and --whitespace=<mode> parameters early
      config: report a bug if git_dir exists without commondir
      tests: do not require Git to be built when testing an installed Git
      tests: explicitly use `git.exe` on Windows
      mingw: replace an obsolete link with the superseding one
      legacy-rebase: backport -C<n> and --whitespace=<option> checks
      rebase: warn about the correct tree's OID
      rebase: fix GIT_REFLOG_ACTION regression
      rebase --stat: fix when rebasing to an unrelated history

Johannes Sixt (4):
      diff: don't attempt to strip prefix from absolute Windows paths
      rebase -i: recognize short commands without arguments
      t3404-rebase-interactive: test abbreviated commands
      rebase docs: fix incorrect format of the section Behavioral Differences

Jonathan Nieder (9):
      gc: improve handling of errors reading gc.log
      gc: exit with status 128 on failure
      gc: do not return error for prior errors in daemonized mode
      commit-reach: correct accidental #include of C file
      mailmap: consistently normalize brian m. carlson's name
      git doc: direct bug reporters to mailing list archive
      eoie: default to not writing EOIE section
      ieot: default to not writing IEOT section
      index: make index.threads=true enable ieot and eoie

Jonathan Tan (15):
      fetch-object: unify fetch_object[s] functions
      fetch-object: set exact_oid when fetching
      connected: document connectivity in partial clones
      fetch: in partial clone, check presence of targets
      fetch-pack: avoid object flags if no_dependents
      fetch-pack: exclude blobs when lazy-fetching trees
      transport: allow skipping of ref listing
      transport: do not list refs if possible
      transport: list refs before fetch if necessary
      fetch: do not list refs if fetching only hashes
      cache-tree: skip some blob checks in partial clone
      upload-pack: make have_obj not global
      upload-pack: make want_obj not global
      upload-pack: clear flags before each v2 request
      fetch-pack: be more precise in parsing v2 response

Jordi Mas (2):
      l10n: Update Catalan translation
      l10n: Update Catalan translation

Josh Steadmon (4):
      fuzz: add basic fuzz testing target.
      fuzz: add fuzz testing for packfile indices.
      archive: initialize archivers earlier
      Makefile: use FUZZ_CXXFLAGS for linking fuzzers

Joshua Watt (1):
      send-email: explicitly disable authentication

Junio C Hamano (37):
      Revert "doc/Makefile: drop doc-diff worktree and temporary files on "make clean""
      Initial batch post 2.19
      Second batch post 2.19
      Git 2.14.5
      Git 2.15.3
      Git 2.16.5
      Git 2.17.2
      Git 2.18.1
      Git 2.19.1
      t0000: do not get self-test disrupted by environment warnings
      CodingGuidelines: document the API in *.h files
      Declare that the next one will be named 2.20
      Third batch for 2.20
      rebase: fix typoes in error messages
      Fourth batch for 2.20
      Revert "subtree: make install targets depend on build targets"
      Fifth batch for 2.20
      receive: denyCurrentBranch=updateinstead should not blindly update
      cocci: simplify "if (++u > 1)" to "if (u++)"
      fsck: s/++i > 1/i++/
      http: give curl version warnings consistently
      Sixth batch for 2.20
      Seventh batch for 2.20
      fetch: replace string-list used as a look-up table with a hashmap
      rebase: apply cocci patch
      Eighth batch for 2.20
      Ninth batch for 2.20
      Makefile: ease dynamic-gettext-poison transition
      Tenth batch for 2.20
      Git 2.20-rc0
      RelNotes: name the release properly
      Prepare for 2.20-rc1
      Git 2.19.2
      Git 2.20-rc1
      format-patch: do not let its diff-options affect --range-diff
      Git 2.20-rc2
      Git 2.20

Karsten Blees (2):
      mingw: replace MSVCRT's fstat() with a Win32-based implementation
      mingw: implement nanosecond-precision file times

Loo Rong Jie (1):
      win32: replace pthread_cond_*() with much simpler code

Lucas De Marchi (1):
      range-diff: allow to diff files regardless of submodule config

Luke Diamand (3):
      git-p4: do not fail in verbose mode for missing 'fileSize' key
      git-p4: unshelve into refs/remotes/p4-unshelved, not refs/remotes/p4/unshelved
      git-p4: fully support unshelving changelists

Martin Ågren (15):
      Doc: use `--type=bool` instead of `--bool`
      git-config.txt: fix 'see: above' note
      git-commit-graph.txt: fix bullet lists
      git-commit-graph.txt: typeset more in monospace
      git-commit-graph.txt: refer to "*commit*-graph file"
      Doc: refer to the "commit-graph file" with dash
      t1400: drop debug `echo` to actually execute `test`
      builtin/commit-graph.c: UNLEAK variables
      sequencer: break out of loop explicitly
      git-reset.txt: render tables correctly under Asciidoctor
      git-reset.txt: render literal examples as monospace
      range-diff: always pass at least minimal diff options
      RelNotes 2.20: move some items between sections
      RelNotes 2.20: clarify sentence
      RelNotes 2.20: drop spurious double quote

Matthew DeVore (19):
      list-objects: store common func args in struct
      list-objects: refactor to process_tree_contents
      list-objects: always parse trees gently
      t/README: reformat Do, Don't, Keep in mind lists
      Documentation: add shell guidelines
      tests: standardize pipe placement
      t/*: fix ordering of expected/observed arguments
      tests: don't swallow Git errors upstream of pipes
      t9109: don't swallow Git errors upstream of pipes
      tests: order arguments to git-rev-list properly
      rev-list: handle missing tree objects properly
      revision: mark non-user-given objects instead
      list-objects-filter: use BUG rather than die
      list-objects-filter-options: do not over-strbuf_init
      list-objects-filter: implement filter tree:0
      filter-trees: code clean-up of tests
      list-objects: support for skipping tree traversal
      Documentation/git-log.txt: do not show --exclude-promisor-objects
      exclude-promisor-objects: declare when option is allowed

Max Kirillov (1):
      http-backend test: make empty CONTENT_LENGTH test more realistic

Michael Witten (3):
      docs: typo: s/go/to/
      docs: graph: remove unnecessary `graph_update()' call
      docs: typo: s/isimilar/similar/

Michał Górny (6):
      gpg-interface.c: detect and reject multiple signatures on commits
      gpg-interface.c: use flags to determine key/signer info presence
      gpg-interface.c: support getting key fingerprint via %GF format
      gpg-interface.c: obtain primary key fingerprint as well
      t/t7510-signed-commit.sh: Add %GP to custom format checks
      t/t7510-signed-commit.sh: add signing subkey to Eris Discordia key

Mihir Mehta (1):
      doc: fix a typo and clarify a sentence

Minh Nguyen (1):
      l10n: vi.po: fix typo in pack-objects

Nguyễn Thái Ngọc Duy (170):
      clone: report duplicate entries on case-insensitive filesystems
      trace.h: support nested performance tracing
      unpack-trees: add performance tracing
      unpack-trees: optimize walking same trees with cache-tree
      unpack-trees: reduce malloc in cache-tree walk
      unpack-trees: reuse (still valid) cache-tree from src_index
      unpack-trees: add missing cache invalidation
      cache-tree: verify valid cache-tree in the test suite
      Document update for nd/unpack-trees-with-cache-tree
      bisect.c: make show_list() build again
      t/helper: keep test-tool command list sorted
      t/helper: merge test-dump-untracked-cache into test-tool
      t/helper: merge test-pkt-line into test-tool
      t/helper: merge test-parse-options into test-tool
      t/helper: merge test-dump-fsmonitor into test-tool
      Makefile: add a hint about TEST_BUILTINS_OBJS
      config.txt: follow camelCase naming
      config.txt: move fetch part out to a separate file
      config.txt: move format part out to a separate file
      config.txt: move gitcvs part out to a separate file
      config.txt: move gui part out to a separate file
      config.txt: move pull part out to a separate file
      config.txt: move push part out to a separate file
      config.txt: move receive part out to a separate file
      config.txt: move sendemail part out to a separate file
      config.txt: move sequence.editor out of "core" part
      config.txt: move submodule part out to a separate file
      archive.c: remove implicit dependency the_repository
      status: show progress bar if refreshing the index takes too long
      add: do not accept pathspec magic 'attr'
      completion: support "git fetch --multiple"
      read-cache.c: remove 'const' from index_has_changes()
      diff.c: reduce implicit dependency on the_index
      combine-diff.c: remove implicit dependency on the_index
      blame.c: rename "repo" argument to "r"
      diff.c: remove the_index dependency in textconv() functions
      grep.c: remove implicit dependency on the_index
      diff.c: remove implicit dependency on the_index
      read-cache.c: remove implicit dependency on the_index
      diff-lib.c: remove implicit dependency on the_index
      ll-merge.c: remove implicit dependency on the_index
      merge-blobs.c: remove implicit dependency on the_index
      merge.c: remove implicit dependency on the_index
      patch-ids.c: remove implicit dependency on the_index
      sha1-file.c: remove implicit dependency on the_index
      rerere.c: remove implicit dependency on the_index
      userdiff.c: remove implicit dependency on the_index
      line-range.c: remove implicit dependency on the_index
      submodule.c: remove implicit dependency on the_index
      tree-diff.c: remove implicit dependency on the_index
      ws.c: remove implicit dependency on the_index
      revision.c: remove implicit dependency on the_index
      revision.c: reduce implicit dependency the_repository
      read-cache.c: optimize reading index format v4
      config.txt: correct the note about uploadpack.packObjectsHook
      help -a: improve and make --verbose default
      refs.c: indent with tabs, not spaces
      Add a place for (not) sharing stuff between worktrees
      submodule.c: remove some of the_repository references
      completion: fix __gitcomp_builtin no longer consider extra options
      t1300: extract and use test_cmp_config()
      worktree: add per-worktree config files
      refs: new ref types to make per-worktree refs visible to all worktrees
      revision.c: correct a parameter name
      revision.c: better error reporting on ref from different worktrees
      fsck: check HEAD and reflog from other worktrees
      reflog expire: cover reflog from all worktrees
      Update makefile in preparation for Documentation/config/*.txt
      config.txt: move advice.* to a separate file
      config.txt: move core.* to a separate file
      config.txt: move add.* to a separate file
      config.txt: move alias.* to a separate file
      config.txt: move am.* to a separate file
      config.txt: move apply.* to a separate file
      config.txt: move blame.* to a separate file
      config.txt: move branch.* to a separate file
      config.txt: move browser.* to a separate file
      config.txt: move checkout.* to a separate file
      config.txt: move clean.* to a separate file
      config.txt: move color.* to a separate file
      config.txt: move column.* to a separate file
      config.txt: move commit.* to a separate file
      config.txt: move credential.* to a separate file
      config.txt: move completion.* to a separate file
      config.txt: move diff-config.txt to config/
      config.txt: move difftool.* to a separate file
      config.txt: move fastimport.* to a separate file
      config.txt: move fetch-config.txt to config/
      config.txt: move filter.* to a separate file
      config.txt: move format-config.txt to config/
      config.txt: move fmt-merge-msg-config.txt to config/
      config.txt: move fsck.* to a separate file
      config.txt: move gc.* to a separate file
      config.txt: move gitcvs-config.txt to config/
      config.txt: move gitweb.* to a separate file
      config.txt: move grep.* to a separate file
      config.txt: move gpg.* to a separate file
      config.txt: move gui-config.txt to config/
      config.txt: move guitool.* to a separate file
      config.txt: move help.* to a separate file
      config.txt: move ssh.* to a separate file
      config.txt: move http.* to a separate file
      config.txt: move i18n.* to a separate file
      git-imap-send.txt: move imap.* to a separate file
      config.txt: move index.* to a separate file
      config.txt: move init.* to a separate file
      config.txt: move instaweb.* to a separate file
      config.txt: move interactive.* to a separate file
      config.txt: move log.* to a separate file
      config.txt: move mailinfo.* to a separate file
      config.txt: move mailmap.* to a separate file
      config.txt: move man.* to a separate file
      config.txt: move merge-config.txt to config/
      config.txt: move mergetool.* to a separate file
      config.txt: move notes.* to a separate file
      config.txt: move pack.* to a separate file
      config.txt: move pager.* to a separate file
      config.txt: move pretty.* to a separate file
      config.txt: move protocol.* to a separate file
      config.txt: move pull-config.txt to config/
      config.txt: move push-config.txt to config/
      config.txt: move rebase-config.txt to config/
      config.txt: move receive-config.txt to config/
      config.txt: move remote.* to a separate file
      config.txt: move remotes.* to a separate file
      config.txt: move repack.* to a separate file
      config.txt: move rerere.* to a separate file
      config.txt: move reset.* to a separate file
      config.txt: move sendemail-config.txt to config/
      config.txt: move sequencer.* to a separate file
      config.txt: move showBranch.* to a separate file
      config.txt: move splitIndex.* to a separate file
      config.txt: move status.* to a separate file
      config.txt: move stash.* to a separate file
      config.txt: move submodule.* to a separate file
      config.txt: move tag.* to a separate file
      config.txt: move transfer.* to a separate file
      config.txt: move uploadarchive.* to a separate file
      config.txt: move uploadpack.* to a separate file
      config.txt: move url.* to a separate file
      config.txt: move user.* to a separate file
      config.txt: move versionsort.* to a separate file
      config.txt: move web.* to a separate file
      config.txt: move worktree.* to a separate file
      config.txt: remove config/dummy.txt
      thread-utils: macros to unconditionally compile pthreads API
      wildmatch: change behavior of "foo**bar" in WM_PATHNAME mode
      git-worktree.txt: correct linkgit command name
      sequencer.c: remove a stray semicolon
      tree-walk.c: fix overoptimistic inclusion in :(exclude) matching
      run-command.h: include thread-utils.h instead of pthread.h
      send-pack.c: move async's #ifdef NO_PTHREADS back to run-command.c
      index-pack: remove #ifdef NO_PTHREADS
      name-hash.c: remove #ifdef NO_PTHREADS
      attr.c: remove #ifdef NO_PTHREADS
      grep: remove #ifdef NO_PTHREADS
      grep: clean up num_threads handling
      preload-index.c: remove #ifdef NO_PTHREADS
      pack-objects: remove #ifdef NO_PTHREADS
      read-cache.c: remove #ifdef NO_PTHREADS
      read-cache.c: reduce branching based on HAVE_THREADS
      read-cache.c: initialize copy_len to shut up gcc 8
      Clean up pthread_create() error handling
      completion: use __gitcomp_builtin for format-patch
      build: fix broken command-list.h generation with core.autocrlf
      format-patch: respect --stat in cover letter's diffstat
      doc: move extensions.worktreeConfig to the right place
      clone: fix colliding file detection on APFS
      files-backend.c: fix build error on Solaris
      transport-helper.c: do not translate a string twice

Nickolai Belakovski (2):
      worktree: update documentation for lock_reason and lock_reason_valid
      worktree: rename is_worktree_locked to worktree_lock_reason

Noam Postavsky (1):
      log: fix coloring of certain octopus merge shapes

Olga Telezhnaya (3):
      ref-filter: free memory from used_atom
      ls-remote: release memory instead of UNLEAK
      ref-filter: free item->value and item->value->s

Peter Krefting (2):
      l10n: sv.po: Update Swedish translation (4185t0f0u)
      l10n: sv.po: Update Swedish translation (4187t0f0u)

Phillip Wood (11):
      diff: fix --color-moved-ws=allow-indentation-change
      diff --color-moved-ws: fix double free crash
      diff --color-moved-ws: fix out of bounds string access
      diff --color-moved-ws: fix a memory leak
      diff --color-moved-ws: fix another memory leak
      diff --color-moved: fix a memory leak
      am: don't die in read_author_script()
      am: improve author-script error reporting
      am: rename read_author_script()
      add read_author_script() to libgit
      sequencer: use read_author_script()

Pratik Karki (46):
      rebase: start implementing it as a builtin
      rebase: refactor common shell functions into their own file
      builtin/rebase: support running "git rebase <upstream>"
      builtin rebase: support --onto
      builtin rebase: support `git rebase --onto A...B`
      builtin rebase: handle the pre-rebase hook and --no-verify
      builtin rebase: support --quiet
      builtin rebase: support the `verbose` and `diffstat` options
      builtin rebase: require a clean worktree
      builtin rebase: try to fast forward when possible
      builtin rebase: support --force-rebase
      builtin rebase: start a new rebase only if none is in progress
      builtin rebase: only store fully-qualified refs in `options.head_name`
      builtin rebase: support `git rebase <upstream> <switch-to>`
      builtin rebase: support --continue
      builtin rebase: support --skip
      builtin rebase: support --abort
      builtin rebase: support --quit
      builtin rebase: support --edit-todo and --show-current-patch
      builtin rebase: actions require a rebase in progress
      builtin rebase: stop if `git am` is in progress
      builtin rebase: allow selecting the rebase "backend"
      builtin rebase: support --signoff
      builtin rebase: support --rerere-autoupdate
      builtin rebase: support --committer-date-is-author-date
      builtin rebase: support `ignore-whitespace` option
      builtin rebase: support `ignore-date` option
      builtin rebase: support `keep-empty` option
      builtin rebase: support `--autosquash`
      builtin rebase: support `--gpg-sign` option
      builtin rebase: support `-C` and `--whitespace=<type>`
      builtin rebase: support `--autostash` option
      builtin rebase: support `--exec`
      builtin rebase: support `--allow-empty-message` option
      builtin rebase: support --rebase-merges[=[no-]rebase-cousins]
      merge-base --fork-point: extract libified function
      builtin rebase: support `fork-point` option
      builtin rebase: add support for custom merge strategies
      builtin rebase: support --root
      builtin rebase: optionally auto-detect the upstream
      builtin rebase: optionally pass custom reflogs to reset_head()
      builtin rebase: fast-forward to onto if it is a proper descendant
      builtin rebase: show progress when connected to a terminal
      builtin rebase: use no-op editor when interactive is "implied"
      builtin rebase: error out on incompatible option/mode combinations
      rebase: default to using the builtin rebase

Rafael Ascensão (2):
      refs: show --exclude failure with --branches/tags/remotes=glob
      refs: fix some exclude patterns being ignored

Ralf Thielow (5):
      git-rebase.sh: fix typos in error messages
      l10n: update German translation
      builtin/rebase.c: remove superfluous space in messages
      l10n: update German translation
      l10n: de.po: fix two messages

Ramsay Jones (12):
      Makefile: add a hdr-check target
      json-writer.h: add missing include (hdr-check)
      ewah/ewok_rlw.h: add missing include (hdr-check)
      refs/ref-cache.h: add missing declarations (hdr-check)
      refs/packed-backend.h: add missing declaration (hdr-check)
      refs/refs-internal.h: add missing declarations (hdr-check)
      midx.h: add missing forward declarations (hdr-check)
      delta-islands.h: add missing forward declarations (hdr-check)
      headers: normalize the spelling of some header guards
      fetch-object.h: add missing declaration (hdr-check)
      ewok_rlw.h: add missing 'inline' to function definition
      commit-reach.h: add missing declarations (hdr-check)

Rasmus Villemoes (6):
      help: redirect to aliased commands for "git cmd --help"
      git.c: handle_alias: prepend alias info when first argument is -h
      git-help.txt: document "git help cmd" vs "git cmd --help" for aliases
      Documentation/git-send-email.txt: style fixes
      send-email: only consider lines containing @ or <> for automatic Cc'ing
      send-email: also pick up cc addresses from -by trailers

René Scharfe (12):
      mailinfo: support format=flowed
      fsck: add a performance test for skipList
      fsck: use strbuf_getline() to read skiplist file
      fsck: use oidset instead of oid_array for skipList
      sequencer: use return value of oidset_insert()
      grep: add -r/--[no-]recursive
      fetch-pack: factor out is_unmatched_ref()
      fetch-pack: load tip_oids eagerly iff needed
      khash: factor out kh_release_*
      oidset: use khash
      oidset: uninline oidset_init()
      commit-reach: fix cast in compare_commits_by_gen()

Roger Strain (1):
      subtree: performance improvement for finding unexpected parent commits

SZEDER Gábor (20):
      t1404: increase core.packedRefsTimeout to avoid occasional test failure
      Documentation/git.txt: clarify that GIT_TRACE=/path appends
      t3701-add-interactive: tighten the check of trace output
      t1700-split-index: drop unnecessary 'grep'
      t0090: disable GIT_TEST_SPLIT_INDEX for the test checking split index
      t1700-split-index: document why FSMONITOR is disabled in this test script
      split-index: add tests to demonstrate the racy split index problem
      t1700-split-index: date back files to avoid racy situations
      split-index: count the number of deleted entries
      split-index: don't compare cached data of entries already marked for split index
      split-index: smudge and add racily clean cache entries to split index
      split-index: BUG() when cache entry refers to non-existing shared entry
      object_id.cocci: match only expressions of type 'struct object_id'
      test-lib: introduce the '-V' short option for '--verbose-log'
      travis-ci: install packages in 'ci/install-dependencies.sh'
      coccicheck: introduce 'pending' semantic patches
      ref-filter: don't look for objects when outside of a repository
      tests: send "bug in the test script" errors to the script's stderr
      test-lib-functions: make 'test_cmp_rev' more informative on failure
      t/lib-git-daemon: fix signal checking

Sam McKelvie (1):
      rev-parse: --show-superproject-working-tree should work during a merge

Saulius Gurklys (1):
      doc: fix small typo in git show-branch

Sebastian Staudt (1):
      travis-ci: no longer use containers

Shulhan (1):
      builtin/remote: quote remote name on error to display empty name

Stefan Beller (25):
      git-submodule.sh: align error reporting for update mode to use path
      git-submodule.sh: rename unused variables
      builtin/submodule--helper: factor out submodule updating
      builtin/submodule--helper: store update_clone information in a struct
      builtin/submodule--helper: factor out method to update a single submodule
      submodule--helper: replace connect-gitdir-workingtree by ensure-core-worktree
      submodule--helper: introduce new update-module-mode helper
      test_decode_color: understand FAINT and ITALIC
      t3206: add color test for range-diff --dual-color
      diff.c: simplify caller of emit_line_0
      diff.c: reorder arguments for emit_line_ws_markup
      diff.c: add set_sign to emit_line_0
      diff: use emit_line_0 once per line
      diff.c: omit check for line prefix in emit_line_0
      diff.c: rewrite emit_line_0 more understandably
      diff.c: add --output-indicator-{new, old, context}
      range-diff: make use of different output indicators
      range-diff: indent special lines as context
      refs.c: migrate internal ref iteration to pass thru repository argument
      refs.c: upgrade for_each_replace_ref to be a each_repo_ref_fn callback
      string-list: remove unused function print_string_list
      strbuf.h: format according to coding guidelines
      diff.c: pass sign_index to emit_line_ws_markup
      submodule helper: convert relative URL to absolute URL if needed
      builtin/submodule--helper: remove debugging leftover tracing

Stephen P. Smith (10):
      wt-status.c: move has_unmerged earlier in the file
      wt-status: rename commitable to committable
      t7501: add test of "commit --dry-run --short"
      wt-status.c: set the committable flag in the collect phase
      roll wt_status_state into wt_status and populate in the collect phase
      t2000: rename and combine checkout clash tests
      t7509: cleanup description and filename
      t7502: rename commit test script to comply with naming convention
      t7500: rename commit tests script to comply with naming convention
      t7501: rename commit test to comply with naming convention

Steve Hoelzer (1):
      poll: use GetTickCount64() to avoid wrap-around issues

Steven Fernandez (1):
      git-completion.bash: add completion for stash list

Strain, Roger L (4):
      subtree: refactor split of a commit into standalone method
      subtree: make --ignore-joins pay attention to adds
      subtree: use commits before rejoins for splits
      subtree: improve decision on merges kept in split

Sven Strickroth (1):
      msvc: directly use MS version (_stricmp) of strcasecmp

Tao Qingyun (3):
      refs: docstring typo
      builtin/branch.c: remove useless branch_get
      branch: trivial style fix

Taylor Blau (4):
      transport.c: extract 'fill_alternate_refs_command'
      transport.c: introduce core.alternateRefsCommand
      transport.c: introduce core.alternateRefsPrefixes
      Documentation/config.txt: fix typo in core.alternateRefsCommand

Thomas Gummerer (17):
      rerere: unify error messages when read_cache fails
      rerere: lowercase error messages
      rerere: wrap paths in output in sq
      rerere: mark strings for translation
      rerere: add documentation for conflict normalization
      rerere: fix crash with files rerere can't handle
      rerere: only return whether a path has conflicts or not
      rerere: factor out handle_conflict function
      rerere: return strbuf from handle path
      rerere: teach rerere to handle nested conflicts
      rerere: recalculate conflict ID when unresolved conflict is committed
      rerere: mention caveat about unmatched conflict markers
      rerere: add note about files with existing conflict markers
      .gitattributes: add conflict-marker-size for relevant files
      linear-assignment: fix potential out of bounds memory access
      t5551: move setup code inside test_expect blocks
      t5551: compare sorted cookies files

Tim Schumacher (4):
      Documentation/Makefile: make manpage-base-url.xsl generation quieter
      alias: add support for aliases of an alias
      alias: show the call history when an alias is looping
      t0014: introduce an alias testing suite

Todd Zullinger (1):
      Documentation: build technical/multi-pack-index

Torsten Bögershausen (5):
      Make git_check_attr() a void function
      path.c: char is not (always) signed
      Upcast size_t variables to uintmax_t when printing
      remote-curl.c: xcurl_off_t is not portable (on 32 bit platfoms)
      t5601-99: Enable colliding file detection for MINGW

Trần Ngọc Quân (2):
      l10n: vi(4185t): Updated Vietnamese translation for v2.20.0
      l10n: vi(4187t): Updated Vietnamese translation for v2.20.0 rd3

Uwe Kleine-König (1):
      howto/using-merge-subtree: mention --allow-unrelated-histories

brian m. carlson (26):
      t: add test functions to translate hash-related values
      t0000: use hash translation table
      t0000: update tests for SHA-256
      t0002: abstract away SHA-1 specific constants
      t0064: make hash size independent
      t1006: make hash size independent
      t1400: switch hard-coded object ID to variable
      t1405: make hash size independent
      t1406: make hash-size independent
      t1407: make hash size independent
      editorconfig: provide editor settings for Git developers
      editorconfig: indicate settings should be kept in sync
      pack-bitmap-write: use GIT_MAX_RAWSZ for allocation
      builtin/repack: replace hard-coded constants
      builtin/mktree: remove hard-coded constant
      builtin/fetch-pack: remove constants with parse_oid_hex
      pack-revindex: express constants in terms of the_hash_algo
      packfile: express constants in terms of the_hash_algo
      refs/packed-backend: express constants using the_hash_algo
      upload-pack: express constants in terms of the_hash_algo
      transport: use parse_oid_hex instead of a constant
      tag: express constant in terms of the_hash_algo
      apply: replace hard-coded constants
      apply: rename new_sha1_prefix and old_sha1_prefix
      submodule: make zero-oid comparison hash function agnostic
      rerere: convert to use the_hash_algo

Ævar Arnfjörð Bjarmason (35):
      fetch: change "branch" to "reference" in --force -h output
      push tests: make use of unused $1 in test description
      push tests: use spaces in interpolated string
      fetch tests: add a test for clobbering tag behavior
      push doc: remove confusing mention of remote merger
      push doc: move mention of "tag <tag>" later in the prose
      push doc: correct lies about how push refspecs work
      fetch: document local ref updates with/without --force
      fetch: stop clobbering existing tags without --force
      fsck tests: setup of bogus commit object
      fsck tests: add a test for no skipList input
      fsck: document and test sorted skipList input
      fsck: document and test commented & empty line skipList input
      fsck: document that skipList input must be unabbreviated
      fsck: add a performance test
      fsck: support comments & empty lines in skipList
      commit-graph write: add progress output
      commit-graph verify: add progress output
      config doc: add missing list separator for checkout.optimizeNewBranch
      push doc: add spacing between two words
      fetch doc: correct grammar in --force docs
      gc: fix regression in 7b0f229222 impacting --quiet
      gc doc: mention the commit-graph in the intro
      pack-objects test: modernize style
      pack-objects tests: don't leave test .git corrupt at end
      index-pack tests: don't leave test repo dirty at end
      i18n: make GETTEXT_POISON a runtime option
      range-diff doc: add a section about output stability
      range-diff: fix regression in passing along diff options
      range-diff: make diff option behavior (e.g. --stat) consistent
      push: change needlessly ambiguous example in error
      rebase doc: document rebase.useBuiltin
      tests: add a special setup where rebase.useBuiltin is off
      read-cache: make the split index obey umask settings
      advice: don't pointlessly suggest --convert-graft-file

Đoàn Trần Công Danh (1):
      git-compat-util: prefer poll.h to sys/poll.h


^ permalink raw reply	[relevance 2%]

* Re: [ANNOUNCE] Git v2.20.0-rc2
  2018-12-01 14:58  2% [ANNOUNCE] Git v2.20.0-rc2 Junio C Hamano
@ 2018-12-03 20:45  0% ` Johannes Schindelin
  0 siblings, 0 replies; 162+ results
From: Johannes Schindelin @ 2018-12-03 20:45 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, git-for-windows, git-packagers

[-- Attachment #1: Type: text/plain, Size: 91897 bytes --]

Team,

Git for Windows v2.20.0-rc2 is available here:

https://github.com/git-for-windows/git/releases/tag/v2.20.0-rc2.windows.1

There is already one known issue: the size of the installer increased (see
https://github.com/git-for-windows/git/issues/1963). This is in the
process of being addressed.

Ciao,
Johannes

On Sat, 1 Dec 2018, Junio C Hamano wrote:

> A release candidate Git v2.20.0-rc2 is now available for testing
> at the usual places.  It is comprised of 934 non-merge commits
> since v2.19.0, contributed by 76 people, 25 of which are new faces.
> 
> The tarballs are found at:
> 
>     https://www.kernel.org/pub/software/scm/git/testing/
> 
> The following public repositories all have a copy of the
> 'v2.20.0-rc2' tag and the 'master' branch that the tag points at:
> 
>   url = https://kernel.googlesource.com/pub/scm/git/git
>   url = git://repo.or.cz/alt-git.git
>   url = https://github.com/gitster/git
> 
> New contributors whose contributions weren't in v2.19.0 are as follows.
> Welcome to the Git development community!
> 
>   Aaron Lindsay, Alexander Pyhalov, Anton Serbulov, Brendan
>   Forster, Carlo Marcelo Arenas Belón, Daniels Umanovskis, David
>   Zych, Đoàn Trần Công Danh, Frederick Eaton, Greg Hurrell,
>   James Knight, Jann Horn, Joshua Watt, Loo Rong Jie, Lucas
>   De Marchi, Matthew DeVore, Mihir Mehta, Nickolai Belakovski,
>   Roger Strain, Sam McKelvie, Saulius Gurklys, Shulhan, Steven
>   Fernandez, Strain, Roger L, and Tim Schumacher.
> 
> Returning contributors who helped this release are as follows.
> Thanks for your continued support.
> 
>   Ævar Arnfjörð Bjarmason, Alban Gruin, Andreas Gruenbacher,
>   Andreas Heiduk, Antonio Ospite, Ben Peart, Brandon Williams,
>   brian m. carlson, Christian Couder, Christian Hesse, Denton Liu,
>   Derrick Stolee, Elijah Newren, Eric Sunshine, Jean-Noël Avila,
>   Jeff Hostetler, Jeff King, Johannes Schindelin, Johannes Sixt,
>   Jonathan Nieder, Jonathan Tan, Josh Steadmon, Junio C Hamano,
>   Karsten Blees, Luke Diamand, Martin Ågren, Max Kirillov,
>   Michael Witten, Michał Górny, Nguyễn Thái Ngọc Duy, Noam
>   Postavsky, Olga Telezhnaya, Phillip Wood, Pratik Karki, Rafael
>   Ascensão, Ralf Thielow, Ramsay Jones, Rasmus Villemoes, René
>   Scharfe, Sebastian Staudt, Stefan Beller, Stephen P. Smith, Steve
>   Hoelzer, Sven Strickroth, SZEDER Gábor, Tao Qingyun, Taylor
>   Blau, Thomas Gummerer, Todd Zullinger, Torsten Bögershausen,
>   and Uwe Kleine-König.
> 
> ----------------------------------------------------------------
> 
> Git 2.20 Release Notes (draft)
> ==============================
> 
> Backward Compatibility Notes
> ----------------------------
> 
>  * "git branch -l <foo>" used to be a way to ask a reflog to be
>    created while creating a new branch, but that is no longer the
>    case.  It is a short-hand for "git branch --list <foo>" now.
> 
>  * "git push" into refs/tags/* hierarchy is rejected without getting
>    forced, but "git fetch" (misguidedly) used the "fast forwarding"
>    rule used for the refs/heads/* hierarchy; this has been corrected,
>    which means some fetches of tags that did not fail with older
>    version of Git will fail without "--force" with this version.
> 
>  * "git help -a" now gives verbose output (same as "git help -av").
>    Those who want the old output may say "git help --no-verbose -a"..
> 
>  * "git cpn --help", when "cpn" is an alias to, say, "cherry-pick -n",
>    reported only the alias expansion of "cpn" in earlier versions of
>    Git.  It now runs "git cherry-pick --help" to show the manual page
>    of the command, while sending the alias expansion to the standard
>    error stream.
> 
>  * "git send-email" learned to grab address-looking string on any
>    trailer whose name ends with "-by". This is a backward-incompatible
>    change.  Adding "--suppress-cc=misc-by" on the command line, or
>    setting sendemail.suppresscc configuration variable to "misc-by",
>    can be used to disable this behaviour.
> 
> 
> Updates since v2.19
> -------------------
> 
> UI, Workflows & Features
> 
>  * Running "git clone" against a project that contain two files with
>    pathnames that differ only in cases on a case insensitive
>    filesystem would result in one of the files lost because the
>    underlying filesystem is incapable of holding both at the same
>    time.  An attempt is made to detect such a case and warn.
> 
>  * "git checkout -b newbranch [HEAD]" should not have to do as much as
>    checking out a commit different from HEAD.  An attempt is made to
>    optimize this special case.
> 
>  * "git rev-list --stdin </dev/null" used to be an error; it now shows
>    no output without an error.  "git rev-list --stdin --default HEAD"
>    still falls back to the given default when nothing is given on the
>    standard input.
> 
>  * Lift code from GitHub to restrict delta computation so that an
>    object that exists in one fork is not made into a delta against
>    another object that does not appear in the same forked repository.
> 
>  * "git format-patch" learned new "--interdiff" and "--range-diff"
>    options to explain the difference between this version and the
>    previous attempt in the cover letter (or after the three-dashes as
>    a comment).
> 
>  * "git mailinfo" used in "git am" learned to make a best-effort
>    recovery of a patch corrupted by MUA that sends text/plain with
>    format=flawed option.
>    (merge 3aa4d81f88 rs/mailinfo-format-flowed later to maint).
> 
>  * The rules used by "git push" and "git fetch" to determine if a ref
>    can or cannot be updated were inconsistent; specifically, fetching
>    to update existing tags were allowed even though tags are supposed
>    to be unmoving anchoring points.  "git fetch" was taught to forbid
>    updates to existing tags without the "--force" option.
> 
>  * "git multi-pack-index" learned to detect corruption in the .midx
>    file it uses, and this feature has been integrated into "git fsck".
> 
>  * Generation of (experimental) commit-graph files have so far been
>    fairly silent, even though it takes noticeable amount of time in a
>    meaningfully large repository.  The users will now see progress
>    output.
> 
>  * The minimum version of Windows supported by Windows port of Git is
>    now set to Vista.
> 
>  * The completion script (in contrib/) learned to complete a handful of
>    options "git stash list" command takes.
> 
>  * The completion script (in contrib/) learned that "git fetch
>    --multiple" only takes remote names as arguments and no refspecs.
> 
>  * "git status" learns to show progress bar when refreshing the index
>    takes a long time.
>    (merge ae9af12287 nd/status-refresh-progress later to maint).
> 
>  * "git help -a" and "git help -av" give different pieces of
>    information, and generally the "verbose" version is more friendly
>    to the new users.  "git help -a" by default now uses the more
>    verbose output (with "--no-verbose", you can go back to the
>    original).  Also "git help -av" now lists aliases and external
>    commands, which it did not used to.
> 
>  * Unlike "grep", "git grep" by default recurses to the whole tree.
>    The command learned "git grep --recursive" option, so that "git
>    grep --no-recursive" can serve as a synonym to setting the
>    max-depth to 0.
> 
>  * When pushing into a repository that borrows its objects from an
>    alternate object store, "git receive-pack" that responds to the
>    push request on the other side lists the tips of refs in the
>    alternate to reduce the amount of objects transferred.  This
>    sometimes is detrimental when the number of refs in the alternate
>    is absurdly large, in which case the bandwidth saved in potentially
>    fewer objects transferred is wasted in excessively large ref
>    advertisement.  The alternate refs that are advertised are now
>    configurable with a pair of configuration variables.
> 
>  * "git cmd --help" when "cmd" is aliased used to only say "cmd is
>    aliased to ...".  Now it shows that to the standard error stream
>    and runs "git $cmd --help" where $cmd is the first word of the
>    alias expansion.
> 
>  * The documentation of "git gc" has been updated to mention that it
>    is no longer limited to "pruning away crufts" but also updates
>    ancillary files like commit-graph as a part of repository
>    optimization.
> 
>  * "git p4 unshelve" improvements.
> 
>  * The logic to select the default user name and e-mail on Windows has
>    been improved.
>    (merge 501afcb8b0 js/mingw-default-ident later to maint).
> 
>  * The "rev-list --filter" feature learned to exclude all trees via
>    "tree:0" filter.
> 
>  * "git send-email" learned to grab address-looking string on any
>    trailer whose name ends with "-by"; --suppress-cc=misc-by on the
>    command line, or setting sendemail.suppresscc configuration
>    variable to "misc-by", can be used to disable this behaviour.
> 
>  * Developer builds now uses -Wunused-function compilation option.
> 
>  * One of our CI tests to run with "unusual/experimental/random"
>    settings now also uses commit-graph and midx.
> 
>  * "git mergetool" learned to take the "--[no-]gui" option, just like
>    "git difftool" does.
> 
>  * "git rebase -i" learned a new insn, 'break', that the user can
>    insert in the to-do list.  Upon hitting it, the command returns
>    control back to the user.
> 
>  * New "--pretty=format:" placeholders %GF and %GP that show the GPG
>    key fingerprints have been invented.
> 
>  * On platforms with recent cURL library, http.sslBackend configuration
>    variable can be used to choose a different SSL backend at runtime.
>    The Windows port uses this mechanism to switch between OpenSSL and
>    Secure Channel while talking over the HTTPS protocol.
> 
>  * "git send-email" learned to disable SMTP authentication via the
>    "--smtp-auth=none" option, even when the smtp username is given
>    (which turns the authentication on by default).
> 
>  * A fourth class of configuration files (in addition to the
>    traditional "system wide", "per user in the $HOME directory" and
>    "per repository in the $GIT_DIR/config") has been introduced so
>    that different worktrees that share the same repository (hence the
>    same $GIT_DIR/config file) can use different customization.
> 
>  * A pattern with '**' that does not have a slash on either side used
>    to be an invalid one, but the code now treats such double-asterisks
>    the same way as two normal asterisks that happen to be adjacent to
>    each other.
>    (merge e5bbe09e88 nd/wildmatch-double-asterisk later to maint).
> 
>  * The "--no-patch" option, which can be used to get a high-level
>    overview without the actual line-by-line patch difference shown, of
>    the "range-diff" command was earlier broken, which has been
>    corrected.
> 
>  * The recently merged "rebase in C" has an escape hatch to use the
>    scripted version when necessary, but it hasn't been documented,
>    which has been corrected.
> 
> 
> Performance, Internal Implementation, Development Support etc.
> 
>  * When there are too many packfiles in a repository (which is not
>    recommended), looking up an object in these would require
>    consulting many pack .idx files; a new mechanism to have a single
>    file that consolidates all of these .idx files is introduced.
> 
>  * "git submodule update" is getting rewritten piece-by-piece into C.
> 
>  * The code for computing history reachability has been shuffled,
>    obtained a bunch of new tests to cover them, and then being
>    improved.
> 
>  * The unpack_trees() API used in checking out a branch and merging
>    walks one or more trees along with the index.  When the cache-tree
>    in the index tells us that we are walking a tree whose flattened
>    contents is known (i.e. matches a span in the index), as linearly
>    scanning a span in the index is much more efficient than having to
>    open tree objects recursively and listing their entries, the walk
>    can be optimized, which has been done.
> 
>  * When creating a thin pack, which allows objects to be made into a
>    delta against another object that is not in the resulting pack but
>    is known to be present on the receiving end, the code learned to
>    take advantage of the reachability bitmap; this allows the server
>    to send a delta against a base beyond the "boundary" commit.
> 
>  * spatch transformation to replace boolean uses of !hashcmp() to
>    newly introduced oideq() is added, and applied, to regain
>    performance lost due to support of multiple hash algorithms.
> 
>  * Fix a bug in which the same path could be registered under multiple
>    worktree entries if the path was missing (for instance, was removed
>    manually).  Also, as a convenience, expand the number of cases in
>    which --force is applicable.
> 
>  * Split Documentation/config.txt for easier maintenance.
>    (merge 6014363f0b nd/config-split later to maint).
> 
>  * Test helper binaries clean-up.
>    (merge c9a1f4161f nd/test-tool later to maint).
> 
>  * Various tests have been updated to make it easier to swap the
>    hash function used for object identification.
>    (merge ae0c89d41b bc/hash-independent-tests later to maint).
> 
>  * Update fsck.skipList implementation and documentation.
>    (merge 371a655074 ab/fsck-skiplist later to maint).
> 
>  * An alias that expands to another alias has so far been forbidden,
>    but now it is allowed to create such an alias.
> 
>  * Various test scripts have been updated for style and also correct
>    handling of exit status of various commands.
> 
>  * "gc --auto" ended up calling exit(-1) upon error, which has been
>    corrected to use exit(1).  Also the error reporting behaviour when
>    daemonized has been updated to exit with zero status when stopping
>    due to a previously discovered error (which implies there is no
>    point running gc to improve the situation); we used to exit with
>    failure in such a case.
> 
>  * Various codepaths in the core-ish part learned to work on an
>    arbitrary in-core index structure, not necessarily the default
>    instance "the_index".
>    (merge b3c7eef9b0 nd/the-index later to maint).
> 
>  * Code clean-up in the internal machinery used by "git status" and
>    "git commit --dry-run".
>    (merge 73ba5d78b4 ss/wt-status-committable later to maint).
> 
>  * Some environment variables that control the runtime options of Git
>    used during tests are getting renamed for consistency.
>    (merge 4231d1ba99 bp/rename-test-env-var later to maint).
> 
>  * A pair of new extensions to the index file have been introduced.
>    They allow the index file to be read in parallel for performance.
> 
>  * The oidset API was built on top of the oidmap API which in turn is
>    on the hashmap API.  Replace the implementation to build on top of
>    the khash API and gain performance.
> 
>  * Over some transports, fetching objects with an exact commit object
>    name can be done without first seeing the ref advertisements.  The
>    code has been optimized to exploit this.
> 
>  * In a partial clone that will lazily be hydrated from the
>    originating repository, we generally want to avoid "does this
>    object exist (locally)?" on objects that we deliberately omitted
>    when we created the clone.  The cache-tree codepath (which is used
>    to write a tree object out of the index) however insisted that the
>    object exists, even for paths that are outside of the partial
>    checkout area.  The code has been updated to avoid such a check.
> 
>  * To help developers, an EditorConfig file that attempts to follow
>    the project convention has been added.
>    (merge b548d698a0 bc/editorconfig later to maint).
> 
>  * The result of coverage test can be combined with "git blame" to
>    check the test coverage of code introduced recently with a new
>    'coverage-diff' tool (in contrib/).
>    (merge 783faedd65 ds/coverage-diff later to maint).
> 
>  * An experiment to fuzz test a few areas, hopefully we can gain more
>    coverage to various areas.
> 
>  * More codepaths are moving away from hardcoded hash sizes.
> 
>  * The way the Windows port figures out the current directory has been
>    improved.
> 
>  * The way DLLs are loaded on the Windows port has been improved.
> 
>  * Some tests have been reorganized and renamed; "ls t/" now gives a
>    better overview of what is tested for these scripts than before.
> 
>  * "git rebase" and "git rebase -i" have been reimplemented in C.
> 
>  * Windows port learned to use nano-second resolution file timestamps.
> 
>  * The overly large Documentation/config.txt file have been split into
>    million little pieces.  This potentially allows each individual piece
>    included into the manual page of the command it affects more easily.
> 
>  * Replace three string-list instances used as look-up tables in "git
>    fetch" with hashmaps.
> 
>  * Unify code to read the author-script used in "git am" and the
>    commands that use the sequencer machinery, e.g. "git rebase -i".
> 
>  * In preparation to the day when we can deprecate and remove the
>    "rebase -p", make sure we can skip and later remove tests for
>    it.
> 
>  * The history traversal used to implement the tag-following has been
>    optimized by introducing a new helper.
> 
>  * The helper function to refresh the cached stat information in the
>    in-core index has learned to perform the lstat() part of the
>    operation in parallel on multi-core platforms.
> 
>  * The code to traverse objects for reachability, used to decide what
>    objects are unreferenced and expendable, have been taught to also
>    consider per-worktree refs of other worktrees as starting points to
>    prevent data loss.
> 
>  * "git add" needs to internally run "diff-files" equivalent, and the
>    codepath learned the same optimization as "diff-files" has to run
>    lstat(2) in parallel to find which paths have been updated in the
>    working tree.
> 
>  * The procedure to install dependencies before testing at Travis CI
>    is getting revamped for both simplicity and flexibility, taking
>    advantage of the recent move to the vm-based environment.
> 
>  * The support for format-patch (and send-email) by the command-line
>    completion script (in contrib/) has been simplified a bit.
> 
>  * The revision walker machinery learned to take advantage of the
>    commit generation numbers stored in the commit-graph file.
> 
>  * The codebase has been cleaned up to reduce "#ifndef NO_PTHREADS".
> 
>  * The way -lcurl library gets linked has been simplified by taking
>    advantage of the fact that we can just ask curl-config command how.
> 
>  * Various functions have been audited for "-Wunused-parameter" warnings
>    and bugs in them got fixed.
> 
>  * A sanity check for start-up sequence has been added in the config
>    API codepath.
> 
>  * The build procedure to link for fuzzing test has been made
>    customizable with a new Makefile variable.
> 
>  * The way "git rebase" parses and forwards the command line options
>    meant for underlying "git am" has been revamped, which fixed for
>    options with parameters that were not passed correctly.
> 
>  * Our testing framework uses a special i18n "poisoned localization"
>    feature to find messages that ought to stay constant but are
>    incorrectly marked to be translated.  This feature has been made
>    into a runtime option (it used to be a compile-time option).
> 
>  * "git push" used to check ambiguities between object-names and
>    refnames while processing the list of refs' old and new values,
>    which was unnecessary (as it knew that it is feeding raw object
>    names).  This has been optimized out.
> 
>  * The xcurl_off_t() helper function is used to cast size_t to
>    curl_off_t, but some compilers gave warnings against the code to
>    ensure the casting is done without wraparound, when size_t is
>    narrower than curl_off_t.  This warning has been squelched.
> 
>  * Code preparation to replace ulong vars with size_t vars where
>    appropriate continues.
> 
>  * The "test installed Git" mode of our test suite has been updated to
>    work better.
> 
>  * A coding convention around the Coccinelle semantic patches to have
>    two classes to ease code migration process has been proposed and
>    its support has been added to the Makefile.
> 
> 
> Fixes since v2.19
> -----------------
> 
>  * "git interpret-trailers" and its underlying machinery had a buggy
>    code that attempted to ignore patch text after commit log message,
>    which triggered in various codepaths that will always get the log
>    message alone and never get such an input.
>    (merge 66e83d9b41 jk/trailer-fixes later to maint).
> 
>  * Malformed or crafted data in packstream can make our code attempt
>    to read or write past the allocated buffer and abort, instead of
>    reporting an error, which has been fixed.
> 
>  * "git rebase -i" did not clear the state files correctly when a run
>    of "squash/fixup" is aborted and then the user manually amended the
>    commit instead, which has been corrected.
>    (merge 10d2f35436 js/rebase-i-autosquash-fix later to maint).
> 
>  * When fsmonitor is in use, after operation on submodules updates
>    .gitmodules, we lost track of the fact that we did so and relied on
>    stale fsmonitor data.
>    (merge 43f1180814 bp/mv-submodules-with-fsmonitor later to maint).
> 
>  * Fix for a long-standing bug that leaves the index file corrupt when
>    it shrinks during a partial commit.
>    (merge 6c003d6ffb jk/reopen-tempfile-truncate later to maint).
> 
>  * Further fix for O_APPEND emulation on Windows
>    (merge eeaf7ddac7 js/mingw-o-append later to maint).
> 
>  * A corner case bugfix in "git rerere" code.
>    (merge ad2bf0d9b4 en/rerere-multi-stage-1-fix later to maint).
> 
>  * "git add ':(attr:foo)'" is not supported and is supposed to be
>    rejected while the command line arguments are parsed, but we fail
>    to reject such a command line upfront.
>    (merge 84d938b732 nd/attr-pathspec-fix later to maint).
> 
>  * Recent update broke the reachability algorithm when refs (e.g.
>    tags) that point at objects that are not commit were involved,
>    which has been fixed.
> 
>  * "git rebase" etc. in Git 2.19 fails to abort when given an empty
>    commit log message as result of editing, which has been corrected.
>    (merge a3ec9eaf38 en/sequencer-empty-edit-result-aborts later to maint).
> 
>  * The code to backfill objects in lazily cloned repository did not
>    work correctly, which has been corrected.
>    (merge e68302011c jt/lazy-object-fetch-fix later to maint).
> 
>  * Update error messages given by "git remote" and make them consistent.
>    (merge 5025425dff ms/remote-error-message-update later to maint).
> 
>  * "git update-ref" learned to make both "--no-deref" and "--stdin"
>    work at the same time.
>    (merge d345e9fbe7 en/update-ref-no-deref-stdin later to maint).
> 
>  * Recently added "range-diff" had a corner-case bug to cause it
>    segfault, which has been corrected.
>    (merge e467a90c7a tg/range-diff-corner-case-fix later to maint).
> 
>  * The recently introduced commit-graph auxiliary data is incompatible
>    with mechanisms such as replace & grafts that "breaks" immutable
>    nature of the object reference relationship.  Disable optimizations
>    based on its use (and updating existing commit-graph) when these
>    incompatible features are in use in the repository.
>    (merge 829a321569 ds/commit-graph-with-grafts later to maint).
> 
>  * The mailmap file update.
>    (merge 255eb03edf jn/mailmap-update later to maint).
> 
>  * The code in "git status" sometimes hit an assertion failure.  This
>    was caused by a structure that was reused without cleaning the data
>    used for the first run, which has been corrected.
>    (merge 3e73cc62c0 en/status-multiple-renames-to-the-same-target-fix later to maint).
> 
>  * "git fetch $repo $object" in a partial clone did not correctly
>    fetch the asked-for object that is referenced by an object in
>    promisor packfile, which has been fixed.
> 
>  * A corner-case bugfix.
>    (merge c5cbb27cb5 sm/show-superproject-while-conflicted later to maint).
> 
>  * Various fixes to "diff --color-moved-ws".
> 
>  * A partial clone that is configured to lazily fetch missing objects
>    will on-demand issue a "git fetch" request to the originating
>    repository to fill not-yet-obtained objects.  The request has been
>    optimized for requesting a tree object (and not the leaf blob
>    objects contained in it) by telling the originating repository that
>    no blobs are needed.
>    (merge 4c7f9567ea jt/non-blob-lazy-fetch later to maint).
> 
>  * The codepath to support the experimental split-index mode had
>    remaining "racily clean" issues fixed.
>    (merge 4c490f3d32 sg/split-index-racefix later to maint).
> 
>  * "git log --graph" showing an octopus merge sometimes miscounted the
>    number of display columns it is consuming to show the merge and its
>    parent commits, which has been corrected.
>    (merge 04005834ed np/log-graph-octopus-fix later to maint).
> 
>  * "git range-diff" did not work well when the compared ranges had
>    changes in submodules and the "--submodule=log" was used.
> 
>  * The implementation of run_command() API on the UNIX platforms had a
>    bug that caused a command not on $PATH to be found in the current
>    directory.
>    (merge f67b980771 jk/run-command-notdot later to maint).
> 
>  * A mutex used in "git pack-objects" were not correctly initialized
>    and this caused "git repack" to dump core on Windows.
>    (merge 34204c8166 js/pack-objects-mutex-init-fix later to maint).
> 
>  * Under certain circumstances, "git diff D:/a/b/c D:/a/b/d" on
>    Windows would strip initial parts from the paths because they
>    were not recognized as absolute, which has been corrected.
>    (merge ffd04e92e2 js/diff-notice-has-drive-prefix later to maint).
> 
>  * The receive.denyCurrentBranch=updateInstead codepath kicked in even
>    when the push should have been rejected due to other reasons, such
>    as it does not fast-forward or the update-hook rejects it, which
>    has been corrected.
>    (merge b072a25fad jc/receive-deny-current-branch-fix later to maint).
> 
>  * The logic to determine the archive type "git archive" uses did not
>    correctly kick in for "git archive --remote", which has been
>    corrected.
> 
>  * "git repack" in a shallow clone did not correctly update the
>    shallow points in the repository, leading to a repository that
>    does not pass fsck.
>    (merge 5dcfbf564c js/shallow-and-fetch-prune later to maint).
> 
>  * Some codepaths failed to form a proper URL when .gitmodules record
>    the URL to a submodule repository as relative to the repository of
>    superproject, which has been corrected.
>    (merge e0a862fdaf sb/submodule-url-to-absolute later to maint).
> 
>  * "git fetch" over protocol v2 into a shallow repository failed to
>    fetch full history behind a new tip of history that was diverged
>    before the cut-off point of the history that was previously fetched
>    shallowly.
> 
>  * The command line completion machinery (in contrib/) has been
>    updated to allow the completion script to tweak the list of options
>    that are reported by the parse-options machinery correctly.
>    (merge 276b49ff34 nd/completion-negation later to maint).
> 
>  * Operations on promisor objects make sense in the context of only a
>    small subset of the commands that internally use the revisions
>    machinery, but the "--exclude-promisor-objects" option were taken
>    and led to nonsense results by commands like "log", to which it
>    didn't make much sense.  This has been corrected.
>    (merge 669b1d2aae md/exclude-promisor-objects-fix later to maint).
> 
>  * The "container" mode of TravisCI is going away.  Our .travis.yml
>    file is getting prepared for the transition.
>    (merge 32ee384be8 ss/travis-ci-force-vm-mode later to maint).
> 
>  * Our test scripts can now take the '-V' option as a synonym for the
>    '--verbose-log' option.
>    (merge a5f52c6dab sg/test-verbose-log later to maint).
> 
>  * A regression in Git 2.12 era made "git fsck" fall into an infinite
>    loop while processing truncated loose objects.
>    (merge 18ad13e5b2 jk/detect-truncated-zlib-input later to maint).
> 
>  * "git ls-remote $there foo" was broken by recent update for the
>    protocol v2 and stopped showing refs that match 'foo' that are not
>    refs/{heads,tags}/foo, which has been fixed.
>    (merge 6a139cdd74 jk/proto-v2-ref-prefix-fix later to maint).
> 
>  * Additional comment on a tricky piece of code to help developers.
>    (merge 0afbe3e806 jk/stream-pack-non-delta-clarification later to maint).
> 
>  * A couple of tests used to leave the repository in a state that is
>    deliberately corrupt, which have been corrected.
>    (merge aa984dbe5e ab/pack-tests-cleanup later to maint).
> 
>  * The submodule support has been updated to read from the blob at
>    HEAD:.gitmodules when the .gitmodules file is missing from the
>    working tree.
>    (merge 2b1257e463 ao/submodule-wo-gitmodules-checked-out later to maint).
> 
>  * "git fetch" was a bit loose in parsing responses from the other side
>    when talking over the protocol v2.
> 
>  * "git rev-parse --exclude=* --branches --branches"  (i.e. first
>    saying "add only things that do not match '*' out of all branches"
>    and then adding all branches, without any exclusion this time")
>    worked as expected, but "--exclude=* --all --all" did not work the
>    same way, which has been fixed.
>    (merge 5221048092 ag/rev-parse-all-exclude-fix later to maint).
> 
>  * "git send-email --transfer-encoding=..." in recent versions of Git
>    sometimes produced an empty "Content-Transfer-Encoding:" header,
>    which has been corrected.
>    (merge 3c88e46f1a al/send-email-auto-cte-fixup later to maint).
> 
>  * The interface into "xdiff" library used to discover the offset and
>    size of a generated patch hunk by first formatting it into the
>    textual hunk header "@@ -n,m +k,l @@" and then parsing the numbers
>    out.  A new interface has been introduced to allow callers a more
>    direct access to them.
>    (merge 5eade0746e jk/xdiff-interface later to maint).
> 
>  * Pathspec matching against a tree object were buggy when negative
>    pathspec elements were involved, which has been fixed.
>    (merge b7845cebc0 nd/tree-walk-path-exclusion later to maint).
> 
>  * "git merge" and "git pull" that merges into an unborn branch used
>    to completely ignore "--verify-signatures", which has been
>    corrected.
>    (merge 01a31f3bca jk/verify-sig-merge-into-void later to maint).
> 
>  * "git rebase --autostash" did not correctly re-attach the HEAD at times.
> 
>  * "rev-parse --exclude=<pattern> --branches=<pattern>" etc. did not
>    quite work, which has been corrected.
>    (merge 9ab9b5df0e ra/rev-parse-exclude-glob later to maint).
> 
>  * When editing a patch in a "git add -i" session, a hunk could be
>    made to no-op.  The "git apply" program used to reject a patch with
>    such a no-op hunk to catch user mistakes, but it is now updated to
>    explicitly allow a no-op hunk in an edited patch.
>    (merge 22cb3835b9 js/apply-recount-allow-noop later to maint).
> 
>  * The URL to an MSDN page in a comment has been updated.
>    (merge 2ef2ae2917 js/mingw-msdn-url later to maint).
> 
>  * "git ls-remote --sort=<thing>" can feed an object that is not yet
>    available into the comparison machinery and segfault, which has
>    been corrected to check such a request upfront and reject it.
> 
>  * When "git bundle" aborts due to an empty commit ranges
>    (i.e. resulting in an empty pack), it left a file descriptor to an
>    lockfile open, which resulted in leftover lockfile on Windows where
>    you cannot remove a file with an open file descriptor.  This has
>    been corrected.
>    (merge 2c8ee1f53c jk/close-duped-fd-before-unlock-for-bundle later to maint).
> 
>  * "git format-patch --stat=<width>" can be used to specify the width
>    used by the diffstat (shown in the cover letter).
>    (merge 284aeb7e60 nd/format-patch-cover-letter-stat-width later to maint).
> 
>  * The way .git/index and .git/sharedindex* files were initially
>    created gave these files different perm bits until they were
>    adjusted for shared repository settings.  This was made consistent.
>    (merge c9d6c78870 cc/shared-index-permbits later to maint).
> 
>  * "git rebase --stat" to transplant a piece of history onto a totally
>    unrelated history were not working before and silently showed wrong
>    result.  With the recent reimplementation in C, it started to instead
>    die with an error message, as the original logic was not prepared
>    to cope with this case.  This has now been fixed.
> 
>  * The advice message to tell the user to migrate an existing graft
>    file to the replace system when a graft file was read was shown
>    even when "git replace --convert-graft-file" command, which is the
>    way the message suggests to use, was running, which made little
>    sense.
>    (merge 8821e90a09 ab/replace-graft-with-replace-advice later to maint).
> 
>  * "git diff --raw" lost ellipses to adjust the output columns for
>    some time now, but the documentation still showed them.
> 
>  * Code cleanup, docfix, build fix, etc.
>    (merge 96a7501aad ts/doc-build-manpage-xsl-quietly later to maint).
>    (merge b9b07efdb2 tg/conflict-marker-size later to maint).
>    (merge fa0aeea770 sg/doc-trace-appends later to maint).
>    (merge d64324cb60 tb/void-check-attr later to maint).
>    (merge c3b9bc94b9 en/double-semicolon-fix later to maint).
>    (merge 79336116f5 sg/t3701-tighten-trace later to maint).
>    (merge 801fa63a90 jk/dev-build-format-security later to maint).
>    (merge 0597dd62ba sb/string-list-remove-unused later to maint).
>    (merge db2d36fad8 bw/protocol-v2 later to maint).
>    (merge 456d7cd3a9 sg/split-index-test later to maint).
>    (merge 7b6057c852 tq/refs-internal-comment-fix later to maint).
>    (merge 29e8dc50ad tg/t5551-with-curl-7.61.1 later to maint).
>    (merge 55f6bce2c9 fe/doc-updates later to maint).
>    (merge 7987d2232d jk/check-everything-connected-is-long-gone later to maint).
>    (merge 4ba3c9be47 dz/credential-doc-url-matching-rules later to maint).
>    (merge 4c399442f7 ma/commit-graph-docs later to maint).
>    (merge fc0503b04e ma/t1400-undebug-test later to maint).
>    (merge e56b53553a nd/packobjectshook-doc-fix later to maint).
>    (merge c56170a0c4 ma/mailing-list-address-in-git-help later to maint).
>    (merge 6e8fc70fce rs/sequencer-oidset-insert-avoids-dups later to maint).
>    (merge ad0b8f9575 mw/doc-typofixes later to maint).
>    (merge d9f079ad1a jc/how-to-document-api later to maint).
>    (merge b1492bf315 ma/t7005-bash-workaround later to maint).
>    (merge ac1f98a0df du/rev-parse-is-plumbing later to maint).
>    (merge ca8ed443a5 mm/doc-no-dashed-git later to maint).
>    (merge ce366a8144 du/get-tar-commit-id-is-plumbing later to maint).
>    (merge 61018fe9e0 du/cherry-is-plumbing later to maint).
>    (merge c7e5fe79b9 sb/strbuf-h-update later to maint).
>    (merge 8d2008196b tq/branch-create-wo-branch-get later to maint).
>    (merge 2e3c894f4b tq/branch-style-fix later to maint).
>    (merge c5d844af9c sg/doc-show-branch-typofix later to maint).
>    (merge 081d91618b ah/doc-updates later to maint).
>    (merge b84c783882 jc/cocci-preincr later to maint).
>    (merge 5e495f8122 uk/merge-subtree-doc-update later to maint).
>    (merge aaaa881822 jk/uploadpack-packobjectshook-fix later to maint).
>    (merge 3063477445 tb/char-may-be-unsigned later to maint).
>    (merge 8c64bc9420 sg/test-rebase-editor-fix later to maint).
>    (merge 71571cd7d6 ma/sequencer-do-reset-saner-loop-termination later to maint).
>    (merge 9a4cb8781e cb/notes-freeing-always-null-fix later to maint).
>    (merge 3006f5ee16 ma/reset-doc-rendering-fix later to maint).
>    (merge 4c2eb06419 sg/daemon-test-signal-fix later to maint).
>    (merge d27525e519 ss/msvc-strcasecmp later to maint).
> 
> ----------------------------------------------------------------
> 
> Changes since v2.19.0 are as follows:
> 
> Aaron Lindsay (1):
>       send-email: avoid empty transfer encoding header
> 
> Alban Gruin (21):
>       sequencer: make three functions and an enum from sequencer.c public
>       rebase -i: rewrite append_todo_help() in C
>       editor: add a function to launch the sequence editor
>       rebase -i: rewrite the edit-todo functionality in C
>       sequencer: add a new function to silence a command, except if it fails
>       rebase -i: rewrite setup_reflog_action() in C
>       rebase -i: rewrite checkout_onto() in C
>       sequencer: refactor append_todo_help() to write its message to a buffer
>       sequencer: change the way skip_unnecessary_picks() returns its result
>       t3404: todo list with commented-out commands only aborts
>       rebase -i: rewrite complete_action() in C
>       rebase -i: remove unused modes and functions
>       rebase -i: implement the logic to initialize $revisions in C
>       rebase -i: rewrite the rest of init_revisions_and_shortrevisions() in C
>       rebase -i: rewrite write_basic_state() in C
>       rebase -i: rewrite init_basic_state() in C
>       rebase -i: implement the main part of interactive rebase as a builtin
>       rebase--interactive2: rewrite the submodes of interactive rebase in C
>       rebase -i: remove git-rebase--interactive.sh
>       rebase -i: move rebase--helper modes to rebase--interactive
>       p3400: replace calls to `git checkout -b' by `git checkout -B'
> 
> Alexander Pyhalov (1):
>       t7005-editor: quote filename to fix whitespace-issue
> 
> Andreas Gruenbacher (1):
>       rev-parse: clear --exclude list after 'git rev-parse --all'
> 
> Andreas Heiduk (6):
>       doc: clarify boundaries of 'git worktree list --porcelain'
>       doc: fix ASCII art tab spacing
>       doc: fix inappropriate monospace formatting
>       doc: fix descripion for 'git tag --format'
>       doc: fix indentation of listing blocks in gitweb.conf.txt
>       doc: fix formatting in git-update-ref
> 
> Anton Serbulov (1):
>       mingw: fix getcwd when the parent directory cannot be queried
> 
> Antonio Ospite (10):
>       submodule: add a print_config_from_gitmodules() helper
>       submodule: factor out a config_set_in_gitmodules_file_gently function
>       t7411: merge tests 5 and 6
>       t7411: be nicer to future tests and really clean things up
>       submodule--helper: add a new 'config' subcommand
>       submodule: use the 'submodule--helper config' command
>       t7506: clean up .gitmodules properly before setting up new scenario
>       submodule: add a helper to check if it is safe to write to .gitmodules
>       submodule: support reading .gitmodules when it's not in the working tree
>       t/helper: add test-submodule-nested-repo-config
> 
> Ben Peart (19):
>       checkout: optimize "git checkout -b <new_branch>"
>       git-mv: allow submodules and fsmonitor to work together
>       t/README: correct spelling of "uncommon"
>       preload-index: use git_env_bool() not getenv() for customization
>       fsmonitor: update GIT_TEST_FSMONITOR support
>       read-cache: update TEST_GIT_INDEX_VERSION support
>       preload-index: update GIT_FORCE_PRELOAD_TEST support
>       read-cache: clean up casting and byte decoding
>       eoie: add End of Index Entry (EOIE) extension
>       config: add new index.threads config setting
>       read-cache: load cache extensions on a worker thread
>       ieot: add Index Entry Offset Table (IEOT) extension
>       read-cache: load cache entries on worker threads
>       reset: don't compute unstaged changes after reset when --quiet
>       reset: add new reset.quiet config setting
>       reset: warn when refresh_index() takes more than 2 seconds
>       speed up refresh_index() by utilizing preload_index()
>       add: speed up cmd_add() by utilizing read_cache_preload()
>       refresh_index: remove unnecessary calls to preload_index()
> 
> Brandon Williams (1):
>       config: document value 2 for protocol.version
> 
> Brendan Forster (1):
>       http: add support for disabling SSL revocation checks in cURL
> 
> Carlo Marcelo Arenas Belón (8):
>       unpack-trees: avoid dead store for struct progress
>       multi-pack-index: avoid dead store for struct progress
>       read-cache: use of memory after it is freed
>       commit-slabs: move MAYBE_UNUSED out
>       khash: silence -Wunused-function for delta-islands
>       compat: make sure git_mmap is not expected to write
>       sequencer: cleanup for gcc warning in non developer mode
>       builtin/notes: remove unnecessary free
> 
> Christian Couder (3):
>       pack-objects: refactor code into compute_layer_order()
>       pack-objects: move tree_depth into 'struct packing_data'
>       pack-objects: move 'layer' into 'struct packing_data'
> 
> Christian Hesse (2):
>       subtree: add build targets 'man' and 'html'
>       subtree: make install targets depend on build targets
> 
> Daniels Umanovskis (3):
>       doc: move git-rev-parse from porcelain to plumbing
>       doc: move git-get-tar-commit-id to plumbing
>       doc: move git-cherry to plumbing
> 
> David Zych (1):
>       doc: clarify gitcredentials path component matching
> 
> Denton Liu (3):
>       mergetool: accept -g/--[no-]gui as arguments
>       completion: support `git mergetool --[no-]gui`
>       doc: document diff/merge.guitool config keys
> 
> Derrick Stolee (93):
>       multi-pack-index: add design document
>       multi-pack-index: add format details
>       multi-pack-index: add builtin
>       multi-pack-index: add 'write' verb
>       midx: write header information to lockfile
>       multi-pack-index: load into memory
>       t5319: expand test data
>       packfile: generalize pack directory list
>       multi-pack-index: read packfile list
>       multi-pack-index: write pack names in chunk
>       midx: read pack names into array
>       midx: sort and deduplicate objects from packfiles
>       midx: write object ids in a chunk
>       midx: write object id fanout chunk
>       midx: write object offsets
>       config: create core.multiPackIndex setting
>       midx: read objects from multi-pack-index
>       midx: use midx in abbreviation calculations
>       midx: use existing midx when writing new one
>       midx: use midx in approximate_object_count
>       midx: prevent duplicate packfile loads
>       packfile: skip loading index if in multi-pack-index
>       midx: clear midx on repack
>       commit-reach: move walk methods from commit.c
>       commit.h: remove method declarations
>       commit-reach: move ref_newer from remote.c
>       commit-reach: move commit_contains from ref-filter
>       upload-pack: make reachable() more generic
>       upload-pack: refactor ok_to_give_up()
>       upload-pack: generalize commit date cutoff
>       commit-reach: move can_all_from_reach_with_flags
>       test-reach: create new test tool for ref_newer
>       test-reach: test in_merge_bases
>       test-reach: test is_descendant_of
>       test-reach: test get_merge_bases_many
>       test-reach: test reduce_heads
>       test-reach: test can_all_from_reach_with_flags
>       test-reach: test commit_contains
>       commit-reach: replace ref_newer logic
>       commit-reach: make can_all_from_reach... linear
>       commit-reach: use can_all_from_reach
>       multi-pack-index: provide more helpful usage info
>       multi-pack-index: store local property
>       midx: mark bad packed objects
>       midx: stop reporting garbage
>       midx: fix bug that skips midx with alternates
>       packfile: add all_packs list
>       treewide: use get_all_packs
>       midx: test a few commands that use get_all_packs
>       pack-objects: consider packs in multi-pack-index
>       commit-graph: update design document
>       test-repository: properly init repo
>       commit-graph: not compatible with replace objects
>       commit-graph: not compatible with grafts
>       commit-graph: not compatible with uninitialized repo
>       commit-graph: close_commit_graph before shallow walk
>       commit-graph: define GIT_TEST_COMMIT_GRAPH
>       t3206-range-diff.sh: cover single-patch case
>       t5318: use test_oid for HASH_LEN
>       multi-pack-index: add 'verify' verb
>       multi-pack-index: verify bad header
>       multi-pack-index: verify corrupt chunk lookup table
>       multi-pack-index: verify packname order
>       multi-pack-index: verify missing pack
>       multi-pack-index: verify oid fanout order
>       multi-pack-index: verify oid lookup order
>       multi-pack-index: fix 32-bit vs 64-bit size check
>       multi-pack-index: verify object offsets
>       multi-pack-index: report progress during 'verify'
>       fsck: verify multi-pack-index
>       commit-reach: properly peel tags
>       commit-reach: fix memory and flag leaks
>       commit-reach: cleanups in can_all_from_reach...
>       commit-graph: clean up leaked memory during write
>       commit-graph: reduce initial oid allocation
>       midx: fix broken free() in close_midx()
>       contrib: add coverage-diff script
>       ci: add optional test variables
>       commit-reach: fix first-parent heuristic
>       midx: close multi-pack-index on repack
>       multi-pack-index: define GIT_TEST_MULTI_PACK_INDEX
>       packfile: close multi-pack-index in close_all_packs
>       prio-queue: add 'peek' operation
>       test-reach: add run_three_modes method
>       test-reach: add rev-list tests
>       revision.c: begin refactoring --topo-order logic
>       commit/revisions: bookkeeping before refactoring
>       revision.c: generation-based topo-order algorithm
>       t6012: make rev-list tests more interesting
>       commit-reach: implement get_reachable_subset
>       test-reach: test get_reachable_subset
>       remote: make add_missing_tags() linear
>       pack-objects: ignore ambiguous object warnings
> 
> Elijah Newren (14):
>       Remove superfluous trailing semicolons
>       t4200: demonstrate rerere segfault on specially crafted merge
>       rerere: avoid buffer overrun
>       update-ref: fix type of update_flags variable to match its usage
>       update-ref: allow --no-deref with --stdin
>       sequencer: fix --allow-empty-message behavior, make it smarter
>       merge-recursive: set paths correctly when three-way merging content
>       merge-recursive: avoid wrapper function when unnecessary and wasteful
>       merge-recursive: remove final remaining caller of merge_file_one()
>       merge-recursive: rename merge_file_1() and merge_content()
>       commit: fix erroneous BUG, 'multiple renames on the same target? how?'
>       merge-recursive: improve auto-merging messages with path collisions
>       merge-recursive: avoid showing conflicts with merge branch before HEAD
>       fsck: move fsck_head_link() to get_default_heads() to avoid some globals
> 
> Eric Sunshine (26):
>       format-patch: allow additional generated content in make_cover_letter()
>       format-patch: add --interdiff option to embed diff in cover letter
>       format-patch: teach --interdiff to respect -v/--reroll-count
>       interdiff: teach show_interdiff() to indent interdiff
>       log-tree: show_log: make commentary block delimiting reusable
>       format-patch: allow --interdiff to apply to a lone-patch
>       range-diff: respect diff_option.file rather than assuming 'stdout'
>       range-diff: publish default creation factor
>       range-diff: relieve callers of low-level configuration burden
>       format-patch: add --range-diff option to embed diff in cover letter
>       format-patch: extend --range-diff to accept revision range
>       format-patch: teach --range-diff to respect -v/--reroll-count
>       format-patch: add --creation-factor tweak for --range-diff
>       format-patch: allow --range-diff to apply to a lone-patch
>       worktree: don't die() in library function find_worktree()
>       worktree: move delete_git_dir() earlier in file for upcoming new callers
>       worktree: generalize delete_git_dir() to reduce code duplication
>       worktree: prepare for more checks of whether path can become worktree
>       worktree: disallow adding same path multiple times
>       worktree: teach 'add' to respect --force for registered but missing path
>       worktree: teach 'move' to override lock when --force given twice
>       worktree: teach 'remove' to override lock when --force given twice
>       worktree: delete .git/worktrees if empty after 'remove'
>       doc-diff: fix non-portable 'man' invocation
>       doc-diff: add --clean mode to remove temporary working gunk
>       doc/Makefile: drop doc-diff worktree and temporary files on "make clean"
> 
> Frederick Eaton (3):
>       git-archimport.1: specify what kind of Arch we're talking about
>       git-column.1: clarify initial description, provide examples
>       git-describe.1: clarify that "human readable" is also git-readable
> 
> Greg Hurrell (1):
>       doc: update diff-format.txt for removed ellipses in --raw
> 
> James Knight (1):
>       build: link with curl-defined linker flags
> 
> Jann Horn (2):
>       patch-delta: fix oob read
>       patch-delta: consistently report corruption
> 
> Jean-Noël Avila (1):
>       i18n: fix small typos
> 
> Jeff Hostetler (2):
>       t0051: test GIT_TRACE to a windows named pipe
>       mingw: fix mingw_open_append to work with named pipes
> 
> Jeff King (98):
>       branch: make "-l" a synonym for "--list"
>       Add delta-islands.{c,h}
>       pack-objects: add delta-islands support
>       repack: add delta-islands support
>       t5320: tests for delta islands
>       t/perf: factor boilerplate out of test_perf
>       t/perf: factor out percent calculations
>       t/perf: add infrastructure for measuring sizes
>       t/perf: add perf tests for fetches from a bitmapped server
>       pack-bitmap: save "have" bitmap from walk
>       pack-objects: reuse on-disk deltas for thin "have" objects
>       SubmittingPatches: mention doc-diff
>       rev-list: make empty --stdin not an error
>       trailer: use size_t for string offsets
>       trailer: use size_t for iterating trailer list
>       trailer: pass process_trailer_opts to trailer_info_get()
>       interpret-trailers: tighten check for "---" patch boundary
>       interpret-trailers: allow suppressing "---" divider
>       pretty, ref-filter: format %(trailers) with no_divider option
>       sequencer: ignore "---" divider when parsing trailers
>       append_signoff: use size_t for string offsets
>       coccinelle: use <...> for function exclusion
>       introduce hasheq() and oideq()
>       convert "oidcmp() == 0" to oideq()
>       convert "hashcmp() == 0" to hasheq()
>       convert "oidcmp() != 0" to "!oideq()"
>       convert "hashcmp() != 0" to "!hasheq()"
>       convert hashmap comparison functions to oideq()
>       read-cache: use oideq() in ce_compare functions
>       show_dirstat: simplify same-content check
>       doc-diff: always use oids inside worktree
>       test-delta: read input into a heap buffer
>       t5303: test some corrupt deltas
>       patch-delta: handle truncated copy parameters
>       t5303: use printf to generate delta bases
>       doc/git-branch: remove obsolete "-l" references
>       bitmap_has_sha1_in_uninteresting(): drop BUG check
>       t5310: test delta reuse with bitmaps
>       traverse_bitmap_commit_list(): don't free result
>       pack-bitmap: drop "loaded" flag
>       reopen_tempfile(): truncate opened file
>       doc-diff: force worktree add
>       config.mak.dev: add -Wformat-security
>       pack-objects: handle island check for "external" delta base
>       receive-pack: update comment with check_everything_connected
>       submodule--helper: use "--" to signal end of clone options
>       submodule-config: ban submodule urls that start with dash
>       submodule-config: ban submodule paths that start with a dash
>       fsck: detect submodule urls starting with dash
>       fsck: detect submodule paths starting with dash
>       more oideq/hasheq conversions
>       transport: drop refnames from for_each_alternate_ref
>       test-tool: show tool list on error
>       config.mak.dev: enable -Wunused-function
>       run-command: mark path lookup errors with ENOENT
>       t5410: use longer path for sample script
>       upload-pack: fix broken if/else chain in config callback
>       t1450: check large blob in trailing-garbage test
>       check_stream_sha1(): handle input underflow
>       cat-file: handle streaming failures consistently
>       ls-remote: do not send ref prefixes for patterns
>       ls-remote: pass heads/tags prefixes to transport
>       read_istream_pack_non_delta(): document input handling
>       xdiff: provide a separate emit callback for hunks
>       xdiff-interface: provide a separate consume callback for hunks
>       rev-list: handle flags for --indexed-objects
>       approxidate: handle pending number for "specials"
>       pathspec: handle non-terminated strings with :(attr)
>       diff: avoid generating unused hunk header lines
>       diff: discard hunk headers for patch-ids earlier
>       diff: use hunk callback for word-diff
>       combine-diff: use an xdiff hunk callback
>       diff: convert --check to use a hunk callback
>       range-diff: use a hunk callback
>       xdiff-interface: drop parse_hunk_header()
>       apply: mark include/exclude options as NONEG
>       am: handle --no-patch-format option
>       ls-files: mark exclude options as NONEG
>       pack-objects: mark index-version option as NONEG
>       cat-file: mark batch options with NONEG
>       status: mark --find-renames option with NONEG
>       format-patch: mark "--no-numbered" option with NONEG
>       show-branch: mark --reflog option as NONEG
>       tag: mark "--message" option with NONEG
>       cat-file: report an error on multiple --batch options
>       apply: return -1 from option callback instead of calling exit(1)
>       parse-options: drop OPT_DATE()
>       assert NOARG/NONEG behavior of parse-options callbacks
>       midx: double-check large object write loop
>       merge: extract verify_merge_signature() helper
>       merge: handle --verify-signatures for unborn branch
>       pull: handle --verify-signatures for unborn branch
>       approxidate: fix NULL dereference in date_time()
>       bundle: dup() output descriptor closer to point-of-use
>       pack-objects: fix tree_depth and layer invariants
>       pack-objects: zero-initialize tree_depth/layer arrays
>       pack-objects: fix off-by-one in delta-island tree-depth computation
>       t5562: fix perl path
> 
> Johannes Schindelin (64):
>       rebase -i --autosquash: demonstrate a problem skipping the last squash
>       rebase -i: be careful to wrap up fixup/squash chains
>       compat/poll: prepare for targeting Windows Vista
>       mingw: set _WIN32_WINNT explicitly for Git for Windows
>       mingw: bump the minimum Windows version to Vista
>       builtin rebase: prepare for builtin rebase -i
>       rebase -i: clarify what happens on a failed `exec`
>       rebase -i: introduce the 'break' command
>       getpwuid(mingw): initialize the structure only once
>       getpwuid(mingw): provide a better default for the user name
>       mingw: use domain information for default email
>       http: add support for selecting SSL backends at runtime
>       pack-objects: fix typo 'detla' -> 'delta'
>       pack-objects (mingw): demonstrate a segmentation fault with large deltas
>       pack-objects (mingw): initialize `packing_data` mutex in the correct spot
>       rebase (autostash): avoid duplicate call to state_dir_path()
>       rebase (autostash): store the full OID in <state-dir>/autostash
>       rebase (autostash): use an explicit OID to apply the stash
>       mingw: factor out code to set stat() data
>       rebase --autostash: demonstrate a problem with dirty submodules
>       rebase --autostash: fix issue with dirty submodules
>       mingw: load system libraries the recommended way
>       mingw: ensure `getcwd()` reports the correct case
>       repack: point out a bug handling stale shallow info
>       shallow: offer to prune only non-existing entries
>       repack -ad: prune the list of shallow commits
>       http: when using Secure Channel, ignore sslCAInfo by default
>       t7800: fix quoting
>       mingw: reencode environment variables on the fly (UTF-16 <-> UTF-8)
>       config: rename `dummy` parameter to `cb` in git_default_config()
>       config: allow for platform-specific core.* config settings
>       config: move Windows-specific config settings into compat/mingw.c
>       mingw: unset PERL5LIB by default
>       mingw: fix isatty() after dup2()
>       t3404: decouple some test cases from outcomes of previous test cases
>       t3418: decouple test cases from a previous `rebase -p` test case
>       tests: optionally skip `git rebase -p` tests
>       Windows: force-recompile git.res for differing architectures
>       built-in rebase: demonstrate regression with --autostash
>       built-in rebase --autostash: leave the current branch alone if possible
>       Update .mailmap
>       rebase -r: demonstrate bug with conflicting merges
>       rebase -r: do not write MERGE_HEAD unless needed
>       rebase -i: include MERGE_HEAD into files to clean up
>       built-in rebase --skip/--abort: clean up stale .git/<name> files
>       status: rebase and merge can be in progress at the same time
>       apply --recount: allow "no-op hunks"
>       rebase: consolidate clean-up code before leaving reset_head()
>       rebase: prepare reset_head() for more flags
>       built-in rebase: reinstate `checkout -q` behavior where appropriate
>       tests: fix GIT_TEST_INSTALLED's PATH to include t/helper/
>       tests: respect GIT_TEST_INSTALLED when initializing repositories
>       t/lib-gettext: test installed git-sh-i18n if GIT_TEST_INSTALLED is set
>       mingw: use `CreateHardLink()` directly
>       rebase: really just passthru the `git am` options
>       rebase: validate -C<n> and --whitespace=<mode> parameters early
>       config: report a bug if git_dir exists without commondir
>       tests: do not require Git to be built when testing an installed Git
>       tests: explicitly use `git.exe` on Windows
>       mingw: replace an obsolete link with the superseding one
>       legacy-rebase: backport -C<n> and --whitespace=<option> checks
>       rebase: warn about the correct tree's OID
>       rebase: fix GIT_REFLOG_ACTION regression
>       rebase --stat: fix when rebasing to an unrelated history
> 
> Johannes Sixt (3):
>       diff: don't attempt to strip prefix from absolute Windows paths
>       rebase -i: recognize short commands without arguments
>       t3404-rebase-interactive: test abbreviated commands
> 
> Jonathan Nieder (9):
>       gc: improve handling of errors reading gc.log
>       gc: exit with status 128 on failure
>       gc: do not return error for prior errors in daemonized mode
>       commit-reach: correct accidental #include of C file
>       mailmap: consistently normalize brian m. carlson's name
>       git doc: direct bug reporters to mailing list archive
>       eoie: default to not writing EOIE section
>       ieot: default to not writing IEOT section
>       index: make index.threads=true enable ieot and eoie
> 
> Jonathan Tan (15):
>       fetch-object: unify fetch_object[s] functions
>       fetch-object: set exact_oid when fetching
>       connected: document connectivity in partial clones
>       fetch: in partial clone, check presence of targets
>       fetch-pack: avoid object flags if no_dependents
>       fetch-pack: exclude blobs when lazy-fetching trees
>       transport: allow skipping of ref listing
>       transport: do not list refs if possible
>       transport: list refs before fetch if necessary
>       fetch: do not list refs if fetching only hashes
>       cache-tree: skip some blob checks in partial clone
>       upload-pack: make have_obj not global
>       upload-pack: make want_obj not global
>       upload-pack: clear flags before each v2 request
>       fetch-pack: be more precise in parsing v2 response
> 
> Josh Steadmon (4):
>       fuzz: add basic fuzz testing target.
>       fuzz: add fuzz testing for packfile indices.
>       archive: initialize archivers earlier
>       Makefile: use FUZZ_CXXFLAGS for linking fuzzers
> 
> Joshua Watt (1):
>       send-email: explicitly disable authentication
> 
> Junio C Hamano (36):
>       Revert "doc/Makefile: drop doc-diff worktree and temporary files on "make clean""
>       Initial batch post 2.19
>       Second batch post 2.19
>       Git 2.14.5
>       Git 2.15.3
>       Git 2.16.5
>       Git 2.17.2
>       Git 2.18.1
>       Git 2.19.1
>       t0000: do not get self-test disrupted by environment warnings
>       CodingGuidelines: document the API in *.h files
>       Declare that the next one will be named 2.20
>       Third batch for 2.20
>       rebase: fix typoes in error messages
>       Fourth batch for 2.20
>       Revert "subtree: make install targets depend on build targets"
>       Fifth batch for 2.20
>       receive: denyCurrentBranch=updateinstead should not blindly update
>       cocci: simplify "if (++u > 1)" to "if (u++)"
>       fsck: s/++i > 1/i++/
>       http: give curl version warnings consistently
>       Sixth batch for 2.20
>       Seventh batch for 2.20
>       fetch: replace string-list used as a look-up table with a hashmap
>       rebase: apply cocci patch
>       Eighth batch for 2.20
>       Ninth batch for 2.20
>       Makefile: ease dynamic-gettext-poison transition
>       Tenth batch for 2.20
>       Git 2.20-rc0
>       RelNotes: name the release properly
>       Prepare for 2.20-rc1
>       Git 2.19.2
>       Git 2.20-rc1
>       format-patch: do not let its diff-options affect --range-diff
>       Git 2.20-rc2
> 
> Karsten Blees (2):
>       mingw: replace MSVCRT's fstat() with a Win32-based implementation
>       mingw: implement nanosecond-precision file times
> 
> Loo Rong Jie (1):
>       win32: replace pthread_cond_*() with much simpler code
> 
> Lucas De Marchi (1):
>       range-diff: allow to diff files regardless of submodule config
> 
> Luke Diamand (3):
>       git-p4: do not fail in verbose mode for missing 'fileSize' key
>       git-p4: unshelve into refs/remotes/p4-unshelved, not refs/remotes/p4/unshelved
>       git-p4: fully support unshelving changelists
> 
> Martin Ågren (11):
>       Doc: use `--type=bool` instead of `--bool`
>       git-config.txt: fix 'see: above' note
>       git-commit-graph.txt: fix bullet lists
>       git-commit-graph.txt: typeset more in monospace
>       git-commit-graph.txt: refer to "*commit*-graph file"
>       Doc: refer to the "commit-graph file" with dash
>       t1400: drop debug `echo` to actually execute `test`
>       builtin/commit-graph.c: UNLEAK variables
>       sequencer: break out of loop explicitly
>       git-reset.txt: render tables correctly under Asciidoctor
>       git-reset.txt: render literal examples as monospace
> 
> Matthew DeVore (19):
>       list-objects: store common func args in struct
>       list-objects: refactor to process_tree_contents
>       list-objects: always parse trees gently
>       t/README: reformat Do, Don't, Keep in mind lists
>       Documentation: add shell guidelines
>       tests: standardize pipe placement
>       t/*: fix ordering of expected/observed arguments
>       tests: don't swallow Git errors upstream of pipes
>       t9109: don't swallow Git errors upstream of pipes
>       tests: order arguments to git-rev-list properly
>       rev-list: handle missing tree objects properly
>       revision: mark non-user-given objects instead
>       list-objects-filter: use BUG rather than die
>       list-objects-filter-options: do not over-strbuf_init
>       list-objects-filter: implement filter tree:0
>       filter-trees: code clean-up of tests
>       list-objects: support for skipping tree traversal
>       Documentation/git-log.txt: do not show --exclude-promisor-objects
>       exclude-promisor-objects: declare when option is allowed
> 
> Max Kirillov (1):
>       http-backend test: make empty CONTENT_LENGTH test more realistic
> 
> Michael Witten (3):
>       docs: typo: s/go/to/
>       docs: graph: remove unnecessary `graph_update()' call
>       docs: typo: s/isimilar/similar/
> 
> Michał Górny (6):
>       gpg-interface.c: detect and reject multiple signatures on commits
>       gpg-interface.c: use flags to determine key/signer info presence
>       gpg-interface.c: support getting key fingerprint via %GF format
>       gpg-interface.c: obtain primary key fingerprint as well
>       t/t7510-signed-commit.sh: Add %GP to custom format checks
>       t/t7510-signed-commit.sh: add signing subkey to Eris Discordia key
> 
> Mihir Mehta (1):
>       doc: fix a typo and clarify a sentence
> 
> Nguyễn Thái Ngọc Duy (170):
>       clone: report duplicate entries on case-insensitive filesystems
>       trace.h: support nested performance tracing
>       unpack-trees: add performance tracing
>       unpack-trees: optimize walking same trees with cache-tree
>       unpack-trees: reduce malloc in cache-tree walk
>       unpack-trees: reuse (still valid) cache-tree from src_index
>       unpack-trees: add missing cache invalidation
>       cache-tree: verify valid cache-tree in the test suite
>       Document update for nd/unpack-trees-with-cache-tree
>       bisect.c: make show_list() build again
>       t/helper: keep test-tool command list sorted
>       t/helper: merge test-dump-untracked-cache into test-tool
>       t/helper: merge test-pkt-line into test-tool
>       t/helper: merge test-parse-options into test-tool
>       t/helper: merge test-dump-fsmonitor into test-tool
>       Makefile: add a hint about TEST_BUILTINS_OBJS
>       config.txt: follow camelCase naming
>       config.txt: move fetch part out to a separate file
>       config.txt: move format part out to a separate file
>       config.txt: move gitcvs part out to a separate file
>       config.txt: move gui part out to a separate file
>       config.txt: move pull part out to a separate file
>       config.txt: move push part out to a separate file
>       config.txt: move receive part out to a separate file
>       config.txt: move sendemail part out to a separate file
>       config.txt: move sequence.editor out of "core" part
>       config.txt: move submodule part out to a separate file
>       archive.c: remove implicit dependency the_repository
>       status: show progress bar if refreshing the index takes too long
>       add: do not accept pathspec magic 'attr'
>       completion: support "git fetch --multiple"
>       read-cache.c: remove 'const' from index_has_changes()
>       diff.c: reduce implicit dependency on the_index
>       combine-diff.c: remove implicit dependency on the_index
>       blame.c: rename "repo" argument to "r"
>       diff.c: remove the_index dependency in textconv() functions
>       grep.c: remove implicit dependency on the_index
>       diff.c: remove implicit dependency on the_index
>       read-cache.c: remove implicit dependency on the_index
>       diff-lib.c: remove implicit dependency on the_index
>       ll-merge.c: remove implicit dependency on the_index
>       merge-blobs.c: remove implicit dependency on the_index
>       merge.c: remove implicit dependency on the_index
>       patch-ids.c: remove implicit dependency on the_index
>       sha1-file.c: remove implicit dependency on the_index
>       rerere.c: remove implicit dependency on the_index
>       userdiff.c: remove implicit dependency on the_index
>       line-range.c: remove implicit dependency on the_index
>       submodule.c: remove implicit dependency on the_index
>       tree-diff.c: remove implicit dependency on the_index
>       ws.c: remove implicit dependency on the_index
>       revision.c: remove implicit dependency on the_index
>       revision.c: reduce implicit dependency the_repository
>       read-cache.c: optimize reading index format v4
>       config.txt: correct the note about uploadpack.packObjectsHook
>       help -a: improve and make --verbose default
>       refs.c: indent with tabs, not spaces
>       Add a place for (not) sharing stuff between worktrees
>       submodule.c: remove some of the_repository references
>       completion: fix __gitcomp_builtin no longer consider extra options
>       t1300: extract and use test_cmp_config()
>       worktree: add per-worktree config files
>       refs: new ref types to make per-worktree refs visible to all worktrees
>       revision.c: correct a parameter name
>       revision.c: better error reporting on ref from different worktrees
>       fsck: check HEAD and reflog from other worktrees
>       reflog expire: cover reflog from all worktrees
>       Update makefile in preparation for Documentation/config/*.txt
>       config.txt: move advice.* to a separate file
>       config.txt: move core.* to a separate file
>       config.txt: move add.* to a separate file
>       config.txt: move alias.* to a separate file
>       config.txt: move am.* to a separate file
>       config.txt: move apply.* to a separate file
>       config.txt: move blame.* to a separate file
>       config.txt: move branch.* to a separate file
>       config.txt: move browser.* to a separate file
>       config.txt: move checkout.* to a separate file
>       config.txt: move clean.* to a separate file
>       config.txt: move color.* to a separate file
>       config.txt: move column.* to a separate file
>       config.txt: move commit.* to a separate file
>       config.txt: move credential.* to a separate file
>       config.txt: move completion.* to a separate file
>       config.txt: move diff-config.txt to config/
>       config.txt: move difftool.* to a separate file
>       config.txt: move fastimport.* to a separate file
>       config.txt: move fetch-config.txt to config/
>       config.txt: move filter.* to a separate file
>       config.txt: move format-config.txt to config/
>       config.txt: move fmt-merge-msg-config.txt to config/
>       config.txt: move fsck.* to a separate file
>       config.txt: move gc.* to a separate file
>       config.txt: move gitcvs-config.txt to config/
>       config.txt: move gitweb.* to a separate file
>       config.txt: move grep.* to a separate file
>       config.txt: move gpg.* to a separate file
>       config.txt: move gui-config.txt to config/
>       config.txt: move guitool.* to a separate file
>       config.txt: move help.* to a separate file
>       config.txt: move ssh.* to a separate file
>       config.txt: move http.* to a separate file
>       config.txt: move i18n.* to a separate file
>       git-imap-send.txt: move imap.* to a separate file
>       config.txt: move index.* to a separate file
>       config.txt: move init.* to a separate file
>       config.txt: move instaweb.* to a separate file
>       config.txt: move interactive.* to a separate file
>       config.txt: move log.* to a separate file
>       config.txt: move mailinfo.* to a separate file
>       config.txt: move mailmap.* to a separate file
>       config.txt: move man.* to a separate file
>       config.txt: move merge-config.txt to config/
>       config.txt: move mergetool.* to a separate file
>       config.txt: move notes.* to a separate file
>       config.txt: move pack.* to a separate file
>       config.txt: move pager.* to a separate file
>       config.txt: move pretty.* to a separate file
>       config.txt: move protocol.* to a separate file
>       config.txt: move pull-config.txt to config/
>       config.txt: move push-config.txt to config/
>       config.txt: move rebase-config.txt to config/
>       config.txt: move receive-config.txt to config/
>       config.txt: move remote.* to a separate file
>       config.txt: move remotes.* to a separate file
>       config.txt: move repack.* to a separate file
>       config.txt: move rerere.* to a separate file
>       config.txt: move reset.* to a separate file
>       config.txt: move sendemail-config.txt to config/
>       config.txt: move sequencer.* to a separate file
>       config.txt: move showBranch.* to a separate file
>       config.txt: move splitIndex.* to a separate file
>       config.txt: move status.* to a separate file
>       config.txt: move stash.* to a separate file
>       config.txt: move submodule.* to a separate file
>       config.txt: move tag.* to a separate file
>       config.txt: move transfer.* to a separate file
>       config.txt: move uploadarchive.* to a separate file
>       config.txt: move uploadpack.* to a separate file
>       config.txt: move url.* to a separate file
>       config.txt: move user.* to a separate file
>       config.txt: move versionsort.* to a separate file
>       config.txt: move web.* to a separate file
>       config.txt: move worktree.* to a separate file
>       config.txt: remove config/dummy.txt
>       thread-utils: macros to unconditionally compile pthreads API
>       wildmatch: change behavior of "foo**bar" in WM_PATHNAME mode
>       git-worktree.txt: correct linkgit command name
>       sequencer.c: remove a stray semicolon
>       tree-walk.c: fix overoptimistic inclusion in :(exclude) matching
>       run-command.h: include thread-utils.h instead of pthread.h
>       send-pack.c: move async's #ifdef NO_PTHREADS back to run-command.c
>       index-pack: remove #ifdef NO_PTHREADS
>       name-hash.c: remove #ifdef NO_PTHREADS
>       attr.c: remove #ifdef NO_PTHREADS
>       grep: remove #ifdef NO_PTHREADS
>       grep: clean up num_threads handling
>       preload-index.c: remove #ifdef NO_PTHREADS
>       pack-objects: remove #ifdef NO_PTHREADS
>       read-cache.c: remove #ifdef NO_PTHREADS
>       read-cache.c: reduce branching based on HAVE_THREADS
>       read-cache.c: initialize copy_len to shut up gcc 8
>       Clean up pthread_create() error handling
>       completion: use __gitcomp_builtin for format-patch
>       build: fix broken command-list.h generation with core.autocrlf
>       format-patch: respect --stat in cover letter's diffstat
>       doc: move extensions.worktreeConfig to the right place
>       clone: fix colliding file detection on APFS
>       files-backend.c: fix build error on Solaris
>       transport-helper.c: do not translate a string twice
> 
> Nickolai Belakovski (2):
>       worktree: update documentation for lock_reason and lock_reason_valid
>       worktree: rename is_worktree_locked to worktree_lock_reason
> 
> Noam Postavsky (1):
>       log: fix coloring of certain octopus merge shapes
> 
> Olga Telezhnaya (3):
>       ref-filter: free memory from used_atom
>       ls-remote: release memory instead of UNLEAK
>       ref-filter: free item->value and item->value->s
> 
> Phillip Wood (11):
>       diff: fix --color-moved-ws=allow-indentation-change
>       diff --color-moved-ws: fix double free crash
>       diff --color-moved-ws: fix out of bounds string access
>       diff --color-moved-ws: fix a memory leak
>       diff --color-moved-ws: fix another memory leak
>       diff --color-moved: fix a memory leak
>       am: don't die in read_author_script()
>       am: improve author-script error reporting
>       am: rename read_author_script()
>       add read_author_script() to libgit
>       sequencer: use read_author_script()
> 
> Pratik Karki (46):
>       rebase: start implementing it as a builtin
>       rebase: refactor common shell functions into their own file
>       builtin/rebase: support running "git rebase <upstream>"
>       builtin rebase: support --onto
>       builtin rebase: support `git rebase --onto A...B`
>       builtin rebase: handle the pre-rebase hook and --no-verify
>       builtin rebase: support --quiet
>       builtin rebase: support the `verbose` and `diffstat` options
>       builtin rebase: require a clean worktree
>       builtin rebase: try to fast forward when possible
>       builtin rebase: support --force-rebase
>       builtin rebase: start a new rebase only if none is in progress
>       builtin rebase: only store fully-qualified refs in `options.head_name`
>       builtin rebase: support `git rebase <upstream> <switch-to>`
>       builtin rebase: support --continue
>       builtin rebase: support --skip
>       builtin rebase: support --abort
>       builtin rebase: support --quit
>       builtin rebase: support --edit-todo and --show-current-patch
>       builtin rebase: actions require a rebase in progress
>       builtin rebase: stop if `git am` is in progress
>       builtin rebase: allow selecting the rebase "backend"
>       builtin rebase: support --signoff
>       builtin rebase: support --rerere-autoupdate
>       builtin rebase: support --committer-date-is-author-date
>       builtin rebase: support `ignore-whitespace` option
>       builtin rebase: support `ignore-date` option
>       builtin rebase: support `keep-empty` option
>       builtin rebase: support `--autosquash`
>       builtin rebase: support `--gpg-sign` option
>       builtin rebase: support `-C` and `--whitespace=<type>`
>       builtin rebase: support `--autostash` option
>       builtin rebase: support `--exec`
>       builtin rebase: support `--allow-empty-message` option
>       builtin rebase: support --rebase-merges[=[no-]rebase-cousins]
>       merge-base --fork-point: extract libified function
>       builtin rebase: support `fork-point` option
>       builtin rebase: add support for custom merge strategies
>       builtin rebase: support --root
>       builtin rebase: optionally auto-detect the upstream
>       builtin rebase: optionally pass custom reflogs to reset_head()
>       builtin rebase: fast-forward to onto if it is a proper descendant
>       builtin rebase: show progress when connected to a terminal
>       builtin rebase: use no-op editor when interactive is "implied"
>       builtin rebase: error out on incompatible option/mode combinations
>       rebase: default to using the builtin rebase
> 
> Rafael Ascensão (2):
>       refs: show --exclude failure with --branches/tags/remotes=glob
>       refs: fix some exclude patterns being ignored
> 
> Ralf Thielow (2):
>       git-rebase.sh: fix typos in error messages
>       builtin/rebase.c: remove superfluous space in messages
> 
> Ramsay Jones (12):
>       Makefile: add a hdr-check target
>       json-writer.h: add missing include (hdr-check)
>       ewah/ewok_rlw.h: add missing include (hdr-check)
>       refs/ref-cache.h: add missing declarations (hdr-check)
>       refs/packed-backend.h: add missing declaration (hdr-check)
>       refs/refs-internal.h: add missing declarations (hdr-check)
>       midx.h: add missing forward declarations (hdr-check)
>       delta-islands.h: add missing forward declarations (hdr-check)
>       headers: normalize the spelling of some header guards
>       fetch-object.h: add missing declaration (hdr-check)
>       ewok_rlw.h: add missing 'inline' to function definition
>       commit-reach.h: add missing declarations (hdr-check)
> 
> Rasmus Villemoes (6):
>       help: redirect to aliased commands for "git cmd --help"
>       git.c: handle_alias: prepend alias info when first argument is -h
>       git-help.txt: document "git help cmd" vs "git cmd --help" for aliases
>       Documentation/git-send-email.txt: style fixes
>       send-email: only consider lines containing @ or <> for automatic Cc'ing
>       send-email: also pick up cc addresses from -by trailers
> 
> René Scharfe (12):
>       mailinfo: support format=flowed
>       fsck: add a performance test for skipList
>       fsck: use strbuf_getline() to read skiplist file
>       fsck: use oidset instead of oid_array for skipList
>       sequencer: use return value of oidset_insert()
>       grep: add -r/--[no-]recursive
>       fetch-pack: factor out is_unmatched_ref()
>       fetch-pack: load tip_oids eagerly iff needed
>       khash: factor out kh_release_*
>       oidset: use khash
>       oidset: uninline oidset_init()
>       commit-reach: fix cast in compare_commits_by_gen()
> 
> Roger Strain (1):
>       subtree: performance improvement for finding unexpected parent commits
> 
> SZEDER Gábor (20):
>       t1404: increase core.packedRefsTimeout to avoid occasional test failure
>       Documentation/git.txt: clarify that GIT_TRACE=/path appends
>       t3701-add-interactive: tighten the check of trace output
>       t1700-split-index: drop unnecessary 'grep'
>       t0090: disable GIT_TEST_SPLIT_INDEX for the test checking split index
>       t1700-split-index: document why FSMONITOR is disabled in this test script
>       split-index: add tests to demonstrate the racy split index problem
>       t1700-split-index: date back files to avoid racy situations
>       split-index: count the number of deleted entries
>       split-index: don't compare cached data of entries already marked for split index
>       split-index: smudge and add racily clean cache entries to split index
>       split-index: BUG() when cache entry refers to non-existing shared entry
>       object_id.cocci: match only expressions of type 'struct object_id'
>       test-lib: introduce the '-V' short option for '--verbose-log'
>       travis-ci: install packages in 'ci/install-dependencies.sh'
>       coccicheck: introduce 'pending' semantic patches
>       ref-filter: don't look for objects when outside of a repository
>       tests: send "bug in the test script" errors to the script's stderr
>       test-lib-functions: make 'test_cmp_rev' more informative on failure
>       t/lib-git-daemon: fix signal checking
> 
> Sam McKelvie (1):
>       rev-parse: --show-superproject-working-tree should work during a merge
> 
> Saulius Gurklys (1):
>       doc: fix small typo in git show-branch
> 
> Sebastian Staudt (1):
>       travis-ci: no longer use containers
> 
> Shulhan (1):
>       builtin/remote: quote remote name on error to display empty name
> 
> Stefan Beller (25):
>       git-submodule.sh: align error reporting for update mode to use path
>       git-submodule.sh: rename unused variables
>       builtin/submodule--helper: factor out submodule updating
>       builtin/submodule--helper: store update_clone information in a struct
>       builtin/submodule--helper: factor out method to update a single submodule
>       submodule--helper: replace connect-gitdir-workingtree by ensure-core-worktree
>       submodule--helper: introduce new update-module-mode helper
>       test_decode_color: understand FAINT and ITALIC
>       t3206: add color test for range-diff --dual-color
>       diff.c: simplify caller of emit_line_0
>       diff.c: reorder arguments for emit_line_ws_markup
>       diff.c: add set_sign to emit_line_0
>       diff: use emit_line_0 once per line
>       diff.c: omit check for line prefix in emit_line_0
>       diff.c: rewrite emit_line_0 more understandably
>       diff.c: add --output-indicator-{new, old, context}
>       range-diff: make use of different output indicators
>       range-diff: indent special lines as context
>       refs.c: migrate internal ref iteration to pass thru repository argument
>       refs.c: upgrade for_each_replace_ref to be a each_repo_ref_fn callback
>       string-list: remove unused function print_string_list
>       strbuf.h: format according to coding guidelines
>       diff.c: pass sign_index to emit_line_ws_markup
>       submodule helper: convert relative URL to absolute URL if needed
>       builtin/submodule--helper: remove debugging leftover tracing
> 
> Stephen P. Smith (10):
>       wt-status.c: move has_unmerged earlier in the file
>       wt-status: rename commitable to committable
>       t7501: add test of "commit --dry-run --short"
>       wt-status.c: set the committable flag in the collect phase
>       roll wt_status_state into wt_status and populate in the collect phase
>       t2000: rename and combine checkout clash tests
>       t7509: cleanup description and filename
>       t7502: rename commit test script to comply with naming convention
>       t7500: rename commit tests script to comply with naming convention
>       t7501: rename commit test to comply with naming convention
> 
> Steve Hoelzer (1):
>       poll: use GetTickCount64() to avoid wrap-around issues
> 
> Steven Fernandez (1):
>       git-completion.bash: add completion for stash list
> 
> Strain, Roger L (4):
>       subtree: refactor split of a commit into standalone method
>       subtree: make --ignore-joins pay attention to adds
>       subtree: use commits before rejoins for splits
>       subtree: improve decision on merges kept in split
> 
> Sven Strickroth (1):
>       msvc: directly use MS version (_stricmp) of strcasecmp
> 
> Tao Qingyun (3):
>       refs: docstring typo
>       builtin/branch.c: remove useless branch_get
>       branch: trivial style fix
> 
> Taylor Blau (4):
>       transport.c: extract 'fill_alternate_refs_command'
>       transport.c: introduce core.alternateRefsCommand
>       transport.c: introduce core.alternateRefsPrefixes
>       Documentation/config.txt: fix typo in core.alternateRefsCommand
> 
> Thomas Gummerer (17):
>       rerere: unify error messages when read_cache fails
>       rerere: lowercase error messages
>       rerere: wrap paths in output in sq
>       rerere: mark strings for translation
>       rerere: add documentation for conflict normalization
>       rerere: fix crash with files rerere can't handle
>       rerere: only return whether a path has conflicts or not
>       rerere: factor out handle_conflict function
>       rerere: return strbuf from handle path
>       rerere: teach rerere to handle nested conflicts
>       rerere: recalculate conflict ID when unresolved conflict is committed
>       rerere: mention caveat about unmatched conflict markers
>       rerere: add note about files with existing conflict markers
>       .gitattributes: add conflict-marker-size for relevant files
>       linear-assignment: fix potential out of bounds memory access
>       t5551: move setup code inside test_expect blocks
>       t5551: compare sorted cookies files
> 
> Tim Schumacher (4):
>       Documentation/Makefile: make manpage-base-url.xsl generation quieter
>       alias: add support for aliases of an alias
>       alias: show the call history when an alias is looping
>       t0014: introduce an alias testing suite
> 
> Todd Zullinger (1):
>       Documentation: build technical/multi-pack-index
> 
> Torsten Bögershausen (5):
>       Make git_check_attr() a void function
>       path.c: char is not (always) signed
>       Upcast size_t variables to uintmax_t when printing
>       remote-curl.c: xcurl_off_t is not portable (on 32 bit platfoms)
>       t5601-99: Enable colliding file detection for MINGW
> 
> Uwe Kleine-König (1):
>       howto/using-merge-subtree: mention --allow-unrelated-histories
> 
> brian m. carlson (26):
>       t: add test functions to translate hash-related values
>       t0000: use hash translation table
>       t0000: update tests for SHA-256
>       t0002: abstract away SHA-1 specific constants
>       t0064: make hash size independent
>       t1006: make hash size independent
>       t1400: switch hard-coded object ID to variable
>       t1405: make hash size independent
>       t1406: make hash-size independent
>       t1407: make hash size independent
>       editorconfig: provide editor settings for Git developers
>       editorconfig: indicate settings should be kept in sync
>       pack-bitmap-write: use GIT_MAX_RAWSZ for allocation
>       builtin/repack: replace hard-coded constants
>       builtin/mktree: remove hard-coded constant
>       builtin/fetch-pack: remove constants with parse_oid_hex
>       pack-revindex: express constants in terms of the_hash_algo
>       packfile: express constants in terms of the_hash_algo
>       refs/packed-backend: express constants using the_hash_algo
>       upload-pack: express constants in terms of the_hash_algo
>       transport: use parse_oid_hex instead of a constant
>       tag: express constant in terms of the_hash_algo
>       apply: replace hard-coded constants
>       apply: rename new_sha1_prefix and old_sha1_prefix
>       submodule: make zero-oid comparison hash function agnostic
>       rerere: convert to use the_hash_algo
> 
> Ævar Arnfjörð Bjarmason (35):
>       fetch: change "branch" to "reference" in --force -h output
>       push tests: make use of unused $1 in test description
>       push tests: use spaces in interpolated string
>       fetch tests: add a test for clobbering tag behavior
>       push doc: remove confusing mention of remote merger
>       push doc: move mention of "tag <tag>" later in the prose
>       push doc: correct lies about how push refspecs work
>       fetch: document local ref updates with/without --force
>       fetch: stop clobbering existing tags without --force
>       fsck tests: setup of bogus commit object
>       fsck tests: add a test for no skipList input
>       fsck: document and test sorted skipList input
>       fsck: document and test commented & empty line skipList input
>       fsck: document that skipList input must be unabbreviated
>       fsck: add a performance test
>       fsck: support comments & empty lines in skipList
>       commit-graph write: add progress output
>       commit-graph verify: add progress output
>       config doc: add missing list separator for checkout.optimizeNewBranch
>       push doc: add spacing between two words
>       fetch doc: correct grammar in --force docs
>       gc: fix regression in 7b0f229222 impacting --quiet
>       gc doc: mention the commit-graph in the intro
>       pack-objects test: modernize style
>       pack-objects tests: don't leave test .git corrupt at end
>       index-pack tests: don't leave test repo dirty at end
>       i18n: make GETTEXT_POISON a runtime option
>       range-diff doc: add a section about output stability
>       range-diff: fix regression in passing along diff options
>       range-diff: make diff option behavior (e.g. --stat) consistent
>       push: change needlessly ambiguous example in error
>       rebase doc: document rebase.useBuiltin
>       tests: add a special setup where rebase.useBuiltin is off
>       read-cache: make the split index obey umask settings
>       advice: don't pointlessly suggest --convert-graft-file
> 
> Đoàn Trần Công Danh (1):
>       git-compat-util: prefer poll.h to sys/poll.h
> 
> -- 
> You received this message because you are subscribed to the Google Groups "git-packagers" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to git-packagers+unsubscribe@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/git-packagers/xmqq36rhjnts.fsf%40gitster-ct.c.googlers.com.
> For more options, visit https://groups.google.com/d/optout.
> 

^ permalink raw reply	[relevance 0%]

* [ANNOUNCE] Git v2.20.0-rc2
@ 2018-12-01 14:58  2% Junio C Hamano
  2018-12-03 20:45  0% ` Johannes Schindelin
  0 siblings, 1 reply; 162+ results
From: Junio C Hamano @ 2018-12-01 14:58 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.20.0-rc2 is now available for testing
at the usual places.  It is comprised of 934 non-merge commits
since v2.19.0, contributed by 76 people, 25 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.20.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.19.0 are as follows.
Welcome to the Git development community!

  Aaron Lindsay, Alexander Pyhalov, Anton Serbulov, Brendan
  Forster, Carlo Marcelo Arenas Belón, Daniels Umanovskis, David
  Zych, Đoàn Trần Công Danh, Frederick Eaton, Greg Hurrell,
  James Knight, Jann Horn, Joshua Watt, Loo Rong Jie, Lucas
  De Marchi, Matthew DeVore, Mihir Mehta, Nickolai Belakovski,
  Roger Strain, Sam McKelvie, Saulius Gurklys, Shulhan, Steven
  Fernandez, Strain, Roger L, and Tim Schumacher.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alban Gruin, Andreas Gruenbacher,
  Andreas Heiduk, Antonio Ospite, Ben Peart, Brandon Williams,
  brian m. carlson, Christian Couder, Christian Hesse, Denton Liu,
  Derrick Stolee, Elijah Newren, Eric Sunshine, Jean-Noël Avila,
  Jeff Hostetler, Jeff King, Johannes Schindelin, Johannes Sixt,
  Jonathan Nieder, Jonathan Tan, Josh Steadmon, Junio C Hamano,
  Karsten Blees, Luke Diamand, Martin Ågren, Max Kirillov,
  Michael Witten, Michał Górny, Nguyễn Thái Ngọc Duy, Noam
  Postavsky, Olga Telezhnaya, Phillip Wood, Pratik Karki, Rafael
  Ascensão, Ralf Thielow, Ramsay Jones, Rasmus Villemoes, René
  Scharfe, Sebastian Staudt, Stefan Beller, Stephen P. Smith, Steve
  Hoelzer, Sven Strickroth, SZEDER Gábor, Tao Qingyun, Taylor
  Blau, Thomas Gummerer, Todd Zullinger, Torsten Bögershausen,
  and Uwe Kleine-König.

----------------------------------------------------------------

Git 2.20 Release Notes (draft)
==============================

Backward Compatibility Notes
----------------------------

 * "git branch -l <foo>" used to be a way to ask a reflog to be
   created while creating a new branch, but that is no longer the
   case.  It is a short-hand for "git branch --list <foo>" now.

 * "git push" into refs/tags/* hierarchy is rejected without getting
   forced, but "git fetch" (misguidedly) used the "fast forwarding"
   rule used for the refs/heads/* hierarchy; this has been corrected,
   which means some fetches of tags that did not fail with older
   version of Git will fail without "--force" with this version.

 * "git help -a" now gives verbose output (same as "git help -av").
   Those who want the old output may say "git help --no-verbose -a"..

 * "git cpn --help", when "cpn" is an alias to, say, "cherry-pick -n",
   reported only the alias expansion of "cpn" in earlier versions of
   Git.  It now runs "git cherry-pick --help" to show the manual page
   of the command, while sending the alias expansion to the standard
   error stream.

 * "git send-email" learned to grab address-looking string on any
   trailer whose name ends with "-by". This is a backward-incompatible
   change.  Adding "--suppress-cc=misc-by" on the command line, or
   setting sendemail.suppresscc configuration variable to "misc-by",
   can be used to disable this behaviour.


Updates since v2.19
-------------------

UI, Workflows & Features

 * Running "git clone" against a project that contain two files with
   pathnames that differ only in cases on a case insensitive
   filesystem would result in one of the files lost because the
   underlying filesystem is incapable of holding both at the same
   time.  An attempt is made to detect such a case and warn.

 * "git checkout -b newbranch [HEAD]" should not have to do as much as
   checking out a commit different from HEAD.  An attempt is made to
   optimize this special case.

 * "git rev-list --stdin </dev/null" used to be an error; it now shows
   no output without an error.  "git rev-list --stdin --default HEAD"
   still falls back to the given default when nothing is given on the
   standard input.

 * Lift code from GitHub to restrict delta computation so that an
   object that exists in one fork is not made into a delta against
   another object that does not appear in the same forked repository.

 * "git format-patch" learned new "--interdiff" and "--range-diff"
   options to explain the difference between this version and the
   previous attempt in the cover letter (or after the three-dashes as
   a comment).

 * "git mailinfo" used in "git am" learned to make a best-effort
   recovery of a patch corrupted by MUA that sends text/plain with
   format=flawed option.
   (merge 3aa4d81f88 rs/mailinfo-format-flowed later to maint).

 * The rules used by "git push" and "git fetch" to determine if a ref
   can or cannot be updated were inconsistent; specifically, fetching
   to update existing tags were allowed even though tags are supposed
   to be unmoving anchoring points.  "git fetch" was taught to forbid
   updates to existing tags without the "--force" option.

 * "git multi-pack-index" learned to detect corruption in the .midx
   file it uses, and this feature has been integrated into "git fsck".

 * Generation of (experimental) commit-graph files have so far been
   fairly silent, even though it takes noticeable amount of time in a
   meaningfully large repository.  The users will now see progress
   output.

 * The minimum version of Windows supported by Windows port of Git is
   now set to Vista.

 * The completion script (in contrib/) learned to complete a handful of
   options "git stash list" command takes.

 * The completion script (in contrib/) learned that "git fetch
   --multiple" only takes remote names as arguments and no refspecs.

 * "git status" learns to show progress bar when refreshing the index
   takes a long time.
   (merge ae9af12287 nd/status-refresh-progress later to maint).

 * "git help -a" and "git help -av" give different pieces of
   information, and generally the "verbose" version is more friendly
   to the new users.  "git help -a" by default now uses the more
   verbose output (with "--no-verbose", you can go back to the
   original).  Also "git help -av" now lists aliases and external
   commands, which it did not used to.

 * Unlike "grep", "git grep" by default recurses to the whole tree.
   The command learned "git grep --recursive" option, so that "git
   grep --no-recursive" can serve as a synonym to setting the
   max-depth to 0.

 * When pushing into a repository that borrows its objects from an
   alternate object store, "git receive-pack" that responds to the
   push request on the other side lists the tips of refs in the
   alternate to reduce the amount of objects transferred.  This
   sometimes is detrimental when the number of refs in the alternate
   is absurdly large, in which case the bandwidth saved in potentially
   fewer objects transferred is wasted in excessively large ref
   advertisement.  The alternate refs that are advertised are now
   configurable with a pair of configuration variables.

 * "git cmd --help" when "cmd" is aliased used to only say "cmd is
   aliased to ...".  Now it shows that to the standard error stream
   and runs "git $cmd --help" where $cmd is the first word of the
   alias expansion.

 * The documentation of "git gc" has been updated to mention that it
   is no longer limited to "pruning away crufts" but also updates
   ancillary files like commit-graph as a part of repository
   optimization.

 * "git p4 unshelve" improvements.

 * The logic to select the default user name and e-mail on Windows has
   been improved.
   (merge 501afcb8b0 js/mingw-default-ident later to maint).

 * The "rev-list --filter" feature learned to exclude all trees via
   "tree:0" filter.

 * "git send-email" learned to grab address-looking string on any
   trailer whose name ends with "-by"; --suppress-cc=misc-by on the
   command line, or setting sendemail.suppresscc configuration
   variable to "misc-by", can be used to disable this behaviour.

 * Developer builds now uses -Wunused-function compilation option.

 * One of our CI tests to run with "unusual/experimental/random"
   settings now also uses commit-graph and midx.

 * "git mergetool" learned to take the "--[no-]gui" option, just like
   "git difftool" does.

 * "git rebase -i" learned a new insn, 'break', that the user can
   insert in the to-do list.  Upon hitting it, the command returns
   control back to the user.

 * New "--pretty=format:" placeholders %GF and %GP that show the GPG
   key fingerprints have been invented.

 * On platforms with recent cURL library, http.sslBackend configuration
   variable can be used to choose a different SSL backend at runtime.
   The Windows port uses this mechanism to switch between OpenSSL and
   Secure Channel while talking over the HTTPS protocol.

 * "git send-email" learned to disable SMTP authentication via the
   "--smtp-auth=none" option, even when the smtp username is given
   (which turns the authentication on by default).

 * A fourth class of configuration files (in addition to the
   traditional "system wide", "per user in the $HOME directory" and
   "per repository in the $GIT_DIR/config") has been introduced so
   that different worktrees that share the same repository (hence the
   same $GIT_DIR/config file) can use different customization.

 * A pattern with '**' that does not have a slash on either side used
   to be an invalid one, but the code now treats such double-asterisks
   the same way as two normal asterisks that happen to be adjacent to
   each other.
   (merge e5bbe09e88 nd/wildmatch-double-asterisk later to maint).

 * The "--no-patch" option, which can be used to get a high-level
   overview without the actual line-by-line patch difference shown, of
   the "range-diff" command was earlier broken, which has been
   corrected.

 * The recently merged "rebase in C" has an escape hatch to use the
   scripted version when necessary, but it hasn't been documented,
   which has been corrected.


Performance, Internal Implementation, Development Support etc.

 * When there are too many packfiles in a repository (which is not
   recommended), looking up an object in these would require
   consulting many pack .idx files; a new mechanism to have a single
   file that consolidates all of these .idx files is introduced.

 * "git submodule update" is getting rewritten piece-by-piece into C.

 * The code for computing history reachability has been shuffled,
   obtained a bunch of new tests to cover them, and then being
   improved.

 * The unpack_trees() API used in checking out a branch and merging
   walks one or more trees along with the index.  When the cache-tree
   in the index tells us that we are walking a tree whose flattened
   contents is known (i.e. matches a span in the index), as linearly
   scanning a span in the index is much more efficient than having to
   open tree objects recursively and listing their entries, the walk
   can be optimized, which has been done.

 * When creating a thin pack, which allows objects to be made into a
   delta against another object that is not in the resulting pack but
   is known to be present on the receiving end, the code learned to
   take advantage of the reachability bitmap; this allows the server
   to send a delta against a base beyond the "boundary" commit.

 * spatch transformation to replace boolean uses of !hashcmp() to
   newly introduced oideq() is added, and applied, to regain
   performance lost due to support of multiple hash algorithms.

 * Fix a bug in which the same path could be registered under multiple
   worktree entries if the path was missing (for instance, was removed
   manually).  Also, as a convenience, expand the number of cases in
   which --force is applicable.

 * Split Documentation/config.txt for easier maintenance.
   (merge 6014363f0b nd/config-split later to maint).

 * Test helper binaries clean-up.
   (merge c9a1f4161f nd/test-tool later to maint).

 * Various tests have been updated to make it easier to swap the
   hash function used for object identification.
   (merge ae0c89d41b bc/hash-independent-tests later to maint).

 * Update fsck.skipList implementation and documentation.
   (merge 371a655074 ab/fsck-skiplist later to maint).

 * An alias that expands to another alias has so far been forbidden,
   but now it is allowed to create such an alias.

 * Various test scripts have been updated for style and also correct
   handling of exit status of various commands.

 * "gc --auto" ended up calling exit(-1) upon error, which has been
   corrected to use exit(1).  Also the error reporting behaviour when
   daemonized has been updated to exit with zero status when stopping
   due to a previously discovered error (which implies there is no
   point running gc to improve the situation); we used to exit with
   failure in such a case.

 * Various codepaths in the core-ish part learned to work on an
   arbitrary in-core index structure, not necessarily the default
   instance "the_index".
   (merge b3c7eef9b0 nd/the-index later to maint).

 * Code clean-up in the internal machinery used by "git status" and
   "git commit --dry-run".
   (merge 73ba5d78b4 ss/wt-status-committable later to maint).

 * Some environment variables that control the runtime options of Git
   used during tests are getting renamed for consistency.
   (merge 4231d1ba99 bp/rename-test-env-var later to maint).

 * A pair of new extensions to the index file have been introduced.
   They allow the index file to be read in parallel for performance.

 * The oidset API was built on top of the oidmap API which in turn is
   on the hashmap API.  Replace the implementation to build on top of
   the khash API and gain performance.

 * Over some transports, fetching objects with an exact commit object
   name can be done without first seeing the ref advertisements.  The
   code has been optimized to exploit this.

 * In a partial clone that will lazily be hydrated from the
   originating repository, we generally want to avoid "does this
   object exist (locally)?" on objects that we deliberately omitted
   when we created the clone.  The cache-tree codepath (which is used
   to write a tree object out of the index) however insisted that the
   object exists, even for paths that are outside of the partial
   checkout area.  The code has been updated to avoid such a check.

 * To help developers, an EditorConfig file that attempts to follow
   the project convention has been added.
   (merge b548d698a0 bc/editorconfig later to maint).

 * The result of coverage test can be combined with "git blame" to
   check the test coverage of code introduced recently with a new
   'coverage-diff' tool (in contrib/).
   (merge 783faedd65 ds/coverage-diff later to maint).

 * An experiment to fuzz test a few areas, hopefully we can gain more
   coverage to various areas.

 * More codepaths are moving away from hardcoded hash sizes.

 * The way the Windows port figures out the current directory has been
   improved.

 * The way DLLs are loaded on the Windows port has been improved.

 * Some tests have been reorganized and renamed; "ls t/" now gives a
   better overview of what is tested for these scripts than before.

 * "git rebase" and "git rebase -i" have been reimplemented in C.

 * Windows port learned to use nano-second resolution file timestamps.

 * The overly large Documentation/config.txt file have been split into
   million little pieces.  This potentially allows each individual piece
   included into the manual page of the command it affects more easily.

 * Replace three string-list instances used as look-up tables in "git
   fetch" with hashmaps.

 * Unify code to read the author-script used in "git am" and the
   commands that use the sequencer machinery, e.g. "git rebase -i".

 * In preparation to the day when we can deprecate and remove the
   "rebase -p", make sure we can skip and later remove tests for
   it.

 * The history traversal used to implement the tag-following has been
   optimized by introducing a new helper.

 * The helper function to refresh the cached stat information in the
   in-core index has learned to perform the lstat() part of the
   operation in parallel on multi-core platforms.

 * The code to traverse objects for reachability, used to decide what
   objects are unreferenced and expendable, have been taught to also
   consider per-worktree refs of other worktrees as starting points to
   prevent data loss.

 * "git add" needs to internally run "diff-files" equivalent, and the
   codepath learned the same optimization as "diff-files" has to run
   lstat(2) in parallel to find which paths have been updated in the
   working tree.

 * The procedure to install dependencies before testing at Travis CI
   is getting revamped for both simplicity and flexibility, taking
   advantage of the recent move to the vm-based environment.

 * The support for format-patch (and send-email) by the command-line
   completion script (in contrib/) has been simplified a bit.

 * The revision walker machinery learned to take advantage of the
   commit generation numbers stored in the commit-graph file.

 * The codebase has been cleaned up to reduce "#ifndef NO_PTHREADS".

 * The way -lcurl library gets linked has been simplified by taking
   advantage of the fact that we can just ask curl-config command how.

 * Various functions have been audited for "-Wunused-parameter" warnings
   and bugs in them got fixed.

 * A sanity check for start-up sequence has been added in the config
   API codepath.

 * The build procedure to link for fuzzing test has been made
   customizable with a new Makefile variable.

 * The way "git rebase" parses and forwards the command line options
   meant for underlying "git am" has been revamped, which fixed for
   options with parameters that were not passed correctly.

 * Our testing framework uses a special i18n "poisoned localization"
   feature to find messages that ought to stay constant but are
   incorrectly marked to be translated.  This feature has been made
   into a runtime option (it used to be a compile-time option).

 * "git push" used to check ambiguities between object-names and
   refnames while processing the list of refs' old and new values,
   which was unnecessary (as it knew that it is feeding raw object
   names).  This has been optimized out.

 * The xcurl_off_t() helper function is used to cast size_t to
   curl_off_t, but some compilers gave warnings against the code to
   ensure the casting is done without wraparound, when size_t is
   narrower than curl_off_t.  This warning has been squelched.

 * Code preparation to replace ulong vars with size_t vars where
   appropriate continues.

 * The "test installed Git" mode of our test suite has been updated to
   work better.

 * A coding convention around the Coccinelle semantic patches to have
   two classes to ease code migration process has been proposed and
   its support has been added to the Makefile.


Fixes since v2.19
-----------------

 * "git interpret-trailers" and its underlying machinery had a buggy
   code that attempted to ignore patch text after commit log message,
   which triggered in various codepaths that will always get the log
   message alone and never get such an input.
   (merge 66e83d9b41 jk/trailer-fixes later to maint).

 * Malformed or crafted data in packstream can make our code attempt
   to read or write past the allocated buffer and abort, instead of
   reporting an error, which has been fixed.

 * "git rebase -i" did not clear the state files correctly when a run
   of "squash/fixup" is aborted and then the user manually amended the
   commit instead, which has been corrected.
   (merge 10d2f35436 js/rebase-i-autosquash-fix later to maint).

 * When fsmonitor is in use, after operation on submodules updates
   .gitmodules, we lost track of the fact that we did so and relied on
   stale fsmonitor data.
   (merge 43f1180814 bp/mv-submodules-with-fsmonitor later to maint).

 * Fix for a long-standing bug that leaves the index file corrupt when
   it shrinks during a partial commit.
   (merge 6c003d6ffb jk/reopen-tempfile-truncate later to maint).

 * Further fix for O_APPEND emulation on Windows
   (merge eeaf7ddac7 js/mingw-o-append later to maint).

 * A corner case bugfix in "git rerere" code.
   (merge ad2bf0d9b4 en/rerere-multi-stage-1-fix later to maint).

 * "git add ':(attr:foo)'" is not supported and is supposed to be
   rejected while the command line arguments are parsed, but we fail
   to reject such a command line upfront.
   (merge 84d938b732 nd/attr-pathspec-fix later to maint).

 * Recent update broke the reachability algorithm when refs (e.g.
   tags) that point at objects that are not commit were involved,
   which has been fixed.

 * "git rebase" etc. in Git 2.19 fails to abort when given an empty
   commit log message as result of editing, which has been corrected.
   (merge a3ec9eaf38 en/sequencer-empty-edit-result-aborts later to maint).

 * The code to backfill objects in lazily cloned repository did not
   work correctly, which has been corrected.
   (merge e68302011c jt/lazy-object-fetch-fix later to maint).

 * Update error messages given by "git remote" and make them consistent.
   (merge 5025425dff ms/remote-error-message-update later to maint).

 * "git update-ref" learned to make both "--no-deref" and "--stdin"
   work at the same time.
   (merge d345e9fbe7 en/update-ref-no-deref-stdin later to maint).

 * Recently added "range-diff" had a corner-case bug to cause it
   segfault, which has been corrected.
   (merge e467a90c7a tg/range-diff-corner-case-fix later to maint).

 * The recently introduced commit-graph auxiliary data is incompatible
   with mechanisms such as replace & grafts that "breaks" immutable
   nature of the object reference relationship.  Disable optimizations
   based on its use (and updating existing commit-graph) when these
   incompatible features are in use in the repository.
   (merge 829a321569 ds/commit-graph-with-grafts later to maint).

 * The mailmap file update.
   (merge 255eb03edf jn/mailmap-update later to maint).

 * The code in "git status" sometimes hit an assertion failure.  This
   was caused by a structure that was reused without cleaning the data
   used for the first run, which has been corrected.
   (merge 3e73cc62c0 en/status-multiple-renames-to-the-same-target-fix later to maint).

 * "git fetch $repo $object" in a partial clone did not correctly
   fetch the asked-for object that is referenced by an object in
   promisor packfile, which has been fixed.

 * A corner-case bugfix.
   (merge c5cbb27cb5 sm/show-superproject-while-conflicted later to maint).

 * Various fixes to "diff --color-moved-ws".

 * A partial clone that is configured to lazily fetch missing objects
   will on-demand issue a "git fetch" request to the originating
   repository to fill not-yet-obtained objects.  The request has been
   optimized for requesting a tree object (and not the leaf blob
   objects contained in it) by telling the originating repository that
   no blobs are needed.
   (merge 4c7f9567ea jt/non-blob-lazy-fetch later to maint).

 * The codepath to support the experimental split-index mode had
   remaining "racily clean" issues fixed.
   (merge 4c490f3d32 sg/split-index-racefix later to maint).

 * "git log --graph" showing an octopus merge sometimes miscounted the
   number of display columns it is consuming to show the merge and its
   parent commits, which has been corrected.
   (merge 04005834ed np/log-graph-octopus-fix later to maint).

 * "git range-diff" did not work well when the compared ranges had
   changes in submodules and the "--submodule=log" was used.

 * The implementation of run_command() API on the UNIX platforms had a
   bug that caused a command not on $PATH to be found in the current
   directory.
   (merge f67b980771 jk/run-command-notdot later to maint).

 * A mutex used in "git pack-objects" were not correctly initialized
   and this caused "git repack" to dump core on Windows.
   (merge 34204c8166 js/pack-objects-mutex-init-fix later to maint).

 * Under certain circumstances, "git diff D:/a/b/c D:/a/b/d" on
   Windows would strip initial parts from the paths because they
   were not recognized as absolute, which has been corrected.
   (merge ffd04e92e2 js/diff-notice-has-drive-prefix later to maint).

 * The receive.denyCurrentBranch=updateInstead codepath kicked in even
   when the push should have been rejected due to other reasons, such
   as it does not fast-forward or the update-hook rejects it, which
   has been corrected.
   (merge b072a25fad jc/receive-deny-current-branch-fix later to maint).

 * The logic to determine the archive type "git archive" uses did not
   correctly kick in for "git archive --remote", which has been
   corrected.

 * "git repack" in a shallow clone did not correctly update the
   shallow points in the repository, leading to a repository that
   does not pass fsck.
   (merge 5dcfbf564c js/shallow-and-fetch-prune later to maint).

 * Some codepaths failed to form a proper URL when .gitmodules record
   the URL to a submodule repository as relative to the repository of
   superproject, which has been corrected.
   (merge e0a862fdaf sb/submodule-url-to-absolute later to maint).

 * "git fetch" over protocol v2 into a shallow repository failed to
   fetch full history behind a new tip of history that was diverged
   before the cut-off point of the history that was previously fetched
   shallowly.

 * The command line completion machinery (in contrib/) has been
   updated to allow the completion script to tweak the list of options
   that are reported by the parse-options machinery correctly.
   (merge 276b49ff34 nd/completion-negation later to maint).

 * Operations on promisor objects make sense in the context of only a
   small subset of the commands that internally use the revisions
   machinery, but the "--exclude-promisor-objects" option were taken
   and led to nonsense results by commands like "log", to which it
   didn't make much sense.  This has been corrected.
   (merge 669b1d2aae md/exclude-promisor-objects-fix later to maint).

 * The "container" mode of TravisCI is going away.  Our .travis.yml
   file is getting prepared for the transition.
   (merge 32ee384be8 ss/travis-ci-force-vm-mode later to maint).

 * Our test scripts can now take the '-V' option as a synonym for the
   '--verbose-log' option.
   (merge a5f52c6dab sg/test-verbose-log later to maint).

 * A regression in Git 2.12 era made "git fsck" fall into an infinite
   loop while processing truncated loose objects.
   (merge 18ad13e5b2 jk/detect-truncated-zlib-input later to maint).

 * "git ls-remote $there foo" was broken by recent update for the
   protocol v2 and stopped showing refs that match 'foo' that are not
   refs/{heads,tags}/foo, which has been fixed.
   (merge 6a139cdd74 jk/proto-v2-ref-prefix-fix later to maint).

 * Additional comment on a tricky piece of code to help developers.
   (merge 0afbe3e806 jk/stream-pack-non-delta-clarification later to maint).

 * A couple of tests used to leave the repository in a state that is
   deliberately corrupt, which have been corrected.
   (merge aa984dbe5e ab/pack-tests-cleanup later to maint).

 * The submodule support has been updated to read from the blob at
   HEAD:.gitmodules when the .gitmodules file is missing from the
   working tree.
   (merge 2b1257e463 ao/submodule-wo-gitmodules-checked-out later to maint).

 * "git fetch" was a bit loose in parsing responses from the other side
   when talking over the protocol v2.

 * "git rev-parse --exclude=* --branches --branches"  (i.e. first
   saying "add only things that do not match '*' out of all branches"
   and then adding all branches, without any exclusion this time")
   worked as expected, but "--exclude=* --all --all" did not work the
   same way, which has been fixed.
   (merge 5221048092 ag/rev-parse-all-exclude-fix later to maint).

 * "git send-email --transfer-encoding=..." in recent versions of Git
   sometimes produced an empty "Content-Transfer-Encoding:" header,
   which has been corrected.
   (merge 3c88e46f1a al/send-email-auto-cte-fixup later to maint).

 * The interface into "xdiff" library used to discover the offset and
   size of a generated patch hunk by first formatting it into the
   textual hunk header "@@ -n,m +k,l @@" and then parsing the numbers
   out.  A new interface has been introduced to allow callers a more
   direct access to them.
   (merge 5eade0746e jk/xdiff-interface later to maint).

 * Pathspec matching against a tree object were buggy when negative
   pathspec elements were involved, which has been fixed.
   (merge b7845cebc0 nd/tree-walk-path-exclusion later to maint).

 * "git merge" and "git pull" that merges into an unborn branch used
   to completely ignore "--verify-signatures", which has been
   corrected.
   (merge 01a31f3bca jk/verify-sig-merge-into-void later to maint).

 * "git rebase --autostash" did not correctly re-attach the HEAD at times.

 * "rev-parse --exclude=<pattern> --branches=<pattern>" etc. did not
   quite work, which has been corrected.
   (merge 9ab9b5df0e ra/rev-parse-exclude-glob later to maint).

 * When editing a patch in a "git add -i" session, a hunk could be
   made to no-op.  The "git apply" program used to reject a patch with
   such a no-op hunk to catch user mistakes, but it is now updated to
   explicitly allow a no-op hunk in an edited patch.
   (merge 22cb3835b9 js/apply-recount-allow-noop later to maint).

 * The URL to an MSDN page in a comment has been updated.
   (merge 2ef2ae2917 js/mingw-msdn-url later to maint).

 * "git ls-remote --sort=<thing>" can feed an object that is not yet
   available into the comparison machinery and segfault, which has
   been corrected to check such a request upfront and reject it.

 * When "git bundle" aborts due to an empty commit ranges
   (i.e. resulting in an empty pack), it left a file descriptor to an
   lockfile open, which resulted in leftover lockfile on Windows where
   you cannot remove a file with an open file descriptor.  This has
   been corrected.
   (merge 2c8ee1f53c jk/close-duped-fd-before-unlock-for-bundle later to maint).

 * "git format-patch --stat=<width>" can be used to specify the width
   used by the diffstat (shown in the cover letter).
   (merge 284aeb7e60 nd/format-patch-cover-letter-stat-width later to maint).

 * The way .git/index and .git/sharedindex* files were initially
   created gave these files different perm bits until they were
   adjusted for shared repository settings.  This was made consistent.
   (merge c9d6c78870 cc/shared-index-permbits later to maint).

 * "git rebase --stat" to transplant a piece of history onto a totally
   unrelated history were not working before and silently showed wrong
   result.  With the recent reimplementation in C, it started to instead
   die with an error message, as the original logic was not prepared
   to cope with this case.  This has now been fixed.

 * The advice message to tell the user to migrate an existing graft
   file to the replace system when a graft file was read was shown
   even when "git replace --convert-graft-file" command, which is the
   way the message suggests to use, was running, which made little
   sense.
   (merge 8821e90a09 ab/replace-graft-with-replace-advice later to maint).

 * "git diff --raw" lost ellipses to adjust the output columns for
   some time now, but the documentation still showed them.

 * Code cleanup, docfix, build fix, etc.
   (merge 96a7501aad ts/doc-build-manpage-xsl-quietly later to maint).
   (merge b9b07efdb2 tg/conflict-marker-size later to maint).
   (merge fa0aeea770 sg/doc-trace-appends later to maint).
   (merge d64324cb60 tb/void-check-attr later to maint).
   (merge c3b9bc94b9 en/double-semicolon-fix later to maint).
   (merge 79336116f5 sg/t3701-tighten-trace later to maint).
   (merge 801fa63a90 jk/dev-build-format-security later to maint).
   (merge 0597dd62ba sb/string-list-remove-unused later to maint).
   (merge db2d36fad8 bw/protocol-v2 later to maint).
   (merge 456d7cd3a9 sg/split-index-test later to maint).
   (merge 7b6057c852 tq/refs-internal-comment-fix later to maint).
   (merge 29e8dc50ad tg/t5551-with-curl-7.61.1 later to maint).
   (merge 55f6bce2c9 fe/doc-updates later to maint).
   (merge 7987d2232d jk/check-everything-connected-is-long-gone later to maint).
   (merge 4ba3c9be47 dz/credential-doc-url-matching-rules later to maint).
   (merge 4c399442f7 ma/commit-graph-docs later to maint).
   (merge fc0503b04e ma/t1400-undebug-test later to maint).
   (merge e56b53553a nd/packobjectshook-doc-fix later to maint).
   (merge c56170a0c4 ma/mailing-list-address-in-git-help later to maint).
   (merge 6e8fc70fce rs/sequencer-oidset-insert-avoids-dups later to maint).
   (merge ad0b8f9575 mw/doc-typofixes later to maint).
   (merge d9f079ad1a jc/how-to-document-api later to maint).
   (merge b1492bf315 ma/t7005-bash-workaround later to maint).
   (merge ac1f98a0df du/rev-parse-is-plumbing later to maint).
   (merge ca8ed443a5 mm/doc-no-dashed-git later to maint).
   (merge ce366a8144 du/get-tar-commit-id-is-plumbing later to maint).
   (merge 61018fe9e0 du/cherry-is-plumbing later to maint).
   (merge c7e5fe79b9 sb/strbuf-h-update later to maint).
   (merge 8d2008196b tq/branch-create-wo-branch-get later to maint).
   (merge 2e3c894f4b tq/branch-style-fix later to maint).
   (merge c5d844af9c sg/doc-show-branch-typofix later to maint).
   (merge 081d91618b ah/doc-updates later to maint).
   (merge b84c783882 jc/cocci-preincr later to maint).
   (merge 5e495f8122 uk/merge-subtree-doc-update later to maint).
   (merge aaaa881822 jk/uploadpack-packobjectshook-fix later to maint).
   (merge 3063477445 tb/char-may-be-unsigned later to maint).
   (merge 8c64bc9420 sg/test-rebase-editor-fix later to maint).
   (merge 71571cd7d6 ma/sequencer-do-reset-saner-loop-termination later to maint).
   (merge 9a4cb8781e cb/notes-freeing-always-null-fix later to maint).
   (merge 3006f5ee16 ma/reset-doc-rendering-fix later to maint).
   (merge 4c2eb06419 sg/daemon-test-signal-fix later to maint).
   (merge d27525e519 ss/msvc-strcasecmp later to maint).

----------------------------------------------------------------

Changes since v2.19.0 are as follows:

Aaron Lindsay (1):
      send-email: avoid empty transfer encoding header

Alban Gruin (21):
      sequencer: make three functions and an enum from sequencer.c public
      rebase -i: rewrite append_todo_help() in C
      editor: add a function to launch the sequence editor
      rebase -i: rewrite the edit-todo functionality in C
      sequencer: add a new function to silence a command, except if it fails
      rebase -i: rewrite setup_reflog_action() in C
      rebase -i: rewrite checkout_onto() in C
      sequencer: refactor append_todo_help() to write its message to a buffer
      sequencer: change the way skip_unnecessary_picks() returns its result
      t3404: todo list with commented-out commands only aborts
      rebase -i: rewrite complete_action() in C
      rebase -i: remove unused modes and functions
      rebase -i: implement the logic to initialize $revisions in C
      rebase -i: rewrite the rest of init_revisions_and_shortrevisions() in C
      rebase -i: rewrite write_basic_state() in C
      rebase -i: rewrite init_basic_state() in C
      rebase -i: implement the main part of interactive rebase as a builtin
      rebase--interactive2: rewrite the submodes of interactive rebase in C
      rebase -i: remove git-rebase--interactive.sh
      rebase -i: move rebase--helper modes to rebase--interactive
      p3400: replace calls to `git checkout -b' by `git checkout -B'

Alexander Pyhalov (1):
      t7005-editor: quote filename to fix whitespace-issue

Andreas Gruenbacher (1):
      rev-parse: clear --exclude list after 'git rev-parse --all'

Andreas Heiduk (6):
      doc: clarify boundaries of 'git worktree list --porcelain'
      doc: fix ASCII art tab spacing
      doc: fix inappropriate monospace formatting
      doc: fix descripion for 'git tag --format'
      doc: fix indentation of listing blocks in gitweb.conf.txt
      doc: fix formatting in git-update-ref

Anton Serbulov (1):
      mingw: fix getcwd when the parent directory cannot be queried

Antonio Ospite (10):
      submodule: add a print_config_from_gitmodules() helper
      submodule: factor out a config_set_in_gitmodules_file_gently function
      t7411: merge tests 5 and 6
      t7411: be nicer to future tests and really clean things up
      submodule--helper: add a new 'config' subcommand
      submodule: use the 'submodule--helper config' command
      t7506: clean up .gitmodules properly before setting up new scenario
      submodule: add a helper to check if it is safe to write to .gitmodules
      submodule: support reading .gitmodules when it's not in the working tree
      t/helper: add test-submodule-nested-repo-config

Ben Peart (19):
      checkout: optimize "git checkout -b <new_branch>"
      git-mv: allow submodules and fsmonitor to work together
      t/README: correct spelling of "uncommon"
      preload-index: use git_env_bool() not getenv() for customization
      fsmonitor: update GIT_TEST_FSMONITOR support
      read-cache: update TEST_GIT_INDEX_VERSION support
      preload-index: update GIT_FORCE_PRELOAD_TEST support
      read-cache: clean up casting and byte decoding
      eoie: add End of Index Entry (EOIE) extension
      config: add new index.threads config setting
      read-cache: load cache extensions on a worker thread
      ieot: add Index Entry Offset Table (IEOT) extension
      read-cache: load cache entries on worker threads
      reset: don't compute unstaged changes after reset when --quiet
      reset: add new reset.quiet config setting
      reset: warn when refresh_index() takes more than 2 seconds
      speed up refresh_index() by utilizing preload_index()
      add: speed up cmd_add() by utilizing read_cache_preload()
      refresh_index: remove unnecessary calls to preload_index()

Brandon Williams (1):
      config: document value 2 for protocol.version

Brendan Forster (1):
      http: add support for disabling SSL revocation checks in cURL

Carlo Marcelo Arenas Belón (8):
      unpack-trees: avoid dead store for struct progress
      multi-pack-index: avoid dead store for struct progress
      read-cache: use of memory after it is freed
      commit-slabs: move MAYBE_UNUSED out
      khash: silence -Wunused-function for delta-islands
      compat: make sure git_mmap is not expected to write
      sequencer: cleanup for gcc warning in non developer mode
      builtin/notes: remove unnecessary free

Christian Couder (3):
      pack-objects: refactor code into compute_layer_order()
      pack-objects: move tree_depth into 'struct packing_data'
      pack-objects: move 'layer' into 'struct packing_data'

Christian Hesse (2):
      subtree: add build targets 'man' and 'html'
      subtree: make install targets depend on build targets

Daniels Umanovskis (3):
      doc: move git-rev-parse from porcelain to plumbing
      doc: move git-get-tar-commit-id to plumbing
      doc: move git-cherry to plumbing

David Zych (1):
      doc: clarify gitcredentials path component matching

Denton Liu (3):
      mergetool: accept -g/--[no-]gui as arguments
      completion: support `git mergetool --[no-]gui`
      doc: document diff/merge.guitool config keys

Derrick Stolee (93):
      multi-pack-index: add design document
      multi-pack-index: add format details
      multi-pack-index: add builtin
      multi-pack-index: add 'write' verb
      midx: write header information to lockfile
      multi-pack-index: load into memory
      t5319: expand test data
      packfile: generalize pack directory list
      multi-pack-index: read packfile list
      multi-pack-index: write pack names in chunk
      midx: read pack names into array
      midx: sort and deduplicate objects from packfiles
      midx: write object ids in a chunk
      midx: write object id fanout chunk
      midx: write object offsets
      config: create core.multiPackIndex setting
      midx: read objects from multi-pack-index
      midx: use midx in abbreviation calculations
      midx: use existing midx when writing new one
      midx: use midx in approximate_object_count
      midx: prevent duplicate packfile loads
      packfile: skip loading index if in multi-pack-index
      midx: clear midx on repack
      commit-reach: move walk methods from commit.c
      commit.h: remove method declarations
      commit-reach: move ref_newer from remote.c
      commit-reach: move commit_contains from ref-filter
      upload-pack: make reachable() more generic
      upload-pack: refactor ok_to_give_up()
      upload-pack: generalize commit date cutoff
      commit-reach: move can_all_from_reach_with_flags
      test-reach: create new test tool for ref_newer
      test-reach: test in_merge_bases
      test-reach: test is_descendant_of
      test-reach: test get_merge_bases_many
      test-reach: test reduce_heads
      test-reach: test can_all_from_reach_with_flags
      test-reach: test commit_contains
      commit-reach: replace ref_newer logic
      commit-reach: make can_all_from_reach... linear
      commit-reach: use can_all_from_reach
      multi-pack-index: provide more helpful usage info
      multi-pack-index: store local property
      midx: mark bad packed objects
      midx: stop reporting garbage
      midx: fix bug that skips midx with alternates
      packfile: add all_packs list
      treewide: use get_all_packs
      midx: test a few commands that use get_all_packs
      pack-objects: consider packs in multi-pack-index
      commit-graph: update design document
      test-repository: properly init repo
      commit-graph: not compatible with replace objects
      commit-graph: not compatible with grafts
      commit-graph: not compatible with uninitialized repo
      commit-graph: close_commit_graph before shallow walk
      commit-graph: define GIT_TEST_COMMIT_GRAPH
      t3206-range-diff.sh: cover single-patch case
      t5318: use test_oid for HASH_LEN
      multi-pack-index: add 'verify' verb
      multi-pack-index: verify bad header
      multi-pack-index: verify corrupt chunk lookup table
      multi-pack-index: verify packname order
      multi-pack-index: verify missing pack
      multi-pack-index: verify oid fanout order
      multi-pack-index: verify oid lookup order
      multi-pack-index: fix 32-bit vs 64-bit size check
      multi-pack-index: verify object offsets
      multi-pack-index: report progress during 'verify'
      fsck: verify multi-pack-index
      commit-reach: properly peel tags
      commit-reach: fix memory and flag leaks
      commit-reach: cleanups in can_all_from_reach...
      commit-graph: clean up leaked memory during write
      commit-graph: reduce initial oid allocation
      midx: fix broken free() in close_midx()
      contrib: add coverage-diff script
      ci: add optional test variables
      commit-reach: fix first-parent heuristic
      midx: close multi-pack-index on repack
      multi-pack-index: define GIT_TEST_MULTI_PACK_INDEX
      packfile: close multi-pack-index in close_all_packs
      prio-queue: add 'peek' operation
      test-reach: add run_three_modes method
      test-reach: add rev-list tests
      revision.c: begin refactoring --topo-order logic
      commit/revisions: bookkeeping before refactoring
      revision.c: generation-based topo-order algorithm
      t6012: make rev-list tests more interesting
      commit-reach: implement get_reachable_subset
      test-reach: test get_reachable_subset
      remote: make add_missing_tags() linear
      pack-objects: ignore ambiguous object warnings

Elijah Newren (14):
      Remove superfluous trailing semicolons
      t4200: demonstrate rerere segfault on specially crafted merge
      rerere: avoid buffer overrun
      update-ref: fix type of update_flags variable to match its usage
      update-ref: allow --no-deref with --stdin
      sequencer: fix --allow-empty-message behavior, make it smarter
      merge-recursive: set paths correctly when three-way merging content
      merge-recursive: avoid wrapper function when unnecessary and wasteful
      merge-recursive: remove final remaining caller of merge_file_one()
      merge-recursive: rename merge_file_1() and merge_content()
      commit: fix erroneous BUG, 'multiple renames on the same target? how?'
      merge-recursive: improve auto-merging messages with path collisions
      merge-recursive: avoid showing conflicts with merge branch before HEAD
      fsck: move fsck_head_link() to get_default_heads() to avoid some globals

Eric Sunshine (26):
      format-patch: allow additional generated content in make_cover_letter()
      format-patch: add --interdiff option to embed diff in cover letter
      format-patch: teach --interdiff to respect -v/--reroll-count
      interdiff: teach show_interdiff() to indent interdiff
      log-tree: show_log: make commentary block delimiting reusable
      format-patch: allow --interdiff to apply to a lone-patch
      range-diff: respect diff_option.file rather than assuming 'stdout'
      range-diff: publish default creation factor
      range-diff: relieve callers of low-level configuration burden
      format-patch: add --range-diff option to embed diff in cover letter
      format-patch: extend --range-diff to accept revision range
      format-patch: teach --range-diff to respect -v/--reroll-count
      format-patch: add --creation-factor tweak for --range-diff
      format-patch: allow --range-diff to apply to a lone-patch
      worktree: don't die() in library function find_worktree()
      worktree: move delete_git_dir() earlier in file for upcoming new callers
      worktree: generalize delete_git_dir() to reduce code duplication
      worktree: prepare for more checks of whether path can become worktree
      worktree: disallow adding same path multiple times
      worktree: teach 'add' to respect --force for registered but missing path
      worktree: teach 'move' to override lock when --force given twice
      worktree: teach 'remove' to override lock when --force given twice
      worktree: delete .git/worktrees if empty after 'remove'
      doc-diff: fix non-portable 'man' invocation
      doc-diff: add --clean mode to remove temporary working gunk
      doc/Makefile: drop doc-diff worktree and temporary files on "make clean"

Frederick Eaton (3):
      git-archimport.1: specify what kind of Arch we're talking about
      git-column.1: clarify initial description, provide examples
      git-describe.1: clarify that "human readable" is also git-readable

Greg Hurrell (1):
      doc: update diff-format.txt for removed ellipses in --raw

James Knight (1):
      build: link with curl-defined linker flags

Jann Horn (2):
      patch-delta: fix oob read
      patch-delta: consistently report corruption

Jean-Noël Avila (1):
      i18n: fix small typos

Jeff Hostetler (2):
      t0051: test GIT_TRACE to a windows named pipe
      mingw: fix mingw_open_append to work with named pipes

Jeff King (98):
      branch: make "-l" a synonym for "--list"
      Add delta-islands.{c,h}
      pack-objects: add delta-islands support
      repack: add delta-islands support
      t5320: tests for delta islands
      t/perf: factor boilerplate out of test_perf
      t/perf: factor out percent calculations
      t/perf: add infrastructure for measuring sizes
      t/perf: add perf tests for fetches from a bitmapped server
      pack-bitmap: save "have" bitmap from walk
      pack-objects: reuse on-disk deltas for thin "have" objects
      SubmittingPatches: mention doc-diff
      rev-list: make empty --stdin not an error
      trailer: use size_t for string offsets
      trailer: use size_t for iterating trailer list
      trailer: pass process_trailer_opts to trailer_info_get()
      interpret-trailers: tighten check for "---" patch boundary
      interpret-trailers: allow suppressing "---" divider
      pretty, ref-filter: format %(trailers) with no_divider option
      sequencer: ignore "---" divider when parsing trailers
      append_signoff: use size_t for string offsets
      coccinelle: use <...> for function exclusion
      introduce hasheq() and oideq()
      convert "oidcmp() == 0" to oideq()
      convert "hashcmp() == 0" to hasheq()
      convert "oidcmp() != 0" to "!oideq()"
      convert "hashcmp() != 0" to "!hasheq()"
      convert hashmap comparison functions to oideq()
      read-cache: use oideq() in ce_compare functions
      show_dirstat: simplify same-content check
      doc-diff: always use oids inside worktree
      test-delta: read input into a heap buffer
      t5303: test some corrupt deltas
      patch-delta: handle truncated copy parameters
      t5303: use printf to generate delta bases
      doc/git-branch: remove obsolete "-l" references
      bitmap_has_sha1_in_uninteresting(): drop BUG check
      t5310: test delta reuse with bitmaps
      traverse_bitmap_commit_list(): don't free result
      pack-bitmap: drop "loaded" flag
      reopen_tempfile(): truncate opened file
      doc-diff: force worktree add
      config.mak.dev: add -Wformat-security
      pack-objects: handle island check for "external" delta base
      receive-pack: update comment with check_everything_connected
      submodule--helper: use "--" to signal end of clone options
      submodule-config: ban submodule urls that start with dash
      submodule-config: ban submodule paths that start with a dash
      fsck: detect submodule urls starting with dash
      fsck: detect submodule paths starting with dash
      more oideq/hasheq conversions
      transport: drop refnames from for_each_alternate_ref
      test-tool: show tool list on error
      config.mak.dev: enable -Wunused-function
      run-command: mark path lookup errors with ENOENT
      t5410: use longer path for sample script
      upload-pack: fix broken if/else chain in config callback
      t1450: check large blob in trailing-garbage test
      check_stream_sha1(): handle input underflow
      cat-file: handle streaming failures consistently
      ls-remote: do not send ref prefixes for patterns
      ls-remote: pass heads/tags prefixes to transport
      read_istream_pack_non_delta(): document input handling
      xdiff: provide a separate emit callback for hunks
      xdiff-interface: provide a separate consume callback for hunks
      rev-list: handle flags for --indexed-objects
      approxidate: handle pending number for "specials"
      pathspec: handle non-terminated strings with :(attr)
      diff: avoid generating unused hunk header lines
      diff: discard hunk headers for patch-ids earlier
      diff: use hunk callback for word-diff
      combine-diff: use an xdiff hunk callback
      diff: convert --check to use a hunk callback
      range-diff: use a hunk callback
      xdiff-interface: drop parse_hunk_header()
      apply: mark include/exclude options as NONEG
      am: handle --no-patch-format option
      ls-files: mark exclude options as NONEG
      pack-objects: mark index-version option as NONEG
      cat-file: mark batch options with NONEG
      status: mark --find-renames option with NONEG
      format-patch: mark "--no-numbered" option with NONEG
      show-branch: mark --reflog option as NONEG
      tag: mark "--message" option with NONEG
      cat-file: report an error on multiple --batch options
      apply: return -1 from option callback instead of calling exit(1)
      parse-options: drop OPT_DATE()
      assert NOARG/NONEG behavior of parse-options callbacks
      midx: double-check large object write loop
      merge: extract verify_merge_signature() helper
      merge: handle --verify-signatures for unborn branch
      pull: handle --verify-signatures for unborn branch
      approxidate: fix NULL dereference in date_time()
      bundle: dup() output descriptor closer to point-of-use
      pack-objects: fix tree_depth and layer invariants
      pack-objects: zero-initialize tree_depth/layer arrays
      pack-objects: fix off-by-one in delta-island tree-depth computation
      t5562: fix perl path

Johannes Schindelin (64):
      rebase -i --autosquash: demonstrate a problem skipping the last squash
      rebase -i: be careful to wrap up fixup/squash chains
      compat/poll: prepare for targeting Windows Vista
      mingw: set _WIN32_WINNT explicitly for Git for Windows
      mingw: bump the minimum Windows version to Vista
      builtin rebase: prepare for builtin rebase -i
      rebase -i: clarify what happens on a failed `exec`
      rebase -i: introduce the 'break' command
      getpwuid(mingw): initialize the structure only once
      getpwuid(mingw): provide a better default for the user name
      mingw: use domain information for default email
      http: add support for selecting SSL backends at runtime
      pack-objects: fix typo 'detla' -> 'delta'
      pack-objects (mingw): demonstrate a segmentation fault with large deltas
      pack-objects (mingw): initialize `packing_data` mutex in the correct spot
      rebase (autostash): avoid duplicate call to state_dir_path()
      rebase (autostash): store the full OID in <state-dir>/autostash
      rebase (autostash): use an explicit OID to apply the stash
      mingw: factor out code to set stat() data
      rebase --autostash: demonstrate a problem with dirty submodules
      rebase --autostash: fix issue with dirty submodules
      mingw: load system libraries the recommended way
      mingw: ensure `getcwd()` reports the correct case
      repack: point out a bug handling stale shallow info
      shallow: offer to prune only non-existing entries
      repack -ad: prune the list of shallow commits
      http: when using Secure Channel, ignore sslCAInfo by default
      t7800: fix quoting
      mingw: reencode environment variables on the fly (UTF-16 <-> UTF-8)
      config: rename `dummy` parameter to `cb` in git_default_config()
      config: allow for platform-specific core.* config settings
      config: move Windows-specific config settings into compat/mingw.c
      mingw: unset PERL5LIB by default
      mingw: fix isatty() after dup2()
      t3404: decouple some test cases from outcomes of previous test cases
      t3418: decouple test cases from a previous `rebase -p` test case
      tests: optionally skip `git rebase -p` tests
      Windows: force-recompile git.res for differing architectures
      built-in rebase: demonstrate regression with --autostash
      built-in rebase --autostash: leave the current branch alone if possible
      Update .mailmap
      rebase -r: demonstrate bug with conflicting merges
      rebase -r: do not write MERGE_HEAD unless needed
      rebase -i: include MERGE_HEAD into files to clean up
      built-in rebase --skip/--abort: clean up stale .git/<name> files
      status: rebase and merge can be in progress at the same time
      apply --recount: allow "no-op hunks"
      rebase: consolidate clean-up code before leaving reset_head()
      rebase: prepare reset_head() for more flags
      built-in rebase: reinstate `checkout -q` behavior where appropriate
      tests: fix GIT_TEST_INSTALLED's PATH to include t/helper/
      tests: respect GIT_TEST_INSTALLED when initializing repositories
      t/lib-gettext: test installed git-sh-i18n if GIT_TEST_INSTALLED is set
      mingw: use `CreateHardLink()` directly
      rebase: really just passthru the `git am` options
      rebase: validate -C<n> and --whitespace=<mode> parameters early
      config: report a bug if git_dir exists without commondir
      tests: do not require Git to be built when testing an installed Git
      tests: explicitly use `git.exe` on Windows
      mingw: replace an obsolete link with the superseding one
      legacy-rebase: backport -C<n> and --whitespace=<option> checks
      rebase: warn about the correct tree's OID
      rebase: fix GIT_REFLOG_ACTION regression
      rebase --stat: fix when rebasing to an unrelated history

Johannes Sixt (3):
      diff: don't attempt to strip prefix from absolute Windows paths
      rebase -i: recognize short commands without arguments
      t3404-rebase-interactive: test abbreviated commands

Jonathan Nieder (9):
      gc: improve handling of errors reading gc.log
      gc: exit with status 128 on failure
      gc: do not return error for prior errors in daemonized mode
      commit-reach: correct accidental #include of C file
      mailmap: consistently normalize brian m. carlson's name
      git doc: direct bug reporters to mailing list archive
      eoie: default to not writing EOIE section
      ieot: default to not writing IEOT section
      index: make index.threads=true enable ieot and eoie

Jonathan Tan (15):
      fetch-object: unify fetch_object[s] functions
      fetch-object: set exact_oid when fetching
      connected: document connectivity in partial clones
      fetch: in partial clone, check presence of targets
      fetch-pack: avoid object flags if no_dependents
      fetch-pack: exclude blobs when lazy-fetching trees
      transport: allow skipping of ref listing
      transport: do not list refs if possible
      transport: list refs before fetch if necessary
      fetch: do not list refs if fetching only hashes
      cache-tree: skip some blob checks in partial clone
      upload-pack: make have_obj not global
      upload-pack: make want_obj not global
      upload-pack: clear flags before each v2 request
      fetch-pack: be more precise in parsing v2 response

Josh Steadmon (4):
      fuzz: add basic fuzz testing target.
      fuzz: add fuzz testing for packfile indices.
      archive: initialize archivers earlier
      Makefile: use FUZZ_CXXFLAGS for linking fuzzers

Joshua Watt (1):
      send-email: explicitly disable authentication

Junio C Hamano (36):
      Revert "doc/Makefile: drop doc-diff worktree and temporary files on "make clean""
      Initial batch post 2.19
      Second batch post 2.19
      Git 2.14.5
      Git 2.15.3
      Git 2.16.5
      Git 2.17.2
      Git 2.18.1
      Git 2.19.1
      t0000: do not get self-test disrupted by environment warnings
      CodingGuidelines: document the API in *.h files
      Declare that the next one will be named 2.20
      Third batch for 2.20
      rebase: fix typoes in error messages
      Fourth batch for 2.20
      Revert "subtree: make install targets depend on build targets"
      Fifth batch for 2.20
      receive: denyCurrentBranch=updateinstead should not blindly update
      cocci: simplify "if (++u > 1)" to "if (u++)"
      fsck: s/++i > 1/i++/
      http: give curl version warnings consistently
      Sixth batch for 2.20
      Seventh batch for 2.20
      fetch: replace string-list used as a look-up table with a hashmap
      rebase: apply cocci patch
      Eighth batch for 2.20
      Ninth batch for 2.20
      Makefile: ease dynamic-gettext-poison transition
      Tenth batch for 2.20
      Git 2.20-rc0
      RelNotes: name the release properly
      Prepare for 2.20-rc1
      Git 2.19.2
      Git 2.20-rc1
      format-patch: do not let its diff-options affect --range-diff
      Git 2.20-rc2

Karsten Blees (2):
      mingw: replace MSVCRT's fstat() with a Win32-based implementation
      mingw: implement nanosecond-precision file times

Loo Rong Jie (1):
      win32: replace pthread_cond_*() with much simpler code

Lucas De Marchi (1):
      range-diff: allow to diff files regardless of submodule config

Luke Diamand (3):
      git-p4: do not fail in verbose mode for missing 'fileSize' key
      git-p4: unshelve into refs/remotes/p4-unshelved, not refs/remotes/p4/unshelved
      git-p4: fully support unshelving changelists

Martin Ågren (11):
      Doc: use `--type=bool` instead of `--bool`
      git-config.txt: fix 'see: above' note
      git-commit-graph.txt: fix bullet lists
      git-commit-graph.txt: typeset more in monospace
      git-commit-graph.txt: refer to "*commit*-graph file"
      Doc: refer to the "commit-graph file" with dash
      t1400: drop debug `echo` to actually execute `test`
      builtin/commit-graph.c: UNLEAK variables
      sequencer: break out of loop explicitly
      git-reset.txt: render tables correctly under Asciidoctor
      git-reset.txt: render literal examples as monospace

Matthew DeVore (19):
      list-objects: store common func args in struct
      list-objects: refactor to process_tree_contents
      list-objects: always parse trees gently
      t/README: reformat Do, Don't, Keep in mind lists
      Documentation: add shell guidelines
      tests: standardize pipe placement
      t/*: fix ordering of expected/observed arguments
      tests: don't swallow Git errors upstream of pipes
      t9109: don't swallow Git errors upstream of pipes
      tests: order arguments to git-rev-list properly
      rev-list: handle missing tree objects properly
      revision: mark non-user-given objects instead
      list-objects-filter: use BUG rather than die
      list-objects-filter-options: do not over-strbuf_init
      list-objects-filter: implement filter tree:0
      filter-trees: code clean-up of tests
      list-objects: support for skipping tree traversal
      Documentation/git-log.txt: do not show --exclude-promisor-objects
      exclude-promisor-objects: declare when option is allowed

Max Kirillov (1):
      http-backend test: make empty CONTENT_LENGTH test more realistic

Michael Witten (3):
      docs: typo: s/go/to/
      docs: graph: remove unnecessary `graph_update()' call
      docs: typo: s/isimilar/similar/

Michał Górny (6):
      gpg-interface.c: detect and reject multiple signatures on commits
      gpg-interface.c: use flags to determine key/signer info presence
      gpg-interface.c: support getting key fingerprint via %GF format
      gpg-interface.c: obtain primary key fingerprint as well
      t/t7510-signed-commit.sh: Add %GP to custom format checks
      t/t7510-signed-commit.sh: add signing subkey to Eris Discordia key

Mihir Mehta (1):
      doc: fix a typo and clarify a sentence

Nguyễn Thái Ngọc Duy (170):
      clone: report duplicate entries on case-insensitive filesystems
      trace.h: support nested performance tracing
      unpack-trees: add performance tracing
      unpack-trees: optimize walking same trees with cache-tree
      unpack-trees: reduce malloc in cache-tree walk
      unpack-trees: reuse (still valid) cache-tree from src_index
      unpack-trees: add missing cache invalidation
      cache-tree: verify valid cache-tree in the test suite
      Document update for nd/unpack-trees-with-cache-tree
      bisect.c: make show_list() build again
      t/helper: keep test-tool command list sorted
      t/helper: merge test-dump-untracked-cache into test-tool
      t/helper: merge test-pkt-line into test-tool
      t/helper: merge test-parse-options into test-tool
      t/helper: merge test-dump-fsmonitor into test-tool
      Makefile: add a hint about TEST_BUILTINS_OBJS
      config.txt: follow camelCase naming
      config.txt: move fetch part out to a separate file
      config.txt: move format part out to a separate file
      config.txt: move gitcvs part out to a separate file
      config.txt: move gui part out to a separate file
      config.txt: move pull part out to a separate file
      config.txt: move push part out to a separate file
      config.txt: move receive part out to a separate file
      config.txt: move sendemail part out to a separate file
      config.txt: move sequence.editor out of "core" part
      config.txt: move submodule part out to a separate file
      archive.c: remove implicit dependency the_repository
      status: show progress bar if refreshing the index takes too long
      add: do not accept pathspec magic 'attr'
      completion: support "git fetch --multiple"
      read-cache.c: remove 'const' from index_has_changes()
      diff.c: reduce implicit dependency on the_index
      combine-diff.c: remove implicit dependency on the_index
      blame.c: rename "repo" argument to "r"
      diff.c: remove the_index dependency in textconv() functions
      grep.c: remove implicit dependency on the_index
      diff.c: remove implicit dependency on the_index
      read-cache.c: remove implicit dependency on the_index
      diff-lib.c: remove implicit dependency on the_index
      ll-merge.c: remove implicit dependency on the_index
      merge-blobs.c: remove implicit dependency on the_index
      merge.c: remove implicit dependency on the_index
      patch-ids.c: remove implicit dependency on the_index
      sha1-file.c: remove implicit dependency on the_index
      rerere.c: remove implicit dependency on the_index
      userdiff.c: remove implicit dependency on the_index
      line-range.c: remove implicit dependency on the_index
      submodule.c: remove implicit dependency on the_index
      tree-diff.c: remove implicit dependency on the_index
      ws.c: remove implicit dependency on the_index
      revision.c: remove implicit dependency on the_index
      revision.c: reduce implicit dependency the_repository
      read-cache.c: optimize reading index format v4
      config.txt: correct the note about uploadpack.packObjectsHook
      help -a: improve and make --verbose default
      refs.c: indent with tabs, not spaces
      Add a place for (not) sharing stuff between worktrees
      submodule.c: remove some of the_repository references
      completion: fix __gitcomp_builtin no longer consider extra options
      t1300: extract and use test_cmp_config()
      worktree: add per-worktree config files
      refs: new ref types to make per-worktree refs visible to all worktrees
      revision.c: correct a parameter name
      revision.c: better error reporting on ref from different worktrees
      fsck: check HEAD and reflog from other worktrees
      reflog expire: cover reflog from all worktrees
      Update makefile in preparation for Documentation/config/*.txt
      config.txt: move advice.* to a separate file
      config.txt: move core.* to a separate file
      config.txt: move add.* to a separate file
      config.txt: move alias.* to a separate file
      config.txt: move am.* to a separate file
      config.txt: move apply.* to a separate file
      config.txt: move blame.* to a separate file
      config.txt: move branch.* to a separate file
      config.txt: move browser.* to a separate file
      config.txt: move checkout.* to a separate file
      config.txt: move clean.* to a separate file
      config.txt: move color.* to a separate file
      config.txt: move column.* to a separate file
      config.txt: move commit.* to a separate file
      config.txt: move credential.* to a separate file
      config.txt: move completion.* to a separate file
      config.txt: move diff-config.txt to config/
      config.txt: move difftool.* to a separate file
      config.txt: move fastimport.* to a separate file
      config.txt: move fetch-config.txt to config/
      config.txt: move filter.* to a separate file
      config.txt: move format-config.txt to config/
      config.txt: move fmt-merge-msg-config.txt to config/
      config.txt: move fsck.* to a separate file
      config.txt: move gc.* to a separate file
      config.txt: move gitcvs-config.txt to config/
      config.txt: move gitweb.* to a separate file
      config.txt: move grep.* to a separate file
      config.txt: move gpg.* to a separate file
      config.txt: move gui-config.txt to config/
      config.txt: move guitool.* to a separate file
      config.txt: move help.* to a separate file
      config.txt: move ssh.* to a separate file
      config.txt: move http.* to a separate file
      config.txt: move i18n.* to a separate file
      git-imap-send.txt: move imap.* to a separate file
      config.txt: move index.* to a separate file
      config.txt: move init.* to a separate file
      config.txt: move instaweb.* to a separate file
      config.txt: move interactive.* to a separate file
      config.txt: move log.* to a separate file
      config.txt: move mailinfo.* to a separate file
      config.txt: move mailmap.* to a separate file
      config.txt: move man.* to a separate file
      config.txt: move merge-config.txt to config/
      config.txt: move mergetool.* to a separate file
      config.txt: move notes.* to a separate file
      config.txt: move pack.* to a separate file
      config.txt: move pager.* to a separate file
      config.txt: move pretty.* to a separate file
      config.txt: move protocol.* to a separate file
      config.txt: move pull-config.txt to config/
      config.txt: move push-config.txt to config/
      config.txt: move rebase-config.txt to config/
      config.txt: move receive-config.txt to config/
      config.txt: move remote.* to a separate file
      config.txt: move remotes.* to a separate file
      config.txt: move repack.* to a separate file
      config.txt: move rerere.* to a separate file
      config.txt: move reset.* to a separate file
      config.txt: move sendemail-config.txt to config/
      config.txt: move sequencer.* to a separate file
      config.txt: move showBranch.* to a separate file
      config.txt: move splitIndex.* to a separate file
      config.txt: move status.* to a separate file
      config.txt: move stash.* to a separate file
      config.txt: move submodule.* to a separate file
      config.txt: move tag.* to a separate file
      config.txt: move transfer.* to a separate file
      config.txt: move uploadarchive.* to a separate file
      config.txt: move uploadpack.* to a separate file
      config.txt: move url.* to a separate file
      config.txt: move user.* to a separate file
      config.txt: move versionsort.* to a separate file
      config.txt: move web.* to a separate file
      config.txt: move worktree.* to a separate file
      config.txt: remove config/dummy.txt
      thread-utils: macros to unconditionally compile pthreads API
      wildmatch: change behavior of "foo**bar" in WM_PATHNAME mode
      git-worktree.txt: correct linkgit command name
      sequencer.c: remove a stray semicolon
      tree-walk.c: fix overoptimistic inclusion in :(exclude) matching
      run-command.h: include thread-utils.h instead of pthread.h
      send-pack.c: move async's #ifdef NO_PTHREADS back to run-command.c
      index-pack: remove #ifdef NO_PTHREADS
      name-hash.c: remove #ifdef NO_PTHREADS
      attr.c: remove #ifdef NO_PTHREADS
      grep: remove #ifdef NO_PTHREADS
      grep: clean up num_threads handling
      preload-index.c: remove #ifdef NO_PTHREADS
      pack-objects: remove #ifdef NO_PTHREADS
      read-cache.c: remove #ifdef NO_PTHREADS
      read-cache.c: reduce branching based on HAVE_THREADS
      read-cache.c: initialize copy_len to shut up gcc 8
      Clean up pthread_create() error handling
      completion: use __gitcomp_builtin for format-patch
      build: fix broken command-list.h generation with core.autocrlf
      format-patch: respect --stat in cover letter's diffstat
      doc: move extensions.worktreeConfig to the right place
      clone: fix colliding file detection on APFS
      files-backend.c: fix build error on Solaris
      transport-helper.c: do not translate a string twice

Nickolai Belakovski (2):
      worktree: update documentation for lock_reason and lock_reason_valid
      worktree: rename is_worktree_locked to worktree_lock_reason

Noam Postavsky (1):
      log: fix coloring of certain octopus merge shapes

Olga Telezhnaya (3):
      ref-filter: free memory from used_atom
      ls-remote: release memory instead of UNLEAK
      ref-filter: free item->value and item->value->s

Phillip Wood (11):
      diff: fix --color-moved-ws=allow-indentation-change
      diff --color-moved-ws: fix double free crash
      diff --color-moved-ws: fix out of bounds string access
      diff --color-moved-ws: fix a memory leak
      diff --color-moved-ws: fix another memory leak
      diff --color-moved: fix a memory leak
      am: don't die in read_author_script()
      am: improve author-script error reporting
      am: rename read_author_script()
      add read_author_script() to libgit
      sequencer: use read_author_script()

Pratik Karki (46):
      rebase: start implementing it as a builtin
      rebase: refactor common shell functions into their own file
      builtin/rebase: support running "git rebase <upstream>"
      builtin rebase: support --onto
      builtin rebase: support `git rebase --onto A...B`
      builtin rebase: handle the pre-rebase hook and --no-verify
      builtin rebase: support --quiet
      builtin rebase: support the `verbose` and `diffstat` options
      builtin rebase: require a clean worktree
      builtin rebase: try to fast forward when possible
      builtin rebase: support --force-rebase
      builtin rebase: start a new rebase only if none is in progress
      builtin rebase: only store fully-qualified refs in `options.head_name`
      builtin rebase: support `git rebase <upstream> <switch-to>`
      builtin rebase: support --continue
      builtin rebase: support --skip
      builtin rebase: support --abort
      builtin rebase: support --quit
      builtin rebase: support --edit-todo and --show-current-patch
      builtin rebase: actions require a rebase in progress
      builtin rebase: stop if `git am` is in progress
      builtin rebase: allow selecting the rebase "backend"
      builtin rebase: support --signoff
      builtin rebase: support --rerere-autoupdate
      builtin rebase: support --committer-date-is-author-date
      builtin rebase: support `ignore-whitespace` option
      builtin rebase: support `ignore-date` option
      builtin rebase: support `keep-empty` option
      builtin rebase: support `--autosquash`
      builtin rebase: support `--gpg-sign` option
      builtin rebase: support `-C` and `--whitespace=<type>`
      builtin rebase: support `--autostash` option
      builtin rebase: support `--exec`
      builtin rebase: support `--allow-empty-message` option
      builtin rebase: support --rebase-merges[=[no-]rebase-cousins]
      merge-base --fork-point: extract libified function
      builtin rebase: support `fork-point` option
      builtin rebase: add support for custom merge strategies
      builtin rebase: support --root
      builtin rebase: optionally auto-detect the upstream
      builtin rebase: optionally pass custom reflogs to reset_head()
      builtin rebase: fast-forward to onto if it is a proper descendant
      builtin rebase: show progress when connected to a terminal
      builtin rebase: use no-op editor when interactive is "implied"
      builtin rebase: error out on incompatible option/mode combinations
      rebase: default to using the builtin rebase

Rafael Ascensão (2):
      refs: show --exclude failure with --branches/tags/remotes=glob
      refs: fix some exclude patterns being ignored

Ralf Thielow (2):
      git-rebase.sh: fix typos in error messages
      builtin/rebase.c: remove superfluous space in messages

Ramsay Jones (12):
      Makefile: add a hdr-check target
      json-writer.h: add missing include (hdr-check)
      ewah/ewok_rlw.h: add missing include (hdr-check)
      refs/ref-cache.h: add missing declarations (hdr-check)
      refs/packed-backend.h: add missing declaration (hdr-check)
      refs/refs-internal.h: add missing declarations (hdr-check)
      midx.h: add missing forward declarations (hdr-check)
      delta-islands.h: add missing forward declarations (hdr-check)
      headers: normalize the spelling of some header guards
      fetch-object.h: add missing declaration (hdr-check)
      ewok_rlw.h: add missing 'inline' to function definition
      commit-reach.h: add missing declarations (hdr-check)

Rasmus Villemoes (6):
      help: redirect to aliased commands for "git cmd --help"
      git.c: handle_alias: prepend alias info when first argument is -h
      git-help.txt: document "git help cmd" vs "git cmd --help" for aliases
      Documentation/git-send-email.txt: style fixes
      send-email: only consider lines containing @ or <> for automatic Cc'ing
      send-email: also pick up cc addresses from -by trailers

René Scharfe (12):
      mailinfo: support format=flowed
      fsck: add a performance test for skipList
      fsck: use strbuf_getline() to read skiplist file
      fsck: use oidset instead of oid_array for skipList
      sequencer: use return value of oidset_insert()
      grep: add -r/--[no-]recursive
      fetch-pack: factor out is_unmatched_ref()
      fetch-pack: load tip_oids eagerly iff needed
      khash: factor out kh_release_*
      oidset: use khash
      oidset: uninline oidset_init()
      commit-reach: fix cast in compare_commits_by_gen()

Roger Strain (1):
      subtree: performance improvement for finding unexpected parent commits

SZEDER Gábor (20):
      t1404: increase core.packedRefsTimeout to avoid occasional test failure
      Documentation/git.txt: clarify that GIT_TRACE=/path appends
      t3701-add-interactive: tighten the check of trace output
      t1700-split-index: drop unnecessary 'grep'
      t0090: disable GIT_TEST_SPLIT_INDEX for the test checking split index
      t1700-split-index: document why FSMONITOR is disabled in this test script
      split-index: add tests to demonstrate the racy split index problem
      t1700-split-index: date back files to avoid racy situations
      split-index: count the number of deleted entries
      split-index: don't compare cached data of entries already marked for split index
      split-index: smudge and add racily clean cache entries to split index
      split-index: BUG() when cache entry refers to non-existing shared entry
      object_id.cocci: match only expressions of type 'struct object_id'
      test-lib: introduce the '-V' short option for '--verbose-log'
      travis-ci: install packages in 'ci/install-dependencies.sh'
      coccicheck: introduce 'pending' semantic patches
      ref-filter: don't look for objects when outside of a repository
      tests: send "bug in the test script" errors to the script's stderr
      test-lib-functions: make 'test_cmp_rev' more informative on failure
      t/lib-git-daemon: fix signal checking

Sam McKelvie (1):
      rev-parse: --show-superproject-working-tree should work during a merge

Saulius Gurklys (1):
      doc: fix small typo in git show-branch

Sebastian Staudt (1):
      travis-ci: no longer use containers

Shulhan (1):
      builtin/remote: quote remote name on error to display empty name

Stefan Beller (25):
      git-submodule.sh: align error reporting for update mode to use path
      git-submodule.sh: rename unused variables
      builtin/submodule--helper: factor out submodule updating
      builtin/submodule--helper: store update_clone information in a struct
      builtin/submodule--helper: factor out method to update a single submodule
      submodule--helper: replace connect-gitdir-workingtree by ensure-core-worktree
      submodule--helper: introduce new update-module-mode helper
      test_decode_color: understand FAINT and ITALIC
      t3206: add color test for range-diff --dual-color
      diff.c: simplify caller of emit_line_0
      diff.c: reorder arguments for emit_line_ws_markup
      diff.c: add set_sign to emit_line_0
      diff: use emit_line_0 once per line
      diff.c: omit check for line prefix in emit_line_0
      diff.c: rewrite emit_line_0 more understandably
      diff.c: add --output-indicator-{new, old, context}
      range-diff: make use of different output indicators
      range-diff: indent special lines as context
      refs.c: migrate internal ref iteration to pass thru repository argument
      refs.c: upgrade for_each_replace_ref to be a each_repo_ref_fn callback
      string-list: remove unused function print_string_list
      strbuf.h: format according to coding guidelines
      diff.c: pass sign_index to emit_line_ws_markup
      submodule helper: convert relative URL to absolute URL if needed
      builtin/submodule--helper: remove debugging leftover tracing

Stephen P. Smith (10):
      wt-status.c: move has_unmerged earlier in the file
      wt-status: rename commitable to committable
      t7501: add test of "commit --dry-run --short"
      wt-status.c: set the committable flag in the collect phase
      roll wt_status_state into wt_status and populate in the collect phase
      t2000: rename and combine checkout clash tests
      t7509: cleanup description and filename
      t7502: rename commit test script to comply with naming convention
      t7500: rename commit tests script to comply with naming convention
      t7501: rename commit test to comply with naming convention

Steve Hoelzer (1):
      poll: use GetTickCount64() to avoid wrap-around issues

Steven Fernandez (1):
      git-completion.bash: add completion for stash list

Strain, Roger L (4):
      subtree: refactor split of a commit into standalone method
      subtree: make --ignore-joins pay attention to adds
      subtree: use commits before rejoins for splits
      subtree: improve decision on merges kept in split

Sven Strickroth (1):
      msvc: directly use MS version (_stricmp) of strcasecmp

Tao Qingyun (3):
      refs: docstring typo
      builtin/branch.c: remove useless branch_get
      branch: trivial style fix

Taylor Blau (4):
      transport.c: extract 'fill_alternate_refs_command'
      transport.c: introduce core.alternateRefsCommand
      transport.c: introduce core.alternateRefsPrefixes
      Documentation/config.txt: fix typo in core.alternateRefsCommand

Thomas Gummerer (17):
      rerere: unify error messages when read_cache fails
      rerere: lowercase error messages
      rerere: wrap paths in output in sq
      rerere: mark strings for translation
      rerere: add documentation for conflict normalization
      rerere: fix crash with files rerere can't handle
      rerere: only return whether a path has conflicts or not
      rerere: factor out handle_conflict function
      rerere: return strbuf from handle path
      rerere: teach rerere to handle nested conflicts
      rerere: recalculate conflict ID when unresolved conflict is committed
      rerere: mention caveat about unmatched conflict markers
      rerere: add note about files with existing conflict markers
      .gitattributes: add conflict-marker-size for relevant files
      linear-assignment: fix potential out of bounds memory access
      t5551: move setup code inside test_expect blocks
      t5551: compare sorted cookies files

Tim Schumacher (4):
      Documentation/Makefile: make manpage-base-url.xsl generation quieter
      alias: add support for aliases of an alias
      alias: show the call history when an alias is looping
      t0014: introduce an alias testing suite

Todd Zullinger (1):
      Documentation: build technical/multi-pack-index

Torsten Bögershausen (5):
      Make git_check_attr() a void function
      path.c: char is not (always) signed
      Upcast size_t variables to uintmax_t when printing
      remote-curl.c: xcurl_off_t is not portable (on 32 bit platfoms)
      t5601-99: Enable colliding file detection for MINGW

Uwe Kleine-König (1):
      howto/using-merge-subtree: mention --allow-unrelated-histories

brian m. carlson (26):
      t: add test functions to translate hash-related values
      t0000: use hash translation table
      t0000: update tests for SHA-256
      t0002: abstract away SHA-1 specific constants
      t0064: make hash size independent
      t1006: make hash size independent
      t1400: switch hard-coded object ID to variable
      t1405: make hash size independent
      t1406: make hash-size independent
      t1407: make hash size independent
      editorconfig: provide editor settings for Git developers
      editorconfig: indicate settings should be kept in sync
      pack-bitmap-write: use GIT_MAX_RAWSZ for allocation
      builtin/repack: replace hard-coded constants
      builtin/mktree: remove hard-coded constant
      builtin/fetch-pack: remove constants with parse_oid_hex
      pack-revindex: express constants in terms of the_hash_algo
      packfile: express constants in terms of the_hash_algo
      refs/packed-backend: express constants using the_hash_algo
      upload-pack: express constants in terms of the_hash_algo
      transport: use parse_oid_hex instead of a constant
      tag: express constant in terms of the_hash_algo
      apply: replace hard-coded constants
      apply: rename new_sha1_prefix and old_sha1_prefix
      submodule: make zero-oid comparison hash function agnostic
      rerere: convert to use the_hash_algo

Ævar Arnfjörð Bjarmason (35):
      fetch: change "branch" to "reference" in --force -h output
      push tests: make use of unused $1 in test description
      push tests: use spaces in interpolated string
      fetch tests: add a test for clobbering tag behavior
      push doc: remove confusing mention of remote merger
      push doc: move mention of "tag <tag>" later in the prose
      push doc: correct lies about how push refspecs work
      fetch: document local ref updates with/without --force
      fetch: stop clobbering existing tags without --force
      fsck tests: setup of bogus commit object
      fsck tests: add a test for no skipList input
      fsck: document and test sorted skipList input
      fsck: document and test commented & empty line skipList input
      fsck: document that skipList input must be unabbreviated
      fsck: add a performance test
      fsck: support comments & empty lines in skipList
      commit-graph write: add progress output
      commit-graph verify: add progress output
      config doc: add missing list separator for checkout.optimizeNewBranch
      push doc: add spacing between two words
      fetch doc: correct grammar in --force docs
      gc: fix regression in 7b0f229222 impacting --quiet
      gc doc: mention the commit-graph in the intro
      pack-objects test: modernize style
      pack-objects tests: don't leave test .git corrupt at end
      index-pack tests: don't leave test repo dirty at end
      i18n: make GETTEXT_POISON a runtime option
      range-diff doc: add a section about output stability
      range-diff: fix regression in passing along diff options
      range-diff: make diff option behavior (e.g. --stat) consistent
      push: change needlessly ambiguous example in error
      rebase doc: document rebase.useBuiltin
      tests: add a special setup where rebase.useBuiltin is off
      read-cache: make the split index obey umask settings
      advice: don't pointlessly suggest --convert-graft-file

Đoàn Trần Công Danh (1):
      git-compat-util: prefer poll.h to sys/poll.h


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.20.0-rc1
@ 2018-11-21 15:20  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2018-11-21 15:20 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.20.0-rc1 is now available for testing
at the usual places.  It is comprised of 915 non-merge commits
since v2.19.0, contributed by 73 people, 24 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.20.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.19.0 are as follows.
Welcome to the Git development community!

  Aaron Lindsay, Alexander Pyhalov, Anton Serbulov, Brendan
  Forster, Carlo Marcelo Arenas Belón, Daniels Umanovskis, David
  Zych, Đoàn Trần Công Danh, Frederick Eaton, James Knight,
  Jann Horn, Joshua Watt, Loo Rong Jie, Lucas De Marchi, Matthew
  DeVore, Mihir Mehta, Nickolai Belakovski, Roger Strain, Sam
  McKelvie, Saulius Gurklys, Shulhan, Steven Fernandez, Strain,
  Roger L, and Tim Schumacher.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alban Gruin, Andreas Gruenbacher,
  Andreas Heiduk, Antonio Ospite, Ben Peart, Brandon Williams,
  brian m. carlson, Christian Couder, Christian Hesse, Denton Liu,
  Derrick Stolee, Elijah Newren, Eric Sunshine, Jeff Hostetler,
  Jeff King, Johannes Schindelin, Johannes Sixt, Jonathan Nieder,
  Jonathan Tan, Josh Steadmon, Junio C Hamano, Karsten Blees,
  Luke Diamand, Martin Ågren, Max Kirillov, Michael Witten,
  Michał Górny, Nguyễn Thái Ngọc Duy, Noam Postavsky,
  Olga Telezhnaya, Phillip Wood, Pratik Karki, Rafael Ascensão,
  Ralf Thielow, Ramsay Jones, Rasmus Villemoes, René Scharfe,
  Sebastian Staudt, Stefan Beller, Stephen P. Smith, Steve Hoelzer,
  SZEDER Gábor, Tao Qingyun, Taylor Blau, Thomas Gummerer,
  Todd Zullinger, Torsten Bögershausen, and Uwe Kleine-König.

----------------------------------------------------------------

Git 2.20 Release Notes (draft)
==============================

Backward Compatibility Notes
----------------------------

 * "git branch -l <foo>" used to be a way to ask a reflog to be
   created while creating a new branch, but that is no longer the
   case.  It is a short-hand for "git branch --list <foo>" now.

 * "git push" into refs/tags/* hierarchy is rejected without getting
   forced, but "git fetch" (misguidedly) used the "fast forwarding"
   rule used for the refs/heads/* hierarchy; this has been corrected,
   which means some fetches of tags that did not fail with older
   version of Git will fail without "--force" with this version.

 * "git help -a" now gives verbose output (same as "git help -av").
   Those who want the old output may say "git help --no-verbose -a"..

 * "git cpn --help", when "cpn" is an alias to, say, "cherry-pick -n",
   reported only the alias expansion of "cpn" in earlier versions of
   Git.  It now runs "git cherry-pick --help" to show the manual page
   of the command, while sending the alias expansion to the standard
   error stream.

 * "git send-email" learned to grab address-looking string on any
   trailer whose name ends with "-by". This is a backward-incompatible
   change.  Adding "--suppress-cc=misc-by" on the command line, or
   setting sendemail.suppresscc configuration variable to "misc-by",
   can be used to disable this behaviour.


Updates since v2.19
-------------------

UI, Workflows & Features

 * Running "git clone" against a project that contain two files with
   pathnames that differ only in cases on a case insensitive
   filesystem would result in one of the files lost because the
   underlying filesystem is incapable of holding both at the same
   time.  An attempt is made to detect such a case and warn.

 * "git checkout -b newbranch [HEAD]" should not have to do as much as
   checking out a commit different from HEAD.  An attempt is made to
   optimize this special case.

 * "git rev-list --stdin </dev/null" used to be an error; it now shows
   no output without an error.  "git rev-list --stdin --default HEAD"
   still falls back to the given default when nothing is given on the
   standard input.

 * Lift code from GitHub to restrict delta computation so that an
   object that exists in one fork is not made into a delta against
   another object that does not appear in the same forked repository.

 * "git format-patch" learned new "--interdiff" and "--range-diff"
   options to explain the difference between this version and the
   previous attempt in the cover letter (or after the three-dashes as
   a comment).

 * "git mailinfo" used in "git am" learned to make a best-effort
   recovery of a patch corrupted by MUA that sends text/plain with
   format=flawed option.
   (merge 3aa4d81f88 rs/mailinfo-format-flowed later to maint).

 * The rules used by "git push" and "git fetch" to determine if a ref
   can or cannot be updated were inconsistent; specifically, fetching
   to update existing tags were allowed even though tags are supposed
   to be unmoving anchoring points.  "git fetch" was taught to forbid
   updates to existing tags without the "--force" option.

 * "git multi-pack-index" learned to detect corruption in the .midx
   file it uses, and this feature has been integrated into "git fsck".

 * Generation of (experimental) commit-graph files have so far been
   fairly silent, even though it takes noticeable amount of time in a
   meaningfully large repository.  The users will now see progress
   output.

 * The minimum version of Windows supported by Windows port of Git is
   now set to Vista.

 * The completion script (in contrib/) learned to complete a handful of
   options "git stash list" command takes.

 * The completion script (in contrib/) learned that "git fetch
   --multiple" only takes remote names as arguments and no refspecs.

 * "git status" learns to show progress bar when refreshing the index
   takes a long time.
   (merge ae9af12287 nd/status-refresh-progress later to maint).

 * "git help -a" and "git help -av" give different pieces of
   information, and generally the "verbose" version is more friendly
   to the new users.  "git help -a" by default now uses the more
   verbose output (with "--no-verbose", you can go back to the
   original).  Also "git help -av" now lists aliases and external
   commands, which it did not used to.

 * Unlike "grep", "git grep" by default recurses to the whole tree.
   The command learned "git grep --recursive" option, so that "git
   grep --no-recursive" can serve as a synonym to setting the
   max-depth to 0.

 * When pushing into a repository that borrows its objects from an
   alternate object store, "git receive-pack" that responds to the
   push request on the other side lists the tips of refs in the
   alternate to reduce the amount of objects transferred.  This
   sometimes is detrimental when the number of refs in the alternate
   is absurdly large, in which case the bandwidth saved in potentially
   fewer objects transferred is wasted in excessively large ref
   advertisement.  The alternate refs that are advertised are now
   configurable with a pair of configuration variables.

 * "git cmd --help" when "cmd" is aliased used to only say "cmd is
   aliased to ...".  Now it shows that to the standard error stream
   and runs "git $cmd --help" where $cmd is the first word of the
   alias expansion.

 * The documentation of "git gc" has been updated to mention that it
   is no longer limited to "pruning away crufts" but also updates
   ancillary files like commit-graph as a part of repository
   optimization.

 * "git p4 unshelve" improvements.

 * The logic to select the default user name and e-mail on Windows has
   been improved.
   (merge 501afcb8b0 js/mingw-default-ident later to maint).

 * The "rev-list --filter" feature learned to exclude all trees via
   "tree:0" filter.

 * "git send-email" learned to grab address-looking string on any
   trailer whose name ends with "-by"; --suppress-cc=misc-by on the
   command line, or setting sendemail.suppresscc configuration
   variable to "misc-by", can be used to disable this behaviour.

 * Developer builds now uses -Wunused-function compilation option.

 * One of our CI tests to run with "unusual/experimental/random"
   settings now also uses commit-graph and midx.

 * "git mergetool" learned to take the "--[no-]gui" option, just like
   "git difftool" does.

 * "git rebase -i" learned a new insn, 'break', that the user can
   insert in the to-do list.  Upon hitting it, the command returns
   control back to the user.

 * New "--pretty=format:" placeholders %GF and %GP that show the GPG
   key fingerprints have been invented.

 * On platforms with recent cURL library, http.sslBackend configuration
   variable can be used to choose a different SSL backend at runtime.
   The Windows port uses this mechanism to switch between OpenSSL and
   Secure Channel while talking over the HTTPS protocol.

 * "git send-email" learned to disable SMTP authentication via the
   "--smtp-auth=none" option, even when the smtp username is given
   (which turns the authentication on by default).

 * A fourth class of configuration files (in addition to the
   traditional "system wide", "per user in the $HOME directory" and
   "per repository in the $GIT_DIR/config") has been introduced so
   that different worktrees that share the same repository (hence the
   same $GIT_DIR/config file) can use different customization.

 * A pattern with '**' that does not have a slash on either side used
   to be an invalid one, but the code now treats such double-asterisks
   the same way as two normal asterisks that happen to be adjacent to
   each other.
   (merge e5bbe09e88 nd/wildmatch-double-asterisk later to maint).

 * The "--no-patch" option, which can be used to get a high-level
   overview without the actual line-by-line patch difference shown, of
   the "range-diff" command was earlier broken, which has been
   corrected.

 * The recently merged "rebase in C" has an escape hatch to use the
   scripted version when necessary, but it hasn't been documented,
   which has been corrected.


Performance, Internal Implementation, Development Support etc.

 * When there are too many packfiles in a repository (which is not
   recommended), looking up an object in these would require
   consulting many pack .idx files; a new mechanism to have a single
   file that consolidates all of these .idx files is introduced.

 * "git submodule update" is getting rewritten piece-by-piece into C.

 * The code for computing history reachability has been shuffled,
   obtained a bunch of new tests to cover them, and then being
   improved.

 * The unpack_trees() API used in checking out a branch and merging
   walks one or more trees along with the index.  When the cache-tree
   in the index tells us that we are walking a tree whose flattened
   contents is known (i.e. matches a span in the index), as linearly
   scanning a span in the index is much more efficient than having to
   open tree objects recursively and listing their entries, the walk
   can be optimized, which has been done.

 * When creating a thin pack, which allows objects to be made into a
   delta against another object that is not in the resulting pack but
   is known to be present on the receiving end, the code learned to
   take advantage of the reachability bitmap; this allows the server
   to send a delta against a base beyond the "boundary" commit.

 * spatch transformation to replace boolean uses of !hashcmp() to
   newly introduced oideq() is added, and applied, to regain
   performance lost due to support of multiple hash algorithms.

 * Fix a bug in which the same path could be registered under multiple
   worktree entries if the path was missing (for instance, was removed
   manually).  Also, as a convenience, expand the number of cases in
   which --force is applicable.

 * Split Documentation/config.txt for easier maintenance.
   (merge 6014363f0b nd/config-split later to maint).

 * Test helper binaries clean-up.
   (merge c9a1f4161f nd/test-tool later to maint).

 * Various tests have been updated to make it easier to swap the
   hash function used for object identification.
   (merge ae0c89d41b bc/hash-independent-tests later to maint).

 * Update fsck.skipList implementation and documentation.
   (merge 371a655074 ab/fsck-skiplist later to maint).

 * An alias that expands to another alias has so far been forbidden,
   but now it is allowed to create such an alias.

 * Various test scripts have been updated for style and also correct
   handling of exit status of various commands.

 * "gc --auto" ended up calling exit(-1) upon error, which has been
   corrected to use exit(1).  Also the error reporting behaviour when
   daemonized has been updated to exit with zero status when stopping
   due to a previously discovered error (which implies there is no
   point running gc to improve the situation); we used to exit with
   failure in such a case.

 * Various codepaths in the core-ish part learned to work on an
   arbitrary in-core index structure, not necessarily the default
   instance "the_index".
   (merge b3c7eef9b0 nd/the-index later to maint).

 * Code clean-up in the internal machinery used by "git status" and
   "git commit --dry-run".
   (merge 73ba5d78b4 ss/wt-status-committable later to maint).

 * Some environment variables that control the runtime options of Git
   used during tests are getting renamed for consistency.
   (merge 4231d1ba99 bp/rename-test-env-var later to maint).

 * A pair of new extensions to the index file have been introduced.
   They allow the index file to be read in parallel for performance.

 * The oidset API was built on top of the oidmap API which in turn is
   on the hashmap API.  Replace the implementation to build on top of
   the khash API and gain performance.

 * Over some transports, fetching objects with an exact commit object
   name can be done without first seeing the ref advertisements.  The
   code has been optimized to exploit this.

 * In a partial clone that will lazily be hydrated from the
   originating repository, we generally want to avoid "does this
   object exist (locally)?" on objects that we deliberately omitted
   when we created the clone.  The cache-tree codepath (which is used
   to write a tree object out of the index) however insisted that the
   object exists, even for paths that are outside of the partial
   checkout area.  The code has been updated to avoid such a check.

 * To help developers, an EditorConfig file that attempts to follow
   the project convention has been added.
   (merge b548d698a0 bc/editorconfig later to maint).

 * The result of coverage test can be combined with "git blame" to
   check the test coverage of code introduced recently with a new
   'coverage-diff' tool (in contrib/).
   (merge 783faedd65 ds/coverage-diff later to maint).

 * An experiment to fuzz test a few areas, hopefully we can gain more
   coverage to various areas.

 * More codepaths are moving away from hardcoded hash sizes.

 * The way the Windows port figures out the current directory has been
   improved.

 * The way DLLs are loaded on the Windows port has been improved.

 * Some tests have been reorganized and renamed; "ls t/" now gives a
   better overview of what is tested for these scripts than before.

 * "git rebase" and "git rebase -i" have been reimplemented in C.

 * Windows port learned to use nano-second resolution file timestamps.

 * The overly large Documentation/config.txt file have been split into
   million little pieces.  This potentially allows each individual piece
   included into the manual page of the command it affects more easily.

 * Replace three string-list instances used as look-up tables in "git
   fetch" with hashmaps.

 * Unify code to read the author-script used in "git am" and the
   commands that use the sequencer machinery, e.g. "git rebase -i".

 * In preparation to the day when we can deprecate and remove the
   "rebase -p", make sure we can skip and later remove tests for
   it.

 * The history traversal used to implement the tag-following has been
   optimized by introducing a new helper.

 * The helper function to refresh the cached stat information in the
   in-core index has learned to perform the lstat() part of the
   operation in parallel on multi-core platforms.

 * The code to traverse objects for reachability, used to decide what
   objects are unreferenced and expendable, have been taught to also
   consider per-worktree refs of other worktrees as starting points to
   prevent data loss.

 * "git add" needs to internally run "diff-files" equivalent, and the
   codepath learned the same optimization as "diff-files" has to run
   lstat(2) in parallel to find which paths have been updated in the
   working tree.

 * The procedure to install dependencies before testing at Travis CI
   is getting revamped for both simplicity and flexibility, taking
   advantage of the recent move to the vm-based environment.

 * The support for format-patch (and send-email) by the command-line
   completion script (in contrib/) has been simplified a bit.

 * The revision walker machinery learned to take advantage of the
   commit generation numbers stored in the commit-graph file.

 * The codebase has been cleaned up to reduce "#ifndef NO_PTHREADS".

 * The way -lcurl library gets linked has been simplified by taking
   advantage of the fact that we can just ask curl-config command how.

 * Various functions have been audited for "-Wunused-parameter" warnings
   and bugs in them got fixed.

 * A sanity check for start-up sequence has been added in the config
   API codepath.

 * The build procedure to link for fuzzing test has been made
   customizable with a new Makefile variable.

 * The way "git rebase" parses and forwards the command line options
   meant for underlying "git am" has been revamped, which fixed for
   options with parameters that were not passed correctly.

 * Our testing framework uses a special i18n "poisoned localization"
   feature to find messages that ought to stay constant but are
   incorrectly marked to be translated.  This feature has been made
   into a runtime option (it used to be a compile-time option).

 * "git push" used to check ambiguities between object-names and
   refnames while processing the list of refs' old and new values,
   which was unnecessary (as it knew that it is feeding raw object
   names).  This has been optimized out.

 * The xcurl_off_t() helper function is used to cast size_t to
   curl_off_t, but some compilers gave warnings against the code to
   ensure the casting is done without wraparound, when size_t is
   narrower than curl_off_t.  This warning has been squelched.

 * Code preparation to replace ulong vars with size_t vars where
   appropriate continues.

 * The "test installed Git" mode of our test suite has been updated to
   work better.

 * A coding convention around the Coccinelle semantic patches to have
   two classes to ease code migration process has been proposed and
   its support has been added to the Makefile.


Fixes since v2.19
-----------------

 * "git interpret-trailers" and its underlying machinery had a buggy
   code that attempted to ignore patch text after commit log message,
   which triggered in various codepaths that will always get the log
   message alone and never get such an input.
   (merge 66e83d9b41 jk/trailer-fixes later to maint).

 * Malformed or crafted data in packstream can make our code attempt
   to read or write past the allocated buffer and abort, instead of
   reporting an error, which has been fixed.

 * "git rebase -i" did not clear the state files correctly when a run
   of "squash/fixup" is aborted and then the user manually amended the
   commit instead, which has been corrected.
   (merge 10d2f35436 js/rebase-i-autosquash-fix later to maint).

 * When fsmonitor is in use, after operation on submodules updates
   .gitmodules, we lost track of the fact that we did so and relied on
   stale fsmonitor data.
   (merge 43f1180814 bp/mv-submodules-with-fsmonitor later to maint).

 * Fix for a long-standing bug that leaves the index file corrupt when
   it shrinks during a partial commit.
   (merge 6c003d6ffb jk/reopen-tempfile-truncate later to maint).

 * Further fix for O_APPEND emulation on Windows
   (merge eeaf7ddac7 js/mingw-o-append later to maint).

 * A corner case bugfix in "git rerere" code.
   (merge ad2bf0d9b4 en/rerere-multi-stage-1-fix later to maint).

 * "git add ':(attr:foo)'" is not supported and is supposed to be
   rejected while the command line arguments are parsed, but we fail
   to reject such a command line upfront.
   (merge 84d938b732 nd/attr-pathspec-fix later to maint).

 * Recent update broke the reachability algorithm when refs (e.g.
   tags) that point at objects that are not commit were involved,
   which has been fixed.

 * "git rebase" etc. in Git 2.19 fails to abort when given an empty
   commit log message as result of editing, which has been corrected.
   (merge a3ec9eaf38 en/sequencer-empty-edit-result-aborts later to maint).

 * The code to backfill objects in lazily cloned repository did not
   work correctly, which has been corrected.
   (merge e68302011c jt/lazy-object-fetch-fix later to maint).

 * Update error messages given by "git remote" and make them consistent.
   (merge 5025425dff ms/remote-error-message-update later to maint).

 * "git update-ref" learned to make both "--no-deref" and "--stdin"
   work at the same time.
   (merge d345e9fbe7 en/update-ref-no-deref-stdin later to maint).

 * Recently added "range-diff" had a corner-case bug to cause it
   segfault, which has been corrected.
   (merge e467a90c7a tg/range-diff-corner-case-fix later to maint).

 * The recently introduced commit-graph auxiliary data is incompatible
   with mechanisms such as replace & grafts that "breaks" immutable
   nature of the object reference relationship.  Disable optimizations
   based on its use (and updating existing commit-graph) when these
   incompatible features are in use in the repository.
   (merge 829a321569 ds/commit-graph-with-grafts later to maint).

 * The mailmap file update.
   (merge 255eb03edf jn/mailmap-update later to maint).

 * The code in "git status" sometimes hit an assertion failure.  This
   was caused by a structure that was reused without cleaning the data
   used for the first run, which has been corrected.
   (merge 3e73cc62c0 en/status-multiple-renames-to-the-same-target-fix later to maint).

 * "git fetch $repo $object" in a partial clone did not correctly
   fetch the asked-for object that is referenced by an object in
   promisor packfile, which has been fixed.

 * A corner-case bugfix.
   (merge c5cbb27cb5 sm/show-superproject-while-conflicted later to maint).

 * Various fixes to "diff --color-moved-ws".

 * A partial clone that is configured to lazily fetch missing objects
   will on-demand issue a "git fetch" request to the originating
   repository to fill not-yet-obtained objects.  The request has been
   optimized for requesting a tree object (and not the leaf blob
   objects contained in it) by telling the originating repository that
   no blobs are needed.
   (merge 4c7f9567ea jt/non-blob-lazy-fetch later to maint).

 * The codepath to support the experimental split-index mode had
   remaining "racily clean" issues fixed.
   (merge 4c490f3d32 sg/split-index-racefix later to maint).

 * "git log --graph" showing an octopus merge sometimes miscounted the
   number of display columns it is consuming to show the merge and its
   parent commits, which has been corrected.
   (merge 04005834ed np/log-graph-octopus-fix later to maint).

 * "git range-diff" did not work well when the compared ranges had
   changes in submodules and the "--submodule=log" was used.

 * The implementation of run_command() API on the UNIX platforms had a
   bug that caused a command not on $PATH to be found in the current
   directory.
   (merge f67b980771 jk/run-command-notdot later to maint).

 * A mutex used in "git pack-objects" were not correctly initialized
   and this caused "git repack" to dump core on Windows.
   (merge 34204c8166 js/pack-objects-mutex-init-fix later to maint).

 * Under certain circumstances, "git diff D:/a/b/c D:/a/b/d" on
   Windows would strip initial parts from the paths because they
   were not recognized as absolute, which has been corrected.
   (merge ffd04e92e2 js/diff-notice-has-drive-prefix later to maint).

 * The receive.denyCurrentBranch=updateInstead codepath kicked in even
   when the push should have been rejected due to other reasons, such
   as it does not fast-forward or the update-hook rejects it, which
   has been corrected.
   (merge b072a25fad jc/receive-deny-current-branch-fix later to maint).

 * The logic to determine the archive type "git archive" uses did not
   correctly kick in for "git archive --remote", which has been
   corrected.

 * "git repack" in a shallow clone did not correctly update the
   shallow points in the repository, leading to a repository that
   does not pass fsck.
   (merge 5dcfbf564c js/shallow-and-fetch-prune later to maint).

 * Some codepaths failed to form a proper URL when .gitmodules record
   the URL to a submodule repository as relative to the repository of
   superproject, which has been corrected.
   (merge e0a862fdaf sb/submodule-url-to-absolute later to maint).

 * "git fetch" over protocol v2 into a shallow repository failed to
   fetch full history behind a new tip of history that was diverged
   before the cut-off point of the history that was previously fetched
   shallowly.

 * The command line completion machinery (in contrib/) has been
   updated to allow the completion script to tweak the list of options
   that are reported by the parse-options machinery correctly.
   (merge 276b49ff34 nd/completion-negation later to maint).

 * Operations on promisor objects make sense in the context of only a
   small subset of the commands that internally use the revisions
   machinery, but the "--exclude-promisor-objects" option were taken
   and led to nonsense results by commands like "log", to which it
   didn't make much sense.  This has been corrected.
   (merge 669b1d2aae md/exclude-promisor-objects-fix later to maint).

 * The "container" mode of TravisCI is going away.  Our .travis.yml
   file is getting prepared for the transition.
   (merge 32ee384be8 ss/travis-ci-force-vm-mode later to maint).

 * Our test scripts can now take the '-V' option as a synonym for the
   '--verbose-log' option.
   (merge a5f52c6dab sg/test-verbose-log later to maint).

 * A regression in Git 2.12 era made "git fsck" fall into an infinite
   loop while processing truncated loose objects.
   (merge 18ad13e5b2 jk/detect-truncated-zlib-input later to maint).

 * "git ls-remote $there foo" was broken by recent update for the
   protocol v2 and stopped showing refs that match 'foo' that are not
   refs/{heads,tags}/foo, which has been fixed.
   (merge 6a139cdd74 jk/proto-v2-ref-prefix-fix later to maint).

 * Additional comment on a tricky piece of code to help developers.
   (merge 0afbe3e806 jk/stream-pack-non-delta-clarification later to maint).

 * A couple of tests used to leave the repository in a state that is
   deliberately corrupt, which have been corrected.
   (merge aa984dbe5e ab/pack-tests-cleanup later to maint).

 * The submodule support has been updated to read from the blob at
   HEAD:.gitmodules when the .gitmodules file is missing from the
   working tree.
   (merge 2b1257e463 ao/submodule-wo-gitmodules-checked-out later to maint).

 * "git fetch" was a bit loose in parsing responses from the other side
   when talking over the protocol v2.

 * "git rev-parse --exclude=* --branches --branches"  (i.e. first
   saying "add only things that do not match '*' out of all branches"
   and then adding all branches, without any exclusion this time")
   worked as expected, but "--exclude=* --all --all" did not work the
   same way, which has been fixed.
   (merge 5221048092 ag/rev-parse-all-exclude-fix later to maint).

 * "git send-email --transfer-encoding=..." in recent versions of Git
   sometimes produced an empty "Content-Transfer-Encoding:" header,
   which has been corrected.
   (merge 3c88e46f1a al/send-email-auto-cte-fixup later to maint).

 * The interface into "xdiff" library used to discover the offset and
   size of a generated patch hunk by first formatting it into the
   textual hunk header "@@ -n,m +k,l @@" and then parsing the numbers
   out.  A new interface has been introduced to allow callers a more
   direct access to them.
   (merge 5eade0746e jk/xdiff-interface later to maint).

 * Pathspec matching against a tree object were buggy when negative
   pathspec elements were involved, which has been fixed.
   (merge b7845cebc0 nd/tree-walk-path-exclusion later to maint).

 * "git merge" and "git pull" that merges into an unborn branch used
   to completely ignore "--verify-signatures", which has been
   corrected.
   (merge 01a31f3bca jk/verify-sig-merge-into-void later to maint).

 * "git rebase --autostash" did not correctly re-attach the HEAD at times.

 * "rev-parse --exclude=<pattern> --branches=<pattern>" etc. did not
   quite work, which has been corrected.
   (merge 9ab9b5df0e ra/rev-parse-exclude-glob later to maint).

 * When editing a patch in a "git add -i" session, a hunk could be
   made to no-op.  The "git apply" program used to reject a patch with
   such a no-op hunk to catch user mistakes, but it is now updated to
   explicitly allow a no-op hunk in an edited patch.
   (merge 22cb3835b9 js/apply-recount-allow-noop later to maint).

 * The URL to an MSDN page in a comment has been updated.
   (merge 2ef2ae2917 js/mingw-msdn-url later to maint).

 * "git ls-remote --sort=<thing>" can feed an object that is not yet
   available into the comparison machinery and segfault, which has
   been corrected to check such a request upfront and reject it.

 * When "git bundle" aborts due to an empty commit ranges
   (i.e. resulting in an empty pack), it left a file descriptor to an
   lockfile open, which resulted in leftover lockfile on Windows where
   you cannot remove a file with an open file descriptor.  This has
   been corrected.
   (merge 2c8ee1f53c jk/close-duped-fd-before-unlock-for-bundle later to maint).

 * "git format-patch --stat=<width>" can be used to specify the width
   used by the diffstat (shown in the cover letter).
   (merge 284aeb7e60 nd/format-patch-cover-letter-stat-width later to maint).

 * The way .git/index and .git/sharedindex* files were initially
   created gave these files different perm bits until they were
   adjusted for shared repository settings.  This was made consistent.
   (merge c9d6c78870 cc/shared-index-permbits later to maint).

 * Code cleanup, docfix, build fix, etc.
   (merge 96a7501aad ts/doc-build-manpage-xsl-quietly later to maint).
   (merge b9b07efdb2 tg/conflict-marker-size later to maint).
   (merge fa0aeea770 sg/doc-trace-appends later to maint).
   (merge d64324cb60 tb/void-check-attr later to maint).
   (merge c3b9bc94b9 en/double-semicolon-fix later to maint).
   (merge 79336116f5 sg/t3701-tighten-trace later to maint).
   (merge 801fa63a90 jk/dev-build-format-security later to maint).
   (merge 0597dd62ba sb/string-list-remove-unused later to maint).
   (merge db2d36fad8 bw/protocol-v2 later to maint).
   (merge 456d7cd3a9 sg/split-index-test later to maint).
   (merge 7b6057c852 tq/refs-internal-comment-fix later to maint).
   (merge 29e8dc50ad tg/t5551-with-curl-7.61.1 later to maint).
   (merge 55f6bce2c9 fe/doc-updates later to maint).
   (merge 7987d2232d jk/check-everything-connected-is-long-gone later to maint).
   (merge 4ba3c9be47 dz/credential-doc-url-matching-rules later to maint).
   (merge 4c399442f7 ma/commit-graph-docs later to maint).
   (merge fc0503b04e ma/t1400-undebug-test later to maint).
   (merge e56b53553a nd/packobjectshook-doc-fix later to maint).
   (merge c56170a0c4 ma/mailing-list-address-in-git-help later to maint).
   (merge 6e8fc70fce rs/sequencer-oidset-insert-avoids-dups later to maint).
   (merge ad0b8f9575 mw/doc-typofixes later to maint).
   (merge d9f079ad1a jc/how-to-document-api later to maint).
   (merge b1492bf315 ma/t7005-bash-workaround later to maint).
   (merge ac1f98a0df du/rev-parse-is-plumbing later to maint).
   (merge ca8ed443a5 mm/doc-no-dashed-git later to maint).
   (merge ce366a8144 du/get-tar-commit-id-is-plumbing later to maint).
   (merge 61018fe9e0 du/cherry-is-plumbing later to maint).
   (merge c7e5fe79b9 sb/strbuf-h-update later to maint).
   (merge 8d2008196b tq/branch-create-wo-branch-get later to maint).
   (merge 2e3c894f4b tq/branch-style-fix later to maint).
   (merge c5d844af9c sg/doc-show-branch-typofix later to maint).
   (merge 081d91618b ah/doc-updates later to maint).
   (merge b84c783882 jc/cocci-preincr later to maint).
   (merge 5e495f8122 uk/merge-subtree-doc-update later to maint).
   (merge aaaa881822 jk/uploadpack-packobjectshook-fix later to maint).
   (merge 3063477445 tb/char-may-be-unsigned later to maint).
   (merge 8c64bc9420 sg/test-rebase-editor-fix later to maint).
   (merge 71571cd7d6 ma/sequencer-do-reset-saner-loop-termination later to maint).
   (merge 9a4cb8781e cb/notes-freeing-always-null-fix later to maint).

----------------------------------------------------------------

Changes since v2.19.0 are as follows:

Aaron Lindsay (1):
      send-email: avoid empty transfer encoding header

Alban Gruin (21):
      sequencer: make three functions and an enum from sequencer.c public
      rebase -i: rewrite append_todo_help() in C
      editor: add a function to launch the sequence editor
      rebase -i: rewrite the edit-todo functionality in C
      sequencer: add a new function to silence a command, except if it fails
      rebase -i: rewrite setup_reflog_action() in C
      rebase -i: rewrite checkout_onto() in C
      sequencer: refactor append_todo_help() to write its message to a buffer
      sequencer: change the way skip_unnecessary_picks() returns its result
      t3404: todo list with commented-out commands only aborts
      rebase -i: rewrite complete_action() in C
      rebase -i: remove unused modes and functions
      rebase -i: implement the logic to initialize $revisions in C
      rebase -i: rewrite the rest of init_revisions_and_shortrevisions() in C
      rebase -i: rewrite write_basic_state() in C
      rebase -i: rewrite init_basic_state() in C
      rebase -i: implement the main part of interactive rebase as a builtin
      rebase--interactive2: rewrite the submodes of interactive rebase in C
      rebase -i: remove git-rebase--interactive.sh
      rebase -i: move rebase--helper modes to rebase--interactive
      p3400: replace calls to `git checkout -b' by `git checkout -B'

Alexander Pyhalov (1):
      t7005-editor: quote filename to fix whitespace-issue

Andreas Gruenbacher (1):
      rev-parse: clear --exclude list after 'git rev-parse --all'

Andreas Heiduk (6):
      doc: clarify boundaries of 'git worktree list --porcelain'
      doc: fix ASCII art tab spacing
      doc: fix inappropriate monospace formatting
      doc: fix descripion for 'git tag --format'
      doc: fix indentation of listing blocks in gitweb.conf.txt
      doc: fix formatting in git-update-ref

Anton Serbulov (1):
      mingw: fix getcwd when the parent directory cannot be queried

Antonio Ospite (10):
      submodule: add a print_config_from_gitmodules() helper
      submodule: factor out a config_set_in_gitmodules_file_gently function
      t7411: merge tests 5 and 6
      t7411: be nicer to future tests and really clean things up
      submodule--helper: add a new 'config' subcommand
      submodule: use the 'submodule--helper config' command
      t7506: clean up .gitmodules properly before setting up new scenario
      submodule: add a helper to check if it is safe to write to .gitmodules
      submodule: support reading .gitmodules when it's not in the working tree
      t/helper: add test-submodule-nested-repo-config

Ben Peart (19):
      checkout: optimize "git checkout -b <new_branch>"
      git-mv: allow submodules and fsmonitor to work together
      t/README: correct spelling of "uncommon"
      preload-index: use git_env_bool() not getenv() for customization
      fsmonitor: update GIT_TEST_FSMONITOR support
      read-cache: update TEST_GIT_INDEX_VERSION support
      preload-index: update GIT_FORCE_PRELOAD_TEST support
      read-cache: clean up casting and byte decoding
      eoie: add End of Index Entry (EOIE) extension
      config: add new index.threads config setting
      read-cache: load cache extensions on a worker thread
      ieot: add Index Entry Offset Table (IEOT) extension
      read-cache: load cache entries on worker threads
      reset: don't compute unstaged changes after reset when --quiet
      reset: add new reset.quiet config setting
      reset: warn when refresh_index() takes more than 2 seconds
      speed up refresh_index() by utilizing preload_index()
      add: speed up cmd_add() by utilizing read_cache_preload()
      refresh_index: remove unnecessary calls to preload_index()

Brandon Williams (1):
      config: document value 2 for protocol.version

Brendan Forster (1):
      http: add support for disabling SSL revocation checks in cURL

Carlo Marcelo Arenas Belón (8):
      unpack-trees: avoid dead store for struct progress
      multi-pack-index: avoid dead store for struct progress
      read-cache: use of memory after it is freed
      commit-slabs: move MAYBE_UNUSED out
      khash: silence -Wunused-function for delta-islands
      compat: make sure git_mmap is not expected to write
      sequencer: cleanup for gcc warning in non developer mode
      builtin/notes: remove unnecessary free

Christian Couder (3):
      pack-objects: refactor code into compute_layer_order()
      pack-objects: move tree_depth into 'struct packing_data'
      pack-objects: move 'layer' into 'struct packing_data'

Christian Hesse (2):
      subtree: add build targets 'man' and 'html'
      subtree: make install targets depend on build targets

Daniels Umanovskis (3):
      doc: move git-rev-parse from porcelain to plumbing
      doc: move git-get-tar-commit-id to plumbing
      doc: move git-cherry to plumbing

David Zych (1):
      doc: clarify gitcredentials path component matching

Denton Liu (3):
      mergetool: accept -g/--[no-]gui as arguments
      completion: support `git mergetool --[no-]gui`
      doc: document diff/merge.guitool config keys

Derrick Stolee (93):
      multi-pack-index: add design document
      multi-pack-index: add format details
      multi-pack-index: add builtin
      multi-pack-index: add 'write' verb
      midx: write header information to lockfile
      multi-pack-index: load into memory
      t5319: expand test data
      packfile: generalize pack directory list
      multi-pack-index: read packfile list
      multi-pack-index: write pack names in chunk
      midx: read pack names into array
      midx: sort and deduplicate objects from packfiles
      midx: write object ids in a chunk
      midx: write object id fanout chunk
      midx: write object offsets
      config: create core.multiPackIndex setting
      midx: read objects from multi-pack-index
      midx: use midx in abbreviation calculations
      midx: use existing midx when writing new one
      midx: use midx in approximate_object_count
      midx: prevent duplicate packfile loads
      packfile: skip loading index if in multi-pack-index
      midx: clear midx on repack
      commit-reach: move walk methods from commit.c
      commit.h: remove method declarations
      commit-reach: move ref_newer from remote.c
      commit-reach: move commit_contains from ref-filter
      upload-pack: make reachable() more generic
      upload-pack: refactor ok_to_give_up()
      upload-pack: generalize commit date cutoff
      commit-reach: move can_all_from_reach_with_flags
      test-reach: create new test tool for ref_newer
      test-reach: test in_merge_bases
      test-reach: test is_descendant_of
      test-reach: test get_merge_bases_many
      test-reach: test reduce_heads
      test-reach: test can_all_from_reach_with_flags
      test-reach: test commit_contains
      commit-reach: replace ref_newer logic
      commit-reach: make can_all_from_reach... linear
      commit-reach: use can_all_from_reach
      multi-pack-index: provide more helpful usage info
      multi-pack-index: store local property
      midx: mark bad packed objects
      midx: stop reporting garbage
      midx: fix bug that skips midx with alternates
      packfile: add all_packs list
      treewide: use get_all_packs
      midx: test a few commands that use get_all_packs
      pack-objects: consider packs in multi-pack-index
      commit-graph: update design document
      test-repository: properly init repo
      commit-graph: not compatible with replace objects
      commit-graph: not compatible with grafts
      commit-graph: not compatible with uninitialized repo
      commit-graph: close_commit_graph before shallow walk
      commit-graph: define GIT_TEST_COMMIT_GRAPH
      t3206-range-diff.sh: cover single-patch case
      t5318: use test_oid for HASH_LEN
      multi-pack-index: add 'verify' verb
      multi-pack-index: verify bad header
      multi-pack-index: verify corrupt chunk lookup table
      multi-pack-index: verify packname order
      multi-pack-index: verify missing pack
      multi-pack-index: verify oid fanout order
      multi-pack-index: verify oid lookup order
      multi-pack-index: fix 32-bit vs 64-bit size check
      multi-pack-index: verify object offsets
      multi-pack-index: report progress during 'verify'
      fsck: verify multi-pack-index
      commit-reach: properly peel tags
      commit-reach: fix memory and flag leaks
      commit-reach: cleanups in can_all_from_reach...
      commit-graph: clean up leaked memory during write
      commit-graph: reduce initial oid allocation
      midx: fix broken free() in close_midx()
      contrib: add coverage-diff script
      ci: add optional test variables
      commit-reach: fix first-parent heuristic
      midx: close multi-pack-index on repack
      multi-pack-index: define GIT_TEST_MULTI_PACK_INDEX
      packfile: close multi-pack-index in close_all_packs
      prio-queue: add 'peek' operation
      test-reach: add run_three_modes method
      test-reach: add rev-list tests
      revision.c: begin refactoring --topo-order logic
      commit/revisions: bookkeeping before refactoring
      revision.c: generation-based topo-order algorithm
      t6012: make rev-list tests more interesting
      commit-reach: implement get_reachable_subset
      test-reach: test get_reachable_subset
      remote: make add_missing_tags() linear
      pack-objects: ignore ambiguous object warnings

Elijah Newren (14):
      Remove superfluous trailing semicolons
      t4200: demonstrate rerere segfault on specially crafted merge
      rerere: avoid buffer overrun
      update-ref: fix type of update_flags variable to match its usage
      update-ref: allow --no-deref with --stdin
      sequencer: fix --allow-empty-message behavior, make it smarter
      merge-recursive: set paths correctly when three-way merging content
      merge-recursive: avoid wrapper function when unnecessary and wasteful
      merge-recursive: remove final remaining caller of merge_file_one()
      merge-recursive: rename merge_file_1() and merge_content()
      commit: fix erroneous BUG, 'multiple renames on the same target? how?'
      merge-recursive: improve auto-merging messages with path collisions
      merge-recursive: avoid showing conflicts with merge branch before HEAD
      fsck: move fsck_head_link() to get_default_heads() to avoid some globals

Eric Sunshine (26):
      format-patch: allow additional generated content in make_cover_letter()
      format-patch: add --interdiff option to embed diff in cover letter
      format-patch: teach --interdiff to respect -v/--reroll-count
      interdiff: teach show_interdiff() to indent interdiff
      log-tree: show_log: make commentary block delimiting reusable
      format-patch: allow --interdiff to apply to a lone-patch
      range-diff: respect diff_option.file rather than assuming 'stdout'
      range-diff: publish default creation factor
      range-diff: relieve callers of low-level configuration burden
      format-patch: add --range-diff option to embed diff in cover letter
      format-patch: extend --range-diff to accept revision range
      format-patch: teach --range-diff to respect -v/--reroll-count
      format-patch: add --creation-factor tweak for --range-diff
      format-patch: allow --range-diff to apply to a lone-patch
      worktree: don't die() in library function find_worktree()
      worktree: move delete_git_dir() earlier in file for upcoming new callers
      worktree: generalize delete_git_dir() to reduce code duplication
      worktree: prepare for more checks of whether path can become worktree
      worktree: disallow adding same path multiple times
      worktree: teach 'add' to respect --force for registered but missing path
      worktree: teach 'move' to override lock when --force given twice
      worktree: teach 'remove' to override lock when --force given twice
      worktree: delete .git/worktrees if empty after 'remove'
      doc-diff: fix non-portable 'man' invocation
      doc-diff: add --clean mode to remove temporary working gunk
      doc/Makefile: drop doc-diff worktree and temporary files on "make clean"

Frederick Eaton (3):
      git-archimport.1: specify what kind of Arch we're talking about
      git-column.1: clarify initial description, provide examples
      git-describe.1: clarify that "human readable" is also git-readable

James Knight (1):
      build: link with curl-defined linker flags

Jann Horn (2):
      patch-delta: fix oob read
      patch-delta: consistently report corruption

Jeff Hostetler (2):
      t0051: test GIT_TRACE to a windows named pipe
      mingw: fix mingw_open_append to work with named pipes

Jeff King (97):
      branch: make "-l" a synonym for "--list"
      Add delta-islands.{c,h}
      pack-objects: add delta-islands support
      repack: add delta-islands support
      t5320: tests for delta islands
      t/perf: factor boilerplate out of test_perf
      t/perf: factor out percent calculations
      t/perf: add infrastructure for measuring sizes
      t/perf: add perf tests for fetches from a bitmapped server
      pack-bitmap: save "have" bitmap from walk
      pack-objects: reuse on-disk deltas for thin "have" objects
      SubmittingPatches: mention doc-diff
      rev-list: make empty --stdin not an error
      trailer: use size_t for string offsets
      trailer: use size_t for iterating trailer list
      trailer: pass process_trailer_opts to trailer_info_get()
      interpret-trailers: tighten check for "---" patch boundary
      interpret-trailers: allow suppressing "---" divider
      pretty, ref-filter: format %(trailers) with no_divider option
      sequencer: ignore "---" divider when parsing trailers
      append_signoff: use size_t for string offsets
      coccinelle: use <...> for function exclusion
      introduce hasheq() and oideq()
      convert "oidcmp() == 0" to oideq()
      convert "hashcmp() == 0" to hasheq()
      convert "oidcmp() != 0" to "!oideq()"
      convert "hashcmp() != 0" to "!hasheq()"
      convert hashmap comparison functions to oideq()
      read-cache: use oideq() in ce_compare functions
      show_dirstat: simplify same-content check
      doc-diff: always use oids inside worktree
      test-delta: read input into a heap buffer
      t5303: test some corrupt deltas
      patch-delta: handle truncated copy parameters
      t5303: use printf to generate delta bases
      doc/git-branch: remove obsolete "-l" references
      bitmap_has_sha1_in_uninteresting(): drop BUG check
      t5310: test delta reuse with bitmaps
      traverse_bitmap_commit_list(): don't free result
      pack-bitmap: drop "loaded" flag
      reopen_tempfile(): truncate opened file
      doc-diff: force worktree add
      config.mak.dev: add -Wformat-security
      pack-objects: handle island check for "external" delta base
      receive-pack: update comment with check_everything_connected
      submodule--helper: use "--" to signal end of clone options
      submodule-config: ban submodule urls that start with dash
      submodule-config: ban submodule paths that start with a dash
      fsck: detect submodule urls starting with dash
      fsck: detect submodule paths starting with dash
      more oideq/hasheq conversions
      transport: drop refnames from for_each_alternate_ref
      test-tool: show tool list on error
      config.mak.dev: enable -Wunused-function
      run-command: mark path lookup errors with ENOENT
      t5410: use longer path for sample script
      upload-pack: fix broken if/else chain in config callback
      t1450: check large blob in trailing-garbage test
      check_stream_sha1(): handle input underflow
      cat-file: handle streaming failures consistently
      ls-remote: do not send ref prefixes for patterns
      ls-remote: pass heads/tags prefixes to transport
      read_istream_pack_non_delta(): document input handling
      xdiff: provide a separate emit callback for hunks
      xdiff-interface: provide a separate consume callback for hunks
      rev-list: handle flags for --indexed-objects
      approxidate: handle pending number for "specials"
      pathspec: handle non-terminated strings with :(attr)
      diff: avoid generating unused hunk header lines
      diff: discard hunk headers for patch-ids earlier
      diff: use hunk callback for word-diff
      combine-diff: use an xdiff hunk callback
      diff: convert --check to use a hunk callback
      range-diff: use a hunk callback
      xdiff-interface: drop parse_hunk_header()
      apply: mark include/exclude options as NONEG
      am: handle --no-patch-format option
      ls-files: mark exclude options as NONEG
      pack-objects: mark index-version option as NONEG
      cat-file: mark batch options with NONEG
      status: mark --find-renames option with NONEG
      format-patch: mark "--no-numbered" option with NONEG
      show-branch: mark --reflog option as NONEG
      tag: mark "--message" option with NONEG
      cat-file: report an error on multiple --batch options
      apply: return -1 from option callback instead of calling exit(1)
      parse-options: drop OPT_DATE()
      assert NOARG/NONEG behavior of parse-options callbacks
      midx: double-check large object write loop
      merge: extract verify_merge_signature() helper
      merge: handle --verify-signatures for unborn branch
      pull: handle --verify-signatures for unborn branch
      approxidate: fix NULL dereference in date_time()
      bundle: dup() output descriptor closer to point-of-use
      pack-objects: fix tree_depth and layer invariants
      pack-objects: zero-initialize tree_depth/layer arrays
      pack-objects: fix off-by-one in delta-island tree-depth computation

Johannes Schindelin (62):
      rebase -i --autosquash: demonstrate a problem skipping the last squash
      rebase -i: be careful to wrap up fixup/squash chains
      compat/poll: prepare for targeting Windows Vista
      mingw: set _WIN32_WINNT explicitly for Git for Windows
      mingw: bump the minimum Windows version to Vista
      builtin rebase: prepare for builtin rebase -i
      rebase -i: clarify what happens on a failed `exec`
      rebase -i: introduce the 'break' command
      getpwuid(mingw): initialize the structure only once
      getpwuid(mingw): provide a better default for the user name
      mingw: use domain information for default email
      http: add support for selecting SSL backends at runtime
      pack-objects: fix typo 'detla' -> 'delta'
      pack-objects (mingw): demonstrate a segmentation fault with large deltas
      pack-objects (mingw): initialize `packing_data` mutex in the correct spot
      rebase (autostash): avoid duplicate call to state_dir_path()
      rebase (autostash): store the full OID in <state-dir>/autostash
      rebase (autostash): use an explicit OID to apply the stash
      mingw: factor out code to set stat() data
      rebase --autostash: demonstrate a problem with dirty submodules
      rebase --autostash: fix issue with dirty submodules
      mingw: load system libraries the recommended way
      mingw: ensure `getcwd()` reports the correct case
      repack: point out a bug handling stale shallow info
      shallow: offer to prune only non-existing entries
      repack -ad: prune the list of shallow commits
      http: when using Secure Channel, ignore sslCAInfo by default
      t7800: fix quoting
      mingw: reencode environment variables on the fly (UTF-16 <-> UTF-8)
      config: rename `dummy` parameter to `cb` in git_default_config()
      config: allow for platform-specific core.* config settings
      config: move Windows-specific config settings into compat/mingw.c
      mingw: unset PERL5LIB by default
      mingw: fix isatty() after dup2()
      t3404: decouple some test cases from outcomes of previous test cases
      t3418: decouple test cases from a previous `rebase -p` test case
      tests: optionally skip `git rebase -p` tests
      Windows: force-recompile git.res for differing architectures
      built-in rebase: demonstrate regression with --autostash
      built-in rebase --autostash: leave the current branch alone if possible
      Update .mailmap
      rebase -r: demonstrate bug with conflicting merges
      rebase -r: do not write MERGE_HEAD unless needed
      rebase -i: include MERGE_HEAD into files to clean up
      built-in rebase --skip/--abort: clean up stale .git/<name> files
      status: rebase and merge can be in progress at the same time
      apply --recount: allow "no-op hunks"
      rebase: consolidate clean-up code before leaving reset_head()
      rebase: prepare reset_head() for more flags
      built-in rebase: reinstate `checkout -q` behavior where appropriate
      tests: fix GIT_TEST_INSTALLED's PATH to include t/helper/
      tests: respect GIT_TEST_INSTALLED when initializing repositories
      t/lib-gettext: test installed git-sh-i18n if GIT_TEST_INSTALLED is set
      mingw: use `CreateHardLink()` directly
      rebase: really just passthru the `git am` options
      rebase: validate -C<n> and --whitespace=<mode> parameters early
      config: report a bug if git_dir exists without commondir
      tests: do not require Git to be built when testing an installed Git
      tests: explicitly use `git.exe` on Windows
      mingw: replace an obsolete link with the superseding one
      legacy-rebase: backport -C<n> and --whitespace=<option> checks
      rebase: warn about the correct tree's OID

Johannes Sixt (3):
      diff: don't attempt to strip prefix from absolute Windows paths
      rebase -i: recognize short commands without arguments
      t3404-rebase-interactive: test abbreviated commands

Jonathan Nieder (9):
      gc: improve handling of errors reading gc.log
      gc: exit with status 128 on failure
      gc: do not return error for prior errors in daemonized mode
      commit-reach: correct accidental #include of C file
      mailmap: consistently normalize brian m. carlson's name
      git doc: direct bug reporters to mailing list archive
      eoie: default to not writing EOIE section
      ieot: default to not writing IEOT section
      index: make index.threads=true enable ieot and eoie

Jonathan Tan (15):
      fetch-object: unify fetch_object[s] functions
      fetch-object: set exact_oid when fetching
      connected: document connectivity in partial clones
      fetch: in partial clone, check presence of targets
      fetch-pack: avoid object flags if no_dependents
      fetch-pack: exclude blobs when lazy-fetching trees
      transport: allow skipping of ref listing
      transport: do not list refs if possible
      transport: list refs before fetch if necessary
      fetch: do not list refs if fetching only hashes
      cache-tree: skip some blob checks in partial clone
      upload-pack: make have_obj not global
      upload-pack: make want_obj not global
      upload-pack: clear flags before each v2 request
      fetch-pack: be more precise in parsing v2 response

Josh Steadmon (4):
      fuzz: add basic fuzz testing target.
      fuzz: add fuzz testing for packfile indices.
      archive: initialize archivers earlier
      Makefile: use FUZZ_CXXFLAGS for linking fuzzers

Joshua Watt (1):
      send-email: explicitly disable authentication

Junio C Hamano (34):
      Revert "doc/Makefile: drop doc-diff worktree and temporary files on "make clean""
      Initial batch post 2.19
      Second batch post 2.19
      Git 2.14.5
      Git 2.15.3
      Git 2.16.5
      Git 2.17.2
      Git 2.18.1
      Git 2.19.1
      t0000: do not get self-test disrupted by environment warnings
      CodingGuidelines: document the API in *.h files
      Declare that the next one will be named 2.20
      Third batch for 2.20
      rebase: fix typoes in error messages
      Fourth batch for 2.20
      Revert "subtree: make install targets depend on build targets"
      Fifth batch for 2.20
      receive: denyCurrentBranch=updateinstead should not blindly update
      cocci: simplify "if (++u > 1)" to "if (u++)"
      fsck: s/++i > 1/i++/
      http: give curl version warnings consistently
      Sixth batch for 2.20
      Seventh batch for 2.20
      fetch: replace string-list used as a look-up table with a hashmap
      rebase: apply cocci patch
      Eighth batch for 2.20
      Ninth batch for 2.20
      Makefile: ease dynamic-gettext-poison transition
      Tenth batch for 2.20
      Git 2.20-rc0
      RelNotes: name the release properly
      Prepare for 2.20-rc1
      Git 2.19.2
      Git 2.20-rc1

Karsten Blees (2):
      mingw: replace MSVCRT's fstat() with a Win32-based implementation
      mingw: implement nanosecond-precision file times

Loo Rong Jie (1):
      win32: replace pthread_cond_*() with much simpler code

Lucas De Marchi (1):
      range-diff: allow to diff files regardless of submodule config

Luke Diamand (3):
      git-p4: do not fail in verbose mode for missing 'fileSize' key
      git-p4: unshelve into refs/remotes/p4-unshelved, not refs/remotes/p4/unshelved
      git-p4: fully support unshelving changelists

Martin Ågren (9):
      Doc: use `--type=bool` instead of `--bool`
      git-config.txt: fix 'see: above' note
      git-commit-graph.txt: fix bullet lists
      git-commit-graph.txt: typeset more in monospace
      git-commit-graph.txt: refer to "*commit*-graph file"
      Doc: refer to the "commit-graph file" with dash
      t1400: drop debug `echo` to actually execute `test`
      builtin/commit-graph.c: UNLEAK variables
      sequencer: break out of loop explicitly

Matthew DeVore (19):
      list-objects: store common func args in struct
      list-objects: refactor to process_tree_contents
      list-objects: always parse trees gently
      t/README: reformat Do, Don't, Keep in mind lists
      Documentation: add shell guidelines
      tests: standardize pipe placement
      t/*: fix ordering of expected/observed arguments
      tests: don't swallow Git errors upstream of pipes
      t9109: don't swallow Git errors upstream of pipes
      tests: order arguments to git-rev-list properly
      rev-list: handle missing tree objects properly
      revision: mark non-user-given objects instead
      list-objects-filter: use BUG rather than die
      list-objects-filter-options: do not over-strbuf_init
      list-objects-filter: implement filter tree:0
      filter-trees: code clean-up of tests
      list-objects: support for skipping tree traversal
      Documentation/git-log.txt: do not show --exclude-promisor-objects
      exclude-promisor-objects: declare when option is allowed

Max Kirillov (1):
      http-backend test: make empty CONTENT_LENGTH test more realistic

Michael Witten (3):
      docs: typo: s/go/to/
      docs: graph: remove unnecessary `graph_update()' call
      docs: typo: s/isimilar/similar/

Michał Górny (6):
      gpg-interface.c: detect and reject multiple signatures on commits
      gpg-interface.c: use flags to determine key/signer info presence
      gpg-interface.c: support getting key fingerprint via %GF format
      gpg-interface.c: obtain primary key fingerprint as well
      t/t7510-signed-commit.sh: Add %GP to custom format checks
      t/t7510-signed-commit.sh: add signing subkey to Eris Discordia key

Mihir Mehta (1):
      doc: fix a typo and clarify a sentence

Nguyễn Thái Ngọc Duy (168):
      clone: report duplicate entries on case-insensitive filesystems
      trace.h: support nested performance tracing
      unpack-trees: add performance tracing
      unpack-trees: optimize walking same trees with cache-tree
      unpack-trees: reduce malloc in cache-tree walk
      unpack-trees: reuse (still valid) cache-tree from src_index
      unpack-trees: add missing cache invalidation
      cache-tree: verify valid cache-tree in the test suite
      Document update for nd/unpack-trees-with-cache-tree
      bisect.c: make show_list() build again
      t/helper: keep test-tool command list sorted
      t/helper: merge test-dump-untracked-cache into test-tool
      t/helper: merge test-pkt-line into test-tool
      t/helper: merge test-parse-options into test-tool
      t/helper: merge test-dump-fsmonitor into test-tool
      Makefile: add a hint about TEST_BUILTINS_OBJS
      config.txt: follow camelCase naming
      config.txt: move fetch part out to a separate file
      config.txt: move format part out to a separate file
      config.txt: move gitcvs part out to a separate file
      config.txt: move gui part out to a separate file
      config.txt: move pull part out to a separate file
      config.txt: move push part out to a separate file
      config.txt: move receive part out to a separate file
      config.txt: move sendemail part out to a separate file
      config.txt: move sequence.editor out of "core" part
      config.txt: move submodule part out to a separate file
      archive.c: remove implicit dependency the_repository
      status: show progress bar if refreshing the index takes too long
      add: do not accept pathspec magic 'attr'
      completion: support "git fetch --multiple"
      read-cache.c: remove 'const' from index_has_changes()
      diff.c: reduce implicit dependency on the_index
      combine-diff.c: remove implicit dependency on the_index
      blame.c: rename "repo" argument to "r"
      diff.c: remove the_index dependency in textconv() functions
      grep.c: remove implicit dependency on the_index
      diff.c: remove implicit dependency on the_index
      read-cache.c: remove implicit dependency on the_index
      diff-lib.c: remove implicit dependency on the_index
      ll-merge.c: remove implicit dependency on the_index
      merge-blobs.c: remove implicit dependency on the_index
      merge.c: remove implicit dependency on the_index
      patch-ids.c: remove implicit dependency on the_index
      sha1-file.c: remove implicit dependency on the_index
      rerere.c: remove implicit dependency on the_index
      userdiff.c: remove implicit dependency on the_index
      line-range.c: remove implicit dependency on the_index
      submodule.c: remove implicit dependency on the_index
      tree-diff.c: remove implicit dependency on the_index
      ws.c: remove implicit dependency on the_index
      revision.c: remove implicit dependency on the_index
      revision.c: reduce implicit dependency the_repository
      read-cache.c: optimize reading index format v4
      config.txt: correct the note about uploadpack.packObjectsHook
      help -a: improve and make --verbose default
      refs.c: indent with tabs, not spaces
      Add a place for (not) sharing stuff between worktrees
      submodule.c: remove some of the_repository references
      completion: fix __gitcomp_builtin no longer consider extra options
      t1300: extract and use test_cmp_config()
      worktree: add per-worktree config files
      refs: new ref types to make per-worktree refs visible to all worktrees
      revision.c: correct a parameter name
      revision.c: better error reporting on ref from different worktrees
      fsck: check HEAD and reflog from other worktrees
      reflog expire: cover reflog from all worktrees
      Update makefile in preparation for Documentation/config/*.txt
      config.txt: move advice.* to a separate file
      config.txt: move core.* to a separate file
      config.txt: move add.* to a separate file
      config.txt: move alias.* to a separate file
      config.txt: move am.* to a separate file
      config.txt: move apply.* to a separate file
      config.txt: move blame.* to a separate file
      config.txt: move branch.* to a separate file
      config.txt: move browser.* to a separate file
      config.txt: move checkout.* to a separate file
      config.txt: move clean.* to a separate file
      config.txt: move color.* to a separate file
      config.txt: move column.* to a separate file
      config.txt: move commit.* to a separate file
      config.txt: move credential.* to a separate file
      config.txt: move completion.* to a separate file
      config.txt: move diff-config.txt to config/
      config.txt: move difftool.* to a separate file
      config.txt: move fastimport.* to a separate file
      config.txt: move fetch-config.txt to config/
      config.txt: move filter.* to a separate file
      config.txt: move format-config.txt to config/
      config.txt: move fmt-merge-msg-config.txt to config/
      config.txt: move fsck.* to a separate file
      config.txt: move gc.* to a separate file
      config.txt: move gitcvs-config.txt to config/
      config.txt: move gitweb.* to a separate file
      config.txt: move grep.* to a separate file
      config.txt: move gpg.* to a separate file
      config.txt: move gui-config.txt to config/
      config.txt: move guitool.* to a separate file
      config.txt: move help.* to a separate file
      config.txt: move ssh.* to a separate file
      config.txt: move http.* to a separate file
      config.txt: move i18n.* to a separate file
      git-imap-send.txt: move imap.* to a separate file
      config.txt: move index.* to a separate file
      config.txt: move init.* to a separate file
      config.txt: move instaweb.* to a separate file
      config.txt: move interactive.* to a separate file
      config.txt: move log.* to a separate file
      config.txt: move mailinfo.* to a separate file
      config.txt: move mailmap.* to a separate file
      config.txt: move man.* to a separate file
      config.txt: move merge-config.txt to config/
      config.txt: move mergetool.* to a separate file
      config.txt: move notes.* to a separate file
      config.txt: move pack.* to a separate file
      config.txt: move pager.* to a separate file
      config.txt: move pretty.* to a separate file
      config.txt: move protocol.* to a separate file
      config.txt: move pull-config.txt to config/
      config.txt: move push-config.txt to config/
      config.txt: move rebase-config.txt to config/
      config.txt: move receive-config.txt to config/
      config.txt: move remote.* to a separate file
      config.txt: move remotes.* to a separate file
      config.txt: move repack.* to a separate file
      config.txt: move rerere.* to a separate file
      config.txt: move reset.* to a separate file
      config.txt: move sendemail-config.txt to config/
      config.txt: move sequencer.* to a separate file
      config.txt: move showBranch.* to a separate file
      config.txt: move splitIndex.* to a separate file
      config.txt: move status.* to a separate file
      config.txt: move stash.* to a separate file
      config.txt: move submodule.* to a separate file
      config.txt: move tag.* to a separate file
      config.txt: move transfer.* to a separate file
      config.txt: move uploadarchive.* to a separate file
      config.txt: move uploadpack.* to a separate file
      config.txt: move url.* to a separate file
      config.txt: move user.* to a separate file
      config.txt: move versionsort.* to a separate file
      config.txt: move web.* to a separate file
      config.txt: move worktree.* to a separate file
      config.txt: remove config/dummy.txt
      thread-utils: macros to unconditionally compile pthreads API
      wildmatch: change behavior of "foo**bar" in WM_PATHNAME mode
      git-worktree.txt: correct linkgit command name
      sequencer.c: remove a stray semicolon
      tree-walk.c: fix overoptimistic inclusion in :(exclude) matching
      run-command.h: include thread-utils.h instead of pthread.h
      send-pack.c: move async's #ifdef NO_PTHREADS back to run-command.c
      index-pack: remove #ifdef NO_PTHREADS
      name-hash.c: remove #ifdef NO_PTHREADS
      attr.c: remove #ifdef NO_PTHREADS
      grep: remove #ifdef NO_PTHREADS
      grep: clean up num_threads handling
      preload-index.c: remove #ifdef NO_PTHREADS
      pack-objects: remove #ifdef NO_PTHREADS
      read-cache.c: remove #ifdef NO_PTHREADS
      read-cache.c: reduce branching based on HAVE_THREADS
      read-cache.c: initialize copy_len to shut up gcc 8
      Clean up pthread_create() error handling
      completion: use __gitcomp_builtin for format-patch
      build: fix broken command-list.h generation with core.autocrlf
      format-patch: respect --stat in cover letter's diffstat
      doc: move extensions.worktreeConfig to the right place
      clone: fix colliding file detection on APFS

Nickolai Belakovski (2):
      worktree: update documentation for lock_reason and lock_reason_valid
      worktree: rename is_worktree_locked to worktree_lock_reason

Noam Postavsky (1):
      log: fix coloring of certain octopus merge shapes

Olga Telezhnaya (3):
      ref-filter: free memory from used_atom
      ls-remote: release memory instead of UNLEAK
      ref-filter: free item->value and item->value->s

Phillip Wood (11):
      diff: fix --color-moved-ws=allow-indentation-change
      diff --color-moved-ws: fix double free crash
      diff --color-moved-ws: fix out of bounds string access
      diff --color-moved-ws: fix a memory leak
      diff --color-moved-ws: fix another memory leak
      diff --color-moved: fix a memory leak
      am: don't die in read_author_script()
      am: improve author-script error reporting
      am: rename read_author_script()
      add read_author_script() to libgit
      sequencer: use read_author_script()

Pratik Karki (46):
      rebase: start implementing it as a builtin
      rebase: refactor common shell functions into their own file
      builtin/rebase: support running "git rebase <upstream>"
      builtin rebase: support --onto
      builtin rebase: support `git rebase --onto A...B`
      builtin rebase: handle the pre-rebase hook and --no-verify
      builtin rebase: support --quiet
      builtin rebase: support the `verbose` and `diffstat` options
      builtin rebase: require a clean worktree
      builtin rebase: try to fast forward when possible
      builtin rebase: support --force-rebase
      builtin rebase: start a new rebase only if none is in progress
      builtin rebase: only store fully-qualified refs in `options.head_name`
      builtin rebase: support `git rebase <upstream> <switch-to>`
      builtin rebase: support --continue
      builtin rebase: support --skip
      builtin rebase: support --abort
      builtin rebase: support --quit
      builtin rebase: support --edit-todo and --show-current-patch
      builtin rebase: actions require a rebase in progress
      builtin rebase: stop if `git am` is in progress
      builtin rebase: allow selecting the rebase "backend"
      builtin rebase: support --signoff
      builtin rebase: support --rerere-autoupdate
      builtin rebase: support --committer-date-is-author-date
      builtin rebase: support `ignore-whitespace` option
      builtin rebase: support `ignore-date` option
      builtin rebase: support `keep-empty` option
      builtin rebase: support `--autosquash`
      builtin rebase: support `--gpg-sign` option
      builtin rebase: support `-C` and `--whitespace=<type>`
      builtin rebase: support `--autostash` option
      builtin rebase: support `--exec`
      builtin rebase: support `--allow-empty-message` option
      builtin rebase: support --rebase-merges[=[no-]rebase-cousins]
      merge-base --fork-point: extract libified function
      builtin rebase: support `fork-point` option
      builtin rebase: add support for custom merge strategies
      builtin rebase: support --root
      builtin rebase: optionally auto-detect the upstream
      builtin rebase: optionally pass custom reflogs to reset_head()
      builtin rebase: fast-forward to onto if it is a proper descendant
      builtin rebase: show progress when connected to a terminal
      builtin rebase: use no-op editor when interactive is "implied"
      builtin rebase: error out on incompatible option/mode combinations
      rebase: default to using the builtin rebase

Rafael Ascensão (2):
      refs: show --exclude failure with --branches/tags/remotes=glob
      refs: fix some exclude patterns being ignored

Ralf Thielow (1):
      git-rebase.sh: fix typos in error messages

Ramsay Jones (12):
      Makefile: add a hdr-check target
      json-writer.h: add missing include (hdr-check)
      ewah/ewok_rlw.h: add missing include (hdr-check)
      refs/ref-cache.h: add missing declarations (hdr-check)
      refs/packed-backend.h: add missing declaration (hdr-check)
      refs/refs-internal.h: add missing declarations (hdr-check)
      midx.h: add missing forward declarations (hdr-check)
      delta-islands.h: add missing forward declarations (hdr-check)
      headers: normalize the spelling of some header guards
      fetch-object.h: add missing declaration (hdr-check)
      ewok_rlw.h: add missing 'inline' to function definition
      commit-reach.h: add missing declarations (hdr-check)

Rasmus Villemoes (6):
      help: redirect to aliased commands for "git cmd --help"
      git.c: handle_alias: prepend alias info when first argument is -h
      git-help.txt: document "git help cmd" vs "git cmd --help" for aliases
      Documentation/git-send-email.txt: style fixes
      send-email: only consider lines containing @ or <> for automatic Cc'ing
      send-email: also pick up cc addresses from -by trailers

René Scharfe (12):
      mailinfo: support format=flowed
      fsck: add a performance test for skipList
      fsck: use strbuf_getline() to read skiplist file
      fsck: use oidset instead of oid_array for skipList
      sequencer: use return value of oidset_insert()
      grep: add -r/--[no-]recursive
      fetch-pack: factor out is_unmatched_ref()
      fetch-pack: load tip_oids eagerly iff needed
      khash: factor out kh_release_*
      oidset: use khash
      oidset: uninline oidset_init()
      commit-reach: fix cast in compare_commits_by_gen()

Roger Strain (1):
      subtree: performance improvement for finding unexpected parent commits

SZEDER Gábor (17):
      t1404: increase core.packedRefsTimeout to avoid occasional test failure
      Documentation/git.txt: clarify that GIT_TRACE=/path appends
      t3701-add-interactive: tighten the check of trace output
      t1700-split-index: drop unnecessary 'grep'
      t0090: disable GIT_TEST_SPLIT_INDEX for the test checking split index
      t1700-split-index: document why FSMONITOR is disabled in this test script
      split-index: add tests to demonstrate the racy split index problem
      t1700-split-index: date back files to avoid racy situations
      split-index: count the number of deleted entries
      split-index: don't compare cached data of entries already marked for split index
      split-index: smudge and add racily clean cache entries to split index
      split-index: BUG() when cache entry refers to non-existing shared entry
      object_id.cocci: match only expressions of type 'struct object_id'
      test-lib: introduce the '-V' short option for '--verbose-log'
      travis-ci: install packages in 'ci/install-dependencies.sh'
      coccicheck: introduce 'pending' semantic patches
      ref-filter: don't look for objects when outside of a repository

Sam McKelvie (1):
      rev-parse: --show-superproject-working-tree should work during a merge

Saulius Gurklys (1):
      doc: fix small typo in git show-branch

Sebastian Staudt (1):
      travis-ci: no longer use containers

Shulhan (1):
      builtin/remote: quote remote name on error to display empty name

Stefan Beller (25):
      git-submodule.sh: align error reporting for update mode to use path
      git-submodule.sh: rename unused variables
      builtin/submodule--helper: factor out submodule updating
      builtin/submodule--helper: store update_clone information in a struct
      builtin/submodule--helper: factor out method to update a single submodule
      submodule--helper: replace connect-gitdir-workingtree by ensure-core-worktree
      submodule--helper: introduce new update-module-mode helper
      test_decode_color: understand FAINT and ITALIC
      t3206: add color test for range-diff --dual-color
      diff.c: simplify caller of emit_line_0
      diff.c: reorder arguments for emit_line_ws_markup
      diff.c: add set_sign to emit_line_0
      diff: use emit_line_0 once per line
      diff.c: omit check for line prefix in emit_line_0
      diff.c: rewrite emit_line_0 more understandably
      diff.c: add --output-indicator-{new, old, context}
      range-diff: make use of different output indicators
      range-diff: indent special lines as context
      refs.c: migrate internal ref iteration to pass thru repository argument
      refs.c: upgrade for_each_replace_ref to be a each_repo_ref_fn callback
      string-list: remove unused function print_string_list
      strbuf.h: format according to coding guidelines
      diff.c: pass sign_index to emit_line_ws_markup
      submodule helper: convert relative URL to absolute URL if needed
      builtin/submodule--helper: remove debugging leftover tracing

Stephen P. Smith (10):
      wt-status.c: move has_unmerged earlier in the file
      wt-status: rename commitable to committable
      t7501: add test of "commit --dry-run --short"
      wt-status.c: set the committable flag in the collect phase
      roll wt_status_state into wt_status and populate in the collect phase
      t2000: rename and combine checkout clash tests
      t7509: cleanup description and filename
      t7502: rename commit test script to comply with naming convention
      t7500: rename commit tests script to comply with naming convention
      t7501: rename commit test to comply with naming convention

Steve Hoelzer (1):
      poll: use GetTickCount64() to avoid wrap-around issues

Steven Fernandez (1):
      git-completion.bash: add completion for stash list

Strain, Roger L (4):
      subtree: refactor split of a commit into standalone method
      subtree: make --ignore-joins pay attention to adds
      subtree: use commits before rejoins for splits
      subtree: improve decision on merges kept in split

Tao Qingyun (3):
      refs: docstring typo
      builtin/branch.c: remove useless branch_get
      branch: trivial style fix

Taylor Blau (4):
      transport.c: extract 'fill_alternate_refs_command'
      transport.c: introduce core.alternateRefsCommand
      transport.c: introduce core.alternateRefsPrefixes
      Documentation/config.txt: fix typo in core.alternateRefsCommand

Thomas Gummerer (17):
      rerere: unify error messages when read_cache fails
      rerere: lowercase error messages
      rerere: wrap paths in output in sq
      rerere: mark strings for translation
      rerere: add documentation for conflict normalization
      rerere: fix crash with files rerere can't handle
      rerere: only return whether a path has conflicts or not
      rerere: factor out handle_conflict function
      rerere: return strbuf from handle path
      rerere: teach rerere to handle nested conflicts
      rerere: recalculate conflict ID when unresolved conflict is committed
      rerere: mention caveat about unmatched conflict markers
      rerere: add note about files with existing conflict markers
      .gitattributes: add conflict-marker-size for relevant files
      linear-assignment: fix potential out of bounds memory access
      t5551: move setup code inside test_expect blocks
      t5551: compare sorted cookies files

Tim Schumacher (4):
      Documentation/Makefile: make manpage-base-url.xsl generation quieter
      alias: add support for aliases of an alias
      alias: show the call history when an alias is looping
      t0014: introduce an alias testing suite

Todd Zullinger (1):
      Documentation: build technical/multi-pack-index

Torsten Bögershausen (4):
      Make git_check_attr() a void function
      path.c: char is not (always) signed
      Upcast size_t variables to uintmax_t when printing
      remote-curl.c: xcurl_off_t is not portable (on 32 bit platfoms)

Uwe Kleine-König (1):
      howto/using-merge-subtree: mention --allow-unrelated-histories

brian m. carlson (26):
      t: add test functions to translate hash-related values
      t0000: use hash translation table
      t0000: update tests for SHA-256
      t0002: abstract away SHA-1 specific constants
      t0064: make hash size independent
      t1006: make hash size independent
      t1400: switch hard-coded object ID to variable
      t1405: make hash size independent
      t1406: make hash-size independent
      t1407: make hash size independent
      editorconfig: provide editor settings for Git developers
      editorconfig: indicate settings should be kept in sync
      pack-bitmap-write: use GIT_MAX_RAWSZ for allocation
      builtin/repack: replace hard-coded constants
      builtin/mktree: remove hard-coded constant
      builtin/fetch-pack: remove constants with parse_oid_hex
      pack-revindex: express constants in terms of the_hash_algo
      packfile: express constants in terms of the_hash_algo
      refs/packed-backend: express constants using the_hash_algo
      upload-pack: express constants in terms of the_hash_algo
      transport: use parse_oid_hex instead of a constant
      tag: express constant in terms of the_hash_algo
      apply: replace hard-coded constants
      apply: rename new_sha1_prefix and old_sha1_prefix
      submodule: make zero-oid comparison hash function agnostic
      rerere: convert to use the_hash_algo

Ævar Arnfjörð Bjarmason (33):
      fetch: change "branch" to "reference" in --force -h output
      push tests: make use of unused $1 in test description
      push tests: use spaces in interpolated string
      fetch tests: add a test for clobbering tag behavior
      push doc: remove confusing mention of remote merger
      push doc: move mention of "tag <tag>" later in the prose
      push doc: correct lies about how push refspecs work
      fetch: document local ref updates with/without --force
      fetch: stop clobbering existing tags without --force
      fsck tests: setup of bogus commit object
      fsck tests: add a test for no skipList input
      fsck: document and test sorted skipList input
      fsck: document and test commented & empty line skipList input
      fsck: document that skipList input must be unabbreviated
      fsck: add a performance test
      fsck: support comments & empty lines in skipList
      commit-graph write: add progress output
      commit-graph verify: add progress output
      config doc: add missing list separator for checkout.optimizeNewBranch
      push doc: add spacing between two words
      fetch doc: correct grammar in --force docs
      gc: fix regression in 7b0f229222 impacting --quiet
      gc doc: mention the commit-graph in the intro
      pack-objects test: modernize style
      pack-objects tests: don't leave test .git corrupt at end
      index-pack tests: don't leave test repo dirty at end
      i18n: make GETTEXT_POISON a runtime option
      range-diff doc: add a section about output stability
      range-diff: fix regression in passing along diff options
      range-diff: make diff option behavior (e.g. --stat) consistent
      rebase doc: document rebase.useBuiltin
      tests: add a special setup where rebase.useBuiltin is off
      read-cache: make the split index obey umask settings

Đoàn Trần Công Danh (1):
      git-compat-util: prefer poll.h to sys/poll.h


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.20.0-rc0
@ 2018-11-18 14:20  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2018-11-18 14:20 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

An early preview release Git v2.20.0-rc0 is now available for
testing at the usual places.  It is comprised of 887 non-merge
commits since v2.19.0, contributed by 71 people, 23 of which are
new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.20.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.19.0 are as follows.
Welcome to the Git development community!

  Aaron Lindsay, Alexander Pyhalov, Anton Serbulov, Brendan
  Forster, Carlo Marcelo Arenas Belón, Daniels Umanovskis, David
  Zych, Frederick Eaton, James Knight, Jann Horn, Joshua Watt,
  Loo Rong Jie, Lucas De Marchi, Matthew DeVore, Mihir Mehta,
  Nickolai Belakovski, Roger Strain, Sam McKelvie, Saulius Gurklys,
  Shulhan, Steven Fernandez, Strain, Roger L, and Tim Schumacher.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alban Gruin, Andreas Gruenbacher,
  Andreas Heiduk, Antonio Ospite, Ben Peart, Brandon Williams,
  brian m. carlson, Christian Couder, Christian Hesse, Denton Liu,
  Derrick Stolee, Elijah Newren, Eric Sunshine, Jeff Hostetler,
  Jeff King, Johannes Schindelin, Johannes Sixt, Jonathan Nieder,
  Jonathan Tan, Josh Steadmon, Junio C Hamano, Karsten Blees,
  Luke Diamand, Martin Ågren, Max Kirillov, Michael Witten,
  Michał Górny, Nguyễn Thái Ngọc Duy, Noam Postavsky,
  Olga Telezhnaya, Phillip Wood, Pratik Karki, Rafael Ascensão,
  Ralf Thielow, Ramsay Jones, Rasmus Villemoes, René Scharfe,
  Sebastian Staudt, Stefan Beller, Stephen P. Smith, Steve Hoelzer,
  SZEDER Gábor, Tao Qingyun, Taylor Blau, Thomas Gummerer,
  Torsten Bögershausen, and Uwe Kleine-König.

----------------------------------------------------------------

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

Backward Compatibility Notes
----------------------------

 * "git branch -l <foo>" used to be a way to ask a reflog to be
   created while creating a new branch, but that is no longer the
   case.  It is a short-hand for "git branch --list <foo>" now.

 * "git push" into refs/tags/* hierarchy is rejected without getting
   forced, but "git fetch" (misguidedly) used the "fast forwarding"
   rule used for the refs/heads/* hierarchy; this has been corrected,
   which means some fetches of tags that did not fail with older
   version of Git will fail without "--force" with this version.

 * "git help -a" now gives verbose output (same as "git help -av").
   Those who want the old output may say "git help --no-verbose -a"..

 * "git cpn --help", when "cpn" is an alias to, say, "cherry-pick -n",
   reported only the alias expansion of "cpn" in earlier versions of
   Git.  It now runs "git cherry-pick --help" to show the manual page
   of the command, while sending the alias expansion to the standard
   error stream.

 * "git send-email" learned to grab address-looking string on any
   trailer whose name ends with "-by". This is a backward-incompatible
   change.  Adding "--suppress-cc=misc-by" on the command line, or
   setting sendemail.suppresscc configuration variable to "misc-by",
   can be used to disable this behaviour.


Updates since v2.19
-------------------

UI, Workflows & Features

 * Running "git clone" against a project that contain two files with
   pathnames that differ only in cases on a case insensitive
   filesystem would result in one of the files lost because the
   underlying filesystem is incapable of holding both at the same
   time.  An attempt is made to detect such a case and warn.

 * "git checkout -b newbranch [HEAD]" should not have to do as much as
   checking out a commit different from HEAD.  An attempt is made to
   optimize this special case.

 * "git rev-list --stdin </dev/null" used to be an error; it now shows
   no output without an error.  "git rev-list --stdin --default HEAD"
   still falls back to the given default when nothing is given on the
   standard input.

 * Lift code from GitHub to restrict delta computation so that an
   object that exists in one fork is not made into a delta against
   another object that does not appear in the same forked repository.

 * "git format-patch" learned new "--interdiff" and "--range-diff"
   options to explain the difference between this version and the
   previous attempt in the cover letter (or after the three-dashes as
   a comment).

 * "git mailinfo" used in "git am" learned to make a best-effort
   recovery of a patch corrupted by MUA that sends text/plain with
   format=flawed option.
   (merge 3aa4d81f88 rs/mailinfo-format-flowed later to maint).

 * The rules used by "git push" and "git fetch" to determine if a ref
   can or cannot be updated were inconsistent; specifically, fetching
   to update existing tags were allowed even though tags are supposed
   to be unmoving anchoring points.  "git fetch" was taught to forbid
   updates to existing tags without the "--force" option.

 * "git multi-pack-index" learned to detect corruption in the .midx
   file it uses, and this feature has been integrated into "git fsck".

 * Generation of (experimental) commit-graph files have so far been
   fairly silent, even though it takes noticeable amount of time in a
   meaningfully large repository.  The users will now see progress
   output.

 * The minimum version of Windows supported by Windows port of Git is
   now set to Vista.

 * The completion script (in contrib/) learned to complete a handful of
   options "git stash list" command takes.

 * The completion script (in contrib/) learned that "git fetch
   --multiple" only takes remote names as arguments and no refspecs.

 * "git status" learns to show progress bar when refreshing the index
   takes a long time.
   (merge ae9af12287 nd/status-refresh-progress later to maint).

 * "git help -a" and "git help -av" give different pieces of
   information, and generally the "verbose" version is more friendly
   to the new users.  "git help -a" by default now uses the more
   verbose output (with "--no-verbose", you can go back to the
   original).  Also "git help -av" now lists aliases and external
   commands, which it did not used to.

 * Unlike "grep", "git grep" by default recurses to the whole tree.
   The command learned "git grep --recursive" option, so that "git
   grep --no-recursive" can serve as a synonym to setting the
   max-depth to 0.

 * When pushing into a repository that borrows its objects from an
   alternate object store, "git receive-pack" that responds to the
   push request on the other side lists the tips of refs in the
   alternate to reduce the amount of objects transferred.  This
   sometimes is detrimental when the number of refs in the alternate
   is absurdly large, in which case the bandwidth saved in potentially
   fewer objects transferred is wasted in excessively large ref
   advertisement.  The alternate refs that are advertised are now
   configurable with a pair of configuration variables.

 * "git cmd --help" when "cmd" is aliased used to only say "cmd is
   aliased to ...".  Now it shows that to the standard error stream
   and runs "git $cmd --help" where $cmd is the first word of the
   alias expansion.

 * The documentation of "git gc" has been updated to mention that it
   is no longer limited to "pruning away crufts" but also updates
   ancillary files like commit-graph as a part of repository
   optimization.

 * "git p4 unshelve" improvements.

 * The logic to select the default user name and e-mail on Windows has
   been improved.
   (merge 501afcb8b0 js/mingw-default-ident later to maint).

 * The "rev-list --filter" feature learned to exclude all trees via
   "tree:0" filter.

 * "git send-email" learned to grab address-looking string on any
   trailer whose name ends with "-by"; --suppress-cc=misc-by on the
   command line, or setting sendemail.suppresscc configuration
   variable to "misc-by", can be used to disable this behaviour.

 * Developer builds now uses -Wunused-function compilation option.

 * One of our CI tests to run with "unusual/experimental/random"
   settings now also uses commit-graph and midx.

 * "git mergetool" learned to take the "--[no-]gui" option, just like
   "git difftool" does.

 * "git rebase -i" learned a new insn, 'break', that the user can
   insert in the to-do list.  Upon hitting it, the command returns
   control back to the user.

 * New "--pretty=format:" placeholders %GF and %GP that show the GPG
   key fingerprints have been invented.

 * On platforms with recent cURL library, http.sslBackend configuration
   variable can be used to choose a different SSL backend at runtime.
   The Windows port uses this mechanism to switch between OpenSSL and
   Secure Channel while talking over the HTTPS protocol.

 * "git send-email" learned to disable SMTP authentication via the
   "--smtp-auth=none" option, even when the smtp username is given
   (which turns the authentication on by default).

 * A fourth class of configuration files (in addition to the
   traditional "system wide", "per user in the $HOME directory" and
   "per repository in the $GIT_DIR/config") has been introduced so
   that different worktrees that share the same repository (hence the
   same $GIT_DIR/config file) can use different customization.

 * A pattern with '**' that does not have a slash on either side used
   to be an invalid one, but the code now treats such double-asterisks
   the same way as two normal asterisks that happen to be adjacent to
   each other.
   (merge e5bbe09e88 nd/wildmatch-double-asterisk later to maint).

 * The "--no-patch" option, which can be used to get a high-level
   overview without the actual line-by-line patch difference shown, of
   the "range-diff" command was earlier broken, which has been
   corrected.

 * The recently merged "rebase in C" has an escape hatch to use the
   scripted version when necessary, but it hasn't been documented,
   which has been corrected.


Performance, Internal Implementation, Development Support etc.

 * When there are too many packfiles in a repository (which is not
   recommended), looking up an object in these would require
   consulting many pack .idx files; a new mechanism to have a single
   file that consolidates all of these .idx files is introduced.

 * "git submodule update" is getting rewritten piece-by-piece into C.

 * The code for computing history reachability has been shuffled,
   obtained a bunch of new tests to cover them, and then being
   improved.

 * The unpack_trees() API used in checking out a branch and merging
   walks one or more trees along with the index.  When the cache-tree
   in the index tells us that we are walking a tree whose flattened
   contents is known (i.e. matches a span in the index), as linearly
   scanning a span in the index is much more efficient than having to
   open tree objects recursively and listing their entries, the walk
   can be optimized, which has been done.

 * When creating a thin pack, which allows objects to be made into a
   delta against another object that is not in the resulting pack but
   is known to be present on the receiving end, the code learned to
   take advantage of the reachability bitmap; this allows the server
   to send a delta against a base beyond the "boundary" commit.

 * spatch transformation to replace boolean uses of !hashcmp() to
   newly introduced oideq() is added, and applied, to regain
   performance lost due to support of multiple hash algorithms.

 * Fix a bug in which the same path could be registered under multiple
   worktree entries if the path was missing (for instance, was removed
   manually).  Also, as a convenience, expand the number of cases in
   which --force is applicable.

 * Split Documentation/config.txt for easier maintenance.
   (merge 6014363f0b nd/config-split later to maint).

 * Test helper binaries clean-up.
   (merge c9a1f4161f nd/test-tool later to maint).

 * Various tests have been updated to make it easier to swap the
   hash function used for object identification.
   (merge ae0c89d41b bc/hash-independent-tests later to maint).

 * Update fsck.skipList implementation and documentation.
   (merge 371a655074 ab/fsck-skiplist later to maint).

 * An alias that expands to another alias has so far been forbidden,
   but now it is allowed to create such an alias.

 * Various test scripts have been updated for style and also correct
   handling of exit status of various commands.

 * "gc --auto" ended up calling exit(-1) upon error, which has been
   corrected to use exit(1).  Also the error reporting behaviour when
   daemonized has been updated to exit with zero status when stopping
   due to a previously discovered error (which implies there is no
   point running gc to improve the situation); we used to exit with
   failure in such a case.

 * Various codepaths in the core-ish part learned to work on an
   arbitrary in-core index structure, not necessarily the default
   instance "the_index".
   (merge b3c7eef9b0 nd/the-index later to maint).

 * Code clean-up in the internal machinery used by "git status" and
   "git commit --dry-run".
   (merge 73ba5d78b4 ss/wt-status-committable later to maint).

 * Some environment variables that control the runtime options of Git
   used during tests are getting renamed for consistency.
   (merge 4231d1ba99 bp/rename-test-env-var later to maint).

 * A new extension to the index file has been introduced, which allows
   the index file to be read in parallel for performance.

 * The oidset API was built on top of the oidmap API which in turn is
   on the hashmap API.  Replace the implementation to build on top of
   the khash API and gain performance.

 * Over some transports, fetching objects with an exact commit object
   name can be done without first seeing the ref advertisements.  The
   code has been optimized to exploit this.

 * In a partial clone that will lazily be hydrated from the
   originating repository, we generally want to avoid "does this
   object exist (locally)?" on objects that we deliberately omitted
   when we created the clone.  The cache-tree codepath (which is used
   to write a tree object out of the index) however insisted that the
   object exists, even for paths that are outside of the partial
   checkout area.  The code has been updated to avoid such a check.

 * To help developers, an EditorConfig file that attempts to follow
   the project convention has been added.
   (merge b548d698a0 bc/editorconfig later to maint).

 * The result of coverage test can be combined with "git blame" to
   check the test coverage of code introduced recently with a new
   'coverage-diff' tool (in contrib/).
   (merge 783faedd65 ds/coverage-diff later to maint).

 * An experiment to fuzz test a few areas, hopefully we can gain more
   coverage to various areas.

 * More codepaths are moving away from hardcoded hash sizes.

 * The way the Windows port figures out the current directory has been
   improved.

 * The way DLLs are loaded on the Windows port has been improved.

 * Some tests have been reorganized and renamed; "ls t/" now gives a
   better overview of what is tested for these scripts than before.

 * "git rebase" and "git rebase -i" have been reimplemented in C.

 * Windows port learned to use nano-second resolution file timestamps.

 * The overly large Documentation/config.txt file have been split into
   million little pieces.  This potentially allows each individual piece
   included into the manual page of the command it affects more easily.

 * Replace three string-list instances used as look-up tables in "git
   fetch" with hashmaps.

 * Unify code to read the author-script used in "git am" and the
   commands that use the sequencer machinery, e.g. "git rebase -i".

 * In preparation to the day when we can deprecate and remove the
   "rebase -p", make sure we can skip and later remove tests for
   it.

 * The history traversal used to implement the tag-following has been
   optimized by introducing a new helper.

 * The helper function to refresh the cached stat information in the
   in-core index has learned to perform the lstat() part of the
   operation in parallel on multi-core platforms.

 * The code to traverse objects for reachability, used to decide what
   objects are unreferenced and expendable, have been taught to also
   consider per-worktree refs of other worktrees as starting points to
   prevent data loss.

 * "git add" needs to internally run "diff-files" equivalent, and the
   codepath learned the same optimization as "diff-files" has to run
   lstat(2) in parallel to find which paths have been updated in the
   working tree.

 * The procedure to install dependencies before testing at Travis CI
   is getting revamped for both simplicity and flexibility, taking
   advantage of the recent move to the vm-based environment.

 * The support for format-patch (and send-email) by the command-line
   completion script (in contrib/) has been simplified a bit.

 * The revision walker machinery learned to take advantage of the
   commit generation numbers stored in the commit-graph file.

 * The codebase has been cleaned up to reduce "#ifndef NO_PTHREADS".

 * The way -lcurl library gets linked has been simplified by taking
   advantage of the fact that we can just ask curl-config command how.

 * Various functions have been audited for "-Wunused-parameter" warnings
   and bugs in them got fixed.

 * A sanity check for start-up sequence has been added in the config
   API codepath.

 * The build procedure to link for fuzzing test has been made
   customizable with a new Makefile variable.

 * The way "git rebase" parses and forwards the command line options
   meant for underlying "git am" has been revamped, which fixed for
   options with parameters that were not passed correctly.


Fixes since v2.19
-----------------

 * "git interpret-trailers" and its underlying machinery had a buggy
   code that attempted to ignore patch text after commit log message,
   which triggered in various codepaths that will always get the log
   message alone and never get such an input.
   (merge 66e83d9b41 jk/trailer-fixes later to maint).

 * Malformed or crafted data in packstream can make our code attempt
   to read or write past the allocated buffer and abort, instead of
   reporting an error, which has been fixed.

 * "git rebase -i" did not clear the state files correctly when a run
   of "squash/fixup" is aborted and then the user manually amended the
   commit instead, which has been corrected.
   (merge 10d2f35436 js/rebase-i-autosquash-fix later to maint).

 * When fsmonitor is in use, after operation on submodules updates
   .gitmodules, we lost track of the fact that we did so and relied on
   stale fsmonitor data.
   (merge 43f1180814 bp/mv-submodules-with-fsmonitor later to maint).

 * Fix for a long-standing bug that leaves the index file corrupt when
   it shrinks during a partial commit.
   (merge 6c003d6ffb jk/reopen-tempfile-truncate later to maint).

 * Further fix for O_APPEND emulation on Windows
   (merge eeaf7ddac7 js/mingw-o-append later to maint).

 * A corner case bugfix in "git rerere" code.
   (merge ad2bf0d9b4 en/rerere-multi-stage-1-fix later to maint).

 * "git add ':(attr:foo)'" is not supported and is supposed to be
   rejected while the command line arguments are parsed, but we fail
   to reject such a command line upfront.
   (merge 84d938b732 nd/attr-pathspec-fix later to maint).

 * Recent update broke the reachability algorithm when refs (e.g.
   tags) that point at objects that are not commit were involved,
   which has been fixed.

 * "git rebase" etc. in Git 2.19 fails to abort when given an empty
   commit log message as result of editing, which has been corrected.
   (merge a3ec9eaf38 en/sequencer-empty-edit-result-aborts later to maint).

 * The code to backfill objects in lazily cloned repository did not
   work correctly, which has been corrected.
   (merge e68302011c jt/lazy-object-fetch-fix later to maint).

 * Update error messages given by "git remote" and make them consistent.
   (merge 5025425dff ms/remote-error-message-update later to maint).

 * "git update-ref" learned to make both "--no-deref" and "--stdin"
   work at the same time.
   (merge d345e9fbe7 en/update-ref-no-deref-stdin later to maint).

 * Recently added "range-diff" had a corner-case bug to cause it
   segfault, which has been corrected.
   (merge e467a90c7a tg/range-diff-corner-case-fix later to maint).

 * The recently introduced commit-graph auxiliary data is incompatible
   with mechanisms such as replace & grafts that "breaks" immutable
   nature of the object reference relationship.  Disable optimizations
   based on its use (and updating existing commit-graph) when these
   incompatible features are in use in the repository.
   (merge 829a321569 ds/commit-graph-with-grafts later to maint).

 * The mailmap file update.
   (merge 255eb03edf jn/mailmap-update later to maint).

 * The code in "git status" sometimes hit an assertion failure.  This
   was caused by a structure that was reused without cleaning the data
   used for the first run, which has been corrected.
   (merge 3e73cc62c0 en/status-multiple-renames-to-the-same-target-fix later to maint).

 * "git fetch $repo $object" in a partial clone did not correctly
   fetch the asked-for object that is referenced by an object in
   promisor packfile, which has been fixed.

 * A corner-case bugfix.
   (merge c5cbb27cb5 sm/show-superproject-while-conflicted later to maint).

 * Various fixes to "diff --color-moved-ws".

 * A partial clone that is configured to lazily fetch missing objects
   will on-demand issue a "git fetch" request to the originating
   repository to fill not-yet-obtained objects.  The request has been
   optimized for requesting a tree object (and not the leaf blob
   objects contained in it) by telling the originating repository that
   no blobs are needed.
   (merge 4c7f9567ea jt/non-blob-lazy-fetch later to maint).

 * The codepath to support the experimental split-index mode had
   remaining "racily clean" issues fixed.
   (merge 4c490f3d32 sg/split-index-racefix later to maint).

 * "git log --graph" showing an octopus merge sometimes miscounted the
   number of display columns it is consuming to show the merge and its
   parent commits, which has been corrected.
   (merge 04005834ed np/log-graph-octopus-fix later to maint).

 * "git range-diff" did not work well when the compared ranges had
   changes in submodules and the "--submodule=log" was used.

 * The implementation of run_command() API on the UNIX platforms had a
   bug that caused a command not on $PATH to be found in the current
   directory.
   (merge f67b980771 jk/run-command-notdot later to maint).

 * A mutex used in "git pack-objects" were not correctly initialized
   and this caused "git repack" to dump core on Windows.
   (merge 34204c8166 js/pack-objects-mutex-init-fix later to maint).

 * Under certain circumstances, "git diff D:/a/b/c D:/a/b/d" on
   Windows would strip initial parts from the paths because they
   were not recognized as absolute, which has been corrected.
   (merge ffd04e92e2 js/diff-notice-has-drive-prefix later to maint).

 * The receive.denyCurrentBranch=updateInstead codepath kicked in even
   when the push should have been rejected due to other reasons, such
   as it does not fast-forward or the update-hook rejects it, which
   has been corrected.
   (merge b072a25fad jc/receive-deny-current-branch-fix later to maint).

 * The logic to determine the archive type "git archive" uses did not
   correctly kick in for "git archive --remote", which has been
   corrected.

 * "git repack" in a shallow clone did not correctly update the
   shallow points in the repository, leading to a repository that
   does not pass fsck.
   (merge 5dcfbf564c js/shallow-and-fetch-prune later to maint).

 * Some codepaths failed to form a proper URL when .gitmodules record
   the URL to a submodule repository as relative to the repository of
   superproject, which has been corrected.
   (merge e0a862fdaf sb/submodule-url-to-absolute later to maint).

 * "git fetch" over protocol v2 into a shallow repository failed to
   fetch full history behind a new tip of history that was diverged
   before the cut-off point of the history that was previously fetched
   shallowly.

 * The command line completion machinery (in contrib/) has been
   updated to allow the completion script to tweak the list of options
   that are reported by the parse-options machinery correctly.
   (merge 276b49ff34 nd/completion-negation later to maint).

 * Operations on promisor objects make sense in the context of only a
   small subset of the commands that internally use the revisions
   machinery, but the "--exclude-promisor-objects" option were taken
   and led to nonsense results by commands like "log", to which it
   didn't make much sense.  This has been corrected.
   (merge 669b1d2aae md/exclude-promisor-objects-fix later to maint).

 * The "container" mode of TravisCI is going away.  Our .travis.yml
   file is getting prepared for the transition.
   (merge 32ee384be8 ss/travis-ci-force-vm-mode later to maint).

 * Our test scripts can now take the '-V' option as a synonym for the
   '--verbose-log' option.
   (merge a5f52c6dab sg/test-verbose-log later to maint).

 * A regression in Git 2.12 era made "git fsck" fall into an infinite
   loop while processing truncated loose objects.
   (merge 18ad13e5b2 jk/detect-truncated-zlib-input later to maint).

 * "git ls-remote $there foo" was broken by recent update for the
   protocol v2 and stopped showing refs that match 'foo' that are not
   refs/{heads,tags}/foo, which has been fixed.
   (merge 6a139cdd74 jk/proto-v2-ref-prefix-fix later to maint).

 * Additional comment on a tricky piece of code to help developers.
   (merge 0afbe3e806 jk/stream-pack-non-delta-clarification later to maint).

 * A couple of tests used to leave the repository in a state that is
   deliberately corrupt, which have been corrected.
   (merge aa984dbe5e ab/pack-tests-cleanup later to maint).

 * The submodule support has been updated to read from the blob at
   HEAD:.gitmodules when the .gitmodules file is missing from the
   working tree.
   (merge 2b1257e463 ao/submodule-wo-gitmodules-checked-out later to maint).

 * "git fetch" was a bit loose in parsing responses from the other side
   when talking over the protocol v2.

 * "git rev-parse --exclude=* --branches --branches"  (i.e. first
   saying "add only things that do not match '*' out of all branches"
   and then adding all branches, without any exclusion this time")
   worked as expected, but "--exclude=* --all --all" did not work the
   same way, which has been fixed.
   (merge 5221048092 ag/rev-parse-all-exclude-fix later to maint).

 * "git send-email --transfer-encoding=..." in recent versions of Git
   sometimes produced an empty "Content-Transfer-Encoding:" header,
   which has been corrected.
   (merge 3c88e46f1a al/send-email-auto-cte-fixup later to maint).

 * The interface into "xdiff" library used to discover the offset and
   size of a generated patch hunk by first formatting it into the
   textual hunk header "@@ -n,m +k,l @@" and then parsing the numbers
   out.  A new interface has been introduced to allow callers a more
   direct access to them.
   (merge 5eade0746e jk/xdiff-interface later to maint).

 * Pathspec matching against a tree object were buggy when negative
   pathspec elements were involved, which has been fixed.
   (merge b7845cebc0 nd/tree-walk-path-exclusion later to maint).

 * "git merge" and "git pull" that merges into an unborn branch used
   to completely ignore "--verify-signatures", which has been
   corrected.
   (merge 01a31f3bca jk/verify-sig-merge-into-void later to maint).

 * "git rebase --autostash" did not correctly re-attach the HEAD at times.

 * "rev-parse --exclude=<pattern> --branches=<pattern>" etc. did not
   quite work, which has been corrected.
   (merge 9ab9b5df0e ra/rev-parse-exclude-glob later to maint).

 * When editing a patch in a "git add -i" session, a hunk could be
   made to no-op.  The "git apply" program used to reject a patch with
   such a no-op hunk to catch user mistakes, but it is now updated to
   explicitly allow a no-op hunk in an edited patch.
   (merge 22cb3835b9 js/apply-recount-allow-noop later to maint).

 * The URL to an MSDN page in a comment has been updated.
   (merge 2ef2ae2917 js/mingw-msdn-url later to maint).

 * "git ls-remote --sort=<thing>" can feed an object that is not yet
   available into the comparison machinery and segfault, which has
   been corrected to check such a request upfront and reject it.

 * When "git bundle" aborts due to an empty commit ranges
   (i.e. resulting in an empty pack), it left a file descriptor to an
   lockfile open, which resulted in leftover lockfile on Windows where
   you cannot remove a file with an open file descriptor.  This has
   been corrected.
   (merge 2c8ee1f53c jk/close-duped-fd-before-unlock-for-bundle later to maint).

 * Code cleanup, docfix, build fix, etc.
   (merge 96a7501aad ts/doc-build-manpage-xsl-quietly later to maint).
   (merge b9b07efdb2 tg/conflict-marker-size later to maint).
   (merge fa0aeea770 sg/doc-trace-appends later to maint).
   (merge d64324cb60 tb/void-check-attr later to maint).
   (merge c3b9bc94b9 en/double-semicolon-fix later to maint).
   (merge 79336116f5 sg/t3701-tighten-trace later to maint).
   (merge 801fa63a90 jk/dev-build-format-security later to maint).
   (merge 0597dd62ba sb/string-list-remove-unused later to maint).
   (merge db2d36fad8 bw/protocol-v2 later to maint).
   (merge 456d7cd3a9 sg/split-index-test later to maint).
   (merge 7b6057c852 tq/refs-internal-comment-fix later to maint).
   (merge 29e8dc50ad tg/t5551-with-curl-7.61.1 later to maint).
   (merge 55f6bce2c9 fe/doc-updates later to maint).
   (merge 7987d2232d jk/check-everything-connected-is-long-gone later to maint).
   (merge 4ba3c9be47 dz/credential-doc-url-matching-rules later to maint).
   (merge 4c399442f7 ma/commit-graph-docs later to maint).
   (merge fc0503b04e ma/t1400-undebug-test later to maint).
   (merge e56b53553a nd/packobjectshook-doc-fix later to maint).
   (merge c56170a0c4 ma/mailing-list-address-in-git-help later to maint).
   (merge 6e8fc70fce rs/sequencer-oidset-insert-avoids-dups later to maint).
   (merge ad0b8f9575 mw/doc-typofixes later to maint).
   (merge d9f079ad1a jc/how-to-document-api later to maint).
   (merge b1492bf315 ma/t7005-bash-workaround later to maint).
   (merge ac1f98a0df du/rev-parse-is-plumbing later to maint).
   (merge ca8ed443a5 mm/doc-no-dashed-git later to maint).
   (merge ce366a8144 du/get-tar-commit-id-is-plumbing later to maint).
   (merge 61018fe9e0 du/cherry-is-plumbing later to maint).
   (merge c7e5fe79b9 sb/strbuf-h-update later to maint).
   (merge 8d2008196b tq/branch-create-wo-branch-get later to maint).
   (merge 2e3c894f4b tq/branch-style-fix later to maint).
   (merge c5d844af9c sg/doc-show-branch-typofix later to maint).
   (merge 081d91618b ah/doc-updates later to maint).
   (merge b84c783882 jc/cocci-preincr later to maint).
   (merge 5e495f8122 uk/merge-subtree-doc-update later to maint).
   (merge aaaa881822 jk/uploadpack-packobjectshook-fix later to maint).
   (merge 3063477445 tb/char-may-be-unsigned later to maint).
   (merge 8c64bc9420 sg/test-rebase-editor-fix later to maint).
   (merge 71571cd7d6 ma/sequencer-do-reset-saner-loop-termination later to maint).
   (merge 9a4cb8781e cb/notes-freeing-always-null-fix later to maint).

----------------------------------------------------------------

Changes since v2.19.0 are as follows:

Aaron Lindsay (1):
      send-email: avoid empty transfer encoding header

Alban Gruin (21):
      sequencer: make three functions and an enum from sequencer.c public
      rebase -i: rewrite append_todo_help() in C
      editor: add a function to launch the sequence editor
      rebase -i: rewrite the edit-todo functionality in C
      sequencer: add a new function to silence a command, except if it fails
      rebase -i: rewrite setup_reflog_action() in C
      rebase -i: rewrite checkout_onto() in C
      sequencer: refactor append_todo_help() to write its message to a buffer
      sequencer: change the way skip_unnecessary_picks() returns its result
      t3404: todo list with commented-out commands only aborts
      rebase -i: rewrite complete_action() in C
      rebase -i: remove unused modes and functions
      rebase -i: implement the logic to initialize $revisions in C
      rebase -i: rewrite the rest of init_revisions_and_shortrevisions() in C
      rebase -i: rewrite write_basic_state() in C
      rebase -i: rewrite init_basic_state() in C
      rebase -i: implement the main part of interactive rebase as a builtin
      rebase--interactive2: rewrite the submodes of interactive rebase in C
      rebase -i: remove git-rebase--interactive.sh
      rebase -i: move rebase--helper modes to rebase--interactive
      p3400: replace calls to `git checkout -b' by `git checkout -B'

Alexander Pyhalov (1):
      t7005-editor: quote filename to fix whitespace-issue

Andreas Gruenbacher (1):
      rev-parse: clear --exclude list after 'git rev-parse --all'

Andreas Heiduk (6):
      doc: clarify boundaries of 'git worktree list --porcelain'
      doc: fix ASCII art tab spacing
      doc: fix inappropriate monospace formatting
      doc: fix descripion for 'git tag --format'
      doc: fix indentation of listing blocks in gitweb.conf.txt
      doc: fix formatting in git-update-ref

Anton Serbulov (1):
      mingw: fix getcwd when the parent directory cannot be queried

Antonio Ospite (10):
      submodule: add a print_config_from_gitmodules() helper
      submodule: factor out a config_set_in_gitmodules_file_gently function
      t7411: merge tests 5 and 6
      t7411: be nicer to future tests and really clean things up
      submodule--helper: add a new 'config' subcommand
      submodule: use the 'submodule--helper config' command
      t7506: clean up .gitmodules properly before setting up new scenario
      submodule: add a helper to check if it is safe to write to .gitmodules
      submodule: support reading .gitmodules when it's not in the working tree
      t/helper: add test-submodule-nested-repo-config

Ben Peart (19):
      checkout: optimize "git checkout -b <new_branch>"
      git-mv: allow submodules and fsmonitor to work together
      t/README: correct spelling of "uncommon"
      preload-index: use git_env_bool() not getenv() for customization
      fsmonitor: update GIT_TEST_FSMONITOR support
      read-cache: update TEST_GIT_INDEX_VERSION support
      preload-index: update GIT_FORCE_PRELOAD_TEST support
      read-cache: clean up casting and byte decoding
      eoie: add End of Index Entry (EOIE) extension
      config: add new index.threads config setting
      read-cache: load cache extensions on a worker thread
      ieot: add Index Entry Offset Table (IEOT) extension
      read-cache: load cache entries on worker threads
      reset: don't compute unstaged changes after reset when --quiet
      reset: add new reset.quiet config setting
      reset: warn when refresh_index() takes more than 2 seconds
      speed up refresh_index() by utilizing preload_index()
      add: speed up cmd_add() by utilizing read_cache_preload()
      refresh_index: remove unnecessary calls to preload_index()

Brandon Williams (1):
      config: document value 2 for protocol.version

Brendan Forster (1):
      http: add support for disabling SSL revocation checks in cURL

Carlo Marcelo Arenas Belón (8):
      unpack-trees: avoid dead store for struct progress
      multi-pack-index: avoid dead store for struct progress
      read-cache: use of memory after it is freed
      commit-slabs: move MAYBE_UNUSED out
      khash: silence -Wunused-function for delta-islands
      compat: make sure git_mmap is not expected to write
      sequencer: cleanup for gcc warning in non developer mode
      builtin/notes: remove unnecessary free

Christian Couder (3):
      pack-objects: refactor code into compute_layer_order()
      pack-objects: move tree_depth into 'struct packing_data'
      pack-objects: move 'layer' into 'struct packing_data'

Christian Hesse (2):
      subtree: add build targets 'man' and 'html'
      subtree: make install targets depend on build targets

Daniels Umanovskis (3):
      doc: move git-rev-parse from porcelain to plumbing
      doc: move git-get-tar-commit-id to plumbing
      doc: move git-cherry to plumbing

David Zych (1):
      doc: clarify gitcredentials path component matching

Denton Liu (3):
      mergetool: accept -g/--[no-]gui as arguments
      completion: support `git mergetool --[no-]gui`
      doc: document diff/merge.guitool config keys

Derrick Stolee (92):
      multi-pack-index: add design document
      multi-pack-index: add format details
      multi-pack-index: add builtin
      multi-pack-index: add 'write' verb
      midx: write header information to lockfile
      multi-pack-index: load into memory
      t5319: expand test data
      packfile: generalize pack directory list
      multi-pack-index: read packfile list
      multi-pack-index: write pack names in chunk
      midx: read pack names into array
      midx: sort and deduplicate objects from packfiles
      midx: write object ids in a chunk
      midx: write object id fanout chunk
      midx: write object offsets
      config: create core.multiPackIndex setting
      midx: read objects from multi-pack-index
      midx: use midx in abbreviation calculations
      midx: use existing midx when writing new one
      midx: use midx in approximate_object_count
      midx: prevent duplicate packfile loads
      packfile: skip loading index if in multi-pack-index
      midx: clear midx on repack
      commit-reach: move walk methods from commit.c
      commit.h: remove method declarations
      commit-reach: move ref_newer from remote.c
      commit-reach: move commit_contains from ref-filter
      upload-pack: make reachable() more generic
      upload-pack: refactor ok_to_give_up()
      upload-pack: generalize commit date cutoff
      commit-reach: move can_all_from_reach_with_flags
      test-reach: create new test tool for ref_newer
      test-reach: test in_merge_bases
      test-reach: test is_descendant_of
      test-reach: test get_merge_bases_many
      test-reach: test reduce_heads
      test-reach: test can_all_from_reach_with_flags
      test-reach: test commit_contains
      commit-reach: replace ref_newer logic
      commit-reach: make can_all_from_reach... linear
      commit-reach: use can_all_from_reach
      multi-pack-index: provide more helpful usage info
      multi-pack-index: store local property
      midx: mark bad packed objects
      midx: stop reporting garbage
      midx: fix bug that skips midx with alternates
      packfile: add all_packs list
      treewide: use get_all_packs
      midx: test a few commands that use get_all_packs
      pack-objects: consider packs in multi-pack-index
      commit-graph: update design document
      test-repository: properly init repo
      commit-graph: not compatible with replace objects
      commit-graph: not compatible with grafts
      commit-graph: not compatible with uninitialized repo
      commit-graph: close_commit_graph before shallow walk
      commit-graph: define GIT_TEST_COMMIT_GRAPH
      t3206-range-diff.sh: cover single-patch case
      t5318: use test_oid for HASH_LEN
      multi-pack-index: add 'verify' verb
      multi-pack-index: verify bad header
      multi-pack-index: verify corrupt chunk lookup table
      multi-pack-index: verify packname order
      multi-pack-index: verify missing pack
      multi-pack-index: verify oid fanout order
      multi-pack-index: verify oid lookup order
      multi-pack-index: fix 32-bit vs 64-bit size check
      multi-pack-index: verify object offsets
      multi-pack-index: report progress during 'verify'
      fsck: verify multi-pack-index
      commit-reach: properly peel tags
      commit-reach: fix memory and flag leaks
      commit-reach: cleanups in can_all_from_reach...
      commit-graph: clean up leaked memory during write
      commit-graph: reduce initial oid allocation
      midx: fix broken free() in close_midx()
      contrib: add coverage-diff script
      ci: add optional test variables
      commit-reach: fix first-parent heuristic
      midx: close multi-pack-index on repack
      multi-pack-index: define GIT_TEST_MULTI_PACK_INDEX
      packfile: close multi-pack-index in close_all_packs
      prio-queue: add 'peek' operation
      test-reach: add run_three_modes method
      test-reach: add rev-list tests
      revision.c: begin refactoring --topo-order logic
      commit/revisions: bookkeeping before refactoring
      revision.c: generation-based topo-order algorithm
      t6012: make rev-list tests more interesting
      commit-reach: implement get_reachable_subset
      test-reach: test get_reachable_subset
      remote: make add_missing_tags() linear

Elijah Newren (14):
      Remove superfluous trailing semicolons
      t4200: demonstrate rerere segfault on specially crafted merge
      rerere: avoid buffer overrun
      update-ref: fix type of update_flags variable to match its usage
      update-ref: allow --no-deref with --stdin
      sequencer: fix --allow-empty-message behavior, make it smarter
      merge-recursive: set paths correctly when three-way merging content
      merge-recursive: avoid wrapper function when unnecessary and wasteful
      merge-recursive: remove final remaining caller of merge_file_one()
      merge-recursive: rename merge_file_1() and merge_content()
      commit: fix erroneous BUG, 'multiple renames on the same target? how?'
      merge-recursive: improve auto-merging messages with path collisions
      merge-recursive: avoid showing conflicts with merge branch before HEAD
      fsck: move fsck_head_link() to get_default_heads() to avoid some globals

Eric Sunshine (26):
      format-patch: allow additional generated content in make_cover_letter()
      format-patch: add --interdiff option to embed diff in cover letter
      format-patch: teach --interdiff to respect -v/--reroll-count
      interdiff: teach show_interdiff() to indent interdiff
      log-tree: show_log: make commentary block delimiting reusable
      format-patch: allow --interdiff to apply to a lone-patch
      range-diff: respect diff_option.file rather than assuming 'stdout'
      range-diff: publish default creation factor
      range-diff: relieve callers of low-level configuration burden
      format-patch: add --range-diff option to embed diff in cover letter
      format-patch: extend --range-diff to accept revision range
      format-patch: teach --range-diff to respect -v/--reroll-count
      format-patch: add --creation-factor tweak for --range-diff
      format-patch: allow --range-diff to apply to a lone-patch
      worktree: don't die() in library function find_worktree()
      worktree: move delete_git_dir() earlier in file for upcoming new callers
      worktree: generalize delete_git_dir() to reduce code duplication
      worktree: prepare for more checks of whether path can become worktree
      worktree: disallow adding same path multiple times
      worktree: teach 'add' to respect --force for registered but missing path
      worktree: teach 'move' to override lock when --force given twice
      worktree: teach 'remove' to override lock when --force given twice
      worktree: delete .git/worktrees if empty after 'remove'
      doc-diff: fix non-portable 'man' invocation
      doc-diff: add --clean mode to remove temporary working gunk
      doc/Makefile: drop doc-diff worktree and temporary files on "make clean"

Frederick Eaton (3):
      git-archimport.1: specify what kind of Arch we're talking about
      git-column.1: clarify initial description, provide examples
      git-describe.1: clarify that "human readable" is also git-readable

James Knight (1):
      build: link with curl-defined linker flags

Jann Horn (2):
      patch-delta: fix oob read
      patch-delta: consistently report corruption

Jeff Hostetler (2):
      t0051: test GIT_TRACE to a windows named pipe
      mingw: fix mingw_open_append to work with named pipes

Jeff King (94):
      branch: make "-l" a synonym for "--list"
      Add delta-islands.{c,h}
      pack-objects: add delta-islands support
      repack: add delta-islands support
      t5320: tests for delta islands
      t/perf: factor boilerplate out of test_perf
      t/perf: factor out percent calculations
      t/perf: add infrastructure for measuring sizes
      t/perf: add perf tests for fetches from a bitmapped server
      pack-bitmap: save "have" bitmap from walk
      pack-objects: reuse on-disk deltas for thin "have" objects
      SubmittingPatches: mention doc-diff
      rev-list: make empty --stdin not an error
      trailer: use size_t for string offsets
      trailer: use size_t for iterating trailer list
      trailer: pass process_trailer_opts to trailer_info_get()
      interpret-trailers: tighten check for "---" patch boundary
      interpret-trailers: allow suppressing "---" divider
      pretty, ref-filter: format %(trailers) with no_divider option
      sequencer: ignore "---" divider when parsing trailers
      append_signoff: use size_t for string offsets
      coccinelle: use <...> for function exclusion
      introduce hasheq() and oideq()
      convert "oidcmp() == 0" to oideq()
      convert "hashcmp() == 0" to hasheq()
      convert "oidcmp() != 0" to "!oideq()"
      convert "hashcmp() != 0" to "!hasheq()"
      convert hashmap comparison functions to oideq()
      read-cache: use oideq() in ce_compare functions
      show_dirstat: simplify same-content check
      doc-diff: always use oids inside worktree
      test-delta: read input into a heap buffer
      t5303: test some corrupt deltas
      patch-delta: handle truncated copy parameters
      t5303: use printf to generate delta bases
      doc/git-branch: remove obsolete "-l" references
      bitmap_has_sha1_in_uninteresting(): drop BUG check
      t5310: test delta reuse with bitmaps
      traverse_bitmap_commit_list(): don't free result
      pack-bitmap: drop "loaded" flag
      reopen_tempfile(): truncate opened file
      doc-diff: force worktree add
      config.mak.dev: add -Wformat-security
      pack-objects: handle island check for "external" delta base
      receive-pack: update comment with check_everything_connected
      submodule--helper: use "--" to signal end of clone options
      submodule-config: ban submodule urls that start with dash
      submodule-config: ban submodule paths that start with a dash
      fsck: detect submodule urls starting with dash
      fsck: detect submodule paths starting with dash
      more oideq/hasheq conversions
      transport: drop refnames from for_each_alternate_ref
      test-tool: show tool list on error
      config.mak.dev: enable -Wunused-function
      run-command: mark path lookup errors with ENOENT
      t5410: use longer path for sample script
      upload-pack: fix broken if/else chain in config callback
      t1450: check large blob in trailing-garbage test
      check_stream_sha1(): handle input underflow
      cat-file: handle streaming failures consistently
      ls-remote: do not send ref prefixes for patterns
      ls-remote: pass heads/tags prefixes to transport
      read_istream_pack_non_delta(): document input handling
      xdiff: provide a separate emit callback for hunks
      xdiff-interface: provide a separate consume callback for hunks
      rev-list: handle flags for --indexed-objects
      approxidate: handle pending number for "specials"
      pathspec: handle non-terminated strings with :(attr)
      diff: avoid generating unused hunk header lines
      diff: discard hunk headers for patch-ids earlier
      diff: use hunk callback for word-diff
      combine-diff: use an xdiff hunk callback
      diff: convert --check to use a hunk callback
      range-diff: use a hunk callback
      xdiff-interface: drop parse_hunk_header()
      apply: mark include/exclude options as NONEG
      am: handle --no-patch-format option
      ls-files: mark exclude options as NONEG
      pack-objects: mark index-version option as NONEG
      cat-file: mark batch options with NONEG
      status: mark --find-renames option with NONEG
      format-patch: mark "--no-numbered" option with NONEG
      show-branch: mark --reflog option as NONEG
      tag: mark "--message" option with NONEG
      cat-file: report an error on multiple --batch options
      apply: return -1 from option callback instead of calling exit(1)
      parse-options: drop OPT_DATE()
      assert NOARG/NONEG behavior of parse-options callbacks
      midx: double-check large object write loop
      merge: extract verify_merge_signature() helper
      merge: handle --verify-signatures for unborn branch
      pull: handle --verify-signatures for unborn branch
      approxidate: fix NULL dereference in date_time()
      bundle: dup() output descriptor closer to point-of-use

Johannes Schindelin (55):
      rebase -i --autosquash: demonstrate a problem skipping the last squash
      rebase -i: be careful to wrap up fixup/squash chains
      compat/poll: prepare for targeting Windows Vista
      mingw: set _WIN32_WINNT explicitly for Git for Windows
      mingw: bump the minimum Windows version to Vista
      builtin rebase: prepare for builtin rebase -i
      rebase -i: clarify what happens on a failed `exec`
      rebase -i: introduce the 'break' command
      getpwuid(mingw): initialize the structure only once
      getpwuid(mingw): provide a better default for the user name
      mingw: use domain information for default email
      http: add support for selecting SSL backends at runtime
      pack-objects: fix typo 'detla' -> 'delta'
      pack-objects (mingw): demonstrate a segmentation fault with large deltas
      pack-objects (mingw): initialize `packing_data` mutex in the correct spot
      rebase (autostash): avoid duplicate call to state_dir_path()
      rebase (autostash): store the full OID in <state-dir>/autostash
      rebase (autostash): use an explicit OID to apply the stash
      mingw: factor out code to set stat() data
      rebase --autostash: demonstrate a problem with dirty submodules
      rebase --autostash: fix issue with dirty submodules
      mingw: load system libraries the recommended way
      mingw: ensure `getcwd()` reports the correct case
      repack: point out a bug handling stale shallow info
      shallow: offer to prune only non-existing entries
      repack -ad: prune the list of shallow commits
      http: when using Secure Channel, ignore sslCAInfo by default
      t7800: fix quoting
      mingw: reencode environment variables on the fly (UTF-16 <-> UTF-8)
      config: rename `dummy` parameter to `cb` in git_default_config()
      config: allow for platform-specific core.* config settings
      config: move Windows-specific config settings into compat/mingw.c
      mingw: unset PERL5LIB by default
      mingw: fix isatty() after dup2()
      t3404: decouple some test cases from outcomes of previous test cases
      t3418: decouple test cases from a previous `rebase -p` test case
      tests: optionally skip `git rebase -p` tests
      Windows: force-recompile git.res for differing architectures
      built-in rebase: demonstrate regression with --autostash
      built-in rebase --autostash: leave the current branch alone if possible
      Update .mailmap
      rebase -r: demonstrate bug with conflicting merges
      rebase -r: do not write MERGE_HEAD unless needed
      rebase -i: include MERGE_HEAD into files to clean up
      built-in rebase --skip/--abort: clean up stale .git/<name> files
      status: rebase and merge can be in progress at the same time
      apply --recount: allow "no-op hunks"
      rebase: consolidate clean-up code before leaving reset_head()
      rebase: prepare reset_head() for more flags
      built-in rebase: reinstate `checkout -q` behavior where appropriate
      mingw: use `CreateHardLink()` directly
      rebase: really just passthru the `git am` options
      rebase: validate -C<n> and --whitespace=<mode> parameters early
      config: report a bug if git_dir exists without commondir
      mingw: replace an obsolete link with the superseding one

Johannes Sixt (3):
      diff: don't attempt to strip prefix from absolute Windows paths
      rebase -i: recognize short commands without arguments
      t3404-rebase-interactive: test abbreviated commands

Jonathan Nieder (6):
      gc: improve handling of errors reading gc.log
      gc: exit with status 128 on failure
      gc: do not return error for prior errors in daemonized mode
      commit-reach: correct accidental #include of C file
      mailmap: consistently normalize brian m. carlson's name
      git doc: direct bug reporters to mailing list archive

Jonathan Tan (15):
      fetch-object: unify fetch_object[s] functions
      fetch-object: set exact_oid when fetching
      connected: document connectivity in partial clones
      fetch: in partial clone, check presence of targets
      fetch-pack: avoid object flags if no_dependents
      fetch-pack: exclude blobs when lazy-fetching trees
      transport: allow skipping of ref listing
      transport: do not list refs if possible
      transport: list refs before fetch if necessary
      fetch: do not list refs if fetching only hashes
      cache-tree: skip some blob checks in partial clone
      upload-pack: make have_obj not global
      upload-pack: make want_obj not global
      upload-pack: clear flags before each v2 request
      fetch-pack: be more precise in parsing v2 response

Josh Steadmon (4):
      fuzz: add basic fuzz testing target.
      fuzz: add fuzz testing for packfile indices.
      archive: initialize archivers earlier
      Makefile: use FUZZ_CXXFLAGS for linking fuzzers

Joshua Watt (1):
      send-email: explicitly disable authentication

Junio C Hamano (29):
      Revert "doc/Makefile: drop doc-diff worktree and temporary files on "make clean""
      Initial batch post 2.19
      Second batch post 2.19
      Git 2.14.5
      Git 2.15.3
      Git 2.16.5
      Git 2.17.2
      Git 2.18.1
      Git 2.19.1
      t0000: do not get self-test disrupted by environment warnings
      CodingGuidelines: document the API in *.h files
      Declare that the next one will be named 2.20
      Third batch for 2.20
      rebase: fix typoes in error messages
      Fourth batch for 2.20
      Revert "subtree: make install targets depend on build targets"
      Fifth batch for 2.20
      receive: denyCurrentBranch=updateinstead should not blindly update
      cocci: simplify "if (++u > 1)" to "if (u++)"
      fsck: s/++i > 1/i++/
      http: give curl version warnings consistently
      Sixth batch for 2.20
      Seventh batch for 2.20
      fetch: replace string-list used as a look-up table with a hashmap
      rebase: apply cocci patch
      Eighth batch for 2.20
      Ninth batch for 2.20
      Tenth batch for 2.20
      Git 2.20-rc0

Karsten Blees (2):
      mingw: replace MSVCRT's fstat() with a Win32-based implementation
      mingw: implement nanosecond-precision file times

Loo Rong Jie (1):
      win32: replace pthread_cond_*() with much simpler code

Lucas De Marchi (1):
      range-diff: allow to diff files regardless of submodule config

Luke Diamand (3):
      git-p4: do not fail in verbose mode for missing 'fileSize' key
      git-p4: unshelve into refs/remotes/p4-unshelved, not refs/remotes/p4/unshelved
      git-p4: fully support unshelving changelists

Martin Ågren (9):
      Doc: use `--type=bool` instead of `--bool`
      git-config.txt: fix 'see: above' note
      git-commit-graph.txt: fix bullet lists
      git-commit-graph.txt: typeset more in monospace
      git-commit-graph.txt: refer to "*commit*-graph file"
      Doc: refer to the "commit-graph file" with dash
      t1400: drop debug `echo` to actually execute `test`
      builtin/commit-graph.c: UNLEAK variables
      sequencer: break out of loop explicitly

Matthew DeVore (19):
      list-objects: store common func args in struct
      list-objects: refactor to process_tree_contents
      list-objects: always parse trees gently
      t/README: reformat Do, Don't, Keep in mind lists
      Documentation: add shell guidelines
      tests: standardize pipe placement
      t/*: fix ordering of expected/observed arguments
      tests: don't swallow Git errors upstream of pipes
      t9109: don't swallow Git errors upstream of pipes
      tests: order arguments to git-rev-list properly
      rev-list: handle missing tree objects properly
      revision: mark non-user-given objects instead
      list-objects-filter: use BUG rather than die
      list-objects-filter-options: do not over-strbuf_init
      list-objects-filter: implement filter tree:0
      filter-trees: code clean-up of tests
      list-objects: support for skipping tree traversal
      Documentation/git-log.txt: do not show --exclude-promisor-objects
      exclude-promisor-objects: declare when option is allowed

Max Kirillov (1):
      http-backend test: make empty CONTENT_LENGTH test more realistic

Michael Witten (3):
      docs: typo: s/go/to/
      docs: graph: remove unnecessary `graph_update()' call
      docs: typo: s/isimilar/similar/

Michał Górny (6):
      gpg-interface.c: detect and reject multiple signatures on commits
      gpg-interface.c: use flags to determine key/signer info presence
      gpg-interface.c: support getting key fingerprint via %GF format
      gpg-interface.c: obtain primary key fingerprint as well
      t/t7510-signed-commit.sh: Add %GP to custom format checks
      t/t7510-signed-commit.sh: add signing subkey to Eris Discordia key

Mihir Mehta (1):
      doc: fix a typo and clarify a sentence

Nguyễn Thái Ngọc Duy (166):
      clone: report duplicate entries on case-insensitive filesystems
      trace.h: support nested performance tracing
      unpack-trees: add performance tracing
      unpack-trees: optimize walking same trees with cache-tree
      unpack-trees: reduce malloc in cache-tree walk
      unpack-trees: reuse (still valid) cache-tree from src_index
      unpack-trees: add missing cache invalidation
      cache-tree: verify valid cache-tree in the test suite
      Document update for nd/unpack-trees-with-cache-tree
      bisect.c: make show_list() build again
      t/helper: keep test-tool command list sorted
      t/helper: merge test-dump-untracked-cache into test-tool
      t/helper: merge test-pkt-line into test-tool
      t/helper: merge test-parse-options into test-tool
      t/helper: merge test-dump-fsmonitor into test-tool
      Makefile: add a hint about TEST_BUILTINS_OBJS
      config.txt: follow camelCase naming
      config.txt: move fetch part out to a separate file
      config.txt: move format part out to a separate file
      config.txt: move gitcvs part out to a separate file
      config.txt: move gui part out to a separate file
      config.txt: move pull part out to a separate file
      config.txt: move push part out to a separate file
      config.txt: move receive part out to a separate file
      config.txt: move sendemail part out to a separate file
      config.txt: move sequence.editor out of "core" part
      config.txt: move submodule part out to a separate file
      archive.c: remove implicit dependency the_repository
      status: show progress bar if refreshing the index takes too long
      add: do not accept pathspec magic 'attr'
      completion: support "git fetch --multiple"
      read-cache.c: remove 'const' from index_has_changes()
      diff.c: reduce implicit dependency on the_index
      combine-diff.c: remove implicit dependency on the_index
      blame.c: rename "repo" argument to "r"
      diff.c: remove the_index dependency in textconv() functions
      grep.c: remove implicit dependency on the_index
      diff.c: remove implicit dependency on the_index
      read-cache.c: remove implicit dependency on the_index
      diff-lib.c: remove implicit dependency on the_index
      ll-merge.c: remove implicit dependency on the_index
      merge-blobs.c: remove implicit dependency on the_index
      merge.c: remove implicit dependency on the_index
      patch-ids.c: remove implicit dependency on the_index
      sha1-file.c: remove implicit dependency on the_index
      rerere.c: remove implicit dependency on the_index
      userdiff.c: remove implicit dependency on the_index
      line-range.c: remove implicit dependency on the_index
      submodule.c: remove implicit dependency on the_index
      tree-diff.c: remove implicit dependency on the_index
      ws.c: remove implicit dependency on the_index
      revision.c: remove implicit dependency on the_index
      revision.c: reduce implicit dependency the_repository
      read-cache.c: optimize reading index format v4
      config.txt: correct the note about uploadpack.packObjectsHook
      help -a: improve and make --verbose default
      refs.c: indent with tabs, not spaces
      Add a place for (not) sharing stuff between worktrees
      submodule.c: remove some of the_repository references
      completion: fix __gitcomp_builtin no longer consider extra options
      t1300: extract and use test_cmp_config()
      worktree: add per-worktree config files
      refs: new ref types to make per-worktree refs visible to all worktrees
      revision.c: correct a parameter name
      revision.c: better error reporting on ref from different worktrees
      fsck: check HEAD and reflog from other worktrees
      reflog expire: cover reflog from all worktrees
      Update makefile in preparation for Documentation/config/*.txt
      config.txt: move advice.* to a separate file
      config.txt: move core.* to a separate file
      config.txt: move add.* to a separate file
      config.txt: move alias.* to a separate file
      config.txt: move am.* to a separate file
      config.txt: move apply.* to a separate file
      config.txt: move blame.* to a separate file
      config.txt: move branch.* to a separate file
      config.txt: move browser.* to a separate file
      config.txt: move checkout.* to a separate file
      config.txt: move clean.* to a separate file
      config.txt: move color.* to a separate file
      config.txt: move column.* to a separate file
      config.txt: move commit.* to a separate file
      config.txt: move credential.* to a separate file
      config.txt: move completion.* to a separate file
      config.txt: move diff-config.txt to config/
      config.txt: move difftool.* to a separate file
      config.txt: move fastimport.* to a separate file
      config.txt: move fetch-config.txt to config/
      config.txt: move filter.* to a separate file
      config.txt: move format-config.txt to config/
      config.txt: move fmt-merge-msg-config.txt to config/
      config.txt: move fsck.* to a separate file
      config.txt: move gc.* to a separate file
      config.txt: move gitcvs-config.txt to config/
      config.txt: move gitweb.* to a separate file
      config.txt: move grep.* to a separate file
      config.txt: move gpg.* to a separate file
      config.txt: move gui-config.txt to config/
      config.txt: move guitool.* to a separate file
      config.txt: move help.* to a separate file
      config.txt: move ssh.* to a separate file
      config.txt: move http.* to a separate file
      config.txt: move i18n.* to a separate file
      git-imap-send.txt: move imap.* to a separate file
      config.txt: move index.* to a separate file
      config.txt: move init.* to a separate file
      config.txt: move instaweb.* to a separate file
      config.txt: move interactive.* to a separate file
      config.txt: move log.* to a separate file
      config.txt: move mailinfo.* to a separate file
      config.txt: move mailmap.* to a separate file
      config.txt: move man.* to a separate file
      config.txt: move merge-config.txt to config/
      config.txt: move mergetool.* to a separate file
      config.txt: move notes.* to a separate file
      config.txt: move pack.* to a separate file
      config.txt: move pager.* to a separate file
      config.txt: move pretty.* to a separate file
      config.txt: move protocol.* to a separate file
      config.txt: move pull-config.txt to config/
      config.txt: move push-config.txt to config/
      config.txt: move rebase-config.txt to config/
      config.txt: move receive-config.txt to config/
      config.txt: move remote.* to a separate file
      config.txt: move remotes.* to a separate file
      config.txt: move repack.* to a separate file
      config.txt: move rerere.* to a separate file
      config.txt: move reset.* to a separate file
      config.txt: move sendemail-config.txt to config/
      config.txt: move sequencer.* to a separate file
      config.txt: move showBranch.* to a separate file
      config.txt: move splitIndex.* to a separate file
      config.txt: move status.* to a separate file
      config.txt: move stash.* to a separate file
      config.txt: move submodule.* to a separate file
      config.txt: move tag.* to a separate file
      config.txt: move transfer.* to a separate file
      config.txt: move uploadarchive.* to a separate file
      config.txt: move uploadpack.* to a separate file
      config.txt: move url.* to a separate file
      config.txt: move user.* to a separate file
      config.txt: move versionsort.* to a separate file
      config.txt: move web.* to a separate file
      config.txt: move worktree.* to a separate file
      config.txt: remove config/dummy.txt
      thread-utils: macros to unconditionally compile pthreads API
      wildmatch: change behavior of "foo**bar" in WM_PATHNAME mode
      git-worktree.txt: correct linkgit command name
      sequencer.c: remove a stray semicolon
      tree-walk.c: fix overoptimistic inclusion in :(exclude) matching
      run-command.h: include thread-utils.h instead of pthread.h
      send-pack.c: move async's #ifdef NO_PTHREADS back to run-command.c
      index-pack: remove #ifdef NO_PTHREADS
      name-hash.c: remove #ifdef NO_PTHREADS
      attr.c: remove #ifdef NO_PTHREADS
      grep: remove #ifdef NO_PTHREADS
      grep: clean up num_threads handling
      preload-index.c: remove #ifdef NO_PTHREADS
      pack-objects: remove #ifdef NO_PTHREADS
      read-cache.c: remove #ifdef NO_PTHREADS
      read-cache.c: reduce branching based on HAVE_THREADS
      read-cache.c: initialize copy_len to shut up gcc 8
      Clean up pthread_create() error handling
      completion: use __gitcomp_builtin for format-patch
      build: fix broken command-list.h generation with core.autocrlf
      doc: move extensions.worktreeConfig to the right place

Nickolai Belakovski (2):
      worktree: update documentation for lock_reason and lock_reason_valid
      worktree: rename is_worktree_locked to worktree_lock_reason

Noam Postavsky (1):
      log: fix coloring of certain octopus merge shapes

Olga Telezhnaya (3):
      ref-filter: free memory from used_atom
      ls-remote: release memory instead of UNLEAK
      ref-filter: free item->value and item->value->s

Phillip Wood (11):
      diff: fix --color-moved-ws=allow-indentation-change
      diff --color-moved-ws: fix double free crash
      diff --color-moved-ws: fix out of bounds string access
      diff --color-moved-ws: fix a memory leak
      diff --color-moved-ws: fix another memory leak
      diff --color-moved: fix a memory leak
      am: don't die in read_author_script()
      am: improve author-script error reporting
      am: rename read_author_script()
      add read_author_script() to libgit
      sequencer: use read_author_script()

Pratik Karki (46):
      rebase: start implementing it as a builtin
      rebase: refactor common shell functions into their own file
      builtin/rebase: support running "git rebase <upstream>"
      builtin rebase: support --onto
      builtin rebase: support `git rebase --onto A...B`
      builtin rebase: handle the pre-rebase hook and --no-verify
      builtin rebase: support --quiet
      builtin rebase: support the `verbose` and `diffstat` options
      builtin rebase: require a clean worktree
      builtin rebase: try to fast forward when possible
      builtin rebase: support --force-rebase
      builtin rebase: start a new rebase only if none is in progress
      builtin rebase: only store fully-qualified refs in `options.head_name`
      builtin rebase: support `git rebase <upstream> <switch-to>`
      builtin rebase: support --continue
      builtin rebase: support --skip
      builtin rebase: support --abort
      builtin rebase: support --quit
      builtin rebase: support --edit-todo and --show-current-patch
      builtin rebase: actions require a rebase in progress
      builtin rebase: stop if `git am` is in progress
      builtin rebase: allow selecting the rebase "backend"
      builtin rebase: support --signoff
      builtin rebase: support --rerere-autoupdate
      builtin rebase: support --committer-date-is-author-date
      builtin rebase: support `ignore-whitespace` option
      builtin rebase: support `ignore-date` option
      builtin rebase: support `keep-empty` option
      builtin rebase: support `--autosquash`
      builtin rebase: support `--gpg-sign` option
      builtin rebase: support `-C` and `--whitespace=<type>`
      builtin rebase: support `--autostash` option
      builtin rebase: support `--exec`
      builtin rebase: support `--allow-empty-message` option
      builtin rebase: support --rebase-merges[=[no-]rebase-cousins]
      merge-base --fork-point: extract libified function
      builtin rebase: support `fork-point` option
      builtin rebase: add support for custom merge strategies
      builtin rebase: support --root
      builtin rebase: optionally auto-detect the upstream
      builtin rebase: optionally pass custom reflogs to reset_head()
      builtin rebase: fast-forward to onto if it is a proper descendant
      builtin rebase: show progress when connected to a terminal
      builtin rebase: use no-op editor when interactive is "implied"
      builtin rebase: error out on incompatible option/mode combinations
      rebase: default to using the builtin rebase

Rafael Ascensão (2):
      refs: show --exclude failure with --branches/tags/remotes=glob
      refs: fix some exclude patterns being ignored

Ralf Thielow (1):
      git-rebase.sh: fix typos in error messages

Ramsay Jones (12):
      Makefile: add a hdr-check target
      json-writer.h: add missing include (hdr-check)
      ewah/ewok_rlw.h: add missing include (hdr-check)
      refs/ref-cache.h: add missing declarations (hdr-check)
      refs/packed-backend.h: add missing declaration (hdr-check)
      refs/refs-internal.h: add missing declarations (hdr-check)
      midx.h: add missing forward declarations (hdr-check)
      delta-islands.h: add missing forward declarations (hdr-check)
      headers: normalize the spelling of some header guards
      fetch-object.h: add missing declaration (hdr-check)
      ewok_rlw.h: add missing 'inline' to function definition
      commit-reach.h: add missing declarations (hdr-check)

Rasmus Villemoes (6):
      help: redirect to aliased commands for "git cmd --help"
      git.c: handle_alias: prepend alias info when first argument is -h
      git-help.txt: document "git help cmd" vs "git cmd --help" for aliases
      Documentation/git-send-email.txt: style fixes
      send-email: only consider lines containing @ or <> for automatic Cc'ing
      send-email: also pick up cc addresses from -by trailers

René Scharfe (12):
      mailinfo: support format=flowed
      fsck: add a performance test for skipList
      fsck: use strbuf_getline() to read skiplist file
      fsck: use oidset instead of oid_array for skipList
      sequencer: use return value of oidset_insert()
      grep: add -r/--[no-]recursive
      fetch-pack: factor out is_unmatched_ref()
      fetch-pack: load tip_oids eagerly iff needed
      khash: factor out kh_release_*
      oidset: use khash
      oidset: uninline oidset_init()
      commit-reach: fix cast in compare_commits_by_gen()

Roger Strain (1):
      subtree: performance improvement for finding unexpected parent commits

SZEDER Gábor (16):
      t1404: increase core.packedRefsTimeout to avoid occasional test failure
      Documentation/git.txt: clarify that GIT_TRACE=/path appends
      t3701-add-interactive: tighten the check of trace output
      t1700-split-index: drop unnecessary 'grep'
      t0090: disable GIT_TEST_SPLIT_INDEX for the test checking split index
      t1700-split-index: document why FSMONITOR is disabled in this test script
      split-index: add tests to demonstrate the racy split index problem
      t1700-split-index: date back files to avoid racy situations
      split-index: count the number of deleted entries
      split-index: don't compare cached data of entries already marked for split index
      split-index: smudge and add racily clean cache entries to split index
      split-index: BUG() when cache entry refers to non-existing shared entry
      object_id.cocci: match only expressions of type 'struct object_id'
      test-lib: introduce the '-V' short option for '--verbose-log'
      travis-ci: install packages in 'ci/install-dependencies.sh'
      ref-filter: don't look for objects when outside of a repository

Sam McKelvie (1):
      rev-parse: --show-superproject-working-tree should work during a merge

Saulius Gurklys (1):
      doc: fix small typo in git show-branch

Sebastian Staudt (1):
      travis-ci: no longer use containers

Shulhan (1):
      builtin/remote: quote remote name on error to display empty name

Stefan Beller (25):
      git-submodule.sh: align error reporting for update mode to use path
      git-submodule.sh: rename unused variables
      builtin/submodule--helper: factor out submodule updating
      builtin/submodule--helper: store update_clone information in a struct
      builtin/submodule--helper: factor out method to update a single submodule
      submodule--helper: replace connect-gitdir-workingtree by ensure-core-worktree
      submodule--helper: introduce new update-module-mode helper
      test_decode_color: understand FAINT and ITALIC
      t3206: add color test for range-diff --dual-color
      diff.c: simplify caller of emit_line_0
      diff.c: reorder arguments for emit_line_ws_markup
      diff.c: add set_sign to emit_line_0
      diff: use emit_line_0 once per line
      diff.c: omit check for line prefix in emit_line_0
      diff.c: rewrite emit_line_0 more understandably
      diff.c: add --output-indicator-{new, old, context}
      range-diff: make use of different output indicators
      range-diff: indent special lines as context
      refs.c: migrate internal ref iteration to pass thru repository argument
      refs.c: upgrade for_each_replace_ref to be a each_repo_ref_fn callback
      string-list: remove unused function print_string_list
      strbuf.h: format according to coding guidelines
      diff.c: pass sign_index to emit_line_ws_markup
      submodule helper: convert relative URL to absolute URL if needed
      builtin/submodule--helper: remove debugging leftover tracing

Stephen P. Smith (10):
      wt-status.c: move has_unmerged earlier in the file
      wt-status: rename commitable to committable
      t7501: add test of "commit --dry-run --short"
      wt-status.c: set the committable flag in the collect phase
      roll wt_status_state into wt_status and populate in the collect phase
      t2000: rename and combine checkout clash tests
      t7509: cleanup description and filename
      t7502: rename commit test script to comply with naming convention
      t7500: rename commit tests script to comply with naming convention
      t7501: rename commit test to comply with naming convention

Steve Hoelzer (1):
      poll: use GetTickCount64() to avoid wrap-around issues

Steven Fernandez (1):
      git-completion.bash: add completion for stash list

Strain, Roger L (4):
      subtree: refactor split of a commit into standalone method
      subtree: make --ignore-joins pay attention to adds
      subtree: use commits before rejoins for splits
      subtree: improve decision on merges kept in split

Tao Qingyun (3):
      refs: docstring typo
      builtin/branch.c: remove useless branch_get
      branch: trivial style fix

Taylor Blau (4):
      transport.c: extract 'fill_alternate_refs_command'
      transport.c: introduce core.alternateRefsCommand
      transport.c: introduce core.alternateRefsPrefixes
      Documentation/config.txt: fix typo in core.alternateRefsCommand

Thomas Gummerer (17):
      rerere: unify error messages when read_cache fails
      rerere: lowercase error messages
      rerere: wrap paths in output in sq
      rerere: mark strings for translation
      rerere: add documentation for conflict normalization
      rerere: fix crash with files rerere can't handle
      rerere: only return whether a path has conflicts or not
      rerere: factor out handle_conflict function
      rerere: return strbuf from handle path
      rerere: teach rerere to handle nested conflicts
      rerere: recalculate conflict ID when unresolved conflict is committed
      rerere: mention caveat about unmatched conflict markers
      rerere: add note about files with existing conflict markers
      .gitattributes: add conflict-marker-size for relevant files
      linear-assignment: fix potential out of bounds memory access
      t5551: move setup code inside test_expect blocks
      t5551: compare sorted cookies files

Tim Schumacher (4):
      Documentation/Makefile: make manpage-base-url.xsl generation quieter
      alias: add support for aliases of an alias
      alias: show the call history when an alias is looping
      t0014: introduce an alias testing suite

Torsten Bögershausen (2):
      Make git_check_attr() a void function
      path.c: char is not (always) signed

Uwe Kleine-König (1):
      howto/using-merge-subtree: mention --allow-unrelated-histories

brian m. carlson (26):
      t: add test functions to translate hash-related values
      t0000: use hash translation table
      t0000: update tests for SHA-256
      t0002: abstract away SHA-1 specific constants
      t0064: make hash size independent
      t1006: make hash size independent
      t1400: switch hard-coded object ID to variable
      t1405: make hash size independent
      t1406: make hash-size independent
      t1407: make hash size independent
      editorconfig: provide editor settings for Git developers
      editorconfig: indicate settings should be kept in sync
      pack-bitmap-write: use GIT_MAX_RAWSZ for allocation
      builtin/repack: replace hard-coded constants
      builtin/mktree: remove hard-coded constant
      builtin/fetch-pack: remove constants with parse_oid_hex
      pack-revindex: express constants in terms of the_hash_algo
      packfile: express constants in terms of the_hash_algo
      refs/packed-backend: express constants using the_hash_algo
      upload-pack: express constants in terms of the_hash_algo
      transport: use parse_oid_hex instead of a constant
      tag: express constant in terms of the_hash_algo
      apply: replace hard-coded constants
      apply: rename new_sha1_prefix and old_sha1_prefix
      submodule: make zero-oid comparison hash function agnostic
      rerere: convert to use the_hash_algo

Ævar Arnfjörð Bjarmason (31):
      fetch: change "branch" to "reference" in --force -h output
      push tests: make use of unused $1 in test description
      push tests: use spaces in interpolated string
      fetch tests: add a test for clobbering tag behavior
      push doc: remove confusing mention of remote merger
      push doc: move mention of "tag <tag>" later in the prose
      push doc: correct lies about how push refspecs work
      fetch: document local ref updates with/without --force
      fetch: stop clobbering existing tags without --force
      fsck tests: setup of bogus commit object
      fsck tests: add a test for no skipList input
      fsck: document and test sorted skipList input
      fsck: document and test commented & empty line skipList input
      fsck: document that skipList input must be unabbreviated
      fsck: add a performance test
      fsck: support comments & empty lines in skipList
      commit-graph write: add progress output
      commit-graph verify: add progress output
      config doc: add missing list separator for checkout.optimizeNewBranch
      push doc: add spacing between two words
      fetch doc: correct grammar in --force docs
      gc: fix regression in 7b0f229222 impacting --quiet
      gc doc: mention the commit-graph in the intro
      pack-objects test: modernize style
      pack-objects tests: don't leave test .git corrupt at end
      index-pack tests: don't leave test repo dirty at end
      range-diff doc: add a section about output stability
      range-diff: fix regression in passing along diff options
      range-diff: make diff option behavior (e.g. --stat) consistent
      rebase doc: document rebase.useBuiltin
      tests: add a special setup where rebase.useBuiltin is off


^ permalink raw reply	[relevance 2%]

* What's cooking in git.git (Nov 2018, #02; Fri, 2)
@ 2018-11-02  5:10  1% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2018-11-02  5:10 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.  The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

The eighth batch is all about "rebase and rebase-i in C" ;-)

The disruptive "let's split up the Documentation/config.txt file"
topic will enter 'next' soon, and I expect I'd be slow while it
skips over various topics in flight that changes the source it
touches, as they would produce conflicts with different shape and
won't be helped by rerere.  Let's merge it down quickly.

You can find the changes described here in the integration branches
of the repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[Graduated to "master"]

* ag/rebase-i-in-c (2018-10-09) 20 commits
  (merged to 'next' on 2018-10-19 at 1b24712d46)
 + rebase -i: move rebase--helper modes to rebase--interactive
 + rebase -i: remove git-rebase--interactive.sh
 + rebase--interactive2: rewrite the submodes of interactive rebase in C
 + rebase -i: implement the main part of interactive rebase as a builtin
 + rebase -i: rewrite init_basic_state() in C
 + rebase -i: rewrite write_basic_state() in C
 + rebase -i: rewrite the rest of init_revisions_and_shortrevisions() in C
 + rebase -i: implement the logic to initialize $revisions in C
 + rebase -i: remove unused modes and functions
 + rebase -i: rewrite complete_action() in C
 + t3404: todo list with commented-out commands only aborts
 + sequencer: change the way skip_unnecessary_picks() returns its result
 + sequencer: refactor append_todo_help() to write its message to a buffer
 + rebase -i: rewrite checkout_onto() in C
 + rebase -i: rewrite setup_reflog_action() in C
 + sequencer: add a new function to silence a command, except if it fails
 + rebase -i: rewrite the edit-todo functionality in C
 + editor: add a function to launch the sequence editor
 + rebase -i: rewrite append_todo_help() in C
 + sequencer: make three functions and an enum from sequencer.c public
 (this branch is used by ag/sequencer-reduce-rewriting-todo, cb/printf-empty-format, js/rebase-autostash-fix, js/rebase-i-break, js/rebase-i-shortopt, js/rebase-in-c-5.5-work-with-rebase-i-in-c and pk/rebase-in-c-6-final.)

 Rewrite of the remaining "rebase -i" machinery in C.


* cb/printf-empty-format (2018-10-27) 1 commit
  (merged to 'next' on 2018-11-01 at 9fcb05f22c)
 + sequencer: cleanup for gcc warning in non developer mode
 (this branch uses ag/rebase-i-in-c; is tangled with ag/sequencer-reduce-rewriting-todo, js/rebase-autostash-fix, js/rebase-i-break, js/rebase-i-shortopt, js/rebase-in-c-5.5-work-with-rebase-i-in-c and pk/rebase-in-c-6-final.)

 Build fix for a topic in flight.


* jc/rebase-in-c-5-test-typofix (2018-10-11) 1 commit
  (merged to 'next' on 2018-10-19 at 08c9d86ffd)
 + rebase: fix typoes in error messages
 (this branch uses pk/rebase-in-c, pk/rebase-in-c-2-basic, pk/rebase-in-c-3-acts, pk/rebase-in-c-4-opts and pk/rebase-in-c-5-test; is tangled with js/rebase-autostash-fix, js/rebase-in-c-5.5-work-with-rebase-i-in-c and pk/rebase-in-c-6-final.)

 Typofix.


* js/rebase-autostash-fix (2018-10-24) 5 commits
  (merged to 'next' on 2018-10-29 at 680e648001)
 + rebase --autostash: fix issue with dirty submodules
 + rebase --autostash: demonstrate a problem with dirty submodules
 + rebase (autostash): use an explicit OID to apply the stash
 + rebase (autostash): store the full OID in <state-dir>/autostash
 + rebase (autostash): avoid duplicate call to state_dir_path()
 (this branch uses ag/rebase-i-in-c, js/rebase-in-c-5.5-work-with-rebase-i-in-c, pk/rebase-in-c, pk/rebase-in-c-2-basic, pk/rebase-in-c-3-acts, pk/rebase-in-c-4-opts, pk/rebase-in-c-5-test and pk/rebase-in-c-6-final; is tangled with ag/sequencer-reduce-rewriting-todo, cb/printf-empty-format, jc/rebase-in-c-5-test-typofix, js/rebase-i-break and js/rebase-i-shortopt.)

 "git rebase" that has recently been rewritten in C had a few issues
 in its "--autstash" feature, which have been corrected.


* js/rebase-i-break (2018-10-12) 2 commits
  (merged to 'next' on 2018-10-19 at 6db9b14495)
 + rebase -i: introduce the 'break' command
 + rebase -i: clarify what happens on a failed `exec`
 (this branch is used by js/rebase-i-shortopt; uses ag/rebase-i-in-c; is tangled with ag/sequencer-reduce-rewriting-todo, cb/printf-empty-format, js/rebase-autostash-fix, js/rebase-in-c-5.5-work-with-rebase-i-in-c and pk/rebase-in-c-6-final.)

 "git rebase -i" learned a new insn, 'break', that the user can
 insert in the to-do list.  Upon hitting it, the command returns
 control back to the user.


* js/rebase-i-shortopt (2018-10-26) 1 commit
  (merged to 'next' on 2018-11-01 at 4e9da19145)
 + rebase -i: recognize short commands without arguments
 (this branch uses ag/rebase-i-in-c and js/rebase-i-break; is tangled with ag/sequencer-reduce-rewriting-todo, cb/printf-empty-format, js/rebase-autostash-fix, js/rebase-in-c-5.5-work-with-rebase-i-in-c and pk/rebase-in-c-6-final.)

 "git rebase -i" learned to take 'b' as the short form of 'break'
 option in the todo list.


* js/rebase-in-c-5.5-work-with-rebase-i-in-c (2018-10-11) 2 commits
  (merged to 'next' on 2018-10-19 at b734d81006)
 + builtin rebase: prepare for builtin rebase -i
 + Merge branch 'ag/rebase-i-in-c' into js/rebase-in-c-5.5-work-with-rebase-i-in-c
 (this branch is used by js/rebase-autostash-fix and pk/rebase-in-c-6-final; uses ag/rebase-i-in-c, pk/rebase-in-c, pk/rebase-in-c-2-basic, pk/rebase-in-c-3-acts, pk/rebase-in-c-4-opts and pk/rebase-in-c-5-test; is tangled with ag/sequencer-reduce-rewriting-todo, cb/printf-empty-format, jc/rebase-in-c-5-test-typofix, js/rebase-i-break and js/rebase-i-shortopt.)

 "rebase" that has been rewritten learns the new calling convention
 used by "rebase -i" that was rewritten in C, tying the loose end
 between two GSoC topics that stomped on each other's toes.


* pk/rebase-in-c (2018-08-06) 3 commits
  (merged to 'next' on 2018-10-19 at 26c29ace53)
 + builtin/rebase: support running "git rebase <upstream>"
 + rebase: refactor common shell functions into their own file
 + rebase: start implementing it as a builtin
 (this branch is used by jc/rebase-in-c-5-test-typofix, js/rebase-autostash-fix, js/rebase-in-c-5.5-work-with-rebase-i-in-c, pk/rebase-in-c-2-basic, pk/rebase-in-c-3-acts, pk/rebase-in-c-4-opts, pk/rebase-in-c-5-test and pk/rebase-in-c-6-final.)

 Rewrite of the "rebase" machinery in C.


* pk/rebase-in-c-2-basic (2018-09-06) 11 commits
  (merged to 'next' on 2018-10-19 at c2a0046e52)
 + builtin rebase: support `git rebase <upstream> <switch-to>`
 + builtin rebase: only store fully-qualified refs in `options.head_name`
 + builtin rebase: start a new rebase only if none is in progress
 + builtin rebase: support --force-rebase
 + builtin rebase: try to fast forward when possible
 + builtin rebase: require a clean worktree
 + builtin rebase: support the `verbose` and `diffstat` options
 + builtin rebase: support --quiet
 + builtin rebase: handle the pre-rebase hook and --no-verify
 + builtin rebase: support `git rebase --onto A...B`
 + builtin rebase: support --onto
 (this branch is used by jc/rebase-in-c-5-test-typofix, js/rebase-autostash-fix, js/rebase-in-c-5.5-work-with-rebase-i-in-c, pk/rebase-in-c-3-acts, pk/rebase-in-c-4-opts, pk/rebase-in-c-5-test and pk/rebase-in-c-6-final; uses pk/rebase-in-c.)

 Rewrite "git rebase" in C.


* pk/rebase-in-c-3-acts (2018-09-06) 7 commits
  (merged to 'next' on 2018-10-19 at 9275677430)
 + builtin rebase: stop if `git am` is in progress
 + builtin rebase: actions require a rebase in progress
 + builtin rebase: support --edit-todo and --show-current-patch
 + builtin rebase: support --quit
 + builtin rebase: support --abort
 + builtin rebase: support --skip
 + builtin rebase: support --continue
 (this branch is used by jc/rebase-in-c-5-test-typofix, js/rebase-autostash-fix, js/rebase-in-c-5.5-work-with-rebase-i-in-c, pk/rebase-in-c-4-opts, pk/rebase-in-c-5-test and pk/rebase-in-c-6-final; uses pk/rebase-in-c and pk/rebase-in-c-2-basic.)

 Rewrite "git rebase" in C.


* pk/rebase-in-c-4-opts (2018-10-11) 18 commits
  (merged to 'next' on 2018-10-19 at 2770b2f5d5)
 + builtin rebase: support --root
 + builtin rebase: add support for custom merge strategies
 + builtin rebase: support `fork-point` option
 + merge-base --fork-point: extract libified function
 + builtin rebase: support --rebase-merges[=[no-]rebase-cousins]
 + builtin rebase: support `--allow-empty-message` option
 + builtin rebase: support `--exec`
 + builtin rebase: support `--autostash` option
 + builtin rebase: support `-C` and `--whitespace=<type>`
 + builtin rebase: support `--gpg-sign` option
 + builtin rebase: support `--autosquash`
 + builtin rebase: support `keep-empty` option
 + builtin rebase: support `ignore-date` option
 + builtin rebase: support `ignore-whitespace` option
 + builtin rebase: support --committer-date-is-author-date
 + builtin rebase: support --rerere-autoupdate
 + builtin rebase: support --signoff
 + builtin rebase: allow selecting the rebase "backend"
 (this branch is used by jc/rebase-in-c-5-test-typofix, js/rebase-autostash-fix, js/rebase-in-c-5.5-work-with-rebase-i-in-c, pk/rebase-in-c-5-test and pk/rebase-in-c-6-final; uses pk/rebase-in-c, pk/rebase-in-c-2-basic and pk/rebase-in-c-3-acts.)

 Rewrite "git rebase" in C.


* pk/rebase-in-c-5-test (2018-10-11) 6 commits
  (merged to 'next' on 2018-10-19 at 0e48bc8243)
 + builtin rebase: error out on incompatible option/mode combinations
 + builtin rebase: use no-op editor when interactive is "implied"
 + builtin rebase: show progress when connected to a terminal
 + builtin rebase: fast-forward to onto if it is a proper descendant
 + builtin rebase: optionally pass custom reflogs to reset_head()
 + builtin rebase: optionally auto-detect the upstream
 (this branch is used by jc/rebase-in-c-5-test-typofix, js/rebase-autostash-fix, js/rebase-in-c-5.5-work-with-rebase-i-in-c and pk/rebase-in-c-6-final; uses pk/rebase-in-c, pk/rebase-in-c-2-basic, pk/rebase-in-c-3-acts and pk/rebase-in-c-4-opts.)

 Rewrite "git rebase" in C.


* pk/rebase-in-c-6-final (2018-10-11) 1 commit
  (merged to 'next' on 2018-10-19 at 52f1dadf69)
 + rebase: default to using the builtin rebase
 (this branch is used by js/rebase-autostash-fix; uses ag/rebase-i-in-c, js/rebase-in-c-5.5-work-with-rebase-i-in-c, pk/rebase-in-c, pk/rebase-in-c-2-basic, pk/rebase-in-c-3-acts, pk/rebase-in-c-4-opts and pk/rebase-in-c-5-test; is tangled with ag/sequencer-reduce-rewriting-todo, cb/printf-empty-format, jc/rebase-in-c-5-test-typofix, js/rebase-i-break and js/rebase-i-shortopt.)

 The final step of rewriting "rebase -i" in C.

--------------------------------------------------
[New Topics]

* ab/dynamic-gettext-poison (2018-11-02) 1 commit
 - i18n: make GETTEXT_POISON a runtime option


* js/rebase-p-tests (2018-11-02) 3 commits
 - tests: optionally skip `git rebase -p` tests
 - t3418: decouple test cases from a previous `rebase -p` test case
 - t3404: decouple some test cases from outcomes of previous test cases

 In preparation to the day when we can deprecate and remove the
 "rebase -p", make sure we can skip and later remove tests for
 it.

 Will merge to 'next'.


* sg/travis-install-dependencies (2018-11-02) 1 commit
 - travis-ci: install packages in 'ci/install-dependencies.sh'
 (this branch uses ss/travis-ci-force-vm-mode.)

 The procedure to install dependencies before testing at Travis CI
 is getting revamped for both simplicity and flexibility, taking
 advantage of the recent move to the vm-based environment.

--------------------------------------------------
[Stalled]

* lt/date-human (2018-07-09) 1 commit
 - Add 'human' date format

 A new date format "--date=human" that morphs its output depending
 on how far the time is from the current time has been introduced.
 "--date=auto" can be used to use this new format when the output is
 goint to the pager or to the terminal and otherwise the default
 format.

--------------------------------------------------
[Cooking]

* ab/push-dwim-dst (2018-10-29) 9 commits
 - SQUASH???
 - push doc: document the DWYM behavior pushing to unqualified <dst>
 - push: add DWYM support for "git push refs/remotes/...:<dst>"
 - push: test that <src> doesn't DWYM if <dst> is unqualified
 - push: add an advice on unqualified <dst> push
 - push: move unqualified refname error into a function
 - push: improve the error shown on unqualified <dst> push
 - i18n: remote.c: mark error(...) messages for translation
 - remote.c: add braces in anticipation of a follow-up change

 "git push $there $src:$dst" rejects when $dst is not a fully
 qualified refname and not clear what the end user meant.  The
 codepath has been taught to give a clearer error message, and also
 guess where the push should go by taking the type of the pushed
 object into account (e.g. a tag object would want to go under
 refs/tags/).

 The last few steps are questionable.
 cf. <87in1lkw54.fsf@evledraar.gmail.com>


* md/list-lazy-objects-fix (2018-10-29) 1 commit
 - list-objects.c: don't segfault for missing cmdline objects

 "git rev-list --exclude-promissor-objects" had to take an object
 that does not exist locally (and is lazily available) from the
 command line without barfing, but the code dereferenced NULL.

 That sympotom may be worth addressing, but I think the "fix" is
 overly broad and is wrong.  Giving a missing object should be
 diagnosed as an error, not swept under the rug silently.


* nd/i18n (2018-10-29) 12 commits
 - fsck: mark strings for translation
 - parse-options.c: mark more strings for translation
 - parse-options: replace opterror() with optname()
 - repack: mark more strings for translation
 - remote.c: mark messages for translation
 - reflog: mark strings for translation
 - read-cache.c: add missing colon separators
 - read-cache.c: mark more strings for translation
 - attr.c: mark more string for translation
 - archive.c: mark more strings for translation
 - alias.c: mark split_cmdline_strerror() strings for translation
 - git.c: mark more strings for translation

 More _("i18n") markings.

 Some changes seem not to be mere mechanical convesions and needs
 a careful review.


* nd/pthreads (2018-10-29) 10 commits
 - read-cache.c: initialize copy_len to shut up gcc 8
 - Clean up pthread_create() error handling
 - read-cache.c: remove #ifdef NO_PTHREADS
 - pack-objects: remove #ifdef NO_PTHREADS
 - preload-index.c: remove #ifdef NO_PTHREADS
 - grep: remove #ifdef NO_PTHREADS
 - attr.c: remove #ifdef NO_PTHREADS
 - name-hash.c: remove #ifdef NO_PTHREADS
 - index-pack: remove #ifdef NO_PTHREADS
 - thread-utils: macros to unconditionally compile pthreads API

 The codebase has been cleaned up to reduce "#ifndef NO_PTHREADS".


* nd/wildmatch-double-asterisk (2018-10-29) 1 commit
  (merged to 'next' on 2018-11-01 at 627186d020)
 + wildmatch: change behavior of "foo**bar" in WM_PATHNAME mode

 A pattern with '**' that does not have a slash on either side used
 to be an invalid one, but the code now treats such double-asterisks
 the same way as two normal asterisks that happen to be adjacent to
 each other.

 Will merge to 'master'.


* rj/header-cleanup (2018-10-29) 3 commits
  (merged to 'next' on 2018-11-01 at 975e56048f)
 + commit-reach.h: add missing declarations (hdr-check)
 + ewok_rlw.h: add missing 'inline' to function definition
 + fetch-object.h: add missing declaration (hdr-check)

 Code cleanup.

 Will merge to 'master'.


* js/mingw-ns-filetime (2018-10-24) 3 commits
  (merged to 'next' on 2018-10-29 at 4563a0d9d0)
 + mingw: implement nanosecond-precision file times
 + mingw: replace MSVCRT's fstat() with a Win32-based implementation
 + mingw: factor out code to set stat() data

 Windows port learned to use nano-second resolution file timestamps.

 Will merge to 'master'.


* bp/refresh-index-using-preload (2018-10-30) 1 commit
  (merged to 'next' on 2018-11-01 at 289e6bcece)
 + speed up refresh_index() by utilizing preload_index()

 The helper function to refresh the cached stat information in the
 in-core index has learned to perform the lstat() part of the
 operation in parallel on multi-core platforms.

 Will merge to 'master'.


* sg/test-verbose-log (2018-10-30) 1 commit
  (merged to 'next' on 2018-11-01 at 0c4a18a71f)
 + test-lib: introduce the '-V' short option for '--verbose-log'

 Our test scripts can now take the '-V' option as a synonym for the
 '--verbose-log' option.

 Will merge to 'master'.


* ab/pack-tests-cleanup (2018-10-31) 3 commits
 - index-pack tests: don't leave test repo dirty at end
 - pack-objects tests: don't leave test .git corrupt at end
 - pack-objects test: modernize style

 A couple of tests used to leave the repository in a state that is
 deliberately corrupt, which have been corrected.

 Will merge to 'next'.


* jk/detect-truncated-zlib-input (2018-10-31) 4 commits
 - Adjust for 2.19.x series
 - cat-file: handle streaming failures consistently
 - check_stream_sha1(): handle input underflow
 - t1450: check large blob in trailing-garbage test

 A regression in Git 2.12 era made "git fsck" fall into an infinite
 loop while processing truncated loose objects.

 Will merge to 'next'.


* jk/proto-v2-ref-prefix-fix (2018-10-31) 2 commits
 - ls-remote: pass heads/tags prefixes to transport
 - ls-remote: do not send ref prefixes for patterns

 "git ls-remote $there foo" was broken by recent update for the
 protocol v2 and stopped showing refs that match 'foo' that are not
 refs/{heads,tags}/foo, which has been fixed.

 Will merge to 'next'.


* jk/stream-pack-non-delta-clarification (2018-10-31) 1 commit
 - read_istream_pack_non_delta(): document input handling

 Additional comment on a tricky piece of code to help developers.

 Will merge to 'next'.


* js/mingw-isatty-and-dup2 (2018-10-31) 1 commit
 - mingw: fix isatty() after dup2()

 Windows fix.

 Will merge to 'next'.


* js/mingw-perl5lib (2018-10-31) 4 commits
 - mingw: unset PERL5LIB by default
 - config: move Windows-specific config settings into compat/mingw.c
 - config: allow for platform-specific core.* config settings
 - config: rename `dummy` parameter to `cb` in git_default_config()

 Windows fix.

 Will merge to 'next'.


* js/mingw-utf8-env (2018-10-31) 2 commits
 - mingw: reencode environment variables on the fly (UTF-16 <-> UTF-8)
 - t7800: fix quoting

 Windows fix.

 Will merge to 'next'.


* ma/sequencer-do-reset-saner-loop-termination (2018-10-31) 1 commit
 - sequencer: break out of loop explicitly

 Code readability fix.

 Will merge to 'next'.


* nb/worktree-api-doc (2018-10-31) 2 commits
 - worktree: rename is_worktree_locked to worktree_lock_reason
 - worktree: update documentation for lock_reason and lock_reason_valid

 Code readability fix.

 Will merge to 'next'.


* sh/mingw-safer-compat-poll (2018-11-01) 1 commit
 - poll: use GetTickCount64() to avoid wrap-around issues

 Windows fix.

 Will merge to 'next'.


* sb/more-repo-in-api (2018-10-19) 19 commits
 - submodule: don't add submodule as odb for push
 - submodule: use submodule repos for object lookup
 - pretty: prepare format_commit_message to handle arbitrary repositories
 - commit: prepare logmsg_reencode to handle arbitrary repositories
 - commit: prepare repo_unuse_commit_buffer to handle arbitrary repositories
 - commit: prepare get_commit_buffer to handle arbitrary repositories
 - commit-reach: prepare in_merge_bases[_many] to handle arbitrary repositories
 - commit-reach: prepare get_merge_bases to handle arbitrary repositories
 - commit-reach.c: allow get_merge_bases_many_0 to handle arbitrary repositories
 - commit-reach.c: allow remove_redundant to handle arbitrary repositories
 - commit-reach.c: allow merge_bases_many to handle arbitrary repositories
 - commit-reach.c: allow paint_down_to_common to handle arbitrary repositories
 - commit: allow parse_commit* to handle arbitrary repositories
 - object: parse_object to honor its repository argument
 - object-store: prepare has_{sha1, object}_file[_with_flags] to handle arbitrary repositories
 - object-store: prepare read_object_file to deal with arbitrary repositories
 - object-store: allow read_object_file_extended to read from arbitrary repositories
 - packfile: allow has_packed_and_bad to handle arbitrary repositories
 - sha1_file: allow read_object to read objects in arbitrary repositories

 The in-core repository instances are passed through more codepaths.

 On hold.
 Not quite correct?
 cf. <20181025091406.GK30222@szeder.dev>
 Reroll being worked on.
 cf. <20181030220817.61691-1-sbeller@google.com>


* en/merge-path-collision (2018-10-22) 8 commits
 - merge-recursive: improve rename/rename(1to2)/add[/add] handling
 - merge-recursive: use handle_file_collision for add/add conflicts
 - merge-recursive: improve handling for rename/rename(2to1) conflicts
 - merge-recursive: fix rename/add conflict handling
 - merge-recursive: new function for better colliding conflict resolutions
 - merge-recursive: increase marker length with depth of recursion
 - t6036, t6042: testcases for rename collision of already conflicting files
 - Add testcases for consistency in file collision conflict handling
 (this branch uses en/merge-cleanup-more.)

 Updates for corner cases in merge-recursive.

 Expecting a reroll.
 cf. <CABPp-BGq1YDdzZ6CqzCp9QXPZy6XxV8sujyRxwBc-EnS+ygSrg@mail.gmail.com>


* jt/tighten-fetch-proto-v2-response (2018-11-01) 1 commit
 - fetch-pack: be more precise in parsing v2 response

 "git fetch" was a bit loose in parsing resposes from the other side
 when talking over the protocol v2.

 Will merge to 'next'.


* nd/complete-format-patch (2018-10-22) 1 commit
 . completion: use __gitcomp_builtin for format-patch

 Expecting a reroll.


* nd/completion-negation (2018-10-22) 1 commit
  (merged to 'next' on 2018-10-29 at 87e73b0c72)
 + completion: fix __gitcomp_builtin no longer consider extra options

 The command line completion machinery (in contrib/) has been
 updated to allow the completion script to tweak the list of options
 that are reported by the parse-options machinery correctly.

 Will merge to 'master'.


* nd/config-split (2018-10-29) 79 commits
 - config.txt: remove config/dummy.txt
 - config.txt: move worktree.* to a separate file
 - config.txt: move web.* to a separate file
 - config.txt: move versionsort.* to a separate file
 - config.txt: move user.* to a separate file
 - config.txt: move url.* to a separate file
 - config.txt: move uploadpack.* to a separate file
 - config.txt: move uploadarchive.* to a separate file
 - config.txt: move transfer.* to a separate file
 - config.txt: move tag.* to a separate file
 - config.txt: move submodule.* to a separate file
 - config.txt: move stash.* to a separate file
 - config.txt: move status.* to a separate file
 - config.txt: move splitIndex.* to a separate file
 - config.txt: move showBranch.* to a separate file
 - config.txt: move sequencer.* to a separate file
 - config.txt: move sendemail-config.txt to config/
 - config.txt: move reset.* to a separate file
 - config.txt: move rerere.* to a separate file
 - config.txt: move repack.* to a separate file
 - config.txt: move remotes.* to a separate file
 - config.txt: move remote.* to a separate file
 - config.txt: move receive-config.txt to config/
 - config.txt: move rebase-config.txt to config/
 - config.txt: move push-config.txt to config/
 - config.txt: move pull-config.txt to config/
 - config.txt: move protocol.* to a separate file
 - config.txt: move pretty.* to a separate file
 - config.txt: move pager.* to a separate file
 - config.txt: move pack.* to a separate file
 - config.txt: move notes.* to a separate file
 - config.txt: move mergetool.* to a separate file
 - config.txt: move merge-config.txt to config/
 - config.txt: move man.* to a separate file
 - config.txt: move mailmap.* to a separate file
 - config.txt: move mailinfo.* to a separate file
 - config.txt: move log.* to a separate file
 - config.txt: move interactive.* to a separate file
 - config.txt: move instaweb.* to a separate file
 - config.txt: move init.* to a separate file
 - config.txt: move index.* to a separate file
 - git-imap-send.txt: move imap.* to a separate file
 - config.txt: move i18n.* to a separate file
 - config.txt: move http.* to a separate file
 - config.txt: move ssh.* to a separate file
 - config.txt: move help.* to a separate file
 - config.txt: move guitool.* to a separate file
 - config.txt: move gui-config.txt to config/
 - config.txt: move gpg.* to a separate file
 - config.txt: move grep.* to a separate file
 - config.txt: move gitweb.* to a separate file
 - config.txt: move gitcvs-config.txt to config/
 - config.txt: move gc.* to a separate file
 - config.txt: move fsck.* to a separate file
 - config.txt: move fmt-merge-msg-config.txt to config/
 - config.txt: move format-config.txt to config/
 - config.txt: move filter.* to a separate file
 - config.txt: move fetch-config.txt to config/
 - config.txt: move fastimport.* to a separate file
 - config.txt: move difftool.* to a separate file
 - config.txt: move diff-config.txt to config/
 - config.txt: move completion.* to a separate file
 - config.txt: move credential.* to a separate file
 - config.txt: move commit.* to a separate file
 - config.txt: move column.* to a separate file
 - config.txt: move color.* to a separate file
 - config.txt: move clean.* to a separate file
 - config.txt: move checkout.* to a separate file
 - config.txt: move browser.* to a separate file
 - config.txt: move branch.* to a separate file
 - config.txt: move blame.* to a separate file
 - config.txt: move apply.* to a separate file
 - config.txt: move am.* to a separate file
 - config.txt: move alias.* to a separate file
 - config.txt: move add.* to a separate file
 - config.txt: move core.* to a separate file
 - config.txt: move advice.* to a separate file
 - Update makefile in preparation for Documentation/config/*.txt
 - Merge branches 'bp/reset-quiet' and 'js/mingw-http-ssl' into nd/config-split
 (this branch uses bp/reset-quiet and js/mingw-http-ssl; is tangled with jc/http-curlver-warnings.)

 Split the overly large Documentation/config.txt file into million
 little pieces.  This potentially allows each individual piece
 included into the manual page of the command it affects more easily.

 Will merge to 'next'.

 This is a painful conversions while many other topics in flight
 wants to add to or edit the documentation of configuration
 variables.


* nd/per-worktree-config (2018-10-22) 2 commits
  (merged to 'next' on 2018-11-01 at 3746343ca8)
 + worktree: add per-worktree config files
 + t1300: extract and use test_cmp_config()

 A fourth class of configuration files (in addition to the
 traditional "system wide", "per user in the $HOME directory" and
 "per repository in the $GIT_DIR/config") has been introduced so
 that different worktrees that share the same repository (hence the
 same $GIT_DIR/config file) can use different customization.

 Will merge to 'master'.


* nd/submodule-unused-vars (2018-10-22) 1 commit
  (merged to 'next' on 2018-10-29 at 33641dcc89)
 + submodule.c: remove some of the_repository references

 Code clean-up.

 Will merge to 'master'.


* nd/unpack-trees-with-cache-tree (2018-10-22) 1 commit
  (merged to 'next' on 2018-10-29 at de51b606da)
 + read-cache: use of memory after it is freed

 Trivial bugfix.

 Will merge to 'master'.


* ag/rev-parse-all-exclude-fix (2018-11-01) 1 commit
 - rev-parse: clear --exclude list after 'git rev-parse --all'

 "git rev-parse --exclude=* --branches --branches"  (i.e. first
 saying "add only things that do not match '*' out of all branches"
 and then adding all branches, without any exclusion this time")
 worked as expected, but "--exclude=* --all --all" did not work the
 same way, which has been fixed.

 Will merge to 'next'.


* bp/reset-quiet (2018-10-24) 3 commits
  (merged to 'next' on 2018-10-29 at 71f4fbc802)
 + reset: warn when refresh_index() takes more than 2 seconds
 + reset: add new reset.quiet config setting
 + reset: don't compute unstaged changes after reset when --quiet
 (this branch is used by nd/config-split.)

 "git reset --quiet" no longer runs "update-index --refresh"
 internally, which shifts the refresh cost away from the command.

 Will merge to 'master'.


* js/remote-archive-dwimfix (2018-10-26) 1 commit
  (merged to 'next' on 2018-10-26 at f5bf6946bd)
 + archive: initialize archivers earlier

 The logic to determine the archive type "git archive" uses did not
 correctly kick in for "git archive --remote", which has been
 corrected.

 Will merge to 'master'.


* js/shallow-and-fetch-prune (2018-10-25) 3 commits
  (merged to 'next' on 2018-10-26 at 93b7196560)
 + repack -ad: prune the list of shallow commits
 + shallow: offer to prune only non-existing entries
 + repack: point out a bug handling stale shallow info

 "git repack" in a shallow clone did not correctly update the
 shallow points in the repository, leading to a repository that
 does not pass fsck.

 Will merge to 'master'.


* jw/send-email-no-auth (2018-10-23) 1 commit
  (merged to 'next' on 2018-10-29 at a3fbbdb889)
 + send-email: explicitly disable authentication

 "git send-email" learned to disable SMTP authentication via the
 "--smtp-auth=none" option, even when the smtp username is given
 (which turns the authentication on by default).

 Will merge to 'master'.


* md/exclude-promisor-objects-fix (2018-10-23) 2 commits
  (merged to 'next' on 2018-10-29 at fb36a5dcbe)
 + exclude-promisor-objects: declare when option is allowed
 + Documentation/git-log.txt: do not show --exclude-promisor-objects

 Operations on promisor objects make sense in the context of only a
 small subset of the commands that internally use the revisions
 machinery, but the "--exclude-promisor-objects" option were taken
 and led to nonsense results by commands like "log", to which it
 didn't make much sense.  This has been corrected.

 Will merge to 'master'.


* mg/gpg-fingerprint (2018-10-23) 3 commits
  (merged to 'next' on 2018-10-26 at 1e219cb754)
 + gpg-interface.c: obtain primary key fingerprint as well
 + gpg-interface.c: support getting key fingerprint via %GF format
 + gpg-interface.c: use flags to determine key/signer info presence
 (this branch uses mg/gpg-parse-tighten; is tangled with jc/gpg-cocci-preincr.)

 New "--pretty=format:" placeholders %GF and %GP that show the GPG
 key fingerprints have been invented.

 Will merge to 'master'.


* jc/http-curlver-warnings (2018-10-26) 1 commit
  (merged to 'next' on 2018-10-26 at 870e125cec)
 + http: give curl version warnings consistently
 (this branch uses js/mingw-http-ssl; is tangled with nd/config-split.)

 Warning message fix.

 Will merge to 'master'.


* sd/stash-wo-user-name (2018-11-02) 1 commit
 - t3903-stash: test without configured user.name and user.email

 An early part of a wip.


* sg/test-rebase-editor-fix (2018-10-29) 1 commit
  (merged to 'next' on 2018-11-01 at 271e0fc663)
 + t3404-rebase-interactive: test abbreviated commands

 Will merge to 'master'.


* ss/travis-ci-force-vm-mode (2018-10-26) 1 commit
  (merged to 'next' on 2018-11-01 at 8596bb2a65)
 + travis-ci: no longer use containers
 (this branch is used by sg/travis-install-dependencies.)

 The "container" mode of TravisCI is going away.  Our .travis.yml
 file is getting prepared for the transition.

 Will merge to 'master'.


* tb/char-may-be-unsigned (2018-10-26) 1 commit
  (merged to 'next' on 2018-11-01 at 9e14f289f8)
 + path.c: char is not (always) signed

 Build portability fix.

 Will merge to 'master'.


* jt/upload-pack-v2-fix-shallow (2018-10-19) 3 commits
  (merged to 'next' on 2018-10-29 at d9010b3c7b)
 + upload-pack: clear flags before each v2 request
 + upload-pack: make want_obj not global
 + upload-pack: make have_obj not global

 "git fetch" over protocol v2 into a shallow repository failed to
 fetch full history behind a new tip of history that was diverged
 before the cut-off point of the history that was previously fetched
 shallowly.

 Will merge to 'master'.


* pw/am-rebase-read-author-script (2018-11-01) 5 commits
 - sequencer: use read_author_script()
 - add read_author_script() to libgit
 - am: rename read_author_script()
 - am: improve author-script error reporting
 - am: don't die in read_author_script()

 Unify code to read the author-script used in "git am" and the
 commands that use the sequencer machinery, e.g. "git rebase -i".

 Will merge to 'next'.


* sb/submodule-url-to-absolute (2018-10-18) 1 commit
  (merged to 'next' on 2018-10-29 at 4264c150cb)
 + submodule helper: convert relative URL to absolute URL if needed

 Some codepaths failed to form a proper URL when .gitmodules record
 the URL to a submodule repository as relative to the repository of
 superproject, which has been corrected.

 Will merge to 'master'.


* en/merge-cleanup-more (2018-10-18) 2 commits
  (merged to 'next' on 2018-10-26 at c706319c26)
 + merge-recursive: avoid showing conflicts with merge branch before HEAD
 + merge-recursive: improve auto-merging messages with path collisions
 (this branch is used by en/merge-path-collision.)

 Further clean-up of merge-recursive machinery.

 Will merge to 'master'.


* mg/gpg-parse-tighten (2018-10-22) 1 commit
  (merged to 'next' on 2018-10-26 at efdec77193)
 + gpg-interface.c: detect and reject multiple signatures on commits
 (this branch is used by jc/gpg-cocci-preincr and mg/gpg-fingerprint.)

 Detect and reject a signature block that has more than one GPG
 signature.

 Will merge to 'master'.


* bc/sha-256 (2018-10-25) 12 commits
 - hash: add an SHA-256 implementation using OpenSSL
 - sha256: add an SHA-256 implementation using libgcrypt
 - Add a base implementation of SHA-256 support
 - commit-graph: convert to using the_hash_algo
 - t/helper: add a test helper to compute hash speed
 - sha1-file: add a constant for hash block size
 - t: make the sha1 test-tool helper generic
 - t: add basic tests for our SHA-1 implementation
 - cache: make hashcmp and hasheq work with larger hashes
 - hex: introduce functions to print arbitrary hashes
 - sha1-file: provide functions to look up hash algorithms
 - sha1-file: rename algorithm to "sha1"

 Add sha-256 hash and plug it through the code to allow building Git
 with the "NewHash".

 Expecting a reroll.
 cf. <20181031225521.GA573515@genre.crustytoothpaste.net>


* js/mingw-http-ssl (2018-10-26) 3 commits
  (merged to 'next' on 2018-10-26 at 318e82e101)
 + http: when using Secure Channel, ignore sslCAInfo by default
 + http: add support for disabling SSL revocation checks in cURL
 + http: add support for selecting SSL backends at runtime
 (this branch is used by jc/http-curlver-warnings and nd/config-split.)

 On platforms with recent cURL library, http.sslBackend configuration
 variable can be used to choose a different SSL backend at runtime.
 The Windows port uses this mechanism to switch between OpenSSL and
 Secure Channel while talking over the HTTPS protocol.

 Will merge to 'master'.


* js/vsts-ci (2018-10-16) 13 commits
 - travis: fix skipping tagged releases
 - README: add a build badge (status of the Azure Pipelines build)
 - tests: record more stderr with --write-junit-xml in case of failure
 - tests: include detailed trace logs with --write-junit-xml upon failure
 - git-p4: use `test_atexit` to kill the daemon
 - git-daemon: use `test_atexit` in the tests
 - tests: introduce `test_atexit`
 - ci: add a build definition for Azure DevOps
 - ci/lib.sh: add support for Azure Pipelines
 - tests: optionally write results as JUnit-style .xml
 - test-date: add a subcommand to measure times in shell scripts
 - ci/lib.sh: encapsulate Travis-specific things
 - ci: rename the library of common functions

 Prepare to run test suite on Azure DevOps.

 On hold, monitoring the discussion.
 cf. <nycvar.QRO.7.76.6.1810151657080.4546@tvgsbejvaqbjf.bet>
 cf. <nycvar.QRO.7.76.6.1810261033440.4546@tvgsbejvaqbjf.bet>


* du/branch-show-current (2018-10-26) 1 commit
 - branch: introduce --show-current display option

 "git branch" learned a new subcommand "--show-current".

 On hold, monitoring the discussion.
 cf. <CAPig+cRVdogY8VLXcftbY=n9tQ9wDo4YrnrdU6+pZ3ch6uhZGA@mail.gmail.com>


* mk/use-size-t-in-zlib (2018-10-15) 1 commit
 - zlib.c: use size_t for size

 The wrapper to call into zlib followed our long tradition to use
 "unsigned long" for sizes of regions in memory, which have been
 updated to use "size_t".


* jc/war-on-string-list (2018-11-01) 1 commit
 - fetch: replace string-list used as a look-up table with a hashmap

 Replace three string-list instances used as look-up tables in "git
 fetch" with hashmaps.

 Will merge to 'next'.


* js/remote-archive-v2 (2018-09-28) 4 commits
  (merged to 'next' on 2018-10-12 at 5f34377f60)
 + archive: allow archive over HTTP(S) with proto v2
 + archive: implement protocol v2 archive command
 + archive: use packet_reader for communications
 + archive: follow test standards around assertions

 The original implementation of "git archive --remote" more or less
 bypassed the transport layer and did not work over http(s).  The
 version 2 of the protocol is defined to allow going over http(s) as
 well as Git native transport.

 Will hold.
 cf. <20181016212008.GA249669@google.com>
 Breaks interoperability.


* ag/sequencer-reduce-rewriting-todo (2018-10-09) 16 commits
 . rebase--interactive: move transform_todo_file() to rebase--interactive.c
 . sequencer: fix a call to error() in transform_todo_file()
 . sequencer: use edit_todo_list() in complete_action()
 . rebase-interactive: rewrite edit_todo_list() to handle the initial edit
 . rebase-interactive: append_todo_help() changes
 . rebase-interactive: use todo_list_transform() in edit_todo_list()
 . sequencer: refactor skip_unnecessary_picks() to work on a todo_list
 . sequencer: change complete_action() to use the refactored functions
 . sequencer: make sequencer_make_script() write its script to a strbuf
 . sequencer: refactor transform_todos() to work on a todo_list
 . sequencer: refactor rearrange_squash() to work on a todo_list
 . sequencer: refactor sequencer_add_exec_commands() to work on a todo_list
 . sequencer: refactor check_todo_list() to work on a todo_list
 . sequencer: make the todo_list structure public
 . sequencer: clear the number of items of a todo_list before parsing
 . Merge branch 'ag/rebase-i-in-c' into ag/sequencer-reduce-rewriting-todo

 The scripted version of "git rebase -i" wrote and rewrote the todo
 list many times during a single step of its operation, and the
 recent C-rewrite made a faithful conversion of the logic to C.  The
 implementation has been updated to carry necessary information
 around in-core to avoid rewriting the same file over and over
 unnecessarily.

 A reroll exists but is based on a stale codebase and is painful to
 merge.


* ds/test-multi-pack-index (2018-10-26) 4 commits
 - packfile: close multi-pack-index in close_all_packs
 - multi-pack-index: define GIT_TEST_MULTI_PACK_INDEX
 - midx: close multi-pack-index on repack
 - midx: fix broken free() in close_midx()

 Tests for the recently introduced multi-pack index machinery.

 Will merge to 'next'.


* nd/per-worktree-ref-iteration (2018-10-22) 8 commits
 - reflog expire: cover reflog from all worktrees
 - fsck: check HEAD and reflog from other worktrees
 - fsck: move fsck_head_link() to get_default_heads() to avoid some globals
 - revision.c: better error reporting on ref from different worktrees
 - revision.c: correct a parameter name
 - refs: new ref types to make per-worktree refs visible to all worktrees
 - Add a place for (not) sharing stuff between worktrees
 - refs.c: indent with tabs, not spaces

 The code to traverse objects for reachability, used to decide what
 objects are unreferenced and expendable, have been taught to also
 consider per-worktree refs of other worktrees as starting points to
 prevent data loss.

 Will merge to 'next'.


* ds/reachable-topo-order (2018-11-02) 7 commits
 - t6012: make rev-list tests more interesting
 - revision.c: generation-based topo-order algorithm
 - commit/revisions: bookkeeping before refactoring
 - revision.c: begin refactoring --topo-order logic
 - test-reach: add rev-list tests
 - test-reach: add run_three_modes method
 - prio-queue: add 'peek' operation

 The revision walker machinery learned to take advantage of the
 commit generation numbers stored in the commit-graph file.


* sb/submodule-recursive-fetch-gets-the-tip (2018-10-31) 11 commits
 - builtin/fetch: check for submodule updates in any ref update
 - fetch: try fetching submodules if needed objects were not fetched
 - submodule.c: fetch in submodules git directory instead of in worktree
 - submodule: migrate get_next_submodule to use repository structs
 - repository: repo_submodule_init to take a submodule struct
 - submodule: store OIDs in changed_submodule_names
 - submodule.c: tighten scope of changed_submodule_names struct
 - submodule.c: sort changed_submodule_names before searching it
 - submodule.c: fix indentation
 - sha1-array: provide oid_array_filter
 - Merge branch 'ao/submodule-wo-gitmodules-checked-out' into sb/submodule-recursive-fetch-gets-the-tip
 (this branch uses ao/submodule-wo-gitmodules-checked-out.)

 "git fetch --recurse-submodules" may not fetch the necessary commit
 that is bound to the superproject, which is getting corrected.

 On hold, monitoring the discussion.
 cf. <20181025233231.102245-1-sbeller@google.com>


* js/add-i-coalesce-after-editing-hunk (2018-08-28) 1 commit
 - add -p: coalesce hunks before testing applicability

 Applicability check after a patch is edited in a "git add -i/p"
 session has been improved.

 Will hold.
 cf. <e5b2900a-0558-d3bf-8ea1-d526b078bbc2@talktalk.net>


* ao/submodule-wo-gitmodules-checked-out (2018-10-31) 10 commits
 - t/helper: add test-submodule-nested-repo-config
 - submodule: support reading .gitmodules when it's not in the working tree
 - submodule: add a helper to check if it is safe to write to .gitmodules
 - t7506: clean up .gitmodules properly before setting up new scenario
 - submodule: use the 'submodule--helper config' command
 - submodule--helper: add a new 'config' subcommand
 - t7411: be nicer to future tests and really clean things up
 - t7411: merge tests 5 and 6
 - submodule: factor out a config_set_in_gitmodules_file_gently function
 - submodule: add a print_config_from_gitmodules() helper
 (this branch is used by sb/submodule-recursive-fetch-gets-the-tip.)

 The submodule support has been updated to read from the blob at
 HEAD:.gitmodules when the .gitmodules file is missing from the
 working tree.

 Will merge to 'next'.


* ps/stash-in-c (2018-10-15) 21 commits
 - stash: replace all `write-tree` child processes with API calls
 - stash: optimize `get_untracked_files()` and `check_changes()`
 - stash: convert `stash--helper.c` into `stash.c`
 - stash: convert save to builtin
 - stash: make push -q quiet
 - stash: convert push to builtin
 - stash: convert create to builtin
 - stash: convert store to builtin
 - stash: convert show to builtin
 - stash: convert list to builtin
 - stash: convert pop to builtin
 - stash: convert branch to builtin
 - stash: convert drop and clear to builtin
 - stash: convert apply to builtin
 - stash: mention options in `show` synopsis
 - stash: add tests for `git stash show` config
 - stash: rename test cases to be more descriptive
 - t3903: modernize style
 - stash: improve option parsing test coverage
 - strbuf.c: add `strbuf_join_argv()`
 - sha1-name.c: add `get_oidf()` which acts like `get_oid()`

 "git stash" rewritten in C.

 Almost there.
 cf. <20181015221040.GD4883@hank.intra.tgummerer.com>


* pw/add-p-select (2018-07-26) 4 commits
 - add -p: optimize line selection for short hunks
 - add -p: allow line selection to be inverted
 - add -p: select modified lines correctly
 - add -p: select individual hunk lines

 "git add -p" interactive interface learned to let users choose
 individual added/removed lines to be used in the operation, instead
 of accepting or rejecting a whole hunk.

 Will discard.
 No further feedbacks on the topic for quite some time.

 cf. <d622a95b-7302-43d4-4ec9-b2cf3388c653@talktalk.net>
 I found the feature to be hard to explain, and may result in more
 end-user complaints, but let's see.

--------------------------------------------------
[Discarded]

* ab/reject-alias-loop (2018-10-19) 1 commit
  (merged to 'next' on 2018-10-26 at bc213f1bef)
 + alias: detect loops in mixed execution mode

 Two (or more) aliases that mutually refer to each other can form an
 infinite loop; we now attempt to notice and stop.

 Discarded.
 Reverted out of 'next'.
 cf. <87sh0slvxm.fsf@evledraar.gmail.com>

^ permalink raw reply	[relevance 1%]

* Re: master updated? (was Re: What's cooking in git.git (Nov 2018, #01; Thu, 1))
  @ 2018-11-02  0:04  6%   ` Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2018-11-02  0:04 UTC (permalink / raw)
  To: Derrick Stolee; +Cc: git

Derrick Stolee <stolee@gmail.com> writes:

> On 11/1/2018 5:59 AM, Junio C Hamano wrote:
>> --------------------------------------------------
>> [Graduated to "master"]
>
> I see that several topics graduated, but it appears the master branch
> was not updated at https://github.com/gister/git. Was this
> intentional?

The "Nov #1" issue of "What's cooking" report lists various topics
including ah/doc-updates, ..., uk/merge- subtree-doc-update in the
"Graduated" section by mistake (probably due to crossing month
boundary); they already were listed in the previous "Oct #6" issue.

Hopefully we'll have the following topics graduate to 'master'
today, as part of the Eighth batch of the cycle.

    js/rebase-i-shortopt
    js/rebase-i-break
    js/rebase-autostash-fix
    cb/printf-empty-format
    jc/rebase-in-c-5-test-typofix
    pk/rebase-in-c-6-final
    js/rebase-in-c-5.5-work-with-rebase-i-in-c
    pk/rebase-in-c-5-test
    pk/rebase-in-c-4-opts
    pk/rebase-in-c-3-acts
    pk/rebase-in-c-2-basic
    ag/rebase-i-in-c
    pk/rebase-in-c

Thanks.

^ permalink raw reply	[relevance 6%]

* [ANNOUNCE] Git v2.17.0-rc2
@ 2018-03-28 19:56  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2018-03-28 19:56 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.17.0-rc2 is now available for testing
at the usual places.  It is comprised of 499 non-merge commits
since v2.16.0, contributed by 62 people, 19 of which are new faces.

I am hoping that we can have the final version tagged at the end of
coming weekend, before I fly out to Tokyo.  I expect to be offline
most of the next week after the final is tagged.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.17.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.16.0 are as follows.
Welcome to the Git development community!

  Adam Borowski, Alban Gruin, Andreas G. Schacker, Bernhard
  M. Wiedemann, Christian Ludwig, Gargi Sharma, Genki Sky,
  Gregory Herrero, Jon Simons, Juan F. Codagnone, Kim Gybels,
  Lucas Werkmeister, Mathias Rav, Michele Locati, Motoki Seki,
  Stefan Moch, Stephen R Guglielmo, Tatyana Krasnukha, and Thomas
  Levesque.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alexander Shopov, Alex Bennée, Ben
  Peart, Brandon Williams, brian m. carlson, Christian Couder,
  Daniel Knittl-Frank, David Pursehouse, Derrick Stolee, Elijah
  Newren, Eric Sunshine, Eric Wong, Jason Merrill, Jeff Hostetler,
  Jeff King, Johannes Schindelin, Jonathan Nieder, Jonathan Tan,
  Junio C Hamano, Kaartic Sivaraam, Mårten Kongstad, Martin
  Ågren, Matthieu Moy, Michael Haggerty, Nathan Payre, Nguyễn
  Thái Ngọc Duy, Nicolas Morey-Chaisemartin, Olga Telezhnaya,
  Patryk Obara, Phillip Wood, Prathamesh Chavan, Ramsay Jones,
  Randall S. Becker, Rasmus Villemoes, René Scharfe, Robert
  P. J. Day, Stefan Beller, SZEDER Gábor, Thomas Gummerer,
  Todd Zullinger, Torsten Bögershausen, and Yasushi SHOJI.

----------------------------------------------------------------

Git 2.17 Release Notes (draft)
==============================

Updates since v2.16
-------------------

UI, Workflows & Features

 * "diff" family of commands learned "--find-object=<object-id>" option
   to limit the findings to changes that involve the named object.

 * "git format-patch" learned to give 72-cols to diffstat, which is
   consistent with other line length limits the subcommand uses for
   its output meant for e-mails.

 * The log from "git daemon" can be redirected with a new option; one
   relevant use case is to send the log to standard error (instead of
   syslog) when running it from inetd.

 * "git rebase" learned to take "--allow-empty-message" option.

 * "git am" has learned the "--quit" option, in addition to the
   existing "--abort" option; having the pair mirrors a few other
   commands like "rebase" and "cherry-pick".

 * "git worktree add" learned to run the post-checkout hook, just like
   "git clone" runs it upon the initial checkout.

 * "git tag" learned an explicit "--edit" option that allows the
   message given via "-m" and "-F" to be further edited.

 * "git fetch --prune-tags" may be used as a handy short-hand for
   getting rid of stale tags that are locally held.

 * The new "--show-current-patch" option gives an end-user facing way
   to get the diff being applied when "git rebase" (and "git am")
   stops with a conflict.

 * "git add -p" used to offer "/" (look for a matching hunk) as a
   choice, even there was only one hunk, which has been corrected.
   Also the single-key help is now given only for keys that are
   enabled (e.g. help for '/' won't be shown when there is only one
   hunk).

 * Since Git 1.7.9, "git merge" defaulted to --no-ff (i.e. even when
   the side branch being merged is a descendant of the current commit,
   create a merge commit instead of fast-forwarding) when merging a
   tag object.  This was appropriate default for integrators who pull
   signed tags from their downstream contributors, but caused an
   unnecessary merges when used by downstream contributors who
   habitually "catch up" their topic branches with tagged releases
   from the upstream.  Update "git merge" to default to --no-ff only
   when merging a tag object that does *not* sit at its usual place in
   refs/tags/ hierarchy, and allow fast-forwarding otherwise, to
   mitigate the problem.

 * "git status" can spend a lot of cycles to compute the relation
   between the current branch and its upstream, which can now be
   disabled with "--no-ahead-behind" option.

 * "git diff" and friends learned funcname patterns for Go language
   source files.

 * "git send-email" learned "--reply-to=<address>" option.

 * Funcname pattern used for C# now recognizes "async" keyword.

 * In a way similar to how "git tag" learned to honor the pager
   setting only in the list mode, "git config" learned to ignore the
   pager setting when it is used for setting values (i.e. when the
   purpose of the operation is not to "show").


Performance, Internal Implementation, Development Support etc.

 * More perf tests for threaded grep

 * "perf" test output can be sent to codespeed server.

 * The build procedure for perl/ part has been greatly simplified by
   weaning ourselves off of MakeMaker.

 * Perl 5.8 or greater has been required since Git 1.7.4 released in
   2010, but we continued to assume some core modules may not exist and
   used a conditional "eval { require <<module>> }"; we no longer do
   this.  Some platforms (Fedora/RedHat/CentOS, for example) ship Perl
   without all core modules by default (e.g. Digest::MD5, File::Temp,
   File::Spec, Net::Domain, Net::SMTP).  Users on such platforms may
   need to install these additional modules.

 * As a convenience, we install copies of Perl modules we require which
   are not part of the core Perl distribution (e.g. Error and
   Mail::Address).  Users and packagers whose operating system provides
   these modules can set NO_PERL_CPAN_FALLBACKS to avoid installing the
   bundled modules.

 * In preparation for implementing narrow/partial clone, the machinery
   for checking object connectivity used by gc and fsck has been
   taught that a missing object is OK when it is referenced by a
   packfile specially marked as coming from trusted repository that
   promises to make them available on-demand and lazily.

 * The machinery to clone & fetch, which in turn involves packing and
   unpacking objects, has been told how to omit certain objects using
   the filtering mechanism introduced by another topic.  It now knows
   to mark the resulting pack as a promisor pack to tolerate missing
   objects, laying foundation for "narrow" clones.

 * The first step to getting rid of mru API and using the
   doubly-linked list API directly instead.

 * Retire mru API as it does not give enough abstraction over
   underlying list API to be worth it.

 * Rewrite two more "git submodule" subcommands in C.

 * The tracing machinery learned to report tweaking of environment
   variables as well.

 * Update Coccinelle rules to catch and optimize strbuf_addf(&buf, "%s", str)

 * Prevent "clang-format" from breaking line after function return type.

 * The sequencer infrastructure is shared across "git cherry-pick",
   "git rebase -i", etc., and has always spawned "git commit" when it
   needs to create a commit.  It has been taught to do so internally,
   when able, by reusing the codepath "git commit" itself uses, which
   gives performance boost for a few tens of percents in some sample
   scenarios.

 * Push the submodule version of collision-detecting SHA-1 hash
   implementation a bit harder on builders.

 * Avoid mmapping small files while using packed refs (especially ones
   with zero size, which would cause later munmap() to fail).

 * Conversion from uchar[20] to struct object_id continues.

 * More tests for wildmatch functions.

 * The code to binary search starting from a fan-out table (which is
   how the packfile is indexed with object names) has been refactored
   into a reusable helper.

 * We now avoid using identifiers that clash with C++ keywords.  Even
   though it is not a goal to compile Git with C++ compilers, changes
   like this help use of code analysis tools that targets C++ on our
   codebase.

 * The executable is now built in 'script' phase in Travis CI integration,
   to follow the established practice, rather than during 'before_script'
   phase.  This allows the CI categorize the failures better ('failed'
   is project's fault, 'errored' is build environment's).
   (merge 3c93b82920 sg/travis-build-during-script-phase later to maint).

 * Writing out the index file when the only thing that changed in it
   is the untracked cache information is often wasteful, and this has
   been optimized out.

 * Various pieces of Perl code we have have been cleaned up.

 * Internal API clean-up to allow write_locked_index() optionally skip
   writing the in-core index when it is not modified.


Also contains various documentation updates and code clean-ups.


Fixes since v2.16
-----------------

 * An old regression in "git describe --all $annotated_tag^0" has been
   fixed.

 * "git status" after moving a path in the working tree (hence making
   it appear "removed") and then adding with the -N option (hence
   making that appear "added") detected it as a rename, but did not
   report the  old and new pathnames correctly.

 * "git svn dcommit" did not take into account the fact that a
   svn+ssh:// URL with a username@ (typically used for pushing) refers
   to the same SVN repository without the username@ and failed when
   svn.pushmergeinfo option is set.

 * API clean-up around revision traversal.

 * "git merge -Xours/-Xtheirs" learned to use our/their version when
   resolving a conflicting updates to a symbolic link.

 * "git clone $there $here" is allowed even when here directory exists
   as long as it is an empty directory, but the command incorrectly
   removed it upon a failure of the operation.

 * "git commit --fixup" did not allow "-m<message>" option to be used
   at the same time; allow it to annotate resulting commit with more
   text.

 * When resetting the working tree files recursively, the working tree
   of submodules are now also reset to match.

 * "git stash -- <pathspec>" incorrectly blew away untracked files in
   the directory that matched the pathspec, which has been corrected.

 * Instead of maintaining home-grown email address parsing code, ship
   a copy of reasonably recent Mail::Address to be used as a fallback
   in 'git send-email' when the platform lacks it.
   (merge d60be8acab mm/send-email-fallback-to-local-mail-address later to maint).

 * "git add -p" was taught to ignore local changes to submodules as
   they do not interfere with the partial addition of regular changes
   anyway.

 * Avoid showing a warning message in the middle of a line of "git
   diff" output.
   (merge 4e056c989f nd/diff-flush-before-warning later to maint).

 * The http tracing code, often used to debug connection issues,
   learned to redact potentially sensitive information from its output
   so that it can be more safely sharable.
   (merge 8ba18e6fa4 jt/http-redact-cookies later to maint).

 * Crash fix for a corner case where an error codepath tried to unlock
   what it did not acquire lock on.
   (merge 81fcb698e0 mr/packed-ref-store-fix later to maint).

 * The split-index mode had a few corner case bugs fixed.
   (merge ae59a4e44f tg/split-index-fixes later to maint).

 * Assorted fixes to "git daemon".
   (merge ed15e58efe jk/daemon-fixes later to maint).

 * Completion of "git merge -s<strategy>" (in contrib/) did not work
   well in non-C locale.
   (merge 7cc763aaa3 nd/list-merge-strategy later to maint).

 * Workaround for segfault with more recent versions of SVN.
   (merge 7f6f75e97a ew/svn-branch-segfault-fix later to maint).

 * Plug recently introduced leaks in fsck.
   (merge ba3a08ca0e jt/fsck-code-cleanup later to maint).

 * "git pull --rebase" did not pass verbosity setting down when
   recursing into a submodule.
   (merge a56771a668 sb/pull-rebase-submodule later to maint).

 * The way "git reset --hard" reports the commit the updated HEAD
   points at is made consistent with the way how the commit title is
   generated by the other parts of the system.  This matters when the
   title is spread across physically multiple lines.
   (merge 1cf823fb68 tg/reset-hard-show-head-with-pretty later to maint).

 * Test fixes.
   (merge 63b1a175ee sg/test-i18ngrep later to maint).

 * Some bugs around "untracked cache" feature have been fixed.  This
   will notice corrupt data in the untracked cache left by old and
   buggy code and issue a warning---the index can be fixed by clearing
   the untracked cache from it.
   (merge 0cacebf099 nd/fix-untracked-cache-invalidation later to maint).
   (merge 7bf0be7501 ab/untracked-cache-invalidation-docs later to maint).

 * "git blame HEAD COPYING" in a bare repository failed to run, while
   "git blame HEAD -- COPYING" run just fine.  This has been corrected.

 * "git add" files in the same directory, but spelling the directory
   path in different cases on case insensitive filesystem, corrupted
   the name hash data structure and led to unexpected results.  This
   has been corrected.
   (merge c95525e90d bp/name-hash-dirname-fix later to maint).

 * "git rebase -p" mangled log messages of a merge commit, which is
   now fixed.
   (merge ed5144d7eb js/fix-merge-arg-quoting-in-rebase-p later to maint).

 * Some low level protocol codepath could crash when they get an
   unexpected flush packet, which is now fixed.
   (merge bb1356dc64 js/packet-read-line-check-null later to maint).

 * "git check-ignore" with multiple paths got confused when one is a
   file and the other is a directory, which has been fixed.
   (merge d60771e930 rs/check-ignore-multi later to maint).

 * "git describe $garbage" stopped giving any errors when the garbage
   happens to be a string with 40 hexadecimal letters.
   (merge a8e7a2bf0f sb/describe-blob later to maint).

 * Code to unquote single-quoted string (used in the parser for
   configuration files, etc.) did not diagnose bogus input correctly
   and produced bogus results instead.
   (merge ddbbf8eb25 jk/sq-dequote-on-bogus-input later to maint).

 * Many places in "git apply" knew that "/dev/null" that signals
   "there is no such file on this side of the diff" can be followed by
   whitespace and garbage when parsing a patch, except for one, which
   made an otherwise valid patch (e.g. ones from subversion) rejected.
   (merge e454ad4bec tk/apply-dev-null-verify-name-fix later to maint).

 * We no longer create any *.spec file, so "make clean" should not
   remove it.
   (merge 4321bdcabb tz/do-not-clean-spec-file later to maint).

 * "git push" over http transport did not unquote the push-options
   correctly.
   (merge 90dce21eb0 jk/push-options-via-transport-fix later to maint).

 * "git send-email" learned to complain when the batch-size option is
   not defined when the relogin-delay option is, since these two are
   mutually required.
   (merge 9caa70697b xz/send-email-batch-size later to maint).

 * Y2k20 fix ;-) for our perl scripts.
   (merge a40e06ee33 bw/perl-timegm-timelocal-fix later to maint).

 * Threaded "git grep" has been optimized to avoid allocation in code
   section that is covered under a mutex.
   (merge 38ef24dccf rv/grep-cleanup later to maint).

 * "git subtree" script (in contrib/) scripted around "git log", whose
   output got affected by end-user configuration like log.showsignature
   (merge 8841b5222c sg/subtree-signed-commits later to maint).

 * While finding unique object name abbreviation, the code may
   accidentally have read beyond the end of the array of object names
   in a pack.
   (merge 21abed500c ds/find-unique-abbrev-optim later to maint).

 * Micro optimization in revision traversal code.
   (merge ebbed3ba04 ds/mark-parents-uninteresting-optim later to maint).

 * "git commit" used to run "gc --auto" near the end, which was lost
   when the command was reimplemented in C by mistake.
   (merge 095c741edd ab/gc-auto-in-commit later to maint).

 * Allow running a couple of tests with "sh -x".
   (merge c20bf94abc sg/cvs-tests-with-x later to maint).

 * The codepath to replace an existing entry in the index had a bug in
   updating the name hash structure, which has been fixed.
   (merge 0e267b7a24 bp/refresh-cache-ent-rehash-fix later to maint).

 * The transfer.fsckobjects configuration tells "git fetch" to
   validate the data and connected-ness of objects in the received
   pack; the code to perform this check has been taught about the
   narrow clone's convention that missing objects that are reachable
   from objects in a pack that came from a promissor remote is OK.

 * There was an unused file-scope static variable left in http.c when
   building for versions of libCURL that is older than 7.19.4, which
   has been fixed.
   (merge b8fd6008ec rj/http-code-cleanup later to maint).

 * Shell script portability fix.
   (merge 206a6ae013 ml/filter-branch-portability-fix later to maint).

 * Other minor doc, test and build updates and code cleanups.
   (merge e2a5a028c7 bw/oidmap-autoinit later to maint).
   (merge ec3b4b06f8 cl/t9001-cleanup later to maint).
   (merge e1b3f3dd38 ks/submodule-doc-updates later to maint).
   (merge fbac558a9b rs/describe-unique-abbrev later to maint).
   (merge 8462ff43e4 tb/crlf-conv-flags later to maint).
   (merge 7d68bb0766 rb/hashmap-h-compilation-fix later to maint).
   (merge 3449847168 cc/sha1-file-name later to maint).
   (merge ad622a256f ds/use-get-be64 later to maint).
   (merge f919ffebed sg/cocci-move-array later to maint).
   (merge 4e801463c7 jc/mailinfo-cleanup-fix later to maint).
   (merge ef5b3a6c5e nd/shared-index-fix later to maint).
   (merge 9f5258cbb8 tz/doc-show-defaults-to-head later to maint).
   (merge b780e4407d jc/worktree-add-short-help later to maint).
   (merge ae239fc8e5 rs/cocci-strbuf-addf-to-addstr later to maint).
   (merge 2e22a85e5c nd/ignore-glob-doc-update later to maint).
   (merge 3738031581 jk/gettext-poison later to maint).
   (merge 54360a1956 rj/sparse-updates later to maint).
   (merge 12e31a6b12 sg/doc-test-must-fail-args later to maint).
   (merge 760f1ad101 bc/doc-interpret-trailers-grammofix later to maint).
   (merge 4ccf461f56 bp/fsmonitor later to maint).
   (merge a6119f82b1 jk/test-hashmap-updates later to maint).
   (merge 5aea9fe6cc rd/typofix later to maint).
   (merge e4e5da2796 sb/status-doc-fix later to maint).
   (merge 7976e901c8 gs/test-unset-xdg-cache-home later to maint).
   (merge d023df1ee6 tg/worktree-create-tracking later to maint).
   (merge 4cbe92fd41 sm/mv-dry-run-update later to maint).
   (merge 75e5e9c3f7 sb/color-h-cleanup later to maint).
   (merge 2708ef4af6 sg/t6300-modernize later to maint).
   (merge d88e92d4e0 bw/doc-submodule-recurse-config-with-clone later to maint).
   (merge f74bbc8dd2 jk/cached-commit-buffer later to maint).
   (merge 1316416903 ms/non-ascii-ticks later to maint).
   (merge 878056005e rs/strbuf-read-file-or-whine later to maint).
   (merge 79f0ba1547 jk/strbuf-read-file-close-error later to maint).
   (merge edfb8ba068 ot/ref-filter-cleanup later to maint).
   (merge 11395a3b4b jc/test-must-be-empty later to maint).
   (merge 768b9d6db7 mk/doc-pretty-fill later to maint).
   (merge 2caa7b8d27 ab/man-sec-list later to maint).
   (merge 40c17eb184 ks/t3200-typofix later to maint).
   (merge bd9958c358 dp/merge-strategy-doc-fix later to maint).
   (merge 9ee0540a40 js/ming-strftime later to maint).
   (merge 1775e990f7 tz/complete-tag-delete-tagname later to maint).
   (merge 00a4b03501 rj/warning-uninitialized-fix later to maint).
   (merge b635ed97a0 jk/attributes-path-doc later to maint).

----------------------------------------------------------------

Changes since v2.16.0 are as follows:

Adam Borowski (1):
      hooks/pre-auto-gc-battery: allow gc to run on non-laptops

Alban Gruin (1):
      userdiff: add built-in pattern for golang

Alex Bennée (1):
      send-email: add test for Linux's get_maintainer.pl

Alexander Shopov (1):
      Mark messages for translations

Andreas G. Schacker (1):
      doc/read-tree: remove obsolete remark

Ben Peart (4):
      dir.c: don't flag the index as dirty for changes to the untracked cache
      name-hash: properly fold directory names in adjust_dirname_case()
      fsmonitor: update documentation to remove reference to invalid config settings
      Fix bugs preventing adding updated cache entries to the name hash

Bernhard M. Wiedemann (1):
      perl: call timegm and timelocal with 4-digit year

Brandon Williams (39):
      oidmap: ensure map is initialized
      object_info: change member name from 'typename' to 'type_name'
      object: rename function 'typename' to 'type_name'
      blame: rename 'this' variables
      pack-objects: rename 'this' variables
      rev-parse: rename 'this' variable
      submodule: indicate that 'submodule.recurse' doesn't apply to clone
      diff: rename 'this' variables
      apply: rename 'try' variables
      apply: rename 'new' variables
      checkout: rename 'new' variables
      help: rename 'new' variables
      pack-redundant: rename 'new' variables
      reflog: rename 'new' variables
      remote: rename 'new' variables
      combine-diff: rename 'new' variables
      commit: rename 'new' variables
      diff-lib: rename 'new' variable
      diff: rename 'new' variables
      diffcore-delta: rename 'new' variables
      entry: rename 'new' variables
      http: rename 'new' variables
      imap-send: rename 'new' variables
      line-log: rename 'new' variables
      read-cache: rename 'new' variables
      ref-filter: rename 'new' variables
      remote: rename 'new' variables
      split-index: rename 'new' variables
      submodule: rename 'new' variables
      trailer: rename 'new' variables
      unpack-trees: rename 'new' variables
      init-db: rename 'template' variables
      environment: rename 'template' variables
      diff: rename 'template' variables
      environment: rename 'namespace' variables
      wrapper: rename 'template' variables
      tempfile: rename 'template' variables
      trailer: rename 'template' variables
      replace: rename 'new' variables

Christian Couder (12):
      perf/aggregate: fix checking ENV{GIT_PERF_SUBSECTION}
      perf/aggregate: refactor printing results
      perf/aggregate: implement codespeed JSON output
      perf/run: add conf_opts argument to get_var_from_env_or_config()
      perf/run: learn about perf.codespeedOutput
      perf/run: learn to send output to codespeed server
      perf/run: read GIT_PERF_REPO_NAME from perf.repoName
      sha1_file: remove static strbuf from sha1_file_name()
      sha1_file: improve sha1_file_name() perfs
      perf/aggregate: add --subsection option
      perf/aggregate: add --reponame option
      perf/aggregate: sort JSON fields in output

Christian Ludwig (3):
      t9001: use existing helper in send-email test
      send-email: rename variable for clarity
      send-email: support separate Reply-To address

Daniel Knittl-Frank (1):
      describe: prepend "tags/" when describing tags with embedded name

David Pursehouse (1):
      Documentation/merge-strategies: typofix

Derrick Stolee (3):
      packfile: use get_be64() for large offsets
      sha1_name: fix uninitialized memory errors
      revision.c: reduce object database queries

Elijah Newren (3):
      Tighten and correct a few testcases for merging and cherry-picking
      merge-recursive: fix logic ordering issue
      merge-recursive: add explanation for src_entry and dst_entry

Eric Sunshine (5):
      t5601-clone: test case-conflicting files on case-insensitive filesystem
      worktree: add: fix 'post-checkout' not knowing new worktree location
      git-worktree.txt: fix missing ")" typo
      git-worktree.txt: fix indentation of example and text of 'add' command
      t2028: fix minor error and issues in newly-added "worktree move" tests

Eric Wong (2):
      fsck: fix leak when traversing trees
      git-svn: control destruction order to avoid segfault

Gargi Sharma (1):
      mru: Replace mru.[ch] with list.h implementation

Genki Sky (2):
      rebase: add --allow-empty-message option
      test-lib.sh: unset XDG_CACHE_HOME

Gregory Herrero (1):
      rebase -p: fix incorrect commit message when calling `git merge`.

Jason Merrill (1):
      git-svn: fix svn.pushmergeinfo handling of svn+ssh usernames.

Jeff Hostetler (12):
      upload-pack: add object filtering for partial clone
      fetch-pack, index-pack, transport: partial clone
      fetch-pack: add --no-filter
      fetch: support filters
      partial-clone: define partial clone settings in config
      t5616: end-to-end tests for partial clone
      fetch: inherit filter-spec from partial clone
      t5616: test bulk prefetch after partial fetch
      stat_tracking_info: return +1 when branches not equal
      status: add --[no-]ahead-behind to status and commit for V2 format.
      status: update short status to respect --no-ahead-behind
      status: support --no-ahead-behind in long format

Jeff King (35):
      t5600: fix outdated comment about unborn HEAD
      t5600: modernize style
      clone: factor out dir_exists() helper
      clone: do not clean up directories we didn't create
      sq_quote_argv: drop maxlen parameter
      trace: avoid unnecessary quoting
      t5570: use ls-remote instead of clone for interp tests
      t/lib-git-daemon: record daemon log
      daemon: fix off-by-one in logging extended attributes
      daemon: handle NULs in extended attribute string
      t/lib-git-daemon: add network-protocol helpers
      daemon: fix length computation in newline stripping
      t0205: drop redundant test
      git-sh-i18n: check GETTEXT_POISON before USE_GETTEXT_SCHEME
      correct error messages for NULL packet_read_line()
      CodingGuidelines: mention "static" and "extern"
      t0002: simplify error checking
      describe: confirm that blobs actually exist
      test-hashmap: use ALLOC_ARRAY rather than bare malloc
      test-hashmap: check allocation computation for overflow
      test-hashmap: use xsnprintf rather than snprintf
      test-hashmap: use strbuf_getline rather than fgets
      test-hashmap: simplify alloc_test_entry
      test-hashmap: use "unsigned int" for hash storage
      sq_dequote: fix extra consumption of source string
      t5545: factor out http repository setup
      remote-curl: unquote incoming push-options
      commit: drop uses of get_cached_commit_buffer()
      revision: drop --show-all option
      t: send verbose test-helper output to fd 4
      strbuf_read_file(): preserve errno across close() call
      smart-http: document flush after "# service" line
      t3701: add a test for interactive.diffFilter
      add--interactive: detect bogus diffFilter output
      doc/gitattributes: mention non-recursive behavior

Johannes Schindelin (3):
      sequencer: assign only free()able strings to gpg_sign
      apply: demonstrate a problem applying svn diffs
      mingw: abort on invalid strftime formats

Jon Simons (1):
      always check for NULL return from packet_read_line()

Jonathan Nieder (1):
      perl: treat PERLLIB_EXTRA as an extra path again

Jonathan Tan (23):
      extension.partialclone: introduce partial clone extension
      fsck: introduce partialclone extension
      fsck: support refs pointing to promisor objects
      fsck: support referenced promisor objects
      fsck: support promisor objects as CLI argument
      index-pack: refactor writing of .keep files
      introduce fetch-object: fetch one promisor object
      sha1_file: support lazily fetching missing objects
      rev-list: support termination at promisor objects
      gc: do not repack promisor packfiles
      fetch-pack: test support excluding large blobs
      fetch: refactor calculation of remote list
      clone: partial clone
      unpack-trees: batch fetching of missing blobs
      fetch-pack: restore save_commit_buffer after use
      http: support cookie redaction when tracing
      http: support omitting data from traces
      Docs: split out long-running subprocess handshake
      packfile: remove GIT_DEBUG_LOOKUP log statements
      packfile: refactor hash search with fanout table
      sha1_file: restore OBJECT_INFO_QUICK functionality
      index-pack: support checking objects but not links
      fetch-pack: do not check links for partial fetch

Juan F. Codagnone (1):
      mailinfo: avoid segfault when can't open files

Junio C Hamano (22):
      merge: teach -Xours/-Xtheirs to symbolic link merge
      worktree: say that "add" takes an arbitrary commit in short-help
      Start 2.17 cycle
      Git 2.16.1
      First batch after 2.16
      blame: tighten command line parser
      Second batch for 2.17
      Third batch for 2.17
      Git 2.16.2
      merge: allow fast-forward when merging a tracked tag
      Fourth batch for 2.17
      Fifth batch for 2.17
      test_must_be_empty: make sure the file exists, not just empty
      untracked cache: use git_env_bool() not getenv() for customization
      Sixth batch for 2.17
      Seventh batch for 2.17
      Eighth batch for 2.17
      Git 2.17-rc0
      Git 2.17-rc1
      Git 2.16.3
      t9902: disable test on the list of merge-strategies under GETTEXT_POISON
      Git 2.17-rc2

Kaartic Sivaraam (3):
      Doc/gitsubmodules: make some changes to improve readability and syntax
      Doc/git-submodule: improve readability and grammar of a sentence
      t/t3200: fix a typo in a test description

Kim Gybels (1):
      packed_ref_cache: don't use mmap() for small files

Lucas Werkmeister (1):
      daemon: add --log-destination=(stderr|syslog|none)

Martin Ågren (9):
      t7006: add tests for how git config paginates
      config: respect `pager.config` in list/get-mode only
      config: change default of `pager.config` to "on"
      sequencer: make lockfiles non-static
      sequencer: always roll back lock in `do_recursive_merge()`
      merge-recursive: always roll back lock in `merge_recursive_generic()`
      merge: always roll back lock in `checkout_fast_forward()`
      sequencer: do not roll back lockfile unnecessarily
      write_locked_index(): add flag to avoid writing unchanged index

Mathias Rav (1):
      files_initial_transaction_commit(): only unlock if locked

Matthieu Moy (2):
      send-email: add and use a local copy of Mail::Address
      perl/Git: remove now useless email-address parsing code

Michael Haggerty (5):
      struct snapshot: store `start` rather than `header_len`
      create_snapshot(): use `xmemdupz()` rather than a strbuf
      find_reference_location(): make function safe for empty snapshots
      packed_ref_iterator_begin(): make optimization more general
      load_contents(): don't try to mmap an empty file

Michele Locati (1):
      filter-branch: use printf instead of echo -e

Motoki Seki (1):
      Documentation/gitsubmodules.txt: avoid non-ASCII apostrophes

Mårten Kongstad (1):
      docs/pretty-formats: fix typo '% <(<N>)' -> '%<|(<N>)'

Nathan Payre (1):
      send-email: extract email-parsing code into a subroutine

Nguyễn Thái Ngọc Duy (85):
      t2203: test status output with porcelain v2 format
      Use DIFF_DETECT_RENAME for detect_rename assignments
      wt-status.c: coding style fix
      wt-status.c: catch unhandled diff status codes
      wt-status.c: rename rename-related fields in wt_status_change_data
      wt-status.c: handle worktree renames
      trace.c: move strbuf_release() out of print_trace_line()
      add--interactive: ignore submodule changes except HEAD
      read-cache.c: change type of "temp" in write_shared_index()
      read-cache.c: move tempfile creation/cleanup out of write_shared_index
      diff.c: flush stdout before printing rename warnings
      run-command.c: introduce trace_run_command()
      run-command.c: print program 'git' when tracing git_cmd mode
      run-command.c: print env vars in trace_run_command()
      run-command.c: print new cwd in trace_run_command()
      read-cache: don't write index twice if we can't write shared index
      worktree.c: add validate_worktree()
      dir.c: avoid stat() in valid_cached_dir()
      dir.c: fix missing dir invalidation in untracked code
      format-patch: keep cover-letter diffstat wrapped in 72 columns
      completion: fix completing merge strategies on non-C locales
      dir.c: stop ignoring opendir() error in open_cached_dir()
      format-patch: reduce patch diffstat width to 72
      gitignore.txt: elaborate shell glob syntax
      trace: measure where the time is spent in the index-heavy operations
      diff.c: refactor pprint_rename() to use strbuf
      dir.c: ignore paths containing .git when invalidating untracked cache
      parse-options: support --git-completion-helper
      parse-options: add OPT_xxx_F() variants
      parse-options: let OPT__FORCE take optional flags argument
      git-completion.bash: introduce __gitcomp_builtin
      completion: use __gitcomp_builtin in _git_add
      completion: use __gitcomp_builtin in _git_am
      completion: use __gitcomp_builtin in _git_apply
      completion: use __gitcomp_builtin in _git_branch
      completion: use __gitcomp_builtin in _git_checkout
      completion: use __gitcomp_builtin in _git_cherry_pick
      completion: use __gitcomp_builtin in _git_clean
      completion: use __gitcomp_builtin in _git_clone
      completion: use __gitcomp_builtin in _git_commit
      completion: use __gitcomp_builtin in _git_config
      completion: use __gitcomp_builtin in _git_describe
      completion: use __gitcomp_builtin in _git_difftool
      completion: use __gitcomp_builtin in _git_fetch
      completion: use __gitcomp_builtin in _git_fsck
      completion: use __gitcomp_builtin in _git_gc
      completion: use __gitcomp_builtin in _git_grep
      completion: use __gitcomp_builtin in _git_help
      completion: use __gitcomp_builtin in _git_init
      completion: use __gitcomp_builtin in _git_ls_files
      completion: use __gitcomp_builtin in _git_ls_remote
      completion: use __gitcomp_builtin in _git_merge
      completion: use __gitcomp_builtin in _git_merge_base
      completion: use __gitcomp_builtin in _git_mv
      completion: use __gitcomp_builtin in _git_name_rev
      completion: use __gitcomp_builtin in _git_notes
      completion: use __gitcomp_builtin in _git_pull
      completion: use __gitcomp_builtin in _git_push
      completion: use __gitcomp_builtin in _git_remote
      remote: force completing --mirror= instead of --mirror
      completion: use __gitcomp_builtin in _git_replace
      completion: use __gitcomp_builtin in _git_reset
      completion: use __gitcomp_builtin in _git_revert
      completion: use __gitcomp_builtin in _git_rm
      completion: use __gitcomp_builtin in _git_show_branch
      completion: use __gitcomp_builtin in _git_status
      completion: use __gitcomp_builtin in _git_tag
      completion: use __gitcomp_builtin in _git_worktree
      worktree.c: add update_worktree_location()
      worktree move: new command
      worktree move: accept destination as directory
      worktree move: refuse to move worktrees with submodules
      worktree remove: new command
      worktree remove: allow it when $GIT_WORK_TREE is already gone
      am: add --show-current-patch
      rebase: add --show-current-patch
      rebase: introduce and use pseudo-ref REBASE_HEAD
      am: support --quit
      diff: add --compact-summary
      object.h: update flag allocation comment
      object.h: realign object flag allocation comment
      completion: don't set PARSE_OPT_NOCOMPLETE on --rerere-autoupdate
      completion: simplify _git_notes
      completion: complete --{reuse,reedit}-message= for all notes subcmds
      completion: more subcommands in _git_notes()

Nicolas Morey-Chaisemartin (1):
      tag: add --edit option

Olga Telezhnaya (3):
      mru: use double-linked list from list.h
      ref-filter: get rid of duplicate code
      ref-filter: get rid of goto

Patryk Obara (14):
      clang-format: adjust penalty for return type line break
      http-push: improve error log
      sha1_file: convert pretend_sha1_file to object_id
      dir: convert struct sha1_stat to use object_id
      sha1_file: convert hash_sha1_file to object_id
      cache: clear whole hash buffer with oidclr
      match-trees: convert splice_tree to object_id
      commit: convert commit_tree* to object_id
      notes: convert combine_notes_* to object_id
      notes: convert write_notes_tree to object_id
      sha1_file: convert write_sha1_file to object_id
      sha1_file: convert force_object_loose to object_id
      sha1_file: convert write_loose_object to object_id
      sha1_file: rename hash_sha1_file_literally

Phillip Wood (25):
      t3404: check intermediate squash messages
      commit: move empty message checks to libgit
      Add a function to update HEAD after creating a commit
      commit: move post-rewrite code to libgit
      commit: move print_commit_summary() to libgit
      sequencer: simplify adding Signed-off-by: trailer
      sequencer: load commit related config
      sequencer: try to commit without forking 'git commit'
      t3512/t3513: remove KNOWN_FAILURE_CHERRY_PICK_SEES_EMPTY_COMMIT=1
      sequencer: improve config handling
      t7505: style fixes
      t7505: add tests for cherry-pick and rebase -i/-p
      sequencer: run 'prepare-commit-msg' hook
      add -p: only display help for active keys
      add -p: only bind search key if there's more than one hunk
      add -p: improve error messages
      add -i: add function to format hunk header
      t3701: indent here documents
      t3701: use test_write_lines and write_script
      t3701: don't hard code sha1 hash values
      t3701: add failing test for pathological context lines
      add -p: adjust offsets of subsequent hunks when one is skipped
      add -p: calculate offset delta for edited patches
      add -p: fix counting when splitting and coalescing
      add -p: don't rely on apply's '--recount' option

Prathamesh Chavan (2):
      submodule: port submodule subcommand 'sync' from shell to C
      submodule: port submodule subcommand 'deinit' from shell to C

Ramsay Jones (6):
      t4151: consolidate multiple calls to test_i18ngrep
      config.mak.uname: remove SPARSE_FLAGS setting for cygwin
      Makefile: suppress a sparse warning for pack-revindex.c
      http: fix an unused variable warning for 'curl_no_proxy'
      -Wuninitialized: remove some 'init-self' workarounds
      read-cache: fix an -Wmaybe-uninitialized warning

Randall S. Becker (1):
      hashmap.h: remove unused variable

Rasmus Villemoes (2):
      grep: move grep_source_init outside critical section
      grep: simplify grep_oid and grep_file

René Scharfe (15):
      commit: avoid allocation in clear_commit_marks_many()
      commit: use clear_commit_marks_many() in remove_redundant()
      ref-filter: use clear_commit_marks_many() in do_merge_filter()
      object: add clear_commit_marks_all()
      bisect: avoid using the rev_info flag leak_pending
      bundle: avoid using the rev_info flag leak_pending
      checkout: avoid using the rev_info flag leak_pending
      revision: remove the unused flag leak_pending
      commit: remove unused function clear_commit_marks_for_object_array()
      describe: use strbuf_add_unique_abbrev() for adding short hashes
      cocci: use format keyword instead of a literal string
      cocci: simplify check for trivial format strings
      check-ignore: fix mix of directories and other file types
      sequencer: factor out strbuf_read_file_or_whine()
      perf: use GIT_PERF_REPEAT_COUNT=3 by default even without config file

Robert P. J. Day (2):
      t/: correct obvious typo "detahced"
      Correct mispellings of ".gitmodule" to ".gitmodules"

SZEDER Gábor (34):
      travis-ci: build Git during the 'script' phase
      Use MOVE_ARRAY
      travis-ci: use 'set -x' for the commands under 'su' in the 32 bit Linux build
      travis-ci: use 'set -e' in the 32 bit Linux build job
      travis-ci: don't repeat the path of the cache directory
      travis-ci: don't run the test suite as root in the 32 bit Linux build
      travis-ci: don't fail if user already exists on 32 bit Linux build job
      t5541: add 'test_i18ngrep's missing filename parameter
      t5812: add 'test_i18ngrep's missing filename parameter
      t6022: don't run 'git merge' upstream of a pipe
      t4001: don't run 'git status' upstream of a pipe
      t5510: consolidate 'grep' and 'test_i18ngrep' patterns
      t5536: let 'test_i18ngrep' read the file without redirection
      t: move 'test_i18ncmp' and 'test_i18ngrep' to 'test-lib-functions.sh'
      t: validate 'test_i18ngrep's parameters
      t: make 'test_i18ngrep' more informative on failure
      t: document 'test_must_fail ok=<signal-name>'
      t6300-for-each-ref: fix "more than one quoting style" tests
      Makefile: generate Git(3pm) as dependency of the 'doc' and 'man' targets
      t: prevent '-x' tracing from interfering with test helpers' stderr
      t: add means to disable '-x' tracing for individual test scripts
      t1507-rev-parse-upstream: don't check the stderr of a shell function
      t5536: simplify checking of messages output to stderr
      t3030-merge-recursive: don't check the stderr of a subshell
      t5500-fetch-pack: don't check the stderr of a subshell
      t5526: use $TRASH_DIRECTORY to specify the path of GIT_TRACE log file
      t5570-git-daemon: don't check the stderr of a subshell
      t9903-bash-prompt: don't check the stderr of __git_ps1()
      t1510-repo-setup: mark as untraceable with '-x'
      t/README: add a note about don't saving stderr of compound commands
      travis-ci: run tests with '-x' tracing
      t9400-git-cvsserver-server: don't rely on the output of 'test_cmp'
      t9402-git-cvsserver-refs: don't check the stderr of a subshell
      completion: clear cached --options when sourcing the completion script

Stefan Beller (15):
      diff.h: make pickaxe_opts an unsigned bit field
      diff: migrate diff_flags.pickaxe_ignore_case to a pickaxe_opts bit
      diff: introduce DIFF_PICKAXE_KINDS_MASK
      diffcore: add a pickaxe option to find a specific blob
      diff: properly error out when combining multiple pickaxe options
      diff: use HAS_MULTI_BITS instead of counting bits manually
      t/lib-submodule-update.sh: clarify test
      t/lib-submodule-update.sh: fix test ignoring ignored files in submodules
      unpack-trees: oneway_merge to update submodules
      submodule: submodule_move_head omits old argument in forced case
      builtin/pull: respect verbosity settings in submodules
      send-email: error out when relogin delay is missing
      color.h: document and modernize header
      Documentation/git-status: clarify status table for porcelain mode
      submodule deinit: handle non existing pathspecs gracefully

Stefan Moch (2):
      t7001: add test case for --dry-run
      mv: remove unneeded 'if (!show_only)'

Stephen R Guglielmo (1):
      subtree: fix add and pull for GPG-signed commits

Tatyana Krasnukha (1):
      apply: handle Subversion diffs with /dev/null gracefully

Thomas Gummerer (6):
      stash: don't delete untracked files that match pathspec
      read-cache: fix reading the shared index for other repos
      split-index: don't write cache tree with null oid entries
      travis: run tests with GIT_TEST_SPLIT_INDEX
      reset --hard: make use of the pretty machinery
      git-stash.txt: remove extra square bracket

Thomas Levesque (1):
      userdiff.c: add C# async keyword in diff pattern

Todd Zullinger (5):
      doc: mention 'git show' defaults to HEAD
      Makefile: remove *.spec from clean target
      Makefile: add NO_PERL_CPAN_FALLBACKS knob
      RelNotes: add details on Perl module changes
      completion: complete tags with git tag --delete/--verify

Torsten Bögershausen (1):
      convert_to_git(): safe_crlf/checksafe becomes int conv_flags

Yasushi SHOJI (1):
      bisect: debug: convert struct object to object_id

brian m. carlson (15):
      repository: pre-initialize hash algo pointer
      hash: move SHA-1 macros to hash.h
      hash: create union for hash context allocation
      builtin/index-pack: improve hash function abstraction
      builtin/unpack-objects: switch uses of SHA-1 to the_hash_algo
      sha1_file: switch uses of SHA-1 to the_hash_algo
      fast-import: switch various uses of SHA-1 to the_hash_algo
      pack-check: convert various uses of SHA-1 to abstract forms
      pack-write: switch various SHA-1 values to abstract forms
      read-cache: abstract away uses of SHA-1
      csum-file: rename sha1file to hashfile
      csum-file: abstract uses of SHA-1
      bulk-checkin: abstract SHA-1 usage
      hash: update obsolete reference to SHA1_HEADER
      docs/interpret-trailers: fix agreement error

Ævar Arnfjörð Bjarmason (53):
      Makefile: don't error out under DC_SHA1_EXTERNAL if DC_SHA1_SUBMODULE=auto
      Makefile: under "make dist", include the sha1collisiondetection submodule
      sha1dc_git.h: re-arrange an ifdef chain for a subsequent change
      Makefile: replace perl/Makefile.PL with simple make rules
      commit doc: document that -c, -C, -F and --fixup with -m error
      commit: add support for --fixup <commit> -m"<extra message>"
      perl: avoid *.pmc and fix Error.pm further
      perf: amend the grep tests to test grep.threads
      cat-file doc: document that -e will return some output
      status: add a failing test showing a core.untrackedCache bug
      wildmatch test: indent with tabs, not spaces
      wildmatch test: use more standard shell style
      wildmatch test: don't try to vertically align our output
      wildmatch test: use a paranoia pattern from nul_match()
      wildmatch test: remove dead fnmatch() test code
      wildmatch test: use test_must_fail, not ! for test-wildmatch
      wildmatch test: perform all tests under all wildmatch() modes
      wildmatch test: create & test files on disk in addition to in-memory
      test-lib: add an EXPENSIVE_ON_WINDOWS prerequisite
      wildmatch test: mark test as EXPENSIVE_ON_WINDOWS
      fetch: don't redundantly NULL something calloc() gave us
      fetch: trivially refactor assignment to ref_nr
      fetch: stop accessing "remote" variable indirectly
      remote: add a macro for "refs/tags/*:refs/tags/*"
      fetch tests: refactor in preparation for testing tag pruning
      fetch tests: re-arrange arguments for future readability
      fetch tests: add a tag to be deleted to the pruning tests
      fetch tests: test --prune and refspec interaction
      fetch tests: double quote a variable for interpolation
      fetch tests: expand case/esac for later change
      fetch tests: fetch <url> <spec> as well as fetch [<remote>]
      git fetch doc: add a new section to explain the ins & outs of pruning
      git remote doc: correct dangerous lies about what prune does
      git-fetch & config doc: link to the new PRUNING section
      fetch tests: add scaffolding for the new fetch.pruneTags
      fetch: add a --prune-tags option and fetch.pruneTags config
      fetch: make the --prune-tags work with <url>
      update-index doc: note a fixed bug in the untracked cache
      update-index doc: note the caveat with "could not open..."
      perl: *.pm files should not have the executable bit
      Git.pm: remove redundant "use strict" from sub-package
      Git.pm: add the "use warnings" pragma
      commit: run git gc --auto just before the post-commit hook
      gitweb: hard-depend on the Digest::MD5 5.8 module
      Git.pm: hard-depend on the File::{Temp,Spec} modules
      git-send-email: unconditionally use Net::{SMTP,Domain}
      perl: update our ancient copy of Error.pm
      perl: update our copy of Mail::Address
      perl: move CPAN loader wrappers to another namespace
      perl: generalize the Git::LoadCPAN facility
      perl: move the perl/Git/FromCPAN tree to perl/FromCPAN
      perl Git::LoadCPAN: emit better errors under NO_PERL_CPAN_FALLBACKS
      git manpage: note git-security@googlegroups.com


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.17.0-rc0
@ 2018-03-16  0:57  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2018-03-16  0:57 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

An early preview release Git v2.17.0-rc0 is now available for
testing at the usual places.  It is comprised of 474 non-merge
commits since v2.16.0, contributed by 60 people, 18 of which are
new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.17.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.16.0 are as follows.
Welcome to the Git development community!

  Adam Borowski, Alban Gruin, Andreas G. Schacker, Bernhard
  M. Wiedemann, Christian Ludwig, Gargi Sharma, Genki Sky,
  Gregory Herrero, Jon Simons, Juan F. Codagnone, Kim Gybels,
  Lucas Werkmeister, Mathias Rav, Motoki Seki, Stefan Moch,
  Stephen R Guglielmo, Tatyana Krasnukha, and Thomas Levesque.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alexander Shopov, Alex Bennée,
  Ben Peart, Brandon Williams, brian m. carlson, Christian
  Couder, Daniel Knittl-Frank, Derrick Stolee, Elijah Newren,
  Eric Sunshine, Eric Wong, Jason Merrill, Jeff Hostetler, Jeff
  King, Johannes Schindelin, Jonathan Nieder, Jonathan Tan, Junio
  C Hamano, Kaartic Sivaraam, Mårten Kongstad, Martin Ågren,
  Matthieu Moy, Michael Haggerty, Nathan Payre, Nguyễn Thái
  Ngọc Duy, Nicolas Morey-Chaisemartin, Olga Telezhnaya, Patryk
  Obara, Phillip Wood, Prathamesh Chavan, Ramsay Jones, Randall
  S. Becker, Rasmus Villemoes, René Scharfe, Robert P. J. Day,
  Stefan Beller, SZEDER Gábor, Thomas Gummerer, Todd Zullinger,
  Torsten Bögershausen, and Yasushi SHOJI.

----------------------------------------------------------------

Git 2.17 Release Notes (draft)
==============================

Updates since v2.16
-------------------

UI, Workflows & Features

 * "diff" family of commands learned "--find-object=<object-id>" option
   to limit the findings to changes that involve the named object.

 * "git format-patch" learned to give 72-cols to diffstat, which is
   consistent with other line length limits the subcommand uses for
   its output meant for e-mails.

 * The log from "git daemon" can be redirected with a new option; one
   relevant use case is to send the log to standard error (instead of
   syslog) when running it from inetd.

 * "git rebase" learned to take "--allow-empty-message" option.

 * "git am" has learned the "--quit" option, in addition to the
   existing "--abort" option; having the pair mirrors a few other
   commands like "rebase" and "cherry-pick".

 * "git worktree add" learned to run the post-checkout hook, just like
   "git clone" runs it upon the initial checkout.

 * "git tag" learned an explicit "--edit" option that allows the
   message given via "-m" and "-F" to be further edited.

 * "git fetch --prune-tags" may be used as a handy short-hand for
   getting rid of stale tags that are locally held.

 * The new "--show-current-patch" option gives an end-user facing way
   to get the diff being applied when "git rebase" (and "git am")
   stops with a conflict.

 * "git add -p" used to offer "/" (look for a matching hunk) as a
   choice, even there was only one hunk, which has been corrected.
   Also the single-key help is now given only for keys that are
   enabled (e.g. help for '/' won't be shown when there is only one
   hunk).

 * Since Git 1.7.9, "git merge" defaulted to --no-ff (i.e. even when
   the side branch being merged is a descendant of the current commit,
   create a merge commit instead of fast-forwarding) when merging a
   tag object.  This was appropriate default for integrators who pull
   signed tags from their downstream contributors, but caused an
   unnecessary merges when used by downstream contributors who
   habitually "catch up" their topic branches with tagged releases
   from the upstream.  Update "git merge" to default to --no-ff only
   when merging a tag object that does *not* sit at its usual place in
   refs/tags/ hierarchy, and allow fast-forwarding otherwise, to
   mitigate the problem.

 * "git status" can spend a lot of cycles to compute the relation
   between the current branch and its upstream, which can now be
   disabled with "--no-ahead-behind" option.

 * "git diff" and friends learned funcname patterns for Go language
   source files.

 * "git send-email" learned "--reply-to=<address>" option.

 * Funcname pattern used for C# now recognizes "async" keyword.


Performance, Internal Implementation, Development Support etc.

 * More perf tests for threaded grep

 * "perf" test output can be sent to codespeed server.

 * The build procedure for perl/ part has been greatly simplified by
   weaning ourselves off of MakeMaker.

 * In preparation for implementing narrow/partial clone, the machinery
   for checking object connectivity used by gc and fsck has been
   taught that a missing object is OK when it is referenced by a
   packfile specially marked as coming from trusted repository that
   promises to make them available on-demand and lazily.

 * The machinery to clone & fetch, which in turn involves packing and
   unpacking objects, has been told how to omit certain objects using
   the filtering mechanism introduced by another topic.  It now knows
   to mark the resulting pack as a promisor pack to tolerate missing
   objects, laying foundation for "narrow" clones.

 * The first step to getting rid of mru API and using the
   doubly-linked list API directly instead.

 * Retire mru API as it does not give enough abstraction over
   underlying list API to be worth it.

 * Rewrite two more "git submodule" subcommands in C.

 * The tracing machinery learned to report tweaking of environment
   variables as well.

 * Update Coccinelle rules to catch and optimize strbuf_addf(&buf, "%s", str)

 * Prevent "clang-format" from breaking line after function return type.

 * The sequencer infrastructure is shared across "git cherry-pick",
   "git rebase -i", etc., and has always spawned "git commit" when it
   needs to create a commit.  It has been taught to do so internally,
   when able, by reusing the codepath "git commit" itself uses, which
   gives performance boost for a few tens of percents in some sample
   scenarios.

 * Push the submodule version of collision-detecting SHA-1 hash
   implementation a bit harder on builders.

 * Avoid mmapping small files while using packed refs (especially ones
   with zero size, which would cause later munmap() to fail).

 * Conversion from uchar[20] to struct object_id continues.

 * More tests for wildmatch functions.

 * The code to binary search starting from a fan-out table (which is
   how the packfile is indexed with object names) has been refactored
   into a reusable helper.

 * We now avoid using identifiers that clash with C++ keywords.  Even
   though it is not a goal to compile Git with C++ compilers, changes
   like this help use of code analysis tools that targets C++ on our
   codebase.

 * The executable is now built in 'script' phase in Travis CI integration,
   to follow the established practice, rather than during 'before_script'
   phase.  This allows the CI categorize the failures better ('failed'
   is project's fault, 'errored' is build environment's).
   (merge 3c93b82920 sg/travis-build-during-script-phase later to maint).

 * Writing out the index file when the only thing that changed in it
   is the untracked cache information is often wasteful, and this has
   been optimized out.

 * Various pieces of Perl code we have have been cleaned up.


Also contains various documentation updates and code clean-ups.


Fixes since v2.16
-----------------

 * An old regression in "git describe --all $annotated_tag^0" has been
   fixed.

 * "git status" after moving a path in the working tree (hence making
   it appear "removed") and then adding with the -N option (hence
   making that appear "added") detected it as a rename, but did not
   report the  old and new pathnames correctly.

 * "git svn dcommit" did not take into account the fact that a
   svn+ssh:// URL with a username@ (typically used for pushing) refers
   to the same SVN repository without the username@ and failed when
   svn.pushmergeinfo option is set.

 * API clean-up around revision traversal.

 * "git merge -Xours/-Xtheirs" learned to use our/their version when
   resolving a conflicting updates to a symbolic link.

 * "git clone $there $here" is allowed even when here directory exists
   as long as it is an empty directory, but the command incorrectly
   removed it upon a failure of the operation.

 * "git commit --fixup" did not allow "-m<message>" option to be used
   at the same time; allow it to annotate resulting commit with more
   text.

 * When resetting the working tree files recursively, the working tree
   of submodules are now also reset to match.

 * "git stash -- <pathspec>" incorrectly blew away untracked files in
   the directory that matched the pathspec, which has been corrected.

 * Instead of maintaining home-grown email address parsing code, ship
   a copy of reasonably recent Mail::Address to be used as a fallback
   in 'git send-email' when the platform lacks it.
   (merge d60be8acab mm/send-email-fallback-to-local-mail-address later to maint).

 * "git add -p" was taught to ignore local changes to submodules as
   they do not interfere with the partial addition of regular changes
   anyway.

 * Avoid showing a warning message in the middle of a line of "git
   diff" output.
   (merge 4e056c989f nd/diff-flush-before-warning later to maint).

 * The http tracing code, often used to debug connection issues,
   learned to redact potentially sensitive information from its output
   so that it can be more safely sharable.
   (merge 8ba18e6fa4 jt/http-redact-cookies later to maint).

 * Crash fix for a corner case where an error codepath tried to unlock
   what it did not acquire lock on.
   (merge 81fcb698e0 mr/packed-ref-store-fix later to maint).

 * The split-index mode had a few corner case bugs fixed.
   (merge ae59a4e44f tg/split-index-fixes later to maint).

 * Assorted fixes to "git daemon".
   (merge ed15e58efe jk/daemon-fixes later to maint).

 * Completion of "git merge -s<strategy>" (in contrib/) did not work
   well in non-C locale.
   (merge 7cc763aaa3 nd/list-merge-strategy later to maint).

 * Workaround for segfault with more recent versions of SVN.
   (merge 7f6f75e97a ew/svn-branch-segfault-fix later to maint).

 * Plug recently introduced leaks in fsck.
   (merge ba3a08ca0e jt/fsck-code-cleanup later to maint).

 * "git pull --rebase" did not pass verbosity setting down when
   recursing into a submodule.
   (merge a56771a668 sb/pull-rebase-submodule later to maint).

 * The way "git reset --hard" reports the commit the updated HEAD
   points at is made consistent with the way how the commit title is
   generated by the other parts of the system.  This matters when the
   title is spread across physically multiple lines.
   (merge 1cf823fb68 tg/reset-hard-show-head-with-pretty later to maint).

 * Test fixes.
   (merge 63b1a175ee sg/test-i18ngrep later to maint).

 * Some bugs around "untracked cache" feature have been fixed.  This
   will notice corrupt data in the untracked cache left by old and
   buggy code and issue a warning---the index can be fixed by clearing
   the untracked cache from it.
   (merge 0cacebf099 nd/fix-untracked-cache-invalidation later to maint).
   (merge 7bf0be7501 ab/untracked-cache-invalidation-docs later to maint).

 * "git blame HEAD COPYING" in a bare repository failed to run, while
   "git blame HEAD -- COPYING" run just fine.  This has been corrected.

 * "git add" files in the same directory, but spelling the directory
   path in different cases on case insensitive filesystem, corrupted
   the name hash data structure and led to unexpected results.  This
   has been corrected.
   (merge c95525e90d bp/name-hash-dirname-fix later to maint).

 * "git rebase -p" mangled log messages of a merge commit, which is
   now fixed.
   (merge ed5144d7eb js/fix-merge-arg-quoting-in-rebase-p later to maint).

 * Some low level protocol codepath could crash when they get an
   unexpected flush packet, which is now fixed.
   (merge bb1356dc64 js/packet-read-line-check-null later to maint).

 * "git check-ignore" with multiple paths got confused when one is a
   file and the other is a directory, which has been fixed.
   (merge d60771e930 rs/check-ignore-multi later to maint).

 * "git describe $garbage" stopped giving any errors when the garbage
   happens to be a string with 40 hexadecimal letters.
   (merge a8e7a2bf0f sb/describe-blob later to maint).

 * Code to unquote single-quoted string (used in the parser for
   configuration files, etc.) did not diagnose bogus input correctly
   and produced bogus results instead.
   (merge ddbbf8eb25 jk/sq-dequote-on-bogus-input later to maint).

 * Many places in "git apply" knew that "/dev/null" that signals
   "there is no such file on this side of the diff" can be followed by
   whitespace and garbage when parsing a patch, except for one, which
   made an otherwise valid patch (e.g. ones from subversion) rejected.
   (merge e454ad4bec tk/apply-dev-null-verify-name-fix later to maint).

 * We no longer create any *.spec file, so "make clean" should not
   remove it.
   (merge 4321bdcabb tz/do-not-clean-spec-file later to maint).

 * "git push" over http transport did not unquote the push-options
   correctly.
   (merge 90dce21eb0 jk/push-options-via-transport-fix later to maint).

 * "git send-email" learned to complain when the batch-size option is
   not defined when the relogin-delay option is, since these two are
   mutually required.
   (merge 9caa70697b xz/send-email-batch-size later to maint).

 * Y2k20 fix ;-) for our perl scripts.
   (merge a40e06ee33 bw/perl-timegm-timelocal-fix later to maint).

 * Threaded "git grep" has been optimized to avoid allocation in code
   section that is covered under a mutex.
   (merge 38ef24dccf rv/grep-cleanup later to maint).

 * "git subtree" script (in contrib/) scripted around "git log", whose
   output got affected by end-user configuration like log.showsignature
   (merge 8841b5222c sg/subtree-signed-commits later to maint).

 * While finding unique object name abbreviation, the code may
   accidentally have read beyond the end of the array of object names
   in a pack.
   (merge 21abed500c ds/find-unique-abbrev-optim later to maint).

 * Micro optimization in revision traversal code.
   (merge ebbed3ba04 ds/mark-parents-uninteresting-optim later to maint).

 * "git commit" used to run "gc --auto" near the end, which was lost
   when the command was reimplemented in C by mistake.
   (merge 095c741edd ab/gc-auto-in-commit later to maint).

 * Allow running a couple of tests with "sh -x".
   (merge c20bf94abc sg/cvs-tests-with-x later to maint).

 * Other minor doc, test and build updates and code cleanups.
   (merge e2a5a028c7 bw/oidmap-autoinit later to maint).
   (merge ec3b4b06f8 cl/t9001-cleanup later to maint).
   (merge e1b3f3dd38 ks/submodule-doc-updates later to maint).
   (merge fbac558a9b rs/describe-unique-abbrev later to maint).
   (merge 8462ff43e4 tb/crlf-conv-flags later to maint).
   (merge 7d68bb0766 rb/hashmap-h-compilation-fix later to maint).
   (merge 3449847168 cc/sha1-file-name later to maint).
   (merge ad622a256f ds/use-get-be64 later to maint).
   (merge f919ffebed sg/cocci-move-array later to maint).
   (merge 4e801463c7 jc/mailinfo-cleanup-fix later to maint).
   (merge ef5b3a6c5e nd/shared-index-fix later to maint).
   (merge 9f5258cbb8 tz/doc-show-defaults-to-head later to maint).
   (merge b780e4407d jc/worktree-add-short-help later to maint).
   (merge ae239fc8e5 rs/cocci-strbuf-addf-to-addstr later to maint).
   (merge 2e22a85e5c nd/ignore-glob-doc-update later to maint).
   (merge 3738031581 jk/gettext-poison later to maint).
   (merge 54360a1956 rj/sparse-updates later to maint).
   (merge 12e31a6b12 sg/doc-test-must-fail-args later to maint).
   (merge 760f1ad101 bc/doc-interpret-trailers-grammofix later to maint).
   (merge 4ccf461f56 bp/fsmonitor later to maint).
   (merge a6119f82b1 jk/test-hashmap-updates later to maint).
   (merge 5aea9fe6cc rd/typofix later to maint).
   (merge e4e5da2796 sb/status-doc-fix later to maint).
   (merge 7976e901c8 gs/test-unset-xdg-cache-home later to maint).
   (merge d023df1ee6 tg/worktree-create-tracking later to maint).
   (merge 4cbe92fd41 sm/mv-dry-run-update later to maint).
   (merge 75e5e9c3f7 sb/color-h-cleanup later to maint).
   (merge 2708ef4af6 sg/t6300-modernize later to maint).
   (merge d88e92d4e0 bw/doc-submodule-recurse-config-with-clone later to maint).
   (merge f74bbc8dd2 jk/cached-commit-buffer later to maint).
   (merge 1316416903 ms/non-ascii-ticks later to maint).
   (merge 878056005e rs/strbuf-read-file-or-whine later to maint).
   (merge 79f0ba1547 jk/strbuf-read-file-close-error later to maint).
   (merge edfb8ba068 ot/ref-filter-cleanup later to maint).
   (merge 11395a3b4b jc/test-must-be-empty later to maint).
   (merge 768b9d6db7 mk/doc-pretty-fill later to maint).
   (merge 2caa7b8d27 ab/man-sec-list later to maint).

----------------------------------------------------------------

Changes since v2.16.0 are as follows:

Adam Borowski (1):
      hooks/pre-auto-gc-battery: allow gc to run on non-laptops

Alban Gruin (1):
      userdiff: add built-in pattern for golang

Alex Bennée (1):
      send-email: add test for Linux's get_maintainer.pl

Alexander Shopov (1):
      Mark messages for translations

Andreas G. Schacker (1):
      doc/read-tree: remove obsolete remark

Ben Peart (3):
      dir.c: don't flag the index as dirty for changes to the untracked cache
      name-hash: properly fold directory names in adjust_dirname_case()
      fsmonitor: update documentation to remove reference to invalid config settings

Bernhard M. Wiedemann (1):
      perl: call timegm and timelocal with 4-digit year

Brandon Williams (39):
      oidmap: ensure map is initialized
      object_info: change member name from 'typename' to 'type_name'
      object: rename function 'typename' to 'type_name'
      blame: rename 'this' variables
      pack-objects: rename 'this' variables
      rev-parse: rename 'this' variable
      submodule: indicate that 'submodule.recurse' doesn't apply to clone
      diff: rename 'this' variables
      apply: rename 'try' variables
      apply: rename 'new' variables
      checkout: rename 'new' variables
      help: rename 'new' variables
      pack-redundant: rename 'new' variables
      reflog: rename 'new' variables
      remote: rename 'new' variables
      combine-diff: rename 'new' variables
      commit: rename 'new' variables
      diff-lib: rename 'new' variable
      diff: rename 'new' variables
      diffcore-delta: rename 'new' variables
      entry: rename 'new' variables
      http: rename 'new' variables
      imap-send: rename 'new' variables
      line-log: rename 'new' variables
      read-cache: rename 'new' variables
      ref-filter: rename 'new' variables
      remote: rename 'new' variables
      split-index: rename 'new' variables
      submodule: rename 'new' variables
      trailer: rename 'new' variables
      unpack-trees: rename 'new' variables
      init-db: rename 'template' variables
      environment: rename 'template' variables
      diff: rename 'template' variables
      environment: rename 'namespace' variables
      wrapper: rename 'template' variables
      tempfile: rename 'template' variables
      trailer: rename 'template' variables
      replace: rename 'new' variables

Christian Couder (12):
      perf/aggregate: fix checking ENV{GIT_PERF_SUBSECTION}
      perf/aggregate: refactor printing results
      perf/aggregate: implement codespeed JSON output
      perf/run: add conf_opts argument to get_var_from_env_or_config()
      perf/run: learn about perf.codespeedOutput
      perf/run: learn to send output to codespeed server
      perf/run: read GIT_PERF_REPO_NAME from perf.repoName
      sha1_file: remove static strbuf from sha1_file_name()
      sha1_file: improve sha1_file_name() perfs
      perf/aggregate: add --subsection option
      perf/aggregate: add --reponame option
      perf/aggregate: sort JSON fields in output

Christian Ludwig (3):
      t9001: use existing helper in send-email test
      send-email: rename variable for clarity
      send-email: support separate Reply-To address

Daniel Knittl-Frank (1):
      describe: prepend "tags/" when describing tags with embedded name

Derrick Stolee (3):
      packfile: use get_be64() for large offsets
      sha1_name: fix uninitialized memory errors
      revision.c: reduce object database queries

Elijah Newren (3):
      Tighten and correct a few testcases for merging and cherry-picking
      merge-recursive: fix logic ordering issue
      merge-recursive: add explanation for src_entry and dst_entry

Eric Sunshine (5):
      t5601-clone: test case-conflicting files on case-insensitive filesystem
      worktree: add: fix 'post-checkout' not knowing new worktree location
      git-worktree.txt: fix missing ")" typo
      git-worktree.txt: fix indentation of example and text of 'add' command
      t2028: fix minor error and issues in newly-added "worktree move" tests

Eric Wong (2):
      fsck: fix leak when traversing trees
      git-svn: control destruction order to avoid segfault

Gargi Sharma (1):
      mru: Replace mru.[ch] with list.h implementation

Genki Sky (2):
      rebase: add --allow-empty-message option
      test-lib.sh: unset XDG_CACHE_HOME

Gregory Herrero (1):
      rebase -p: fix incorrect commit message when calling `git merge`.

Jason Merrill (1):
      git-svn: fix svn.pushmergeinfo handling of svn+ssh usernames.

Jeff Hostetler (12):
      upload-pack: add object filtering for partial clone
      fetch-pack, index-pack, transport: partial clone
      fetch-pack: add --no-filter
      fetch: support filters
      partial-clone: define partial clone settings in config
      t5616: end-to-end tests for partial clone
      fetch: inherit filter-spec from partial clone
      t5616: test bulk prefetch after partial fetch
      stat_tracking_info: return +1 when branches not equal
      status: add --[no-]ahead-behind to status and commit for V2 format.
      status: update short status to respect --no-ahead-behind
      status: support --no-ahead-behind in long format

Jeff King (34):
      t5600: fix outdated comment about unborn HEAD
      t5600: modernize style
      clone: factor out dir_exists() helper
      clone: do not clean up directories we didn't create
      sq_quote_argv: drop maxlen parameter
      trace: avoid unnecessary quoting
      t5570: use ls-remote instead of clone for interp tests
      t/lib-git-daemon: record daemon log
      daemon: fix off-by-one in logging extended attributes
      daemon: handle NULs in extended attribute string
      t/lib-git-daemon: add network-protocol helpers
      daemon: fix length computation in newline stripping
      t0205: drop redundant test
      git-sh-i18n: check GETTEXT_POISON before USE_GETTEXT_SCHEME
      correct error messages for NULL packet_read_line()
      CodingGuidelines: mention "static" and "extern"
      t0002: simplify error checking
      describe: confirm that blobs actually exist
      test-hashmap: use ALLOC_ARRAY rather than bare malloc
      test-hashmap: check allocation computation for overflow
      test-hashmap: use xsnprintf rather than snprintf
      test-hashmap: use strbuf_getline rather than fgets
      test-hashmap: simplify alloc_test_entry
      test-hashmap: use "unsigned int" for hash storage
      sq_dequote: fix extra consumption of source string
      t5545: factor out http repository setup
      remote-curl: unquote incoming push-options
      commit: drop uses of get_cached_commit_buffer()
      revision: drop --show-all option
      t: send verbose test-helper output to fd 4
      strbuf_read_file(): preserve errno across close() call
      smart-http: document flush after "# service" line
      t3701: add a test for interactive.diffFilter
      add--interactive: detect bogus diffFilter output

Johannes Schindelin (2):
      sequencer: assign only free()able strings to gpg_sign
      apply: demonstrate a problem applying svn diffs

Jon Simons (1):
      always check for NULL return from packet_read_line()

Jonathan Nieder (1):
      perl: treat PERLLIB_EXTRA as an extra path again

Jonathan Tan (20):
      extension.partialclone: introduce partial clone extension
      fsck: introduce partialclone extension
      fsck: support refs pointing to promisor objects
      fsck: support referenced promisor objects
      fsck: support promisor objects as CLI argument
      index-pack: refactor writing of .keep files
      introduce fetch-object: fetch one promisor object
      sha1_file: support lazily fetching missing objects
      rev-list: support termination at promisor objects
      gc: do not repack promisor packfiles
      fetch-pack: test support excluding large blobs
      fetch: refactor calculation of remote list
      clone: partial clone
      unpack-trees: batch fetching of missing blobs
      fetch-pack: restore save_commit_buffer after use
      http: support cookie redaction when tracing
      http: support omitting data from traces
      Docs: split out long-running subprocess handshake
      packfile: remove GIT_DEBUG_LOOKUP log statements
      packfile: refactor hash search with fanout table

Juan F. Codagnone (1):
      mailinfo: avoid segfault when can't open files

Junio C Hamano (18):
      merge: teach -Xours/-Xtheirs to symbolic link merge
      worktree: say that "add" takes an arbitrary commit in short-help
      Start 2.17 cycle
      Git 2.16.1
      First batch after 2.16
      blame: tighten command line parser
      Second batch for 2.17
      Third batch for 2.17
      Git 2.16.2
      merge: allow fast-forward when merging a tracked tag
      Fourth batch for 2.17
      Fifth batch for 2.17
      test_must_be_empty: make sure the file exists, not just empty
      untracked cache: use git_env_bool() not getenv() for customization
      Sixth batch for 2.17
      Seventh batch for 2.17
      Eighth batch for 2.17
      Git 2.17-rc0

Kaartic Sivaraam (2):
      Doc/gitsubmodules: make some changes to improve readability and syntax
      Doc/git-submodule: improve readability and grammar of a sentence

Kim Gybels (1):
      packed_ref_cache: don't use mmap() for small files

Lucas Werkmeister (1):
      daemon: add --log-destination=(stderr|syslog|none)

Martin Ågren (5):
      sequencer: make lockfiles non-static
      sequencer: always roll back lock in `do_recursive_merge()`
      merge-recursive: always roll back lock in `merge_recursive_generic()`
      merge: always roll back lock in `checkout_fast_forward()`
      sequencer: do not roll back lockfile unnecessarily

Mathias Rav (1):
      files_initial_transaction_commit(): only unlock if locked

Matthieu Moy (2):
      send-email: add and use a local copy of Mail::Address
      perl/Git: remove now useless email-address parsing code

Michael Haggerty (5):
      struct snapshot: store `start` rather than `header_len`
      create_snapshot(): use `xmemdupz()` rather than a strbuf
      find_reference_location(): make function safe for empty snapshots
      packed_ref_iterator_begin(): make optimization more general
      load_contents(): don't try to mmap an empty file

Motoki Seki (1):
      Documentation/gitsubmodules.txt: avoid non-ASCII apostrophes

Mårten Kongstad (1):
      docs/pretty-formats: fix typo '% <(<N>)' -> '%<|(<N>)'

Nathan Payre (1):
      send-email: extract email-parsing code into a subroutine

Nguyễn Thái Ngọc Duy (85):
      t2203: test status output with porcelain v2 format
      Use DIFF_DETECT_RENAME for detect_rename assignments
      wt-status.c: coding style fix
      wt-status.c: catch unhandled diff status codes
      wt-status.c: rename rename-related fields in wt_status_change_data
      wt-status.c: handle worktree renames
      trace.c: move strbuf_release() out of print_trace_line()
      add--interactive: ignore submodule changes except HEAD
      read-cache.c: change type of "temp" in write_shared_index()
      read-cache.c: move tempfile creation/cleanup out of write_shared_index
      diff.c: flush stdout before printing rename warnings
      run-command.c: introduce trace_run_command()
      run-command.c: print program 'git' when tracing git_cmd mode
      run-command.c: print env vars in trace_run_command()
      run-command.c: print new cwd in trace_run_command()
      read-cache: don't write index twice if we can't write shared index
      worktree.c: add validate_worktree()
      dir.c: avoid stat() in valid_cached_dir()
      dir.c: fix missing dir invalidation in untracked code
      format-patch: keep cover-letter diffstat wrapped in 72 columns
      completion: fix completing merge strategies on non-C locales
      dir.c: stop ignoring opendir() error in open_cached_dir()
      format-patch: reduce patch diffstat width to 72
      gitignore.txt: elaborate shell glob syntax
      trace: measure where the time is spent in the index-heavy operations
      diff.c: refactor pprint_rename() to use strbuf
      dir.c: ignore paths containing .git when invalidating untracked cache
      parse-options: support --git-completion-helper
      parse-options: add OPT_xxx_F() variants
      parse-options: let OPT__FORCE take optional flags argument
      git-completion.bash: introduce __gitcomp_builtin
      completion: use __gitcomp_builtin in _git_add
      completion: use __gitcomp_builtin in _git_am
      completion: use __gitcomp_builtin in _git_apply
      completion: use __gitcomp_builtin in _git_branch
      completion: use __gitcomp_builtin in _git_checkout
      completion: use __gitcomp_builtin in _git_cherry_pick
      completion: use __gitcomp_builtin in _git_clean
      completion: use __gitcomp_builtin in _git_clone
      completion: use __gitcomp_builtin in _git_commit
      completion: use __gitcomp_builtin in _git_config
      completion: use __gitcomp_builtin in _git_describe
      completion: use __gitcomp_builtin in _git_difftool
      completion: use __gitcomp_builtin in _git_fetch
      completion: use __gitcomp_builtin in _git_fsck
      completion: use __gitcomp_builtin in _git_gc
      completion: use __gitcomp_builtin in _git_grep
      completion: use __gitcomp_builtin in _git_help
      completion: use __gitcomp_builtin in _git_init
      completion: use __gitcomp_builtin in _git_ls_files
      completion: use __gitcomp_builtin in _git_ls_remote
      completion: use __gitcomp_builtin in _git_merge
      completion: use __gitcomp_builtin in _git_merge_base
      completion: use __gitcomp_builtin in _git_mv
      completion: use __gitcomp_builtin in _git_name_rev
      completion: use __gitcomp_builtin in _git_notes
      completion: use __gitcomp_builtin in _git_pull
      completion: use __gitcomp_builtin in _git_push
      completion: use __gitcomp_builtin in _git_remote
      remote: force completing --mirror= instead of --mirror
      completion: use __gitcomp_builtin in _git_replace
      completion: use __gitcomp_builtin in _git_reset
      completion: use __gitcomp_builtin in _git_revert
      completion: use __gitcomp_builtin in _git_rm
      completion: use __gitcomp_builtin in _git_show_branch
      completion: use __gitcomp_builtin in _git_status
      completion: use __gitcomp_builtin in _git_tag
      completion: use __gitcomp_builtin in _git_worktree
      worktree.c: add update_worktree_location()
      worktree move: new command
      worktree move: accept destination as directory
      worktree move: refuse to move worktrees with submodules
      worktree remove: new command
      worktree remove: allow it when $GIT_WORK_TREE is already gone
      am: add --show-current-patch
      rebase: add --show-current-patch
      rebase: introduce and use pseudo-ref REBASE_HEAD
      am: support --quit
      diff: add --compact-summary
      object.h: update flag allocation comment
      object.h: realign object flag allocation comment
      completion: don't set PARSE_OPT_NOCOMPLETE on --rerere-autoupdate
      completion: simplify _git_notes
      completion: complete --{reuse,reedit}-message= for all notes subcmds
      completion: more subcommands in _git_notes()

Nicolas Morey-Chaisemartin (1):
      tag: add --edit option

Olga Telezhnaya (3):
      mru: use double-linked list from list.h
      ref-filter: get rid of duplicate code
      ref-filter: get rid of goto

Patryk Obara (14):
      clang-format: adjust penalty for return type line break
      http-push: improve error log
      sha1_file: convert pretend_sha1_file to object_id
      dir: convert struct sha1_stat to use object_id
      sha1_file: convert hash_sha1_file to object_id
      cache: clear whole hash buffer with oidclr
      match-trees: convert splice_tree to object_id
      commit: convert commit_tree* to object_id
      notes: convert combine_notes_* to object_id
      notes: convert write_notes_tree to object_id
      sha1_file: convert write_sha1_file to object_id
      sha1_file: convert force_object_loose to object_id
      sha1_file: convert write_loose_object to object_id
      sha1_file: rename hash_sha1_file_literally

Phillip Wood (25):
      t3404: check intermediate squash messages
      commit: move empty message checks to libgit
      Add a function to update HEAD after creating a commit
      commit: move post-rewrite code to libgit
      commit: move print_commit_summary() to libgit
      sequencer: simplify adding Signed-off-by: trailer
      sequencer: load commit related config
      sequencer: try to commit without forking 'git commit'
      t3512/t3513: remove KNOWN_FAILURE_CHERRY_PICK_SEES_EMPTY_COMMIT=1
      sequencer: improve config handling
      t7505: style fixes
      t7505: add tests for cherry-pick and rebase -i/-p
      sequencer: run 'prepare-commit-msg' hook
      add -p: only display help for active keys
      add -p: only bind search key if there's more than one hunk
      add -p: improve error messages
      add -i: add function to format hunk header
      t3701: indent here documents
      t3701: use test_write_lines and write_script
      t3701: don't hard code sha1 hash values
      t3701: add failing test for pathological context lines
      add -p: adjust offsets of subsequent hunks when one is skipped
      add -p: calculate offset delta for edited patches
      add -p: fix counting when splitting and coalescing
      add -p: don't rely on apply's '--recount' option

Prathamesh Chavan (2):
      submodule: port submodule subcommand 'sync' from shell to C
      submodule: port submodule subcommand 'deinit' from shell to C

Ramsay Jones (3):
      t4151: consolidate multiple calls to test_i18ngrep
      config.mak.uname: remove SPARSE_FLAGS setting for cygwin
      Makefile: suppress a sparse warning for pack-revindex.c

Randall S. Becker (1):
      hashmap.h: remove unused variable

Rasmus Villemoes (2):
      grep: move grep_source_init outside critical section
      grep: simplify grep_oid and grep_file

René Scharfe (15):
      commit: avoid allocation in clear_commit_marks_many()
      commit: use clear_commit_marks_many() in remove_redundant()
      ref-filter: use clear_commit_marks_many() in do_merge_filter()
      object: add clear_commit_marks_all()
      bisect: avoid using the rev_info flag leak_pending
      bundle: avoid using the rev_info flag leak_pending
      checkout: avoid using the rev_info flag leak_pending
      revision: remove the unused flag leak_pending
      commit: remove unused function clear_commit_marks_for_object_array()
      describe: use strbuf_add_unique_abbrev() for adding short hashes
      cocci: use format keyword instead of a literal string
      cocci: simplify check for trivial format strings
      check-ignore: fix mix of directories and other file types
      sequencer: factor out strbuf_read_file_or_whine()
      perf: use GIT_PERF_REPEAT_COUNT=3 by default even without config file

Robert P. J. Day (2):
      t/: correct obvious typo "detahced"
      Correct mispellings of ".gitmodule" to ".gitmodules"

SZEDER Gábor (33):
      travis-ci: build Git during the 'script' phase
      Use MOVE_ARRAY
      travis-ci: use 'set -x' for the commands under 'su' in the 32 bit Linux build
      travis-ci: use 'set -e' in the 32 bit Linux build job
      travis-ci: don't repeat the path of the cache directory
      travis-ci: don't run the test suite as root in the 32 bit Linux build
      travis-ci: don't fail if user already exists on 32 bit Linux build job
      t5541: add 'test_i18ngrep's missing filename parameter
      t5812: add 'test_i18ngrep's missing filename parameter
      t6022: don't run 'git merge' upstream of a pipe
      t4001: don't run 'git status' upstream of a pipe
      t5510: consolidate 'grep' and 'test_i18ngrep' patterns
      t5536: let 'test_i18ngrep' read the file without redirection
      t: move 'test_i18ncmp' and 'test_i18ngrep' to 'test-lib-functions.sh'
      t: validate 'test_i18ngrep's parameters
      t: make 'test_i18ngrep' more informative on failure
      t: document 'test_must_fail ok=<signal-name>'
      t6300-for-each-ref: fix "more than one quoting style" tests
      Makefile: generate Git(3pm) as dependency of the 'doc' and 'man' targets
      t: prevent '-x' tracing from interfering with test helpers' stderr
      t: add means to disable '-x' tracing for individual test scripts
      t1507-rev-parse-upstream: don't check the stderr of a shell function
      t5536: simplify checking of messages output to stderr
      t3030-merge-recursive: don't check the stderr of a subshell
      t5500-fetch-pack: don't check the stderr of a subshell
      t5526: use $TRASH_DIRECTORY to specify the path of GIT_TRACE log file
      t5570-git-daemon: don't check the stderr of a subshell
      t9903-bash-prompt: don't check the stderr of __git_ps1()
      t1510-repo-setup: mark as untraceable with '-x'
      t/README: add a note about don't saving stderr of compound commands
      travis-ci: run tests with '-x' tracing
      t9400-git-cvsserver-server: don't rely on the output of 'test_cmp'
      t9402-git-cvsserver-refs: don't check the stderr of a subshell

Stefan Beller (14):
      diff.h: make pickaxe_opts an unsigned bit field
      diff: migrate diff_flags.pickaxe_ignore_case to a pickaxe_opts bit
      diff: introduce DIFF_PICKAXE_KINDS_MASK
      diffcore: add a pickaxe option to find a specific blob
      diff: properly error out when combining multiple pickaxe options
      diff: use HAS_MULTI_BITS instead of counting bits manually
      t/lib-submodule-update.sh: clarify test
      t/lib-submodule-update.sh: fix test ignoring ignored files in submodules
      unpack-trees: oneway_merge to update submodules
      submodule: submodule_move_head omits old argument in forced case
      builtin/pull: respect verbosity settings in submodules
      send-email: error out when relogin delay is missing
      color.h: document and modernize header
      Documentation/git-status: clarify status table for porcelain mode

Stefan Moch (2):
      t7001: add test case for --dry-run
      mv: remove unneeded 'if (!show_only)'

Stephen R Guglielmo (1):
      subtree: fix add and pull for GPG-signed commits

Tatyana Krasnukha (1):
      apply: handle Subversion diffs with /dev/null gracefully

Thomas Gummerer (5):
      stash: don't delete untracked files that match pathspec
      read-cache: fix reading the shared index for other repos
      split-index: don't write cache tree with null oid entries
      travis: run tests with GIT_TEST_SPLIT_INDEX
      reset --hard: make use of the pretty machinery

Thomas Levesque (1):
      userdiff.c: add C# async keyword in diff pattern

Todd Zullinger (3):
      doc: mention 'git show' defaults to HEAD
      Makefile: remove *.spec from clean target
      Makefile: add NO_PERL_CPAN_FALLBACKS knob

Torsten Bögershausen (1):
      convert_to_git(): safe_crlf/checksafe becomes int conv_flags

Yasushi SHOJI (1):
      bisect: debug: convert struct object to object_id

brian m. carlson (15):
      repository: pre-initialize hash algo pointer
      hash: move SHA-1 macros to hash.h
      hash: create union for hash context allocation
      builtin/index-pack: improve hash function abstraction
      builtin/unpack-objects: switch uses of SHA-1 to the_hash_algo
      sha1_file: switch uses of SHA-1 to the_hash_algo
      fast-import: switch various uses of SHA-1 to the_hash_algo
      pack-check: convert various uses of SHA-1 to abstract forms
      pack-write: switch various SHA-1 values to abstract forms
      read-cache: abstract away uses of SHA-1
      csum-file: rename sha1file to hashfile
      csum-file: abstract uses of SHA-1
      bulk-checkin: abstract SHA-1 usage
      hash: update obsolete reference to SHA1_HEADER
      docs/interpret-trailers: fix agreement error

Ævar Arnfjörð Bjarmason (53):
      Makefile: don't error out under DC_SHA1_EXTERNAL if DC_SHA1_SUBMODULE=auto
      Makefile: under "make dist", include the sha1collisiondetection submodule
      sha1dc_git.h: re-arrange an ifdef chain for a subsequent change
      Makefile: replace perl/Makefile.PL with simple make rules
      commit doc: document that -c, -C, -F and --fixup with -m error
      commit: add support for --fixup <commit> -m"<extra message>"
      perl: avoid *.pmc and fix Error.pm further
      perf: amend the grep tests to test grep.threads
      cat-file doc: document that -e will return some output
      status: add a failing test showing a core.untrackedCache bug
      wildmatch test: indent with tabs, not spaces
      wildmatch test: use more standard shell style
      wildmatch test: don't try to vertically align our output
      wildmatch test: use a paranoia pattern from nul_match()
      wildmatch test: remove dead fnmatch() test code
      wildmatch test: use test_must_fail, not ! for test-wildmatch
      wildmatch test: perform all tests under all wildmatch() modes
      wildmatch test: create & test files on disk in addition to in-memory
      test-lib: add an EXPENSIVE_ON_WINDOWS prerequisite
      wildmatch test: mark test as EXPENSIVE_ON_WINDOWS
      fetch: don't redundantly NULL something calloc() gave us
      fetch: trivially refactor assignment to ref_nr
      fetch: stop accessing "remote" variable indirectly
      remote: add a macro for "refs/tags/*:refs/tags/*"
      fetch tests: refactor in preparation for testing tag pruning
      fetch tests: re-arrange arguments for future readability
      fetch tests: add a tag to be deleted to the pruning tests
      fetch tests: test --prune and refspec interaction
      fetch tests: double quote a variable for interpolation
      fetch tests: expand case/esac for later change
      fetch tests: fetch <url> <spec> as well as fetch [<remote>]
      git fetch doc: add a new section to explain the ins & outs of pruning
      git remote doc: correct dangerous lies about what prune does
      git-fetch & config doc: link to the new PRUNING section
      fetch tests: add scaffolding for the new fetch.pruneTags
      fetch: add a --prune-tags option and fetch.pruneTags config
      fetch: make the --prune-tags work with <url>
      update-index doc: note a fixed bug in the untracked cache
      update-index doc: note the caveat with "could not open..."
      perl: *.pm files should not have the executable bit
      Git.pm: remove redundant "use strict" from sub-package
      Git.pm: add the "use warnings" pragma
      commit: run git gc --auto just before the post-commit hook
      gitweb: hard-depend on the Digest::MD5 5.8 module
      Git.pm: hard-depend on the File::{Temp,Spec} modules
      git-send-email: unconditionally use Net::{SMTP,Domain}
      perl: update our ancient copy of Error.pm
      perl: update our copy of Mail::Address
      perl: move CPAN loader wrappers to another namespace
      perl: generalize the Git::LoadCPAN facility
      perl: move the perl/Git/FromCPAN tree to perl/FromCPAN
      perl Git::LoadCPAN: emit better errors under NO_PERL_CPAN_FALLBACKS
      git manpage: note git-security@googlegroups.com


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.16.0
@ 2018-01-18  5:54  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2018-01-18  5:54 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

The latest feature release Git v2.16.0 is now available at the
usual places.  It is comprised of 509 non-merge commits since
v2.15.0, contributed by 91 people, 26 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.16.0'
tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.15.0 are as follows.
Welcome to the Git development community!

  Albert Astals Cid, Antoine Beaupré, Damien Marié, Daniel
  Bensoussan, Fangyi Zhou, Florian Klink, Gennady Kupava, Guillaume
  Castagnino, Haaris Mehmood, Hans Jerry Illikainen, Ingo Ruhnke,
  Jakub Bereżański, Jean Carlo Machado, Julien Dusser, J Wyman,
  Kevin, Louis Bettens, Łukasz Stelmach, Marius Paliga, Olga
  Telezhnaya, Rafael Ascensão, Robert Abel, Robert P. J. Day,
  Shuyu Wei, Wei Shuyu, and Zhou Fangyi.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alexander Shopov,
  Alex Vandiver, Anders Kaseorg, Andrey Okoshkin, Ann T Ropea,
  Beat Bolli, Ben Peart, Brandon Williams, brian m. carlson, Carlos
  Martín Nieto, Changwoo Ryu, Charles Bailey, Christian Couder,
  Christopher Díaz Riveros, Dave Borowitz, Dennis Kaarsemaker,
  Derrick Stolee, Dimitriy Ryazantcev, Elijah Newren, Emily Xie,
  Eric Sunshine, Eric Wong, Heiko Voigt, Jacob Keller, Jameson
  Miller, Jean-Noel Avila, Jeff Hostetler, Jeff King, Jiang Xin,
  Johannes Schindelin, Jonathan Nieder, Jonathan Tan, Jordi Mas,
  Junio C Hamano, Kaartic Sivaraam, Kevin Daudt, Lars Schneider,
  Liam Beguin, Luke Diamand, Martin Ågren, Michael Haggerty,
  Nicolas Morey-Chaisemartin, Peter Krefting, Phil Hord, Phillip
  Wood, Pranit Bauva, Prathamesh Chavan, Ralf Thielow, Ramsay
  Jones, Randall S. Becker, Rasmus Villemoes, René Scharfe,
  Simon Ruderich, Stefan Beller, Steffen Prohaska, Stephan Beyer,
  SZEDER Gábor, Thomas Braun, Thomas Gummerer, Todd Zullinger,
  Torsten Bögershausen, Trần Ngọc Quân, and W. Trevor King.

----------------------------------------------------------------

Git 2.16 Release Notes
======================

Backward compatibility notes and other notable changes.

 * Use of an empty string as a pathspec element that is used for
   'everything matches' is now an error.


Updates since v2.15
-------------------

UI, Workflows & Features

 * An empty string as a pathspec element that means "everything"
   i.e. 'git add ""', is now illegal.  We started this by first
   deprecating and warning a pathspec that has such an element in
   2.11 (Nov 2016).

 * A hook script that is set unexecutable is simply ignored.  Git
   notifies when such a file is ignored, unless the message is
   squelched via advice.ignoredHook configuration.

 * "git pull" has been taught to accept "--[no-]signoff" option and
   pass it down to "git merge".

 * The "--push-option=<string>" option to "git push" now defaults to a
   list of strings configured via push.pushOption variable.

 * "gitweb" checks if a directory is searchable with Perl's "-x"
   operator, which can be enhanced by using "filetest 'access'"
   pragma, which now we do.

 * "git stash save" has been deprecated in favour of "git stash push".

 * The set of paths output from "git status --ignored" was tied
   closely with its "--untracked=<mode>" option, but now it can be
   controlled more flexibly.  Most notably, a directory that is
   ignored because it is listed to be ignored in the ignore/exclude
   mechanism can be handled differently from a directory that ends up
   to be ignored only because all files in it are ignored.

 * The remote-helper for talking to MediaWiki has been updated to
   truncate an overlong pagename so that ".mw" suffix can still be
   added.

 * The remote-helper for talking to MediaWiki has been updated to
   work with mediawiki namespaces.

 * The "--format=..." option "git for-each-ref" takes learned to show
   the name of the 'remote' repository and the ref at the remote side
   that is affected for 'upstream' and 'push' via "%(push:remotename)"
   and friends.

 * Doc and message updates to teach users "bisect view" is a synonym
   for "bisect visualize".

 * "git bisect run" that did not specify any command to run used to go
   ahead and treated all commits to be tested as 'good'.  This has
   been corrected by making the command error out.

 * The SubmittingPatches document has been converted to produce an
   HTML version via AsciiDoc/Asciidoctor.

 * We learned to optionally talk to a file system monitor via new
   fsmonitor extension to speed up "git status" and other operations
   that need to see which paths have been modified.  Currently we only
   support "watchman".  See File System Monitor section of
   git-update-index(1) for more detail.

 * The "diff" family of commands learned to ignore differences in
   carriage return at the end of line.

 * Places that know about "sendemail.to", like documentation and shell
   completion (in contrib/) have been taught about "sendemail.tocmd",
   too.

 * "git add --renormalize ." is a new and safer way to record the fact
   that you are correcting the end-of-line convention and other
   "convert_to_git()" glitches in the in-repository data.

 * "git branch" and "git checkout -b" are now forbidden from creating
   a branch whose name is "HEAD".

 * "git branch --list" learned to show its output through the pager by
   default when the output is going to a terminal, which is controlled
   by the pager.branch configuration variable.  This is similar to a
   recent change to "git tag --list".

 * "git grep -W", "git diff -W" and their friends learned a heuristic
   to extend a pre-context beyond the line that matches the "function
   pattern" (aka "diff.*.xfuncname") to include a comment block, if
   exists, that immediately precedes it.

 * "git config --expiry-date gc.reflogexpire" can read "2.weeks" from
   the configuration and report it as a timestamp, just like "--int"
   would read "1k" and report 1024, to help consumption by scripts.

 * The shell completion (in contrib/) learned that "git pull" can take
   the "--autostash" option.

 * The tagnames "git log --decorate" uses to annotate the commits can
   now be limited to subset of available refs with the two additional
   options, --decorate-refs[-exclude]=<pattern>.

 * "git grep" compiled with libpcre2 sometimes triggered a segfault,
   which is being fixed.

 * "git send-email" tries to see if the sendmail program is available
   in /usr/lib and /usr/sbin; extend the list of locations to be
   checked to also include directories on $PATH.

 * "git diff" learned, "--anchored", a variant of the "--patience"
   algorithm, to which the user can specify which 'unique' line to be
   used as anchoring points.

 * The way "git worktree add" determines what branch to create from
   where and checkout in the new worktree has been updated a bit.

 * Ancient part of codebase still shows dots after an abbreviated
   object name just to show that it is not a full object name, but
   these ellipses are confusing to people who newly discovered Git
   who are used to seeing abbreviated object names and find them
   confusing with the range syntax.

 * With a configuration variable rebase.abbreviateCommands set,
   "git rebase -i" produces the todo list with a single-letter
   command names.

 * "git worktree add" learned to run the post-checkout hook, just like
   "git checkout" does, after the initial checkout.

 * "git svn" has been updated to strip CRs in the commit messages, as
   recent versions of Subversion rejects them.

 * "git imap-send" did not correctly quote the folder name when
   making a request to the server, which has been corrected.

 * Error messages from "git rebase" have been somewhat cleaned up.

 * Git has been taught to support an https:// URL used for http.proxy
   when using recent versions of libcurl.

 * "git merge" learned to pay attention to merge.verifySignatures
   configuration variable and pretend as if '--verify-signatures'
   option was given from the command line.

 * "git describe" was taught to dig trees deeper to find a
   <commit-ish>:<path> that refers to a given blob object.


Performance, Internal Implementation, Development Support etc.

 * An earlier update made it possible to use an on-stack in-core
   lockfile structure (as opposed to having to deliberately leak an
   on-heap one).  Many codepaths have been updated to take advantage
   of this new facility.

 * Calling cmd_foo() as if it is a general purpose helper function is
   a no-no.  Correct two instances of such to set an example.

 * We try to see if somebody runs our test suite with a shell that
   does not support "local" like bash/dash does.

 * An early part of piece-by-piece rewrite of "git bisect" in C.

 * GSoC to piece-by-piece rewrite "git submodule" in C.

 * Optimize the code to find shortest unique prefix of object names.

 * Pathspec-limited revision traversal was taught not to keep finding
   unneeded differences once it knows two trees are different inside
   given pathspec.

 * Conversion from uchar[20] to struct object_id continues.

 * Code cleanup.

 * A single-word "unsigned flags" in the diff options is being split
   into a structure with many bitfields.

 * TravisCI build updates.

 * Parts of a test to drive the long-running content filter interface
   has been split into its own module, hopefully to eventually become
   reusable.

 * Drop (perhaps overly cautious) sanity check before using the index
   read from the filesystem at runtime.

 * The build procedure has been taught to avoid some unnecessary
   instability in the build products.

 * A new mechanism to upgrade the wire protocol in place is proposed
   and demonstrated that it works with the older versions of Git
   without harming them.

 * An infrastructure to define what hash function is used in Git is
   introduced, and an effort to plumb that throughout various
   codepaths has been started.

 * The code to iterate over loose object files got optimized.

 * An internal function that was left for backward compatibility has
   been removed, as there is no remaining callers.

 * Historically, the diff machinery for rename detection had a
   hardcoded limit of 32k paths; this is being lifted to allow users
   trade cycles with a (possibly) easier to read result.

 * The tracing infrastructure has been optimized for cases where no
   tracing is requested.

 * In preparation for implementing narrow/partial clone, the object
   walking machinery has been taught a way to tell it to "filter" some
   objects from enumeration.

 * A few structures and variables that are implementation details of
   the decorate API have been renamed and then the API got documented
   better.

 * Assorted updates for TravisCI integration.
   (merge 4f26366679 sg/travis-fixes later to maint).

 * Introduce a helper to simplify code to parse a common pattern that
   expects either "--key" or "--key=<something>".

 * "git version --build-options" learned to report the host CPU and
   the exact commit object name the binary was built from.

Also contains various documentation updates and code clean-ups.


Fixes since v2.15
-----------------

 * "auto" as a value for the columnar output configuration ought to
   judge "is the output consumed by humans?" with the same criteria as
   "auto" for coloured output configuration, i.e. either the standard
   output stream is going to tty, or a pager is in use.  We forgot the
   latter, which has been fixed.

 * The experimental "color moved lines differently in diff output"
   feature was buggy around "ignore whitespace changes" edges, which
   has been corrected.

 * Instead of using custom line comparison and hashing functions to
   implement "moved lines" coloring in the diff output, use the pair
   of these functions from lower-layer xdiff/ code.

 * Some codepaths did not check for errors when asking what branch the
   HEAD points at, which have been fixed.

 * "git commit", after making a commit, did not check for errors when
   asking on what branch it made the commit, which has been corrected.

 * "git status --ignored -u" did not stop at a working tree of a
   separate project that is embedded in an ignored directory and
   listed files in that other project, instead of just showing the
   directory itself as ignored.

 * A broken access to object databases in recent update to "git grep
   --recurse-submodules" has been fixed.

 * A recent regression in "git rebase -i" that broke execution of git
   commands from subdirectories via "exec" instruction has been fixed.

 * A (possibly flakey) test fix.

 * "git check-ref-format --branch @{-1}" bit a "BUG()" when run
   outside a repository for obvious reasons; clarify the documentation
   and make sure we do not even try to expand the at-mark magic in
   such a case, but still call the validation logic for branch names.

 * "git fetch --recurse-submodules" now knows that submodules can be
   moved around in the superproject in addition to getting updated,
   and finds the ones that need to be fetched accordingly.

 * Command line completion (in contrib/) update.

 * Description of blame.{showroot,blankboundary,showemail,date}
   configuration variables have been added to "git config --help".

 * After an error from lstat(), diff_populate_filespec() function
   sometimes still went ahead and used invalid data in struct stat,
   which has been fixed.

 * UNC paths are also relevant in Cygwin builds and they are now
   tested just like Mingw builds.

 * Correct start-up sequence so that a repository could be placed
   immediately under the root directory again (which was broken at
   around Git 2.13).

 * The credential helper for libsecret (in contrib/) has been improved
   to allow possibly prompting the end user to unlock secrets that are
   currently locked (otherwise the secrets may not be loaded).

 * MinGW updates.

 * Error checking in "git imap-send" for empty response has been
   improved.

 * Recent update to the refs infrastructure implementation started
   rewriting packed-refs file more often than before; this has been
   optimized again for most trivial cases.

 * Some error messages did not quote filenames shown in it, which have
   been fixed.

 * "git rebase -i" recently started misbehaving when a submodule that
   is configured with 'submodule.<name>.ignore' is dirty; this has
   been corrected.

 * Building with NO_LIBPCRE1_JIT did not disable it, which has been fixed.

 * We used to add an empty alternate object database to the system
   that does not help anything; it has been corrected.

 * Doc update around use of "format-patch --subject-prefix" etc.

 * A fix for an ancient bug in "git apply --ignore-space-change" codepath.

 * Clarify and enhance documentation for "merge-base --fork-point", as
   it was clear what it computed but not why/what for.

 * A few scripts (both in production and tests) incorrectly redirected
   their error output.  These have been corrected.

 * "git notes" sent its error message to its standard output stream,
   which was corrected.

 * The three-way merge performed by "git cherry-pick" was confused
   when a new submodule was added in the meantime, which has been
   fixed (or "papered over").

 * The sequencer machinery (used by "git cherry-pick A..B", and "git
   rebase -i", among other things) would have lost a commit if stopped
   due to an unlockable index file, which has been fixed.

 * "git apply --inaccurate-eof" when used with "--ignore-space-change"
   triggered an internal sanity check, which has been fixed.

 * Command line completion (in contrib/) has been taught about the
   "--copy" option of "git branch".

 * When "git rebase" prepared a mailbox of changes and fed it to "git
   am" to replay them, it was confused when a stray "From " happened
   to be in the log message of one of the replayed changes.  This has
   been corrected.

 * There was a recent semantic mismerge in the codepath to write out a
   section of a configuration section, which has been corrected.

 * Mentions of "git-rebase" and "git-am" (dashed form) still remained
   in end-user visible strings emitted by the "git rebase" command;
   they have been corrected.

 * Contrary to the documentation, "git pull -4/-6 other-args" did not
   ask the underlying "git fetch" to go over IPv4/IPv6, which has been
   corrected.

 * "git checkout --recursive" may overwrite and rewind the history of
   the branch that happens to be checked out in submodule
   repositories, which might not be desirable.  Detach the HEAD but
   still allow the recursive checkout to succeed in such a case.
   (merge 57f22bf997 sb/submodule-recursive-checkout-detach-head later to maint).

 * "git branch --set-upstream" has been deprecated and (sort of)
   removed, as "--set-upstream-to" is the preferred one these days.
   The documentation still had "--set-upstream" listed on its
   synopsis section, which has been corrected.
   (merge a060f3d3d8 tz/branch-doc-remove-set-upstream later to maint).

 * Internally we use 0{40} as a placeholder object name to signal the
   codepath that there is no such object (e.g. the fast-forward check
   while "git fetch" stores a new remote-tracking ref says "we know
   there is no 'old' thing pointed at by the ref, as we are creating
   it anew" by passing 0{40} for the 'old' side), and expect that a
   codepath to locate an in-core object to return NULL as a sign that
   the object does not exist.  A look-up for an object that does not
   exist however is quite costly with a repository with large number
   of packfiles.  This access pattern has been optimized.
   (merge 87b5e236a1 jk/fewer-pack-rescan later to maint).

 * In addition to "git stash -m message", the command learned to
   accept "git stash -mmessage" form.
   (merge 5675473fcb ph/stash-save-m-option-fix later to maint).

 * @{-N} in "git checkout @{-N}" may refer to a detached HEAD state,
   but the documentation was not clear about it, which has been fixed.
   (merge 75ce149575 ks/doc-checkout-previous later to maint).

 * A regression in the progress eye-candy was fixed.
   (merge 9c5951cacf jk/progress-delay-fix later to maint).

 * The code internal to the recursive merge strategy was not fully
   prepared to see a path that is renamed to try overwriting another
   path that is only different in case on case insensitive systems.
   This does not matter in the current code, but will start to matter
   once the rename detection logic starts taking hints from nearby
   paths moving to some directory and moves a new path along with them.
   (merge 4cba2b0108 en/merge-recursive-icase-removal later to maint).

 * An v2.12-era regression in pathspec match logic, which made it look
   into submodule tree even when it is not desired, has been fixed.
   (merge eef3df5a93 bw/pathspec-match-submodule-boundary later to maint).

 * Amending commits in git-gui broke the author name that is non-ascii
   due to incorrect enconding conversion.

 * Recent update to the submodule configuration code broke "diff-tree"
   by accidentally stopping to read from the index upfront.
   (merge fd66bcc31f bw/submodule-config-cleanup later to maint).

 * Git shows a message to tell the user that it is waiting for the
   user to finish editing when spawning an editor, in case the editor
   opens to a hidden window or somewhere obscure and the user gets
   lost.
   (merge abfb04d0c7 ls/editor-waiting-message later to maint).

 * The "safe crlf" check incorrectly triggered for contents that does
   not use CRLF as line endings, which has been corrected.
   (merge 649f1f0948 tb/check-crlf-for-safe-crlf later to maint).

 * "git clone --shared" to borrow from a (secondary) worktree did not
   work, even though "git clone --local" did.  Both are now accepted.
   (merge b3b05971c1 es/clone-shared-worktree later to maint).

 * The build procedure now allows not just the repositories but also
   the refs to be used to take pre-formatted manpages and html
   documents to install.
   (merge 65289e9dcd rb/quick-install-doc later to maint).

 * Update the shell prompt script (in contrib/) to strip trailing CR
   from strings read from various "state" files.
   (merge 041fe8fc83 ra/prompt-eread-fix later to maint).

 * "git merge -s recursive" did not correctly abort when the index is
   dirty, if the merged tree happened to be the same as the current
   HEAD, which has been fixed.

 * Bytes with high-bit set were encoded incorrectly and made
   credential helper fail.
   (merge 4c267f2ae3 jd/fix-strbuf-add-urlencode-bytes later to maint).

 * "git rebase -p -X<option>" did not propagate the option properly
   down to underlying merge strategy backend.
   (merge dd6fb0053c js/fix-merge-arg-quoting-in-rebase-p later to maint).

 * "git merge -s recursive" did not correctly abort when the index is
   dirty, if the merged tree happened to be the same as the current
   HEAD, which has been fixed.
   (merge f309e8e768 ew/empty-merge-with-dirty-index-maint later to maint).

 * Other minor doc, test and build updates and code cleanups.
   (merge 1a1fc2d5b5 rd/man-prune-progress later to maint).
   (merge 0ba014035a rd/man-reflog-add-n later to maint).
   (merge e54b63359f rd/doc-notes-prune-fix later to maint).
   (merge ff4c9b413a sp/doc-info-attributes later to maint).
   (merge 7db2cbf4f1 jc/receive-pack-hook-doc later to maint).
   (merge 5a0526264b tg/t-readme-updates later to maint).
   (merge 5e83cca0b8 jk/no-optional-locks later to maint).
   (merge 826c778f7c js/hashmap-update-sample later to maint).
   (merge 176b2d328c sg/setup-doc-update later to maint).
   (merge 1b09073514 rs/am-builtin-leakfix later to maint).
   (merge addcf6cfde rs/fmt-merge-msg-string-leak-fix later to maint).
   (merge c3ff8f6c14 rs/strbuf-read-once-reset-length later to maint).
   (merge 6b0eb884f9 db/doc-workflows-neuter-the-maintainer later to maint).
   (merge 8c87bdfb21 jk/cvsimport-quoting later to maint).
   (merge 176cb979fe rs/fmt-merge-msg-leakfix later to maint).
   (merge 5a03360e73 tb/delimit-pretty-trailers-args-with-comma later to maint).
   (merge d0e6326026 ot/pretty later to maint).
   (merge 44103f4197 sb/test-helper-excludes later to maint).
   (merge 170078693f jt/transport-no-more-rsync later to maint).
   (merge c07b3adff1 bw/path-doc later to maint).
   (merge bf9d7df950 tz/lib-git-svn-svnserve-tests later to maint).
   (merge dec366c9a8 sr/http-sslverify-config-doc later to maint).
   (merge 3f824e91c8 jk/test-suite-tracing later to maint).
   (merge 1feb061701 db/doc-config-section-names-with-bs later to maint).
   (merge 74dea0e13c jh/memihash-opt later to maint).
   (merge 2e9fdc795c ma/bisect-leakfix later to maint).

----------------------------------------------------------------

Changes since v2.15.0 are as follows:

Adam Dinwoodie (3):
      t5580: add Cygwin support
      rebase -i: fix comment typo
      doc/SubmittingPatches: correct subject guidance

Albert Astals Cid (1):
      completion: add --autostash and --no-autostash to pull

Alex Vandiver (7):
      fsmonitor: read entirety of watchman output
      fsmonitor: set the PWD to the top of the working tree
      fsmonitor: don't bother pretty-printing JSON from watchman
      fsmonitor: document GIT_TRACE_FSMONITOR
      fsmonitor: delay updating state until after split index is merged
      fsmonitor: read from getcwd(), not the PWD environment variable
      fsmonitor: store fsmonitor bitmap before splitting index

Alexander Shopov (2):
      l10n: bg.po: Updated Bulgarian translation (3284t)
      l10n: bg.po: Updated Bulgarian translation (3288t)

Anders Kaseorg (1):
      git-gui: sort entries in optimized tclIndex

Andrey Okoshkin (3):
      commit: check result of resolve_ref_unsafe
      diff: fix lstat() error handling in diff_populate_filespec()
      merge-recursive: check GIT_MERGE_VERBOSITY only once

Ann T Ropea (7):
      Documentation: revisions: fix typo: "three dot" ---> "three-dot" (in line with "two-dot").
      Documentation: user-manual: limit usage of ellipsis
      print_sha1_ellipsis: introduce helper
      checkout: describe_detached_head: remove ellipsis after committish
      t4013: prepare for upcoming "diff --raw --abbrev" output format change
      diff: diff_aligned_abbrev: remove ellipsis after abbreviated SHA-1 value
      t4013: test new output from diff --abbrev --raw

Antoine Beaupré (6):
      remote-mediawiki: limit filenames to legal
      remote-mediawiki: show known namespace choices on failure
      remote-mediawiki: skip virtual namespaces
      remote-mediawiki: support fetching from (Main) namespace
      remote-mediawiki: process namespaces in order
      remote-mediawiki: show progress while fetching namespaces

Beat Bolli (2):
      contrib/git-jump: allow to configure the grep command
      t3900: add some more quotes

Ben Peart (16):
      bswap: add 64 bit endianness helper get_be64
      preload-index: add override to enable testing preload-index
      update-index: add a new --force-write-index option
      fsmonitor: teach git to optionally utilize a file system monitor to speed up detecting new or changed files.
      fsmonitor: add documentation for the fsmonitor extension.
      ls-files: Add support in ls-files to display the fsmonitor valid bit
      update-index: add fsmonitor support to update-index
      fsmonitor: add a test tool to dump the index extension
      split-index: disable the fsmonitor extension when running the split index test
      fsmonitor: add test cases for fsmonitor extension
      fsmonitor: add a sample integration script for Watchman
      fsmonitor: add a performance test
      fsmonitor: MINGW support for watchman integration
      fsmonitor: preserve utf8 filenames in fsmonitor-watchman log
      read_index_from(): speed index loading by skipping verification of the entry order
      fsmonitor: simplify determining the git worktree under Windows

Brandon Williams (24):
      pkt-line: add packet_write function
      protocol: introduce protocol extension mechanisms
      daemon: recognize hidden request arguments
      upload-pack, receive-pack: introduce protocol version 1
      connect: teach client to recognize v1 server response
      connect: tell server that the client understands v1
      http: tell server that the client understands v1
      i5700: add interop test for protocol transition
      ssh: introduce a 'simple' ssh variant
      add, reset: use DIFF_OPT_SET macro to set a diff flag
      diff: convert flags to be stored in bitfields
      diff: add flag to indicate textconv was set via cmdline
      diff: remove touched flags
      diff: remove DIFF_OPT_TST macro
      diff: remove DIFF_OPT_SET macro
      diff: remove DIFF_OPT_CLR macro
      diff: make struct diff_flags members lowercase
      wt-status: actually ignore submodules when requested
      pathspec: only match across submodule boundaries when requested
      diff-tree: read the index so attribute checks work in bare repositories
      submodule: convert stage_updated_gitmodules to take a struct index_state
      submodule: used correct index in is_staging_gitmodules_ok
      submodule: convert get_next_submodule to not rely on the_index
      path: document path functions

Carlos Martín Nieto (1):
      diff: --indent-heuristic is no longer experimental

Changwoo Ryu (2):
      l10n: ko.po: Update Korean translation
      l10n: TEAMS: Add ko team members

Charles Bailey (2):
      t4201: make use of abbreviation in the test more robust
      grep: fix NO_LIBPCRE1_JIT to fully disable JIT

Christian Couder (24):
      perf/run: add '--config' option to the 'run' script
      perf/run: add get_var_from_env_or_config()
      perf/run: add GIT_PERF_DIRS_OR_REVS
      perf/run: add calls to get_var_from_env_or_config()
      perf/run: add get_subsections()
      perf/run: update get_var_from_env_or_config() for subsections
      perf/run: add run_subsection()
      perf/run: show name of rev being built
      perf: store subsection results in "test-results/$GIT_PERF_SUBSECTION/"
      t0021/rot13-filter: fix list comparison
      t0021/rot13-filter: refactor packet reading functions
      t0021/rot13-filter: improve 'if .. elsif .. else' style
      t0021/rot13-filter: improve error message
      t0021/rot13-filter: add packet_initialize()
      t0021/rot13-filter: refactor checking final lf
      t0021/rot13-filter: add capability functions
      Git/Packet.pm: extract parts of t0021/rot13-filter.pl for reuse
      Git/Packet: clarify that packet_required_key_val_read allows EOF
      Git/Packet.pm: use 'if' instead of 'unless'
      list-objects-filter-options: fix 'keword' typo in comment
      git-compat-util: introduce skip_to_optional_arg()
      index-pack: use skip_to_optional_arg()
      diff: use skip_to_optional_arg()
      diff: use skip_to_optional_arg_default()

Christopher Díaz Riveros (3):
      l10n: Update Spanish translation
      l10n: es.po: Update Spanish Translation v2.16.0
      l10n: es.po: Spanish translation 2.16.0 round 2

Damien Marié (1):
      run-command: add hint when a hook is ignored

Daniel Bensoussan (1):
      doc: reword gitworkflows.txt for neutrality

Dave Borowitz (1):
      config.txt: document behavior of backslashes in subsections

Dennis Kaarsemaker (1):
      credential-libsecret: unlock locked secrets

Derrick Stolee (5):
      p4211-line-log.sh: add log --online --raw --parents perf test
      sha1_name: unroll len loop in find_unique_abbrev_r()
      sha1_name: parse less while finding common prefix
      sha1_name: minimize OID comparisons during disambiguation
      sha1_file: use strbuf_add() instead of strbuf_addf()

Dimitriy Ryazantcev (1):
      l10n: ru.po: update Russian translation

Elijah Newren (10):
      sequencer: warn when internal merge may be suboptimal due to renameLimit
      merge-recursive: handle addition of submodule on our side of history
      progress: fix progress meters when dealing with lots of work
      diff: remove silent clamp of renameLimit
      sequencer: show rename progress during cherry picks
      merge-recursive: ignore_case shouldn't reject intentional removals
      strbuf: remove unused stripspace function alias
      t6044: recursive can silently incorporate dirty changes in a merge
      move index_has_changes() from builtin/am.c to merge.c for reuse
      merge-recursive: avoid incorporating uncommitted changes in a merge

Emily Xie (1):
      pathspec: die on empty strings as pathspec

Eric Sunshine (3):
      worktree: invoke post-checkout hook (unless --no-checkout)
      clone: support 'clone --shared' from a worktree
      version --build-options: also report host CPU

Eric Wong (2):
      rebase: use mboxrd format to avoid split errors
      git-svn: convert CRLF to LF in commit message to SVN

Fangyi Zhou (1):
      l10n: zh_CN translate parameter name

Florian Klink (1):
      git-send-email: honor $PATH for sendmail binary

Gennady Kupava (2):
      trace: remove trace key normalization
      trace: improve performance while category is disabled

Guillaume Castagnino (1):
      gitweb: use filetest to allow ACLs

Haaris Mehmood (1):
      config: add --expiry-date

Hans Jerry Illikainen (2):
      merge: add config option for verifySignatures
      t: add tests for pull --verify-signatures

Heiko Voigt (3):
      fetch: add test to make sure we stay backwards compatible
      implement fetching of moved submodules
      submodule: simplify decision tree whether to or not to fetch

Ingo Ruhnke (1):
      remote-mediawiki: allow fetching namespaces with spaces

J Wyman (1):
      for-each-ref: let upstream/push report the remote ref name

Jacob Keller (2):
      sequencer: pass absolute GIT_DIR to exec commands
      diff: add tests for --relative without optional prefix value

Jakub Bereżański (2):
      t0302: check helper can handle empty credentials
      wincred: handle empty username/password correctly

Jameson Miller (4):
      status: add option to show ignored files differently
      status: report matching ignored and normal untracked
      status: document options to show matching ignored files
      status: test ignored modes

Jean Carlo Machado (1):
      fix typos in 2.15.0 release notes

Jean-Noel Avila (3):
      submodule--helper.c: i18n: add a missing space in message
      l10n: fr.po v2.16.0 round 1
      l10n: fr.po 2.16 round 2

Jeff Hostetler (9):
      dir: allow exclusions from blob in addition to file
      oidmap: add oidmap iterator methods
      oidset: add iterator methods to oidset
      list-objects: filter objects in traverse_commit_list
      rev-list: add list-objects filtering support
      pack-objects: add list-objects filtering
      list-objects-filter-options: support --no-filter
      rev-list: support --no-filter argument
      partial-clone: design doc

Jeff King (27):
      revision: quit pruning diff more quickly when possible
      t4015: refactor --color-moved whitespace test
      t4015: check "negative" case for "-w --color-moved"
      t4015: test the output of "diff --color-moved -b"
      diff: fix whitespace-skipping with --color-moved
      diff: handle NULs in get_string_hash()
      test-ref-store: avoid passing NULL to printf
      remote: handle broken symrefs
      log: handle broken HEAD in decoration check
      worktree: handle broken symrefs in find_shared_symref()
      setup: avoid double slashes when looking for HEAD
      link_alt_odb_entries: make empty input a noop
      git-jump: give contact instructions in the README
      p5550: factor out nonsense-pack creation
      t/perf/lib-pack: use fast-import checkpoint to create packs
      p5551: add a script to test fetch pack-dir rescans
      everything_local: use "quick" object existence check
      sha1_file: fast-path null sha1 as a missing object
      git-status.txt: mention --no-optional-locks
      progress: set default delay threshold to 100%, not 0%
      docs/pretty-formats: mention commas in %(trailers) syntax
      cvsimport: apply shell-quoting regex globally
      test-lib: silence "-x" cleanup under bash
      t5615: avoid re-using descriptor 4
      test-lib: make "-x" work with "--verbose-log"
      t/Makefile: introduce TEST_SHELL_PATH
      docs/diff-options: clarify scope of diff-filter types

Jiang Xin (4):
      l10n: git.pot: v2.16.0 round 1 (64 new, 25 removed)
      l10n: git.pot: v2.16.0 round 2 (8 new, 4 removed)
      l10n: zh_CN: for git v2.16.0 l10n round 2
      l10n: TEAMS: add zh_CN team members

Johannes Schindelin (22):
      for-each-ref: let upstream/push optionally report the remote name
      status: do not get confused by submodules in excluded directories
      mingw: include the full version information in the resources
      mingw: add experimental feature to redirect standard handles
      mingw: optionally redirect stderr/stdout via the same handle
      mingw: document the standard handle redirection
      for-each-ref: test :remotename and :remoteref
      hashmap: adjust documentation to reflect reality
      version --build-options: report commit, too, if possible
      rebase: do not continue when the todo list generation failed
      sequencer: strip bogus LF at end of error messages
      sequencer: remove superfluous conditional
      sequencer: report when noop has an argument
      sequencer: do not invent whitespace when transforming OIDs
      Allow the test suite to pass in a directory whose name contains spaces
      t0302 & t3900: add forgotten quotes
      rebase -p: fix quoting when calling `git merge`
      git gui: fix staging a second line to a 1-line file
      git-gui: avoid exception upon Ctrl+T in an empty list
      git-gui: fix exception when trying to stage with empty file list
      git-gui: allow Ctrl+T to toggle multiple paths
      mingw: handle GITPERLLIB in t0021 in a Windows-compatible way

Jonathan Nieder (10):
      ssh test: make copy_ssh_wrapper_as clean up after itself
      connect: move no_fork fallback to git_tcp_connect
      connect: split git:// setup into a separate function
      connect: split ssh command line options into separate function
      connect: split ssh option computation to its own function
      ssh: 'auto' variant to select between 'ssh' and 'simple'
      ssh: 'simple' variant does not support -4/-6
      ssh: 'simple' variant does not support --port
      connect: correct style of C-style comment
      generate-cmdlist: avoid non-deterministic output

Jonathan Tan (10):
      connect: in ref advertisement, shallows are last
      Documentation: document Extra Parameters
      Tests: clean up and document submodule helpers
      Tests: clean up submodule recursive helpers
      diff: support anchoring line(s)
      diffcore-rename: make diff-tree -l0 mean -l<large>
      decorate: clean up and document API
      transport: remove unused "push" in vtable
      clone, fetch: remove redundant transport check
      transport: make transport vtable more private

Jordi Mas (1):
      l10n: Fixes to Catalan translation

Julien Dusser (1):
      strbuf: fix urlencode format string on signed char

Junio C Hamano (42):
      t0027: do not use an empty string as a pathspec element
      describe: do not use cmd_*() as a subroutine
      merge-ours: do not use cmd_*() as a subroutine
      branch: streamline "attr_only" handling in validate_new_branchname()
      branch: split validate_new_branchname() into two
      t5601: rm the target file of cp that could still be executing
      check-ref-format --branch: do not expand @{...} outside repository
      check-ref-format --branch: strip refs/heads/ using skip_prefix
      check-ref-format doc: --branch validates and expands <branch>
      column: do not include pager.c
      xdiff: reassign xpparm_t.flags bits
      The first batch for 2.16
      RelNotes: the second batch post 2.15 comes
      diff: --ignore-cr-at-eol
      merge-base --fork-point doc: clarify the example and failure modes
      RelNotes: the third batch for 2.16
      branch: correctly reject refs/heads/{-dash,HEAD}
      Start preparation for 2.15.1
      RelNotes: the fourth batch for 2.16
      Almost ready for 2.15.1
      RelNotes: the fifth batch for 2.16
      hooks doc: clarify when receive-pack invokes its hooks
      A bit more fixes for 2.15.1
      RelNotes: the sixth batch for 2.16
      Git 2.15.1
      RelNotes: the seventh batch
      t2020: test variations that matter
      Prepare for 2.15.2
      RelNotes: the eighth batch
      diff: use skip_to_optional_arg_default() in parsing --relative
      t4045: reindent to make helpers readable
      RelNotes: the ninth batch
      RelNotes: the tenth batch
      t5573, t7612: clean up after unexpected success of 'pull' and 'merge'
      sequencer.c: drop 'const' from function return type
      RelNotes: the eleventh batch
      Git 2.16-rc0
      Git 2.16-rc1
      merge-recursive: do not look at the index during recursive merge
      RelNotes update before -rc2
      Git 2.16-rc2
      Git 2.16

Kaartic Sivaraam (12):
      mailmap: use Kaartic Sivaraam's new address
      builtin/branch: remove redundant check for HEAD
      git-rebase: clean up dashed-usages in messages
      Doc/checkout: checking out using @{-N} can lead to detached state
      branch: improve documentation and naming of create_branch() parameters
      branch: group related arguments of create_branch()
      branch: update warning message shown when copying a misnamed branch
      builtin/branch: strip refs/heads/ using skip_prefix
      Doc/check-ref-format: clarify information about @{-N} syntax
      rebase: consistently use branch_name variable
      rebase: distinguish user input by quoting it
      rebase: rebasing can also be done when HEAD is detached

Kevin (1):
      remote-mediawiki: add namespace support

Kevin Daudt (1):
      column: show auto columns when pager is active

Lars Schneider (3):
      refactor "dumb" terminal determination
      progress: drop delay-threshold code
      launch_editor(): indicate that Git waits for user input

Liam Beguin (9):
      Documentation: move rebase.* configs to new file
      Documentation: use preferred name for the 'todo list' script
      rebase -i: set commit to null in exec commands
      rebase -i: refactor transform_todo_ids
      rebase -i: replace reference to sha1 with oid
      rebase -i: update functions to use a flags parameter
      rebase -i -x: add exec commands via the rebase--helper
      rebase -i: learn to abbreviate command names
      t3404: add test case for abbreviated commands

Louis Bettens (1):
      l10n: fr.po: "worktree list" mistranslated as prune

Luke Diamand (1):
      git-p4: update multiple shelved change lists

Marius Paliga (1):
      builtin/push.c: add push.pushOption config

Martin Ågren (22):
      sha1_file: do not leak `lock_file`
      treewide: prefer lockfiles on the stack
      lockfile: fix documentation on `close_lock_file_gently()`
      tempfile: fix documentation on `delete_tempfile()`
      checkout-index: simplify locking logic
      cache-tree: simplify locking logic
      apply: move lockfile into `apply_state`
      apply: remove `newfd` from `struct apply_state`
      cache.h: document `write_locked_index()`
      read-cache: drop explicit `CLOSE_LOCK`-flag
      read-cache: leave lock in right state in `write_locked_index()`
      read_cache: roll back lock in `update_index_if_able()`
      grep: take the read-lock when adding a submodule
      bisect: change calling-convention of `find_bisection()`
      bisect: fix memory leak in `find_bisection()`
      bisect: fix off-by-one error in `best_bisection_sorted()`
      bisect: fix memory leak when returning best element
      builtin/merge-base: free commit lists
      reduce_heads: fix memory leaks
      t7006: add tests for how git branch paginates
      branch: respect `pager.branch` in list-mode only
      branch: change default of `pager.branch` to "on"

Michael Haggerty (12):
      t1409: check that `packed-refs` is not rewritten unnecessarily
      files-backend: don't rewrite the `packed-refs` file unnecessarily
      t0000: check whether the shell supports the "local" keyword
      files_transaction_prepare(): don't leak flags to packed transaction
      prune_ref(): call `ref_transaction_add_update()` directly
      ref_transaction_update(): die on disallowed flags
      ref_transaction_add_update(): remove a check
      refs: tidy up and adjust visibility of the `ref_update` flags
      refs: rename constant `REF_NODEREF` to `REF_NO_DEREF`
      refs: rename constant `REF_ISPRUNING` to `REF_IS_PRUNING`
      write_packed_entry(): take `object_id` arguments
      refs: update some more docs to use "oid" rather than "sha1"

Nicolas Morey-Chaisemartin (1):
      imap-send: URI encode server folder

Olga Telezhnaya (2):
      format: create pretty.h file
      format: create docs for pretty.h

Peter Krefting (2):
      l10n: sv.po: Update Swedish translation (3284t0f0u)
      l10n: sv.po: Update Swedish translation (3288t0f0u)

Phil Hord (2):
      doc: prefer 'stash push' over 'stash save'
      stash: learn to parse -m/--message like commit does

Phillip Wood (2):
      config: avoid "write_in_full(fd, buf, len) != len" pattern
      sequencer: reschedule pick if index can't be locked

Pranit Bauva (6):
      bisect--helper: use OPT_CMDMODE instead of OPT_BOOL
      bisect--helper: rewrite `check_term_format` shell function in C
      bisect--helper: `write_terms` shell function in C
      bisect--helper: `bisect_clean_state` shell function in C
      t6030: explicitly test for bisection cleanup
      bisect--helper: `is_expected_rev` & `check_expected_revs` shell function in C

Prathamesh Chavan (3):
      submodule--helper: introduce get_submodule_displaypath()
      submodule--helper: introduce for_each_listed_submodule()
      submodule: port submodule subcommand 'status' from shell to C

Rafael Ascensão (1):
      log: add option to choose which refs to decorate

Ralf Thielow (3):
      Documentation/git-worktree.txt: add missing `
      l10n: de.po: improve messages when a branch starts to track another ref
      l10n: de.po: translate 72 new messages

Ramsay Jones (1):
      repository: fix a sparse 'using integer as NULL pointer' warning

Randall S. Becker (1):
      install-doc-quick: allow specifying what ref to install

Rasmus Villemoes (2):
      Documentation/config: add sendemail.tocmd to list preceding "See git-send-email(1)"
      completion: add git config sendemail.tocmd

René Scharfe (23):
      notes: move hex_to_bytes() to hex.c and export it
      http-push: use hex_to_bytes()
      sha1_file: use hex_to_bytes()
      sequencer: factor out rewrite_file()
      sequencer: use O_TRUNC to truncate files
      imap-send: handle NULL return of next_arg()
      imap-send: handle missing response codes gracefully
      apply: avoid out-of-bounds access in fuzzy_matchlines()
      apply: update line lengths for --inaccurate-eof
      config: flip return value of write_section()
      t4051: add test for comments preceding function lines
      xdiff: factor out is_func_rec()
      xdiff: show non-empty lines before functions with -W
      t7810: improve check of -W with user-defined function lines
      grep: update boundary variable for pre-context
      grep: show non-empty lines before functions with -W
      am: release strbuf after use in split_mail_mbox()
      fmt-merge-msg: avoid leaking strbuf in shortlog()
      strbuf: release memory on read error in strbuf_read_once()
      transport-helper: plug strbuf and string_list leaks
      p7519: improve check for prerequisite WATCHMAN
      http: use internal argv_array of struct child_process
      send-pack: use internal argv_array of struct child_process

Robert Abel (3):
      l10n: fixes to German translation
      git-prompt: make __git_eread intended use explicit
      git-prompt: fix reading files with windows line endings

Robert P. J. Day (4):
      bisect: mention "view" as an alternative to "visualize"
      doc: add missing "-n" (dry-run) option to reflog man page
      prune: add "--progress" to man page and usage msg
      notes: correct 'git notes prune' options to '[-n] [-v]'

SZEDER Gábor (17):
      travis-ci: fix running P4 and Git LFS tests in Linux build jobs
      travis-ci: don't build Git for the static analysis job
      setup.c: fix comment about order of .git directory discovery
      travis-ci: introduce a $jobname variable for 'ci/*' scripts
      travis-ci: move setting environment variables to 'ci/lib-travisci.sh'
      travis-ci: set GIT_TEST_HTTPD in 'ci/lib-travisci.sh'
      travis-ci: use 'set -x' in 'ci/*' scripts for extra tracing output
      travis-ci: fine tune the use of 'set -x' in 'ci/*' scripts
      travis-ci: don't install default addon packages for the 32 bit Linux build
      travis-ci: save prove state for the 32 bit Linux build
      travis-ci: only print test failures if there are test results available
      travis-ci: print the "tip of branch is exactly at tag" message in color
      travis-ci: create the cache directory early in the build process
      travis-ci: record and skip successfully built trees
      travis-ci: don't store P4 and Git LFS in the working tree
      travis-ci: check that all build artifacts are .gitignore-d
      RelNotes: minor typofix

Shuyu Wei (1):
      pull: pass -4/-6 option to 'git fetch'

Simon Ruderich (3):
      sequencer.c: check return value of close() in rewrite_file()
      wrapper.c: consistently quote filenames in error messages
      config: document default value of http.sslVerify

Stefan Beller (16):
      recursive submodules: detach HEAD from new state
      Documentation/checkout: clarify submodule HEADs to be detached
      xdiff-interface: export comparing and hashing strings
      diff.c: get rid of duplicate implementation
      t6120: fix typo in test name
      list-objects.c: factor out traverse_trees_and_blobs
      config: document blame configuration
      t/3512: demonstrate unrelated submodule/file conflict as cherry-pick failure
      revision.h: introduce blob/tree walking in order of the commits
      builtin/describe.c: rename `oid` to avoid variable shadowing
      builtin/describe.c: print debug statements earlier
      builtin/describe.c: factor out describe_commit
      Documentation/git-clone: improve description for submodule recursing
      t/helper: ignore everything but sources
      builtin/describe.c: describe a blob
      t/helper/test-lazy-name-hash: fix compilation

Steffen Prohaska (1):
      doc: Mention info/attributes in gitrepository-layout

Stephan Beyer (1):
      bisect run: die if no command is given

Thomas Braun (1):
      completion: add remaining flags to checkout

Thomas Gummerer (12):
      stash: replace "git stash save" with "git stash push" in the documentation
      stash: mark "git stash save" deprecated in the man page
      stash: remove now superfluos help for "stash push"
      checkout: factor out functions to new lib file
      worktree: add can be created from any commit-ish
      worktree: add --[no-]track option to the add subcommand
      worktree: make add <path> <branch> dwim
      t/README: remove mention of adding copyright notices
      t/README: document test_cmp_rev
      worktree: add --guess-remote flag to add subcommand
      add worktree.guessRemote config option
      oidset: don't return value from oidset_init

Todd Zullinger (13):
      Replace Free Software Foundation address in license notices
      Replace Free Software Foundation address in license notices
      t/lib-gpg: fix gpgconf stderr redirect to /dev/null
      rebase: fix stderr redirect in apply_autostash()
      notes: send "Automatic notes merge failed" messages to stderr
      branch doc: remove --set-upstream from synopsis
      completion: add '--copy' option to 'git branch'
      RelNotes: minor typo fixes in 2.15.1 draft
      t/lib-git-svn: cleanup inconsistent tab/space usage
      t/lib-git-svn.sh: improve svnserve tests with parallel make test
      RelNotes: minor typo fixes in 2.16.0 draft
      doc/SubmittingPatches: improve text formatting
      http: fix v1 protocol tests with apache httpd < 2.4

Torsten Bögershausen (4):
      add: introduce "--renormalize"
      convert: tighten the safe autocrlf handling
      t0027: Adapt the new MIX tests to Windows
      check-non-portable-shell.pl: `wc -l` may have leading WS

Trần Ngọc Quân (1):
      l10n: vi.po(3288t): Updated Vietnamese translation for v2.16.0 round 2

W. Trevor King (1):
      pull: pass --signoff/--no-signoff to "git merge"

Wei Shuyu (1):
      http: support CURLPROXY_HTTPS

Zhou Fangyi (1):
      l10n: zh_CN Fix typo

brian m. carlson (31):
      walker: convert to struct object_id
      refs/files-backend: convert struct ref_to_prune to object_id
      refs: convert delete_ref and refs_delete_ref to struct object_id
      refs: convert update_ref and refs_update_ref to use struct object_id
      refs: prevent accidental NULL dereference in write_pseudoref
      refs: update ref transactions to use struct object_id
      Convert check_connected to use struct object_id
      refs: convert resolve_refdup and refs_resolve_refdup to struct object_id
      refs: convert read_ref and read_ref_full to object_id
      refs: convert dwim_ref and expand_ref to struct object_id
      builtin/reflog: convert remaining unsigned char uses to object_id
      refs: convert dwim_log to struct object_id
      pack-bitmap: convert traverse_bitmap_commit_list to object_id
      builtin/pack-objects: convert to struct object_id
      refs: convert peel_ref to struct object_id
      refs: convert read_ref_at to struct object_id
      refs: convert reflog_expire parameter to struct object_id
      sha1_file: convert index_path and index_fd to struct object_id
      Convert remaining callers of resolve_gitlink_ref to object_id
      refs: convert resolve_gitlink_ref to struct object_id
      worktree: convert struct worktree to object_id
      refs: convert resolve_ref_unsafe to struct object_id
      refs: convert peel_object to struct object_id
      refs: convert read_raw_ref backends to struct object_id
      refs/files-backend: convert static functions to object_id
      Documentation: enable compat-mode for Asciidoctor
      setup: expose enumerated repo info
      Add structure representing hash algorithm
      Integrate hash algorithm support with repo setup
      Switch empty tree and blob lookups to use hash abstraction
      Documentation: convert SubmittingPatches to AsciiDoc

Ævar Arnfjörð Bjarmason (4):
      test-lib: add LIBPCRE1 & LIBPCRE2 prerequisites
      grep: fix segfault under -P + PCRE2 <=10.30 + (*NO_JIT)
      Makefile: NO_OPENSSL=1 should no longer imply BLK_SHA1=1
      bisect: fix a regression causing a segfault

Łukasz Stelmach (1):
      git-gui: prevent double UTF-8 conversion


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.16.0-rc1
@ 2018-01-05 23:30  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2018-01-05 23:30 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

A release candidate Git v2.16.0-rc1 is now available for testing
at the usual places.  It is comprised of 455 non-merge commits
since v2.15.0, contributed by 79 people, 23 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.16.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.15.0 are as follows.
Welcome to the Git development community!

  Albert Astals Cid, Antoine Beaupré, Damien Marié, Daniel
  Bensoussan, Florian Klink, Gennady Kupava, Guillaume Castagnino,
  Haaris Mehmood, Hans Jerry Illikainen, Ingo Ruhnke, Jakub
  Bereżański, Jean Carlo Machado, Julien Dusser, J Wyman,
  Kevin, Łukasz Stelmach, Marius Paliga, Olga Telezhnaya,
  Rafael Ascensão, Robert Abel, Robert P. J. Day, Shuyu Wei,
  and Wei Shuyu.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alex Vandiver,
  Anders Kaseorg, Andrey Okoshkin, Ann T Ropea, Beat Bolli,
  Ben Peart, Brandon Williams, brian m. carlson, Carlos Martín
  Nieto, Charles Bailey, Christian Couder, Dave Borowitz, Dennis
  Kaarsemaker, Derrick Stolee, Elijah Newren, Emily Xie, Eric
  Sunshine, Eric Wong, Heiko Voigt, Jacob Keller, Jameson Miller,
  Jean-Noel Avila, Jeff Hostetler, Jeff King, Johannes Schindelin,
  Jonathan Nieder, Jonathan Tan, Junio C Hamano, Kaartic Sivaraam,
  Kevin Daudt, Lars Schneider, Liam Beguin, Luke Diamand, Martin
  Ågren, Michael Haggerty, Nicolas Morey-Chaisemartin, Phil
  Hord, Phillip Wood, Pranit Bauva, Prathamesh Chavan, Ramsay
  Jones, Randall S. Becker, Rasmus Villemoes, René Scharfe,
  Simon Ruderich, Stefan Beller, Steffen Prohaska, Stephan Beyer,
  SZEDER Gábor, Thomas Braun, Thomas Gummerer, Todd Zullinger,
  Torsten Bögershausen, and W. Trevor King.

----------------------------------------------------------------

Git 2.16 Release Notes (draft)
==============================

Backward compatibility notes and other notable changes.

 * Use of an empty string as a pathspec element that is used for
   'everything matches' is now an error.


Updates since v2.15
-------------------

UI, Workflows & Features

 * An empty string as a pathspec element that means "everything"
   i.e. 'git add ""', is now illegal.  We started this by first
   deprecating and warning a pathspec that has such an element in
   2.11 (Nov 2016).

 * A hook script that is set unexecutable is simply ignored.  Git
   notifies when such a file is ignored, unless the message is
   squelched via advice.ignoredHook configuration.

 * "git pull" has been taught to accept "--[no-]signoff" option and
   pass it down to "git merge".

 * The "--push-option=<string>" option to "git push" now defaults to a
   list of strings configured via push.pushOption variable.

 * "gitweb" checks if a directory is searchable with Perl's "-x"
   operator, which can be enhanced by using "filetest 'access'"
   pragma, which now we do.

 * "git stash save" has been deprecated in favour of "git stash push".

 * The set of paths output from "git status --ignored" was tied
   closely with its "--untracked=<mode>" option, but now it can be
   controlled more flexibly.  Most notably, a directory that is
   ignored because it is listed to be ignored in the ignore/exclude
   mechanism can be handled differently from a directory that ends up
   to be ignored only because all files in it are ignored.

 * The remote-helper for talking to MediaWiki has been updated to
   truncate an overlong pagename so that ".mw" suffix can still be
   added.

 * The remote-helper for talking to MediaWiki has been updated to
   work with mediawiki namespaces.

 * The "--format=..." option "git for-each-ref" takes learned to show
   the name of the 'remote' repository and the ref at the remote side
   that is affected for 'upstream' and 'push' via "%(push:remotename)"
   and friends.

 * Doc and message updates to teach users "bisect view" is a synonym
   for "bisect visualize".

 * "git bisect run" that did not specify any command to run used to go
   ahead and treated all commits to be tested as 'good'.  This has
   been corrected by making the command error out.

 * The SubmittingPatches document has been converted to produce an
   HTML version via AsciiDoc/Asciidoctor.

 * We learned to talk to watchman to speed up "git status" and other
   operations that need to see which paths have been modified.

 * The "diff" family of commands learned to ignore differences in
   carriage return at the end of line.

 * Places that know about "sendemail.to", like documentation and shell
   completion (in contrib/) have been taught about "sendemail.tocmd",
   too.

 * "git add --renormalize ." is a new and safer way to record the fact
   that you are correcting the end-of-line convention and other
   "convert_to_git()" glitches in the in-repository data.

 * "git branch" and "git checkout -b" are now forbidden from creating
   a branch whose name is "HEAD".

 * "git branch --list" learned to show its output through the pager by
   default when the output is going to a terminal, which is controlled
   by the pager.branch configuration variable.  This is similar to a
   recent change to "git tag --list".

 * "git grep -W", "git diff -W" and their friends learned a heuristic
   to extend a pre-context beyond the line that matches the "function
   pattern" (aka "diff.*.xfuncname") to include a comment block, if
   exists, that immediately precedes it.

 * "git config --expiry-date gc.reflogexpire" can read "2.weeks" from
   the configuration and report it as a timestamp, just like "--int"
   would read "1k" and report 1024, to help consumption by scripts.

 * The shell completion (in contrib/) learned that "git pull" can take
   the "--autostash" option.

 * The tagnames "git log --decorate" uses to annotate the commits can
   now be limited to subset of available refs with the two additional
   options, --decorate-refs[-exclude]=<pattern>.

 * "git grep" compiled with libpcre2 sometimes triggered a segfault,
   which is being fixed.

 * "git send-email" tries to see if the sendmail program is available
   in /usr/lib and /usr/sbin; extend the list of locations to be
   checked to also include directories on $PATH.

 * "git diff" learned, "--anchored", a variant of the "--patience"
   algorithm, to which the user can specify which 'unique' line to be
   used as anchoring points.

 * The way "git worktree add" determines what branch to create from
   where and checkout in the new worktree has been updated a bit.

 * Ancient part of codebase still shows dots after an abbreviated
   object name just to show that it is not a full object name, but
   these ellipses are confusing to people who newly discovered Git
   who are used to seeing abbreviated object names and find them
   confusing with the range syntax.

 * With a configuration variable rebase.abbreviateCommands set,
   "git rebase -i" produces the todo list with a single-letter
   command names.

 * "git worktree add" learned to run the post-checkout hook, just like
   "git checkout" does, after the initial checkout.

 * "git svn" has been updated to strip CRs in the commit messages, as
   recent versions of Subversion rejects them.

 * "git imap-send" did not correctly quote the folder name when
   making a request to the server, which has been corrected.

 * Error messages from "git rebase" have been somewhat cleaned up.

 * Git has been taught to support an https:// URL used for http.proxy
   when using recent versions of libcurl.

 * "git merge" learned to pay attention to merge.verifySignatures
   configuration variable and pretend as if '--verify-signatures'
   option was given from the command line.

 * "git describe" was taught to dig trees deeper to find a
   <commit-ish>:<path> that refers to a given blob object.


Performance, Internal Implementation, Development Support etc.

 * An earlier update made it possible to use an on-stack in-core
   lockfile structure (as opposed to having to deliberately leak an
   on-heap one).  Many codepaths have been updated to take advantage
   of this new facility.

 * Calling cmd_foo() as if it is a general purpose helper function is
   a no-no.  Correct two instances of such to set an example.

 * We try to see if somebody runs our test suite with a shell that
   does not support "local" like bash/dash does.

 * An early part of piece-by-piece rewrite of "git bisect" in C.

 * GSoC to piece-by-piece rewrite "git submodule" in C.

 * Optimize the code to find shortest unique prefix of object names.

 * Pathspec-limited revision traversal was taught not to keep finding
   unneeded differences once it knows two trees are different inside
   given pathspec.

 * Conversion from uchar[20] to struct object_id continues.

 * Code cleanup.

 * A single-word "unsigned flags" in the diff options is being split
   into a structure with many bitfields.

 * TravisCI build updates.

 * Parts of a test to drive the long-running content filter interface
   has been split into its own module, hopefully to eventually become
   reusable.

 * Drop (perhaps overly cautious) sanity check before using the index
   read from the filesystem at runtime.

 * The build procedure has been taught to avoid some unnecessary
   instability in the build products.

 * A new mechanism to upgrade the wire protocol in place is proposed
   and demonstrated that it works with the older versions of Git
   without harming them.

 * An infrastructure to define what hash function is used in Git is
   introduced, and an effort to plumb that throughout various
   codepaths has been started.

 * The code to iterate over loose object files got optimized.

 * An internal function that was left for backward compatibility has
   been removed, as there is no remaining callers.

 * Historically, the diff machinery for rename detection had a
   hardcoded limit of 32k paths; this is being lifted to allow users
   trade cycles with a (possibly) easier to read result.

 * The tracing infrastructure has been optimized for cases where no
   tracing is requested.

 * In preparation for implementing narrow/partial clone, the object
   walking machinery has been taught a way to tell it to "filter" some
   objects from enumeration.

 * A few structures and variables that are implementation details of
   the decorate API have been renamed and then the API got documented
   better.

 * Assorted updates for TravisCI integration.
   (merge 4f26366679 sg/travis-fixes later to maint).

 * Introduce a helper to simplify code to parse a common pattern that
   expects either "--key" or "--key=<something>".

 * "git version --build-options" learned to report the host CPU and
   the exact commit object name the binary was built from.

Also contains various documentation updates and code clean-ups.


Fixes since v2.15
-----------------

 * "auto" as a value for the columnar output configuration ought to
   judge "is the output consumed by humans?" with the same criteria as
   "auto" for coloured output configuration, i.e. either the standard
   output stream is going to tty, or a pager is in use.  We forgot the
   latter, which has been fixed.

 * The experimental "color moved lines differently in diff output"
   feature was buggy around "ignore whitespace changes" edges, which
   has been corrected.

 * Instead of using custom line comparison and hashing functions to
   implement "moved lines" coloring in the diff output, use the pair
   of these functions from lower-layer xdiff/ code.

 * Some codepaths did not check for errors when asking what branch the
   HEAD points at, which have been fixed.

 * "git commit", after making a commit, did not check for errors when
   asking on what branch it made the commit, which has been corrected.

 * "git status --ignored -u" did not stop at a working tree of a
   separate project that is embedded in an ignored directory and
   listed files in that other project, instead of just showing the
   directory itself as ignored.

 * A broken access to object databases in recent update to "git grep
   --recurse-submodules" has been fixed.

 * A recent regression in "git rebase -i" that broke execution of git
   commands from subdirectories via "exec" instruction has been fixed.

 * A (possibly flakey) test fix.

 * "git check-ref-format --branch @{-1}" bit a "BUG()" when run
   outside a repository for obvious reasons; clarify the documentation
   and make sure we do not even try to expand the at-mark magic in
   such a case, but still call the validation logic for branch names.

 * "git fetch --recurse-submodules" now knows that submodules can be
   moved around in the superproject in addition to getting updated,
   and finds the ones that need to be fetched accordingly.

 * Command line completion (in contrib/) update.

 * Description of blame.{showroot,blankboundary,showemail,date}
   configuration variables have been added to "git config --help".

 * After an error from lstat(), diff_populate_filespec() function
   sometimes still went ahead and used invalid data in struct stat,
   which has been fixed.

 * UNC paths are also relevant in Cygwin builds and they are now
   tested just like Mingw builds.

 * Correct start-up sequence so that a repository could be placed
   immediately under the root directory again (which was broken at
   around Git 2.13).

 * The credential helper for libsecret (in contrib/) has been improved
   to allow possibly prompting the end user to unlock secrets that are
   currently locked (otherwise the secrets may not be loaded).

 * MinGW updates.

 * Error checking in "git imap-send" for empty response has been
   improved.

 * Recent update to the refs infrastructure implementation started
   rewriting packed-refs file more often than before; this has been
   optimized again for most trivial cases.

 * Some error messages did not quote filenames shown in it, which have
   been fixed.

 * "git rebase -i" recently started misbehaving when a submodule that
   is configured with 'submodule.<name>.ignore' is dirty; this has
   been corrected.

 * Building with NO_LIBPCRE1_JIT did not disable it, which has been fixed.

 * We used to add an empty alternate object database to the system
   that does not help anything; it has been corrected.

 * Doc update around use of "format-patch --subject-prefix" etc.

 * A fix for an ancient bug in "git apply --ignore-space-change" codepath.

 * Clarify and enhance documentation for "merge-base --fork-point", as
   it was clear what it computed but not why/what for.

 * A few scripts (both in production and tests) incorrectly redirected
   their error output.  These have been corrected.

 * "git notes" sent its error message to its standard output stream,
   which was corrected.

 * The three-way merge performed by "git cherry-pick" was confused
   when a new submodule was added in the meantime, which has been
   fixed (or "papered over").

 * The sequencer machinery (used by "git cherry-pick A..B", and "git
   rebase -i", among other things) would have lost a commit if stopped
   due to an unlockable index file, which has been fixed.

 * "git apply --inaccurate-eof" when used with "--ignore-space-change"
   triggered an internal sanity check, which has been fixed.

 * Command line completion (in contrib/) has been taught about the
   "--copy" option of "git branch".

 * When "git rebase" prepared an mailbox of changes and fed it to "git
   am" to replay them, it was confused when a stray "From " happened
   to be in the log message of one of the replayed changes.  This has
   been corrected.

 * There was a recent semantic mismerge in the codepath to write out a
   section of a configuration section, which has been corrected.

 * Mentions of "git-rebase" and "git-am" (dashed form) still remained
   in end-user visible strings emitted by the "git rebase" command;
   they have been corrected.

 * Contrary to the documentation, "git pull -4/-6 other-args" did not
   ask the underlying "git fetch" to go over IPv4/IPv6, which has been
   corrected.

 * "git checkout --recursive" may overwrite and rewind the history of
   the branch that happens to be checked out in submodule
   repositories, which might not be desirable.  Detach the HEAD but
   still allow the recursive checkout to succeed in such a case.
   (merge 57f22bf997 sb/submodule-recursive-checkout-detach-head later to maint).

 * "git branch --set-upstream" has been deprecated and (sort of)
   removed, as "--set-upstream-to" is the preferred one these days.
   The documentation still had "--set-upstream" listed on its
   synopsis section, which has been corrected.
   (merge a060f3d3d8 tz/branch-doc-remove-set-upstream later to maint).

 * Internally we use 0{40} as a placeholder object name to signal the
   codepath that there is no such object (e.g. the fast-forward check
   while "git fetch" stores a new remote-tracking ref says "we know
   there is no 'old' thing pointed at by the ref, as we are creating
   it anew" by passing 0{40} for the 'old' side), and expect that a
   codepath to locate an in-core object to return NULL as a sign that
   the object does not exist.  A look-up for an object that does not
   exist however is quite costly with a repository with large number
   of packfiles.  This access pattern has been optimized.
   (merge 87b5e236a1 jk/fewer-pack-rescan later to maint).

 * In addition to "git stash -m message", the command learned to
   accept "git stash -mmessage" form.
   (merge 5675473fcb ph/stash-save-m-option-fix later to maint).

 * @{-N} in "git checkout @{-N}" may refer to a detached HEAD state,
   but the documentation was not clear about it, which has been fixed.
   (merge 75ce149575 ks/doc-checkout-previous later to maint).

 * A regression in the progress eye-candy was fixed.
   (merge 9c5951cacf jk/progress-delay-fix later to maint).

 * The code internal to the recursive merge strategy was not fully
   prepared to see a path that is renamed to try overwriting another
   path that is only different in case on case insensitive systems.
   This does not matter in the current code, but will start to matter
   once the rename detection logic starts taking hints from nearby
   paths moving to some directory and moves a new path along with them.
   (merge 4cba2b0108 en/merge-recursive-icase-removal later to maint).

 * An v2.12-era regression in pathspec match logic, which made it look
   into submodule tree even when it is not desired, has been fixed.
   (merge eef3df5a93 bw/pathspec-match-submodule-boundary later to maint).

 * Amending commits in git-gui broke the author name that is non-ascii
   due to incorrect enconding conversion.

 * Recent update to the submodule configuration code broke "diff-tree"
   by accidentally stopping to read from the index upfront.
   (merge fd66bcc31f bw/submodule-config-cleanup later to maint).

 * Git shows a message to tell the user that it is waiting for the
   user to finish editing when spawning an editor, in case the editor
   opens to a hidden window or somewhere obscure and the user gets
   lost.
   (merge abfb04d0c7 ls/editor-waiting-message later to maint).

 * The "safe crlf" check incorrectly triggered for contents that does
   not use CRLF as line endings, which has been corrected.
   (merge 649f1f0948 tb/check-crlf-for-safe-crlf later to maint).

 * "git clone --shared" to borrow from a (secondary) worktree did not
   work, even though "git clone --local" did.  Both are now accepted.
   (merge b3b05971c1 es/clone-shared-worktree later to maint).

 * The build procedure now allows not just the repositories but also
   the refs to be used to take pre-formatted manpages and html
   documents to install.
   (merge 65289e9dcd rb/quick-install-doc later to maint).

 * Update the shell prompt script (in contrib/) to strip trailing CR
   from strings read from various "state" files.
   (merge 041fe8fc83 ra/prompt-eread-fix later to maint).

 * "git merge -s recursive" did not correctly abort when the index is
   dirty, if the merged tree happened to be the same as the current
   HEAD, which has been fixed.

 * Bytes with high-bit set were encoded incorrectly and made
   credential helper fail.
   (merge 4c267f2ae3 jd/fix-strbuf-add-urlencode-bytes later to maint).

 * Other minor doc, test and build updates and code cleanups.
   (merge 1a1fc2d5b5 rd/man-prune-progress later to maint).
   (merge 0ba014035a rd/man-reflog-add-n later to maint).
   (merge e54b63359f rd/doc-notes-prune-fix later to maint).
   (merge ff4c9b413a sp/doc-info-attributes later to maint).
   (merge 7db2cbf4f1 jc/receive-pack-hook-doc later to maint).
   (merge 5a0526264b tg/t-readme-updates later to maint).
   (merge 5e83cca0b8 jk/no-optional-locks later to maint).
   (merge 826c778f7c js/hashmap-update-sample later to maint).
   (merge 176b2d328c sg/setup-doc-update later to maint).
   (merge 1b09073514 rs/am-builtin-leakfix later to maint).
   (merge addcf6cfde rs/fmt-merge-msg-string-leak-fix later to maint).
   (merge c3ff8f6c14 rs/strbuf-read-once-reset-length later to maint).
   (merge 6b0eb884f9 db/doc-workflows-neuter-the-maintainer later to maint).
   (merge 8c87bdfb21 jk/cvsimport-quoting later to maint).
   (merge 176cb979fe rs/fmt-merge-msg-leakfix later to maint).
   (merge 5a03360e73 tb/delimit-pretty-trailers-args-with-comma later to maint).
   (merge d0e6326026 ot/pretty later to maint).
   (merge 44103f4197 sb/test-helper-excludes later to maint).
   (merge 170078693f jt/transport-no-more-rsync later to maint).
   (merge c07b3adff1 bw/path-doc later to maint).
   (merge bf9d7df950 tz/lib-git-svn-svnserve-tests later to maint).
   (merge dec366c9a8 sr/http-sslverify-config-doc later to maint).
   (merge 3f824e91c8 jk/test-suite-tracing later to maint).
   (merge 1feb061701 db/doc-config-section-names-with-bs later to maint).
   (merge 74dea0e13c jh/memihash-opt later to maint).

----------------------------------------------------------------

Changes since v2.15.0 are as follows:

Adam Dinwoodie (3):
      t5580: add Cygwin support
      rebase -i: fix comment typo
      doc/SubmittingPatches: correct subject guidance

Albert Astals Cid (1):
      completion: add --autostash and --no-autostash to pull

Alex Vandiver (7):
      fsmonitor: read entirety of watchman output
      fsmonitor: set the PWD to the top of the working tree
      fsmonitor: don't bother pretty-printing JSON from watchman
      fsmonitor: document GIT_TRACE_FSMONITOR
      fsmonitor: delay updating state until after split index is merged
      fsmonitor: read from getcwd(), not the PWD environment variable
      fsmonitor: store fsmonitor bitmap before splitting index

Anders Kaseorg (1):
      git-gui: sort entries in optimized tclIndex

Andrey Okoshkin (3):
      commit: check result of resolve_ref_unsafe
      diff: fix lstat() error handling in diff_populate_filespec()
      merge-recursive: check GIT_MERGE_VERBOSITY only once

Ann T Ropea (7):
      Documentation: revisions: fix typo: "three dot" ---> "three-dot" (in line with "two-dot").
      Documentation: user-manual: limit usage of ellipsis
      print_sha1_ellipsis: introduce helper
      checkout: describe_detached_head: remove ellipsis after committish
      t4013: prepare for upcoming "diff --raw --abbrev" output format change
      diff: diff_aligned_abbrev: remove ellipsis after abbreviated SHA-1 value
      t4013: test new output from diff --abbrev --raw

Antoine Beaupré (6):
      remote-mediawiki: limit filenames to legal
      remote-mediawiki: show known namespace choices on failure
      remote-mediawiki: skip virtual namespaces
      remote-mediawiki: support fetching from (Main) namespace
      remote-mediawiki: process namespaces in order
      remote-mediawiki: show progress while fetching namespaces

Beat Bolli (1):
      contrib/git-jump: allow to configure the grep command

Ben Peart (16):
      bswap: add 64 bit endianness helper get_be64
      preload-index: add override to enable testing preload-index
      update-index: add a new --force-write-index option
      fsmonitor: teach git to optionally utilize a file system monitor to speed up detecting new or changed files.
      fsmonitor: add documentation for the fsmonitor extension.
      ls-files: Add support in ls-files to display the fsmonitor valid bit
      update-index: add fsmonitor support to update-index
      fsmonitor: add a test tool to dump the index extension
      split-index: disable the fsmonitor extension when running the split index test
      fsmonitor: add test cases for fsmonitor extension
      fsmonitor: add a sample integration script for Watchman
      fsmonitor: add a performance test
      fsmonitor: MINGW support for watchman integration
      fsmonitor: preserve utf8 filenames in fsmonitor-watchman log
      read_index_from(): speed index loading by skipping verification of the entry order
      fsmonitor: simplify determining the git worktree under Windows

Brandon Williams (24):
      pkt-line: add packet_write function
      protocol: introduce protocol extension mechanisms
      daemon: recognize hidden request arguments
      upload-pack, receive-pack: introduce protocol version 1
      connect: teach client to recognize v1 server response
      connect: tell server that the client understands v1
      http: tell server that the client understands v1
      i5700: add interop test for protocol transition
      ssh: introduce a 'simple' ssh variant
      add, reset: use DIFF_OPT_SET macro to set a diff flag
      diff: convert flags to be stored in bitfields
      diff: add flag to indicate textconv was set via cmdline
      diff: remove touched flags
      diff: remove DIFF_OPT_TST macro
      diff: remove DIFF_OPT_SET macro
      diff: remove DIFF_OPT_CLR macro
      diff: make struct diff_flags members lowercase
      wt-status: actually ignore submodules when requested
      pathspec: only match across submodule boundaries when requested
      diff-tree: read the index so attribute checks work in bare repositories
      submodule: convert stage_updated_gitmodules to take a struct index_state
      submodule: used correct index in is_staging_gitmodules_ok
      submodule: convert get_next_submodule to not rely on the_index
      path: document path functions

Carlos Martín Nieto (1):
      diff: --indent-heuristic is no longer experimental

Charles Bailey (2):
      t4201: make use of abbreviation in the test more robust
      grep: fix NO_LIBPCRE1_JIT to fully disable JIT

Christian Couder (24):
      perf/run: add '--config' option to the 'run' script
      perf/run: add get_var_from_env_or_config()
      perf/run: add GIT_PERF_DIRS_OR_REVS
      perf/run: add calls to get_var_from_env_or_config()
      perf/run: add get_subsections()
      perf/run: update get_var_from_env_or_config() for subsections
      perf/run: add run_subsection()
      perf/run: show name of rev being built
      perf: store subsection results in "test-results/$GIT_PERF_SUBSECTION/"
      t0021/rot13-filter: fix list comparison
      t0021/rot13-filter: refactor packet reading functions
      t0021/rot13-filter: improve 'if .. elsif .. else' style
      t0021/rot13-filter: improve error message
      t0021/rot13-filter: add packet_initialize()
      t0021/rot13-filter: refactor checking final lf
      t0021/rot13-filter: add capability functions
      Git/Packet.pm: extract parts of t0021/rot13-filter.pl for reuse
      Git/Packet: clarify that packet_required_key_val_read allows EOF
      Git/Packet.pm: use 'if' instead of 'unless'
      list-objects-filter-options: fix 'keword' typo in comment
      git-compat-util: introduce skip_to_optional_arg()
      index-pack: use skip_to_optional_arg()
      diff: use skip_to_optional_arg()
      diff: use skip_to_optional_arg_default()

Damien Marié (1):
      run-command: add hint when a hook is ignored

Daniel Bensoussan (1):
      doc: reword gitworkflows.txt for neutrality

Dave Borowitz (1):
      config.txt: document behavior of backslashes in subsections

Dennis Kaarsemaker (1):
      credential-libsecret: unlock locked secrets

Derrick Stolee (5):
      p4211-line-log.sh: add log --online --raw --parents perf test
      sha1_name: unroll len loop in find_unique_abbrev_r()
      sha1_name: parse less while finding common prefix
      sha1_name: minimize OID comparisons during disambiguation
      sha1_file: use strbuf_add() instead of strbuf_addf()

Elijah Newren (10):
      sequencer: warn when internal merge may be suboptimal due to renameLimit
      merge-recursive: handle addition of submodule on our side of history
      progress: fix progress meters when dealing with lots of work
      diff: remove silent clamp of renameLimit
      sequencer: show rename progress during cherry picks
      merge-recursive: ignore_case shouldn't reject intentional removals
      strbuf: remove unused stripspace function alias
      t6044: recursive can silently incorporate dirty changes in a merge
      move index_has_changes() from builtin/am.c to merge.c for reuse
      merge-recursive: avoid incorporating uncommitted changes in a merge

Emily Xie (1):
      pathspec: die on empty strings as pathspec

Eric Sunshine (3):
      worktree: invoke post-checkout hook (unless --no-checkout)
      clone: support 'clone --shared' from a worktree
      version --build-options: also report host CPU

Eric Wong (2):
      rebase: use mboxrd format to avoid split errors
      git-svn: convert CRLF to LF in commit message to SVN

Florian Klink (1):
      git-send-email: honor $PATH for sendmail binary

Gennady Kupava (2):
      trace: remove trace key normalization
      trace: improve performance while category is disabled

Guillaume Castagnino (1):
      gitweb: use filetest to allow ACLs

Haaris Mehmood (1):
      config: add --expiry-date

Hans Jerry Illikainen (2):
      merge: add config option for verifySignatures
      t: add tests for pull --verify-signatures

Heiko Voigt (3):
      fetch: add test to make sure we stay backwards compatible
      implement fetching of moved submodules
      submodule: simplify decision tree whether to or not to fetch

Ingo Ruhnke (1):
      remote-mediawiki: allow fetching namespaces with spaces

J Wyman (1):
      for-each-ref: let upstream/push report the remote ref name

Jacob Keller (2):
      sequencer: pass absolute GIT_DIR to exec commands
      diff: add tests for --relative without optional prefix value

Jakub Bereżański (2):
      t0302: check helper can handle empty credentials
      wincred: handle empty username/password correctly

Jameson Miller (4):
      status: add option to show ignored files differently
      status: report matching ignored and normal untracked
      status: document options to show matching ignored files
      status: test ignored modes

Jean Carlo Machado (1):
      fix typos in 2.15.0 release notes

Jean-Noel Avila (1):
      submodule--helper.c: i18n: add a missing space in message

Jeff Hostetler (9):
      dir: allow exclusions from blob in addition to file
      oidmap: add oidmap iterator methods
      oidset: add iterator methods to oidset
      list-objects: filter objects in traverse_commit_list
      rev-list: add list-objects filtering support
      pack-objects: add list-objects filtering
      list-objects-filter-options: support --no-filter
      rev-list: support --no-filter argument
      partial-clone: design doc

Jeff King (26):
      revision: quit pruning diff more quickly when possible
      t4015: refactor --color-moved whitespace test
      t4015: check "negative" case for "-w --color-moved"
      t4015: test the output of "diff --color-moved -b"
      diff: fix whitespace-skipping with --color-moved
      diff: handle NULs in get_string_hash()
      test-ref-store: avoid passing NULL to printf
      remote: handle broken symrefs
      log: handle broken HEAD in decoration check
      worktree: handle broken symrefs in find_shared_symref()
      setup: avoid double slashes when looking for HEAD
      link_alt_odb_entries: make empty input a noop
      git-jump: give contact instructions in the README
      p5550: factor out nonsense-pack creation
      t/perf/lib-pack: use fast-import checkpoint to create packs
      p5551: add a script to test fetch pack-dir rescans
      everything_local: use "quick" object existence check
      sha1_file: fast-path null sha1 as a missing object
      git-status.txt: mention --no-optional-locks
      progress: set default delay threshold to 100%, not 0%
      docs/pretty-formats: mention commas in %(trailers) syntax
      cvsimport: apply shell-quoting regex globally
      test-lib: silence "-x" cleanup under bash
      t5615: avoid re-using descriptor 4
      test-lib: make "-x" work with "--verbose-log"
      t/Makefile: introduce TEST_SHELL_PATH

Johannes Schindelin (14):
      for-each-ref: let upstream/push optionally report the remote name
      status: do not get confused by submodules in excluded directories
      mingw: include the full version information in the resources
      mingw: add experimental feature to redirect standard handles
      mingw: optionally redirect stderr/stdout via the same handle
      mingw: document the standard handle redirection
      for-each-ref: test :remotename and :remoteref
      hashmap: adjust documentation to reflect reality
      version --build-options: report commit, too, if possible
      rebase: do not continue when the todo list generation failed
      sequencer: strip bogus LF at end of error messages
      sequencer: remove superfluous conditional
      sequencer: report when noop has an argument
      sequencer: do not invent whitespace when transforming OIDs

Jonathan Nieder (10):
      ssh test: make copy_ssh_wrapper_as clean up after itself
      connect: move no_fork fallback to git_tcp_connect
      connect: split git:// setup into a separate function
      connect: split ssh command line options into separate function
      connect: split ssh option computation to its own function
      ssh: 'auto' variant to select between 'ssh' and 'simple'
      ssh: 'simple' variant does not support -4/-6
      ssh: 'simple' variant does not support --port
      connect: correct style of C-style comment
      generate-cmdlist: avoid non-deterministic output

Jonathan Tan (10):
      connect: in ref advertisement, shallows are last
      Documentation: document Extra Parameters
      Tests: clean up and document submodule helpers
      Tests: clean up submodule recursive helpers
      diff: support anchoring line(s)
      diffcore-rename: make diff-tree -l0 mean -l<large>
      decorate: clean up and document API
      transport: remove unused "push" in vtable
      clone, fetch: remove redundant transport check
      transport: make transport vtable more private

Julien Dusser (1):
      strbuf: fix urlencode format string on signed char

Junio C Hamano (38):
      t0027: do not use an empty string as a pathspec element
      describe: do not use cmd_*() as a subroutine
      merge-ours: do not use cmd_*() as a subroutine
      branch: streamline "attr_only" handling in validate_new_branchname()
      branch: split validate_new_branchname() into two
      t5601: rm the target file of cp that could still be executing
      check-ref-format --branch: do not expand @{...} outside repository
      check-ref-format --branch: strip refs/heads/ using skip_prefix
      check-ref-format doc: --branch validates and expands <branch>
      column: do not include pager.c
      xdiff: reassign xpparm_t.flags bits
      The first batch for 2.16
      RelNotes: the second batch post 2.15 comes
      diff: --ignore-cr-at-eol
      merge-base --fork-point doc: clarify the example and failure modes
      RelNotes: the third batch for 2.16
      branch: correctly reject refs/heads/{-dash,HEAD}
      Start preparation for 2.15.1
      RelNotes: the fourth batch for 2.16
      Almost ready for 2.15.1
      RelNotes: the fifth batch for 2.16
      hooks doc: clarify when receive-pack invokes its hooks
      A bit more fixes for 2.15.1
      RelNotes: the sixth batch for 2.16
      Git 2.15.1
      RelNotes: the seventh batch
      t2020: test variations that matter
      Prepare for 2.15.2
      RelNotes: the eighth batch
      diff: use skip_to_optional_arg_default() in parsing --relative
      t4045: reindent to make helpers readable
      RelNotes: the ninth batch
      RelNotes: the tenth batch
      t5573, t7612: clean up after unexpected success of 'pull' and 'merge'
      sequencer.c: drop 'const' from function return type
      RelNotes: the eleventh batch
      Git 2.16-rc0
      Git 2.16-rc1

Kaartic Sivaraam (12):
      mailmap: use Kaartic Sivaraam's new address
      builtin/branch: remove redundant check for HEAD
      git-rebase: clean up dashed-usages in messages
      Doc/checkout: checking out using @{-N} can lead to detached state
      branch: improve documentation and naming of create_branch() parameters
      branch: group related arguments of create_branch()
      branch: update warning message shown when copying a misnamed branch
      builtin/branch: strip refs/heads/ using skip_prefix
      Doc/check-ref-format: clarify information about @{-N} syntax
      rebase: consistently use branch_name variable
      rebase: distinguish user input by quoting it
      rebase: rebasing can also be done when HEAD is detached

Kevin (1):
      remote-mediawiki: add namespace support

Kevin Daudt (1):
      column: show auto columns when pager is active

Lars Schneider (3):
      refactor "dumb" terminal determination
      progress: drop delay-threshold code
      launch_editor(): indicate that Git waits for user input

Liam Beguin (9):
      Documentation: move rebase.* configs to new file
      Documentation: use preferred name for the 'todo list' script
      rebase -i: set commit to null in exec commands
      rebase -i: refactor transform_todo_ids
      rebase -i: replace reference to sha1 with oid
      rebase -i: update functions to use a flags parameter
      rebase -i -x: add exec commands via the rebase--helper
      rebase -i: learn to abbreviate command names
      t3404: add test case for abbreviated commands

Luke Diamand (1):
      git-p4: update multiple shelved change lists

Marius Paliga (1):
      builtin/push.c: add push.pushOption config

Martin Ågren (22):
      sha1_file: do not leak `lock_file`
      treewide: prefer lockfiles on the stack
      lockfile: fix documentation on `close_lock_file_gently()`
      tempfile: fix documentation on `delete_tempfile()`
      checkout-index: simplify locking logic
      cache-tree: simplify locking logic
      apply: move lockfile into `apply_state`
      apply: remove `newfd` from `struct apply_state`
      cache.h: document `write_locked_index()`
      read-cache: drop explicit `CLOSE_LOCK`-flag
      read-cache: leave lock in right state in `write_locked_index()`
      read_cache: roll back lock in `update_index_if_able()`
      grep: take the read-lock when adding a submodule
      bisect: change calling-convention of `find_bisection()`
      bisect: fix memory leak in `find_bisection()`
      bisect: fix off-by-one error in `best_bisection_sorted()`
      bisect: fix memory leak when returning best element
      builtin/merge-base: free commit lists
      reduce_heads: fix memory leaks
      t7006: add tests for how git branch paginates
      branch: respect `pager.branch` in list-mode only
      branch: change default of `pager.branch` to "on"

Michael Haggerty (12):
      t1409: check that `packed-refs` is not rewritten unnecessarily
      files-backend: don't rewrite the `packed-refs` file unnecessarily
      t0000: check whether the shell supports the "local" keyword
      files_transaction_prepare(): don't leak flags to packed transaction
      prune_ref(): call `ref_transaction_add_update()` directly
      ref_transaction_update(): die on disallowed flags
      ref_transaction_add_update(): remove a check
      refs: tidy up and adjust visibility of the `ref_update` flags
      refs: rename constant `REF_NODEREF` to `REF_NO_DEREF`
      refs: rename constant `REF_ISPRUNING` to `REF_IS_PRUNING`
      write_packed_entry(): take `object_id` arguments
      refs: update some more docs to use "oid" rather than "sha1"

Nicolas Morey-Chaisemartin (1):
      imap-send: URI encode server folder

Olga Telezhnaya (2):
      format: create pretty.h file
      format: create docs for pretty.h

Phil Hord (2):
      doc: prefer 'stash push' over 'stash save'
      stash: learn to parse -m/--message like commit does

Phillip Wood (2):
      config: avoid "write_in_full(fd, buf, len) != len" pattern
      sequencer: reschedule pick if index can't be locked

Pranit Bauva (6):
      bisect--helper: use OPT_CMDMODE instead of OPT_BOOL
      bisect--helper: rewrite `check_term_format` shell function in C
      bisect--helper: `write_terms` shell function in C
      bisect--helper: `bisect_clean_state` shell function in C
      t6030: explicitly test for bisection cleanup
      bisect--helper: `is_expected_rev` & `check_expected_revs` shell function in C

Prathamesh Chavan (3):
      submodule--helper: introduce get_submodule_displaypath()
      submodule--helper: introduce for_each_listed_submodule()
      submodule: port submodule subcommand 'status' from shell to C

Rafael Ascensão (1):
      log: add option to choose which refs to decorate

Ramsay Jones (1):
      repository: fix a sparse 'using integer as NULL pointer' warning

Randall S. Becker (1):
      install-doc-quick: allow specifying what ref to install

Rasmus Villemoes (2):
      Documentation/config: add sendemail.tocmd to list preceding "See git-send-email(1)"
      completion: add git config sendemail.tocmd

René Scharfe (23):
      notes: move hex_to_bytes() to hex.c and export it
      http-push: use hex_to_bytes()
      sha1_file: use hex_to_bytes()
      sequencer: factor out rewrite_file()
      sequencer: use O_TRUNC to truncate files
      imap-send: handle NULL return of next_arg()
      imap-send: handle missing response codes gracefully
      apply: avoid out-of-bounds access in fuzzy_matchlines()
      apply: update line lengths for --inaccurate-eof
      config: flip return value of write_section()
      t4051: add test for comments preceding function lines
      xdiff: factor out is_func_rec()
      xdiff: show non-empty lines before functions with -W
      t7810: improve check of -W with user-defined function lines
      grep: update boundary variable for pre-context
      grep: show non-empty lines before functions with -W
      am: release strbuf after use in split_mail_mbox()
      fmt-merge-msg: avoid leaking strbuf in shortlog()
      strbuf: release memory on read error in strbuf_read_once()
      transport-helper: plug strbuf and string_list leaks
      p7519: improve check for prerequisite WATCHMAN
      http: use internal argv_array of struct child_process
      send-pack: use internal argv_array of struct child_process

Robert Abel (2):
      git-prompt: make __git_eread intended use explicit
      git-prompt: fix reading files with windows line endings

Robert P. J. Day (4):
      bisect: mention "view" as an alternative to "visualize"
      doc: add missing "-n" (dry-run) option to reflog man page
      prune: add "--progress" to man page and usage msg
      notes: correct 'git notes prune' options to '[-n] [-v]'

SZEDER Gábor (7):
      travis-ci: fix running P4 and Git LFS tests in Linux build jobs
      travis-ci: don't build Git for the static analysis job
      setup.c: fix comment about order of .git directory discovery
      travis-ci: introduce a $jobname variable for 'ci/*' scripts
      travis-ci: move setting environment variables to 'ci/lib-travisci.sh'
      travis-ci: set GIT_TEST_HTTPD in 'ci/lib-travisci.sh'
      travis-ci: use 'set -x' in 'ci/*' scripts for extra tracing output

Shuyu Wei (1):
      pull: pass -4/-6 option to 'git fetch'

Simon Ruderich (3):
      sequencer.c: check return value of close() in rewrite_file()
      wrapper.c: consistently quote filenames in error messages
      config: document default value of http.sslVerify

Stefan Beller (16):
      recursive submodules: detach HEAD from new state
      Documentation/checkout: clarify submodule HEADs to be detached
      xdiff-interface: export comparing and hashing strings
      diff.c: get rid of duplicate implementation
      t6120: fix typo in test name
      list-objects.c: factor out traverse_trees_and_blobs
      config: document blame configuration
      t/3512: demonstrate unrelated submodule/file conflict as cherry-pick failure
      revision.h: introduce blob/tree walking in order of the commits
      builtin/describe.c: rename `oid` to avoid variable shadowing
      builtin/describe.c: print debug statements earlier
      builtin/describe.c: factor out describe_commit
      Documentation/git-clone: improve description for submodule recursing
      t/helper: ignore everything but sources
      builtin/describe.c: describe a blob
      t/helper/test-lazy-name-hash: fix compilation

Steffen Prohaska (1):
      doc: Mention info/attributes in gitrepository-layout

Stephan Beyer (1):
      bisect run: die if no command is given

Thomas Braun (1):
      completion: add remaining flags to checkout

Thomas Gummerer (11):
      stash: replace "git stash save" with "git stash push" in the documentation
      stash: mark "git stash save" deprecated in the man page
      stash: remove now superfluos help for "stash push"
      checkout: factor out functions to new lib file
      worktree: add can be created from any commit-ish
      worktree: add --[no-]track option to the add subcommand
      worktree: make add <path> <branch> dwim
      t/README: remove mention of adding copyright notices
      t/README: document test_cmp_rev
      worktree: add --guess-remote flag to add subcommand
      add worktree.guessRemote config option

Todd Zullinger (11):
      Replace Free Software Foundation address in license notices
      Replace Free Software Foundation address in license notices
      t/lib-gpg: fix gpgconf stderr redirect to /dev/null
      rebase: fix stderr redirect in apply_autostash()
      notes: send "Automatic notes merge failed" messages to stderr
      branch doc: remove --set-upstream from synopsis
      completion: add '--copy' option to 'git branch'
      RelNotes: minor typo fixes in 2.15.1 draft
      t/lib-git-svn: cleanup inconsistent tab/space usage
      t/lib-git-svn.sh: improve svnserve tests with parallel make test
      RelNotes: minor typo fixes in 2.16.0 draft

Torsten Bögershausen (4):
      add: introduce "--renormalize"
      convert: tighten the safe autocrlf handling
      t0027: Adapt the new MIX tests to Windows
      check-non-portable-shell.pl: `wc -l` may have leading WS

W. Trevor King (1):
      pull: pass --signoff/--no-signoff to "git merge"

Wei Shuyu (1):
      http: support CURLPROXY_HTTPS

brian m. carlson (31):
      walker: convert to struct object_id
      refs/files-backend: convert struct ref_to_prune to object_id
      refs: convert delete_ref and refs_delete_ref to struct object_id
      refs: convert update_ref and refs_update_ref to use struct object_id
      refs: prevent accidental NULL dereference in write_pseudoref
      refs: update ref transactions to use struct object_id
      Convert check_connected to use struct object_id
      refs: convert resolve_refdup and refs_resolve_refdup to struct object_id
      refs: convert read_ref and read_ref_full to object_id
      refs: convert dwim_ref and expand_ref to struct object_id
      builtin/reflog: convert remaining unsigned char uses to object_id
      refs: convert dwim_log to struct object_id
      pack-bitmap: convert traverse_bitmap_commit_list to object_id
      builtin/pack-objects: convert to struct object_id
      refs: convert peel_ref to struct object_id
      refs: convert read_ref_at to struct object_id
      refs: convert reflog_expire parameter to struct object_id
      sha1_file: convert index_path and index_fd to struct object_id
      Convert remaining callers of resolve_gitlink_ref to object_id
      refs: convert resolve_gitlink_ref to struct object_id
      worktree: convert struct worktree to object_id
      refs: convert resolve_ref_unsafe to struct object_id
      refs: convert peel_object to struct object_id
      refs: convert read_raw_ref backends to struct object_id
      refs/files-backend: convert static functions to object_id
      Documentation: enable compat-mode for Asciidoctor
      setup: expose enumerated repo info
      Add structure representing hash algorithm
      Integrate hash algorithm support with repo setup
      Switch empty tree and blob lookups to use hash abstraction
      Documentation: convert SubmittingPatches to AsciiDoc

Ævar Arnfjörð Bjarmason (2):
      test-lib: add LIBPCRE1 & LIBPCRE2 prerequisites
      grep: fix segfault under -P + PCRE2 <=10.30 + (*NO_JIT)

Łukasz Stelmach (1):
      git-gui: prevent double UTF-8 conversion


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.16.0-rc0
@ 2017-12-29  4:30  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2017-12-29  4:30 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel, git-packagers

An early preview release Git v2.16.0-rc0 is now available for
testing at the usual places.  It is comprised of 435 non-merge
commits since v2.15.0, contributed by 76 people, 22 of which are
new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.16.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.15.0 are as follows.
Welcome to the Git development community!

  Albert Astals Cid, Antoine Beaupré, Damien Marié, Daniel
  Bensoussan, Florian Klink, Gennady Kupava, Guillaume Castagnino,
  Haaris Mehmood, Hans Jerry Illikainen, Ingo Ruhnke, Jakub
  Bereżański, Jean Carlo Machado, J Wyman, Kevin, Łukasz
  Stelmach, Marius Paliga, Olga Telezhnaya, Rafael Ascensão,
  Robert Abel, Robert P. J. Day, Shuyu Wei, and Wei Shuyu.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alex Vandiver,
  Anders Kaseorg, Andrey Okoshkin, Ann T Ropea, Beat Bolli, Ben
  Peart, Brandon Williams, brian m. carlson, Carlos Martín Nieto,
  Charles Bailey, Christian Couder, Dennis Kaarsemaker, Derrick
  Stolee, Elijah Newren, Emily Xie, Eric Sunshine, Eric Wong,
  Heiko Voigt, Jacob Keller, Jameson Miller, Jean-Noel Avila,
  Jeff Hostetler, Jeff King, Johannes Schindelin, Jonathan Nieder,
  Jonathan Tan, Junio C Hamano, Kaartic Sivaraam, Kevin Daudt,
  Lars Schneider, Liam Beguin, Martin Ågren, Michael Haggerty,
  Nicolas Morey-Chaisemartin, Phil Hord, Phillip Wood, Pranit
  Bauva, Prathamesh Chavan, Ramsay Jones, Randall S. Becker,
  Rasmus Villemoes, René Scharfe, Simon Ruderich, Stefan Beller,
  Steffen Prohaska, Stephan Beyer, SZEDER Gábor, Thomas Braun,
  Thomas Gummerer, Todd Zullinger, Torsten Bögershausen, and
  W. Trevor King.

----------------------------------------------------------------

Git 2.16 Release Notes (draft)
==============================

Backward compatibility notes and other notable changes.

 * Use of an empty string as a pathspec element that is used for
   'everything matches' is now an error.


Updates since v2.15
-------------------

UI, Workflows & Features

 * An empty string as a pathspec element that means "everything"
   i.e. 'git add ""', is now illegal.  We started this by first
   deprecating and warning a pathspec that has such an element in
   2.11 (Nov 2016).

 * A hook script that is set unexecutable is simply ignored.  Git
   notifies when such a file is ignored, unless the message is
   squelched via advice.ignoredHook configuration.

 * "git pull" has been taught to accept "--[no-]signoff" option and
   pass it down to "git merge".

 * The "--push-option=<string>" option to "git push" now defaults to a
   list of strings configured via push.pushOption variable.

 * "gitweb" checks if a directory is searchable with Perl's "-x"
   operator, which can be enhanced by using "filetest 'access'"
   pragma, which now we do.

 * "git stash save" has been deprecated in favour of "git stash push".

 * The set of paths output from "git status --ignored" was tied
   closely with its "--untracked=<mode>" option, but now it can be
   controlled more flexibly.  Most notably, a directory that is
   ignored because it is listed to be ignored in the ignore/exclude
   mechanism can be handled differently from a directory that ends up
   to be ignored only because all files in it are ignored.

 * The remote-helper for talking to MediaWiki has been updated to
   truncate an overlong pagename so that ".mw" suffix can still be
   added.

 * The remote-helper for talking to MediaWiki has been updated to
   work with mediawiki namespaces.

 * The "--format=..." option "git for-each-ref" takes learned to show
   the name of the 'remote' repository and the ref at the remote side
   that is affected for 'upstream' and 'push' via "%(push:remotename)"
   and friends.

 * Doc and message updates to teach users "bisect view" is a synonym
   for "bisect visualize".

 * "git bisect run" that did not specify any command to run used to go
   ahead and treated all commits to be tested as 'good'.  This has
   been corrected by making the command error out.

 * The SubmittingPatches document has been converted to produce an
   HTML version via AsciiDoc/Asciidoctor.

 * We learned to talk to watchman to speed up "git status" and other
   operations that need to see which paths have been modified.

 * The "diff" family of commands learned to ignore differences in
   carriage return at the end of line.

 * Places that know about "sendemail.to", like documentation and shell
   completion (in contrib/) have been taught about "sendemail.tocmd",
   too.

 * "git add --renormalize ." is a new and safer way to record the fact
   that you are correcting the end-of-line convention and other
   "convert_to_git()" glitches in the in-repository data.

 * "git branch" and "git checkout -b" are now forbidden from creating
   a branch whose name is "HEAD".

 * "git branch --list" learned to show its output through the pager by
   default when the output is going to a terminal, which is controlled
   by the pager.branch configuration variable.  This is similar to a
   recent change to "git tag --list".

 * "git grep -W", "git diff -W" and their friends learned a heuristic
   to extend a pre-context beyond the line that matches the "function
   pattern" (aka "diff.*.xfuncname") to include a comment block, if
   exists, that immediately precedes it.

 * "git config --expiry-date gc.reflogexpire" can read "2.weeks" from
   the configuration and report it as a timestamp, just like "--int"
   would read "1k" and report 1024, to help consumption by scripts.

 * The shell completion (in contrib/) learned that "git pull" can take
   the "--autostash" option.

 * The tagnames "git log --decorate" uses to annotate the commits can
   now be limited to subset of available refs with the two additional
   options, --decorate-refs[-exclude]=<pattern>.

 * "git grep" compiled with libpcre2 sometimes triggered a segfault,
   which is being fixed.

 * "git send-email" tries to see if the sendmail program is available
   in /usr/lib and /usr/sbin; extend the list of locations to be
   checked to also include directories on $PATH.

 * "git diff" learned, "--anchored", a variant of the "--patience"
   algorithm, to which the user can specify which 'unique' line to be
   used as anchoring points.

 * The way "git worktree add" determines what branch to create from
   where and checkout in the new worktree has been updated a bit.

 * Ancient part of codebase still shows dots after an abbreviated
   object name just to show that it is not a full object name, but
   these ellipses are confusing to people who newly discovered Git
   who are used to seeing abbreviated object names and find them
   confusing with the range syntax.

 * With a configuration variable rebase.abbreviateCommands set,
   "git rebase -i" produces the todo list with a single-letter
   command names.

 * "git worktree add" learned to run the post-checkout hook, just like
   "git checkout" does, after the initial checkout.

 * "git svn" has been updated to strip CRs in the commit messages, as
   recent versions of Subversion rejects them.

 * "git imap-send" did not correctly quote the folder name when
   making a request to the server, which has been corrected.

 * Error messages from "git rebase" have been somewhat cleaned up.

 * Git has been taught to support an https:// URL used for http.proxy
   when using recent versions of libcurl.

 * "git merge" learned to pay attention to merge.verifySignatures
   configuration variable and pretend as if '--verify-signatures'
   option was given from the command line.

 * "git describe" was taught to dig trees deeper to find a
   <commit-ish>:<path> that refers to a given blob object.


Performance, Internal Implementation, Development Support etc.

 * An earlier update made it possible to use an on-stack in-core
   lockfile structure (as opposed to having to deliberately leak an
   on-heap one).  Many codepaths have been updated to take advantage
   of this new facility.

 * Calling cmd_foo() as if it is a general purpose helper function is
   a no-no.  Correct two instances of such to set an example.

 * We try to see if somebody runs our test suite with a shell that
   does not support "local" like bash/dash does.

 * An early part of piece-by-piece rewrite of "git bisect" in C.

 * GSoC to piece-by-piece rewrite "git submodule" in C.

 * Optimize the code to find shortest unique prefix of object names.

 * Pathspec-limited revision traversal was taught not to keep finding
   unneeded differences once it knows two trees are different inside
   given pathspec.

 * Conversion from uchar[20] to struct object_id continues.

 * Code cleanup.

 * A single-word "unsigned flags" in the diff options is being split
   into a structure with many bitfields.

 * TravisCI build updates.

 * Parts of a test to drive the long-running content filter interface
   has been split into its own module, hopefully to eventually become
   reusable.

 * Drop (perhaps overly cautious) sanity check before using the index
   read from the filesystem at runtime.

 * The build procedure has been taught to avoid some unnecessary
   instability in the build products.

 * A new mechanism to upgrade the wire protocol in place is proposed
   and demonstrated that it works with the older versions of Git
   without harming them.

 * An infrastructure to define what hash function is used in Git is
   introduced, and an effort to plumb that throughout various
   codepaths has been started.

 * The code to iterate over loose object files got optimized.

 * An internal function that was left for backward compatibility has
   been removed, as there is no remaining callers.

 * Historically, the diff machinery for rename detection had a
   hardcoded limit of 32k paths; this is being lifted to allow users
   trade cycles with a (possibly) easier to read result.

 * The tracing infrastructure has been optimized for cases where no
   tracing is requested.

 * In preparation for implementing narrow/partial clone, the object
   walking machinery has been taught a way to tell it to "filter" some
   objects from enumeration.

 * A few structures and variables that are implementation details of
   the decorate API have been renamed and then the API got documented
   better.

 * Assorted updates for TravisCI integration.
   (merge 4f26366679 sg/travis-fixes later to maint).

 * Introduce a helper to simplify code to parse a common pattern that
   expects either "--key" or "--key=<something>".

 * "git version --build-options" learned to report the host CPU and
   the exact commit object name the binary was built from.

Also contains various documentation updates and code clean-ups.


Fixes since v2.15
-----------------

 * "auto" as a value for the columnar output configuration ought to
   judge "is the output consumed by humans?" with the same criteria as
   "auto" for coloured output configuration, i.e. either the standard
   output stream is going to tty, or a pager is in use.  We forgot the
   latter, which has been fixed.

 * The experimental "color moved lines differently in diff output"
   feature was buggy around "ignore whitespace changes" edges, which
   has been corrected.

 * Instead of using custom line comparison and hashing functions to
   implement "moved lines" coloring in the diff output, use the pair
   of these functions from lower-layer xdiff/ code.

 * Some codepaths did not check for errors when asking what branch the
   HEAD points at, which have been fixed.

 * "git commit", after making a commit, did not check for errors when
   asking on what branch it made the commit, which has been corrected.

 * "git status --ignored -u" did not stop at a working tree of a
   separate project that is embedded in an ignored directory and
   listed files in that other project, instead of just showing the
   directory itself as ignored.

 * A broken access to object databases in recent update to "git grep
   --recurse-submodules" has been fixed.

 * A recent regression in "git rebase -i" that broke execution of git
   commands from subdirectories via "exec" instruction has been fixed.

 * A (possibly flakey) test fix.

 * "git check-ref-format --branch @{-1}" bit a "BUG()" when run
   outside a repository for obvious reasons; clarify the documentation
   and make sure we do not even try to expand the at-mark magic in
   such a case, but still call the validation logic for branch names.

 * "git fetch --recurse-submodules" now knows that submodules can be
   moved around in the superproject in addition to getting updated,
   and finds the ones that need to be fetched accordingly.

 * Command line completion (in contrib/) update.

 * Description of blame.{showroot,blankboundary,showemail,date}
   configuration variables have been added to "git config --help".

 * After an error from lstat(), diff_populate_filespec() function
   sometimes still went ahead and used invalid data in struct stat,
   which has been fixed.

 * UNC paths are also relevant in Cygwin builds and they are now
   tested just like Mingw builds.

 * Correct start-up sequence so that a repository could be placed
   immediately under the root directory again (which was broken at
   around Git 2.13).

 * The credential helper for libsecret (in contrib/) has been improved
   to allow possibly prompting the end user to unlock secrets that are
   currently locked (otherwise the secrets may not be loaded).

 * MinGW updates.

 * Error checking in "git imap-send" for empty response has been
   improved.

 * Recent update to the refs infrastructure implementation started
   rewriting packed-refs file more often than before; this has been
   optimized again for most trivial cases.

 * Some error messages did not quote filenames shown in it, which have
   been fixed.

 * "git rebase -i" recently started misbehaving when a submodule that
   is configured with 'submodule.<name>.ignore' is dirty; this has
   been corrected.

 * Building with NO_LIBPCRE1_JIT did not disable it, which has been fixed.

 * We used to add an empty alternate object database to the system
   that does not help anything; it has been corrected.

 * Doc update around use of "format-patch --subject-prefix" etc.

 * A fix for an ancient bug in "git apply --ignore-space-change" codepath.

 * Clarify and enhance documentation for "merge-base --fork-point", as
   it was clear what it computed but not why/what for.

 * A few scripts (both in production and tests) incorrectly redirected
   their error output.  These have been corrected.

 * "git notes" sent its error message to its standard output stream,
   which was corrected.

 * The three-way merge performed by "git cherry-pick" was confused
   when a new submodule was added in the meantime, which has been
   fixed (or "papered over").

 * The sequencer machinery (used by "git cherry-pick A..B", and "git
   rebase -i", among other things) would have lost a commit if stopped
   due to an unlockable index file, which has been fixed.

 * "git apply --inaccurate-eof" when used with "--ignore-space-change"
   triggered an internal sanity check, which has been fixed.

 * Command line completion (in contrib/) has been taught about the
   "--copy" option of "git branch".

 * When "git rebase" prepared an mailbox of changes and fed it to "git
   am" to replay them, it was confused when a stray "From " happened
   to be in the log message of one of the replayed changes.  This has
   been corrected.

 * There was a recent semantic mismerge in the codepath to write out a
   section of a configuration section, which has been corrected.

 * Mentions of "git-rebase" and "git-am" (dashed form) still remained
   in end-user visible strings emitted by the "git rebase" command;
   they have been corrected.

 * Contrary to the documentation, "git pull -4/-6 other-args" did not
   ask the underlying "git fetch" to go over IPv4/IPv6, which has been
   corrected.

 * "git checkout --recursive" may overwrite and rewind the history of
   the branch that happens to be checked out in submodule
   repositories, which might not be desirable.  Detach the HEAD but
   still allow the recursive checkout to succeed in such a case.
   (merge 57f22bf997 sb/submodule-recursive-checkout-detach-head later to maint).

 * "git branch --set-upstream" has been deprecated and (sort of)
   removed, as "--set-upstream-to" is the preferred one these days.
   The documentation still had "--set-upstream" listed on its
   synopsis section, which has been corrected.
   (merge a060f3d3d8 tz/branch-doc-remove-set-upstream later to maint).

 * Internally we use 0{40} as a placeholder object name to signal the
   codepath that there is no such object (e.g. the fast-forward check
   while "git fetch" stores a new remote-tracking ref says "we know
   there is no 'old' thing pointed at by the ref, as we are creating
   it anew" by passing 0{40} for the 'old' side), and expect that a
   codepath to locate an in-core object to return NULL as a sign that
   the object does not exist.  A look-up for an object that does not
   exist however is quite costly with a repository with large number
   of packfiles.  This access pattern has been optimized.
   (merge 87b5e236a1 jk/fewer-pack-rescan later to maint).

 * In addition to "git stash -m message", the command learned to
   accept "git stash -mmessage" form.
   (merge 5675473fcb ph/stash-save-m-option-fix later to maint).

 * @{-N} in "git checkout @{-N}" may refer to a detached HEAD state,
   but the documentation was not clear about it, which has been fixed.
   (merge 75ce149575 ks/doc-checkout-previous later to maint).

 * A regression in the progress eye-candy was fixed.
   (merge 9c5951cacf jk/progress-delay-fix later to maint).

 * The code internal to the recursive merge strategy was not fully
   prepared to see a path that is renamed to try overwriting another
   path that is only different in case on case insensitive systems.
   This does not matter in the current code, but will start to matter
   once the rename detection logic starts taking hints from nearby
   paths moving to some directory and moves a new path along with them.
   (merge 4cba2b0108 en/merge-recursive-icase-removal later to maint).

 * An v2.12-era regression in pathspec match logic, which made it look
   into submodule tree even when it is not desired, has been fixed.
   (merge eef3df5a93 bw/pathspec-match-submodule-boundary later to maint).

 * Amending commits in git-gui broke the author name that is non-ascii
   due to incorrect enconding conversion.

 * Recent update to the submodule configuration code broke "diff-tree"
   by accidentally stopping to read from the index upfront.
   (merge fd66bcc31f bw/submodule-config-cleanup later to maint).

 * Git shows a message to tell the user that it is waiting for the
   user to finish editing when spawning an editor, in case the editor
   opens to a hidden window or somewhere obscure and the user gets
   lost.
   (merge abfb04d0c7 ls/editor-waiting-message later to maint).

 * The "safe crlf" check incorrectly triggered for contents that does
   not use CRLF as line endings, which has been corrected.
   (merge 649f1f0948 tb/check-crlf-for-safe-crlf later to maint).

 * "git clone --shared" to borrow from a (secondary) worktree did not
   work, even though "git clone --local" did.  Both are now accepted.
   (merge b3b05971c1 es/clone-shared-worktree later to maint).

 * The build procedure now allows not just the repositories but also
   the refs to be used to take pre-formatted manpages and html
   documents to install.
   (merge 65289e9dcd rb/quick-install-doc later to maint).

 * Update the shell prompt script (in contrib/) to strip trailing CR
   from strings read from various "state" files.
   (merge 041fe8fc83 ra/prompt-eread-fix later to maint).

 * Other minor doc, test and build updates and code cleanups.
   (merge 1a1fc2d5b5 rd/man-prune-progress later to maint).
   (merge 0ba014035a rd/man-reflog-add-n later to maint).
   (merge e54b63359f rd/doc-notes-prune-fix later to maint).
   (merge ff4c9b413a sp/doc-info-attributes later to maint).
   (merge 7db2cbf4f1 jc/receive-pack-hook-doc later to maint).
   (merge 5a0526264b tg/t-readme-updates later to maint).
   (merge 5e83cca0b8 jk/no-optional-locks later to maint).
   (merge 826c778f7c js/hashmap-update-sample later to maint).
   (merge 176b2d328c sg/setup-doc-update later to maint).
   (merge 1b09073514 rs/am-builtin-leakfix later to maint).
   (merge addcf6cfde rs/fmt-merge-msg-string-leak-fix later to maint).
   (merge c3ff8f6c14 rs/strbuf-read-once-reset-length later to maint).
   (merge 6b0eb884f9 db/doc-workflows-neuter-the-maintainer later to maint).
   (merge 8c87bdfb21 jk/cvsimport-quoting later to maint).
   (merge 176cb979fe rs/fmt-merge-msg-leakfix later to maint).
   (merge 5a03360e73 tb/delimit-pretty-trailers-args-with-comma later to maint).
   (merge d0e6326026 ot/pretty later to maint).
   (merge 44103f4197 sb/test-helper-excludes later to maint).
   (merge 170078693f jt/transport-no-more-rsync later to maint).
   (merge c07b3adff1 bw/path-doc later to maint).
   (merge bf9d7df950 tz/lib-git-svn-svnserve-tests later to maint).
   (merge dec366c9a8 sr/http-sslverify-config-doc later to maint).

----------------------------------------------------------------

Changes since v2.15.0 are as follows:

Adam Dinwoodie (3):
      t5580: add Cygwin support
      rebase -i: fix comment typo
      doc/SubmittingPatches: correct subject guidance

Albert Astals Cid (1):
      completion: add --autostash and --no-autostash to pull

Alex Vandiver (7):
      fsmonitor: read entirety of watchman output
      fsmonitor: set the PWD to the top of the working tree
      fsmonitor: don't bother pretty-printing JSON from watchman
      fsmonitor: document GIT_TRACE_FSMONITOR
      fsmonitor: delay updating state until after split index is merged
      fsmonitor: read from getcwd(), not the PWD environment variable
      fsmonitor: store fsmonitor bitmap before splitting index

Anders Kaseorg (1):
      git-gui: sort entries in optimized tclIndex

Andrey Okoshkin (3):
      commit: check result of resolve_ref_unsafe
      diff: fix lstat() error handling in diff_populate_filespec()
      merge-recursive: check GIT_MERGE_VERBOSITY only once

Ann T Ropea (7):
      Documentation: revisions: fix typo: "three dot" ---> "three-dot" (in line with "two-dot").
      Documentation: user-manual: limit usage of ellipsis
      print_sha1_ellipsis: introduce helper
      checkout: describe_detached_head: remove ellipsis after committish
      t4013: prepare for upcoming "diff --raw --abbrev" output format change
      diff: diff_aligned_abbrev: remove ellipsis after abbreviated SHA-1 value
      t4013: test new output from diff --abbrev --raw

Antoine Beaupré (6):
      remote-mediawiki: limit filenames to legal
      remote-mediawiki: show known namespace choices on failure
      remote-mediawiki: skip virtual namespaces
      remote-mediawiki: support fetching from (Main) namespace
      remote-mediawiki: process namespaces in order
      remote-mediawiki: show progress while fetching namespaces

Beat Bolli (1):
      contrib/git-jump: allow to configure the grep command

Ben Peart (16):
      bswap: add 64 bit endianness helper get_be64
      preload-index: add override to enable testing preload-index
      update-index: add a new --force-write-index option
      fsmonitor: teach git to optionally utilize a file system monitor to speed up detecting new or changed files.
      fsmonitor: add documentation for the fsmonitor extension.
      ls-files: Add support in ls-files to display the fsmonitor valid bit
      update-index: add fsmonitor support to update-index
      fsmonitor: add a test tool to dump the index extension
      split-index: disable the fsmonitor extension when running the split index test
      fsmonitor: add test cases for fsmonitor extension
      fsmonitor: add a sample integration script for Watchman
      fsmonitor: add a performance test
      fsmonitor: MINGW support for watchman integration
      fsmonitor: preserve utf8 filenames in fsmonitor-watchman log
      read_index_from(): speed index loading by skipping verification of the entry order
      fsmonitor: simplify determining the git worktree under Windows

Brandon Williams (24):
      pkt-line: add packet_write function
      protocol: introduce protocol extension mechanisms
      daemon: recognize hidden request arguments
      upload-pack, receive-pack: introduce protocol version 1
      connect: teach client to recognize v1 server response
      connect: tell server that the client understands v1
      http: tell server that the client understands v1
      i5700: add interop test for protocol transition
      ssh: introduce a 'simple' ssh variant
      add, reset: use DIFF_OPT_SET macro to set a diff flag
      diff: convert flags to be stored in bitfields
      diff: add flag to indicate textconv was set via cmdline
      diff: remove touched flags
      diff: remove DIFF_OPT_TST macro
      diff: remove DIFF_OPT_SET macro
      diff: remove DIFF_OPT_CLR macro
      diff: make struct diff_flags members lowercase
      wt-status: actually ignore submodules when requested
      pathspec: only match across submodule boundaries when requested
      diff-tree: read the index so attribute checks work in bare repositories
      submodule: convert stage_updated_gitmodules to take a struct index_state
      submodule: used correct index in is_staging_gitmodules_ok
      submodule: convert get_next_submodule to not rely on the_index
      path: document path functions

Carlos Martín Nieto (1):
      diff: --indent-heuristic is no longer experimental

Charles Bailey (2):
      t4201: make use of abbreviation in the test more robust
      grep: fix NO_LIBPCRE1_JIT to fully disable JIT

Christian Couder (24):
      perf/run: add '--config' option to the 'run' script
      perf/run: add get_var_from_env_or_config()
      perf/run: add GIT_PERF_DIRS_OR_REVS
      perf/run: add calls to get_var_from_env_or_config()
      perf/run: add get_subsections()
      perf/run: update get_var_from_env_or_config() for subsections
      perf/run: add run_subsection()
      perf/run: show name of rev being built
      perf: store subsection results in "test-results/$GIT_PERF_SUBSECTION/"
      t0021/rot13-filter: fix list comparison
      t0021/rot13-filter: refactor packet reading functions
      t0021/rot13-filter: improve 'if .. elsif .. else' style
      t0021/rot13-filter: improve error message
      t0021/rot13-filter: add packet_initialize()
      t0021/rot13-filter: refactor checking final lf
      t0021/rot13-filter: add capability functions
      Git/Packet.pm: extract parts of t0021/rot13-filter.pl for reuse
      Git/Packet: clarify that packet_required_key_val_read allows EOF
      Git/Packet.pm: use 'if' instead of 'unless'
      list-objects-filter-options: fix 'keword' typo in comment
      git-compat-util: introduce skip_to_optional_arg()
      index-pack: use skip_to_optional_arg()
      diff: use skip_to_optional_arg()
      diff: use skip_to_optional_arg_default()

Damien Marié (1):
      run-command: add hint when a hook is ignored

Daniel Bensoussan (1):
      doc: reword gitworkflows.txt for neutrality

Dennis Kaarsemaker (1):
      credential-libsecret: unlock locked secrets

Derrick Stolee (5):
      p4211-line-log.sh: add log --online --raw --parents perf test
      sha1_name: unroll len loop in find_unique_abbrev_r()
      sha1_name: parse less while finding common prefix
      sha1_name: minimize OID comparisons during disambiguation
      sha1_file: use strbuf_add() instead of strbuf_addf()

Elijah Newren (7):
      sequencer: warn when internal merge may be suboptimal due to renameLimit
      merge-recursive: handle addition of submodule on our side of history
      progress: fix progress meters when dealing with lots of work
      diff: remove silent clamp of renameLimit
      sequencer: show rename progress during cherry picks
      merge-recursive: ignore_case shouldn't reject intentional removals
      strbuf: remove unused stripspace function alias

Emily Xie (1):
      pathspec: die on empty strings as pathspec

Eric Sunshine (3):
      worktree: invoke post-checkout hook (unless --no-checkout)
      clone: support 'clone --shared' from a worktree
      version --build-options: also report host CPU

Eric Wong (2):
      rebase: use mboxrd format to avoid split errors
      git-svn: convert CRLF to LF in commit message to SVN

Florian Klink (1):
      git-send-email: honor $PATH for sendmail binary

Gennady Kupava (2):
      trace: remove trace key normalization
      trace: improve performance while category is disabled

Guillaume Castagnino (1):
      gitweb: use filetest to allow ACLs

Haaris Mehmood (1):
      config: add --expiry-date

Hans Jerry Illikainen (2):
      merge: add config option for verifySignatures
      t: add tests for pull --verify-signatures

Heiko Voigt (3):
      fetch: add test to make sure we stay backwards compatible
      implement fetching of moved submodules
      submodule: simplify decision tree whether to or not to fetch

Ingo Ruhnke (1):
      remote-mediawiki: allow fetching namespaces with spaces

J Wyman (1):
      for-each-ref: let upstream/push report the remote ref name

Jacob Keller (2):
      sequencer: pass absolute GIT_DIR to exec commands
      diff: add tests for --relative without optional prefix value

Jakub Bereżański (2):
      t0302: check helper can handle empty credentials
      wincred: handle empty username/password correctly

Jameson Miller (4):
      status: add option to show ignored files differently
      status: report matching ignored and normal untracked
      status: document options to show matching ignored files
      status: test ignored modes

Jean Carlo Machado (1):
      fix typos in 2.15.0 release notes

Jean-Noel Avila (1):
      submodule--helper.c: i18n: add a missing space in message

Jeff Hostetler (9):
      dir: allow exclusions from blob in addition to file
      oidmap: add oidmap iterator methods
      oidset: add iterator methods to oidset
      list-objects: filter objects in traverse_commit_list
      rev-list: add list-objects filtering support
      pack-objects: add list-objects filtering
      list-objects-filter-options: support --no-filter
      rev-list: support --no-filter argument
      partial-clone: design doc

Jeff King (22):
      revision: quit pruning diff more quickly when possible
      t4015: refactor --color-moved whitespace test
      t4015: check "negative" case for "-w --color-moved"
      t4015: test the output of "diff --color-moved -b"
      diff: fix whitespace-skipping with --color-moved
      diff: handle NULs in get_string_hash()
      test-ref-store: avoid passing NULL to printf
      remote: handle broken symrefs
      log: handle broken HEAD in decoration check
      worktree: handle broken symrefs in find_shared_symref()
      setup: avoid double slashes when looking for HEAD
      link_alt_odb_entries: make empty input a noop
      git-jump: give contact instructions in the README
      p5550: factor out nonsense-pack creation
      t/perf/lib-pack: use fast-import checkpoint to create packs
      p5551: add a script to test fetch pack-dir rescans
      everything_local: use "quick" object existence check
      sha1_file: fast-path null sha1 as a missing object
      git-status.txt: mention --no-optional-locks
      progress: set default delay threshold to 100%, not 0%
      docs/pretty-formats: mention commas in %(trailers) syntax
      cvsimport: apply shell-quoting regex globally

Johannes Schindelin (9):
      for-each-ref: let upstream/push optionally report the remote name
      status: do not get confused by submodules in excluded directories
      mingw: include the full version information in the resources
      mingw: add experimental feature to redirect standard handles
      mingw: optionally redirect stderr/stdout via the same handle
      mingw: document the standard handle redirection
      for-each-ref: test :remotename and :remoteref
      hashmap: adjust documentation to reflect reality
      version --build-options: report commit, too, if possible

Jonathan Nieder (10):
      ssh test: make copy_ssh_wrapper_as clean up after itself
      connect: move no_fork fallback to git_tcp_connect
      connect: split git:// setup into a separate function
      connect: split ssh command line options into separate function
      connect: split ssh option computation to its own function
      ssh: 'auto' variant to select between 'ssh' and 'simple'
      ssh: 'simple' variant does not support -4/-6
      ssh: 'simple' variant does not support --port
      connect: correct style of C-style comment
      generate-cmdlist: avoid non-deterministic output

Jonathan Tan (10):
      connect: in ref advertisement, shallows are last
      Documentation: document Extra Parameters
      Tests: clean up and document submodule helpers
      Tests: clean up submodule recursive helpers
      diff: support anchoring line(s)
      diffcore-rename: make diff-tree -l0 mean -l<large>
      decorate: clean up and document API
      transport: remove unused "push" in vtable
      clone, fetch: remove redundant transport check
      transport: make transport vtable more private

Junio C Hamano (37):
      t0027: do not use an empty string as a pathspec element
      describe: do not use cmd_*() as a subroutine
      merge-ours: do not use cmd_*() as a subroutine
      branch: streamline "attr_only" handling in validate_new_branchname()
      branch: split validate_new_branchname() into two
      t5601: rm the target file of cp that could still be executing
      check-ref-format --branch: do not expand @{...} outside repository
      check-ref-format --branch: strip refs/heads/ using skip_prefix
      check-ref-format doc: --branch validates and expands <branch>
      column: do not include pager.c
      xdiff: reassign xpparm_t.flags bits
      The first batch for 2.16
      RelNotes: the second batch post 2.15 comes
      diff: --ignore-cr-at-eol
      merge-base --fork-point doc: clarify the example and failure modes
      RelNotes: the third batch for 2.16
      branch: correctly reject refs/heads/{-dash,HEAD}
      Start preparation for 2.15.1
      RelNotes: the fourth batch for 2.16
      Almost ready for 2.15.1
      RelNotes: the fifth batch for 2.16
      hooks doc: clarify when receive-pack invokes its hooks
      A bit more fixes for 2.15.1
      RelNotes: the sixth batch for 2.16
      Git 2.15.1
      RelNotes: the seventh batch
      t2020: test variations that matter
      Prepare for 2.15.2
      RelNotes: the eighth batch
      diff: use skip_to_optional_arg_default() in parsing --relative
      t4045: reindent to make helpers readable
      RelNotes: the ninth batch
      RelNotes: the tenth batch
      t5573, t7612: clean up after unexpected success of 'pull' and 'merge'
      sequencer.c: drop 'const' from function return type
      RelNotes: the eleventh batch
      Git 2.16-rc0

Kaartic Sivaraam (12):
      mailmap: use Kaartic Sivaraam's new address
      builtin/branch: remove redundant check for HEAD
      git-rebase: clean up dashed-usages in messages
      Doc/checkout: checking out using @{-N} can lead to detached state
      branch: improve documentation and naming of create_branch() parameters
      branch: group related arguments of create_branch()
      branch: update warning message shown when copying a misnamed branch
      builtin/branch: strip refs/heads/ using skip_prefix
      Doc/check-ref-format: clarify information about @{-N} syntax
      rebase: consistently use branch_name variable
      rebase: distinguish user input by quoting it
      rebase: rebasing can also be done when HEAD is detached

Kevin (1):
      remote-mediawiki: add namespace support

Kevin Daudt (1):
      column: show auto columns when pager is active

Lars Schneider (3):
      refactor "dumb" terminal determination
      progress: drop delay-threshold code
      launch_editor(): indicate that Git waits for user input

Liam Beguin (9):
      Documentation: move rebase.* configs to new file
      Documentation: use preferred name for the 'todo list' script
      rebase -i: set commit to null in exec commands
      rebase -i: refactor transform_todo_ids
      rebase -i: replace reference to sha1 with oid
      rebase -i: update functions to use a flags parameter
      rebase -i -x: add exec commands via the rebase--helper
      rebase -i: learn to abbreviate command names
      t3404: add test case for abbreviated commands

Marius Paliga (1):
      builtin/push.c: add push.pushOption config

Martin Ågren (22):
      sha1_file: do not leak `lock_file`
      treewide: prefer lockfiles on the stack
      lockfile: fix documentation on `close_lock_file_gently()`
      tempfile: fix documentation on `delete_tempfile()`
      checkout-index: simplify locking logic
      cache-tree: simplify locking logic
      apply: move lockfile into `apply_state`
      apply: remove `newfd` from `struct apply_state`
      cache.h: document `write_locked_index()`
      read-cache: drop explicit `CLOSE_LOCK`-flag
      read-cache: leave lock in right state in `write_locked_index()`
      read_cache: roll back lock in `update_index_if_able()`
      grep: take the read-lock when adding a submodule
      bisect: change calling-convention of `find_bisection()`
      bisect: fix memory leak in `find_bisection()`
      bisect: fix off-by-one error in `best_bisection_sorted()`
      bisect: fix memory leak when returning best element
      builtin/merge-base: free commit lists
      reduce_heads: fix memory leaks
      t7006: add tests for how git branch paginates
      branch: respect `pager.branch` in list-mode only
      branch: change default of `pager.branch` to "on"

Michael Haggerty (12):
      t1409: check that `packed-refs` is not rewritten unnecessarily
      files-backend: don't rewrite the `packed-refs` file unnecessarily
      t0000: check whether the shell supports the "local" keyword
      files_transaction_prepare(): don't leak flags to packed transaction
      prune_ref(): call `ref_transaction_add_update()` directly
      ref_transaction_update(): die on disallowed flags
      ref_transaction_add_update(): remove a check
      refs: tidy up and adjust visibility of the `ref_update` flags
      refs: rename constant `REF_NODEREF` to `REF_NO_DEREF`
      refs: rename constant `REF_ISPRUNING` to `REF_IS_PRUNING`
      write_packed_entry(): take `object_id` arguments
      refs: update some more docs to use "oid" rather than "sha1"

Nicolas Morey-Chaisemartin (1):
      imap-send: URI encode server folder

Olga Telezhnaya (2):
      format: create pretty.h file
      format: create docs for pretty.h

Phil Hord (2):
      doc: prefer 'stash push' over 'stash save'
      stash: learn to parse -m/--message like commit does

Phillip Wood (2):
      config: avoid "write_in_full(fd, buf, len) != len" pattern
      sequencer: reschedule pick if index can't be locked

Pranit Bauva (6):
      bisect--helper: use OPT_CMDMODE instead of OPT_BOOL
      bisect--helper: rewrite `check_term_format` shell function in C
      bisect--helper: `write_terms` shell function in C
      bisect--helper: `bisect_clean_state` shell function in C
      t6030: explicitly test for bisection cleanup
      bisect--helper: `is_expected_rev` & `check_expected_revs` shell function in C

Prathamesh Chavan (3):
      submodule--helper: introduce get_submodule_displaypath()
      submodule--helper: introduce for_each_listed_submodule()
      submodule: port submodule subcommand 'status' from shell to C

Rafael Ascensão (1):
      log: add option to choose which refs to decorate

Ramsay Jones (1):
      repository: fix a sparse 'using integer as NULL pointer' warning

Randall S. Becker (1):
      install-doc-quick: allow specifying what ref to install

Rasmus Villemoes (2):
      Documentation/config: add sendemail.tocmd to list preceding "See git-send-email(1)"
      completion: add git config sendemail.tocmd

René Scharfe (21):
      notes: move hex_to_bytes() to hex.c and export it
      http-push: use hex_to_bytes()
      sha1_file: use hex_to_bytes()
      sequencer: factor out rewrite_file()
      sequencer: use O_TRUNC to truncate files
      imap-send: handle NULL return of next_arg()
      imap-send: handle missing response codes gracefully
      apply: avoid out-of-bounds access in fuzzy_matchlines()
      apply: update line lengths for --inaccurate-eof
      config: flip return value of write_section()
      t4051: add test for comments preceding function lines
      xdiff: factor out is_func_rec()
      xdiff: show non-empty lines before functions with -W
      t7810: improve check of -W with user-defined function lines
      grep: update boundary variable for pre-context
      grep: show non-empty lines before functions with -W
      am: release strbuf after use in split_mail_mbox()
      fmt-merge-msg: avoid leaking strbuf in shortlog()
      strbuf: release memory on read error in strbuf_read_once()
      transport-helper: plug strbuf and string_list leaks
      p7519: improve check for prerequisite WATCHMAN

Robert Abel (2):
      git-prompt: make __git_eread intended use explicit
      git-prompt: fix reading files with windows line endings

Robert P. J. Day (4):
      bisect: mention "view" as an alternative to "visualize"
      doc: add missing "-n" (dry-run) option to reflog man page
      prune: add "--progress" to man page and usage msg
      notes: correct 'git notes prune' options to '[-n] [-v]'

SZEDER Gábor (7):
      travis-ci: fix running P4 and Git LFS tests in Linux build jobs
      travis-ci: don't build Git for the static analysis job
      setup.c: fix comment about order of .git directory discovery
      travis-ci: introduce a $jobname variable for 'ci/*' scripts
      travis-ci: move setting environment variables to 'ci/lib-travisci.sh'
      travis-ci: set GIT_TEST_HTTPD in 'ci/lib-travisci.sh'
      travis-ci: use 'set -x' in 'ci/*' scripts for extra tracing output

Shuyu Wei (1):
      pull: pass -4/-6 option to 'git fetch'

Simon Ruderich (3):
      sequencer.c: check return value of close() in rewrite_file()
      wrapper.c: consistently quote filenames in error messages
      config: document default value of http.sslVerify

Stefan Beller (15):
      recursive submodules: detach HEAD from new state
      Documentation/checkout: clarify submodule HEADs to be detached
      xdiff-interface: export comparing and hashing strings
      diff.c: get rid of duplicate implementation
      t6120: fix typo in test name
      list-objects.c: factor out traverse_trees_and_blobs
      config: document blame configuration
      t/3512: demonstrate unrelated submodule/file conflict as cherry-pick failure
      revision.h: introduce blob/tree walking in order of the commits
      builtin/describe.c: rename `oid` to avoid variable shadowing
      builtin/describe.c: print debug statements earlier
      builtin/describe.c: factor out describe_commit
      Documentation/git-clone: improve description for submodule recursing
      t/helper: ignore everything but sources
      builtin/describe.c: describe a blob

Steffen Prohaska (1):
      doc: Mention info/attributes in gitrepository-layout

Stephan Beyer (1):
      bisect run: die if no command is given

Thomas Braun (1):
      completion: add remaining flags to checkout

Thomas Gummerer (11):
      stash: replace "git stash save" with "git stash push" in the documentation
      stash: mark "git stash save" deprecated in the man page
      stash: remove now superfluos help for "stash push"
      checkout: factor out functions to new lib file
      worktree: add can be created from any commit-ish
      worktree: add --[no-]track option to the add subcommand
      worktree: make add <path> <branch> dwim
      t/README: remove mention of adding copyright notices
      t/README: document test_cmp_rev
      worktree: add --guess-remote flag to add subcommand
      add worktree.guessRemote config option

Todd Zullinger (11):
      Replace Free Software Foundation address in license notices
      Replace Free Software Foundation address in license notices
      t/lib-gpg: fix gpgconf stderr redirect to /dev/null
      rebase: fix stderr redirect in apply_autostash()
      notes: send "Automatic notes merge failed" messages to stderr
      branch doc: remove --set-upstream from synopsis
      completion: add '--copy' option to 'git branch'
      RelNotes: minor typo fixes in 2.15.1 draft
      t/lib-git-svn: cleanup inconsistent tab/space usage
      t/lib-git-svn.sh: improve svnserve tests with parallel make test
      RelNotes: minor typo fixes in 2.16.0 draft

Torsten Bögershausen (3):
      add: introduce "--renormalize"
      convert: tighten the safe autocrlf handling
      t0027: Adapt the new MIX tests to Windows

W. Trevor King (1):
      pull: pass --signoff/--no-signoff to "git merge"

Wei Shuyu (1):
      http: support CURLPROXY_HTTPS

brian m. carlson (31):
      walker: convert to struct object_id
      refs/files-backend: convert struct ref_to_prune to object_id
      refs: convert delete_ref and refs_delete_ref to struct object_id
      refs: convert update_ref and refs_update_ref to use struct object_id
      refs: prevent accidental NULL dereference in write_pseudoref
      refs: update ref transactions to use struct object_id
      Convert check_connected to use struct object_id
      refs: convert resolve_refdup and refs_resolve_refdup to struct object_id
      refs: convert read_ref and read_ref_full to object_id
      refs: convert dwim_ref and expand_ref to struct object_id
      builtin/reflog: convert remaining unsigned char uses to object_id
      refs: convert dwim_log to struct object_id
      pack-bitmap: convert traverse_bitmap_commit_list to object_id
      builtin/pack-objects: convert to struct object_id
      refs: convert peel_ref to struct object_id
      refs: convert read_ref_at to struct object_id
      refs: convert reflog_expire parameter to struct object_id
      sha1_file: convert index_path and index_fd to struct object_id
      Convert remaining callers of resolve_gitlink_ref to object_id
      refs: convert resolve_gitlink_ref to struct object_id
      worktree: convert struct worktree to object_id
      refs: convert resolve_ref_unsafe to struct object_id
      refs: convert peel_object to struct object_id
      refs: convert read_raw_ref backends to struct object_id
      refs/files-backend: convert static functions to object_id
      Documentation: enable compat-mode for Asciidoctor
      setup: expose enumerated repo info
      Add structure representing hash algorithm
      Integrate hash algorithm support with repo setup
      Switch empty tree and blob lookups to use hash abstraction
      Documentation: convert SubmittingPatches to AsciiDoc

Ævar Arnfjörð Bjarmason (2):
      test-lib: add LIBPCRE1 & LIBPCRE2 prerequisites
      grep: fix segfault under -P + PCRE2 <=10.30 + (*NO_JIT)

Łukasz Stelmach (1):
      git-gui: prevent double UTF-8 conversion


^ permalink raw reply	[relevance 2%]

* RE: [PATCH] git-svn: convert CRLF to LF in commit message to SVN
  2017-12-14  0:20  5% ` [PATCH] git-svn: convert CRLF to LF in commit message to SVN Eric Wong
@ 2017-12-14 20:46  4%   ` Bennett, Brian
  0 siblings, 0 replies; 162+ results
From: Bennett, Brian @ 2017-12-14 20:46 UTC (permalink / raw)
  To: Eric Wong, Junio C Hamano; +Cc: git@vger.kernel.org

Thank you for your fast response,

I haven't done a build of this type before (so I could test the patch first) so I'm trying to do that and get this far:
1. git clone https://github.com/msysgit/msysgit.git "c:\temp\git\guitbuild"
2. git clone https://github.com/git-for-windows/git.git "c:\temp\git\guitbuild\git"
3. c:\temp\git\guitbuild\msys.bat
-------------------------------------------------------
Building and Installing Git
-------------------------------------------------------
    CC archive-tar.o
In file included from run-command.h:5,
                 from archive-tar.c:9:
compat/win32/pthread.h:38: error: expected ')' before 'ConditionVariable'
compat/win32/pthread.h:40: error: expected ')' before 'ConditionVariable'
compat/win32/pthread.h:42: error: expected ')' before 'ConditionVariable'
compat/win32/pthread.h:44: error: expected ')' before 'ConditionVariable'
make: *** [archive-tar.o] Error 1

The applicable lines from compat/win32/pthread.h:
37: WINBASEAPI VOID WINAPI
38: InitializeConditionVariable(PCONDITION_VARIABLE ConditionVariable);
39: WINBASEAPI VOID WINAPI
40: WakeConditionVariable(PCONDITION_VARIABLE ConditionVariable);
41: WINBASEAPI VOID WINAPI
42: WakeAllConditionVariable(PCONDITION_VARIABLE ConditionVariable);
43: WINBASEAPI BOOL WINAPI
44: SleepConditionVariableCS(PCONDITION_VARIABLE ConditionVariable,
45:                         PCRITICAL_SECTION CriticalSection,
46:                         DWORD dwMilliseconds);

I don't want to drag out testing the patch, so if either of you are able to quickly guide me on what I am doing incorrectly I am willing to get the build done so I can test it. If not, could one of you build with the patch and somehow get that to me so I could test?

Brian Bennett | Supv System Admin & Support, TA TECH Change Mgmt/Production Support
o: 319-355-7602 | c: 319-533-1094
e: brian.bennett@transamerica.com | w: www.transamerica.com

Transamerica
6400 C St. SW, Cedar Rapids, IA 52404 MS-2410
Facebook | LinkedIn

-----Original Message-----
From: Eric Wong [mailto:e@80x24.org] 
Sent: Wednesday, December 13, 2017 6:21 PM
To: Bennett, Brian <Brian.Bennett@Transamerica.com>; Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: [PATCH] git-svn: convert CRLF to LF in commit message to SVN

"Bennett, Brian" <Brian.Bennett@Transamerica.com> wrote:
> Environment:
> 
> Desktop: Windows 7 Enterprise 64-bit
> svn client (if applicable): 1.8.8 from Apache git 
> (https://urldefense.proofpoint.com/v2/url?u=https-3A__git-2Dfor-2Dwind
> ows.github.io_&d=DwIBaQ&c=9g4MJkl2VjLjS6R4ei18BA&r=CorEYR_fG6hKwP1xRO7
> dkFFJM6UfxLGgypqJT0q3mO4&m=f1K2uzEyLbtIX-0te07VlclknjdUztTvbgDMA0thROs
> &s=3AqxH_SEQG48PhnwuCD8udYta0mqXfgKKlmAWMfSlfE&e=): git version 
> 2.10.1.windows.1 GitTfs 
> (https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_git-2
> Dtfs_git-2Dtfs&d=DwIBaQ&c=9g4MJkl2VjLjS6R4ei18BA&r=CorEYR_fG6hKwP1xRO7
> dkFFJM6UfxLGgypqJT0q3mO4&m=f1K2uzEyLbtIX-0te07VlclknjdUztTvbgDMA0thROs
> &s=C2gZ6zgihigH5eMpa5UVgj1mglbQbGN1HG0blMqjmsY&e=): git-tfs version 
> 0.27.0.0 (TFS client library 14.0.0.0 (MS)) (32-bit) Team Foundation 
> Server: 2010 Visual Studio installation: 2010 and 2015

<snip>

Thanks for the report and research!

> I've researched enough to believe that the commit message being used 
> by git svn contains a carriage return character
> (x'0D') and that has not been allowed in Subversion since version 1.6 
> (I can replicate this specific error message using an SVN dump file 
> that contains x'0D' characters in the log messages.). However, I 
> cannot find where I have any control over the log message that git svn 
> is trying to use nor can I observe it. Note that I've also used the 
> '-v' switch with the 'git svn dcommit', but do not receive anything 
> other than what I am showing above.

Maybe git-for-windows isn't filtering CRLF into LF as "git commit"
does on GNU/Linux when the original commit was made?

I had to use "git commit-tree" to reproduce the error in testing (instead of "git commit)"

Anyways, the one-line fix below should be enough for you.
Care to give it a shot?  Thanks again.


Junio: please pull when Brian confirms, thanks.

The following changes since commit 95ec6b1b3393eb6e26da40c565520a8db9796e9f:

  RelNotes: the eighth batch (2017-12-06 09:29:50 -0800)

are available in the git repository at:

  git://bogomips.org/git-svn.git svn-crlf

for you to fetch changes up to 95450bbbaaacaf2d603a4fbded25d55243dfb291:

  git-svn: convert CRLF to LF in commit message to SVN (2017-12-14 00:09:38 +0000)

----------------------------------------------------------------
Eric Wong (1):
      git-svn: convert CRLF to LF in commit message to SVN

 git-svn.perl                    |  1 +
 t/t9169-git-svn-dcommit-crlf.sh | 27 +++++++++++++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100755 t/t9169-git-svn-dcommit-crlf.sh

------8<--------
Subject: [PATCH] git-svn: convert CRLF to LF in commit message to SVN

Subversion since 1.6 does not accept CR characters in the commit message, so filter it out on our end before 'git svn dcommit' sets the svn:log property.

Reported-by: Brian Bennett <Brian.Bennett@Transamerica.com>
Signed-off-by: Eric Wong <e@80x24.org>
---
 git-svn.perl                    |  1 +
 t/t9169-git-svn-dcommit-crlf.sh | 27 +++++++++++++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100755 t/t9169-git-svn-dcommit-crlf.sh

diff --git a/git-svn.perl b/git-svn.perl index d2404184ba..aa242d4f4f 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -1865,6 +1865,7 @@ sub get_commit_entry {
 			}
 		}
 		$msgbuf =~ s/\s+$//s;
+		$msgbuf =~ s/\r\n/\n/sg; # SVN 1.6+ disallows CRLF
 		if ($Git::SVN::_add_author_from && defined($author)
 		    && !$saw_from) {
 			$msgbuf .= "\n\nFrom: $author";
diff --git a/t/t9169-git-svn-dcommit-crlf.sh b/t/t9169-git-svn-dcommit-crlf.sh new file mode 100755 index 0000000000..54b1f61a2a
--- /dev/null
+++ b/t/t9169-git-svn-dcommit-crlf.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+test_description='git svn dcommit CRLF'
+. ./lib-git-svn.sh
+
+test_expect_success 'setup commit repository' '
+	svn_cmd mkdir -m "$test_description" "$svnrepo/dir" &&
+	git svn clone "$svnrepo" work &&
+	(
+		cd work &&
+		echo foo >>foo &&
+		git update-index --add foo &&
+		printf "a\\r\\n\\r\\nb\\r\\nc\\r\\n" >cmt &&
+		p=$(git rev-parse HEAD) &&
+		t=$(git write-tree) &&
+		cmt=$(git commit-tree -p $p $t <cmt) &&
+		git update-ref refs/heads/master $cmt &&
+		git cat-file commit HEAD | tail -n4 >out &&
+		test_cmp cmt out &&
+		git svn dcommit &&
+		printf "a\\n\\nb\\nc\\n" >exp &&
+		git cat-file commit HEAD | sed -ne 6,9p >out &&
+		test_cmp exp out
+	)
+'
+
+test_done
--
EW

^ permalink raw reply	[relevance 4%]

* [PATCH] git-svn: convert CRLF to LF in commit message to SVN
  @ 2017-12-14  0:20  5% ` Eric Wong
  2017-12-14 20:46  4%   ` Bennett, Brian
  0 siblings, 1 reply; 162+ results
From: Eric Wong @ 2017-12-14  0:20 UTC (permalink / raw)
  To: Bennett, Brian, Junio C Hamano; +Cc: git

"Bennett, Brian" <Brian.Bennett@Transamerica.com> wrote:
> Environment:
> 
> Desktop: Windows 7 Enterprise 64-bit
> svn client (if applicable): 1.8.8 from Apache
> git (https://git-for-windows.github.io/): git version 2.10.1.windows.1
> GitTfs (https://github.com/git-tfs/git-tfs): git-tfs version 0.27.0.0 (TFS client library 14.0.0.0 (MS)) (32-bit)
> Team Foundation Server: 2010
> Visual Studio installation: 2010 and 2015

<snip>

Thanks for the report and research!

> I've researched enough to believe that the commit message
> being used by git svn contains a carriage return character
> (x'0D') and that has not been allowed in Subversion since
> version 1.6 (I can replicate this specific error message using
> an SVN dump file that contains x'0D' characters in the log
> messages.). However, I cannot find where I have any control
> over the log message that git svn is trying to use nor can I
> observe it. Note that I've also used the '-v' switch with the
> 'git svn dcommit', but do not receive anything other than what
> I am showing above.

Maybe git-for-windows isn't filtering CRLF into LF as "git commit"
does on GNU/Linux when the original commit was made?

I had to use "git commit-tree" to reproduce the error in testing
(instead of "git commit)"

Anyways, the one-line fix below should be enough for you.
Care to give it a shot?  Thanks again.


Junio: please pull when Brian confirms, thanks.

The following changes since commit 95ec6b1b3393eb6e26da40c565520a8db9796e9f:

  RelNotes: the eighth batch (2017-12-06 09:29:50 -0800)

are available in the git repository at:

  git://bogomips.org/git-svn.git svn-crlf

for you to fetch changes up to 95450bbbaaacaf2d603a4fbded25d55243dfb291:

  git-svn: convert CRLF to LF in commit message to SVN (2017-12-14 00:09:38 +0000)

----------------------------------------------------------------
Eric Wong (1):
      git-svn: convert CRLF to LF in commit message to SVN

 git-svn.perl                    |  1 +
 t/t9169-git-svn-dcommit-crlf.sh | 27 +++++++++++++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100755 t/t9169-git-svn-dcommit-crlf.sh

------8<--------
Subject: [PATCH] git-svn: convert CRLF to LF in commit message to SVN

Subversion since 1.6 does not accept CR characters in the commit
message, so filter it out on our end before 'git svn dcommit' sets
the svn:log property.

Reported-by: Brian Bennett <Brian.Bennett@Transamerica.com>
Signed-off-by: Eric Wong <e@80x24.org>
---
 git-svn.perl                    |  1 +
 t/t9169-git-svn-dcommit-crlf.sh | 27 +++++++++++++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100755 t/t9169-git-svn-dcommit-crlf.sh

diff --git a/git-svn.perl b/git-svn.perl
index d2404184ba..aa242d4f4f 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -1865,6 +1865,7 @@ sub get_commit_entry {
 			}
 		}
 		$msgbuf =~ s/\s+$//s;
+		$msgbuf =~ s/\r\n/\n/sg; # SVN 1.6+ disallows CRLF
 		if ($Git::SVN::_add_author_from && defined($author)
 		    && !$saw_from) {
 			$msgbuf .= "\n\nFrom: $author";
diff --git a/t/t9169-git-svn-dcommit-crlf.sh b/t/t9169-git-svn-dcommit-crlf.sh
new file mode 100755
index 0000000000..54b1f61a2a
--- /dev/null
+++ b/t/t9169-git-svn-dcommit-crlf.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+test_description='git svn dcommit CRLF'
+. ./lib-git-svn.sh
+
+test_expect_success 'setup commit repository' '
+	svn_cmd mkdir -m "$test_description" "$svnrepo/dir" &&
+	git svn clone "$svnrepo" work &&
+	(
+		cd work &&
+		echo foo >>foo &&
+		git update-index --add foo &&
+		printf "a\\r\\n\\r\\nb\\r\\nc\\r\\n" >cmt &&
+		p=$(git rev-parse HEAD) &&
+		t=$(git write-tree) &&
+		cmt=$(git commit-tree -p $p $t <cmt) &&
+		git update-ref refs/heads/master $cmt &&
+		git cat-file commit HEAD | tail -n4 >out &&
+		test_cmp cmt out &&
+		git svn dcommit &&
+		printf "a\\n\\nb\\nc\\n" >exp &&
+		git cat-file commit HEAD | sed -ne 6,9p >out &&
+		test_cmp exp out
+	)
+'
+
+test_done
-- 
EW

^ permalink raw reply related	[relevance 5%]

* [PATCH 0/3] fixes for split index mode
@ 2017-12-10 21:21  6% Thomas Gummerer
  0 siblings, 0 replies; 162+ results
From: Thomas Gummerer @ 2017-12-10 21:21 UTC (permalink / raw)
  To: git
  Cc: Christian Couder, Lars Schneider, Brandon Williams, Jeff King,
	Junio C Hamano, Nguyễn Thái Ngọc Duy,
	Thomas Gummerer

On the current master branch, 95ec6b1b33 ("RelNotes: the eighth
batch", 2017-12-06) , the test suite fails a few tests when
GIT_TEST_SPLIT_INDEX is set:

Test Summary Report
-------------------
t3007-ls-files-recurse-submodules.sh             (Wstat: 256 Tests: 21 Failed: 13)
  Failed tests:  2-14
  Non-zero exit status: 1
t7009-filter-branch-null-sha1.sh                 (Wstat: 256 Tests: 6 Failed: 1)
  Failed test:  4
  Non-zero exit status: 1
t5304-prune.sh                                   (Wstat: 256 Tests: 25 Failed: 3)
  Failed tests:  23-25
  Non-zero exit status: 1
t7814-grep-recurse-submodules.sh                 (Wstat: 256 Tests: 22 Failed: 13)
  Failed tests:  2-3, 5-10, 12-15, 22
  Non-zero exit status: 1

This series fixes these and makes travis run the test suite with
GIT_TEST_SPLIT_INDEX to avoid similar breakages in the future.

Thomas Gummerer (3):
  repository: fix repo_read_index with submodules
  prune: fix pruning with multiple worktrees and split index
  travis: run tests with GIT_TEST_SPLIT_INDEX

 .travis.yml  |  2 +-
 cache.h      |  1 +
 read-cache.c | 19 +++++++++++++++++--
 repository.c | 13 ++++++++++++-
 repository.h |  2 ++
 revision.c   | 13 ++++++++-----
 6 files changed, 41 insertions(+), 9 deletions(-)

-- 
2.15.1.504.g5279b80103


^ permalink raw reply	[relevance 6%]

* [ANNOUNCE] Git v2.15.0-rc2
@ 2017-10-20  6:49  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2017-10-20  6:49 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

A release candidate Git v2.15.0-rc2 is now available for testing
at the usual places.  It is comprised of 737 non-merge commits
since v2.14.0, contributed by 75 people, 22 of which are new faces.

We had to back-track a bit wrt to the "git add -p" regression; for
now, we simply revert the changes that caused issues to users
without redefining 'color.ui=always' to mean 'color.ui=auto', which
may or may not happen in future releases.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.15.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.14.0 are as follows.
Welcome to the Git development community!

  Ann T Ropea, Daniel Watkins, Derrick Stolee, Dimitrios
  Christidis, Eric Rannaud, Evan Zacks, Hielke Christian Braun,
  Ian Campbell, Ilya Kantor, Jameson Miller, Job Snijders, Joel
  Teichroeb, joernchen, Łukasz Gryglicki, Manav Rathi, Martin
  Ågren, Michael Forney, Patryk Obara, Randall S. Becker, Ross
  Kabus, Taylor Blau, and Urs Thuermann.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Andreas Heiduk,
  Anthony Sottile, Ben Boeckel, Brandon Casey, Brandon Williams,
  brian m. carlson, Christian Couder, David Glasser, Eric Blake,
  Han-Wen Nienhuys, Heiko Voigt, Jean-Noel Avila, Jeff Hostetler,
  Jeff King, Johannes Schindelin, Johannes Sixt, Jonathan Nieder,
  Jonathan Tan, Junio C Hamano, Kaartic Sivaraam, Kevin Daudt,
  Kevin Willford, Lars Schneider, Martin Koegler, Matthieu Moy,
  Max Kirillov, Michael Haggerty, Michael J Gruber, Nguyễn Thái
  Ngọc Duy, Nicolas Morey-Chaisemartin, Øystein Walle, Paolo
  Bonzini, Pat Thoyts, Philip Oakley, Phillip Wood, Ralf Thielow,
  Raman Gupta, Ramsay Jones, René Scharfe, Sahil Dua, Santiago
  Torres, Stefan Beller, Stephan Beyer, Takashi Iwai, Thomas
  Braun, Thomas Gummerer, Todd Zullinger, Tom G. Christensen,
  Torsten Bögershausen, William Duclot, and W. Trevor King.

----------------------------------------------------------------

Git 2.15 Release Notes (draft)
==============================

Backward compatibility notes and other notable changes.

 * Use of an empty string as a pathspec element that is used for
   'everything matches' is still warned and Git asks users to use a
   more explicit '.' for that instead.  The hope is that existing
   users will not mind this change, and eventually the warning can be
   turned into a hard error, upgrading the deprecation into removal of
   this (mis)feature.  That is now scheduled to happen in Git v2.16,
   the next major release after this one.

 * Git now avoids blindly falling back to ".git" when the setup
   sequence said we are _not_ in Git repository.  A corner case that
   happens to work right now may be broken by a call to BUG().
   We've tried hard to locate such cases and fixed them, but there
   might still be cases that need to be addressed--bug reports are
   greatly appreciated.

 * "branch --set-upstream" that has been deprecated in Git 1.8 has
   finally been retired.


Updates since v2.14
-------------------

UI, Workflows & Features

 * An example that is now obsolete has been removed from a sample hook,
   and an old example in it that added a sign-off manually has been
   improved to use the interpret-trailers command.

 * The advice message given when "git rebase" stops for conflicting
   changes has been improved.

 * The "rerere-train" script (in contrib/) learned the "--overwrite"
   option to allow overwriting existing recorded resolutions.

 * "git contacts" (in contrib/) now lists the address on the
   "Reported-by:" trailer to its output, in addition to those on
   S-o-b: and other trailers, to make it easier to notify (and thank)
   the original bug reporter.

 * "git rebase", especially when it is run by mistake and ends up
   trying to replay many changes, spent long time in silence.  The
   command has been taught to show progress report when it spends
   long time preparing these many changes to replay (which would give
   the user a chance to abort with ^C).

 * "git merge" learned a "--signoff" option to add the Signed-off-by:
   trailer with the committer's name.

 * "git diff" learned to optionally paint new lines that are the same
   as deleted lines elsewhere differently from genuinely new lines.

 * "git interpret-trailers" learned to take the trailer specifications
   from the command line that overrides the configured values.

 * "git interpret-trailers" has been taught a "--parse" and a few
   other options to make it easier for scripts to grab existing
   trailer lines from a commit log message.

 * The "--format=%(trailers)" option "git log" and its friends take
   learned to take the 'unfold' and 'only' modifiers to normalize its
   output, e.g. "git log --format=%(trailers:only,unfold)".

 * "gitweb" shows a link to visit the 'raw' contents of blbos in the
   history overview page.

 * "[gc] rerereResolved = 5.days" used to be invalid, as the variable
   is defined to take an integer counting the number of days.  It now
   is allowed.

 * The code to acquire a lock on a reference (e.g. while accepting a
   push from a client) used to immediately fail when the reference is
   already locked---now it waits for a very short while and retries,
   which can make it succeed if the lock holder was holding it during
   a read-only operation.

 * "branch --set-upstream" that has been deprecated in Git 1.8 has
   finally been retired.

 * The codepath to call external process filter for smudge/clean
   operation learned to show the progress meter.

 * "git rev-parse" learned "--is-shallow-repository", that is to be
   used in a way similar to existing "--is-bare-repository" and
   friends.

 * "git describe --match <pattern>" has been taught to play well with
   the "--all" option.

 * "git branch" learned "-c/-C" to create a new branch by copying an
   existing one.

 * Some commands (most notably "git status") makes an opportunistic
   update when performing a read-only operation to help optimize later
   operations in the same repository.  The new "--no-optional-locks"
   option can be passed to Git to disable them.

 * "git for-each-ref --format=..." learned a new format element,
   %(trailers), to show only the commit log trailer part of the log
   message.


Performance, Internal Implementation, Development Support etc.

 * Conversion from uchar[20] to struct object_id continues.

 * Start using selected c99 constructs in small, stable and
   essentialpart of the system to catch people who care about
   older compilers that do not grok them.

 * The filter-process interface learned to allow a process with long
   latency give a "delayed" response.

 * Many uses of comparision callback function the hashmap API uses
   cast the callback function type when registering it to
   hashmap_init(), which defeats the compile time type checking when
   the callback interface changes (e.g. gaining more parameters).
   The callback implementations have been updated to take "void *"
   pointers and cast them to the type they expect instead.

 * Because recent Git for Windows do come with a real msgfmt, the
   build procedure for git-gui has been updated to use it instead of a
   hand-rolled substitute.

 * "git grep --recurse-submodules" has been reworked to give a more
   consistent output across submodule boundary (and do its thing
   without having to fork a separate process).

 * A helper function to read a single whole line into strbuf
   mistakenly triggered OOM error at EOF under certain conditions,
   which has been fixed.

 * The "ref-store" code reorganization continues.

 * "git commit" used to discard the index and re-read from the filesystem
   just in case the pre-commit hook has updated it in the middle; this
   has been optimized out when we know we do not run the pre-commit hook.
   (merge 680ee550d7 kw/commit-keep-index-when-pre-commit-is-not-run later to maint).

 * Updates to the HTTP layer we made recently unconditionally used
   features of libCurl without checking the existence of them, causing
   compilation errors, which has been fixed.  Also migrate the code to
   check feature macros, not version numbers, to cope better with
   libCurl that vendor ships with backported features.

 * The API to start showing progress meter after a short delay has
   been simplified.
   (merge 8aade107dd jc/simplify-progress later to maint).

 * Code clean-up to avoid mixing values read from the .gitmodules file
   and values read from the .git/config file.

 * We used to spend more than necessary cycles allocating and freeing
   piece of memory while writing each index entry out.  This has been
   optimized.

 * Platforms that ship with a separate sha1 with collision detection
   library can link to it instead of using the copy we ship as part of
   our source tree.

 * Code around "notes" have been cleaned up.
   (merge 3964281524 mh/notes-cleanup later to maint).

 * The long-standing rule that an in-core lockfile instance, once it
   is used, must not be freed, has been lifted and the lockfile and
   tempfile APIs have been updated to reduce the chance of programming
   errors.

 * Our hashmap implementation in hashmap.[ch] is not thread-safe when
   adding a new item needs to expand the hashtable by rehashing; add
   an API to disable the automatic rehashing to work it around.

 * Many of our programs consider that it is OK to release dynamic
   storage that is used throughout the life of the program by simply
   exiting, but this makes it harder to leak detection tools to avoid
   reporting false positives.  Plug many existing leaks and introduce
   a mechanism for developers to mark that the region of memory
   pointed by a pointer is not lost/leaking to help these tools.

 * As "git commit" to conclude a conflicted "git merge" honors the
   commit-msg hook, "git merge" that records a merge commit that
   cleanly auto-merges should, but it didn't.

 * The codepath for "git merge-recursive" has been cleaned up.

 * Many leaks of strbuf have been fixed.

 * "git imap-send" has our own implementation of the protocol and also
   can use more recent libCurl with the imap protocol support.  Update
   the latter so that it can use the credential subsystem, and then
   make it the default option to use, so that we can eventually
   deprecate and remove the former.

 * "make style" runs git-clang-format to help developers by pointing
   out coding style issues.

 * A test to demonstrate "git mv" failing to adjust nested submodules
   has been added.
   (merge c514167df2 hv/mv-nested-submodules-test later to maint).

 * On Cygwin, "ulimit -s" does not report failure but it does not work
   at all, which causes an unexpected success of some tests that
   expect failures under a limited stack situation.  This has been
   fixed.

 * Many codepaths have been updated to squelch -Wimplicit-fallthrough
   warnings from Gcc 7 (which is a good code hygiene).

 * Add a helper for DLL loading in anticipation for its need in a
   future topic RSN.

 * "git status --ignored", when noticing that a directory without any
   tracked path is ignored, still enumerated all the ignored paths in
   the directory, which is unnecessary.  The codepath has been
   optimized to avoid this overhead.

 * The final batch to "git rebase -i" updates to move more code from
   the shell script to C has been merged.

 * Operations that do not touch (majority of) packed refs have been
   optimized by making accesses to packed-refs file lazy; we no longer
   pre-parse everything, and an access to a single ref in the
   packed-refs does not touch majority of irrelevant refs, either.

 * Add comment to clarify that the style file is meant to be used with
   clang-5 and the rules are still work in progress.

 * Many variables that points at a region of memory that will live
   throughout the life of the program have been marked with UNLEAK
   marker to help the leak checkers concentrate on real leaks..

 * Plans for weaning us off of SHA-1 has been documented.

 * A new "oidmap" API has been introduced and oidset API has been
   rewritten to use it.


Also contains various documentation updates and code clean-ups.


Fixes since v2.14
-----------------

 * "%C(color name)" in the pretty print format always produced ANSI
   color escape codes, which was an early design mistake.  They now
   honor the configuration (e.g. "color.ui = never") and also tty-ness
   of the output medium.

 * The http.{sslkey,sslCert} configuration variables are to be
   interpreted as a pathname that honors "~[username]/" prefix, but
   weren't, which has been fixed.

 * Numerous bugs in walking of reflogs via "log -g" and friends have
   been fixed.

 * "git commit" when seeing an totally empty message said "you did not
   edit the message", which is clearly wrong.  The message has been
   corrected.

 * When a directory is not readable, "gitweb" fails to build the
   project list.  Work this around by skipping such a directory.

 * Some versions of GnuPG fails to kill gpg-agent it auto-spawned
   and such a left-over agent can interfere with a test.  Work it
   around by attempting to kill one before starting a new test.

 * A recently added test for the "credential-cache" helper revealed
   that EOF detection done around the time the connection to the cache
   daemon is torn down were flaky.  This was fixed by reacting to
   ECONNRESET and behaving as if we got an EOF.

 * "git log --tag=no-such-tag" showed log starting from HEAD, which
   has been fixed---it now shows nothing.

 * The "tag.pager" configuration variable was useless for those who
   actually create tag objects, as it interfered with the use of an
   editor.  A new mechanism has been introduced for commands to enable
   pager depending on what operation is being carried out to fix this,
   and then "git tag -l" is made to run pager by default.

 * "git push --recurse-submodules $there HEAD:$target" was not
   propagated down to the submodules, but now it is.

 * Commands like "git rebase" accepted the --rerere-autoupdate option
   from the command line, but did not always use it.  This has been
   fixed.

 * "git clone --recurse-submodules --quiet" did not pass the quiet
   option down to submodules.

 * Test portability fix for OBSD.

 * Portability fix for OBSD.

 * "git am -s" has been taught that some input may end with a trailer
   block that is not Signed-off-by: and it should refrain from adding
   an extra blank line before adding a new sign-off in such a case.

 * "git svn" used with "--localtime" option did not compute the tz
   offset for the timestamp in question and instead always used the
   current time, which has been corrected.

 * Memory leak in an error codepath has been plugged.

 * "git stash -u" used the contents of the committed version of the
   ".gitignore" file to decide which paths are ignored, even when the
   file has local changes.  The command has been taught to instead use
   the locally modified contents.

 * bash 4.4 or newer gave a warning on NUL byte in command
   substitution done in "git stash"; this has been squelched.

 * "git grep -L" and "git grep --quiet -L" reported different exit
   codes; this has been corrected.

 * When handshake with a subprocess filter notices that the process
   asked for an unknown capability, Git did not report what program
   the offending subprocess was running.  This has been corrected.

 * "git apply" that is used as a better "patch -p1" failed to apply a
   taken from a file with CRLF line endings to a file with CRLF line
   endings.  The root cause was because it misused convert_to_git()
   that tried to do "safe-crlf" processing by looking at the index
   entry at the same path, which is a nonsense---in that mode, "apply"
   is not working on the data in (or derived from) the index at all.
   This has been fixed.

 * Killing "git merge --edit" before the editor returns control left
   the repository in a state with MERGE_MSG but without MERGE_HEAD,
   which incorrectly tells the subsequent "git commit" that there was
   a squash merge in progress.  This has been fixed.

 * "git archive" did not work well with pathspecs and the
   export-ignore attribute.

 * In addition to "cc: <a@dd.re.ss> # cruft", "cc: a@dd.re.ss # cruft"
   was taught to "git send-email" as a valid way to tell it that it
   needs to also send a carbon copy to <a@dd.re.ss> in the trailer
   section.

 * "git branch -M a b" while on a branch that is completely unrelated
   to either branch a or branch b misbehaved when multiple worktree
   was in use.  This has been fixed.
   (merge 31824d180d nd/worktree-kill-parse-ref later to maint).

 * "git gc" and friends when multiple worktrees are used off of a
   single repository did not consider the index and per-worktree refs
   of other worktrees as the root for reachability traversal, making
   objects that are in use only in other worktrees to be subject to
   garbage collection.

 * A regression to "gitk --bisect" by a recent update has been fixed.

 * "git -c submodule.recurse=yes pull" did not work as if the
   "--recurse-submodules" option was given from the command line.
   This has been corrected.

 * Unlike "git commit-tree < file", "git commit-tree -F file" did not
   pass the contents of the file verbatim and instead completed an
   incomplete line at the end, if exists.  The latter has been updated
   to match the behaviour of the former.

 * Many codepaths did not diagnose write failures correctly when disks
   go full, due to their misuse of write_in_full() helper function,
   which have been corrected.
   (merge f48ecd38cb jk/write-in-full-fix later to maint).

 * "git help co" now says "co is aliased to ...", not "git co is".
   (merge b3a8076e0d ks/help-alias-label later to maint).

 * "git archive", especially when used with pathspec, stored an empty
   directory in its output, even though Git itself never does so.
   This has been fixed.

 * API error-proofing which happens to also squelch warnings from GCC.

 * The explanation of the cut-line in the commit log editor has been
   slightly tweaked.
   (merge 8c4b1a3593 ks/commit-do-not-touch-cut-line later to maint).

 * "git gc" tries to avoid running two instances at the same time by
   reading and writing pid/host from and to a lock file; it used to
   use an incorrect fscanf() format when reading, which has been
   corrected.

 * The scripts to drive TravisCI has been reorganized and then an
   optimization to avoid spending cycles on a branch whose tip is
   tagged has been implemented.
   (merge 8376eb4a8f ls/travis-scriptify later to maint).

 * The test linter has been taught that we do not like "echo -e".

 * Code cmp.std.c nitpick.

 * A regression fix for 2.11 that made the code to read the list of
   alternate object stores overrun the end of the string.
   (merge f0f7bebef7 jk/info-alternates-fix later to maint).

 * "git describe --match" learned to take multiple patterns in v2.13
   series, but the feature ignored the patterns after the first one
   and did not work at all.  This has been fixed.

 * "git filter-branch" cannot reproduce a history with a tag without
   the tagger field, which only ancient versions of Git allowed to be
   created.  This has been corrected.
   (merge b2c1ca6b4b ic/fix-filter-branch-to-handle-tag-without-tagger later to maint).

 * "git cat-file --textconv" started segfaulting recently, which
   has been corrected.

 * The built-in pattern to detect the "function header" for HTML did
   not match <H1>..<H6> elements without any attributes, which has
   been fixed.

 * "git mailinfo" was loose in decoding quoted printable and produced
   garbage when the two letters after the equal sign are not
   hexadecimal.  This has been fixed.

 * The machinery to create xdelta used in pack files received the
   sizes of the data in size_t, but lost the higher bits of them by
   storing them in "unsigned int" during the computation, which is
   fixed.

 * The delta format used in the packfile cannot reference data at
   offset larger than what can be expressed in 4-byte, but the
   generator for the data failed to make sure the offset does not
   overflow.  This has been corrected.

 * The documentation for '-X<option>' for merges was misleadingly
   written to suggest that "-s theirs" exists, which is not the case.

 * "git fast-export" with -M/-C option issued "copy" instruction on a
   path that is simultaneously modified, which was incorrect.
   (merge b3e8ca89cf jt/fast-export-copy-modify-fix later to maint).

 * Many codepaths have been updated to squelch -Wsign-compare
   warnings.
   (merge 071bcaab64 rj/no-sign-compare later to maint).

 * Memory leaks in various codepaths have been plugged.
   (merge 4d01a7fa65 ma/leakplugs later to maint).

 * Recent versions of "git rev-parse --parseopt" did not parse the
   option specification that does not have the optional flags (*=?!)
   correctly, which has been corrected.
   (merge a6304fa4c2 bc/rev-parse-parseopt-fix later to maint).

 * The checkpoint command "git fast-import" did not flush updates to
   refs and marks unless at least one object was created since the
   last checkpoint, which has been corrected, as these things can
   happen without any new object getting created.
   (merge 30e215a65c er/fast-import-dump-refs-on-checkpoint later to maint).

 * Spell the name of our system as "Git" in the output from
   request-pull script.

 * Fixes for a handful memory access issues identified by valgrind.

 * Backports a moral equivalent of 2015 fix to the poll() emulation
   from the upstream gnulib to fix occasional breakages on HPE NonStop.

 * Users with "color.ui = always" in their configuration were broken
   by a recent change that made plumbing commands to pay attention to
   them as the patch created internally by "git add -p" were colored
   (heh) and made unusable.  This has been fixed by reverting the
   offending change.

 * In the "--format=..." option of the "git for-each-ref" command (and
   its friends, i.e. the listing mode of "git branch/tag"), "%(atom:)"
   (e.g. "%(refname:)", "%(body:)" used to error out.  Instead, treat
   them as if the colon and an empty string that follows it were not
   there.

 * An ancient bug that made Git misbehave with creation/renaming of
   refs has been fixed.

 * "git fetch <there> <src>:<dst>" allows an object name on the <src>
   side when the other side accepts such a request since Git v2.5, but
   the documentation was left stale.
   (merge 83558a412a jc/fetch-refspec-doc-update later to maint).

 * Update the documentation for "git filter-branch" so that the filter
   options are listed in the same order as they are applied, as
   described in an earlier part of the doc.
   (merge 07c4984508 dg/filter-branch-filter-order-doc later to maint).

 * Other minor doc, test and build updates and code cleanups.
   (merge f094b89a4d ma/parse-maybe-bool later to maint).
   (merge 6cdf8a7929 ma/ts-cleanups later to maint).
   (merge 7560f547e6 ma/up-to-date later to maint).
   (merge 0db3dc75f3 rs/apply-epoch later to maint).
   (merge 276d0e35c0 ma/split-symref-update-fix later to maint).
   (merge f777623514 ks/branch-tweak-error-message-for-extra-args later to maint).
   (merge 33f3c683ec ks/verify-filename-non-option-error-message-tweak later to maint).
   (merge 7cbbf9d6a2 ls/filter-process-delayed later to maint).
   (merge 488aa65c8f wk/merge-options-gpg-sign-doc later to maint).
   (merge e61cb19a27 jc/branch-force-doc-readability-fix later to maint).

----------------------------------------------------------------

Changes since v2.14.0 are as follows:

Adam Dinwoodie (1):
      doc: correct command formatting

Andreas Heiduk (2):
      doc: add missing values "none" and "default" for diff.wsErrorHighlight
      doc: clarify "config --bool" behaviour with empty string

Ann T Ropea (1):
      request-pull: capitalise "Git" to make it a proper noun

Anthony Sottile (1):
      git-grep: correct exit code with --quiet and -L

Ben Boeckel (1):
      Documentation: mention that `eol` can change the dirty status of paths

Brandon Casey (7):
      t1502: demonstrate rev-parse --parseopt option mis-parsing
      rev-parse parseopt: do not search help text for flag chars
      rev-parse parseopt: interpret any whitespace as start of help text
      git-rebase: don't ignore unexpected command line arguments
      t0040,t1502: Demonstrate parse_options bugs
      parse-options: write blank line to correct output stream
      parse-options: only insert newline in help text if needed

Brandon Williams (29):
      repo_read_index: don't discard the index
      repository: have the_repository use the_index
      submodule--helper: teach push-check to handle HEAD
      cache.h: add GITMODULES_FILE macro
      config: add config_from_gitmodules
      submodule: remove submodule.fetchjobs from submodule-config parsing
      submodule: remove fetch.recursesubmodules from submodule-config parsing
      submodule: check for unstaged .gitmodules outside of config parsing
      submodule: check for unmerged .gitmodules outside of config parsing
      submodule: merge repo_read_gitmodules and gitmodules_config
      grep: recurse in-process using 'struct repository'
      t7411: check configuration parsing errors
      submodule: don't use submodule_from_name
      add, reset: ensure submodules can be added or reset
      submodule--helper: don't overlay config in remote_submodule_branch
      submodule--helper: don't overlay config in update-clone
      fetch: don't overlay config with submodule-config
      submodule: don't rely on overlayed config when setting diffopts
      unpack-trees: don't respect submodule.update
      submodule: remove submodule_config callback routine
      diff: stop allowing diff to have submodules configured in .git/config
      submodule-config: remove support for overlaying repository config
      submodule-config: move submodule-config functions to submodule-config.c
      submodule-config: lazy-load a repository's .gitmodules file
      unpack-trees: improve loading of .gitmodules
      submodule: remove gitmodules_config
      clone: teach recursive clones to respect -q
      clang-format: outline the git project's coding style
      Makefile: add style build rule

Christian Couder (3):
      refs: use skip_prefix() in ref_is_hidden()
      sub-process: print the cmd when a capability is unsupported
      sha1-lookup: remove sha1_entry_pos() from header file

Daniel Watkins (1):
      diff-highlight: add clean target to Makefile

David Glasser (1):
      doc: list filter-branch subdirectory-filter first

Derrick Stolee (1):
      cleanup: fix possible overflow errors in binary search

Dimitrios Christidis (1):
      fmt-merge-msg: fix coding style

Eric Blake (1):
      git-contacts: also recognise "Reported-by:"

Eric Rannaud (1):
      fast-import: checkpoint: dump branches/tags/marks even if object_count==0

Evan Zacks (1):
      doc: fix minor typos (extra/duplicated words)

Han-Wen Nienhuys (5):
      submodule.h: typofix
      submodule.c: describe submodule_to_gitdir() in a new comment
      real_path: clarify return value ownership
      read_gitfile_gently: clarify return value ownership.
      string-list.h: move documentation from Documentation/api/ into header

Heiko Voigt (2):
      t5526: fix some broken && chains
      add test for bug in git-mv for recursive submodules

Hielke Christian Braun (1):
      gitweb: skip unreadable subdirectories

Ian Campbell (4):
      filter-branch: reset $GIT_* before cleaning up
      filter-branch: preserve and restore $GIT_AUTHOR_* and $GIT_COMMITTER_*
      filter-branch: stash away ref map in a branch
      filter-branch: use hash-object instead of mktag

Ilya Kantor (1):
      userdiff: fix HTML hunk header regexp

Jameson Miller (1):
      Improve performance of git status --ignored

Jean-Noel Avila (1):
      i18n: add a missing space in message

Jeff Hostetler (1):
      hashmap: add API to disable item counting when threaded

Jeff King (134):
      t1414: document some reflog-walk oddities
      revision: disallow reflog walking with revs->limited
      log: clarify comment about reflog cycles
      log: do not free parents when walking reflog
      get_revision_1(): replace do-while with an early return
      rev-list: check reflog_info before showing usage
      reflog-walk: stop using fake parents
      reflog-walk: apply --since/--until to reflog dates
      check return value of verify_ref_format()
      docs/for-each-ref: update pointer to color syntax
      t: use test_decode_color rather than literal ANSI codes
      ref-filter: simplify automatic color reset
      ref-filter: abstract ref format into its own struct
      ref-filter: move need_color_reset_at_eol into ref_format
      ref-filter: provide a function for parsing sort options
      ref-filter: make parse_ref_filter_atom a private function
      ref-filter: factor out the parsing of sorting atoms
      ref-filter: pass ref_format struct to atom parsers
      color: check color.ui in git_default_config()
      for-each-ref: load config earlier
      rev-list: pass diffopt->use_colors through to pretty-print
      pretty: respect color settings for %C placeholders
      ref-filter: consult want_color() before emitting colors
      strbuf: use designated initializers in STRBUF_INIT
      t/lib-proto-disable: restore protocol.allow after config tests
      t5813: add test for hostname starting with dash
      connect: factor out "looks like command line option" check
      connect: reject dashed arguments for proxy commands
      connect: reject paths that look like command line options
      t6018: flesh out empty input/output rev-list tests
      revision: add rev_input_given flag
      rev-list: don't show usage when we see empty ref patterns
      revision: do not fallback to default when rev_input_given is set
      hashcmp: use memcmp instead of open-coded loop
      sha1_file: drop experimental GIT_USE_LOOKUP search
      trailer: put process_trailers() options into a struct
      interpret-trailers: add an option to show only the trailers
      interpret-trailers: add an option to show only existing trailers
      interpret-trailers: add an option to unfold values
      interpret-trailers: add --parse convenience option
      pretty: move trailer formatting to trailer.c
      t4205: refactor %(trailers) tests
      pretty: support normalization options for %(trailers)
      doc: fix typo in sendemail.identity
      config: use a static lock_file struct
      write_index_as_tree: cleanup tempfile on error
      setup_temporary_shallow: avoid using inactive tempfile
      setup_temporary_shallow: move tempfile struct into function
      verify_signed_buffer: prefer close_tempfile() to close()
      always check return value of close_tempfile
      tempfile: do not delete tempfile on failed close
      lockfile: do not rollback lock on failed close
      tempfile: prefer is_tempfile_active to bare access
      tempfile: handle NULL tempfile pointers gracefully
      tempfile: replace die("BUG") with BUG()
      tempfile: factor out activation
      tempfile: factor out deactivation
      tempfile: robustify cleanup handler
      tempfile: release deactivated strbufs instead of resetting
      tempfile: use list.h for linked list
      tempfile: remove deactivated list entries
      tempfile: auto-allocate tempfiles on heap
      lockfile: update lifetime requirements in documentation
      ref_lock: stop leaking lock_files
      stop leaking lock structs in some simple cases
      test-lib: --valgrind should not override --verbose-log
      test-lib: set LSAN_OPTIONS to abort by default
      add: free leaked pathspec after add_files_to_cache()
      update-index: fix cache entry leak in add_one_file()
      config: plug user_config leak
      reset: make tree counting less confusing
      reset: free allocated tree buffers
      repository: free fields before overwriting them
      set_git_dir: handle feeding gitdir to itself
      rev-parse: don't trim bisect refnames
      system_path: move RUNTIME_PREFIX to a sub-function
      git_extract_argv0_path: do nothing without RUNTIME_PREFIX
      add UNLEAK annotation for reducing leak false positives
      shortlog: skip format/parse roundtrip for internal traversal
      shell: drop git-cvsserver support by default
      archimport: use safe_pipe_capture for user input
      cvsimport: shell-quote variable used in backticks
      config: avoid "write_in_full(fd, buf, len) < len" pattern
      get-tar-commit-id: check write_in_full() return against 0
      avoid "write_in_full(fd, buf, len) != len" pattern
      convert less-trivial versions of "write_in_full() != len"
      pkt-line: check write_in_full() errors against "< 0"
      notes-merge: use ssize_t for write_in_full() return value
      config: flip return value of store_write_*()
      read_pack_header: handle signed/unsigned comparison in read result
      prefix_ref_iterator: break when we leave the prefix
      read_info_alternates: read contents into strbuf
      read_info_alternates: warn on non-trivial errors
      revision: replace "struct cmdline_pathspec" with argv_array
      cat-file: handle NULL object_context.path
      test-line-buffer: simplify command parsing
      curl_trace(): eliminate switch fallthrough
      consistently use "fallthrough" comments in switches
      doc: put literal block delimiter around table
      files-backend: prefer "0" for write_in_full() error check
      notes-merge: drop dead zero-write code
      prefer "!=" when checking read_in_full() result
      avoid looking at errno for short read_in_full() returns
      distinguish error versus short read from read_in_full()
      worktree: use xsize_t to access file size
      worktree: check the result of read_in_full()
      validate_headref: NUL-terminate HEAD buffer
      validate_headref: use skip_prefix for symref parsing
      validate_headref: use get_oid_hex for detached HEADs
      git: add --no-optional-locks option
      test-terminal: set TERM=vt100
      t4015: prefer --color to -c color.diff=always
      t3701: use test-terminal to collect color output
      t7508: use test_terminal for color output
      t7502: use diff.noprefix for --verbose test
      t6006: drop "always" color config tests
      t3203: drop "always" color test
      t3205: use --color instead of color.branch=always
      provide --color option for all ref-filter users
      color: make "always" the same as "auto" in config
      t4015: use --color with --color-moved
      t7301: use test_terminal to check color
      path.c: fix uninitialized memory access
      sha1_loose_object_info: handle errors from unpack_sha1_rest
      t3308: create a real ref directory/file conflict
      refs_resolve_ref_unsafe: handle d/f conflicts for writes
      write_entry: fix leak when retrying delayed filter
      write_entry: avoid reading blobs in CE_RETRY case
      write_entry: untangle symlink and regular-file cases
      diff: fix infinite loop with --color-moved --ignore-space-change
      Revert "color: make "always" the same as "auto" in config"
      Revert "t6006: drop "always" color config tests"
      Revert "color: check color.ui in git_default_config()"
      tag: respect color.ui config

Job Snijders (1):
      gitweb: add 'raw' blob_plain link in history overview

Joel Teichroeb (3):
      stash: add a test for stash create with no files
      stash: add a test for when apply fails during stash branch
      stash: add a test for stashing in a detached state

Johannes Schindelin (14):
      run_processes_parallel: change confusing task_cb convention
      git-gui (MinGW): make use of MSys2's msgfmt
      t3415: verify that an empty instructionFormat is handled as before
      rebase -i: generate the script via rebase--helper
      rebase -i: remove useless indentation
      rebase -i: do not invent onelines when expanding/collapsing SHA-1s
      rebase -i: also expand/collapse the SHA-1s via the rebase--helper
      t3404: relax rebase.missingCommitsCheck tests
      rebase -i: check for missing commits in the rebase--helper
      rebase -i: skip unnecessary picks using the rebase--helper
      t3415: test fixup with wrapped oneline
      rebase -i: rearrange fixup/squash lines using the rebase--helper
      Win32: simplify loading of DLL functions
      clang-format: adjust line break penalties

Johannes Sixt (1):
      sub-process: use child_process.args instead of child_process.argv

Jonathan Nieder (8):
      vcs-svn: remove more unused prototypes and declarations
      vcs-svn: remove custom mode constants
      vcs-svn: remove repo_delete wrapper function
      vcs-svn: move remaining repo_tree functions to fast_export.h
      pack: make packed_git_mru global a value instead of a pointer
      pathspec doc: parse_pathspec does not maintain references to args
      technical doc: add a design doc for hash function transition
      strbuf doc: reuse after strbuf_release is fine

Jonathan Tan (40):
      fsck: remove redundant parse_tree() invocation
      object: remove "used" field from struct object
      fsck: cleanup unused variable
      Documentation: migrate sub-process docs to header
      sub-process: refactor handshake to common function
      tests: ensure fsck fails on corrupt packfiles
      sha1_file: set whence in storage-specific info fn
      sha1_file: remove read_packed_sha1()
      diff: avoid redundantly clearing a flag
      diff: respect MIN_BLOCK_LENGTH for last block
      diff: define block by number of alphanumeric chars
      Doc: clarify that pack-objects makes packs, plural
      pack: move pack name-related functions
      pack: move static state variables
      pack: move pack_report()
      pack: move open_pack_index(), parse_pack_index()
      pack: move release_pack_memory()
      pack: move pack-closing functions
      pack: move use_pack()
      pack: move unuse_pack()
      pack: move add_packed_git()
      pack: move install_packed_git()
      pack: move {,re}prepare_packed_git and approximate_object_count
      pack: move unpack_object_header_buffer()
      pack: move get_size_from_delta()
      pack: move unpack_object_header()
      pack: move clear_delta_base_cache(), packed_object_info(), unpack_entry()
      pack: move nth_packed_object_{sha1,oid}
      pack: move check_pack_index_ptr(), nth_packed_object_offset()
      pack: move find_pack_entry_one(), is_pack_valid()
      pack: move find_sha1_pack()
      pack: move find_pack_entry() and make it global
      pack: move has_sha1_pack()
      pack: move has_pack_index()
      pack: move for_each_packed_object()
      Remove inadvertently added outgoing/packfile.h
      Add t/helper/test-write-cache to .gitignore
      git-compat-util: make UNLEAK less error-prone
      fast-export: do not copy from modified file
      oidmap: map with OID as key

Junio C Hamano (58):
      t1408: add a test of stale packed refs covered by loose refs
      clean.c: use designated initializer
      http.c: http.sslcert and http.sslkey are both pathnames
      connect: reject ssh hostname that begins with a dash
      Git 2.7.6
      Git 2.8.6
      Git 2.9.5
      Git 2.10.4
      Git 2.11.3
      Git 2.12.4
      Git 2.13.5
      Git 2.14.1
      Start post 2.14 cycle
      perl/Git.pm: typofix in a comment
      The first batch of topics after the 2.14 cycle
      diff: retire sane_truncate_fn
      progress: simplify "delayed" progress API
      The second batch post 2.14
      t4200: give us a clean slate after "rerere gc" tests
      t4200: make "rerere gc" test more robust
      t4200: gather "rerere gc" together
      t4200: parameterize "rerere gc" custom expiry test
      rerere: represent time duration in timestamp_t internally
      rerere: allow approxidate in gc.rerereResolved/gc.rerereUnresolved
      The third batch post 2.14
      Prepare for 2.14.2
      The fourth batch post 2.14
      The fifth batch post 2.14
      The sixth batch post 2.14
      RelNotes: further fixes for 2.14.2 from the master front
      The seventh batch post 2.14
      travis: dedent a few scripts that are indented overly deeply
      subprocess: loudly die when subprocess asks for an unsupported capability
      cvsserver: move safe_pipe_capture() to the main package
      cvsserver: use safe_pipe_capture for `constant commands` as well
      gc: call fscanf() with %<len>s, not %<len>c, when reading hostname
      The eighth batch for 2.15
      Git 2.10.5
      Git 2.11.4
      Git 2.12.5
      Git 2.13.6
      Git 2.14.2
      branch: fix "copy" to never touch HEAD
      merge-strategies: avoid implying that "-s theirs" exists
      The ninth batch for 2.15
      The tenth batch for 2.15
      The eleventh batch for 2.15
      The twelfth batch for 2.15
      Git 2.15-rc0
      Prepare for -rc1
      Git 2.15-rc1
      checkout doc: clarify command line args for "checkout paths" mode
      Crawling towards -rc2
      fetch doc: src side of refspec could be full SHA-1
      Preparing for rc2 continues
      branch doc: sprinkle a few commas for readability
      Prepare for 2.14.3
      Git 2.15-rc2

Kaartic Sivaraam (15):
      hook: cleanup script
      hook: name the positional variables
      hook: add sign-off using "interpret-trailers"
      hook: add a simple first example
      commit: check for empty message before the check for untouched template
      hook: use correct logical variable
      t3200: cleanup cruft of a test
      builtin/branch: stop supporting the "--set-upstream" option
      branch: quote branch/ref names to improve readability
      help: change a message to be more precise
      commit-template: change a message to be more intuitive
      t/README: fix typo and grammatically improve a sentence
      doc: camelCase the config variables to improve readability
      branch: change the error messages to be more meaningful
      setup: update error message to be more meaningful

Kevin Daudt (3):
      stash: prevent warning about null bytes in input
      doc/for-each-ref: consistently use '=' to between argument names and values
      doc/for-each-ref: explicitly specify option names

Kevin Willford (9):
      format-patch: have progress option while generating patches
      rebase: turn on progress option by default for format-patch
      commit: skip discarding the index if there is no pre-commit hook
      perf: add test for writing the index
      read-cache: fix memory leak in do_write_index
      read-cache: avoid allocating every ondisk entry when writing
      merge-recursive: fix memory leak
      merge-recursive: remove return value from get_files_dirs
      merge-recursive: change current file dir string_lists to hashmap

Lars Schneider (13):
      t0021: keep filter log files on comparison
      t0021: make debug log file name configurable
      t0021: write "OUT <size>" only on success
      convert: put the flags field before the flag itself for consistent style
      convert: move multiple file filter error handling to separate function
      convert: refactor capabilities negotiation
      convert: add "status=delayed" to filter process protocol
      convert: display progress for filtered objects that have been delayed
      travis-ci: move Travis CI code into dedicated scripts
      travis-ci: skip a branch build if equal tag is present
      travis-ci: fix "skip_branch_tip_with_tag()" string comparison
      entry.c: update cache entry only for existing files
      entry.c: check if file exists after checkout

Manav Rathi (1):
      docs: improve discoverability of exclude pathspec

Martin Koegler (2):
      diff-delta: fix encoding size that would not fit in "unsigned int"
      diff-delta: do not allow delta offset truncation

Martin Ågren (33):
      builtin.h: take over documentation from api-builtin.txt
      git.c: let builtins opt for handling `pager.foo` themselves
      git.c: provide setup_auto_pager()
      t7006: add tests for how git tag paginates
      tag: respect `pager.tag` in list-mode only
      tag: change default of `pager.tag` to "on"
      git.c: ignore pager.* when launching builtin as dashed external
      Doc/git-{push,send-pack}: correct --sign= to --signed=
      t5334: document that git push --signed=1 does not work
      config: introduce git_parse_maybe_bool_text
      config: make git_{config,parse}_maybe_bool equivalent
      treewide: deprecate git_config_maybe_bool, use git_parse_maybe_bool
      parse_decoration_style: drop unused argument `var`
      doc/interpret-trailers: fix "the this" typo
      convert: always initialize attr_action in convert_attrs
      pack-objects: take lock before accessing `remaining`
      strbuf_setlen: don't write to strbuf_slopbuf
      ThreadSanitizer: add suppressions
      Documentation/user-manual: update outdated example output
      treewide: correct several "up-to-date" to "up to date"
      pkt-line: re-'static'-ify buffer in packet_write_fmt_1()
      config: remove git_config_maybe_bool
      refs/files-backend: add longer-scoped copy of string to list
      refs/files-backend: fix memory leak in lock_ref_for_update
      refs/files-backend: correct return value in lock_ref_for_update
      refs/files-backend: add `refname`, not "HEAD", to list
      builtin/commit: fix memory leak in `prepare_index()`
      commit: fix memory leak in `reduce_heads()`
      leak_pending: use `object_array_clear()`, not `free()`
      object_array: use `object_array_clear()`, not `free()`
      object_array: add and use `object_array_pop()`
      pack-bitmap[-write]: use `object_array_clear()`, don't leak
      builtin/: add UNLEAKs

Matthieu Moy (2):
      send-email: fix garbage removal after address
      send-email: don't use Mail::Address, even if available

Max Kirillov (2):
      describe: fix matching to actually match all patterns
      describe: teach --match to handle branches and remotes

Michael Forney (1):
      scripts: use "git foo" not "git-foo"

Michael Haggerty (77):
      add_packed_ref(): teach function to overwrite existing refs
      packed_ref_store: new struct
      packed_ref_store: move `packed_refs_path` here
      packed_ref_store: move `packed_refs_lock` member here
      clear_packed_ref_cache(): take a `packed_ref_store *` parameter
      validate_packed_ref_cache(): take a `packed_ref_store *` parameter
      get_packed_ref_cache(): take a `packed_ref_store *` parameter
      get_packed_refs(): take a `packed_ref_store *` parameter
      add_packed_ref(): take a `packed_ref_store *` parameter
      lock_packed_refs(): take a `packed_ref_store *` parameter
      commit_packed_refs(): take a `packed_ref_store *` parameter
      rollback_packed_refs(): take a `packed_ref_store *` parameter
      get_packed_ref(): take a `packed_ref_store *` parameter
      repack_without_refs(): take a `packed_ref_store *` parameter
      packed_peel_ref(): new function, extracted from `files_peel_ref()`
      packed_ref_store: support iteration
      packed_read_raw_ref(): new function, replacing `resolve_packed_ref()`
      packed-backend: new module for handling packed references
      packed_ref_store: make class into a subclass of `ref_store`
      commit_packed_refs(): report errors rather than dying
      commit_packed_refs(): use a staging file separate from the lockfile
      packed_refs_lock(): function renamed from lock_packed_refs()
      packed_refs_lock(): report errors via a `struct strbuf *err`
      packed_refs_unlock(), packed_refs_is_locked(): new functions
      clear_packed_ref_cache(): don't protest if the lock is held
      commit_packed_refs(): remove call to `packed_refs_unlock()`
      repack_without_refs(): don't lock or unlock the packed refs
      t3210: add some tests of bogus packed-refs file contents
      read_packed_refs(): die if `packed-refs` contains bogus data
      packed_ref_store: handle a packed-refs file that is a symlink
      files-backend: cheapen refname_available check when locking refs
      refs: retry acquiring reference locks for 100ms
      notes: make GET_NIBBLE macro more robust
      load_subtree(): remove unnecessary conditional
      load_subtree(): reduce the scope of some local variables
      load_subtree(): fix incorrect comment
      load_subtree(): separate logic for internal vs. terminal entries
      load_subtree(): check earlier whether an internal node is a tree entry
      load_subtree(): only consider blobs to be potential notes
      get_oid_hex_segment(): return 0 on success
      load_subtree(): combine some common code
      get_oid_hex_segment(): don't pad the rest of `oid`
      hex_to_bytes(): simpler replacement for `get_oid_hex_segment()`
      load_subtree(): declare some variables to be `size_t`
      load_subtree(): check that `prefix_len` is in the expected range
      packed-backend: don't adjust the reference count on lock/unlock
      struct ref_transaction: add a place for backends to store data
      packed_ref_store: implement reference transactions
      packed_delete_refs(): implement method
      files_pack_refs(): use a reference transaction to write packed refs
      prune_refs(): also free the linked list
      files_initial_transaction_commit(): use a transaction for packed refs
      t1404: demonstrate two problems with reference transactions
      files_ref_store: use a transaction to update packed refs
      packed-backend: rip out some now-unused code
      files_transaction_finish(): delete reflogs before references
      ref_iterator: keep track of whether the iterator output is ordered
      packed_ref_cache: add a backlink to the associated `packed_ref_store`
      die_unterminated_line(), die_invalid_line(): new functions
      read_packed_refs(): use mmap to read the `packed-refs` file
      read_packed_refs(): only check for a header at the top of the file
      read_packed_refs(): make parsing of the header line more robust
      for_each_string_list_item: avoid undefined behavior for empty list
      read_packed_refs(): read references with minimal copying
      packed_ref_cache: remember the file-wide peeling state
      mmapped_ref_iterator: add iterator over a packed-refs file
      mmapped_ref_iterator_advance(): no peeled value for broken refs
      packed-backend.c: reorder some definitions
      packed_ref_cache: keep the `packed-refs` file mmapped if possible
      read_packed_refs(): ensure that references are ordered when read
      packed_ref_iterator_begin(): iterate using `mmapped_ref_iterator`
      packed_read_raw_ref(): read the reference from the mmapped buffer
      ref_store: implement `refs_peel_ref()` generically
      packed_ref_store: get rid of the `ref_cache` entirely
      ref_cache: remove support for storing peeled values
      mmapped_ref_iterator: inline into `packed_ref_iterator`
      packed-backend.c: rename a bunch of things and update comments

Michael J Gruber (11):
      Documentation: use proper wording for ref format strings
      Documentation/git-for-each-ref: clarify peeling of tags for --format
      Documentation/git-merge: explain --continue
      merge: clarify call chain
      merge: split write_merge_state in two
      merge: save merge state earlier
      name-rev: change ULONG_MAX to TIME_MAX
      t7004: move limited stack prereq to test-lib
      t6120: test name-rev --all and --stdin
      t6120: clean up state after breaking repo
      t6120: test describe and name-rev with deep repos

Nguyễn Thái Ngọc Duy (17):
      branch: fix branch renaming not updating HEADs correctly
      revision.h: new flag in struct rev_info wrt. worktree-related refs
      refs.c: use is_dir_sep() in resolve_gitlink_ref()
      revision.c: refactor add_index_objects_to_pending()
      revision.c: --indexed-objects add objects from all worktrees
      refs.c: refactor get_submodule_ref_store(), share common free block
      refs: move submodule slash stripping code to get_submodule_ref_store
      refs: add refs_head_ref()
      revision.c: use refs_for_each*() instead of for_each_*_submodule()
      refs.c: move for_each_remote_ref_submodule() to submodule.c
      refs: remove dead for_each_*_submodule()
      revision.c: --all adds HEAD from all worktrees
      files-backend: make reflog iterator go through per-worktree reflog
      revision.c: --reflog add HEAD reflog from all worktrees
      rev-list: expose and document --single-worktree
      refs.c: remove fallback-to-main-store code get_submodule_ref_store()
      refs.c: reindent get_submodule_ref_store()

Nicolas Morey-Chaisemartin (7):
      stash: clean untracked files before reset
      pull: fix cli and config option parsing order
      pull: honor submodule.recurse config option
      imap-send: return with error if curl failed
      imap-send: add wrapper to get server credentials if needed
      imap_send: setup_curl: retreive credentials if not set in config file
      imap-send: use curl by default when possible

Paolo Bonzini (4):
      trailers: export action enums and corresponding lookup functions
      trailers: introduce struct new_trailer_item
      interpret-trailers: add options for actions
      interpret-trailers: fix documentation typo

Patryk Obara (10):
      sha1_file: fix definition of null_sha1
      commit: replace the raw buffer with strbuf in read_graft_line
      commit: allocate array using object_id size
      commit: rewrite read_graft_line
      builtin/hash-object: convert to struct object_id
      read-cache: convert to struct object_id
      sha1_file: convert index_path to struct object_id
      sha1_file: convert index_fd to struct object_id
      sha1_file: convert hash_sha1_file_literally to struct object_id
      sha1_file: convert index_stream to struct object_id

Philip Oakley (4):
      git-gui: remove duplicate entries from .gitconfig's gui.recentrepo
      git gui: cope with duplicates in _get_recentrepo
      git gui: de-dup selected repo from recentrepo history
      git gui: allow for a long recentrepo list

Phillip Wood (7):
      am: remember --rerere-autoupdate setting
      rebase: honor --rerere-autoupdate
      rebase -i: honor --rerere-autoupdate
      t3504: use test_commit
      cherry-pick/revert: remember --rerere-autoupdate
      cherry-pick/revert: reject --rerere-autoupdate when continuing
      am: fix signoff when other trailers are present

Ralf Thielow (2):
      sequencer.c: fix and unify error messages in rearrange_squash()
      sequencer.c: unify an error message

Raman Gupta (1):
      contrib/rerere-train: optionally overwrite existing resolutions

Ramsay Jones (9):
      credential-cache: interpret an ECONNRESET as an EOF
      builtin/add: add detail to a 'cannot chmod' error message
      test-lib: don't use ulimit in test prerequisites on cygwin
      test-lib: use more compact expression in PIPE prerequisite
      t9010-*.sh: skip all tests if the PIPE prereq is missing
      git-compat-util.h: xsize_t() - avoid -Wsign-compare warnings
      commit-slab.h: avoid -Wsign-compare warnings
      cache.h: hex2chr() - avoid -Wsign-compare warnings
      ALLOC_GROW: avoid -Wsign-compare warnings

Randall S. Becker (1):
      poll.c: always set revents, even if to zero

René Scharfe (81):
      tree-diff: don't access hash of NULL object_id pointer
      notes: don't access hash of NULL object_id pointer
      receive-pack: don't access hash of NULL object_id pointer
      bswap: convert to unsigned before shifting in get_be32
      bswap: convert get_be16, get_be32 and put_be32 to inline functions
      add MOVE_ARRAY
      use MOVE_ARRAY
      apply: use COPY_ARRAY and MOVE_ARRAY in update_image()
      ls-files: don't try to prune an empty index
      dir: support platforms that require aligned reads
      pack-objects: remove unnecessary NULL check
      t0001: skip test with restrictive permissions if getpwd(3) respects them
      test-path-utils: handle const parameter of basename and dirname
      t3700: fix broken test under !POSIXPERM
      t4062: use less than 256 repetitions in regex
      sha1_file: avoid comparison if no packed hash matches the first byte
      apply: remove prefix_length member from apply_state
      merge: use skip_prefix()
      win32: plug memory leak on realloc() failure in syslog()
      strbuf: clear errno before calling getdelim(3)
      fsck: free buffers on error in fsck_obj()
      sha1_file: release delta_stack on error in unpack_entry()
      tree-walk: convert fill_tree_descriptor() to object_id
      t1002: stop using sum(1)
      t5001: add tests for export-ignore attributes and exclude pathspecs
      archive: factor out helper functions for handling attributes
      archive: don't queue excluded directories
      commit: remove unused inline function single_parent()
      apply: check date of potential epoch timestamps first
      apply: remove epoch date from regex
      am: release strbufs after use in detect_patch_format()
      am: release strbuf on error return in hg_patch_to_mail()
      am: release strbuf after use in safe_to_abort()
      check-ref-format: release strbuf after use in check_ref_format_branch()
      clean: release strbuf after use in remove_dirs()
      clone: release strbuf after use in remove_junk()
      commit: release strbuf on error return in commit_tree_extended()
      connect: release strbuf on error return in git_connect()
      convert: release strbuf on error return in filter_buffer_or_fd()
      diff: release strbuf after use in diff_summary()
      diff: release strbuf after use in show_rename_copy()
      diff: release strbuf after use in show_stats()
      help: release strbuf on error return in exec_man_konqueror()
      help: release strbuf on error return in exec_man_man()
      help: release strbuf on error return in exec_woman_emacs()
      mailinfo: release strbuf after use in handle_from()
      mailinfo: release strbuf on error return in handle_boundary()
      merge: release strbuf after use in save_state()
      merge: release strbuf after use in write_merge_heads()
      notes: release strbuf after use in notes_copy_from_stdin()
      refs: release strbuf on error return in write_pseudoref()
      remote: release strbuf after use in read_remote_branches()
      remote: release strbuf after use in migrate_file()
      remote: release strbuf after use in set_url()
      send-pack: release strbuf on error return in send_pack()
      sha1_file: release strbuf on error return in index_path()
      shortlog: release strbuf after use in insert_one_record()
      sequencer: release strbuf after use in save_head()
      transport-helper: release strbuf after use in process_connect_service()
      userdiff: release strbuf after use in userdiff_get_textconv()
      utf8: release strbuf on error return in strbuf_utf8_replace()
      vcs-svn: release strbuf after use in end_revision()
      wt-status: release strbuf after use in read_rebase_todolist()
      wt-status: release strbuf after use in wt_longstatus_print_tracking()
      archive: don't add empty directories to archives
      refs: make sha1 output parameter of refs_resolve_ref_unsafe() optional
      refs: pass NULL to refs_resolve_ref_unsafe() if hash is not needed
      refs: pass NULL to resolve_ref_unsafe() if hash is not needed
      mailinfo: don't decode invalid =XY quoted-printable sequences
      refs: pass NULL to refs_resolve_refdup() if hash is not needed
      refs: pass NULL to resolve_refdup() if hash is not needed
      coccinelle: remove parentheses that become unnecessary
      path: use strbuf_add_real_path()
      use strbuf_addstr() for adding strings to strbufs
      graph: use strbuf_addchars() to add spaces
      tag: avoid NULL pointer arithmetic
      repository: use FREE_AND_NULL
      run-command: use ALLOC_ARRAY
      test-stringlist: avoid buffer underrun when sorting nothing
      fsck: handle NULL return of lookup_blob() and lookup_tree()
      .mailmap: normalize name for René Scharfe

Ross Kabus (1):
      commit-tree: do not complete line in -F input

Sahil Dua (2):
      config: create a function to format section headers
      branch: add a --copy (-c) option to go with --move (-m)

Santiago Torres (1):
      t: lib-gpg: flush gpg agent on startup

Stefan Beller (51):
      diff.c: readability fix
      diff.c: move line ending check into emit_hunk_header
      diff.c: factor out diff_flush_patch_all_file_pairs
      diff.c: introduce emit_diff_symbol
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_CONTEXT_MARKER
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_CONTEXT_FRAGINFO
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_NO_LF_EOF
      diff.c: migrate emit_line_checked to use emit_diff_symbol
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_WORDS[_PORCELAIN]
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_CONTEXT_INCOMPLETE
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_FILEPAIR_{PLUS, MINUS}
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_HEADER
      diff.c: emit_diff_symbol learns about DIFF_SYMBOL_BINARY_FILES
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_REWRITE_DIFF
      submodule.c: migrate diff output to use emit_diff_symbol
      diff.c: convert emit_binary_diff_body to use emit_diff_symbol
      diff.c: convert show_stats to use emit_diff_symbol
      diff.c: convert word diffing to use emit_diff_symbol
      diff.c: emit_diff_symbol learns about DIFF_SYMBOL_STAT_SEP
      diff.c: emit_diff_symbol learns about DIFF_SYMBOL_SUMMARY
      diff.c: buffer all output if asked to
      diff.c: color moved lines differently
      diff.c: color moved lines differently, plain mode
      diff.c: add dimming to moved line detection
      diff: document the new --color-moved setting
      attr.c: drop hashmap_cmp_fn cast
      builtin/difftool.c: drop hashmap_cmp_fn cast
      builtin/describe: drop hashmap_cmp_fn cast
      config.c: drop hashmap_cmp_fn cast
      convert/sub-process: drop cast to hashmap_cmp_fn
      patch-ids.c: drop hashmap_cmp_fn cast
      remote.c: drop hashmap_cmp_fn cast
      submodule-config.c: drop hashmap_cmp_fn cast
      name-hash.c: drop hashmap_cmp_fn cast
      t/helper/test-hashmap: use custom data instead of duplicate cmp functions
      commit: convert lookup_commit_graft to struct object_id
      tag: convert gpg_verify_tag to use struct object_id
      t8008: rely on rev-parse'd HEAD instead of sha1 value
      t1200: remove t1200-tutorial.sh
      sha1_file: make read_info_alternates static
      submodule.sh: remove unused variable
      builtin/merge: honor commit-msg hook for merges
      push, fetch: error out for submodule entries not pointing to commits
      replace-objects: evaluate replacement refs without using the object store
      Documentation/githooks: mention merge in commit-msg hook
      Documentation/config: clarify the meaning of submodule.<name>.update
      t7406: submodule.<name>.update command must not be run from .gitmodules
      diff: correct newline in summary for renamed files
      submodule: correct error message for missing commits
      branch: reset instead of release a strbuf
      tests: fix diff order arguments in test_cmp

Stephan Beyer (1):
      clang-format: add a comment about the meaning/status of the

Takashi Iwai (2):
      sha1dc: build git plumbing code more explicitly
      sha1dc: allow building with the external sha1dc library

Taylor Blau (8):
      pretty.c: delimit "%(trailers)" arguments with ","
      t4205: unfold across multiple lines
      doc: 'trailers' is the preferred way to format trailers
      doc: use "`<literal>`"-style quoting for literal strings
      t6300: refactor %(trailers) tests
      ref-filter.c: use trailer_opts to format trailers
      ref-filter.c: parse trailers arguments with %(contents) atom
      ref-filter.c: pass empty-string as NULL to atom parsers

Thomas Braun (1):
      completion: add --broken and --dirty to describe

Thomas Gummerer (3):
      read-cache: fix index corruption with index v4
      refs: strip out not allowed flags from ref_transaction_update
      http-push: fix construction of hex value from path

Todd Zullinger (1):
      api-argv-array.txt: remove broken link to string-list API

Tom G. Christensen (2):
      http: fix handling of missing CURLPROTO_*
      http: use a feature check to enable GSSAPI delegation control

Torsten Bögershausen (3):
      convert: add SAFE_CRLF_KEEP_CRLF
      apply: file commited with CRLF should roundtrip diff and apply
      test-lint: echo -e (or -E) is not portable

Urs Thuermann (1):
      git svn fetch: Create correct commit timestamp when using --localtime

W. Trevor King (1):
      Documentation/merge-options.txt: describe -S/--gpg-sign for 'pull'

William Duclot (1):
      rebase: make resolve message clearer for inexperienced users

brian m. carlson (14):
      builtin/fsck: convert remaining caller of get_sha1 to object_id
      builtin/merge-tree: convert remaining caller of get_sha1 to object_id
      submodule: convert submodule config lookup to use object_id
      remote: convert struct push_cas to struct object_id
      sequencer: convert to struct object_id
      builtin/update_ref: convert to struct object_id
      bisect: convert bisect_checkout to struct object_id
      builtin/unpack-file: convert to struct object_id
      Convert remaining callers of get_sha1 to get_oid.
      sha1_name: convert get_sha1* to get_oid*
      sha1_name: convert GET_SHA1* flags to GET_OID*
      sha1_name: convert uses of 40 to GIT_SHA1_HEXSZ
      vcs-svn: remove unused prototypes
      vcs-svn: rename repo functions to "svn_repo"

joernchen (1):
      cvsserver: use safe_pipe_capture instead of backticks

Ævar Arnfjörð Bjarmason (2):
      branch: add test for -m renaming multiple config sections
      tests: don't give unportable ">" to "test" built-in, use -gt

Øystein Walle (1):
      rev-parse: rev-parse: add --is-shallow-repository

Łukasz Gryglicki (1):
      merge: add a --signoff flag


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.15.0-rc1
@ 2017-10-11  6:35  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2017-10-11  6:35 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

A release candidate Git v2.15.0-rc1 is now available for testing
at the usual places.  It is comprised of 721 non-merge commits
since v2.14.0, contributed by 72 people, 22 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.15.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.14.0 are as follows.
Welcome to the Git development community!

  Ann T Ropea, Daniel Watkins, Derrick Stolee, Dimitrios
  Christidis, Eric Rannaud, Evan Zacks, Hielke Christian Braun,
  Ian Campbell, Ilya Kantor, Jameson Miller, Job Snijders, Joel
  Teichroeb, joernchen, Łukasz Gryglicki, Manav Rathi, Martin
  Ågren, Michael Forney, Patryk Obara, Randall S. Becker, Ross
  Kabus, Taylor Blau, and Urs Thuermann.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Andreas Heiduk,
  Anthony Sottile, Ben Boeckel, Brandon Casey, Brandon Williams,
  brian m. carlson, Christian Couder, Eric Blake, Han-Wen Nienhuys,
  Heiko Voigt, Jean-Noel Avila, Jeff Hostetler, Jeff King, Johannes
  Schindelin, Johannes Sixt, Jonathan Nieder, Jonathan Tan,
  Junio C Hamano, Kaartic Sivaraam, Kevin Daudt, Kevin Willford,
  Lars Schneider, Martin Koegler, Matthieu Moy, Max Kirillov,
  Michael Haggerty, Michael J Gruber, Nguyễn Thái Ngọc Duy,
  Nicolas Morey-Chaisemartin, Øystein Walle, Paolo Bonzini,
  Pat Thoyts, Philip Oakley, Phillip Wood, Raman Gupta, Ramsay
  Jones, René Scharfe, Sahil Dua, Santiago Torres, Stefan Beller,
  Stephan Beyer, Takashi Iwai, Thomas Braun, Thomas Gummerer,
  Todd Zullinger, Tom G. Christensen, Torsten Bögershausen,
  and William Duclot.

----------------------------------------------------------------

Git 2.15 Release Notes (draft)
==============================

Backward compatibility notes and other notable changes.

 * Use of an empty string as a pathspec element that is used for
   'everything matches' is still warned and Git asks users to use a
   more explicit '.' for that instead.  The hope is that existing
   users will not mind this change, and eventually the warning can be
   turned into a hard error, upgrading the deprecation into removal of
   this (mis)feature.  That is now scheduled to happen in Git v2.16,
   the next major release after this one.

 * Git now avoids blindly falling back to ".git" when the setup
   sequence said we are _not_ in Git repository.  A corner case that
   happens to work right now may be broken by a call to BUG().
   We've tried hard to locate such cases and fixed them, but there
   might still be cases that need to be addressed--bug reports are
   greatly appreciated.

 * "branch --set-upstream" that has been deprecated in Git 1.8 has
   finally been retired.


Updates since v2.14
-------------------

UI, Workflows & Features

 * An example that is now obsolete has been removed from a sample hook,
   and an old example in it that added a sign-off manually has been
   improved to use the interpret-trailers command.

 * The advice message given when "git rebase" stops for conflicting
   changes has been improved.

 * The "rerere-train" script (in contrib/) learned the "--overwrite"
   option to allow overwriting existing recorded resolutions.

 * "git contacts" (in contrib/) now lists the address on the
   "Reported-by:" trailer to its output, in addition to those on
   S-o-b: and other trailers, to make it easier to notify (and thank)
   the original bug reporter.

 * "git rebase", especially when it is run by mistake and ends up
   trying to replay many changes, spent long time in silence.  The
   command has been taught to show progress report when it spends
   long time preparing these many changes to replay (which would give
   the user a chance to abort with ^C).

 * "git merge" learned a "--signoff" option to add the Signed-off-by:
   trailer with the committer's name.

 * "git diff" learned to optionally paint new lines that are the same
   as deleted lines elsewhere differently from genuinely new lines.

 * "git interpret-trailers" learned to take the trailer specifications
   from the command line that overrides the configured values.

 * "git interpret-trailers" has been taught a "--parse" and a few
   other options to make it easier for scripts to grab existing
   trailer lines from a commit log message.

 * The "--format=%(trailers)" option "git log" and its friends take
   learned to take the 'unfold' and 'only' modifiers to normalize its
   output, e.g. "git log --format=%(trailers:only,unfold)".

 * "gitweb" shows a link to visit the 'raw' contents of blbos in the
   history overview page.

 * "[gc] rerereResolved = 5.days" used to be invalid, as the variable
   is defined to take an integer counting the number of days.  It now
   is allowed.

 * The code to acquire a lock on a reference (e.g. while accepting a
   push from a client) used to immediately fail when the reference is
   already locked---now it waits for a very short while and retries,
   which can make it succeed if the lock holder was holding it during
   a read-only operation.

 * "branch --set-upstream" that has been deprecated in Git 1.8 has
   finally been retired.

 * The codepath to call external process filter for smudge/clean
   operation learned to show the progress meter.

 * "git rev-parse" learned "--is-shallow-repository", that is to be
   used in a way similar to existing "--is-bare-repository" and
   friends.

 * "git describe --match <pattern>" has been taught to play well with
   the "--all" option.

 * "git branch" learned "-c/-C" to create a new branch by copying an
   existing one.

 * Some commands (most notably "git status") makes an opportunistic
   update when performing a read-only operation to help optimize later
   operations in the same repository.  The new "--no-optional-locks"
   option can be passed to Git to disable them.

 * "git for-each-ref --format=..." learned a new format element,
   %(trailers), to show only the commit log trailer part of the log
   message.


Performance, Internal Implementation, Development Support etc.

 * Conversion from uchar[20] to struct object_id continues.

 * Start using selected c99 constructs in small, stable and
   essentialpart of the system to catch people who care about
   older compilers that do not grok them.

 * The filter-process interface learned to allow a process with long
   latency give a "delayed" response.

 * Many uses of comparision callback function the hashmap API uses
   cast the callback function type when registering it to
   hashmap_init(), which defeats the compile time type checking when
   the callback interface changes (e.g. gaining more parameters).
   The callback implementations have been updated to take "void *"
   pointers and cast them to the type they expect instead.

 * Because recent Git for Windows do come with a real msgfmt, the
   build procedure for git-gui has been updated to use it instead of a
   hand-rolled substitute.

 * "git grep --recurse-submodules" has been reworked to give a more
   consistent output across submodule boundary (and do its thing
   without having to fork a separate process).

 * A helper function to read a single whole line into strbuf
   mistakenly triggered OOM error at EOF under certain conditions,
   which has been fixed.
   (merge 642956cf45 rs/strbuf-getwholeline-fix later to maint).

 * The "ref-store" code reorganization continues.

 * "git commit" used to discard the index and re-read from the filesystem
   just in case the pre-commit hook has updated it in the middle; this
   has been optimized out when we know we do not run the pre-commit hook.
   (merge 680ee550d7 kw/commit-keep-index-when-pre-commit-is-not-run later to maint).

 * Updates to the HTTP layer we made recently unconditionally used
   features of libCurl without checking the existence of them, causing
   compilation errors, which has been fixed.  Also migrate the code to
   check feature macros, not version numbers, to cope better with
   libCurl that vendor ships with backported features.

 * The API to start showing progress meter after a short delay has
   been simplified.
   (merge 8aade107dd jc/simplify-progress later to maint).

 * Code clean-up to avoid mixing values read from the .gitmodules file
   and values read from the .git/config file.

 * We used to spend more than necessary cycles allocating and freeing
   piece of memory while writing each index entry out.  This has been
   optimized.

 * Platforms that ship with a separate sha1 with collision detection
   library can link to it instead of using the copy we ship as part of
   our source tree.

 * Code around "notes" have been cleaned up.
   (merge 3964281524 mh/notes-cleanup later to maint).

 * The long-standing rule that an in-core lockfile instance, once it
   is used, must not be freed, has been lifted and the lockfile and
   tempfile APIs have been updated to reduce the chance of programming
   errors.

 * Our hashmap implementation in hashmap.[ch] is not thread-safe when
   adding a new item needs to expand the hashtable by rehashing; add
   an API to disable the automatic rehashing to work it around.

 * Many of our programs consider that it is OK to release dynamic
   storage that is used throughout the life of the program by simply
   exiting, but this makes it harder to leak detection tools to avoid
   reporting false positives.  Plug many existing leaks and introduce
   a mechanism for developers to mark that the region of memory
   pointed by a pointer is not lost/leaking to help these tools.

 * As "git commit" to conclude a conflicted "git merge" honors the
   commit-msg hook, "git merge" that records a merge commit that
   cleanly auto-merges should, but it didn't.

 * The codepath for "git merge-recursive" has been cleaned up.

 * Many leaks of strbuf have been fixed.

 * "git imap-send" has our own implementation of the protocol and also
   can use more recent libCurl with the imap protocol support.  Update
   the latter so that it can use the credential subsystem, and then
   make it the default option to use, so that we can eventually
   deprecate and remove the former.

 * "make style" runs git-clang-format to help developers by pointing
   out coding style issues.

 * A test to demonstrate "git mv" failing to adjust nested submodules
   has been added.
   (merge c514167df2 hv/mv-nested-submodules-test later to maint).

 * On Cygwin, "ulimit -s" does not report failure but it does not work
   at all, which causes an unexpected success of some tests that
   expect failures under a limited stack situation.  This has been
   fixed.

 * Many codepaths have been updated to squelch -Wimplicit-fallthrough
   warnings from Gcc 7 (which is a good code hygiene).

 * Add a helper for DLL loading in anticipation for its need in a
   future topic RSN.

 * "git status --ignored", when noticing that a directory without any
   tracked path is ignored, still enumerated all the ignored paths in
   the directory, which is unnecessary.  The codepath has been
   optimized to avoid this overhead.

 * The final batch to "git rebase -i" updates to move more code from
   the shell script to C has been merged.

 * Operations that do not touch (majority of) packed refs have been
   optimized by making accesses to packed-refs file lazy; we no longer
   pre-parse everything, and an access to a single ref in the
   packed-refs does not touch majority of irrelevant refs, either.

 * Add comment to clarify that the style file is meant to be used with
   clang-5 and the rules are still work in progress.

 * Many variables that points at a region of memory that will live
   throughout the life of the program have been marked with UNLEAK
   marker to help the leak checkers concentrate on real leaks..

 * Plans for weaning us off of SHA-1 has been documented.

 * A new "oidmap" API has been introduced and oidset API has been
   rewritten to use it.


Also contains various documentation updates and code clean-ups.


Fixes since v2.14
-----------------

 * "%C(color name)" in the pretty print format always produced ANSI
   color escape codes, which was an early design mistake.  They now
   honor the configuration (e.g. "color.ui = never") and also tty-ness
   of the output medium.

 * The http.{sslkey,sslCert} configuration variables are to be
   interpreted as a pathname that honors "~[username]/" prefix, but
   weren't, which has been fixed.

 * Numerous bugs in walking of reflogs via "log -g" and friends have
   been fixed.

 * "git commit" when seeing an totally empty message said "you did not
   edit the message", which is clearly wrong.  The message has been
   corrected.

 * When a directory is not readable, "gitweb" fails to build the
   project list.  Work this around by skipping such a directory.

 * Some versions of GnuPG fails to kill gpg-agent it auto-spawned
   and such a left-over agent can interfere with a test.  Work it
   around by attempting to kill one before starting a new test.

 * A recently added test for the "credential-cache" helper revealed
   that EOF detection done around the time the connection to the cache
   daemon is torn down were flaky.  This was fixed by reacting to
   ECONNRESET and behaving as if we got an EOF.

 * "git log --tag=no-such-tag" showed log starting from HEAD, which
   has been fixed---it now shows nothing.

 * The "tag.pager" configuration variable was useless for those who
   actually create tag objects, as it interfered with the use of an
   editor.  A new mechanism has been introduced for commands to enable
   pager depending on what operation is being carried out to fix this,
   and then "git tag -l" is made to run pager by default.

 * "git push --recurse-submodules $there HEAD:$target" was not
   propagated down to the submodules, but now it is.

 * Commands like "git rebase" accepted the --rerere-autoupdate option
   from the command line, but did not always use it.  This has been
   fixed.

 * "git clone --recurse-submodules --quiet" did not pass the quiet
   option down to submodules.

 * Test portability fix for OBSD.

 * Portability fix for OBSD.

 * "git am -s" has been taught that some input may end with a trailer
   block that is not Signed-off-by: and it should refrain from adding
   an extra blank line before adding a new sign-off in such a case.

 * "git svn" used with "--localtime" option did not compute the tz
   offset for the timestamp in question and instead always used the
   current time, which has been corrected.

 * Memory leak in an error codepath has been plugged.

 * "git stash -u" used the contents of the committed version of the
   ".gitignore" file to decide which paths are ignored, even when the
   file has local changes.  The command has been taught to instead use
   the locally modified contents.

 * bash 4.4 or newer gave a warning on NUL byte in command
   substitution done in "git stash"; this has been squelched.

 * "git grep -L" and "git grep --quiet -L" reported different exit
   codes; this has been corrected.

 * When handshake with a subprocess filter notices that the process
   asked for an unknown capability, Git did not report what program
   the offending subprocess was running.  This has been corrected.

 * "git apply" that is used as a better "patch -p1" failed to apply a
   taken from a file with CRLF line endings to a file with CRLF line
   endings.  The root cause was because it misused convert_to_git()
   that tried to do "safe-crlf" processing by looking at the index
   entry at the same path, which is a nonsense---in that mode, "apply"
   is not working on the data in (or derived from) the index at all.
   This has been fixed.

 * Killing "git merge --edit" before the editor returns control left
   the repository in a state with MERGE_MSG but without MERGE_HEAD,
   which incorrectly tells the subsequent "git commit" that there was
   a squash merge in progress.  This has been fixed.

 * "git archive" did not work well with pathspecs and the
   export-ignore attribute.

 * In addition to "cc: <a@dd.re.ss> # cruft", "cc: a@dd.re.ss # cruft"
   was taught to "git send-email" as a valid way to tell it that it
   needs to also send a carbon copy to <a@dd.re.ss> in the trailer
   section.
   (merge cc90750677 mm/send-email-cc-cruft later to maint).

 * "git branch -M a b" while on a branch that is completely unrelated
   to either branch a or branch b misbehaved when multiple worktree
   was in use.  This has been fixed.
   (merge 31824d180d nd/worktree-kill-parse-ref later to maint).

 * "git gc" and friends when multiple worktrees are used off of a
   single repository did not consider the index and per-worktree refs
   of other worktrees as the root for reachability traversal, making
   objects that are in use only in other worktrees to be subject to
   garbage collection.

 * A regression to "gitk --bisect" by a recent update has been fixed.
   (merge 1d0538e486 mh/packed-ref-store-prep later to maint).

 * "git -c submodule.recurse=yes pull" did not work as if the
   "--recurse-submodules" option was given from the command line.
   This has been corrected.

 * Unlike "git commit-tree < file", "git commit-tree -F file" did not
   pass the contents of the file verbatim and instead completed an
   incomplete line at the end, if exists.  The latter has been updated
   to match the behaviour of the former.
   (merge c818e74332 rk/commit-tree-make-F-verbatim later to maint).

 * Many codepaths did not diagnose write failures correctly when disks
   go full, due to their misuse of write_in_full() helper function,
   which have been corrected.
   (merge f48ecd38cb jk/write-in-full-fix later to maint).

 * "git help co" now says "co is aliased to ...", not "git co is".
   (merge b3a8076e0d ks/help-alias-label later to maint).

 * "git archive", especially when used with pathspec, stored an empty
   directory in its output, even though Git itself never does so.
   This has been fixed.
   (merge 4318094047 rs/archive-excluded-directory later to maint).

 * API error-proofing which happens to also squelch warnings from GCC.
   (merge c788c54cde tg/refs-allowed-flags later to maint).

 * The explanation of the cut-line in the commit log editor has been
   slightly tweaked.
   (merge 8c4b1a3593 ks/commit-do-not-touch-cut-line later to maint).

 * "git gc" tries to avoid running two instances at the same time by
   reading and writing pid/host from and to a lock file; it used to
   use an incorrect fscanf() format when reading, which has been
   corrected.
   (merge afe2fab72c aw/gc-lockfile-fscanf-fix later to maint).

 * The scripts to drive TravisCI has been reorganized and then an
   optimization to avoid spending cycles on a branch whose tip is
   tagged has been implemented.
   (merge 8376eb4a8f ls/travis-scriptify later to maint).

 * The test linter has been taught that we do not like "echo -e".
   (merge 1a6d46895d tb/test-lint-echo-e later to maint).

 * Code cmp.std.c nitpick.
   (merge ac7da78ede mh/for-each-string-list-item-empty-fix later to maint).

 * A regression fix for 2.11 that made the code to read the list of
   alternate object stores overrun the end of the string.
   (merge f0f7bebef7 jk/info-alternates-fix later to maint).

 * "git describe --match" learned to take multiple patterns in v2.13
   series, but the feature ignored the patterns after the first one
   and did not work at all.  This has been fixed.
   (merge da769d2986 jk/describe-omit-some-refs later to maint).

 * "git filter-branch" cannot reproduce a history with a tag without
   the tagger field, which only ancient versions of Git allowed to be
   created.  This has been corrected.
   (merge b2c1ca6b4b ic/fix-filter-branch-to-handle-tag-without-tagger later to maint).

 * "git cat-file --textconv" started segfaulting recently, which
   has been corrected.
   (merge cc0ea7c9e5 jk/diff-blob later to maint).

 * The built-in pattern to detect the "function header" for HTML did
   not match <H1>..<H6> elements without any attributes, which has
   been fixed.
   (merge 9c03caca2c ik/userdiff-html-h-element-fix later to maint).

 * "git mailinfo" was loose in decoding quoted printable and produced
   garbage when the two letters after the equal sign are not
   hexadecimal.  This has been fixed.
   (merge c8cf423eab rs/mailinfo-qp-decode-fix later to maint).

 * The machinery to create xdelta used in pack files received the
   sizes of the data in size_t, but lost the higher bits of them by
   storing them in "unsigned int" during the computation, which is
   fixed.

 * The delta format used in the packfile cannot reference data at
   offset larger than what can be expressed in 4-byte, but the
   generator for the data failed to make sure the offset does not
   overflow.  This has been corrected.

 * The documentation for '-X<option>' for merges was misleadingly
   written to suggest that "-s theirs" exists, which is not the case.
   (merge c25d98b2a7 jc/merge-x-theirs-docfix later to maint).

 * "git fast-export" with -M/-C option issued "copy" instruction on a
   path that is simultaneously modified, which was incorrect.
   (merge b3e8ca89cf jt/fast-export-copy-modify-fix later to maint).

 * Many codepaths have been updated to squelch -Wsign-compare
   warnings.
   (merge 071bcaab64 rj/no-sign-compare later to maint).

 * Memory leaks in various codepaths have been plugged.
   (merge 4d01a7fa65 ma/leakplugs later to maint).

 * Recent versions of "git rev-parse --parseopt" did not parse the
   option specification that does not have the optional flags (*=?!)
   correctly, which has been corrected.
   (merge a6304fa4c2 bc/rev-parse-parseopt-fix later to maint).

 * The checkpoint command "git fast-import" did not flush updates to
   refs and marks unless at least one object was created since the
   last checkpoint, which has been corrected, as these things can
   happen without any new object getting created.
   (merge 30e215a65c er/fast-import-dump-refs-on-checkpoint later to maint).

 * Spell the name of our system as "Git" in the output from
   request-pull script.
   (merge e66d7c37a5 ar/request-pull-phrasofix later to maint).

 * Fixes for a handful memory access issues identified by valgrind.
   (merge 2944a94c6b tg/memfixes later to maint).

 * Backports a moral equivalent of 2015 fix to the poll() emulation
   from the upstream gnulib to fix occasional breakages on HPE NonStop.
   (merge 61b2a1acaa rb/compat-poll-fix later to maint).

 * Users with "color.ui = always" in their configuration were broken
   by a recent change that made plumbing commands to pay attention to
   them as the patch created internally by "git add -p" were colored
   (heh) and made unusable.  Fix this regression by redefining
   'always' to mean the same thing as 'auto'.
   (merge 6be4595edb jk/ui-color-always-to-auto-maint later to maint).

 * In the "--format=..." option of the "git for-each-ref" command (and
   its friends, i.e. the listing mode of "git branch/tag"), "%(atom:)"
   (e.g. "%(refname:)", "%(body:)" used to error out.  Instead, treat
   them as if the colon and an empty string that follows it were not
   there.
   (merge bea4dbeafd tb/ref-filter-empty-modifier later to maint).

 * An ancient bug that made Git misbehave with creation/renaming of
   refs has been fixed.

 * Other minor doc, test and build updates and code cleanups.
   (merge f094b89a4d ma/parse-maybe-bool later to maint).
   (merge 39b00fa4d4 jk/drop-sha1-entry-pos later to maint).
   (merge 6cdf8a7929 ma/ts-cleanups later to maint).
   (merge 7560f547e6 ma/up-to-date later to maint).
   (merge 0db3dc75f3 rs/apply-epoch later to maint).
   (merge 74f1bd912b dw/diff-highlight-makefile-fix later to maint).
   (merge f991761eb8 jk/config-lockfile-leak-fix later to maint).
   (merge 150efef1e7 ma/pkt-line-leakfix later to maint).
   (merge 5554451de6 mg/timestamp-t-fix later to maint).
   (merge 276d0e35c0 ma/split-symref-update-fix later to maint).
   (merge 3bc4b8f7c7 bb/doc-eol-dirty later to maint).
   (merge c1bb33c99c jk/system-path-cleanup later to maint).
   (merge ab46e6fc72 cc/subprocess-handshake-missing-capabilities later to maint).
   (merge f7a32dd97f kd/doc-for-each-ref later to maint).
   (merge be94568bc7 ez/doc-duplicated-words-fix later to maint).
   (merge 01e4be6c3d ks/test-readme-phrasofix later to maint).
   (merge 217bb56d4f hn/typofix later to maint).
   (merge c08fd6388c jk/doc-read-tree-table-asciidoctor-fix later to maint).
   (merge c3342b362e ks/doc-use-camelcase-for-config-name later to maint).
   (merge 0bca165fdb jk/validate-headref-fix later to maint).
   (merge 93dbefb389 mr/doc-negative-pathspec later to maint).
   (merge 5e633326e4 ad/doc-markup-fix later to maint).
   (merge 9ca356fa8b rs/cocci-de-paren-call-params later to maint).
   (merge 7099153e8d rs/tag-null-pointer-arith-fix later to maint).
   (merge 0e187d758c rs/run-command-use-alloc-array later to maint).
   (merge e0222159fa jn/strbuf-doc-re-reuse later to maint).
   (merge 97487ea11a rs/qsort-s later to maint).
   (merge a9155c50bd sb/branch-avoid-repeated-strbuf-release later to maint).
   (merge f777623514 ks/branch-tweak-error-message-for-extra-args later to maint).
   (merge 33f3c683ec ks/verify-filename-non-option-error-message-tweak later to maint).
   (merge b3ea7dd32d jk/sha1-loose-object-info-fix later to maint).
   (merge 2720f6db5d rs/fsck-null-return-from-lookup later to maint).
   (merge 99b7b687a6 rs/rs-mailmap later to maint).
   (merge 7823655082 tb/complete-describe later to maint).
   (merge 7cbbf9d6a2 ls/filter-process-delayed later to maint).

----------------------------------------------------------------

Changes since v2.14.0 are as follows:

Adam Dinwoodie (1):
      doc: correct command formatting

Andreas Heiduk (2):
      doc: add missing values "none" and "default" for diff.wsErrorHighlight
      doc: clarify "config --bool" behaviour with empty string

Ann T Ropea (1):
      request-pull: capitalise "Git" to make it a proper noun

Anthony Sottile (1):
      git-grep: correct exit code with --quiet and -L

Ben Boeckel (1):
      Documentation: mention that `eol` can change the dirty status of paths

Brandon Casey (7):
      t1502: demonstrate rev-parse --parseopt option mis-parsing
      rev-parse parseopt: do not search help text for flag chars
      rev-parse parseopt: interpret any whitespace as start of help text
      git-rebase: don't ignore unexpected command line arguments
      t0040,t1502: Demonstrate parse_options bugs
      parse-options: write blank line to correct output stream
      parse-options: only insert newline in help text if needed

Brandon Williams (29):
      repo_read_index: don't discard the index
      repository: have the_repository use the_index
      submodule--helper: teach push-check to handle HEAD
      cache.h: add GITMODULES_FILE macro
      config: add config_from_gitmodules
      submodule: remove submodule.fetchjobs from submodule-config parsing
      submodule: remove fetch.recursesubmodules from submodule-config parsing
      submodule: check for unstaged .gitmodules outside of config parsing
      submodule: check for unmerged .gitmodules outside of config parsing
      submodule: merge repo_read_gitmodules and gitmodules_config
      grep: recurse in-process using 'struct repository'
      t7411: check configuration parsing errors
      submodule: don't use submodule_from_name
      add, reset: ensure submodules can be added or reset
      submodule--helper: don't overlay config in remote_submodule_branch
      submodule--helper: don't overlay config in update-clone
      fetch: don't overlay config with submodule-config
      submodule: don't rely on overlayed config when setting diffopts
      unpack-trees: don't respect submodule.update
      submodule: remove submodule_config callback routine
      diff: stop allowing diff to have submodules configured in .git/config
      submodule-config: remove support for overlaying repository config
      submodule-config: move submodule-config functions to submodule-config.c
      submodule-config: lazy-load a repository's .gitmodules file
      unpack-trees: improve loading of .gitmodules
      submodule: remove gitmodules_config
      clone: teach recursive clones to respect -q
      clang-format: outline the git project's coding style
      Makefile: add style build rule

Christian Couder (3):
      refs: use skip_prefix() in ref_is_hidden()
      sub-process: print the cmd when a capability is unsupported
      sha1-lookup: remove sha1_entry_pos() from header file

Daniel Watkins (1):
      diff-highlight: add clean target to Makefile

Derrick Stolee (1):
      cleanup: fix possible overflow errors in binary search

Dimitrios Christidis (1):
      fmt-merge-msg: fix coding style

Eric Blake (1):
      git-contacts: also recognise "Reported-by:"

Eric Rannaud (1):
      fast-import: checkpoint: dump branches/tags/marks even if object_count==0

Evan Zacks (1):
      doc: fix minor typos (extra/duplicated words)

Han-Wen Nienhuys (5):
      submodule.h: typofix
      submodule.c: describe submodule_to_gitdir() in a new comment
      real_path: clarify return value ownership
      read_gitfile_gently: clarify return value ownership.
      string-list.h: move documentation from Documentation/api/ into header

Heiko Voigt (2):
      t5526: fix some broken && chains
      add test for bug in git-mv for recursive submodules

Hielke Christian Braun (1):
      gitweb: skip unreadable subdirectories

Ian Campbell (4):
      filter-branch: reset $GIT_* before cleaning up
      filter-branch: preserve and restore $GIT_AUTHOR_* and $GIT_COMMITTER_*
      filter-branch: stash away ref map in a branch
      filter-branch: use hash-object instead of mktag

Ilya Kantor (1):
      userdiff: fix HTML hunk header regexp

Jameson Miller (1):
      Improve performance of git status --ignored

Jean-Noel Avila (1):
      i18n: add a missing space in message

Jeff Hostetler (1):
      hashmap: add API to disable item counting when threaded

Jeff King (129):
      t1414: document some reflog-walk oddities
      revision: disallow reflog walking with revs->limited
      log: clarify comment about reflog cycles
      log: do not free parents when walking reflog
      get_revision_1(): replace do-while with an early return
      rev-list: check reflog_info before showing usage
      reflog-walk: stop using fake parents
      reflog-walk: apply --since/--until to reflog dates
      check return value of verify_ref_format()
      docs/for-each-ref: update pointer to color syntax
      t: use test_decode_color rather than literal ANSI codes
      ref-filter: simplify automatic color reset
      ref-filter: abstract ref format into its own struct
      ref-filter: move need_color_reset_at_eol into ref_format
      ref-filter: provide a function for parsing sort options
      ref-filter: make parse_ref_filter_atom a private function
      ref-filter: factor out the parsing of sorting atoms
      ref-filter: pass ref_format struct to atom parsers
      color: check color.ui in git_default_config()
      for-each-ref: load config earlier
      rev-list: pass diffopt->use_colors through to pretty-print
      pretty: respect color settings for %C placeholders
      ref-filter: consult want_color() before emitting colors
      strbuf: use designated initializers in STRBUF_INIT
      t/lib-proto-disable: restore protocol.allow after config tests
      t5813: add test for hostname starting with dash
      connect: factor out "looks like command line option" check
      connect: reject dashed arguments for proxy commands
      connect: reject paths that look like command line options
      t6018: flesh out empty input/output rev-list tests
      revision: add rev_input_given flag
      rev-list: don't show usage when we see empty ref patterns
      revision: do not fallback to default when rev_input_given is set
      hashcmp: use memcmp instead of open-coded loop
      sha1_file: drop experimental GIT_USE_LOOKUP search
      trailer: put process_trailers() options into a struct
      interpret-trailers: add an option to show only the trailers
      interpret-trailers: add an option to show only existing trailers
      interpret-trailers: add an option to unfold values
      interpret-trailers: add --parse convenience option
      pretty: move trailer formatting to trailer.c
      t4205: refactor %(trailers) tests
      pretty: support normalization options for %(trailers)
      doc: fix typo in sendemail.identity
      config: use a static lock_file struct
      write_index_as_tree: cleanup tempfile on error
      setup_temporary_shallow: avoid using inactive tempfile
      setup_temporary_shallow: move tempfile struct into function
      verify_signed_buffer: prefer close_tempfile() to close()
      always check return value of close_tempfile
      tempfile: do not delete tempfile on failed close
      lockfile: do not rollback lock on failed close
      tempfile: prefer is_tempfile_active to bare access
      tempfile: handle NULL tempfile pointers gracefully
      tempfile: replace die("BUG") with BUG()
      tempfile: factor out activation
      tempfile: factor out deactivation
      tempfile: robustify cleanup handler
      tempfile: release deactivated strbufs instead of resetting
      tempfile: use list.h for linked list
      tempfile: remove deactivated list entries
      tempfile: auto-allocate tempfiles on heap
      lockfile: update lifetime requirements in documentation
      ref_lock: stop leaking lock_files
      stop leaking lock structs in some simple cases
      test-lib: --valgrind should not override --verbose-log
      test-lib: set LSAN_OPTIONS to abort by default
      add: free leaked pathspec after add_files_to_cache()
      update-index: fix cache entry leak in add_one_file()
      config: plug user_config leak
      reset: make tree counting less confusing
      reset: free allocated tree buffers
      repository: free fields before overwriting them
      set_git_dir: handle feeding gitdir to itself
      rev-parse: don't trim bisect refnames
      system_path: move RUNTIME_PREFIX to a sub-function
      git_extract_argv0_path: do nothing without RUNTIME_PREFIX
      add UNLEAK annotation for reducing leak false positives
      shortlog: skip format/parse roundtrip for internal traversal
      shell: drop git-cvsserver support by default
      archimport: use safe_pipe_capture for user input
      cvsimport: shell-quote variable used in backticks
      config: avoid "write_in_full(fd, buf, len) < len" pattern
      get-tar-commit-id: check write_in_full() return against 0
      avoid "write_in_full(fd, buf, len) != len" pattern
      convert less-trivial versions of "write_in_full() != len"
      pkt-line: check write_in_full() errors against "< 0"
      notes-merge: use ssize_t for write_in_full() return value
      config: flip return value of store_write_*()
      read_pack_header: handle signed/unsigned comparison in read result
      prefix_ref_iterator: break when we leave the prefix
      read_info_alternates: read contents into strbuf
      read_info_alternates: warn on non-trivial errors
      revision: replace "struct cmdline_pathspec" with argv_array
      cat-file: handle NULL object_context.path
      test-line-buffer: simplify command parsing
      curl_trace(): eliminate switch fallthrough
      consistently use "fallthrough" comments in switches
      doc: put literal block delimiter around table
      files-backend: prefer "0" for write_in_full() error check
      notes-merge: drop dead zero-write code
      prefer "!=" when checking read_in_full() result
      avoid looking at errno for short read_in_full() returns
      distinguish error versus short read from read_in_full()
      worktree: use xsize_t to access file size
      worktree: check the result of read_in_full()
      validate_headref: NUL-terminate HEAD buffer
      validate_headref: use skip_prefix for symref parsing
      validate_headref: use get_oid_hex for detached HEADs
      git: add --no-optional-locks option
      test-terminal: set TERM=vt100
      t4015: prefer --color to -c color.diff=always
      t3701: use test-terminal to collect color output
      t7508: use test_terminal for color output
      t7502: use diff.noprefix for --verbose test
      t6006: drop "always" color config tests
      t3203: drop "always" color test
      t3205: use --color instead of color.branch=always
      provide --color option for all ref-filter users
      color: make "always" the same as "auto" in config
      t4015: use --color with --color-moved
      t7301: use test_terminal to check color
      path.c: fix uninitialized memory access
      sha1_loose_object_info: handle errors from unpack_sha1_rest
      t3308: create a real ref directory/file conflict
      refs_resolve_ref_unsafe: handle d/f conflicts for writes
      write_entry: fix leak when retrying delayed filter
      write_entry: avoid reading blobs in CE_RETRY case
      write_entry: untangle symlink and regular-file cases

Job Snijders (1):
      gitweb: add 'raw' blob_plain link in history overview

Joel Teichroeb (3):
      stash: add a test for stash create with no files
      stash: add a test for when apply fails during stash branch
      stash: add a test for stashing in a detached state

Johannes Schindelin (14):
      run_processes_parallel: change confusing task_cb convention
      git-gui (MinGW): make use of MSys2's msgfmt
      t3415: verify that an empty instructionFormat is handled as before
      rebase -i: generate the script via rebase--helper
      rebase -i: remove useless indentation
      rebase -i: do not invent onelines when expanding/collapsing SHA-1s
      rebase -i: also expand/collapse the SHA-1s via the rebase--helper
      t3404: relax rebase.missingCommitsCheck tests
      rebase -i: check for missing commits in the rebase--helper
      rebase -i: skip unnecessary picks using the rebase--helper
      t3415: test fixup with wrapped oneline
      rebase -i: rearrange fixup/squash lines using the rebase--helper
      Win32: simplify loading of DLL functions
      clang-format: adjust line break penalties

Johannes Sixt (1):
      sub-process: use child_process.args instead of child_process.argv

Jonathan Nieder (8):
      vcs-svn: remove more unused prototypes and declarations
      vcs-svn: remove custom mode constants
      vcs-svn: remove repo_delete wrapper function
      vcs-svn: move remaining repo_tree functions to fast_export.h
      pack: make packed_git_mru global a value instead of a pointer
      pathspec doc: parse_pathspec does not maintain references to args
      technical doc: add a design doc for hash function transition
      strbuf doc: reuse after strbuf_release is fine

Jonathan Tan (40):
      fsck: remove redundant parse_tree() invocation
      object: remove "used" field from struct object
      fsck: cleanup unused variable
      Documentation: migrate sub-process docs to header
      sub-process: refactor handshake to common function
      tests: ensure fsck fails on corrupt packfiles
      sha1_file: set whence in storage-specific info fn
      sha1_file: remove read_packed_sha1()
      diff: avoid redundantly clearing a flag
      diff: respect MIN_BLOCK_LENGTH for last block
      diff: define block by number of alphanumeric chars
      Doc: clarify that pack-objects makes packs, plural
      pack: move pack name-related functions
      pack: move static state variables
      pack: move pack_report()
      pack: move open_pack_index(), parse_pack_index()
      pack: move release_pack_memory()
      pack: move pack-closing functions
      pack: move use_pack()
      pack: move unuse_pack()
      pack: move add_packed_git()
      pack: move install_packed_git()
      pack: move {,re}prepare_packed_git and approximate_object_count
      pack: move unpack_object_header_buffer()
      pack: move get_size_from_delta()
      pack: move unpack_object_header()
      pack: move clear_delta_base_cache(), packed_object_info(), unpack_entry()
      pack: move nth_packed_object_{sha1,oid}
      pack: move check_pack_index_ptr(), nth_packed_object_offset()
      pack: move find_pack_entry_one(), is_pack_valid()
      pack: move find_sha1_pack()
      pack: move find_pack_entry() and make it global
      pack: move has_sha1_pack()
      pack: move has_pack_index()
      pack: move for_each_packed_object()
      Remove inadvertently added outgoing/packfile.h
      Add t/helper/test-write-cache to .gitignore
      git-compat-util: make UNLEAK less error-prone
      fast-export: do not copy from modified file
      oidmap: map with OID as key

Junio C Hamano (51):
      t1408: add a test of stale packed refs covered by loose refs
      clean.c: use designated initializer
      http.c: http.sslcert and http.sslkey are both pathnames
      connect: reject ssh hostname that begins with a dash
      Git 2.7.6
      Git 2.8.6
      Git 2.9.5
      Git 2.10.4
      Git 2.11.3
      Git 2.12.4
      Git 2.13.5
      Git 2.14.1
      Start post 2.14 cycle
      perl/Git.pm: typofix in a comment
      The first batch of topics after the 2.14 cycle
      diff: retire sane_truncate_fn
      progress: simplify "delayed" progress API
      The second batch post 2.14
      t4200: give us a clean slate after "rerere gc" tests
      t4200: make "rerere gc" test more robust
      t4200: gather "rerere gc" together
      t4200: parameterize "rerere gc" custom expiry test
      rerere: represent time duration in timestamp_t internally
      rerere: allow approxidate in gc.rerereResolved/gc.rerereUnresolved
      The third batch post 2.14
      Prepare for 2.14.2
      The fourth batch post 2.14
      The fifth batch post 2.14
      The sixth batch post 2.14
      RelNotes: further fixes for 2.14.2 from the master front
      The seventh batch post 2.14
      travis: dedent a few scripts that are indented overly deeply
      subprocess: loudly die when subprocess asks for an unsupported capability
      cvsserver: move safe_pipe_capture() to the main package
      cvsserver: use safe_pipe_capture for `constant commands` as well
      gc: call fscanf() with %<len>s, not %<len>c, when reading hostname
      The eighth batch for 2.15
      Git 2.10.5
      Git 2.11.4
      Git 2.12.5
      Git 2.13.6
      Git 2.14.2
      branch: fix "copy" to never touch HEAD
      merge-strategies: avoid implying that "-s theirs" exists
      The ninth batch for 2.15
      The tenth batch for 2.15
      The eleventh batch for 2.15
      The twelfth batch for 2.15
      Git 2.15-rc0
      Prepare for -rc1
      Git 2.15-rc1

Kaartic Sivaraam (15):
      hook: cleanup script
      hook: name the positional variables
      hook: add sign-off using "interpret-trailers"
      hook: add a simple first example
      commit: check for empty message before the check for untouched template
      hook: use correct logical variable
      t3200: cleanup cruft of a test
      builtin/branch: stop supporting the "--set-upstream" option
      branch: quote branch/ref names to improve readability
      help: change a message to be more precise
      commit-template: change a message to be more intuitive
      t/README: fix typo and grammatically improve a sentence
      doc: camelCase the config variables to improve readability
      branch: change the error messages to be more meaningful
      setup: update error message to be more meaningful

Kevin Daudt (3):
      stash: prevent warning about null bytes in input
      doc/for-each-ref: consistently use '=' to between argument names and values
      doc/for-each-ref: explicitly specify option names

Kevin Willford (9):
      format-patch: have progress option while generating patches
      rebase: turn on progress option by default for format-patch
      commit: skip discarding the index if there is no pre-commit hook
      perf: add test for writing the index
      read-cache: fix memory leak in do_write_index
      read-cache: avoid allocating every ondisk entry when writing
      merge-recursive: fix memory leak
      merge-recursive: remove return value from get_files_dirs
      merge-recursive: change current file dir string_lists to hashmap

Lars Schneider (13):
      t0021: keep filter log files on comparison
      t0021: make debug log file name configurable
      t0021: write "OUT <size>" only on success
      convert: put the flags field before the flag itself for consistent style
      convert: move multiple file filter error handling to separate function
      convert: refactor capabilities negotiation
      convert: add "status=delayed" to filter process protocol
      convert: display progress for filtered objects that have been delayed
      travis-ci: move Travis CI code into dedicated scripts
      travis-ci: skip a branch build if equal tag is present
      travis-ci: fix "skip_branch_tip_with_tag()" string comparison
      entry.c: update cache entry only for existing files
      entry.c: check if file exists after checkout

Manav Rathi (1):
      docs: improve discoverability of exclude pathspec

Martin Koegler (2):
      diff-delta: fix encoding size that would not fit in "unsigned int"
      diff-delta: do not allow delta offset truncation

Martin Ågren (33):
      builtin.h: take over documentation from api-builtin.txt
      git.c: let builtins opt for handling `pager.foo` themselves
      git.c: provide setup_auto_pager()
      t7006: add tests for how git tag paginates
      tag: respect `pager.tag` in list-mode only
      tag: change default of `pager.tag` to "on"
      git.c: ignore pager.* when launching builtin as dashed external
      Doc/git-{push,send-pack}: correct --sign= to --signed=
      t5334: document that git push --signed=1 does not work
      config: introduce git_parse_maybe_bool_text
      config: make git_{config,parse}_maybe_bool equivalent
      treewide: deprecate git_config_maybe_bool, use git_parse_maybe_bool
      parse_decoration_style: drop unused argument `var`
      doc/interpret-trailers: fix "the this" typo
      convert: always initialize attr_action in convert_attrs
      pack-objects: take lock before accessing `remaining`
      strbuf_setlen: don't write to strbuf_slopbuf
      ThreadSanitizer: add suppressions
      Documentation/user-manual: update outdated example output
      treewide: correct several "up-to-date" to "up to date"
      pkt-line: re-'static'-ify buffer in packet_write_fmt_1()
      config: remove git_config_maybe_bool
      refs/files-backend: add longer-scoped copy of string to list
      refs/files-backend: fix memory leak in lock_ref_for_update
      refs/files-backend: correct return value in lock_ref_for_update
      refs/files-backend: add `refname`, not "HEAD", to list
      builtin/commit: fix memory leak in `prepare_index()`
      commit: fix memory leak in `reduce_heads()`
      leak_pending: use `object_array_clear()`, not `free()`
      object_array: use `object_array_clear()`, not `free()`
      object_array: add and use `object_array_pop()`
      pack-bitmap[-write]: use `object_array_clear()`, don't leak
      builtin/: add UNLEAKs

Matthieu Moy (2):
      send-email: fix garbage removal after address
      send-email: don't use Mail::Address, even if available

Max Kirillov (2):
      describe: fix matching to actually match all patterns
      describe: teach --match to handle branches and remotes

Michael Forney (1):
      scripts: use "git foo" not "git-foo"

Michael Haggerty (77):
      add_packed_ref(): teach function to overwrite existing refs
      packed_ref_store: new struct
      packed_ref_store: move `packed_refs_path` here
      packed_ref_store: move `packed_refs_lock` member here
      clear_packed_ref_cache(): take a `packed_ref_store *` parameter
      validate_packed_ref_cache(): take a `packed_ref_store *` parameter
      get_packed_ref_cache(): take a `packed_ref_store *` parameter
      get_packed_refs(): take a `packed_ref_store *` parameter
      add_packed_ref(): take a `packed_ref_store *` parameter
      lock_packed_refs(): take a `packed_ref_store *` parameter
      commit_packed_refs(): take a `packed_ref_store *` parameter
      rollback_packed_refs(): take a `packed_ref_store *` parameter
      get_packed_ref(): take a `packed_ref_store *` parameter
      repack_without_refs(): take a `packed_ref_store *` parameter
      packed_peel_ref(): new function, extracted from `files_peel_ref()`
      packed_ref_store: support iteration
      packed_read_raw_ref(): new function, replacing `resolve_packed_ref()`
      packed-backend: new module for handling packed references
      packed_ref_store: make class into a subclass of `ref_store`
      commit_packed_refs(): report errors rather than dying
      commit_packed_refs(): use a staging file separate from the lockfile
      packed_refs_lock(): function renamed from lock_packed_refs()
      packed_refs_lock(): report errors via a `struct strbuf *err`
      packed_refs_unlock(), packed_refs_is_locked(): new functions
      clear_packed_ref_cache(): don't protest if the lock is held
      commit_packed_refs(): remove call to `packed_refs_unlock()`
      repack_without_refs(): don't lock or unlock the packed refs
      t3210: add some tests of bogus packed-refs file contents
      read_packed_refs(): die if `packed-refs` contains bogus data
      packed_ref_store: handle a packed-refs file that is a symlink
      files-backend: cheapen refname_available check when locking refs
      refs: retry acquiring reference locks for 100ms
      notes: make GET_NIBBLE macro more robust
      load_subtree(): remove unnecessary conditional
      load_subtree(): reduce the scope of some local variables
      load_subtree(): fix incorrect comment
      load_subtree(): separate logic for internal vs. terminal entries
      load_subtree(): check earlier whether an internal node is a tree entry
      load_subtree(): only consider blobs to be potential notes
      get_oid_hex_segment(): return 0 on success
      load_subtree(): combine some common code
      get_oid_hex_segment(): don't pad the rest of `oid`
      hex_to_bytes(): simpler replacement for `get_oid_hex_segment()`
      load_subtree(): declare some variables to be `size_t`
      load_subtree(): check that `prefix_len` is in the expected range
      packed-backend: don't adjust the reference count on lock/unlock
      struct ref_transaction: add a place for backends to store data
      packed_ref_store: implement reference transactions
      packed_delete_refs(): implement method
      files_pack_refs(): use a reference transaction to write packed refs
      prune_refs(): also free the linked list
      files_initial_transaction_commit(): use a transaction for packed refs
      t1404: demonstrate two problems with reference transactions
      files_ref_store: use a transaction to update packed refs
      packed-backend: rip out some now-unused code
      files_transaction_finish(): delete reflogs before references
      ref_iterator: keep track of whether the iterator output is ordered
      packed_ref_cache: add a backlink to the associated `packed_ref_store`
      die_unterminated_line(), die_invalid_line(): new functions
      read_packed_refs(): use mmap to read the `packed-refs` file
      read_packed_refs(): only check for a header at the top of the file
      read_packed_refs(): make parsing of the header line more robust
      for_each_string_list_item: avoid undefined behavior for empty list
      read_packed_refs(): read references with minimal copying
      packed_ref_cache: remember the file-wide peeling state
      mmapped_ref_iterator: add iterator over a packed-refs file
      mmapped_ref_iterator_advance(): no peeled value for broken refs
      packed-backend.c: reorder some definitions
      packed_ref_cache: keep the `packed-refs` file mmapped if possible
      read_packed_refs(): ensure that references are ordered when read
      packed_ref_iterator_begin(): iterate using `mmapped_ref_iterator`
      packed_read_raw_ref(): read the reference from the mmapped buffer
      ref_store: implement `refs_peel_ref()` generically
      packed_ref_store: get rid of the `ref_cache` entirely
      ref_cache: remove support for storing peeled values
      mmapped_ref_iterator: inline into `packed_ref_iterator`
      packed-backend.c: rename a bunch of things and update comments

Michael J Gruber (11):
      Documentation: use proper wording for ref format strings
      Documentation/git-for-each-ref: clarify peeling of tags for --format
      Documentation/git-merge: explain --continue
      merge: clarify call chain
      merge: split write_merge_state in two
      merge: save merge state earlier
      name-rev: change ULONG_MAX to TIME_MAX
      t7004: move limited stack prereq to test-lib
      t6120: test name-rev --all and --stdin
      t6120: clean up state after breaking repo
      t6120: test describe and name-rev with deep repos

Nguyễn Thái Ngọc Duy (17):
      branch: fix branch renaming not updating HEADs correctly
      revision.h: new flag in struct rev_info wrt. worktree-related refs
      refs.c: use is_dir_sep() in resolve_gitlink_ref()
      revision.c: refactor add_index_objects_to_pending()
      revision.c: --indexed-objects add objects from all worktrees
      refs.c: refactor get_submodule_ref_store(), share common free block
      refs: move submodule slash stripping code to get_submodule_ref_store
      refs: add refs_head_ref()
      revision.c: use refs_for_each*() instead of for_each_*_submodule()
      refs.c: move for_each_remote_ref_submodule() to submodule.c
      refs: remove dead for_each_*_submodule()
      revision.c: --all adds HEAD from all worktrees
      files-backend: make reflog iterator go through per-worktree reflog
      revision.c: --reflog add HEAD reflog from all worktrees
      rev-list: expose and document --single-worktree
      refs.c: remove fallback-to-main-store code get_submodule_ref_store()
      refs.c: reindent get_submodule_ref_store()

Nicolas Morey-Chaisemartin (7):
      stash: clean untracked files before reset
      pull: fix cli and config option parsing order
      pull: honor submodule.recurse config option
      imap-send: return with error if curl failed
      imap-send: add wrapper to get server credentials if needed
      imap_send: setup_curl: retreive credentials if not set in config file
      imap-send: use curl by default when possible

Paolo Bonzini (4):
      trailers: export action enums and corresponding lookup functions
      trailers: introduce struct new_trailer_item
      interpret-trailers: add options for actions
      interpret-trailers: fix documentation typo

Patryk Obara (10):
      sha1_file: fix definition of null_sha1
      commit: replace the raw buffer with strbuf in read_graft_line
      commit: allocate array using object_id size
      commit: rewrite read_graft_line
      builtin/hash-object: convert to struct object_id
      read-cache: convert to struct object_id
      sha1_file: convert index_path to struct object_id
      sha1_file: convert index_fd to struct object_id
      sha1_file: convert hash_sha1_file_literally to struct object_id
      sha1_file: convert index_stream to struct object_id

Philip Oakley (4):
      git-gui: remove duplicate entries from .gitconfig's gui.recentrepo
      git gui: cope with duplicates in _get_recentrepo
      git gui: de-dup selected repo from recentrepo history
      git gui: allow for a long recentrepo list

Phillip Wood (7):
      am: remember --rerere-autoupdate setting
      rebase: honor --rerere-autoupdate
      rebase -i: honor --rerere-autoupdate
      t3504: use test_commit
      cherry-pick/revert: remember --rerere-autoupdate
      cherry-pick/revert: reject --rerere-autoupdate when continuing
      am: fix signoff when other trailers are present

Raman Gupta (1):
      contrib/rerere-train: optionally overwrite existing resolutions

Ramsay Jones (9):
      credential-cache: interpret an ECONNRESET as an EOF
      builtin/add: add detail to a 'cannot chmod' error message
      test-lib: don't use ulimit in test prerequisites on cygwin
      test-lib: use more compact expression in PIPE prerequisite
      t9010-*.sh: skip all tests if the PIPE prereq is missing
      git-compat-util.h: xsize_t() - avoid -Wsign-compare warnings
      commit-slab.h: avoid -Wsign-compare warnings
      cache.h: hex2chr() - avoid -Wsign-compare warnings
      ALLOC_GROW: avoid -Wsign-compare warnings

Randall S. Becker (1):
      poll.c: always set revents, even if to zero

René Scharfe (81):
      tree-diff: don't access hash of NULL object_id pointer
      notes: don't access hash of NULL object_id pointer
      receive-pack: don't access hash of NULL object_id pointer
      bswap: convert to unsigned before shifting in get_be32
      bswap: convert get_be16, get_be32 and put_be32 to inline functions
      add MOVE_ARRAY
      use MOVE_ARRAY
      apply: use COPY_ARRAY and MOVE_ARRAY in update_image()
      ls-files: don't try to prune an empty index
      dir: support platforms that require aligned reads
      pack-objects: remove unnecessary NULL check
      t0001: skip test with restrictive permissions if getpwd(3) respects them
      test-path-utils: handle const parameter of basename and dirname
      t3700: fix broken test under !POSIXPERM
      t4062: use less than 256 repetitions in regex
      sha1_file: avoid comparison if no packed hash matches the first byte
      apply: remove prefix_length member from apply_state
      merge: use skip_prefix()
      win32: plug memory leak on realloc() failure in syslog()
      strbuf: clear errno before calling getdelim(3)
      fsck: free buffers on error in fsck_obj()
      sha1_file: release delta_stack on error in unpack_entry()
      tree-walk: convert fill_tree_descriptor() to object_id
      t1002: stop using sum(1)
      t5001: add tests for export-ignore attributes and exclude pathspecs
      archive: factor out helper functions for handling attributes
      archive: don't queue excluded directories
      commit: remove unused inline function single_parent()
      apply: check date of potential epoch timestamps first
      apply: remove epoch date from regex
      am: release strbufs after use in detect_patch_format()
      am: release strbuf on error return in hg_patch_to_mail()
      am: release strbuf after use in safe_to_abort()
      check-ref-format: release strbuf after use in check_ref_format_branch()
      clean: release strbuf after use in remove_dirs()
      clone: release strbuf after use in remove_junk()
      commit: release strbuf on error return in commit_tree_extended()
      connect: release strbuf on error return in git_connect()
      convert: release strbuf on error return in filter_buffer_or_fd()
      diff: release strbuf after use in diff_summary()
      diff: release strbuf after use in show_rename_copy()
      diff: release strbuf after use in show_stats()
      help: release strbuf on error return in exec_man_konqueror()
      help: release strbuf on error return in exec_man_man()
      help: release strbuf on error return in exec_woman_emacs()
      mailinfo: release strbuf after use in handle_from()
      mailinfo: release strbuf on error return in handle_boundary()
      merge: release strbuf after use in save_state()
      merge: release strbuf after use in write_merge_heads()
      notes: release strbuf after use in notes_copy_from_stdin()
      refs: release strbuf on error return in write_pseudoref()
      remote: release strbuf after use in read_remote_branches()
      remote: release strbuf after use in migrate_file()
      remote: release strbuf after use in set_url()
      send-pack: release strbuf on error return in send_pack()
      sha1_file: release strbuf on error return in index_path()
      shortlog: release strbuf after use in insert_one_record()
      sequencer: release strbuf after use in save_head()
      transport-helper: release strbuf after use in process_connect_service()
      userdiff: release strbuf after use in userdiff_get_textconv()
      utf8: release strbuf on error return in strbuf_utf8_replace()
      vcs-svn: release strbuf after use in end_revision()
      wt-status: release strbuf after use in read_rebase_todolist()
      wt-status: release strbuf after use in wt_longstatus_print_tracking()
      archive: don't add empty directories to archives
      refs: make sha1 output parameter of refs_resolve_ref_unsafe() optional
      refs: pass NULL to refs_resolve_ref_unsafe() if hash is not needed
      refs: pass NULL to resolve_ref_unsafe() if hash is not needed
      mailinfo: don't decode invalid =XY quoted-printable sequences
      refs: pass NULL to refs_resolve_refdup() if hash is not needed
      refs: pass NULL to resolve_refdup() if hash is not needed
      coccinelle: remove parentheses that become unnecessary
      path: use strbuf_add_real_path()
      use strbuf_addstr() for adding strings to strbufs
      graph: use strbuf_addchars() to add spaces
      tag: avoid NULL pointer arithmetic
      repository: use FREE_AND_NULL
      run-command: use ALLOC_ARRAY
      test-stringlist: avoid buffer underrun when sorting nothing
      fsck: handle NULL return of lookup_blob() and lookup_tree()
      .mailmap: normalize name for René Scharfe

Ross Kabus (1):
      commit-tree: do not complete line in -F input

Sahil Dua (2):
      config: create a function to format section headers
      branch: add a --copy (-c) option to go with --move (-m)

Santiago Torres (1):
      t: lib-gpg: flush gpg agent on startup

Stefan Beller (51):
      diff.c: readability fix
      diff.c: move line ending check into emit_hunk_header
      diff.c: factor out diff_flush_patch_all_file_pairs
      diff.c: introduce emit_diff_symbol
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_CONTEXT_MARKER
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_CONTEXT_FRAGINFO
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_NO_LF_EOF
      diff.c: migrate emit_line_checked to use emit_diff_symbol
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_WORDS[_PORCELAIN]
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_CONTEXT_INCOMPLETE
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_FILEPAIR_{PLUS, MINUS}
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_HEADER
      diff.c: emit_diff_symbol learns about DIFF_SYMBOL_BINARY_FILES
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_REWRITE_DIFF
      submodule.c: migrate diff output to use emit_diff_symbol
      diff.c: convert emit_binary_diff_body to use emit_diff_symbol
      diff.c: convert show_stats to use emit_diff_symbol
      diff.c: convert word diffing to use emit_diff_symbol
      diff.c: emit_diff_symbol learns about DIFF_SYMBOL_STAT_SEP
      diff.c: emit_diff_symbol learns about DIFF_SYMBOL_SUMMARY
      diff.c: buffer all output if asked to
      diff.c: color moved lines differently
      diff.c: color moved lines differently, plain mode
      diff.c: add dimming to moved line detection
      diff: document the new --color-moved setting
      attr.c: drop hashmap_cmp_fn cast
      builtin/difftool.c: drop hashmap_cmp_fn cast
      builtin/describe: drop hashmap_cmp_fn cast
      config.c: drop hashmap_cmp_fn cast
      convert/sub-process: drop cast to hashmap_cmp_fn
      patch-ids.c: drop hashmap_cmp_fn cast
      remote.c: drop hashmap_cmp_fn cast
      submodule-config.c: drop hashmap_cmp_fn cast
      name-hash.c: drop hashmap_cmp_fn cast
      t/helper/test-hashmap: use custom data instead of duplicate cmp functions
      commit: convert lookup_commit_graft to struct object_id
      tag: convert gpg_verify_tag to use struct object_id
      t8008: rely on rev-parse'd HEAD instead of sha1 value
      t1200: remove t1200-tutorial.sh
      sha1_file: make read_info_alternates static
      submodule.sh: remove unused variable
      builtin/merge: honor commit-msg hook for merges
      push, fetch: error out for submodule entries not pointing to commits
      replace-objects: evaluate replacement refs without using the object store
      Documentation/githooks: mention merge in commit-msg hook
      Documentation/config: clarify the meaning of submodule.<name>.update
      t7406: submodule.<name>.update command must not be run from .gitmodules
      diff: correct newline in summary for renamed files
      submodule: correct error message for missing commits
      branch: reset instead of release a strbuf
      tests: fix diff order arguments in test_cmp

Stephan Beyer (1):
      clang-format: add a comment about the meaning/status of the

Takashi Iwai (2):
      sha1dc: build git plumbing code more explicitly
      sha1dc: allow building with the external sha1dc library

Taylor Blau (8):
      pretty.c: delimit "%(trailers)" arguments with ","
      t4205: unfold across multiple lines
      doc: 'trailers' is the preferred way to format trailers
      doc: use "`<literal>`"-style quoting for literal strings
      t6300: refactor %(trailers) tests
      ref-filter.c: use trailer_opts to format trailers
      ref-filter.c: parse trailers arguments with %(contents) atom
      ref-filter.c: pass empty-string as NULL to atom parsers

Thomas Braun (1):
      completion: add --broken and --dirty to describe

Thomas Gummerer (3):
      read-cache: fix index corruption with index v4
      refs: strip out not allowed flags from ref_transaction_update
      http-push: fix construction of hex value from path

Todd Zullinger (1):
      api-argv-array.txt: remove broken link to string-list API

Tom G. Christensen (2):
      http: fix handling of missing CURLPROTO_*
      http: use a feature check to enable GSSAPI delegation control

Torsten Bögershausen (3):
      convert: add SAFE_CRLF_KEEP_CRLF
      apply: file commited with CRLF should roundtrip diff and apply
      test-lint: echo -e (or -E) is not portable

Urs Thuermann (1):
      git svn fetch: Create correct commit timestamp when using --localtime

William Duclot (1):
      rebase: make resolve message clearer for inexperienced users

brian m. carlson (14):
      builtin/fsck: convert remaining caller of get_sha1 to object_id
      builtin/merge-tree: convert remaining caller of get_sha1 to object_id
      submodule: convert submodule config lookup to use object_id
      remote: convert struct push_cas to struct object_id
      sequencer: convert to struct object_id
      builtin/update_ref: convert to struct object_id
      bisect: convert bisect_checkout to struct object_id
      builtin/unpack-file: convert to struct object_id
      Convert remaining callers of get_sha1 to get_oid.
      sha1_name: convert get_sha1* to get_oid*
      sha1_name: convert GET_SHA1* flags to GET_OID*
      sha1_name: convert uses of 40 to GIT_SHA1_HEXSZ
      vcs-svn: remove unused prototypes
      vcs-svn: rename repo functions to "svn_repo"

joernchen (1):
      cvsserver: use safe_pipe_capture instead of backticks

Ævar Arnfjörð Bjarmason (2):
      branch: add test for -m renaming multiple config sections
      tests: don't give unportable ">" to "test" built-in, use -gt

Øystein Walle (1):
      rev-parse: rev-parse: add --is-shallow-repository

Łukasz Gryglicki (1):
      merge: add a --signoff flag


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.15.0-rc0
@ 2017-10-05  5:55  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2017-10-05  5:55 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

An early preview release Git v2.15.0-rc0 is now available for
testing at the usual places.  It is comprised of 672 non-merge
commits since v2.14.0, contributed by 66 people, 20 of which are
new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.15.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.14.0 are as follows.
Welcome to the Git development community!

  Ann T Ropea, Daniel Watkins, Dimitrios Christidis, Eric Rannaud,
  Evan Zacks, Hielke Christian Braun, Ian Campbell, Ilya Kantor,
  Jameson Miller, Job Snijders, Joel Teichroeb, joernchen,
  Łukasz Gryglicki, Manav Rathi, Martin Ågren, Michael Forney,
  Patryk Obara, Rene Scharfe, Ross Kabus, and Urs Thuermann.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Andreas Heiduk,
  Anthony Sottile, Ben Boeckel, Brandon Casey, Brandon Williams,
  brian m. carlson, Christian Couder, Eric Blake, Han-Wen Nienhuys,
  Heiko Voigt, Jeff Hostetler, Jeff King, Johannes Schindelin,
  Jonathan Nieder, Jonathan Tan, Junio C Hamano, Kaartic Sivaraam,
  Kevin Daudt, Kevin Willford, Lars Schneider, Martin Koegler,
  Matthieu Moy, Max Kirillov, Michael Haggerty, Michael J Gruber,
  Nguyễn Thái Ngọc Duy, Nicolas Morey-Chaisemartin, Øystein
  Walle, Paolo Bonzini, Pat Thoyts, Philip Oakley, Phillip
  Wood, Raman Gupta, Ramsay Jones, René Scharfe, Sahil Dua,
  Santiago Torres, Stefan Beller, Stephan Beyer, Takashi Iwai,
  Thomas Gummerer, Tom G. Christensen, Torsten Bögershausen,
  and William Duclot.

----------------------------------------------------------------

Git 2.15 Release Notes (draft)
==============================

Backward compatibility notes and other notable changes.

 * Use of an empty string as a pathspec element that is used for
   'everything matches' is still warned and Git asks users to use a
   more explicit '.' for that instead.  The hope is that existing
   users will not mind this change, and eventually the warning can be
   turned into a hard error, upgrading the deprecation into removal of
   this (mis)feature.  That is now scheduled to happen in the upcoming
   release.

 * Git now avoids blindly falling back to ".git" when the setup
   sequence said we are _not_ in Git repository.  A corner case that
   happens to work right now may be broken by a call to die("BUG").
   We've tried hard to locate such cases and fixed them, but there
   might still be cases that need to be addressed--bug reports are
   greatly appreciated.

 * "branch --set-upstream" that has been deprecated in Git 1.8 has
   finally been retired.


Updates since v2.14
-------------------

UI, Workflows & Features

 * An example that is now obsolete has been removed from a sample hook,
   and an old example in it that added a sign-off manually has been
   improved to use the interpret-trailers command.

 * The advice message given when "git rebase" stops for conflicting
   changes has been improved.

 * The "rerere-train" script (in contrib/) learned the "--overwrite"
   option to allow overwriting existing recorded resolutions.

 * "git contacts" (in contrib/) now lists the address on the
   "Reported-by:" trailer to its output, in addition to those on
   S-o-b: and other trailers, to make it easier to notify (and thank)
   the original bug reporter.

 * "git rebase", especially when it is run by mistake and ends up
   trying to replay many changes, spent long time in silence.  The
   command has been taught to show progress report when it spends
   long time preparing these many changes to replay (which would give
   the user a chance to abort with ^C).

 * "git merge" learned a "--signoff" option to add the Signed-off-by:
   trailer with the committer's name.

 * "git diff" learned to optionally paint new lines that are the same
   as deleted lines elsewhere differently from genuinely new lines.

 * "git interpret-trailers" learned to take the trailer specifications
   from the command line that overrides the configured values.

 * "git interpret-trailers" has been taught a "--parse" and a few
   other options to make it easier for scripts to grab existing
   trailer lines from a commit log message.

 * "gitweb" shows a link to visit the 'raw' contents of blbos in the
   history overview page.

 * "[gc] rerereResolved = 5.days" used to be invalid, as the variable
   is defined to take an integer counting the number of days.  It now
   is allowed.

 * The code to acquire a lock on a reference (e.g. while accepting a
   push from a client) used to immediately fail when the reference is
   already locked---now it waits for a very short while and retries,
   which can make it succeed if the lock holder was holding it during
   a read-only operation.

 * "branch --set-upstream" that has been deprecated in Git 1.8 has
   finally been retired.

 * The codepath to call external process filter for smudge/clean
   operation learned to show the progress meter.

 * "git rev-parse" learned "--is-shallow-repository", that is to be
   used in a way similar to existing "--is-bare-repository" and
   friends.

 * "git describe --match <pattern>" has been taught to play well with
   the "--all" option.

 * "git branch" learned "-c/-C" to create a new branch by copying an
   existing one.

 * Some commands (most notably "git status") makes an opportunistic
   update when performing a read-only operation to help optimize later
   operations in the same repository.  The new "--no-optional-locks"
   option can be passed to Git to disable them.


Performance, Internal Implementation, Development Support etc.

 * Conversion from uchar[20] to struct object_id continues.

 * Start using selected c99 constructs in small, stable and
   essentialpart of the system to catch people who care about
   older compilers that do not grok them.

 * The filter-process interface learned to allow a process with long
   latency give a "delayed" response.

 * Many uses of comparision callback function the hashmap API uses
   cast the callback function type when registering it to
   hashmap_init(), which defeats the compile time type checking when
   the callback interface changes (e.g. gaining more parameters).
   The callback implementations have been updated to take "void *"
   pointers and cast them to the type they expect instead.

 * Because recent Git for Windows do come with a real msgfmt, the
   build procedure for git-gui has been updated to use it instead of a
   hand-rolled substitute.

 * "git grep --recurse-submodules" has been reworked to give a more
   consistent output across submodule boundary (and do its thing
   without having to fork a separate process).

 * A helper function to read a single whole line into strbuf
   mistakenly triggered OOM error at EOF under certain conditions,
   which has been fixed.
   (merge 642956cf45 rs/strbuf-getwholeline-fix later to maint).

 * The "ref-store" code reorganization continues.

 * "git commit" used to discard the index and re-read from the filesystem
   just in case the pre-commit hook has updated it in the middle; this
   has been optimized out when we know we do not run the pre-commit hook.
   (merge 680ee550d7 kw/commit-keep-index-when-pre-commit-is-not-run later to maint).

 * Updates to the HTTP layer we made recently unconditionally used
   features of libCurl without checking the existence of them, causing
   compilation errors, which has been fixed.  Also migrate the code to
   check feature macros, not version numbers, to cope better with
   libCurl that vendor ships with backported features.

 * The API to start showing progress meter after a short delay has
   been simplified.
   (merge 8aade107dd jc/simplify-progress later to maint).

 * Code clean-up to avoid mixing values read from the .gitmodules file
   and values read from the .git/config file.

 * We used to spend more than necessary cycles allocating and freeing
   piece of memory while writing each index entry out.  This has been
   optimized.

 * Platforms that ship with a separate sha1 with collision detection
   library can link to it instead of using the copy we ship as part of
   our source tree.

 * Code around "notes" have been cleaned up.
   (merge 3964281524 mh/notes-cleanup later to maint).

 * The long-standing rule that an in-core lockfile instance, once it
   is used, must not be freed, has been lifted and the lockfile and
   tempfile APIs have been updated to reduce the chance of programming
   errors.

 * Our hashmap implementation in hashmap.[ch] is not thread-safe when
   adding a new item needs to expand the hashtable by rehashing; add
   an API to disable the automatic rehashing to work it around.

 * Many of our programs consider that it is OK to release dynamic
   storage that is used throughout the life of the program by simply
   exiting, but this makes it harder to leak detection tools to avoid
   reporting false positives.  Plug many existing leaks and introduce
   a mechanism for developers to mark that the region of memory
   pointed by a pointer is not lost/leaking to help these tools.

 * As "git commit" to conclude a conflicted "git merge" honors the
   commit-msg hook, "git merge" that records a merge commit that
   cleanly auto-merges should, but it didn't.

 * The codepath for "git merge-recursive" has been cleaned up.

 * Many leaks of strbuf have been fixed.

 * "git imap-send" has our own implementation of the protocol and also
   can use more recent libCurl with the imap protocol support.  Update
   the latter so that it can use the credential subsystem, and then
   make it the default option to use, so that we can eventually
   deprecate and remove the former.

 * "make style" runs git-clang-format to help developers by pointing
   out coding style issues.

 * A test to demonstrate "git mv" failing to adjust nested submodules
   has been added.
   (merge c514167df2 hv/mv-nested-submodules-test later to maint).

 * On Cygwin, "ulimit -s" does not report failure but it does not work
   at all, which causes an unexpected success of some tests that
   expect failures under a limited stack situation.  This has been
   fixed.

 * Many codepaths have been updated to squelch -Wimplicit-fallthrough
   warnings from Gcc 7 (which is a good code hygiene).

 * Add a helper for DLL loading in anticipation for its need in a
   future topic RSN.

 * "git status --ignored", when noticing that a directory without any
   tracked path is ignored, still enumerated all the ignored paths in
   the directory, which is unnecessary.  The codepath has been
   optimized to avoid this overhead.

 * The final batch to "git rebase -i" updates to move more code from
   the shell script to C has been merged.

 * Operations that do not touch (majority of) packed refs have been
   optimized by making accesses to packed-refs file lazy; we no longer
   pre-parse everything, and an access to a single ref in the
   packed-refs does not touch majority of irrelevant refs, either.

 * Add comment to clarify that the style file is meant to be used with
   clang-5 and the rules are still work in progress.

Also contains various documentation updates and code clean-ups.


Fixes since v2.14
-----------------

 * "%C(color name)" in the pretty print format always produced ANSI
   color escape codes, which was an early design mistake.  They now
   honor the configuration (e.g. "color.ui = never") and also tty-ness
   of the output medium.

 * The http.{sslkey,sslCert} configuration variables are to be
   interpreted as a pathname that honors "~[username]/" prefix, but
   weren't, which has been fixed.

 * Numerous bugs in walking of reflogs via "log -g" and friends have
   been fixed.

 * "git commit" when seeing an totally empty message said "you did not
   edit the message", which is clearly wrong.  The message has been
   corrected.

 * When a directory is not readable, "gitweb" fails to build the
   project list.  Work this around by skipping such a directory.

 * Some versions of GnuPG fails to kill gpg-agent it auto-spawned
   and such a left-over agent can interfere with a test.  Work it
   around by attempting to kill one before starting a new test.

 * A recently added test for the "credential-cache" helper revealed
   that EOF detection done around the time the connection to the cache
   daemon is torn down were flaky.  This was fixed by reacting to
   ECONNRESET and behaving as if we got an EOF.

 * "git log --tag=no-such-tag" showed log starting from HEAD, which
   has been fixed---it now shows nothing.

 * The "tag.pager" configuration variable was useless for those who
   actually create tag objects, as it interfered with the use of an
   editor.  A new mechanism has been introduced for commands to enable
   pager depending on what operation is being carried out to fix this,
   and then "git tag -l" is made to run pager by default.

 * "git push --recurse-submodules $there HEAD:$target" was not
   propagated down to the submodules, but now it is.

 * Commands like "git rebase" accepted the --rerere-autoupdate option
   from the command line, but did not always use it.  This has been
   fixed.

 * "git clone --recurse-submodules --quiet" did not pass the quiet
   option down to submodules.

 * Test portability fix for OBSD.

 * Portability fix for OBSD.

 * "git am -s" has been taught that some input may end with a trailer
   block that is not Signed-off-by: and it should refrain from adding
   an extra blank line before adding a new sign-off in such a case.

 * "git svn" used with "--localtime" option did not compute the tz
   offset for the timestamp in question and instead always used the
   current time, which has been corrected.

 * Memory leak in an error codepath has been plugged.

 * "git stash -u" used the contents of the committed version of the
   ".gitignore" file to decide which paths are ignored, even when the
   file has local changes.  The command has been taught to instead use
   the locally modified contents.

 * bash 4.4 or newer gave a warning on NUL byte in command
   substitution done in "git stash"; this has been squelched.

 * "git grep -L" and "git grep --quiet -L" reported different exit
   codes; this has been corrected.

 * When handshake with a subprocess filter notices that the process
   asked for an unknown capability, Git did not report what program
   the offending subprocess was running.  This has been corrected.

 * "git apply" that is used as a better "patch -p1" failed to apply a
   taken from a file with CRLF line endings to a file with CRLF line
   endings.  The root cause was because it misused convert_to_git()
   that tried to do "safe-crlf" processing by looking at the index
   entry at the same path, which is a nonsense---in that mode, "apply"
   is not working on the data in (or derived from) the index at all.
   This has been fixed.

 * Killing "git merge --edit" before the editor returns control left
   the repository in a state with MERGE_MSG but without MERGE_HEAD,
   which incorrectly tells the subsequent "git commit" that there was
   a squash merge in progress.  This has been fixed.

 * "git archive" did not work well with pathspecs and the
   export-ignore attribute.

 * In addition to "cc: <a@dd.re.ss> # cruft", "cc: a@dd.re.ss # cruft"
   was taught to "git send-email" as a valid way to tell it that it
   needs to also send a carbon copy to <a@dd.re.ss> in the trailer
   section.
   (merge cc90750677 mm/send-email-cc-cruft later to maint).

 * "git branch -M a b" while on a branch that is completely unrelated
   to either branch a or branch b misbehaved when multiple worktree
   was in use.  This has been fixed.
   (merge 31824d180d nd/worktree-kill-parse-ref later to maint).

 * "git gc" and friends when multiple worktrees are used off of a
   single repository did not consider the index and per-worktree refs
   of other worktrees as the root for reachability traversal, making
   objects that are in use only in other worktrees to be subject to
   garbage collection.

 * A regression to "gitk --bisect" by a recent update has been fixed.
   (merge 1d0538e486 mh/packed-ref-store-prep later to maint).

 * "git -c submodule.recurse=yes pull" did not work as if the
   "--recurse-submodules" option was given from the command line.
   This has been corrected.

 * Unlike "git commit-tree < file", "git commit-tree -F file" did not
   pass the contents of the file verbatim and instead completed an
   incomplete line at the end, if exists.  The latter has been updated
   to match the behaviour of the former.
   (merge c818e74332 rk/commit-tree-make-F-verbatim later to maint).

 * Many codepaths did not diagnose write failures correctly when disks
   go full, due to their misuse of write_in_full() helper function,
   which have been corrected.
   (merge f48ecd38cb jk/write-in-full-fix later to maint).

 * "git help co" now says "co is aliased to ...", not "git co is".
   (merge b3a8076e0d ks/help-alias-label later to maint).

 * "git archive", especially when used with pathspec, stored an empty
   directory in its output, even though Git itself never does so.
   This has been fixed.
   (merge 4318094047 rs/archive-excluded-directory later to maint).

 * API error-proofing which happens to also squelch warnings from GCC.
   (merge c788c54cde tg/refs-allowed-flags later to maint).

 * The explanation of the cut-line in the commit log editor has been
   slightly tweaked.
   (merge 8c4b1a3593 ks/commit-do-not-touch-cut-line later to maint).

 * "git gc" tries to avoid running two instances at the same time by
   reading and writing pid/host from and to a lock file; it used to
   use an incorrect fscanf() format when reading, which has been
   corrected.
   (merge afe2fab72c aw/gc-lockfile-fscanf-fix later to maint).

 * The scripts to drive TravisCI has been reorganized and then an
   optimization to avoid spending cycles on a branch whose tip is
   tagged has been implemented.
   (merge 8376eb4a8f ls/travis-scriptify later to maint).

 * The test linter has been taught that we do not like "echo -e".
   (merge 1a6d46895d tb/test-lint-echo-e later to maint).

 * Code cmp.std.c nitpick.
   (merge ac7da78ede mh/for-each-string-list-item-empty-fix later to maint).

 * A regression fix for 2.11 that made the code to read the list of
   alternate object stores overrun the end of the string.
   (merge f0f7bebef7 jk/info-alternates-fix later to maint).

 * "git describe --match" learned to take multiple patterns in v2.13
   series, but the feature ignored the patterns after the first one
   and did not work at all.  This has been fixed.
   (merge da769d2986 jk/describe-omit-some-refs later to maint).

 * "git filter-branch" cannot reproduce a history with a tag without
   the tagger field, which only ancient versions of Git allowed to be
   created.  This has been corrected.
   (merge b2c1ca6b4b ic/fix-filter-branch-to-handle-tag-without-tagger later to maint).

 * "git cat-file --textconv" started segfaulting recently, which
   has been corrected.
   (merge cc0ea7c9e5 jk/diff-blob later to maint).

 * The built-in pattern to detect the "function header" for HTML did
   not match <H1>..<H6> elements without any attributes, which has
   been fixed.
   (merge 9c03caca2c ik/userdiff-html-h-element-fix later to maint).

 * "git mailinfo" was loose in decoding quoted printable and produced
   garbage when the two letters after the equal sign are not
   hexadecimal.  This has been fixed.
   (merge c8cf423eab rs/mailinfo-qp-decode-fix later to maint).

 * The machinery to create xdelta used in pack files received the
   sizes of the data in size_t, but lost the higher bits of them by
   storing them in "unsigned int" during the computation, which is
   fixed.

 * The delta format used in the packfile cannot reference data at
   offset larger than what can be expressed in 4-byte, but the
   generator for the data failed to make sure the offset does not
   overflow.  This has been corrected.

 * The documentation for '-X<option>' for merges was misleadingly
   written to suggest that "-s theirs" exists, which is not the case.
   (merge c25d98b2a7 jc/merge-x-theirs-docfix later to maint).

 * "git fast-export" with -M/-C option issued "copy" instruction on a
   path that is simultaneously modified, which was incorrect.
   (merge b3e8ca89cf jt/fast-export-copy-modify-fix later to maint).

 * Many codepaths have been updated to squelch -Wsign-compare
   warnings.
   (merge 071bcaab64 rj/no-sign-compare later to maint).

 * Memory leaks in various codepaths have been plugged.
   (merge 4d01a7fa65 ma/leakplugs later to maint).

 * Recent versions of "git rev-parse --parseopt" did not parse the
   option specification that does not have the optional flags (*=?!)
   correctly, which has been corrected.
   (merge a6304fa4c2 bc/rev-parse-parseopt-fix later to maint).

 * The checkpoint command "git fast-import" did not flush updates to
   refs and marks unless at least one object was created since the
   last checkpoint, which has been corrected, as these things can
   happen without any new object getting created.
   (merge 30e215a65c er/fast-import-dump-refs-on-checkpoint later to maint).

 * Spell the name of our system as "Git" in the output from
   request-pull script.
   (merge e66d7c37a5 ar/request-pull-phrasofix later to maint).

 * Other minor doc, test and build updates and code cleanups.
   (merge f094b89a4d ma/parse-maybe-bool later to maint).
   (merge 39b00fa4d4 jk/drop-sha1-entry-pos later to maint).
   (merge 6cdf8a7929 ma/ts-cleanups later to maint).
   (merge 7560f547e6 ma/up-to-date later to maint).
   (merge 0db3dc75f3 rs/apply-epoch later to maint).
   (merge 74f1bd912b dw/diff-highlight-makefile-fix later to maint).
   (merge f991761eb8 jk/config-lockfile-leak-fix later to maint).
   (merge 150efef1e7 ma/pkt-line-leakfix later to maint).
   (merge 5554451de6 mg/timestamp-t-fix later to maint).
   (merge 276d0e35c0 ma/split-symref-update-fix later to maint).
   (merge 3bc4b8f7c7 bb/doc-eol-dirty later to maint).
   (merge c1bb33c99c jk/system-path-cleanup later to maint).
   (merge ab46e6fc72 cc/subprocess-handshake-missing-capabilities later to maint).
   (merge f7a32dd97f kd/doc-for-each-ref later to maint).
   (merge be94568bc7 ez/doc-duplicated-words-fix later to maint).
   (merge 01e4be6c3d ks/test-readme-phrasofix later to maint).
   (merge 217bb56d4f hn/typofix later to maint).
   (merge c08fd6388c jk/doc-read-tree-table-asciidoctor-fix later to maint).
   (merge c3342b362e ks/doc-use-camelcase-for-config-name later to maint).
   (merge 0bca165fdb jk/validate-headref-fix later to maint).
   (merge 93dbefb389 mr/doc-negative-pathspec later to maint).
   (merge 5e633326e4 ad/doc-markup-fix later to maint).
   (merge 9ca356fa8b rs/cocci-de-paren-call-params later to maint).
   (merge 7099153e8d rs/tag-null-pointer-arith-fix later to maint).
   (merge 0e187d758c rs/run-command-use-alloc-array later to maint).

----------------------------------------------------------------

Changes since v2.14.0 are as follows:

Adam Dinwoodie (1):
      doc: correct command formatting

Andreas Heiduk (2):
      doc: add missing values "none" and "default" for diff.wsErrorHighlight
      doc: clarify "config --bool" behaviour with empty string

Ann T Ropea (1):
      request-pull: capitalise "Git" to make it a proper noun

Anthony Sottile (1):
      git-grep: correct exit code with --quiet and -L

Ben Boeckel (1):
      Documentation: mention that `eol` can change the dirty status of paths

Brandon Casey (7):
      t1502: demonstrate rev-parse --parseopt option mis-parsing
      rev-parse parseopt: do not search help text for flag chars
      rev-parse parseopt: interpret any whitespace as start of help text
      git-rebase: don't ignore unexpected command line arguments
      t0040,t1502: Demonstrate parse_options bugs
      parse-options: write blank line to correct output stream
      parse-options: only insert newline in help text if needed

Brandon Williams (29):
      repo_read_index: don't discard the index
      repository: have the_repository use the_index
      submodule--helper: teach push-check to handle HEAD
      cache.h: add GITMODULES_FILE macro
      config: add config_from_gitmodules
      submodule: remove submodule.fetchjobs from submodule-config parsing
      submodule: remove fetch.recursesubmodules from submodule-config parsing
      submodule: check for unstaged .gitmodules outside of config parsing
      submodule: check for unmerged .gitmodules outside of config parsing
      submodule: merge repo_read_gitmodules and gitmodules_config
      grep: recurse in-process using 'struct repository'
      t7411: check configuration parsing errors
      submodule: don't use submodule_from_name
      add, reset: ensure submodules can be added or reset
      submodule--helper: don't overlay config in remote_submodule_branch
      submodule--helper: don't overlay config in update-clone
      fetch: don't overlay config with submodule-config
      submodule: don't rely on overlayed config when setting diffopts
      unpack-trees: don't respect submodule.update
      submodule: remove submodule_config callback routine
      diff: stop allowing diff to have submodules configured in .git/config
      submodule-config: remove support for overlaying repository config
      submodule-config: move submodule-config functions to submodule-config.c
      submodule-config: lazy-load a repository's .gitmodules file
      unpack-trees: improve loading of .gitmodules
      submodule: remove gitmodules_config
      clone: teach recursive clones to respect -q
      clang-format: outline the git project's coding style
      Makefile: add style build rule

Christian Couder (3):
      refs: use skip_prefix() in ref_is_hidden()
      sub-process: print the cmd when a capability is unsupported
      sha1-lookup: remove sha1_entry_pos() from header file

Daniel Watkins (1):
      diff-highlight: add clean target to Makefile

Dimitrios Christidis (1):
      fmt-merge-msg: fix coding style

Eric Blake (1):
      git-contacts: also recognise "Reported-by:"

Eric Rannaud (1):
      fast-import: checkpoint: dump branches/tags/marks even if object_count==0

Evan Zacks (1):
      doc: fix minor typos (extra/duplicated words)

Han-Wen Nienhuys (5):
      submodule.h: typofix
      submodule.c: describe submodule_to_gitdir() in a new comment
      real_path: clarify return value ownership
      read_gitfile_gently: clarify return value ownership.
      string-list.h: move documentation from Documentation/api/ into header

Heiko Voigt (2):
      t5526: fix some broken && chains
      add test for bug in git-mv for recursive submodules

Hielke Christian Braun (1):
      gitweb: skip unreadable subdirectories

Ian Campbell (4):
      filter-branch: reset $GIT_* before cleaning up
      filter-branch: preserve and restore $GIT_AUTHOR_* and $GIT_COMMITTER_*
      filter-branch: stash away ref map in a branch
      filter-branch: use hash-object instead of mktag

Ilya Kantor (1):
      userdiff: fix HTML hunk header regexp

Jameson Miller (1):
      Improve performance of git status --ignored

Jeff Hostetler (1):
      hashmap: add API to disable item counting when threaded

Jeff King (110):
      t1414: document some reflog-walk oddities
      revision: disallow reflog walking with revs->limited
      log: clarify comment about reflog cycles
      log: do not free parents when walking reflog
      get_revision_1(): replace do-while with an early return
      rev-list: check reflog_info before showing usage
      reflog-walk: stop using fake parents
      reflog-walk: apply --since/--until to reflog dates
      check return value of verify_ref_format()
      docs/for-each-ref: update pointer to color syntax
      t: use test_decode_color rather than literal ANSI codes
      ref-filter: simplify automatic color reset
      ref-filter: abstract ref format into its own struct
      ref-filter: move need_color_reset_at_eol into ref_format
      ref-filter: provide a function for parsing sort options
      ref-filter: make parse_ref_filter_atom a private function
      ref-filter: factor out the parsing of sorting atoms
      ref-filter: pass ref_format struct to atom parsers
      color: check color.ui in git_default_config()
      for-each-ref: load config earlier
      rev-list: pass diffopt->use_colors through to pretty-print
      pretty: respect color settings for %C placeholders
      ref-filter: consult want_color() before emitting colors
      strbuf: use designated initializers in STRBUF_INIT
      t/lib-proto-disable: restore protocol.allow after config tests
      t5813: add test for hostname starting with dash
      connect: factor out "looks like command line option" check
      connect: reject dashed arguments for proxy commands
      connect: reject paths that look like command line options
      t6018: flesh out empty input/output rev-list tests
      revision: add rev_input_given flag
      rev-list: don't show usage when we see empty ref patterns
      revision: do not fallback to default when rev_input_given is set
      hashcmp: use memcmp instead of open-coded loop
      sha1_file: drop experimental GIT_USE_LOOKUP search
      trailer: put process_trailers() options into a struct
      interpret-trailers: add an option to show only the trailers
      interpret-trailers: add an option to show only existing trailers
      interpret-trailers: add an option to unfold values
      interpret-trailers: add --parse convenience option
      pretty: move trailer formatting to trailer.c
      t4205: refactor %(trailers) tests
      pretty: support normalization options for %(trailers)
      doc: fix typo in sendemail.identity
      config: use a static lock_file struct
      write_index_as_tree: cleanup tempfile on error
      setup_temporary_shallow: avoid using inactive tempfile
      setup_temporary_shallow: move tempfile struct into function
      verify_signed_buffer: prefer close_tempfile() to close()
      always check return value of close_tempfile
      tempfile: do not delete tempfile on failed close
      lockfile: do not rollback lock on failed close
      tempfile: prefer is_tempfile_active to bare access
      tempfile: handle NULL tempfile pointers gracefully
      tempfile: replace die("BUG") with BUG()
      tempfile: factor out activation
      tempfile: factor out deactivation
      tempfile: robustify cleanup handler
      tempfile: release deactivated strbufs instead of resetting
      tempfile: use list.h for linked list
      tempfile: remove deactivated list entries
      tempfile: auto-allocate tempfiles on heap
      lockfile: update lifetime requirements in documentation
      ref_lock: stop leaking lock_files
      stop leaking lock structs in some simple cases
      test-lib: --valgrind should not override --verbose-log
      test-lib: set LSAN_OPTIONS to abort by default
      add: free leaked pathspec after add_files_to_cache()
      update-index: fix cache entry leak in add_one_file()
      config: plug user_config leak
      reset: make tree counting less confusing
      reset: free allocated tree buffers
      repository: free fields before overwriting them
      set_git_dir: handle feeding gitdir to itself
      rev-parse: don't trim bisect refnames
      system_path: move RUNTIME_PREFIX to a sub-function
      git_extract_argv0_path: do nothing without RUNTIME_PREFIX
      add UNLEAK annotation for reducing leak false positives
      shortlog: skip format/parse roundtrip for internal traversal
      shell: drop git-cvsserver support by default
      archimport: use safe_pipe_capture for user input
      cvsimport: shell-quote variable used in backticks
      config: avoid "write_in_full(fd, buf, len) < len" pattern
      get-tar-commit-id: check write_in_full() return against 0
      avoid "write_in_full(fd, buf, len) != len" pattern
      convert less-trivial versions of "write_in_full() != len"
      pkt-line: check write_in_full() errors against "< 0"
      notes-merge: use ssize_t for write_in_full() return value
      config: flip return value of store_write_*()
      read_pack_header: handle signed/unsigned comparison in read result
      prefix_ref_iterator: break when we leave the prefix
      read_info_alternates: read contents into strbuf
      read_info_alternates: warn on non-trivial errors
      revision: replace "struct cmdline_pathspec" with argv_array
      cat-file: handle NULL object_context.path
      test-line-buffer: simplify command parsing
      curl_trace(): eliminate switch fallthrough
      consistently use "fallthrough" comments in switches
      doc: put literal block delimiter around table
      files-backend: prefer "0" for write_in_full() error check
      notes-merge: drop dead zero-write code
      prefer "!=" when checking read_in_full() result
      avoid looking at errno for short read_in_full() returns
      distinguish error versus short read from read_in_full()
      worktree: use xsize_t to access file size
      worktree: check the result of read_in_full()
      validate_headref: NUL-terminate HEAD buffer
      validate_headref: use skip_prefix for symref parsing
      validate_headref: use get_oid_hex for detached HEADs
      git: add --no-optional-locks option

Job Snijders (1):
      gitweb: add 'raw' blob_plain link in history overview

Joel Teichroeb (3):
      stash: add a test for stash create with no files
      stash: add a test for when apply fails during stash branch
      stash: add a test for stashing in a detached state

Johannes Schindelin (14):
      run_processes_parallel: change confusing task_cb convention
      git-gui (MinGW): make use of MSys2's msgfmt
      t3415: verify that an empty instructionFormat is handled as before
      rebase -i: generate the script via rebase--helper
      rebase -i: remove useless indentation
      rebase -i: do not invent onelines when expanding/collapsing SHA-1s
      rebase -i: also expand/collapse the SHA-1s via the rebase--helper
      t3404: relax rebase.missingCommitsCheck tests
      rebase -i: check for missing commits in the rebase--helper
      rebase -i: skip unnecessary picks using the rebase--helper
      t3415: test fixup with wrapped oneline
      rebase -i: rearrange fixup/squash lines using the rebase--helper
      Win32: simplify loading of DLL functions
      clang-format: adjust line break penalties

Jonathan Nieder (6):
      vcs-svn: remove more unused prototypes and declarations
      vcs-svn: remove custom mode constants
      vcs-svn: remove repo_delete wrapper function
      vcs-svn: move remaining repo_tree functions to fast_export.h
      pack: make packed_git_mru global a value instead of a pointer
      pathspec doc: parse_pathspec does not maintain references to args

Jonathan Tan (39):
      fsck: remove redundant parse_tree() invocation
      object: remove "used" field from struct object
      fsck: cleanup unused variable
      Documentation: migrate sub-process docs to header
      sub-process: refactor handshake to common function
      tests: ensure fsck fails on corrupt packfiles
      sha1_file: set whence in storage-specific info fn
      sha1_file: remove read_packed_sha1()
      diff: avoid redundantly clearing a flag
      diff: respect MIN_BLOCK_LENGTH for last block
      diff: define block by number of alphanumeric chars
      Doc: clarify that pack-objects makes packs, plural
      pack: move pack name-related functions
      pack: move static state variables
      pack: move pack_report()
      pack: move open_pack_index(), parse_pack_index()
      pack: move release_pack_memory()
      pack: move pack-closing functions
      pack: move use_pack()
      pack: move unuse_pack()
      pack: move add_packed_git()
      pack: move install_packed_git()
      pack: move {,re}prepare_packed_git and approximate_object_count
      pack: move unpack_object_header_buffer()
      pack: move get_size_from_delta()
      pack: move unpack_object_header()
      pack: move clear_delta_base_cache(), packed_object_info(), unpack_entry()
      pack: move nth_packed_object_{sha1,oid}
      pack: move check_pack_index_ptr(), nth_packed_object_offset()
      pack: move find_pack_entry_one(), is_pack_valid()
      pack: move find_sha1_pack()
      pack: move find_pack_entry() and make it global
      pack: move has_sha1_pack()
      pack: move has_pack_index()
      pack: move for_each_packed_object()
      Remove inadvertently added outgoing/packfile.h
      Add t/helper/test-write-cache to .gitignore
      git-compat-util: make UNLEAK less error-prone
      fast-export: do not copy from modified file

Junio C Hamano (49):
      t1408: add a test of stale packed refs covered by loose refs
      clean.c: use designated initializer
      http.c: http.sslcert and http.sslkey are both pathnames
      connect: reject ssh hostname that begins with a dash
      Git 2.7.6
      Git 2.8.6
      Git 2.9.5
      Git 2.10.4
      Git 2.11.3
      Git 2.12.4
      Git 2.13.5
      Git 2.14.1
      Start post 2.14 cycle
      perl/Git.pm: typofix in a comment
      The first batch of topics after the 2.14 cycle
      diff: retire sane_truncate_fn
      progress: simplify "delayed" progress API
      The second batch post 2.14
      t4200: give us a clean slate after "rerere gc" tests
      t4200: make "rerere gc" test more robust
      t4200: gather "rerere gc" together
      t4200: parameterize "rerere gc" custom expiry test
      rerere: represent time duration in timestamp_t internally
      rerere: allow approxidate in gc.rerereResolved/gc.rerereUnresolved
      The third batch post 2.14
      Prepare for 2.14.2
      The fourth batch post 2.14
      The fifth batch post 2.14
      The sixth batch post 2.14
      RelNotes: further fixes for 2.14.2 from the master front
      The seventh batch post 2.14
      travis: dedent a few scripts that are indented overly deeply
      subprocess: loudly die when subprocess asks for an unsupported capability
      cvsserver: move safe_pipe_capture() to the main package
      cvsserver: use safe_pipe_capture for `constant commands` as well
      gc: call fscanf() with %<len>s, not %<len>c, when reading hostname
      The eighth batch for 2.15
      Git 2.10.5
      Git 2.11.4
      Git 2.12.5
      Git 2.13.6
      Git 2.14.2
      branch: fix "copy" to never touch HEAD
      merge-strategies: avoid implying that "-s theirs" exists
      The ninth batch for 2.15
      The tenth batch for 2.15
      The eleventh batch for 2.15
      The twelfth batch for 2.15
      Git 2.15-rc0

Kaartic Sivaraam (13):
      hook: cleanup script
      hook: name the positional variables
      hook: add sign-off using "interpret-trailers"
      hook: add a simple first example
      commit: check for empty message before the check for untouched template
      hook: use correct logical variable
      t3200: cleanup cruft of a test
      builtin/branch: stop supporting the "--set-upstream" option
      branch: quote branch/ref names to improve readability
      help: change a message to be more precise
      commit-template: change a message to be more intuitive
      t/README: fix typo and grammatically improve a sentence
      doc: camelCase the config variables to improve readability

Kevin Daudt (3):
      stash: prevent warning about null bytes in input
      doc/for-each-ref: consistently use '=' to between argument names and values
      doc/for-each-ref: explicitly specify option names

Kevin Willford (9):
      format-patch: have progress option while generating patches
      rebase: turn on progress option by default for format-patch
      commit: skip discarding the index if there is no pre-commit hook
      perf: add test for writing the index
      read-cache: fix memory leak in do_write_index
      read-cache: avoid allocating every ondisk entry when writing
      merge-recursive: fix memory leak
      merge-recursive: remove return value from get_files_dirs
      merge-recursive: change current file dir string_lists to hashmap

Lars Schneider (11):
      t0021: keep filter log files on comparison
      t0021: make debug log file name configurable
      t0021: write "OUT <size>" only on success
      convert: put the flags field before the flag itself for consistent style
      convert: move multiple file filter error handling to separate function
      convert: refactor capabilities negotiation
      convert: add "status=delayed" to filter process protocol
      convert: display progress for filtered objects that have been delayed
      travis-ci: move Travis CI code into dedicated scripts
      travis-ci: skip a branch build if equal tag is present
      travis-ci: fix "skip_branch_tip_with_tag()" string comparison

Manav Rathi (1):
      docs: improve discoverability of exclude pathspec

Martin Koegler (2):
      diff-delta: fix encoding size that would not fit in "unsigned int"
      diff-delta: do not allow delta offset truncation

Martin Ågren (32):
      builtin.h: take over documentation from api-builtin.txt
      git.c: let builtins opt for handling `pager.foo` themselves
      git.c: provide setup_auto_pager()
      t7006: add tests for how git tag paginates
      tag: respect `pager.tag` in list-mode only
      tag: change default of `pager.tag` to "on"
      git.c: ignore pager.* when launching builtin as dashed external
      Doc/git-{push,send-pack}: correct --sign= to --signed=
      t5334: document that git push --signed=1 does not work
      config: introduce git_parse_maybe_bool_text
      config: make git_{config,parse}_maybe_bool equivalent
      treewide: deprecate git_config_maybe_bool, use git_parse_maybe_bool
      parse_decoration_style: drop unused argument `var`
      doc/interpret-trailers: fix "the this" typo
      convert: always initialize attr_action in convert_attrs
      pack-objects: take lock before accessing `remaining`
      strbuf_setlen: don't write to strbuf_slopbuf
      ThreadSanitizer: add suppressions
      Documentation/user-manual: update outdated example output
      treewide: correct several "up-to-date" to "up to date"
      pkt-line: re-'static'-ify buffer in packet_write_fmt_1()
      config: remove git_config_maybe_bool
      refs/files-backend: add longer-scoped copy of string to list
      refs/files-backend: fix memory leak in lock_ref_for_update
      refs/files-backend: correct return value in lock_ref_for_update
      refs/files-backend: add `refname`, not "HEAD", to list
      builtin/commit: fix memory leak in `prepare_index()`
      commit: fix memory leak in `reduce_heads()`
      leak_pending: use `object_array_clear()`, not `free()`
      object_array: use `object_array_clear()`, not `free()`
      object_array: add and use `object_array_pop()`
      pack-bitmap[-write]: use `object_array_clear()`, don't leak

Matthieu Moy (2):
      send-email: fix garbage removal after address
      send-email: don't use Mail::Address, even if available

Max Kirillov (2):
      describe: fix matching to actually match all patterns
      describe: teach --match to handle branches and remotes

Michael Forney (1):
      scripts: use "git foo" not "git-foo"

Michael Haggerty (77):
      add_packed_ref(): teach function to overwrite existing refs
      packed_ref_store: new struct
      packed_ref_store: move `packed_refs_path` here
      packed_ref_store: move `packed_refs_lock` member here
      clear_packed_ref_cache(): take a `packed_ref_store *` parameter
      validate_packed_ref_cache(): take a `packed_ref_store *` parameter
      get_packed_ref_cache(): take a `packed_ref_store *` parameter
      get_packed_refs(): take a `packed_ref_store *` parameter
      add_packed_ref(): take a `packed_ref_store *` parameter
      lock_packed_refs(): take a `packed_ref_store *` parameter
      commit_packed_refs(): take a `packed_ref_store *` parameter
      rollback_packed_refs(): take a `packed_ref_store *` parameter
      get_packed_ref(): take a `packed_ref_store *` parameter
      repack_without_refs(): take a `packed_ref_store *` parameter
      packed_peel_ref(): new function, extracted from `files_peel_ref()`
      packed_ref_store: support iteration
      packed_read_raw_ref(): new function, replacing `resolve_packed_ref()`
      packed-backend: new module for handling packed references
      packed_ref_store: make class into a subclass of `ref_store`
      commit_packed_refs(): report errors rather than dying
      commit_packed_refs(): use a staging file separate from the lockfile
      packed_refs_lock(): function renamed from lock_packed_refs()
      packed_refs_lock(): report errors via a `struct strbuf *err`
      packed_refs_unlock(), packed_refs_is_locked(): new functions
      clear_packed_ref_cache(): don't protest if the lock is held
      commit_packed_refs(): remove call to `packed_refs_unlock()`
      repack_without_refs(): don't lock or unlock the packed refs
      t3210: add some tests of bogus packed-refs file contents
      read_packed_refs(): die if `packed-refs` contains bogus data
      packed_ref_store: handle a packed-refs file that is a symlink
      files-backend: cheapen refname_available check when locking refs
      refs: retry acquiring reference locks for 100ms
      notes: make GET_NIBBLE macro more robust
      load_subtree(): remove unnecessary conditional
      load_subtree(): reduce the scope of some local variables
      load_subtree(): fix incorrect comment
      load_subtree(): separate logic for internal vs. terminal entries
      load_subtree(): check earlier whether an internal node is a tree entry
      load_subtree(): only consider blobs to be potential notes
      get_oid_hex_segment(): return 0 on success
      load_subtree(): combine some common code
      get_oid_hex_segment(): don't pad the rest of `oid`
      hex_to_bytes(): simpler replacement for `get_oid_hex_segment()`
      load_subtree(): declare some variables to be `size_t`
      load_subtree(): check that `prefix_len` is in the expected range
      packed-backend: don't adjust the reference count on lock/unlock
      struct ref_transaction: add a place for backends to store data
      packed_ref_store: implement reference transactions
      packed_delete_refs(): implement method
      files_pack_refs(): use a reference transaction to write packed refs
      prune_refs(): also free the linked list
      files_initial_transaction_commit(): use a transaction for packed refs
      t1404: demonstrate two problems with reference transactions
      files_ref_store: use a transaction to update packed refs
      packed-backend: rip out some now-unused code
      files_transaction_finish(): delete reflogs before references
      ref_iterator: keep track of whether the iterator output is ordered
      packed_ref_cache: add a backlink to the associated `packed_ref_store`
      die_unterminated_line(), die_invalid_line(): new functions
      read_packed_refs(): use mmap to read the `packed-refs` file
      read_packed_refs(): only check for a header at the top of the file
      read_packed_refs(): make parsing of the header line more robust
      for_each_string_list_item: avoid undefined behavior for empty list
      read_packed_refs(): read references with minimal copying
      packed_ref_cache: remember the file-wide peeling state
      mmapped_ref_iterator: add iterator over a packed-refs file
      mmapped_ref_iterator_advance(): no peeled value for broken refs
      packed-backend.c: reorder some definitions
      packed_ref_cache: keep the `packed-refs` file mmapped if possible
      read_packed_refs(): ensure that references are ordered when read
      packed_ref_iterator_begin(): iterate using `mmapped_ref_iterator`
      packed_read_raw_ref(): read the reference from the mmapped buffer
      ref_store: implement `refs_peel_ref()` generically
      packed_ref_store: get rid of the `ref_cache` entirely
      ref_cache: remove support for storing peeled values
      mmapped_ref_iterator: inline into `packed_ref_iterator`
      packed-backend.c: rename a bunch of things and update comments

Michael J Gruber (11):
      Documentation: use proper wording for ref format strings
      Documentation/git-for-each-ref: clarify peeling of tags for --format
      Documentation/git-merge: explain --continue
      merge: clarify call chain
      merge: split write_merge_state in two
      merge: save merge state earlier
      name-rev: change ULONG_MAX to TIME_MAX
      t7004: move limited stack prereq to test-lib
      t6120: test name-rev --all and --stdin
      t6120: clean up state after breaking repo
      t6120: test describe and name-rev with deep repos

Nguyễn Thái Ngọc Duy (17):
      branch: fix branch renaming not updating HEADs correctly
      revision.h: new flag in struct rev_info wrt. worktree-related refs
      refs.c: use is_dir_sep() in resolve_gitlink_ref()
      revision.c: refactor add_index_objects_to_pending()
      revision.c: --indexed-objects add objects from all worktrees
      refs.c: refactor get_submodule_ref_store(), share common free block
      refs: move submodule slash stripping code to get_submodule_ref_store
      refs: add refs_head_ref()
      revision.c: use refs_for_each*() instead of for_each_*_submodule()
      refs.c: move for_each_remote_ref_submodule() to submodule.c
      refs: remove dead for_each_*_submodule()
      revision.c: --all adds HEAD from all worktrees
      files-backend: make reflog iterator go through per-worktree reflog
      revision.c: --reflog add HEAD reflog from all worktrees
      rev-list: expose and document --single-worktree
      refs.c: remove fallback-to-main-store code get_submodule_ref_store()
      refs.c: reindent get_submodule_ref_store()

Nicolas Morey-Chaisemartin (7):
      stash: clean untracked files before reset
      pull: fix cli and config option parsing order
      pull: honor submodule.recurse config option
      imap-send: return with error if curl failed
      imap-send: add wrapper to get server credentials if needed
      imap_send: setup_curl: retreive credentials if not set in config file
      imap-send: use curl by default when possible

Paolo Bonzini (4):
      trailers: export action enums and corresponding lookup functions
      trailers: introduce struct new_trailer_item
      interpret-trailers: add options for actions
      interpret-trailers: fix documentation typo

Patryk Obara (10):
      sha1_file: fix definition of null_sha1
      commit: replace the raw buffer with strbuf in read_graft_line
      commit: allocate array using object_id size
      commit: rewrite read_graft_line
      builtin/hash-object: convert to struct object_id
      read-cache: convert to struct object_id
      sha1_file: convert index_path to struct object_id
      sha1_file: convert index_fd to struct object_id
      sha1_file: convert hash_sha1_file_literally to struct object_id
      sha1_file: convert index_stream to struct object_id

Philip Oakley (4):
      git-gui: remove duplicate entries from .gitconfig's gui.recentrepo
      git gui: cope with duplicates in _get_recentrepo
      git gui: de-dup selected repo from recentrepo history
      git gui: allow for a long recentrepo list

Phillip Wood (7):
      am: remember --rerere-autoupdate setting
      rebase: honor --rerere-autoupdate
      rebase -i: honor --rerere-autoupdate
      t3504: use test_commit
      cherry-pick/revert: remember --rerere-autoupdate
      cherry-pick/revert: reject --rerere-autoupdate when continuing
      am: fix signoff when other trailers are present

Raman Gupta (1):
      contrib/rerere-train: optionally overwrite existing resolutions

Ramsay Jones (9):
      credential-cache: interpret an ECONNRESET as an EOF
      builtin/add: add detail to a 'cannot chmod' error message
      test-lib: don't use ulimit in test prerequisites on cygwin
      test-lib: use more compact expression in PIPE prerequisite
      t9010-*.sh: skip all tests if the PIPE prereq is missing
      git-compat-util.h: xsize_t() - avoid -Wsign-compare warnings
      commit-slab.h: avoid -Wsign-compare warnings
      cache.h: hex2chr() - avoid -Wsign-compare warnings
      ALLOC_GROW: avoid -Wsign-compare warnings

Rene Scharfe (34):
      am: release strbufs after use in detect_patch_format()
      am: release strbuf on error return in hg_patch_to_mail()
      am: release strbuf after use in safe_to_abort()
      check-ref-format: release strbuf after use in check_ref_format_branch()
      clean: release strbuf after use in remove_dirs()
      clone: release strbuf after use in remove_junk()
      commit: release strbuf on error return in commit_tree_extended()
      connect: release strbuf on error return in git_connect()
      convert: release strbuf on error return in filter_buffer_or_fd()
      diff: release strbuf after use in diff_summary()
      diff: release strbuf after use in show_rename_copy()
      diff: release strbuf after use in show_stats()
      help: release strbuf on error return in exec_man_konqueror()
      help: release strbuf on error return in exec_man_man()
      help: release strbuf on error return in exec_woman_emacs()
      mailinfo: release strbuf after use in handle_from()
      mailinfo: release strbuf on error return in handle_boundary()
      merge: release strbuf after use in save_state()
      merge: release strbuf after use in write_merge_heads()
      notes: release strbuf after use in notes_copy_from_stdin()
      refs: release strbuf on error return in write_pseudoref()
      remote: release strbuf after use in read_remote_branches()
      remote: release strbuf after use in migrate_file()
      remote: release strbuf after use in set_url()
      send-pack: release strbuf on error return in send_pack()
      sha1_file: release strbuf on error return in index_path()
      shortlog: release strbuf after use in insert_one_record()
      sequencer: release strbuf after use in save_head()
      transport-helper: release strbuf after use in process_connect_service()
      userdiff: release strbuf after use in userdiff_get_textconv()
      utf8: release strbuf on error return in strbuf_utf8_replace()
      vcs-svn: release strbuf after use in end_revision()
      wt-status: release strbuf after use in read_rebase_todolist()
      wt-status: release strbuf after use in wt_longstatus_print_tracking()

René Scharfe (44):
      tree-diff: don't access hash of NULL object_id pointer
      notes: don't access hash of NULL object_id pointer
      receive-pack: don't access hash of NULL object_id pointer
      bswap: convert to unsigned before shifting in get_be32
      bswap: convert get_be16, get_be32 and put_be32 to inline functions
      add MOVE_ARRAY
      use MOVE_ARRAY
      apply: use COPY_ARRAY and MOVE_ARRAY in update_image()
      ls-files: don't try to prune an empty index
      dir: support platforms that require aligned reads
      pack-objects: remove unnecessary NULL check
      t0001: skip test with restrictive permissions if getpwd(3) respects them
      test-path-utils: handle const parameter of basename and dirname
      t3700: fix broken test under !POSIXPERM
      t4062: use less than 256 repetitions in regex
      sha1_file: avoid comparison if no packed hash matches the first byte
      apply: remove prefix_length member from apply_state
      merge: use skip_prefix()
      win32: plug memory leak on realloc() failure in syslog()
      strbuf: clear errno before calling getdelim(3)
      fsck: free buffers on error in fsck_obj()
      sha1_file: release delta_stack on error in unpack_entry()
      tree-walk: convert fill_tree_descriptor() to object_id
      t1002: stop using sum(1)
      t5001: add tests for export-ignore attributes and exclude pathspecs
      archive: factor out helper functions for handling attributes
      archive: don't queue excluded directories
      commit: remove unused inline function single_parent()
      apply: check date of potential epoch timestamps first
      apply: remove epoch date from regex
      archive: don't add empty directories to archives
      refs: make sha1 output parameter of refs_resolve_ref_unsafe() optional
      refs: pass NULL to refs_resolve_ref_unsafe() if hash is not needed
      refs: pass NULL to resolve_ref_unsafe() if hash is not needed
      mailinfo: don't decode invalid =XY quoted-printable sequences
      refs: pass NULL to refs_resolve_refdup() if hash is not needed
      refs: pass NULL to resolve_refdup() if hash is not needed
      coccinelle: remove parentheses that become unnecessary
      path: use strbuf_add_real_path()
      use strbuf_addstr() for adding strings to strbufs
      graph: use strbuf_addchars() to add spaces
      tag: avoid NULL pointer arithmetic
      repository: use FREE_AND_NULL
      run-command: use ALLOC_ARRAY

Ross Kabus (1):
      commit-tree: do not complete line in -F input

Sahil Dua (2):
      config: create a function to format section headers
      branch: add a --copy (-c) option to go with --move (-m)

Santiago Torres (1):
      t: lib-gpg: flush gpg agent on startup

Stefan Beller (49):
      diff.c: readability fix
      diff.c: move line ending check into emit_hunk_header
      diff.c: factor out diff_flush_patch_all_file_pairs
      diff.c: introduce emit_diff_symbol
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_CONTEXT_MARKER
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_CONTEXT_FRAGINFO
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_NO_LF_EOF
      diff.c: migrate emit_line_checked to use emit_diff_symbol
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_WORDS[_PORCELAIN]
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_CONTEXT_INCOMPLETE
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_FILEPAIR_{PLUS, MINUS}
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_HEADER
      diff.c: emit_diff_symbol learns about DIFF_SYMBOL_BINARY_FILES
      diff.c: emit_diff_symbol learns DIFF_SYMBOL_REWRITE_DIFF
      submodule.c: migrate diff output to use emit_diff_symbol
      diff.c: convert emit_binary_diff_body to use emit_diff_symbol
      diff.c: convert show_stats to use emit_diff_symbol
      diff.c: convert word diffing to use emit_diff_symbol
      diff.c: emit_diff_symbol learns about DIFF_SYMBOL_STAT_SEP
      diff.c: emit_diff_symbol learns about DIFF_SYMBOL_SUMMARY
      diff.c: buffer all output if asked to
      diff.c: color moved lines differently
      diff.c: color moved lines differently, plain mode
      diff.c: add dimming to moved line detection
      diff: document the new --color-moved setting
      attr.c: drop hashmap_cmp_fn cast
      builtin/difftool.c: drop hashmap_cmp_fn cast
      builtin/describe: drop hashmap_cmp_fn cast
      config.c: drop hashmap_cmp_fn cast
      convert/sub-process: drop cast to hashmap_cmp_fn
      patch-ids.c: drop hashmap_cmp_fn cast
      remote.c: drop hashmap_cmp_fn cast
      submodule-config.c: drop hashmap_cmp_fn cast
      name-hash.c: drop hashmap_cmp_fn cast
      t/helper/test-hashmap: use custom data instead of duplicate cmp functions
      commit: convert lookup_commit_graft to struct object_id
      tag: convert gpg_verify_tag to use struct object_id
      t8008: rely on rev-parse'd HEAD instead of sha1 value
      t1200: remove t1200-tutorial.sh
      sha1_file: make read_info_alternates static
      submodule.sh: remove unused variable
      builtin/merge: honor commit-msg hook for merges
      push, fetch: error out for submodule entries not pointing to commits
      replace-objects: evaluate replacement refs without using the object store
      Documentation/githooks: mention merge in commit-msg hook
      Documentation/config: clarify the meaning of submodule.<name>.update
      t7406: submodule.<name>.update command must not be run from .gitmodules
      diff: correct newline in summary for renamed files
      submodule: correct error message for missing commits

Stephan Beyer (1):
      clang-format: add a comment about the meaning/status of the

Takashi Iwai (2):
      sha1dc: build git plumbing code more explicitly
      sha1dc: allow building with the external sha1dc library

Thomas Gummerer (2):
      read-cache: fix index corruption with index v4
      refs: strip out not allowed flags from ref_transaction_update

Tom G. Christensen (2):
      http: fix handling of missing CURLPROTO_*
      http: use a feature check to enable GSSAPI delegation control

Torsten Bögershausen (3):
      convert: add SAFE_CRLF_KEEP_CRLF
      apply: file commited with CRLF should roundtrip diff and apply
      test-lint: echo -e (or -E) is not portable

Urs Thuermann (1):
      git svn fetch: Create correct commit timestamp when using --localtime

William Duclot (1):
      rebase: make resolve message clearer for inexperienced users

brian m. carlson (14):
      builtin/fsck: convert remaining caller of get_sha1 to object_id
      builtin/merge-tree: convert remaining caller of get_sha1 to object_id
      submodule: convert submodule config lookup to use object_id
      remote: convert struct push_cas to struct object_id
      sequencer: convert to struct object_id
      builtin/update_ref: convert to struct object_id
      bisect: convert bisect_checkout to struct object_id
      builtin/unpack-file: convert to struct object_id
      Convert remaining callers of get_sha1 to get_oid.
      sha1_name: convert get_sha1* to get_oid*
      sha1_name: convert GET_SHA1* flags to GET_OID*
      sha1_name: convert uses of 40 to GIT_SHA1_HEXSZ
      vcs-svn: remove unused prototypes
      vcs-svn: rename repo functions to "svn_repo"

joernchen (1):
      cvsserver: use safe_pipe_capture instead of backticks

Ævar Arnfjörð Bjarmason (2):
      branch: add test for -m renaming multiple config sections
      tests: don't give unportable ">" to "test" built-in, use -gt

Øystein Walle (1):
      rev-parse: rev-parse: add --is-shallow-repository

Łukasz Gryglicki (1):
      merge: add a --signoff flag


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.14.0
@ 2017-08-04 16:54  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2017-08-04 16:54 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

The latest feature release Git v2.14.0 is now available at the
usual places.  It is comprised of 727 non-merge commits since
v2.13.0, contributed by 66 people, 18 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

when kernel.org mirrors catch up.

The following public repositories all have a copy of the 'v2.14.0'
tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.13.0 are as follows.
Welcome to the Git development community!

  Anthony Sottile, A. Wilcox, Ben Peart, Brian Malehorn, Hugues
  Peccatte, James Clarke, Jeff Smith, Kaartic Sivaraam, Liam
  Beguin, Louis, Phillip Wood, Rikard Falkeborn, Sahil Dua,
  Samuel Lijin, Stephen Kent, Sylvestre Ledru, Tyler Brazier,
  and xiaoqiang zhao.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alejandro R. Sedeño,
  Alexander Shopov, Andreas Heiduk, Beat Bolli, Brandon Williams,
  brian m. carlson, Changwoo Ryu, Christian Couder, David Aguilar,
  David Turner, Dennis Kaarsemaker, Dimitriy Ryazantcev, Eric
  Wong, Hartmut Henkel, Jean-Noel Avila, Jeff Hostetler, Jeff
  King, Jiang Xin, Johannes Schindelin, Johannes Sixt, Jonathan
  Nieder, Jonathan Tan, Jordi Mas, Junio C Hamano, Kyle J. McKay,
  Kyle Meyer, Lars Schneider, Marc Branchaud, Michael Haggerty,
  Miguel Torroja, Mike Hommey, Nguyễn Thái Ngọc Duy, Patrick
  Steinhardt, Peter Krefting, Prathamesh Chavan, Ralf Thielow,
  Ramsay Jones, René Scharfe, Stefan Beller, Štěpán Němec,
  Sven Strickroth, SZEDER Gábor, Thomas Gummerer, Torsten
  Bögershausen, Trần Ngọc Quân, and Ville Skyttä.

----------------------------------------------------------------

Git 2.14 Release Notes
======================

Backward compatibility notes and other notable changes.

 * Use of an empty string as a pathspec element that is used for
   'everything matches' is still warned and Git asks users to use a
   more explicit '.' for that instead.  The hope is that existing
   users will not mind this change, and eventually the warning can be
   turned into a hard error, upgrading the deprecation into removal of
   this (mis)feature.  That is not scheduled to happen in the upcoming
   release (yet).

 * Git now avoids blindly falling back to ".git" when the setup
   sequence said we are _not_ in Git repository.  A corner case that
   happens to work right now may be broken by a call to die("BUG").
   We've tried hard to locate such cases and fixed them, but there
   might still be cases that need to be addressed--bug reports are
   greatly appreciated.

 * The experiment to improve the hunk-boundary selection of textual
   diff output has finished, and the "indent heuristics" has now
   become the default.

 * Git can now be built with PCRE v2 instead of v1 of the PCRE
   library. Replace USE_LIBPCRE=YesPlease with USE_LIBPCRE2=YesPlease
   in existing build scripts to build against the new version.  As the
   upstream PCRE maintainer has abandoned v1 maintenance for all but
   the most critical bug fixes, use of v2 is recommended.


Updates since v2.13
-------------------

UI, Workflows & Features

 * The colors in which "git status --short --branch" showed the names
   of the current branch and its remote-tracking branch are now
   configurable.

 * "git clone" learned the "--no-tags" option not to fetch all tags
   initially, and also set up the tagopt not to follow any tags in
   subsequent fetches.

 * "git archive --format=zip" learned to use zip64 extension when
   necessary to go beyond the 4GB limit.

 * "git reset" learned "--recurse-submodules" option.

 * "git diff --submodule=diff" now recurses into nested submodules.

 * "git repack" learned to accept the --threads=<n> option and pass it
   to pack-objects.

 * "git send-email" learned to run sendemail-validate hook to inspect
   and reject a message before sending it out.

 * There is no good reason why "git fetch $there $sha1" should fail
   when the $sha1 names an object at the tip of an advertised ref,
   even when the other side hasn't enabled allowTipSHA1InWant.

 * The "[includeIf "gitdir:$dir"] path=..." mechanism introduced in
   2.13.0 would canonicalize the path of the gitdir being matched,
   and did not match e.g. "gitdir:~/work/*" against a repo in
   "~/work/main" if "~/work" was a symlink to "/mnt/storage/work".
   Now we match both the resolved canonical path and what "pwd" would
   show. The include will happen if either one matches.

 * The "indent" heuristics is now the default in "diff". The
   diff.indentHeuristic configuration variable can be set to "false"
   for those who do not want it.

 * Many commands learned to pay attention to submodule.recurse
   configuration.

 * The convention for a command line is to follow "git cmdname
   --options" with revisions followed by an optional "--"
   disambiguator and then finally pathspecs.  When "--" is not there,
   we make sure early ones are all interpretable as revs (and do not
   look like paths) and later ones are the other way around.  A
   pathspec with "magic" (e.g. ":/p/a/t/h" that matches p/a/t/h from
   the top-level of the working tree, no matter what subdirectory you
   are working from) are conservatively judged as "not a path", which
   required disambiguation more often.  The command line parser
   learned to say "it's a pathspec" a bit more often when the syntax
   looks like so.

 * Update "perl-compatible regular expression" support to enable JIT
   and also allow linking with the newer PCRE v2 library.

 * "filter-branch" learned a pseudo filter "--setup" that can be used
   to define common functions/variables that can be used by other
   filters.

 * Using "git add d/i/r" when d/i/r is the top of the working tree of
   a separate repository would create a gitlink in the index, which
   would appear as a not-quite-initialized submodule to others.  We
   learned to give warnings when this happens.

 * "git status" learned to optionally give how many stash entries there
   are in its output.

 * "git status" has long shown essentially the same message as "git
   commit"; the message it gives while preparing for the root commit,
   i.e. "Initial commit", was hard to understand for some new users.
   Now it says "No commits yet" to stress more on the current status
   (rather than the commit the user is preparing for, which is more in
   line with the focus of "git commit").

 * "git send-email" now has --batch-size and --relogin-delay options
    which can be used to overcome limitations on SMTP servers that
    restrict on how many of e-mails can be sent in a single session.

 * An old message shown in the commit log template was removed, as it
   has outlived its usefulness.

 * "git pull --rebase --recurse-submodules" learns to rebase the
   branch in the submodules to an updated base.

 * "git log" learned -P as a synonym for --perl-regexp, "git grep"
   already had such a synonym.

 * "git log" didn't understand --regexp-ignore-case when combined with
   --perl-regexp. This has been fixed.

Performance, Internal Implementation, Development Support etc.

 * The default packed-git limit value has been raised on larger
   platforms to save "git fetch" from a (recoverable) failure while
   "gc" is running in parallel.

 * Code to update the cache-tree has been tightened so that we won't
   accidentally write out any 0{40} entry in the tree object.

 * Attempt to allow us notice "fishy" situation where we fail to
   remove the temporary directory used during the test.

 * Travis CI gained a task to format the documentation with both
   AsciiDoc and AsciiDoctor.

 * Some platforms have ulong that is smaller than time_t, and our
   historical use of ulong for timestamp would mean they cannot
   represent some timestamp that the platform allows.  Invent a
   separate and dedicated timestamp_t (so that we can distingiuish
   timestamps and a vanilla ulongs, which along is already a good
   move), and then declare uintmax_t is the type to be used as the
   timestamp_t.

 * We can trigger Windows auto-build tester (credits: Dscho &
   Microsoft) from our existing Travis CI tester now.

 * Conversion from uchar[20] to struct object_id continues.

 * Simplify parse_pathspec() codepath and stop it from looking at the
   default in-core index.

 * Add perf-test for wildmatch.

 * Code from "conversion using external process" codepath has been
   extracted to a separate sub-process.[ch] module.

 * When "git checkout", "git merge", etc. manipulates the in-core
   index, various pieces of information in the index extensions are
   discarded from the original state, as it is usually not the case
   that they are kept up-to-date and in-sync with the operation on the
   main index.  The untracked cache extension is copied across these
   operations now, which would speed up "git status" (as long as the
   cache is properly invalidated).

 * The internal implementation of "git grep" has seen some clean-up.

 * Update the C style recommendation for notes for translators, as
   recent versions of gettext tools can work with our style of
   multi-line comments.

 * The implementation of "ref" API around the "packed refs" have been
   cleaned up, in preparation for further changes.

 * The internal logic used in "git blame" has been libified to make it
   easier to use by cgit.

 * Our code often opens a path to an optional file, to work on its
   contents when we can successfully open it.  We can ignore a failure
   to open if such an optional file does not exist, but we do want to
   report a failure in opening for other reasons (e.g. we got an I/O
   error, or the file is there, but we lack the permission to open).

   The exact errors we need to ignore are ENOENT (obviously) and
   ENOTDIR (less obvious).  Instead of repeating comparison of errno
   with these two constants, introduce a helper function to do so.

 * We often try to open a file for reading whose existence is
   optional, and silently ignore errors from open/fopen; report such
   errors if they are not due to missing files.

 * When an existing repository is used for t/perf testing, we first
   create bit-for-bit copy of it, which may grab a transient state of
   the repository and freeze it into the repository used for testing,
   which then may cause Git operations to fail.  Single out "the index
   being locked" case and forcibly drop the lock from the copy.

 * Three instances of the same helper function have been consolidated
   to one.

 * "fast-import" uses a default pack chain depth that is consistent
   with other parts of the system.

 * A new test to show the interaction between the pattern [^a-z]
   (which matches '/') and a slash in a path has been added.  The
   pattern should not match the slash with "pathmatch", but should
   with "wildmatch".

 * The 'diff-highlight' program (in contrib/) has been restructured
   for easier reuse by an external project 'diff-so-fancy'.

 * A common pattern to free a piece of memory and assign NULL to the
   pointer that used to point at it has been replaced with a new
   FREE_AND_NULL() macro.

 * Traditionally, the default die() routine had a code to prevent it
   from getting called multiple times, which interacted badly when a
   threaded program used it (one downside is that the real error may
   be hidden and instead the only error message given to the user may
   end up being "die recursion detected", which is not very useful).

 * Introduce a "repository" object to eventually make it easier to
   work in multiple repositories (the primary focus is to work with
   the superproject and its submodules) in a single process.

 * Optimize "what are the object names already taken in an alternate
   object database?" query that is used to derive the length of prefix
   an object name is uniquely abbreviated to.

 * The hashmap API has been updated so that data to customize the
   behaviour of the comparison function can be specified at the time a
   hashmap is initialized.

 * The "collision detecting" SHA-1 implementation shipped with 2.13 is
   now integrated into git.git as a submodule (the first submodule to
   ship with git.git). Clone git.git with --recurse-submodules to get
   it. For now a non-submodule copy of the same code is also shipped
   as part of the tree.

 * A recent update made it easier to use "-fsanitize=" option while
   compiling but supported only one sanitize option.  Allow more than
   one to be combined, joined with a comma, like "make SANITIZE=foo,bar".

 * Use "p4 -G" to make "p4 changes" output more Python-friendly
   to parse.

 * We started using "%" PRItime, imitating "%" PRIuMAX and friends, as
   a way to format the internal timestamp value, but this does not
   play well with gettext(1) i18n framework, and causes "make pot"
   that is run by the l10n coordinator to create a broken po/git.pot
   file.  This is a possible workaround for that problem.

 * It turns out that Cygwin also needs the fopen() wrapper that
   returns failure when a directory is opened for reading.

Also contains various documentation updates and code clean-ups.


Fixes since v2.13
-----------------

Unless otherwise noted, all the fixes since v2.13 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * "git gc" did not interact well with "git worktree"-managed
   per-worktree refs.

 * "git cherry-pick" and other uses of the sequencer machinery
   mishandled a trailer block whose last line is an incomplete line.
   This has been fixed so that an additional sign-off etc. are added
   after completing the existing incomplete line.

 * The codepath in "git am" that is used when running "git rebase"
   leaked memory held for the log message of the commits being rebased.

 * "git clone --config var=val" is a way to populate the
   per-repository configuration file of the new repository, but it did
   not work well when val is an empty string.  This has been fixed.

 * Setting "log.decorate=false" in the configuration file did not take
   effect in v2.13, which has been corrected.

 * A few codepaths in "checkout" and "am" working on an unborn branch
   tried to access an uninitialized piece of memory.

 * The Web interface to gmane news archive is long gone, even though
   the articles are still accessible via NTTP.  Replace the links with
   ones to public-inbox.org.  Because their message identification is
   based on the actual message-id, it is likely that it will be easier
   to migrate away from it if/when necessary.

 * The receive-pack program now makes sure that the push certificate
   records the same set of push options used for pushing.

 * Tests have been updated to pass under GETTEXT_POISON (a mechanism
   to ensure that output strings that should not be translated are
   not translated by mistake), and TravisCI is told to run them.

 * "git checkout --recurse-submodules" did not quite work with a
   submodule that itself has submodules.

 * "pack-objects" can stream a slice of an existing packfile out when
   the pack bitmap can tell that the reachable objects are all needed
   in the output, without inspecting individual objects.  This
   strategy however would not work well when "--local" and other
   options are in use, and need to be disabled.

 * Fix memory leaks pointed out by Coverity (and people).

 * "git read-tree -m" (no tree-ish) gave a nonsense suggestion "use
   --empty if you want to clear the index".  With "-m", such a request
   will still fail anyway, as you'd need to name at least one tree-ish
   to be merged.

 * Make sure our tests would pass when the sources are checked out
   with "platform native" line ending convention by default on
   Windows.  Some "text" files out tests use and the test scripts
   themselves that are meant to be run with /bin/sh, ought to be
   checked out with eol=LF even on Windows.

 * Introduce the BUG() macro to improve die("BUG: ...").

 * Clarify documentation for include.path and includeIf.<condition>.path
   configuration variables.

 * Git sometimes gives an advice in a rhetorical question that does
   not require an answer, which can confuse new users and non native
   speakers.  Attempt to rephrase them.

 * A few http:// links that are redirected to https:// in the
   documentation have been updated to https:// links.

 * "git for-each-ref --format=..." with %(HEAD) in the format used to
   resolve the HEAD symref as many times as it had processed refs,
   which was wasteful, and "git branch" shared the same problem.

 * Regression fix to topic recently merged to 'master'.

 * The shell completion script (in contrib/) learned "git stash" has
   a new "push" subcommand.

 * "git interpret-trailers", when used as GIT_EDITOR for "git commit
   -v", looked for and appended to a trailer block at the very end,
   i.e. at the end of the "diff" output.  The command has been
   corrected to pay attention to the cut-mark line "commit -v" adds to
   the buffer---the real trailer block should appear just before it.

 * A test allowed both "git push" and "git receive-pack" on the other
   end write their traces into the same file.  This is OK on platforms
   that allows atomically appending to a file opened with O_APPEND,
   but on other platforms led to a mangled output, causing
   intermittent test failures.  This has been fixed by disabling
   traces from "receive-pack" in the test.

 * Tag objects, which are not reachable from any ref, that point at
   missing objects were mishandled by "git gc" and friends (they
   should silently be ignored instead)

 * "git describe --contains" penalized light-weight tags so much that
   they were almost never considered.  Instead, give them about the
   same chance to be considered as an annotated tag that is the same
   age as the underlying commit would.

 * The "run-command" API implementation has been made more robust
   against dead-locking in a threaded environment.

 * A recent update to t5545-push-options.sh started skipping all the
   tests in the script when a web server testing is disabled or
   unavailable, not just the ones that require a web server.  Non HTTP
   tests have been salvaged to always run in this script.

 * "git send-email" now uses Net::SMTP::SSL, which is obsolete, only
   when needed.  Recent versions of Net::SMTP can do TLS natively.

 * "foo\bar\baz" in "git fetch foo\bar\baz", even though there is no
   slashes in it, cannot be a nickname for a remote on Windows, as
   that is likely to be a pathname on a local filesystem.

 * "git clean -d" used to clean directories that has ignored files,
   even though the command should not lose ignored ones without "-x".
   "git status --ignored"  did not list ignored and untracked files
   without "-uall".  These have been corrected.

 * The result from "git diff" that compares two blobs, e.g. "git diff
   $commit1:$path $commit2:$path", used to be shown with the full
   object name as given on the command line, but it is more natural to
   use the $path in the output and use it to look up .gitattributes.

 * The "collision detecting" SHA-1 implementation shipped with 2.13
   was quite broken on some big-endian platforms and/or platforms that
   do not like unaligned fetches.  Update to the upstream code which
   has already fixed these issues.

 * "git am -h" triggered a BUG().

 * The interaction of "url.*.insteadOf" and custom URL scheme's
   whitelisting is now documented better.

 * The timestamp of the index file is now taken after the file is
   closed, to help Windows, on which a stale timestamp is reported by
   fstat() on a file that is opened for writing and data was written
   but not yet closed.

 * "git pull --rebase --autostash" didn't auto-stash when the local history
   fast-forwards to the upstream.

 * A flaky test has been corrected.

 * "git $cmd -h" for builtin commands calls the implementation of the
   command (i.e. cmd_$cmd() function) without doing any repository
   set-up, and the commands that expect RUN_SETUP is done by the Git
   potty needs to be prepared to show the help text without barfing.
   (merge d691551192 jk/consistent-h later to maint).

 * Help contributors that visit us at GitHub.

 * "git stash push <pathspec>" did not work from a subdirectory at all.
   Bugfix for a topic in v2.13

 * As there is no portable way to pass timezone information to
   strftime, some output format from "git log" and friends are
   impossible to produce.  Teach our own strbuf_addftime to replace %z
   and %Z with caller-supplied values to help working around this.
   (merge 6eced3ec5e rs/strbuf-addftime-zZ later to maint).

 * "git mergetool" learned to work around a wrapper MacOS X adds
   around underlying meld.

 * An example in documentation that does not work in multi worktree
   configuration has been corrected.

 * The pretty-format specifiers like '%h', '%t', etc. had an
   optimization that no longer works correctly.  In preparation/hope
   of getting it correctly implemented, first discard the optimization
   that is broken.

 * The code to pick up and execute command alias definition from the
   configuration used to switch to the top of the working tree and
   then come back when the expanded alias was executed, which was
   unnecessarilyl complex.  Attempt to simplify the logic by using the
   early-config mechanism that does not chdir around.

 * Fix configuration codepath to pay proper attention to commondir
   that is used in multi-worktree situation, and isolate config API
   into its own header file.
   (merge dc8441fdb4 bw/config-h later to maint).

 * "git add -p" were updated in 2.12 timeframe to cope with custom
   core.commentchar but the implementation was buggy and a
   metacharacter like $ and * did not work.

 * A recent regression in "git rebase -i" has been fixed and tests
   that would have caught it and others have been added.

 * An unaligned 32-bit access in pack-bitmap code has been corrected.

 * Tighten error checks for invalid "git apply" input.

 * The split index code did not honor core.sharedRepository setting
   correctly.

 * The Makefile rule in contrib/subtree for building documentation
   learned to honour USE_ASCIIDOCTOR just like the main documentation
   set does.

 * Code clean-up to fix possible buffer over-reading.

 * A few tests that tried to verify the contents of push certificates
   did not use 'git rev-parse' to formulate the line to look for in
   the certificate correctly.

 * Update the character width tables.

 * After "git branch --move" of the currently checked out branch, the
   code to walk the reflog of HEAD via "log -g" and friends
   incorrectly stopped at the reflog entry that records the renaming
   of the branch.

 * The rewrite of "git branch --list" using for-each-ref's internals
   that happened in v2.13 regressed its handling of color.branch.local;
   this has been fixed.

 * The build procedure has been improved to allow building and testing
   Git with address sanitizer more easily.
   (merge 425ca6710b jk/build-with-asan later to maint).

 * On Cygwin, similar to Windows, "git push //server/share/repository"
   ought to mean a repository on a network share that can be accessed
   locally, but this did not work correctly due to stripping the double
   slashes at the beginning.

 * The progress meter did not give a useful output when we haven't had
   0.5 seconds to measure the throughput during the interval.  Instead
   show the overall throughput rate at the end, which is a much more
   useful number.

 * Code clean-up, that makes us in sync with Debian by one patch.

 * We run an early part of "git gc" that deals with refs before
   daemonising (and not under lock) even when running a background
   auto-gc, which caused multiple gc processes attempting to run the
   early part at the same time.  This is now prevented by running the
   early part also under the GC lock.

 * A recent update broke an alias that contained an uppercase letter.

 * Other minor doc, test and build updates and code cleanups.
   (merge 5053313562 rs/urlmatch-cleanup later to maint).
   (merge 42c78a216e rs/use-div-round-up later to maint).
   (merge 5e8d2729ae rs/wt-status-cleanup later to maint).
   (merge bc9b7e207f as/diff-options-grammofix later to maint).
   (merge ac05222b31 ah/patch-id-doc later to maint).

----------------------------------------------------------------

Changes since v2.13.0 are as follows:

A. Wilcox (1):
      subtree: honour USE_ASCIIDOCTOR when set

Adam Dinwoodie (1):
      docs: fix formatting and grammar

Alejandro R. Sedeño (1):
      ref-filter.c: drop return from void function

Alexander Shopov (2):
      l10n: bg.po: Updated Bulgarian translation (3206t)
      l10n: bg.po: Updated Bulgarian translation (3213t)

Andreas Heiduk (11):
      Documentation: fix reference to ifExists for interpret-trailers
      Documentation: fix formatting typo in pretty-formats.txt
      doc: filter-branch does not require re-export of vars
      doc: rewrite description for rev-parse --short
      doc: describe git svn init --ignore-refs
      filter-branch: add `--setup` step
      filter-branch: add [--] to usage
      git-svn: document special options for commit-diff
      doc: do not use `rm .git/index` when normalizing line endings
      doc: clarify syntax for %C(auto,...) in pretty formats
      doc: remove unsupported parameter from patch-id

Anthony Sottile (1):
      diff-options doc: grammar fix

Beat Bolli (1):
      unicode: update the width tables to Unicode 10

Ben Peart (10):
      convert: remove erroneous tests for errno == EPIPE
      pkt-line: fix packet_read_line() to handle len < 0 errors
      pkt-line: add packet_read_line_gently()
      convert: move packet_write_line() into pkt-line as packet_writel()
      convert: split start_multi_file_filter() into two separate functions
      convert: separate generic structures and variables from the filter specific ones
      convert: update generic functions to only use generic data structures
      convert: rename reusable sub-process functions
      sub-process: move sub-process functions into separate files
      convert: update subprocess_read_status() to not die on EOF

Brandon Williams (107):
      t5550: use write_script to generate post-update hook
      t0061: run_command executes scripts without a #! line
      run-command: prepare command before forking
      run-command: use the async-signal-safe execv instead of execvp
      string-list: add string_list_remove function
      run-command: prepare child environment before forking
      run-command: don't die in child when duping /dev/null
      run-command: eliminate calls to error handling functions in child
      run-command: handle dup2 and close errors in child
      run-command: add note about forking and threading
      run-command: expose is_executable function
      run-command: restrict PATH search to executable files
      submodule: rename add_sha1_to_array()
      submodule: rename free_submodules_sha1s()
      submodule: remove add_oid_to_argv()
      submodule: change string_list changed_submodule_paths
      submodule: improve submodule_has_commits()
      submodule: refactor logic to determine changed submodules
      dir: stop using the index compatibility macros
      dir: convert read_skip_worktree_file_from_index to take an index
      dir: convert directory_exists_in_index to take index
      dir: convert get_dtype to take index
      dir: convert dir_add* to take an index
      dir: convert last_exclude_matching_from_list to take an index
      dir: convert is_excluded_from_list to take an index
      dir: convert add_excludes to take an index
      dir: convert prep_exclude to take an index
      dir: convert is_excluded to take an index
      dir: convert open_cached_dir to take an index
      dir: convert read_directory_recursive to take an index
      dir: convert read_directory to take an index
      dir: convert fill_directory to take an index
      pathspec: provide a more descriptive die message
      submodule: add die_in_unpopulated_submodule function
      pathspec: remove PATHSPEC_STRIP_SUBMODULE_SLASH_EXPENSIVE flag
      ls-files: prevent prune_cache from overeagerly pruning submodules
      pathspec: remove PATHSPEC_STRIP_SUBMODULE_SLASH_CHEAP
      pathspec: convert find_pathspecs_matching_against_index to take an index
      grep: convert to struct object_id
      diff: convert get_stat_data to struct object_id
      diff: convert diff_index_show_file to struct object_id
      diff: convert diff_addremove to struct object_id
      diff: convert run_diff_files to struct object_id
      diff: convert diff_change to struct object_id
      diff: convert fill_filespec to struct object_id
      diff: convert reuse_worktree_file to struct object_id
      diff: finish conversion for prepare_temp_file to struct object_id
      patch-ids: convert to struct object_id
      diff: convert diff_flush_patch_id to struct object_id
      combine-diff: convert diff_tree_combined to struct object_id
      combine-diff: convert find_paths_* to struct object_id
      tree-diff: convert diff_root_tree_sha1 to struct object_id
      notes-merge: convert notes_merge* to struct object_id
      notes-merge: convert merge_from_diffs to struct object_id
      notes-merge: convert find_notes_merge_pair_ps to struct object_id
      notes-merge: convert verify_notes_filepair to struct object_id
      notes-merge: convert write_note_to_worktree to struct object_id
      diff-tree: convert diff_tree_sha1 to struct object_id
      builtin/diff-tree: cleanup references to sha1
      tree-diff: convert try_to_follow_renames to struct object_id
      tree-diff: convert diff_tree_paths to struct object_id
      tree-diff: convert path_appendnew to object_id
      diffcore-rename: use is_empty_blob_oid
      diff: rename diff_fill_sha1_info to diff_fill_oid_info
      convert: convert get_cached_convert_stats_ascii to take an index
      convert: convert crlf_to_git to take an index
      convert: convert convert_to_git_filter_fd to take an index
      convert: convert convert_to_git to take an index
      convert: convert renormalize_buffer to take an index
      tree: convert read_tree to take an index parameter
      ls-files: convert overlay_tree_on_cache to take an index
      ls-files: convert write_eolinfo to take an index
      ls-files: convert show_killed_files to take an index
      ls-files: convert show_other_files to take an index
      ls-files: convert show_ru_info to take an index
      ls-files: convert ce_excluded to take an index
      ls-files: convert prune_cache to take an index
      ls-files: convert show_ce_entry to take an index
      ls-files: convert show_files to take an index
      ls-files: factor out debug info into a function
      ls-files: factor out tag calculation
      config: create config.h
      config: remove git_config_iter
      config: don't include config.h by default
      setup: teach discover_git_directory to respect the commondir
      config: respect commondir
      config: don't implicitly use gitdir or commondir
      setup: don't perform lazy initialization of repository state
      setup: add comment indicating a hack
      environment: remove namespace_len variable
      repository: introduce the repository object
      environment: place key repository state in the_repository
      environment: store worktree in the_repository
      path: create path.h
      path: always pass in commondir to update_common_dir
      path: convert strbuf_git_common_path to take a 'struct repository'
      path: convert do_git_path to take a 'struct repository'
      path: worktree_git_path() should not use file relocation
      path: add repo_git_path and strbuf_repo_git_path
      path: add repo_worktree_path and strbuf_repo_worktree_path
      config: read config from a repository object
      repository: add index_state to struct repo
      submodule-config: store the_submodule_cache in the_repository
      submodule: add repo_read_gitmodules
      submodule: convert is_submodule_initialized to work on a repository
      repository: enable initialization of submodules
      ls-files: use repository object

Brian Malehorn (1):
      interpret-trailers: honor the cut line

Changwoo Ryu (2):
      l10n: ko.po: Update Korean translation
      l10n: ko.po: Update Korean translation

Christian Couder (5):
      p3400: add perf tests for rebasing many changes
      sub-process: correct path to API docs in a comment
      read-cache: use shared perms when writing shared index
      t1301: move modebits() to test-lib-functions.sh
      t1700: make sure split-index respects core.sharedrepository

David Aguilar (1):
      mergetools/meld: improve compatibiilty with Meld on macOS X

David Turner (2):
      Increase core.packedGitLimit
      unpack-trees: preserve index extensions

Dennis Kaarsemaker (1):
      send-email: Net::SMTP::SSL is obsolete, use only when necessary

Dimitriy Ryazantcev (2):
      l10n: ru.po: update Russian translation
      l10n: ru.po: update Russian translation

Eric Wong (2):
      run-command: block signals between fork and execve
      set FD_CLOEXEC properly when O_CLOEXEC is not supported

Hartmut Henkel (1):
      l10n: de.po: various fixes in German translation

Hugues Peccatte (1):
      l10n: fr.po Fix some translations

James Clarke (1):
      pack-bitmap: don't perform unaligned memory access

Jean-Noel Avila (4):
      usability: don't ask questions if no reply is required
      read-tree -m: make error message for merging 0 trees less smart aleck
      git-filter-branch: be more direct in an error message
      l10n: fr.po v2.14.0 rnd 2

Jeff Hostetler (1):
      read-cache: close index.lock in do_write_index

Jeff King (78):
      cache-tree: reject entries with null sha1
      am: fix commit buffer leak in get_commit_info()
      am: simplify allocations in get_commit_info()
      am: shorten ident_split variable name in get_commit_info()
      status: fix missing newline when comment chars are disabled
      pack-objects: disable pack reuse for object-selection options
      t5310: fix "; do" style
      add--interactive: drop diff.indentHeuristic handling
      docs/config: clarify include/includeIf relationship
      docs/config: give a relative includeIf example
      docs/config: avoid the term "expand" for includes
      docs/config: consistify include.path examples
      usage.c: add BUG() function
      setup_git_env: convert die("BUG") to BUG()
      config: complain about --local outside of a git repo
      usage.c: drop set_error_handle()
      pkt-line: annotate packet_writel with LAST_ARG_MUST_BE_NULL
      t5400: avoid concurrent writes into a trace file
      ref-filter: resolve HEAD when parsing %(HEAD) atom
      revision.c: ignore broken tags with ignore_missing_links
      ref-filter: limit traversal to prefix
      handle_revision_arg: reset "dotdot" consistently
      handle_revision_arg: simplify commit reference lookups
      handle_revision_arg: stop using "dotdot" as a generic pointer
      handle_revision_arg: hoist ".." check out of range parsing
      handle_revision_arg: add handle_dotdot() helper
      sha1_name: consistently refer to object_context as "oc"
      get_sha1_with_context: always initialize oc->symlink_path
      get_sha1_with_context: dynamically allocate oc->path
      t4063: add tests of direct blob diffs
      handle_revision_arg: record modes for "a..b" endpoints
      handle_revision_arg: record paths for pending objects
      diff: pass whole pending entry in blobinfo
      diff: use the word "path" instead of "name" for blobs
      diff: use pending "path" if it is available
      diff: use blob path for blob/file diffs
      connect.c: fix leak in parse_one_symref_info()
      t4208: add check for ":/" without matching file
      check_filename(): refactor ":/" handling
      check_filename(): use skip_prefix
      check_filename(): handle ":^" path magic
      verify_filename(): treat ":(magic)" as a pathspec
      verify_filename(): flip order of checks
      am: handle "-h" argument earlier
      credential: handle invalid arguments earlier
      upload-archive: handle "-h" option early
      remote-{ext,fd}: print usage message on invalid arguments
      submodule--helper: show usage for "-h"
      remote: drop free_refspecs() function
      docs/config: mention protocol implications of url.insteadOf
      version: convert to parse-options
      git: add hidden --list-builtins option
      t0012: test "-h" with builtins
      t5313: make extended-table test more deterministic
      sha1dc: ignore indent-with-non-tab whitespace violations
      add: warn when adding an embedded repository
      t: move "git add submodule" into test blocks
      diff-highlight: split code into module
      configure.ac: loosen FREAD_READS_DIRECTORIES test program
      t0006: check --date=format zone offsets
      date: use localtime() for "-local" time formats
      docs: update 64-bit core.packedGitLimit default
      add--interactive: handle EOF in prompt_yesno
      add--interactive: quote commentChar regex
      reflog-walk: skip over double-null oid due to HEAD rename
      reflog-walk: duplicate strings in complete_reflogs list
      reflog-walk: don't free reflogs added to cache
      reflog-walk: include all fields when freeing complete_reflogs
      branch: only perform HEAD check for local branches
      branch: use BRANCH_COLOR_LOCAL in ref-filter format
      branch: set remote color in ref-filter branch immediately
      test-lib: set ASAN_OPTIONS variable before we run git
      test-lib: turn on ASan abort_on_error by default
      Makefile: add helper for compiling with -fsanitize
      Makefile: turn off -fomit-frame-pointer with sanitizers
      Makefile: disable unaligned loads with UBSan
      gc: run pre-detach operations under lock
      t: handle EOF in test_copy_bytes()

Jeff Smith (29):
      blame: remove unneeded dependency on blob.h
      blame: move textconv_object with related functions
      blame: remove unused parameters
      blame: rename origin structure to blame_origin
      blame: rename scoreboard structure to blame_scoreboard
      blame: rename origin-related functions
      blame: rename coalesce function
      blame: rename ent_score function
      blame: rename nth_line function
      blame: move stat counters to scoreboard
      blame: move copy/move thresholds to scoreboard
      blame: move contents_from to scoreboard
      blame: move reverse flag to scoreboard
      blame: move show_root flag to scoreboard
      blame: move xdl_opts flags to scoreboard
      blame: move no_whole_file_rename flag to scoreboard
      blame: make sanity_check use a callback in scoreboard
      blame: move progress updates to a scoreboard callback
      blame: wrap blame_sort and compare_blame_final
      blame: rework methods that determine 'final' commit
      blame: create scoreboard init function
      blame: create scoreboard setup function
      blame: create entry prepend function
      blame: move core structures to header
      blame: move origin-related methods to libgit
      blame: move fake-commit-related methods to libgit
      blame: move scoreboard-related methods to libgit
      blame: move scoreboard setup to libgit
      blame: move entry prepend to libgit

Jiang Xin (4):
      l10n: git.pot: v2.14.0 round 1 (34 new, 23 removed)
      l10n: git.pot: v2.14.0 round 2 (9 new, 2 removed)
      l10n: zh_CN: for git v2.14.0 l10n round 2
      l10n: zh_CN: review for git v2.14.0 l10n

Johannes Schindelin (50):
      ref-filter: avoid using `unsigned long` for catch-all data type
      t0006 & t5000: prepare for 64-bit timestamps
      t0006 & t5000: skip "far in the future" test when time_t is too limited
      parse_timestamp(): specify explicitly where we parse timestamps
      PRItime: introduce a new "printf format" for timestamps
      timestamp_t: a new data type for timestamps
      date.c: abort if the system time cannot handle one of our timestamps
      use uintmax_t for timestamps
      mingw: avoid memory leak when splitting PATH
      winansi: avoid use of uninitialized value
      winansi: avoid buffer overrun
      add_commit_patch_id(): avoid allocating memory unnecessarily
      git_config_rename_section_in_file(): avoid resource leak
      get_mail_commit_oid(): avoid resource leak
      difftool: address a couple of resource/memory leaks
      status: close file descriptor after reading git-rebase-todo
      mailinfo & mailsplit: check for EOF while parsing
      cat-file: fix memory leak
      checkout: fix memory leak
      split_commit_in_progress(): simplify & fix memory leak
      setup_bare_git_dir(): help static analysis
      setup_discovered_git_dir(): plug memory leak
      pack-redundant: plug memory leak
      mktree: plug memory leaks reported by Coverity
      fast-export: avoid leaking memory in handle_tag()
      receive-pack: plug memory leak in update()
      line-log: avoid memory leak
      shallow: avoid memory leak
      add_reflog_for_walk: avoid memory leak
      remote: plug memory leak in match_explicit()
      name-rev: avoid leaking memory in the `deref` case
      show_worktree(): plug memory leak
      submodule_uses_worktrees(): plug memory leak
      Fix build with core.autocrlf=true
      git-new-workdir: mark script as LF-only
      completion: mark bash script as LF-only
      t3901: move supporting files into t/t3901/
      Fix the remaining tests that failed with core.autocrlf=true
      t4051: mark supporting files as requiring LF-only line endings
      mingw: verify that paths are not mistaken for remote nicknames
      discover_git_directory(): avoid setting invalid git_dir
      config: report correct line number upon error
      help: use early config when autocorrecting aliases
      t1308: relax the test verifying that empty alias values are disallowed
      t7006: demonstrate a problem with aliases in subdirectories
      alias: use the early config machinery to expand aliases
      sequencer: print autostash messages to stderr
      t5534: fix misleading grep invocation
      t1300: demonstrate that CamelCased aliases regressed
      alias: compare alias name *case-insensitively*

Johannes Sixt (3):
      mingw.h: permit arguments with side effects for is_dir_sep
      Windows: do not treat a path with backslashes as a remote's nick name
      mingw_fopen: report ENOENT for invalid file names

Jonathan Nieder (4):
      credential doc: make multiple-helper behavior more prominent
      clone: handle empty config values in -c
      send-email: Net::SMTP::starttls was introduced in v2.34
      pre-rebase hook: capture documentation in a <<here document

Jonathan Tan (14):
      sequencer: add newline before adding footers
      docs: correct receive.advertisePushOptions default
      receive-pack: verify push options in cert
      fetch-pack: always allow fetching of literal SHA1s
      send-email: support validate hook
      send-email: check for repo before invoking hook
      sha1_file: teach packed_object_info about typename
      sha1_file: rename LOOKUP_UNKNOWN_OBJECT
      sha1_file: rename LOOKUP_REPLACE_OBJECT
      sha1_file: move delta base cache code up
      sha1_file: refactor read_object
      sha1_file: teach sha1_object_info_extended more flags
      sha1_file: do not access pack if unneeded
      sha1_file: refactor has_sha1_file_with_flags

Jordi Mas (3):
      l10n: Fixes to Catalan translation
      l10n: Update Catalan translation
      l10n: Update Catalan translation

Junio C Hamano (54):
      name-rev: refactor logic to see if a new candidate is a better name
      name-rev: favor describing with tags and use committer date to tiebreak
      test-lib.sh: do not barf under --debug at the end of the test
      test-lib: retire $remove_trash variable
      repack: accept --threads=<n> and pass it down to pack-objects
      apply.c: fix whitespace-only mismerge
      checkout: fix memory leak
      doc: replace more gmane links
      read-tree: "read-tree -m --empty" does not make sense
      Start post 2.13 cycle
      test: allow skipping the remainder
      name-rev: change a "long" variable to timestamp_t
      Second batch for 2.14
      config.mak.uname: set FREAD_READS_DIRECTORIES for Darwin, too
      Third batch for 2.14
      compat-util: is_missing_file_error()
      treewide: use is_missing_file_error() where ENOENT and ENOTDIR are checked
      Fourth batch for 2.14
      diff-tree: update stale in-code comments
      Fifth batch for 2.14
      Sixth batch for 2.14
      Prepare for 2.13.1; more topics to follow
      Git 2.13.1
      Seventh batch for 2.14
      diff- and log- family: handle "git cmd -h" early
      Prepare for 2.13.2
      Eighth batch for 2.14
      Ninth batch for 2.14
      Tenth batch for 2.14
      t3420: fix under GETTEXT_POISON build
      Revert "split-index: add and use unshare_split_index()"
      Eleventh batch for 2.14
      Git 2.13.2
      Twelfth batch for 2.14
      t1450: use egrep for regexp "alternation"
      submodule--helper: do not call utf8_fprintf() unnecessarily
      Thirteenth batch for 2.14
      sha1collisiondetection: automatically enable when submodule is populated
      Fourteenth batch for 2.14
      Fifteenth batch for 2.14
      Sixteenth batch for 2.14
      Prepare for 2.13.3
      Hopefully the last batch before -rc0
      Git 2.13.3
      Git 2.14-rc0
      A few more topics before 2.14-rc1
      Makefile: help gettext tools to cope with our custom PRItime format
      A few more topics while waiting for the po/PRItime resolution
      Hopefully the final last-minute fix before -rc1
      fixes from 'master' for 2.13.4
      Git 2.14-rc1
      Preparation for 2.13.4 continues
      Git 2.13.4
      Git 2.14

Kaartic Sivaraam (9):
      t7508: fix a broken indentation
      status: contextually notify user about an initial commit
      Documentation/git-submodule: cleanup "add" section
      commit-template: remove outdated notice about explicit paths
      commit-template: distinguish status information unconditionally
      builtin/commit.c: fix a typo in the comment
      doc: correct a mistake in an illustration
      doc: camelCase the i18n config variables to improve readability
      doc: reformat the paragraph containing the 'cut-line'

Kyle J. McKay (1):
      t5100: add some more mailinfo tests

Kyle Meyer (1):
      config.txt: add an entry for log.showSignature

Lars Schneider (9):
      travis-ci: build documentation with AsciiDoc and Asciidoctor
      travis-ci: parallelize documentation build
      travis-ci: unset compiler for jobs that do not need one
      travis-ci: check AsciiDoc/AsciiDoctor stderr output
      travis-ci: handle Git for Windows CI status "failed" explicitly
      travis-ci: retry if Git for Windows CI returns HTTP error 502 or 503
      travis-ci: setup "prove cache" in "script" step
      travis-ci: add job to run tests with GETTEXT_POISON
      Configure Git contribution guidelines for github.com

Liam Beguin (3):
      stash: update documentation to use 'stash entry'
      status: add optional stash count information
      glossary: define 'stash entry'

Louis (1):
      l10n: fr.po Fix typo

Marc Branchaud (3):
      diff: make the indent heuristic part of diff's basic configuration
      diff: have the diff-* builtins configure diff before initializing revisions
      auto-correct: tweak phrasing

Michael Haggerty (26):
      t3600: clean up permissions test properly
      refs.h: clarify docstring for the ref_transaction_update()-related fns
      ref_iterator_begin_fn(): fix docstring
      files-backend: use `die("BUG: ...")`, not `die("internal error: ...")`
      prefix_ref_iterator: don't trim too much
      refs_ref_iterator_begin(): don't check prefixes redundantly
      refs: use `size_t` indexes when iterating over ref transaction updates
      ref_store: take a `msg` parameter when deleting references
      lockfile: add a new method, is_lock_file_locked()
      files-backend: move `lock` member to `files_ref_store`
      files_ref_store: put the packed files lock directly in this struct
      files_transaction_cleanup(): new helper function
      ref_transaction_commit(): check for valid `transaction->state`
      ref_transaction_prepare(): new optional step for reference updates
      ref_update_reject_duplicates(): expose function to whole refs module
      ref_update_reject_duplicates(): use `size_t` rather than `int`
      ref_update_reject_duplicates(): add a sanity check
      should_pack_ref(): new function, extracted from `files_pack_refs()`
      get_packed_ref_cache(): assume "packed-refs" won't change while locked
      read_packed_refs(): do more of the work of reading packed refs
      read_packed_refs(): report unexpected fopen() failures
      refs_ref_iterator_begin(): handle `GIT_REF_PARANOIA`
      create_ref_entry(): remove `check_name` option
      cache_ref_iterator_begin(): avoid priming unneeded directories
      lock_packed_refs(): fix cache validity check
      for_each_bisect_ref(): don't trim refnames

Miguel Torroja (3):
      git-p4: git-p4 tests with p4 triggers
      git-p4: parse marshal output "p4 -G" in p4 changes
      git-p4: filter for {'code':'info'} in p4CmdList

Mike Hommey (1):
      fast-import: increase the default pack depth to 50

Nguyễn Thái Ngọc Duy (16):
      environment.c: fix potential segfault by get_git_common_dir()
      refs.c: make submodule ref store hashmap generic
      refs: add REFS_STORE_ALL_CAPS
      refs: introduce get_worktree_ref_store()
      worktree.c: kill parse_ref() in favor of refs_resolve_ref_unsafe()
      refs: kill set_worktree_head_symref()
      split-index: add and use unshare_split_index()
      use xfopen() in more places
      clone: use xfopen() instead of fopen()
      config.mak.uname: set FREAD_READS_DIRECTORIES for Linux and FreeBSD
      wrapper.c: add and use warn_on_fopen_errors()
      wrapper.c: add and use fopen_or_warn()
      wrapper.c: make warn_on_inaccessible() static
      print errno when reporting a system call error
      rerere.c: move error_errno() closer to the source system call
      log: fix memory leak in open_next_file()

Patrick Steinhardt (1):
      git-stash: fix pushing stash with pathspec from subdir

Peter Krefting (1):
      l10n: sv.po: Update Swedish translation (3206t0f0u)

Phillip Wood (10):
      rebase -i: fix reflog message
      rebase -i: silence stash apply
      rebase -i: add missing newline to end of message
      rebase -i: add test for reflog message
      rebase: add regression tests for console output
      rebase: add more regression tests for console output
      add -i: move unquote_path() to Git.pm
      Git::unquote_path(): handle '\a'
      Git::unquote_path(): throw an exception on bad path
      t9700: add tests for Git::unquote_path()

Prathamesh Chavan (1):
      dir: create function count_slashes()

Ralf Thielow (2):
      l10n: de.po: fix typo
      l10n: de.po: update German translation

Ramsay Jones (5):
      t7400: add !CYGWIN prerequisite to 'add with \\ in path'
      archive-tar: fix a sparse 'constant too large' warning
      usage: add NORETURN to BUG() function definitions
      git_fopen: fix a sparse 'not declared' warning
      config.mak.uname: set FREAD_READS_DIRECTORIES for cygwin

René Scharfe (32):
      archive-zip: add tests for big ZIP archives
      archive-zip: use strbuf for ZIP directory
      archive-zip: write ZIP dir entry directly to strbuf
      archive-zip: support archives bigger than 4GB
      archive-zip: support files bigger than 4GB
      archive-zip: set version field for big files correctly
      t5004: require 64-bit support for big ZIP tests
      checkout: check return value of resolve_refdup before using hash
      am: check return value of resolve_refdup before using hash
      p0004: simplify calls of test-lazy-init-name-hash
      p0004: avoid using pipes
      p0004: use test_perf
      p0004: don't abort if multi-threaded is too slow
      p0004: don't error out if test repo is too small
      mingw: simplify PATH handling
      pretty: recalculate duplicate short hashes
      strbuf: let strbuf_addftime handle %z and %Z itself
      sha1_name: cache readdir(3) results in find_short_object_filename()
      p4205: add perf test script for pretty log formats
      sha1_file: let for_each_file_in_obj_subdir() handle subdir names
      sha1_file: guard against invalid loose subdirectory numbers
      apply: check git diffs for missing old filenames
      apply: check git diffs for invalid file modes
      apply: check git diffs for mutually exclusive header lines
      coccinelle: polish FREE_AND_NULL rules
      apply: use starts_with() in gitdiff_verify_name()
      apply: use strcmp(3) for comparing strings in gitdiff_verify_name()
      urlmatch: use hex2chr() in append_normalized_escapes()
      progress: show overall rate in last update
      wt-status: use separate variable for result of shorten_unambiguous_ref
      use DIV_ROUND_UP
      Makefile: allow combining UBSan with other sanitizers

Rikard Falkeborn (7):
      completion: add completions for git config commit
      completion: add git config gc completions
      completion: add git config core completions
      completion: add git config am.threeWay completion
      completion: add git config advice completions
      completion: add git config credential completions
      completion: add git config credentialCache.ignoreSIGHUP

SZEDER Gábor (9):
      test-lib: abort when can't remove trash directory
      docs/config.txt: fix indefinite article in core.fileMode description
      revision.h: turn rev_info.early_output back into an unsigned int
      revision.c: stricter parsing of '--no-{min,max}-parents'
      revision.c: stricter parsing of '--early-output'
      revision.c: use skip_prefix() in handle_revision_opt()
      revision.c: use skip_prefix() in handle_revision_pseudo_opt()
      docs/pretty-formats: stress that %- removes all preceding line-feeds
      blame: fix memory corruption scrambling revision name in error message

Sahil Dua (2):
      branch test: fix invalid config key access
      t3200: add test for single parameter passed to -m option

Samuel Lijin (6):
      t7300: clean -d should skip dirs with ignored files
      t7061: status --ignored should search untracked dirs
      dir: recurse into untracked dirs for ignored files
      dir: hide untracked contents of untracked dirs
      dir: expose cmp_name() and check_contains()
      clean: teach clean -d to preserve ignored paths

Stefan Beller (30):
      entry.c: submodule recursing: respect force flag correctly
      submodule.c: uninitialized submodules are ignored in recursive commands
      submodule.c: submodule_move_head works with broken submodules
      builtin/reset: add --recurse-submodules switch
      submodule_move_head: reuse child_process structure for futher commands
      submodule: avoid auto-discovery in new working tree manipulator code
      submodule: properly recurse for read-tree and checkout
      diff: recurse into nested submodules for inline diff
      diff: enable indent heuristic by default
      t5545: enhance test coverage when no http server is installed
      t5531: fix test description
      submodule recursing: do not write a config variable twice
      submodule test invocation: only pass additional arguments
      reset/checkout/read-tree: unify config callback for submodule recursion
      submodule loading: separate code path for .gitmodules and config overlay
      Introduce 'submodule.recurse' option for worktree manipulators
      builtin/grep.c: respect 'submodule.recurse' option
      builtin/push.c: respect 'submodule.recurse' option
      builtin/fetch.c: respect 'submodule.recurse' option
      Documentation/git-rm: correct submodule description
      t4005: modernize style and drop hard coded sha1
      submodules: overhaul documentation
      builtin/fetch: factor submodule recurse parsing out to submodule config
      builtin/fetch: parse recurse-submodules-default at default options parsing
      pull: optionally rebase submodules (remote submodule changes only)
      builtin/fetch cleanup: always set default value for submodule recursing
      merge-recursive: use DIFF_XDL_SET macro
      hashmap.h: compare function has access to a data field
      patch-ids.c: use hashmap correctly
      hashmap: migrate documentation from Documentation/technical into header

Stephen Kent (1):
      status: add color config slots for branch info in "--short --branch"

Sven Strickroth (1):
      doc: use https links to Wikipedia to avoid http redirects

Sylvestre Ledru (1):
      l10n: fr.po Fix some french typos

Thomas Gummerer (1):
      completion: add git stash push

Torsten Bögershausen (2):
      t0027: tests are not expensive; remove t0025
      cygwin: allow pushing to UNC paths

Trần Ngọc Quân (2):
      l10n: vi.po(3206t): Update Vietnamese translation
      l10n: vi.po (3213t): Updated 9 new strings

Tyler Brazier (1):
      pull: ff --rebase --autostash works in dirty repo

Ville Skyttä (1):
      Spelling fixes

brian m. carlson (61):
      fetch-pack: convert to struct object_id
      Clean up outstanding object_id transforms.
      Convert struct cache_tree to use struct object_id
      builtin/name-rev: convert to struct object_id
      builtin/prune: convert to struct object_id
      bundle: convert to struct object_id
      branch: convert to struct object_id
      builtin/blame: convert static function to struct object_id
      builtin/rev-parse: convert to struct object_id
      fast-import: convert internal structs to struct object_id
      fast-import: convert to struct object_id
      submodule: convert merge_submodule to use struct object_id
      notes-cache: convert to struct object_id
      parse-options-cb: convert to struct object_id
      reflog_expire: convert to struct object_id
      builtin/verify-commit: convert to struct object_id
      tag: convert parse_tag_buffer to struct object_id
      http-push: convert some static functions to struct object_id
      notes-utils: convert internals to struct object_id
      revision: convert prepare_show_merge to struct object_id
      shallow: convert shallow registration functions to object_id
      sequencer: convert some functions to struct object_id
      builtin/tag: convert to struct object_id
      Convert remaining callers of lookup_commit_reference* to object_id
      Convert lookup_commit* to struct object_id
      pack: convert struct pack_idx_entry to struct object_id
      builtin/unpack-objects: convert to struct object_id
      Convert remaining callers of lookup_blob to object_id
      Convert lookup_blob to struct object_id
      tree: convert read_tree_1 to use struct object_id internally
      builtin/reflog: convert tree_is_complete to take struct object_id
      Convert lookup_tree to struct object_id
      log-tree: convert to struct object_id
      Convert lookup_tag to struct object_id
      Convert the verify_pack callback to struct object_id
      Convert struct ref_array_item to struct object_id
      ref-filter: convert some static functions to struct object_id
      refs: convert struct ref_update to use struct object_id
      refs/files-backend: convert many internals to struct object_id
      http-push: convert process_ls_object and descendants to object_id
      revision: rename add_pending_sha1 to add_pending_oid
      revision: convert remaining parse_object callers to object_id
      upload-pack: convert remaining parse_object callers to object_id
      sha1_name: convert internals of peel_onion to object_id
      builtin/read-tree: convert to struct object_id
      builtin/ls-files: convert overlay_tree_on_cache to object_id
      sequencer: convert fast_forward_to to struct object_id
      merge: convert checkout_fast_forward to struct object_id
      builtin/ls-tree: convert to struct object_id
      diff-lib: convert do_diff_cache to struct object_id
      sequencer: convert do_recursive_merge to struct object_id
      tree: convert parse_tree_indirect to struct object_id
      object: convert parse_object* to take struct object_id
      builtin/log: honor log.decorate
      notes: convert internal structures to struct object_id
      notes: convert internal parts to struct object_id
      notes: convert for_each_note to struct object_id
      notes: make get_note return pointer to struct object_id
      notes: convert format_display_notes to struct object_id
      builtin/notes: convert to struct object_id
      notes: convert some accessor functions to struct object_id

xiaoqiang zhao (1):
      send-email: --batch-size to work around some SMTP server limit

Ævar Arnfjörð Bjarmason (77):
      tests: change "cd ... && git fetch" to "cd &&\n\tgit fetch"
      clone: add a --no-tags option to clone without tags
      tests: rename a test having to do with shallow submodules
      config.mak.uname: set NO_REGEX=NeedsStartEnd on AIX
      doc: replace a couple of broken gmane links
      tests: fix tests broken under GETTEXT_POISON=YesPlease
      perf: add function to setup a fresh test repo
      perf: add test showing exponential growth in path globbing
      config: match both symlink & realpath versions in IncludeIf.gitdir:*
      Makefile & configure: reword inaccurate comment about PCRE
      grep & rev-list doc: stop promising libpcre for --perl-regexp
      test-lib: rename the LIBPCRE prerequisite to PCRE
      log: add exhaustive tests for pattern style options & config
      log: make --regexp-ignore-case work with --perl-regexp
      grep: add a test asserting that --perl-regexp dies when !PCRE
      grep: add a test for backreferences in PCRE patterns
      grep: change non-ASCII -i test to stop using --debug
      grep: add tests for --threads=N and grep.threads
      grep: amend submodule recursion test for regex engine testing
      grep: add tests for grep pattern types being passed to submodules
      grep: add a test helper function for less verbose -f \0 tests
      grep: prepare for testing binary regexes containing rx metacharacters
      grep: add tests to fix blind spots with \0 patterns
      perf: add a GIT_PERF_MAKE_COMMAND for when *_MAKE_OPTS won't do
      perf: emit progress output when unpacking & building
      sha1dc: update from upstream
      tag: duplicate mention of --contains should mention --no-contains
      perf: add a comparison test of grep regex engines
      perf: add a comparison test of grep regex engines with -F
      perf: add a comparison test of log --grep regex engines
      perf: add a comparison test of log --grep regex engines with -F
      grep: catch a missing enum in switch statement
      grep: remove redundant regflags assignments
      grep: factor test for \0 in grep patterns into a function
      grep: change the internal PCRE macro names to be PCRE1
      grep: change internal *pcre* variable & function names to be *pcre1*
      grep: move is_fixed() earlier to avoid forward declaration
      test-lib: add a PTHREADS prerequisite
      pack-objects & index-pack: add test for --threads warning
      pack-objects: fix buggy warning about threads
      grep: given --threads with NO_PTHREADS=YesPlease, warn
      grep: assert that threading is enabled when calling grep_{lock,unlock}
      grep: don't redundantly compile throwaway patterns under threading
      grep: skip pthreads overhead when using one thread
      log: add -P as a synonym for --perl-regexp
      grep: add support for the PCRE v1 JIT API
      grep: un-break building with PCRE < 8.32
      grep: un-break building with PCRE < 8.20
      wildmatch test: remove redundant duplicate test
      C style: use standard style for "TRANSLATORS" comments
      grep: un-break building with PCRE >= 8.32 without --enable-jit
      grep: add support for PCRE v2
      perf: work around the tested repo having an index.lock
      sha1dc: update from upstream
      git-compat-util: add a FREE_AND_NULL() wrapper around free(ptr); ptr = NULL
      wildmatch test: cover a blind spot in "/" matching
      coccinelle: add a rule to make "type" code use FREE_AND_NULL()
      coccinelle: make use of the "type" FREE_AND_NULL() rule
      coccinelle: add a rule to make "expression" code use FREE_AND_NULL()
      coccinelle: make use of the "expression" FREE_AND_NULL() rule
      *.[ch] refactoring: make use of the FREE_AND_NULL() macro
      grep: fix erroneously copy/pasted variable in check/assert pattern
      die(): stop hiding errors due to overzealous recursion guard
      wildmatch: remove unused wildopts parameter
      strbuf.h comment: discuss strbuf_addftime() arguments in order
      grep: remove redundant double assignment to 0
      grep: adjust a redundant grep pattern type assignment
      grep: remove redundant "fixed" field re-assignment to 0
      grep: remove redundant and verbose re-assignments to 0
      grep: remove regflags from the public grep_opt API
      grep: remove redundant REG_NEWLINE when compiling fixed regex
      strbuf: change an always NULL/"" strbuf_addftime() param to bool
      sha1dc: update from upstream
      sha1dc: optionally use sha1collisiondetection as a submodule
      RelNotes: mention "log: add -P as a synonym for --perl-regexp"
      RelNotes: mention "log: make --regexp-ignore-case work with --perl-regexp"
      RelNotes: mention "sha1dc: optionally use sha1collisiondetection as a submodule"

Štěpán Němec (1):
      doc: git-reset: fix a trivial typo


^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.13.0
@ 2017-05-10  0:03  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2017-05-10  0:03 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

The latest feature release Git v2.13.0 is now available at the
usual places.  It is comprised of 729 non-merge commits since
v2.12.0, contributed by 65 people, 15 of which are new faces.

This release also contains the security patch in v2.12.3 and
others to fix CVE-2017-8386.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.13.0'
tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.12.0 are as follows.
Welcome to the Git development community!

  Allan Xavier, Andreas Heiduk, Devin J. Pohly, Devin Lehmacher,
  Hiroshi Shirosaki, Johan Hovold, Maxim Moseychuk, Mostyn
  Bramley-Moore, Prathamesh Chavan, Quentin Pradet, René Genz,
  Segev Finer, Sergey Ryazanov, Stephen Hicks, and Valery Tolstov.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alexander Shopov, Alex Henrie,
  Brandon Williams, brian m. carlson, Christian Couder, Cornelius
  Weig, David Aguilar, David Turner, Eric Wong, Giuseppe Bilotta,
  Jacob Keller, Jean-Noel Avila, Jeff Hostetler, Jeff King,
  Jiang Xin, Johannes Schindelin, Jonathan Nieder, Jonathan Tan,
  Jordi Mas, Junio C Hamano, Karthik Nayak, Kevin Willford,
  Kyle Meyer, Lars Schneider, Linus Torvalds, Luke Diamand, Matt
  McCutchen, Michael Haggerty, Michael J Gruber, Michael Rappazzo,
  Mike Hommey, Nguyễn Thái Ngọc Duy, Patrick Steinhardt,
  Peter Krefting, Ralf Thielow, Ramsay Jones, Ray Chen, René
  Scharfe, Ross Lagerwall, Santiago Torres, Sebastian Schuberth,
  Simon Ruderich, Stefan Beller, SZEDER Gábor, Thomas Gummerer,
  Torsten Bögershausen, Trần Ngọc Quân, Vasco Almeida,
  and Vegard Nossum.

----------------------------------------------------------------

Git 2.13 Release Notes
======================

Backward compatibility notes.

 * Use of an empty string as a pathspec element that is used for
   'everything matches' is still warned and Git asks users to use a
   more explicit '.' for that instead.  The hope is that existing
   users will not mind this change, and eventually the warning can be
   turned into a hard error, upgrading the deprecation into removal of
   this (mis)feature.  That is not scheduled to happen in the upcoming
   release (yet).

 * The historical argument order "git merge <msg> HEAD <commit>..."
   has been deprecated for quite some time, and is now removed.

 * The default location "~/.git-credential-cache/socket" for the
   socket used to communicate with the credential-cache daemon has
   been moved to "~/.cache/git/credential/socket".

 * Git now avoids blindly falling back to ".git" when the setup
   sequence said we are _not_ in Git repository.  A corner case that
   happens to work right now may be broken by a call to die("BUG").
   We've tried hard to locate such cases and fixed them, but there
   might still be cases that need to be addressed--bug reports are
   greatly appreciated.


Updates since v2.12
-------------------

UI, Workflows & Features

 * "git describe" and "git name-rev" have been taught to take more
   than one refname patterns to restrict the set of refs to base their
   naming output on, and also learned to take negative patterns to
   name refs not to be used for naming via their "--exclude" option.

 * Deletion of a branch "foo/bar" could remove .git/refs/heads/foo
   once there no longer is any other branch whose name begins with
   "foo/", but we didn't do so so far.  Now we do.

 * When "git merge" detects a path that is renamed in one history
   while the other history deleted (or modified) it, it now reports
   both paths to help the user understand what is going on in the two
   histories being merged.

 * The <url> part in "http.<url>.<variable>" configuration variable
   can now be spelled with '*' that serves as wildcard.
   E.g. "http.https://*.example.com.proxy" can be used to specify the
   proxy used for https://a.example.com, https://b.example.com, etc.,
   i.e. any host in the example.com domain.

 * "git tag" did not leave useful message when adding a new entry to
   reflog; this was left unnoticed for a long time because refs/tags/*
   doesn't keep reflog by default.

 * The "negative" pathspec feature was somewhat more cumbersome to use
   than necessary in that its short-hand used "!" which needed to be
   escaped from shells, and it required "exclude from what?" specified.

 * The command line options for ssh invocation needs to be tweaked for
   some implementations of SSH (e.g. PuTTY plink wants "-P <port>"
   while OpenSSH wants "-p <port>" to specify port to connect to), and
   the variant was guessed when GIT_SSH environment variable is used
   to specify it.  The logic to guess now applies to the command
   specified by the newer GIT_SSH_COMMAND and also core.sshcommand
   configuration variable, and comes with an escape hatch for users to
   deal with misdetected cases.

 * The "--git-path", "--git-common-dir", and "--shared-index-path"
   options of "git rev-parse" did not produce usable output.  They are
   now updated to show the path to the correct file, relative to where
   the caller is.

 * "git diff -W" has been taught to handle the case where a new
   function is added at the end of the file better.

 * "git update-ref -d" and other operations to delete references did
   not leave any entry in HEAD's reflog when the reference being
   deleted was the current branch.  This is not a problem in practice
   because you do not want to delete the branch you are currently on,
   but caused renaming of the current branch to something else not to
   be logged in a useful way.

 * "Cc:" on the trailer part does not have to conform to RFC strictly,
   unlike in the e-mail header.  "git send-email" has been updated to
   ignore anything after '>' when picking addresses, to allow non-address
   cruft like " # stable 4.4" after the address.

 * When "git submodule init" decides that the submodule in the working
   tree is its upstream, it now gives a warning as it is not a very
   common setup.

 * "git stash push" takes a pathspec so that the local changes can be
   stashed away only partially.

 * Documentation for "git ls-files" did not refer to core.quotePath.

 * The experimental "split index" feature has gained a few
   configuration variables to make it easier to use.

 * From a working tree of a repository, a new option of "rev-parse"
   lets you ask if the repository is used as a submodule of another
   project, and where the root level of the working tree of that
   project (i.e. your superproject) is.

 * The pathspec mechanism learned to further limit the paths that
   match the pattern to those that have specified attributes attached
   via the gitattributes mechanism.

 * Our source code has used the SHA1_HEADER cpp macro after "#include"
   in the C code to switch among the SHA-1 implementations. Instead,
   list the exact header file names and switch among implementations
   using "#ifdef BLK_SHA1/#include "block-sha1/sha1.h"/.../#endif";
   this helps some IDE tools.

 * The start-up sequence of "git" needs to figure out some configured
   settings before it finds and set itself up in the location of the
   repository and was quite messy due to its "chicken-and-egg" nature.
   The code has been restructured.

 * The command line prompt (in contrib/) learned a new 'tag' style
   that can be specified with GIT_PS1_DESCRIBE_STYLE, to describe a
   detached HEAD with "git describe --tags".

 * The configuration file learned a new "includeIf.<condition>.path"
   that includes the contents of the given path only when the
   condition holds.  This allows you to say "include this work-related
   bit only in the repositories under my ~/work/ directory".

 * Recent update to "rebase -i" started showing a message that is not
   a warning with "warning:" prefix by mistake.  This has been fixed.

 * Recently we started passing the "--push-options" through the
   external remote helper interface; now the "smart HTTP" remote
   helper understands what to do with the passed information.

 * "git describe --dirty" dies when it cannot be determined if the
   state in the working tree matches that of HEAD (e.g. broken
   repository or broken submodule).  The command learned a new option
   "git describe --broken" to give "$name-broken" (where $name is the
   description of HEAD) in such a case.

 * "git checkout" is taught the "--recurse-submodules" option.

 * Recent enhancement to "git stash push" command to support pathspec
   to allow only a subset of working tree changes to be stashed away
   was found to be too chatty and exposed the internal implementation
   detail (e.g. when it uses reset to match the index to HEAD before
   doing other things, output from reset seeped out).  These, and
   other chattyness has been fixed.

 * "git merge <message> HEAD <commit>" syntax that has been deprecated
   since October 2007 has been removed.

 * The refs completion for large number of refs has been sped up,
   partly by giving up disambiguating ambiguous refs and partly by
   eliminating most of the shell processing between 'git for-each-ref'
   and 'ls-remote' and Bash's completion facility.

 * On many keyboards, typing "@{" involves holding down SHIFT key and
   one can easily end up with "@{Up..." when typing "@{upstream}".  As
   the upstream/push keywords do not appear anywhere else in the syntax,
   we can safely accept them case insensitively without introducing
   ambiguity or confusion to solve this.

 * "git tag/branch/for-each-ref" family of commands long allowed to
   filter the refs by "--contains X" (show only the refs that are
   descendants of X), "--merged X" (show only the refs that are
   ancestors of X), "--no-merged X" (show only the refs that are not
   ancestors of X).  One curious omission, "--no-contains X" (show
   only the refs that are not descendants of X) has been added to
   them.

 * The default behaviour of "git log" in an interactive session has
   been changed to enable "--decorate".

 * The output from "git status --short" has been extended to show
   various kinds of dirtyness in submodules differently; instead of to
   "M" for modified, 'm' and '?' can be shown to signal changes only
   to the working tree of the submodule but not the commit that is
   checked out.

 * Allow the http.postbuffer configuration variable to be set to a
   size that can be expressed in size_t, which can be larger than
   ulong on some platforms.

 * "git rebase" learns "--signoff" option.

 * The completion script (in contrib/) learned to complete "git push
   --delete b<TAB>" to complete branch name to be deleted.

 * "git worktree add --lock" allows to lock a worktree immediately
   after it's created. This helps prevent a race between "git worktree
   add; git worktree lock" and "git worktree prune".

 * Completion for "git checkout <branch>" that auto-creates the branch
   out of a remote tracking branch can now be disabled, as this
   completion often gets in the way when completing to checkout an
   existing local branch that happens to share the same prefix with
   bunch of remote tracking branches.


Performance, Internal Implementation, Development Support etc.

 * The code to list branches in "git branch" has been consolidated
   with the more generic ref-filter API.

 * Resource usage while enumerating refs from alternate object store
   has been optimized to help receiving end of "push" that hosts a
   repository with many "forks".

 * The gitattributes machinery is being taught to work better in a
   multi-threaded environment.

 * "git rebase -i" starts using the recently updated "sequencer" code.

 * Code and design clean-up for the refs API.

 * The preload-index code has been taught not to bother with the index
   entries that are paths that are not checked out by "sparse checkout".

 * Some warning() messages from "git clean" were updated to show the
   errno from failed system calls.

 * The "parse_config_key()" API function has been cleaned up.

 * A test that creates a confusing branch whose name is HEAD has been
   corrected not to do so.

 * The code that parses header fields in the commit object has been
   updated for (micro)performance and code hygiene.

 * An helper function to make it easier to append the result from
   real_path() to a strbuf has been added.

 * Reduce authentication round-trip over HTTP when the server supports
   just a single authentication method.  This also improves the
   behaviour when Git is misconfigured to enable http.emptyAuth
   against a server that does not authenticate without a username
   (i.e. not using Kerberos etc., which makes http.emptyAuth
   pointless).

 * Windows port wants to use OpenSSL's implementation of SHA-1
   routines, so let them.

 * The t/perf performance test suite was not prepared to test not so
   old versions of Git, but now it covers versions of Git that are not
   so ancient.

 * Add 32-bit Linux variant to the set of platforms to be tested with
   Travis CI.

 * "git branch --list" takes the "--abbrev" and "--no-abbrev" options
   to control the output of the object name in its "-v"(erbose)
   output, but a recent update started ignoring them; fix it before
   the breakage reaches to any released version.

 * Picking two versions of Git and running tests to make sure the
   older one and the newer one interoperate happily has now become
   possible.

 * "git tag --contains" used to (ab)use the object bits to keep track
   of the state of object reachability without clearing them after
   use; this has been cleaned up and made to use the newer commit-slab
   facility.

 * The "debug" helper used in the test framework learned to run
   a command under "gdb" interactively.

 * The "detect attempt to create collisions" variant of SHA-1
   implementation by Marc Stevens (CWI) and Dan Shumow (Microsoft)
   has been integrated and made the default.

 * The test framework learned to detect unterminated here documents.

 * The name-hash used for detecting paths that are different only in
   cases (which matter on case insensitive filesystems) has been
   optimized to take advantage of multi-threading when it makes sense.

 * An earlier version of sha1dc/sha1.c that was merged to 'master'
   compiled incorrectly on Windows, which has been fixed.

 * "what URL do we want to update this submodule?" and "are we
   interested in this submodule?" are split into two distinct
   concepts, and then the way used to express the latter got extended,
   paving a way to make it easier to manage a project with many
   submodules and make it possible to later extend use of multiple
   worktrees for a project with submodules.

 * Some debugging output from "git describe" were marked for l10n,
   but some weren't.  Mark missing ones for l10n.

 * Define a new task in .travis.yml that triggers a test session on
   Windows run elsewhere.

 * Conversion from uchar[20] to struct object_id continues.

 * The "submodule" specific field in the ref_store structure is
   replaced with a more generic "gitdir" that can later be used also
   when dealing with ref_store that represents the set of refs visible
   from the other worktrees.

 * The string-list API used a custom reallocation strategy that was
   very inefficient, instead of using the usual ALLOC_GROW() macro,
   which has been fixed.
   (merge 950a234cbd jh/string-list-micro-optim later to maint).

 * In a 2- and 3-way merge of trees, more than one source trees often
   end up sharing an identical subtree; optimize by not reading the
   same tree multiple times in such a case.
   (merge d12a8cf0af jh/unpack-trees-micro-optim later to maint).

 * The index file has a trailing SHA-1 checksum to detect file
   corruption, and historically we checked it every time the index
   file is used.  Omit the validation during normal use, and instead
   verify only in "git fsck".

 * Having a git command on the upstream side of a pipe in a test
   script will hide the exit status from the command, which may cause
   us to fail to notice a breakage; rewrite tests in a script to avoid
   this issue.

 * Travis CI learns to run coccicheck.

 * "git checkout" that handles a lot of paths has been optimized by
   reducing the number of unnecessary checks of paths in the
   has_dir_name() function.

 * The internals of the refs API around the cached refs has been
   streamlined.

 * Output from perf tests have been updated to align their titles.

Also contains various documentation updates and code clean-ups.


Fixes since v2.12
-----------------

Unless otherwise noted, all the fixes since v2.12 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * "git repack --depth=<n>" for a long time busted the specified depth
   when reusing delta from existing packs.  This has been corrected.

 * The code to parse the command line "git grep <patterns>... <rev>
   [[--] <pathspec>...]" has been cleaned up, and a handful of bugs
   have been fixed (e.g. we used to check "--" if it is a rev).

 * "git ls-remote" and "git archive --remote" are designed to work
   without being in a directory under Git's control.  However, recent
   updates revealed that we randomly look into a directory called
   .git/ without actually doing necessary set-up when working in a
   repository.  Stop doing so.

 * "git show-branch" expected there were only very short branch names
   in the repository and used a fixed-length buffer to hold them
   without checking for overflow.

 * A caller of tempfile API that uses stdio interface to write to
   files may ignore errors while writing, which is detected when
   tempfile is closed (with a call to ferror()).  By that time, the
   original errno that may have told us what went wrong is likely to
   be long gone and was overwritten by an irrelevant value.
   close_tempfile() now resets errno to EIO to make errno at least
   predictable.

 * "git remote rm X", when a branch has remote X configured as the
   value of its branch.*.remote, tried to remove branch.*.remote and
   branch.*.merge and failed if either is unset.

 * A "gc.log" file left by a backgrounded "gc --auto" disables further
   automatic gc; it has been taught to run at least once a day (by
   default) by ignoring a stale "gc.log" file that is too old.

 * The code to parse "git -c VAR=VAL cmd" and set configuration
   variable for the duration of cmd had two small bugs, which have
   been fixed.

 * user.email that consists of only cruft chars should consistently
   error out, but didn't.

 * "git upload-pack", which is a counter-part of "git fetch", did not
   report a request for a ref that was not advertised as invalid.
   This is generally not a problem (because "git fetch" will stop
   before making such a request), but is the right thing to do.

 * A leak in a codepath to read from a packed object in (rare) cases
   has been plugged.

 * When a redirected http transport gets an error during the
   redirected request, we ignored the error we got from the server,
   and ended up giving a not-so-useful error message.

 * The patch subcommand of "git add -i" was meant to have paths
   selection prompt just like other subcommand, unlike "git add -p"
   directly jumps to hunk selection.  Recently, this was broken and
   "add -i" lost the paths selection dialog, but it now has been
   fixed.

 * Git v2.12 was shipped with an embarrassing breakage where various
   operations that verify paths given from the user stopped dying when
   seeing an issue, and instead later triggering segfault.

 * There is no need for Python only to give a few messages to the
   standard error stream, but we somehow did.

 * The code to parse "git log -L..." command line was buggy when there
   are many ranges specified with -L; overrun of the allocated buffer
   has been fixed.

 * The command-line parsing of "git log -L" copied internal data
   structures using incorrect size on ILP32 systems.

 * "git diff --quiet" relies on the size field in diff_filespec to be
   correctly populated, but diff_populate_filespec() helper function
   made an incorrect short-cut when asked only to populate the size
   field for paths that need to go through convert_to_git() (e.g. CRLF
   conversion).

 * A few tests were run conditionally under (rare) conditions where
   they cannot be run (like running cvs tests under 'root' account).

 * "git branch @" created refs/heads/@ as a branch, and in general the
   code that handled @{-1} and @{upstream} was a bit too loose in
   disambiguating.

 * "git fetch" that requests a commit by object name, when the other
   side does not allow such an request, failed without much
   explanation.

 * "git filter-branch --prune-empty" drops a single-parent commit that
   becomes a no-op, but did not drop a root commit whose tree is empty.

 * Recent versions of Git treats http alternates (used in dumb http
   transport) just like HTTP redirects and requires the client to
   enable following it, due to security concerns.  But we forgot to
   give a warning when we decide not to honor the alternates.

 * "git push" had a handful of codepaths that could lead to a deadlock
   when unexpected error happened, which has been fixed.

 * "Dumb http" transport used to misparse a nonsense http-alternates
   response, which has been fixed.

 * "git add -p <pathspec>" unnecessarily expanded the pathspec to a
   list of individual files that matches the pathspec by running "git
   ls-files <pathspec>", before feeding it to "git diff-index" to see
   which paths have changes, because historically the pathspec
   language supported by "diff-index" was weaker.  These days they are
   equivalent and there is no reason to internally expand it.  This
   helps both performance and avoids command line argument limit on
   some platforms.
   (merge 7288e12cce jk/add-i-use-pathspecs later to maint).

 * "git status --porcelain" is supposed to give a stable output, but a
   few strings were left as translatable by mistake.

 * "git revert -m 0 $merge_commit" complained that reverting a merge
   needs to say relative to which parent the reversion needs to
   happen, as if "-m 0" weren't given.  The correct diagnosis is that
   "-m 0" does not refer to the first parent ("-m 1" does).  This has
   been fixed.

 * Code to read submodule.<name>.ignore config did not state the
   variable name correctly when giving an error message diagnosing
   misconfiguration.

 * Fix for NO_PTHREADS build.

 * Fix for potential segv introduced in v2.11.0 and later (also
   v2.10.2) to "git log --pickaxe-regex -S".

 * A few unterminated here documents in tests were fixed, which in
   turn revealed incorrect expectations the tests make. These tests
   have been updated.

 * Fix for NO_PTHREADS option.
   (merge 2225e1ea20 bw/grep-recurse-submodules later to maint).

 * Git now avoids blindly falling back to ".git" when the setup
   sequence said we are _not_ in Git repository.  A corner case that
   happens to work right now may be broken by a call to die("BUG").
   (merge b1ef400eec jk/no-looking-at-dotgit-outside-repo-final later to maint).

 * A few commands that recently learned the "--recurse-submodule"
   option misbehaved when started from a subdirectory of the
   superproject.
   (merge b2dfeb7c00 bw/recurse-submodules-relative-fix later to maint).

 * FreeBSD implementation of getcwd(3) behaved differently when an
   intermediate directory is unreadable/unsearchable depending on the
   length of the buffer provided, which our strbuf_getcwd() was not
   aware of.  strbuf_getcwd() has been taught to cope with it better.
   (merge a54e938e5b rs/freebsd-getcwd-workaround later to maint).

 * A recent update to "rebase -i" stopped running hooks for the "git
   commit" command during "reword" action, which has been fixed.

 * Removing an entry from a notes tree and then looking another note
   entry from the resulting tree using the internal notes API
   functions did not work as expected.  No in-tree users of the API
   has such access pattern, but it still is worth fixing.

 * "git receive-pack" could have been forced to die by attempting
   allocate an unreasonably large amount of memory with a crafted push
   certificate; this has been fixed.
   (merge f2214dede9 bc/push-cert-receive-fix later to maint).

 * Update error handling for codepath that deals with corrupt loose
   objects.
   (merge 51054177b3 jk/loose-object-info-report-error later to maint).

 * "git diff --submodule=diff" learned to work better in a project
   with a submodule that in turn has its own submodules.
   (merge 17b254cda6 sb/show-diff-for-submodule-in-diff-fix later to maint).

 * Update the build dependency so that an update to /usr/bin/perl
   etc. result in recomputation of perl.mak file.
   (merge c59c4939c2 ab/regen-perl-mak-with-different-perl later to maint).

 * "git push --recurse-submodules --push-option=<string>" learned to
   propagate the push option recursively down to pushes in submodules.

 * If a patch e-mail had its first paragraph after an in-body header
   indented (even after a blank line after the in-body header line),
   the indented line was mistook as a continuation of the in-body
   header.  This has been fixed.
   (merge fd1062e52e lt/mailinfo-in-body-header-continuation later to maint).

 * Clean up fallouts from recent tightening of the set-up sequence,
   where Git barfs when repository information is accessed without
   first ensuring that it was started in a repository.
   (merge bccb22cbb1 jk/no-looking-at-dotgit-outside-repo later to maint).

 * "git p4" used "name-rev HEAD" when it wants to learn what branch is
   checked out; it should use "symbolic-ref HEAD".
   (merge eff451101d ld/p4-current-branch-fix later to maint).

 * "http.proxy" set to an empty string is used to disable the usage of
   proxy.  We broke this early last year.
   (merge ae51d91105 sr/http-proxy-configuration-fix later to maint).

 * $GIT_DIR may in some cases be normalized with all symlinks resolved
   while "gitdir" path expansion in the pattern does not receive the
   same treatment, leading to incorrect mismatch.  This has been fixed.

 * "git submodule" script does not work well with strange pathnames.
   Protect it from a path with slashes in them, at least.

 * "git fetch-pack" was not prepared to accept ERR packet that the
   upload-pack can send with a human-readable error message.  It
   showed the packet contents with ERR prefix, so there was no data
   loss, but it was redundant to say "ERR" in an error message.
   (merge 8e2c7bef03 jt/fetch-pack-error-reporting later to maint).

 * "ls-files --recurse-submodules" did not quite work well in a
   project with nested submodules.

 * gethostname(2) may not NUL terminate the buffer if hostname does
   not fit; unfortunately there is no easy way to see if our buffer
   was too small, but at least this will make sure we will not end up
   using garbage past the end of the buffer.
   (merge 5781a9a270 dt/xgethostname-nul-termination later to maint).

 * A recent update broke "git add -p ../foo" from a subdirectory.

 * While handy, "git_path()" is a dangerous function to use as a
   callsite that uses it safely one day can be broken by changes
   to other code that calls it.  Reduction of its use continues.
   (merge 16d2676c9e jk/war-on-git-path later to maint).

 * The split-index code configuration code used an unsafe git_path()
   function without copying its result out.

 * Many stale HTTP(s) links have been updated in our documentation.
   (merge 613416f0be jk/update-links-in-docs later to maint).

 * "git-shell" rejects a request to serve a repository whose name
   begins with a dash, which makes it no longer possible to get it
   confused into spawning service programs like "git-upload-pack" with
   an option like "--help", which in turn would spawn an interactive
   pager, instead of working with the repository user asked to access
   (i.e. the one whose name is "--help").

 * Other minor doc, test and build updates and code cleanups.
   (merge df2a6e38b7 jk/pager-in-use later to maint).
   (merge 75ec4a6cb0 ab/branch-list-doc later to maint).
   (merge 3e5b36c637 sg/skip-prefix-in-prettify-refname later to maint).
   (merge 2c5e2865cc jk/fast-import-cleanup later to maint).
   (merge 4473060bc2 ab/test-readme-updates later to maint).
   (merge 48a96972fd ab/doc-submitting later to maint).
   (merge f5c2bc2b96 jk/make-coccicheck-detect-errors later to maint).
   (merge c105f563d1 cc/untracked later to maint).
   (merge 8668976b53 jc/unused-symbols later to maint).
   (merge fba275dc93 jc/bs-t-is-not-a-tab-for-sed later to maint).
   (merge be6ed145de mm/ls-files-s-doc later to maint).
   (merge 60b091c679 qp/bisect-docfix later to maint).
   (merge 47242cd103 ah/diff-files-ours-theirs-doc later to maint).
   (merge 35ad44cbd8 sb/submodule-rm-absorb later to maint).
   (merge 0301f1fd92 va/i18n-perl-scripts later to maint).
   (merge 733e064d98 vn/revision-shorthand-for-side-branch-log later to maint).
   (merge 85999743e7 tb/doc-eol-normalization later to maint).
   (merge 0747fb49fd jk/loose-object-fsck later to maint).
   (merge d8f4481c4f jk/quarantine-received-objects later to maint).
   (merge 7ba1ceef95 xy/format-patch-base later to maint).
   (merge fa1912c89a rs/misc-cppcheck-fixes later to maint).
   (merge f17d642d3b ab/push-cas-doc-n-test later to maint).
   (merge 61e282425a ss/gitmodules-ignore-doc later to maint).
   (merge 8d3047cd5b ss/submodule-shallow-doc later to maint).
   (merge 1f9e18b772 jk/prio-queue-avoid-swap-with-self later to maint).
   (merge 627fde1025 jk/submodule-init-segv-fix later to maint).
   (merge d395745d81 rg/doc-pull-typofix later to maint).
   (merge 01e60a9a22 rg/doc-submittingpatches-wordfix later to maint).
   (merge 501d3cd7b8 sr/hooks-cwd-doc later to maint).

----------------------------------------------------------------

Changes since v2.12.0 are as follows:

Alex Henrie (1):
      log: if --decorate is not given, default to --decorate=auto

Alexander Shopov (2):
      l10n: bg.po: Updated Bulgarian translation (3201t)
      l10n: bg.po: Updated Bulgarian translation (3195t)

Allan Xavier (1):
      line-log.c: prevent crash during union of too many ranges

Andreas Heiduk (2):
      Documentation: improve description for core.quotePath
      diff-files: document --ours etc.

Brandon Williams (37):
      attr: pass struct attr_check to collect_some_attrs
      attr: use hashmap for attribute dictionary
      attr: eliminate global check_all_attr array
      attr: remove maybe-real, maybe-macro from git_attr
      attr: tighten const correctness with git_attr and match_attr
      attr: store attribute stack in attr_check structure
      attr: push the bare repo check into read_attr()
      attr: reformat git_attr_set_direction() function
      pathspec: allow querying for attributes
      pathspec: allow escaped query values
      submodule--helper: add is-active subcommand
      submodule status: use submodule--helper is-active
      submodule sync: skip work for inactive submodules
      submodule sync: use submodule--helper is-active
      submodule--helper clone: check for configured submodules using helper
      grep: fix help text typo
      setup: allow for prefix to be passed to git commands
      grep: fix bug when recursing with relative pathspec
      ls-files: fix typo in variable name
      ls-files: fix bug when recursing with relative pathspec
      grep: set default output method
      submodule: decouple url and submodule interest
      submodule init: initialize active submodules
      clone: teach --recurse-submodules to optionally take a pathspec
      submodule--helper init: set submodule.<name>.active
      submodule add: respect submodule.active and submodule.<name>.active
      grep: fix builds with with no thread support
      send-pack: send push options correctly in stateless-rpc case
      remote-curl: allow push options
      sequencer: fix missing newline
      push: unmark a local variable as static
      push: propagate push-options with --recurse-submodules
      remote: expose parse_push_refspec function
      submodule--helper: add push-check subcommand
      push: propagate remote and refspec with --recurse-submodules
      pathspec: fix segfault in clear_pathspec
      submodule: prevent backslash expantion in submodule names

Christian Couder (25):
      config: mark an error message up for translation
      t1700: change here document style
      config: add git_config_get_split_index()
      split-index: add {add,remove}_split_index() functions
      read-cache: add and then use tweak_split_index()
      update-index: warn in case of split-index incoherency
      t1700: add tests for core.splitIndex
      Documentation/config: add information for core.splitIndex
      Documentation/git-update-index: talk about core.splitIndex config var
      config: add git_config_get_max_percent_split_change()
      read-cache: regenerate shared index if necessary
      t1700: add tests for splitIndex.maxPercentChange
      Documentation/config: add splitIndex.maxPercentChange
      sha1_file: make check_and_freshen_file() non static
      read-cache: touch shared index files when used
      config: add git_config_get_expiry() from gc.c
      read-cache: unlink old sharedindex files
      t1700: test shared index file expiration
      read-cache: refactor read_index_from()
      read-cache: use freshen_shared_index() in read_index_from()
      Documentation/config: add splitIndex.sharedIndexExpire
      Documentation/git-update-index: explain splitIndex.*
      update-index: fix xgetcwd() related memory leak
      p0004: make perf test executable
      read-cache: avoid using git_path() in freshen_shared_index()

Cornelius Weig (1):
      tag: generate useful reflog message

David Aguilar (3):
      t7800: remove whitespace before redirect
      t7800: cleanup cruft left behind by tests
      difftool: handle modified symlinks in dir-diff mode

David Turner (3):
      gc: ignore old gc.log files
      http.postbuffer: allow full range of ssize_t values
      xgethostname: handle long hostnames

Devin J. Pohly (4):
      t7003: ensure --prune-empty can prune root commit
      t7003: ensure --prune-empty removes entire branch when applicable
      filter-branch: fix --prune-empty on parentless commits
      p7000: add test for filter-branch with --prune-empty

Devin Lehmacher (3):
      path.c: add xdg_cache_home
      credential-cache: use XDG_CACHE_HOME for socket
      credential-cache: add tests for XDG functionality

Eric Wong (3):
      README: create HTTP/HTTPS links from URLs in Markdown
      http: inform about alternates-as-redirects behavior
      http: release strbuf on disabled alternates

Giuseppe Bilotta (4):
      builtin/am: honor --signoff also when --rebasing
      builtin/am: fold am_signoff() into am_append_signoff()
      doc: trivial typo in git-format-patch.txt
      rebase: pass --[no-]signoff option to git am

Hiroshi Shirosaki (1):
      git svn: fix authentication with 'branch'

Jacob Keller (7):
      doc: add documentation for OPT_STRING_LIST
      name-rev: extend --refs to accept multiple patterns
      name-rev: add support to exclude refs by pattern match
      describe: teach --match to accept multiple patterns
      describe: teach describe negative pattern matches
      ls-files: fix recurse-submodules with nested submodules
      ls-files: fix path used when recursing into submodules

Jean-Noel Avila (3):
      i18n: remove i18n from tag reflog message
      l10n: fr.po v2.13 round 1
      l10n: fr.po v2.13 rnd 2

Jeff Hostetler (19):
      mingw: use OpenSSL's SHA-1 routines
      preload-index: avoid lstat for skip-worktree items
      name-hash: specify initial size for istate.dir_hash table
      hashmap: allow memihash computation to be continued
      hashmap: add disallow_rehash setting
      hashmap: document memihash_cont, hashmap_disallow_rehash api
      name-hash: perf improvement for lazy_init_name_hash
      name-hash: add test-lazy-init-name-hash
      name-hash: add perf test for lazy_init_name_hash
      test-online-cpus: helper to return cpu count
      read-cache: force_verify_index_checksum
      string-list: use ALLOC_GROW macro when reallocing string_list
      read-cache: add strcmp_offset function
      unpack-trees: avoid duplicate ODB lookups during checkout
      p0006-read-tree-checkout: perf test to time read-tree
      read-cache: speed up add_index_entry during checkout
      read-cache: speed up has_dir_name (part 1)
      read-cache: speed up has_dir_name (part 2)
      t1450: avoid use of "sed" on the index, which is a binary file

Jeff King (132):
      setup_git_env: avoid blind fall-back to ".git"
      pack-objects: enforce --depth limit in reused deltas
      pack-objects: convert recursion to iteration in break_delta_chain()
      for_each_alternate_ref: handle failure from real_pathdup()
      for_each_alternate_ref: stop trimming trailing slashes
      for_each_alternate_ref: use strbuf for path allocation
      for_each_alternate_ref: pass name/oid instead of ref struct
      for_each_alternate_ref: replace transport code with for-each-ref
      fetch-pack: cache results of for_each_alternate_ref
      add oidset API
      receive-pack: use oidset to de-duplicate .have lines
      receive-pack: fix misleading namespace/.have comment
      receive-pack: treat namespace .have lines like alternates
      receive-pack: avoid duplicates between our refs and alternates
      grep: move thread initialization a little lower
      grep: re-order rev-parsing loop
      grep: fix "--" rev/pathspec disambiguation
      grep: avoid resolving revision names in --no-index case
      grep: do not diagnose misspelt revs with --no-index
      show-branch: drop head_len variable
      show-branch: store resolved head in heap buffer
      remote: avoid reading $GIT_DIR config in non-repo
      grep: treat revs the same for --untracked as for --no-index
      show-branch: use skip_prefix to drop magic numbers
      tempfile: set errno to a known value before calling ferror()
      http: restrict auth methods to what the server advertises
      ident: mark error messages for translation
      ident: handle NULL email when complaining of empty name
      ident: reject all-crud ident name
      ident: do not ignore empty config name/email
      parse_config_key: use skip_prefix instead of starts_with
      parse_config_key: allow matching single-level config
      parse_hide_refs_config: tell parse_config_key we don't want a subsection
      http: add an "auto" mode for http.emptyauth
      t6300: avoid creating refs/heads/HEAD
      add--interactive: fix missing file prompt for patch mode with "-i"
      interpret_branch_name(): handle auto-namelen for @{-1}
      interpret_branch_name: move docstring to header file
      strbuf_branchname: drop return value
      strbuf_branchname: add docstring
      interpret_branch_name: allow callers to restrict expansions
      t3204: test git-branch @-expansion corner cases
      branch: restrict @-expansions when deleting
      strbuf_check_ref_format(): expand only local branches
      checkout: restrict @-expansions when finding branch
      t/perf: use $MODERN_GIT for all repo-copying steps
      t/perf: add fallback for pre-bin-wrappers versions of git
      ewah: fix eword_t/uint64_t confusion
      receive-pack: fix deadlock when we cannot create tmpdir
      send-pack: extract parsing of "unpack" response
      send-pack: use skip_prefix for parsing unpack status
      send-pack: improve unpack-status error messages
      send-pack: read "unpack" status even on pack-objects failure
      send-pack: report signal death of pack-objects
      ref-filter: move ref_cbdata definition into ref-filter.c
      ref-filter: use contains_result enum consistently
      ref-filter: die on parse_commit errors
      ref-filter: use separate cache for contains_tag_algo
      t: add an interoperability test harness
      t/interop: add test of old clients against modern git-daemon
      http-walker: fix buffer underflow processing remote alternates
      add--interactive: do not expand pathspecs with ls-files
      cherry-pick: detect bogus arguments to --mainline
      rev-parse: use skip_prefix when parsing options
      rev-parse: add helper for parsing "--foo/--foo="
      rev-parse: simplify parsing of ref options
      move odb_* declarations out of git-compat-util.h
      sha1_file.c: make pack-name helper globally accessible
      odb_pack_keep(): stop generating keepfile name
      replace snprintf with odb_pack_name()
      index-pack: make pointer-alias fallbacks safer
      sha1dc: add collision-detecting sha1 implementation
      sha1dc: adjust header includes for git
      sha1dc: disable safe_hash feature
      sequencer: drop "warning:" when stopping for edit
      Makefile: add DC_SHA1 knob
      t0013: add a basic sha1 collision detection test
      run-command: fix segfault when cleaning forked async process
      hash-object: fix buffer reuse with --path in a subdirectory
      prefix_filename: move docstring to header file
      prefix_filename: drop length parameter
      prefix_filename: return newly allocated string
      prefix_filename: simplify windows #ifdef
      bundle: use prefix_filename with bundle path
      pager_in_use: use git_env_bool()
      fast-import: use xsnprintf for writing sha1s
      fast-import: use xsnprintf for formatting headers
      encode_in_pack_object_header: respect output buffer length
      pack.h: define largest possible encoded object size
      do not check odb_mkstemp return value for errors
      odb_mkstemp: write filename into strbuf
      odb_mkstemp: use git_path_buf
      Makefile: detect errors in running spatch
      difftool: avoid strcpy
      diff: avoid fixed-size buffer for patch-ids
      tag: use strbuf to format tag header
      fetch: use heap buffer to format reflog
      avoid using fixed PATH_MAX buffers for refs
      avoid using mksnpath for refs
      create_branch: move msg setup closer to point of use
      create_branch: use xstrfmt for reflog message
      name-rev: replace static buffer with strbuf
      receive-pack: print --pack-header directly into argv array
      replace unchecked snprintf calls with heap buffers
      combine-diff: replace malloc/snprintf with xstrfmt
      convert unchecked snprintf into xsnprintf
      transport-helper: replace checked snprintf with xsnprintf
      gc: replace local buffer with git_path
      daemon: use an argv_array to exec children
      sha1_loose_object_info: return error for corrupted objects
      index-pack: detect local corruption in collision check
      connect.c: handle errors from split_cmdline
      receive-pack: drop tmp_objdir_env from run_update_hook
      receive-pack: document user-visible quarantine effects
      refs: reject ref updates while GIT_QUARANTINE_PATH is set
      bisect: add git_path_bisect_terms helper
      branch: add edit_description() helper
      use git_path_* helper functions
      replace xstrdup(git_path(...)) with git_pathdup(...)
      replace strbuf_addstr(git_path()) with git_path_buf()
      am: drop "dir" parameter from am_state_init
      connect.c: fix leak in handle_ssh_variant
      doc: use https links to avoid http redirect
      doc: replace or.cz gitwiki link with git.wiki.kernel.org
      gitcore-tutorial: update broken link
      docs/archimport: quote sourcecontrol.net reference
      docs/bisect-lk2009: update nist report link
      docs/bisect-lk2009: update java code conventions link
      completion: optionally disable checkout DWIM
      submodule_init: die cleanly on submodules without url defined
      prio_queue_reverse: don't swap elements with themselves
      shell: disallow repo names beginning with dash

Jiang Xin (4):
      l10n: git.pot: v2.13.0 round 1 (96 new, 37 removed)
      l10n: zh_CN: for git v2.13.0 l10n round 1
      l10n: git.pot: v2.13.0 round 2 (4 new, 7 removed)
      l10n: zh_CN: for git v2.13.0 l10n round 2

Johan Hovold (1):
      send-email: only allow one address per body tag

Johannes Schindelin (23):
      git_connect(): factor out SSH variant handling
      rebase--helper: add a builtin helper for interactive rebases
      rebase -i: use the rebase--helper builtin
      rev-parse: fix several options when running in a subdirectory
      t7006: replace dubious test
      Travis: also test on 32-bit Linux
      setup_git_directory(): use is_dir_sep() helper
      t1501: demonstrate NULL pointer access with invalid GIT_WORK_TREE
      real_pathdup(): fix callsites that wanted it to die on error
      setup: prepare setup_discovered_git_dir() for the root directory
      setup_git_directory_1(): avoid changing global state
      setup: introduce the discover_git_directory() function
      setup: make read_early_config() reusable
      read_early_config(): avoid .git/config hack when unneeded
      read_early_config(): really discover .git/
      t1309: test read_early_config()
      setup_git_directory_gently_1(): avoid die()ing
      t1309: document cases where we would want early config not to die()
      setup.c: mention unresolved problems
      t7504: document regression: reword no longer calls commit-msg
      sequencer: make commit options more extensible
      sequencer: allow the commit-msg hooks to run during a `reword`
      difftool: fix use-after-free

Jonathan Nieder (2):
      remote helpers: avoid blind fall-back to ".git" when setting GIT_DIR
      has_sha1_file: don't bother if we are not in a repository

Jonathan Tan (5):
      grep: do not unnecessarily query repo for "--"
      upload-pack: report "not our ref" to client
      http: attempt updating base URL only if no error
      t/perf: export variable used in other blocks
      fetch-pack: show clearer error message upon ERR

Jordi Mas (1):
      l10n: Update Catalan translation

Junio C Hamano (66):
      merge: drop 'git merge <message> HEAD <commit>' syntax
      connect: rename tortoiseplink and putty variables
      commit.c: use strchrnul() to scan for one line
      attr.c: use strchrnul() to scan for one line
      attr.c: update a stale comment on "struct match_attr"
      attr.c: explain the lack of attr-name syntax check in parse_attr()
      attr.c: complete a sentence in a comment
      attr.c: mark where #if DEBUG ends more clearly
      attr.c: simplify macroexpand_one()
      attr.c: tighten constness around "git_attr" structure
      attr.c: plug small leak in parse_attr_line()
      attr.c: add push_stack() helper
      attr.c: outline the future plans by heavily commenting
      attr: rename function and struct related to checking attributes
      attr: (re)introduce git_check_attr() and struct attr_check
      attr: convert git_all_attrs() to use "struct attr_check"
      attr: convert git_check_attrs() callers to use the new API
      attr: retire git_check_attrs() API
      attr: change validity check for attribute names to use positive logic
      ref-filter: resurrect "strip" as a synonym to "lstrip"
      connect.c: stop conflating ssh command names and overrides
      config: move a few helper functions up
      config: use git_config_parse_key() in git_config_parse_parameter()
      First batch after 2.12
      diff: do not short-cut CHECK_SIZE_ONLY check in diff_populate_filespec()
      branch: honor --abbrev/--no-abbrev in --list mode
      Second batch after 2.12
      Third batch after 2.12
      Fourth batch after 2.12
      Preparing for 2.12.1
      Makefile: make DC_SHA1 the default
      Fifth batch for 2.13
      Git 2.12.1
      Prepare for 2.12.2
      Sixth batch for 2.13
      t5615: fix a here-doc syntax error
      t7406: correct test case for submodule-update initial population
      tests: lint for run-away here-doc
      branch doc: update description for `--list`
      Git 2.12.2
      Seventh batch for 2.13
      sha1dc: avoid CPP macro collisions
      Eighth batch for 2.13
      Prepare for 2.12.3
      Ninth batch for 2.13
      Tenth batch for 2.13
      remote.[ch]: parse_push_cas_option() can be static
      contrib/git-resurrect.sh: do not write \t for HT in sed scripts
      Eleventh batch for 2.13
      Twelfth batch for 2.13
      replace: plug a memory leak
      Git 2.13-rc0
      Getting ready for -rc1
      Git 2.13-rc1
      Merging a handful of topics before -rc2
      Git 2.13-rc2
      Git 2.4.12
      Git 2.5.6
      Git 2.6.7
      Git 2.7.5
      Git 2.8.5
      Git 2.9.4
      Git 2.10.3
      Git 2.11.2
      Git 2.12.3
      Git 2.13

Karthik Nayak (20):
      ref-filter: implement %(if), %(then), and %(else) atoms
      ref-filter: include reference to 'used_atom' within 'atom_value'
      ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>)
      ref-filter: modify "%(objectname:short)" to take length
      ref-filter: move get_head_description() from branch.c
      ref-filter: introduce format_ref_array_item()
      ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreams
      ref-filter: add support for %(upstream:track,nobracket)
      ref-filter: make "%(symref)" atom work with the ':short' modifier
      ref-filter: introduce refname_atom_parser_internal()
      ref-filter: introduce refname_atom_parser()
      ref-filter: make remote_ref_atom_parser() use refname_atom_parser_internal()
      ref-filter: rename the 'strip' option to 'lstrip'
      ref-filter: Do not abruptly die when using the 'lstrip=<N>' option
      ref-filter: modify the 'lstrip=<N>' option to work with negative '<N>'
      ref-filter: add an 'rstrip=<N>' option to atoms which deal with refnames
      ref-filter: allow porcelain to translate messages in the output
      branch, tag: use porcelain output
      branch: use ref-filter printing APIs
      branch: implement '--format' option

Kevin Willford (2):
      name-hash: fix buffer overrun
      t3008: skip lazy-init test on a single-core box

Kyle Meyer (12):
      delete_ref: accept a reflog message argument
      update-ref: pass reflog message to delete_ref()
      rename_ref: replace empty message in HEAD's log
      branch: record creation of renamed branch in HEAD's log
      t1400: rename test descriptions to be unique
      t1400: set core.logAllRefUpdates in "logged by touch" tests
      t1400: use test_path_is_* helpers
      t1400: remove a set of unused output files
      t1400: use test_when_finished for cleanup
      doc/config: grammar fixes for core.{editor,commentChar}
      doc/revisions: remove brackets from rev^-n shorthand
      t1400: use consistent style for test_expect_success calls

Lars Schneider (4):
      travis-ci: build and test Git on Windows
      travis-ci: add static analysis build job to run coccicheck
      travis-ci: printf $STATUS as string
      travis-ci: set DEVELOPER knob for Linux32 build

Linus Torvalds (3):
      pathspec magic: add '^' as alias for '!'
      pathspec: don't error out on all-exclusionary pathspec patterns
      mailinfo: fix in-body header continuations

Luke Diamand (3):
      git-p4: add failing test for name-rev rather than symbolic-ref
      git-p4: add read_pipe_text() internal function
      git-p4: don't use name-rev to get current branch

Matt McCutchen (4):
      merge-recursive: make "CONFLICT (rename/delete)" message show both paths
      fetch-pack: move code to report unmatched refs to a function
      fetch_refs_via_pack: call report_unmatched_refs
      fetch-pack: add specific error for fetching an unadvertised object

Maxim Moseychuk (2):
      stop_progress_msg: convert xsnprintf to xstrfmt
      bisect_next_all: convert xsnprintf to xstrfmt

Michael Haggerty (52):
      files_rename_ref(): tidy up whitespace
      refname_is_safe(): correct docstring
      t5505: use "for-each-ref" to test for the non-existence of references
      safe_create_leading_directories_const(): preserve errno
      safe_create_leading_directories(): set errno on SCLD_EXISTS
      raceproof_create_file(): new function
      lock_ref_sha1_basic(): inline constant
      lock_ref_sha1_basic(): use raceproof_create_file()
      rename_tmp_log(): use raceproof_create_file()
      rename_tmp_log(): improve error reporting
      log_ref_write(): inline function
      log_ref_setup(): separate code for create vs non-create
      log_ref_setup(): improve robustness against races
      log_ref_setup(): pass the open file descriptor back to the caller
      log_ref_write_1(): don't depend on logfile argument
      log_ref_setup(): manage the name of the reflog file internally
      log_ref_write_1(): inline function
      delete_ref_loose(): derive loose reference path from lock
      delete_ref_loose(): inline function
      try_remove_empty_parents(): rename parameter "name" -> "refname"
      try_remove_empty_parents(): don't trash argument contents
      try_remove_empty_parents(): teach to remove parents of reflogs, too
      files_transaction_commit(): clean up empty directories
      refs: reorder some function definitions
      refs: make some ref_store lookup functions private
      refs: remove some unnecessary handling of submodule == ""
      register_ref_store(): new function
      refs: store submodule ref stores in a hashmap
      refs: push the submodule attribute down
      base_ref_store_init(): remove submodule argument
      files_ref_store::submodule: use NULL for the main repository
      read_loose_refs(): read refs using resolve_ref_recursively()
      get_ref_dir(): don't call read_loose_refs() for "refs/bisect"
      refs_read_raw_ref(): new function
      refs_ref_iterator_begin(): new function
      refs_verify_refname_available(): implement once for all backends
      refs_verify_refname_available(): use function in more places
      ref-cache: rename `add_ref()` to `add_ref_entry()`
      ref-cache: rename `find_ref()` to `find_ref_entry()`
      ref-cache: rename `remove_entry()` to `remove_entry_from_dir()`
      refs: split `ref_cache` code into separate files
      ref-cache: introduce a new type, ref_cache
      refs: record the ref_store in ref_cache, not ref_dir
      ref-cache: use a callback function to fill the cache
      refs: handle "refs/bisect/" in `loose_fill_ref_dir()`
      do_for_each_entry_in_dir(): eliminate `offset` argument
      get_loose_ref_dir(): function renamed from get_loose_refs()
      get_loose_ref_cache(): new function
      cache_ref_iterator_begin(): make function smarter
      commit_packed_refs(): use reference iteration
      files_pack_refs(): use reference iteration
      do_for_each_entry_in_dir(): delete function

Michael J Gruber (6):
      git-status: make porcelain more robust
      git-prompt: add a describe style for any tags
      mailmap: use Michael J Gruber's new address
      describe: localize debug output fully
      l10n: de: translate describe debug terms
      l10n: de.po: lower case after semi-colon

Michael Rappazzo (1):
      rev-parse tests: add tests executed from a subdirectory

Mike Hommey (1):
      notes: do not break note_tree structure in note_tree_consolidate()

Mostyn Bramley-Moore (1):
      Documentation: document elements in "ls-files -s" output in order

Nguyễn Thái Ngọc Duy (40):
      attr: support quoting pathname patterns in C style
      clean: use warning_errno() when appropriate
      config.txt: clarify multiple key values in include.path
      config.txt: reflow the second include.path paragraph
      config: add conditional include
      refs.h: add forward declaration for structs used in this file
      git-commit.txt: list post-rewrite in HOOKS section
      files-backend: make files_log_ref_write() static
      files-backend.c: delete dead code in files_ref_iterator_begin()
      files-backend: delete dead code in files_init_db()
      files-backend: add and use files_packed_refs_path()
      files-backend: make sure files_rename_ref() always reach the end
      files-backend: convert git_path() to strbuf_git_path()
      files-backend: move "logs/" out of TMP_RENAMED_LOG
      files-backend: add and use files_reflog_path()
      files-backend: add and use files_ref_path()
      files-backend: remove the use of git_path()
      refs.c: introduce get_main_ref_store()
      refs: rename lookup_ref_store() to lookup_submodule_ref_store()
      refs.c: flatten get_ref_store() a bit
      refs.c: kill register_ref_store(), add register_submodule_ref_store()
      refs.c: make get_main_ref_store() public and use it
      path.c: move some code out of strbuf_git_path_submodule()
      refs: move submodule code out of files-backend.c
      files-backend: replace submodule_allowed check in files_downcast()
      refs: rename get_ref_store() to get_submodule_ref_store() and make it public
      refs: add new ref-store api
      refs: new transaction related ref-store api
      files-backend: avoid ref api targeting main ref store
      refs: delete pack_refs() in favor of refs_pack_refs()
      t/helper: add test-ref-store to test ref-store functions
      t1405: some basic tests on main ref store
      t1406: new tests for submodule ref store
      refs.h: add a note about sorting order of for_each_ref_*
      path.c: and an option to call real_path() in expand_user_path()
      config: resolve symlinks in conditional include's patterns
      config: prepare to pass more info in git_config_with_options()
      config: handle conditional include when $GIT_DIR is not set up
      config: correct file reading order in read_early_config()
      worktree add: add --lock option

Patrick Steinhardt (8):
      mailmap: add Patrick Steinhardt's work address
      urlmatch: enable normalization of URLs with globs
      urlmatch: split host and port fields in `struct url_info`
      urlmatch: include host in urlmatch ranking
      urlmatch: allow globbing for the URL host part
      docs/diffcore: fix grammar in diffcore-rename header
      docs/diffcore: unquote "Complete Rewrites" in headers
      pathspec: honor `PATHSPEC_PREFIX_ORIGIN` with empty prefix

Peter Krefting (3):
      l10n: sv.po: Update Swedish translation (3199t0f0u)
      i18n: read-cache: typofix
      l10n: sv.po: Update Swedish translation (3195t0f0u)

Prathamesh Chavan (1):
      t2027: avoid using pipes

Quentin Pradet (1):
      git-bisect.txt: add missing word

Ralf Thielow (4):
      submodule.c: add missing ' in error messages
      git-add--interactive.perl: add missing dot in a message
      l10n: de.po: update German translation
      l10n: de.po: translate 4 new messages

Ramsay Jones (3):
      wrapper.c: remove unused git_mkstemp() function
      wrapper.c: remove unused gitmkstemps() function
      name-hash: add test-lazy-init-name-hash to .gitignore

Ray Chen (1):
      l10n: zh_CN: review for git v2.13.0 l10n round 1

René Genz (3):
      doc: update SubmittingPatches
      fix minor typos
      doc: git-pull.txt use US spelling, fix minor typo

René Scharfe (18):
      sha1_file: release fallback base's memory in unpack_entry()
      cocci: use ALLOC_ARRAY
      strbuf: add strbuf_add_real_path()
      commit: be more precise when searching for headers
      commit: don't check for space twice when looking for header
      log-tree: factor out fmt_output_email_subject()
      pretty: use fmt_output_email_subject()
      blame: move blame_entry duplication to add_blame_entry()
      receive-pack: simplify run_update_post_hook()
      http-push: don't check return value of lookup_unknown_object()
      revision: remove declaration of path_name()
      shortlog: don't set after_subject to an empty string
      strbuf: support long paths w/o read rights in strbuf_getcwd() on FreeBSD
      test-read-cache: setup git dir
      am: close stream on error, but not stdin
      files_for_each_reflog_ent_reverse(): close stream and free strbuf on error
      server-info: avoid calling fclose(3) twice in update_info_file()
      use HOST_NAME_MAX to size buffers for gethostname(2)

Ross Lagerwall (1):
      remote: ignore failure to remove missing branch.<name>.merge

SZEDER Gábor (44):
      completion: improve __git_refs()'s in-code documentation
      completion tests: don't add test cruft to the test repository
      completion tests: make the $cur variable local to the test helper functions
      completion tests: consolidate getting path of current working directory
      completion tests: check __gitdir()'s output in the error cases
      completion tests: add tests for the __git_refs() helper function
      completion: ensure that the repository path given on the command line exists
      completion: fix most spots not respecting 'git --git-dir=<path>'
      completion: respect 'git --git-dir=<path>' when listing remote refs
      completion: list refs from remote when remote's name matches a directory
      completion: don't list 'HEAD' when trying refs completion outside of a repo
      completion: list short refs from a remote given as a URL
      completion: don't offer commands when 'git --opt' needs an argument
      completion: fix completion after 'git -C <path>'
      rev-parse: add '--absolute-git-dir' option
      completion: respect 'git -C <path>'
      completion: don't use __gitdir() for git commands
      completion: consolidate silencing errors from git commands
      completion: don't guard git executions with __gitdir()
      completion: extract repository discovery from __gitdir()
      completion: cache the path to the repository
      completion: restore removed line continuating backslash
      completion: remove redundant __gitcomp_nl() options from _git_commit()
      tests: create an interactive gdb session with the 'debug' helper
      tests: make the 'test_pause' helper work in non-verbose mode
      pickaxe: fix segfault with '-S<...> --pickaxe-regex'
      completion: wrap __git_refs() for better option parsing
      completion: support completing full refs after '--option=refs/<TAB>'
      completion: support completing fully qualified non-fast-forward refspecs
      completion: support excluding full refs
      completion: don't disambiguate tags and branches
      completion: don't disambiguate short refs
      completion: let 'for-each-ref' and 'ls-remote' filter matching refs
      completion: let 'for-each-ref' strip the remote name from remote branches
      completion: let 'for-each-ref' filter remote branches for 'checkout' DWIMery
      completion: let 'for-each-ref' sort remote branches for 'checkout' DWIMery
      completion: fill COMPREPLY directly when completing refs
      completion: fill COMPREPLY directly when completing fetch refspecs
      completion: speed up branch and tag completion
      refs.c: use skip_prefix() in prettify_refname()
      completion: put matching ctags symbol names directly into COMPREPLY
      completion: extract completing ctags symbol names into helper function
      completion: offer ctags symbol names for 'git log -S', '-G' and '-L:'
      t6500: wait for detached auto gc at the end of the test script

Santiago Torres (1):
      t7004, t7030: fix here-doc syntax errors

Sebastian Schuberth (5):
      contrib: git-remote-{bzr,hg} placeholders don't need Python
      sha1_file: remove an used fd variable
      submodule: remove a superfluous second check for the "new" variable
      gitmodules: clarify what history depth a shallow clone has
      gitmodules: clarify the ignore option values

Segev Finer (2):
      connect: handle putty/plink also in GIT_SSH_COMMAND
      connect: Add the envvar GIT_SSH_VARIANT and ssh.variant config

Sergey Ryazanov (2):
      http: honor empty http.proxy option to bypass proxy
      http: fix the silent ignoring of proxy misconfiguraion

Simon Ruderich (1):
      githooks.txt: clarify push hooks are always executed in $GIT_DIR

Stefan Beller (36):
      Documentation: fix a typo
      refs: parse_hide_refs_config to use parse_config_key
      submodule init: warn about falling back to a local path
      rev-parse: add --show-superproject-working-tree
      submodule-config: correct error reporting for invalid ignore value
      connect_work_tree_and_git_dir: safely create leading directories
      lib-submodule-update.sh: reorder create_lib_submodule_repo
      lib-submodule-update.sh: do not use ./. as submodule remote
      lib-submodule-update: teach test_submodule_content the -C <dir> flag
      lib-submodule-update.sh: replace sha1 by hash
      lib-submodule-update.sh: define tests for recursing into submodules
      make is_submodule_populated gently
      update submodules: add submodule config parsing
      update submodules: add a config option to determine if submodules are updated
      submodules: introduce check to see whether to touch a submodule
      update submodules: move up prepare_submodule_repo_env
      submodule.c: get_super_prefix_or_empty
      update submodules: add submodule_move_head
      unpack-trees: pass old oid to verify_clean_submodule
      unpack-trees: check if we can perform the operation for submodules
      entry.c: create submodules when interesting
      builtin/checkout: add --recurse-submodules switch
      builtin/read-tree: add --recurse-submodules switch
      wt-status: simplify by using for_each_string_list_item
      t3600: rename test to describe its functionality
      builtin/describe: introduce --broken flag
      submodule.c: use argv_array in is_submodule_modified
      submodule.c: factor out early loop termination in is_submodule_modified
      submodule.c: convert is_submodule_modified to use strbuf_getwholeline
      submodule.c: port is_submodule_modified to use porcelain 2
      submodule.c: stricter checking for submodules in is_submodule_modified
      short status: improve reporting for submodule changes
      unpack-trees.c: align submodule error message to the other error messages
      submodule.c: correctly handle nested submodules in is_submodule_modified
      diff: submodule inline diff to initialize env array.
      submodule--helper: fix typo in is_active error message

Stephen Hicks (1):
      rebase -i: reread the todo list if `exec` touched it

Thomas Gummerer (9):
      stash: introduce push verb
      stash: add test for the create command line arguments
      stash: refactor stash_create
      stash: teach 'push' (and 'create_stash') to honor pathspec
      stash: use stash_push for no verb form
      stash: allow pathspecs in the no verb form
      stash: don't show internal implementation details
      stash: pass the pathspec argument to git reset
      stash: keep untracked files intact in stash -k

Torsten Bögershausen (1):
      gitattributes.txt: document how to normalize the line endings

Trần Ngọc Quân (2):
      l10n: vi.po(3198t): Updated Vietnamese translation for v2.13.0-rc0
      l10n: vi.po(3195t): Update translation for v2.13.0 round 2

Valery Tolstov (1):
      submodule--helper.c: remove duplicate code

Vasco Almeida (1):
      l10n: pt_PT: update Portuguese translation

Vegard Nossum (2):
      xdiff -W: relax end-of-file function detection
      line-log: use COPY_ARRAY to fix mis-sized memcpy

brian m. carlson (41):
      hex: introduce parse_oid_hex
      builtin/commit: convert to struct object_id
      builtin/diff-tree: convert to struct object_id
      builtin/describe: convert to struct object_id
      builtin/fast-export: convert to struct object_id
      builtin/fmt-merge-message: convert to struct object_id
      builtin/grep: convert to struct object_id
      builtin/branch: convert to struct object_id
      builtin/clone: convert to struct object_id
      builtin/merge: convert to struct object_id
      Convert remaining callers of resolve_refdup to object_id
      builtin/replace: convert to struct object_id
      reflog-walk: convert struct reflog_info to struct object_id
      refs: convert each_reflog_ent_fn to struct object_id
      refs: simplify parsing of reflog entries
      sha1_file: introduce an nth_packed_object_oid function
      Convert object iteration callbacks to struct object_id
      builtin/merge-base: convert to struct object_id
      wt-status: convert to struct object_id
      hash.h: move SHA-1 implementation selection into a header file
      Define new hash-size constants for allocating memory
      Convert GIT_SHA1_HEXSZ used for allocation to GIT_MAX_HEXSZ
      Convert GIT_SHA1_RAWSZ used for allocation to GIT_MAX_RAWSZ
      builtin/diff: convert to struct object_id
      builtin/pull: convert portions to struct object_id
      builtin/receive-pack: fix incorrect pointer arithmetic
      builtin/receive-pack: convert portions to struct object_id
      fsck: convert init_skiplist to struct object_id
      parse-options-cb: convert sha1_array_append caller to struct object_id
      test-sha1-array: convert most code to struct object_id
      sha1_name: convert struct disambiguate_state to object_id
      sha1_name: convert disambiguate_hint_fn to take object_id
      submodule: convert check_for_new_submodule_commits to object_id
      builtin/pull: convert to struct object_id
      sha1-array: convert internal storage for struct sha1_array to object_id
      Make sha1_array_append take a struct object_id *
      Convert remaining callers of sha1_array_lookup to object_id
      Convert sha1_array_lookup to take struct object_id
      Convert sha1_array_for_each_unique and for_each_abbrev to object_id
      Rename sha1_array to oid_array
      Documentation: update and rename api-sha1-array.txt

Ævar Arnfjörð Bjarmason (33):
      cvs tests: skip tests that call "cvs commit" when running as root
      gitweb tests: change confusing "skip_all" phrasing
      gitweb tests: skip tests when we don't have Time::HiRes
      doc: change erroneous --[no]-whatever into --[no-]whatever
      push: mention "push.default=tracking" in the documentation
      tag doc: move the description of --[no-]merged earlier
      tag doc: split up the --[no-]merged documentation
      tag doc: reword --[no-]merged to talk about commits, not tips
      ref-filter: make combining --merged & --no-merged an error
      doc/SubmittingPatches: clarify the casing convention for "area: change..."
      t/README: link to metacpan.org, not search.cpan.org
      t/README: change "Inside <X> part" to "Inside the <X> part"
      ref-filter: add test for --contains on a non-commit
      tag: remove a TODO item from the test suite
      tag tests: fix a typo in a test description
      for-each-ref: partly change <object> to <commit> in help
      branch doc: change `git branch <pattern>` to use `<branchname>`
      tag: add more incompatibles mode tests
      parse-options: add OPT_NONEG to the "contains" option
      tag: change misleading --list <pattern> documentation
      tag: implicitly supply --list given another list-like option
      tag: change --point-at to default to HEAD
      ref-filter: add --no-contains option to tag/branch/for-each-ref
      ref-filter: reflow recently changed branch/tag/for-each-ref docs
      tag: add tests for --with and --without
      t/README: clarify the test_have_prereq documentation
      doc/SubmittingPatches: show how to get a CLI commit summary
      rev-parse: match @{upstream}, @{u} and @{push} case-insensitively
      perl: regenerate perl.mak if perl -V changes
      grep: plug a trivial memory leak
      push: document & test --force-with-lease with multiple remotes
      completion: expand "push --delete <remote> <ref>" for refs on that <remote>
      t/perf: correctly align non-ASCII descriptions in output


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.13.0-rc2
@ 2017-05-04 15:15  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2017-05-04 15:15 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

A release candidate Git v2.13.0-rc2 is now available for testing
at the usual places.  It is comprised of 699 non-merge commits
since v2.12.0, contributed by 59 people, 15 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.13.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.12.0 are as follows.
Welcome to the Git development community!

  Allan Xavier, Andreas Heiduk, Devin J. Pohly, Devin Lehmacher,
  Hiroshi Shirosaki, Johan Hovold, Maxim Moseychuk, Mostyn
  Bramley-Moore, Prathamesh Chavan, Quentin Pradet, René Genz,
  Segev Finer, Sergey Ryazanov, Stephen Hicks, and Valery Tolstov.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alex Henrie, Brandon Williams,
  brian m. carlson, Christian Couder, Cornelius Weig, David
  Aguilar, David Turner, Eric Wong, Giuseppe Bilotta, Jacob Keller,
  Jean-Noel Avila, Jeff Hostetler, Jeff King, Johannes Schindelin,
  Jonathan Nieder, Jonathan Tan, Junio C Hamano, Karthik Nayak,
  Kevin Willford, Kyle Meyer, Lars Schneider, Linus Torvalds,
  Luke Diamand, Matt McCutchen, Michael Haggerty, Michael J Gruber,
  Michael Rappazzo, Mike Hommey, Nguyễn Thái Ngọc Duy, Patrick
  Steinhardt, Peter Krefting, Ralf Thielow, Ramsay Jones, René
  Scharfe, Ross Lagerwall, Santiago Torres, Sebastian Schuberth,
  Simon Ruderich, Stefan Beller, SZEDER Gábor, Thomas Gummerer,
  Torsten Bögershausen, and Vegard Nossum.

----------------------------------------------------------------

Git 2.13 Release Notes (draft)
==============================

Backward compatibility notes.

 * Use of an empty string as a pathspec element that is used for
   'everything matches' is still warned and Git asks users to use a
   more explicit '.' for that instead.  The hope is that existing
   users will not mind this change, and eventually the warning can be
   turned into a hard error, upgrading the deprecation into removal of
   this (mis)feature.  That is not scheduled to happen in the upcoming
   release (yet).

 * The historical argument order "git merge <msg> HEAD <commit>..."
   has been deprecated for quite some time, and is now removed.

 * The default location "~/.git-credential-cache/socket" for the
   socket used to communicate with the credential-cache daemon has
   been moved to "~/.cache/git/credential/socket".

 * Git now avoids blindly falling back to ".git" when the setup
   sequence said we are _not_ in Git repository.  A corner case that
   happens to work right now may be broken by a call to die("BUG").
   We've tried hard to locate such cases and fixed them, but there
   might still be cases that need to be addressed--bug reports are
   greatly appreciated.


Updates since v2.12
-------------------

UI, Workflows & Features

 * "git describe" and "git name-rev" have been taught to take more
   than one refname patterns to restrict the set of refs to base their
   naming output on, and also learned to take negative patterns to
   name refs not to be used for naming via their "--exclude" option.

 * Deletion of a branch "foo/bar" could remove .git/refs/heads/foo
   once there no longer is any other branch whose name begins with
   "foo/", but we didn't do so so far.  Now we do.

 * When "git merge" detects a path that is renamed in one history
   while the other history deleted (or modified) it, it now reports
   both paths to help the user understand what is going on in the two
   histories being merged.

 * The <url> part in "http.<url>.<variable>" configuration variable
   can now be spelled with '*' that serves as wildcard.
   E.g. "http.https://*.example.com.proxy" can be used to specify the
   proxy used for https://a.example.com, https://b.example.com, etc.,
   i.e. any host in the example.com domain.

 * "git tag" did not leave useful message when adding a new entry to
   reflog; this was left unnoticed for a long time because refs/tags/*
   doesn't keep reflog by default.

 * The "negative" pathspec feature was somewhat more cumbersome to use
   than necessary in that its short-hand used "!" which needed to be
   escaped from shells, and it required "exclude from what?" specified.

 * The command line options for ssh invocation needs to be tweaked for
   some implementations of SSH (e.g. PuTTY plink wants "-P <port>"
   while OpenSSH wants "-p <port>" to specify port to connect to), and
   the variant was guessed when GIT_SSH environment variable is used
   to specify it.  The logic to guess now applies to the command
   specified by the newer GIT_SSH_COMMAND and also core.sshcommand
   configuration variable, and comes with an escape hatch for users to
   deal with misdetected cases.

 * The "--git-path", "--git-common-dir", and "--shared-index-path"
   options of "git rev-parse" did not produce usable output.  They are
   now updated to show the path to the correct file, relative to where
   the caller is.

 * "git diff -W" has been taught to handle the case where a new
   function is added at the end of the file better.

 * "git update-ref -d" and other operations to delete references did
   not leave any entry in HEAD's reflog when the reference being
   deleted was the current branch.  This is not a problem in practice
   because you do not want to delete the branch you are currently on,
   but caused renaming of the current branch to something else not to
   be logged in a useful way.

 * "Cc:" on the trailer part does not have to conform to RFC strictly,
   unlike in the e-mail header.  "git send-email" has been updated to
   ignore anything after '>' when picking addresses, to allow non-address
   cruft like " # stable 4.4" after the address.

 * When "git submodule init" decides that the submodule in the working
   tree is its upstream, it now gives a warning as it is not a very
   common setup.

 * "git stash push" takes a pathspec so that the local changes can be
   stashed away only partially.

 * Documentation for "git ls-files" did not refer to core.quotePath.

 * The experimental "split index" feature has gained a few
   configuration variables to make it easier to use.

 * From a working tree of a repository, a new option of "rev-parse"
   lets you ask if the repository is used as a submodule of another
   project, and where the root level of the working tree of that
   project (i.e. your superproject) is.

 * The pathspec mechanism learned to further limit the paths that
   match the pattern to those that have specified attributes attached
   via the gitattributes mechanism.

 * Our source code has used the SHA1_HEADER cpp macro after "#include"
   in the C code to switch among the SHA-1 implementations. Instead,
   list the exact header file names and switch among implementations
   using "#ifdef BLK_SHA1/#include "block-sha1/sha1.h"/.../#endif";
   this helps some IDE tools.

 * The start-up sequence of "git" needs to figure out some configured
   settings before it finds and set itself up in the location of the
   repository and was quite messy due to its "chicken-and-egg" nature.
   The code has been restructured.

 * The command line prompt (in contrib/) learned a new 'tag' style
   that can be specified with GIT_PS1_DESCRIBE_STYLE, to describe a
   detached HEAD with "git describe --tags".

 * The configuration file learned a new "includeIf.<condition>.path"
   that includes the contents of the given path only when the
   condition holds.  This allows you to say "include this work-related
   bit only in the repositories under my ~/work/ directory".

 * Recent update to "rebase -i" started showing a message that is not
   a warning with "warning:" prefix by mistake.  This has been fixed.

 * Recently we started passing the "--push-options" through the
   external remote helper interface; now the "smart HTTP" remote
   helper understands what to do with the passed information.

 * "git describe --dirty" dies when it cannot be determined if the
   state in the working tree matches that of HEAD (e.g. broken
   repository or broken submodule).  The command learned a new option
   "git describe --broken" to give "$name-broken" (where $name is the
   description of HEAD) in such a case.

 * "git checkout" is taught the "--recurse-submodules" option.

 * Recent enhancement to "git stash push" command to support pathspec
   to allow only a subset of working tree changes to be stashed away
   was found to be too chatty and exposed the internal implementation
   detail (e.g. when it uses reset to match the index to HEAD before
   doing other things, output from reset seeped out).  These, and
   other chattyness has been fixed.

 * "git merge <message> HEAD <commit>" syntax that has been deprecated
   since October 2007 has been removed.

 * The refs completion for large number of refs has been sped up,
   partly by giving up disambiguating ambiguous refs and partly by
   eliminating most of the shell processing between 'git for-each-ref'
   and 'ls-remote' and Bash's completion facility.

 * On many keyboards, typing "@{" involves holding down SHIFT key and
   one can easily end up with "@{Up..." when typing "@{upstream}".  As
   the upstream/push keywords do not appear anywhere else in the syntax,
   we can safely accept them case insensitively without introducing
   ambiguity or confusion to solve this.

 * "git tag/branch/for-each-ref" family of commands long allowed to
   filter the refs by "--contains X" (show only the refs that are
   descendants of X), "--merged X" (show only the refs that are
   ancestors of X), "--no-merged X" (show only the refs that are not
   ancestors of X).  One curious omission, "--no-contains X" (show
   only the refs that are not descendants of X) has been added to
   them.

 * The default behaviour of "git log" in an interactive session has
   been changed to enable "--decorate".

 * The output from "git status --short" has been extended to show
   various kinds of dirtyness in submodules differently; instead of to
   "M" for modified, 'm' and '?' can be shown to signal changes only
   to the working tree of the submodule but not the commit that is
   checked out.

 * Allow the http.postbuffer configuration variable to be set to a
   size that can be expressed in size_t, which can be larger than
   ulong on some platforms.

 * "git rebase" learns "--signoff" option.

 * The completion script (in contrib/) learned to complete "git push
   --delete b<TAB>" to complete branch name to be deleted.

 * "git worktree add --lock" allows to lock a worktree immediately
   after it's created. This helps prevent a race between "git worktree
   add; git worktree lock" and "git worktree prune".

 * Completion for "git checkout <branch>" that auto-creates the branch
   out of a remote tracking branch can now be disabled, as this
   completion often gets in the way when completing to checkout an
   existing local branch that happens to share the same prefix with
   bunch of remote tracking branches.


Performance, Internal Implementation, Development Support etc.

 * The code to list branches in "git branch" has been consolidated
   with the more generic ref-filter API.

 * Resource usage while enumerating refs from alternate object store
   has been optimized to help receiving end of "push" that hosts a
   repository with many "forks".

 * The gitattributes machinery is being taught to work better in a
   multi-threaded environment.

 * "git rebase -i" starts using the recently updated "sequencer" code.

 * Code and design clean-up for the refs API.

 * The preload-index code has been taught not to bother with the index
   entries that are paths that are not checked out by "sparse checkout".

 * Some warning() messages from "git clean" were updated to show the
   errno from failed system calls.

 * The "parse_config_key()" API function has been cleaned up.

 * A test that creates a confusing branch whose name is HEAD has been
   corrected not to do so.

 * The code that parses header fields in the commit object has been
   updated for (micro)performance and code hygiene.

 * An helper function to make it easier to append the result from
   real_path() to a strbuf has been added.

 * Reduce authentication round-trip over HTTP when the server supports
   just a single authentication method.  This also improves the
   behaviour when Git is misconfigured to enable http.emptyAuth
   against a server that does not authenticate without a username
   (i.e. not using Kerberos etc., which makes http.emptyAuth
   pointless).

 * Windows port wants to use OpenSSL's implementation of SHA-1
   routines, so let them.

 * The t/perf performance test suite was not prepared to test not so
   old versions of Git, but now it covers versions of Git that are not
   so ancient.

 * Add 32-bit Linux variant to the set of platforms to be tested with
   Travis CI.

 * "git branch --list" takes the "--abbrev" and "--no-abbrev" options
   to control the output of the object name in its "-v"(erbose)
   output, but a recent update started ignoring them; fix it before
   the breakage reaches to any released version.

 * Picking two versions of Git and running tests to make sure the
   older one and the newer one interoperate happily has now become
   possible.

 * "git tag --contains" used to (ab)use the object bits to keep track
   of the state of object reachability without clearing them after
   use; this has been cleaned up and made to use the newer commit-slab
   facility.

 * The "debug" helper used in the test framework learned to run
   a command under "gdb" interactively.

 * The "detect attempt to create collisions" variant of SHA-1
   implementation by Marc Stevens (CWI) and Dan Shumow (Microsoft)
   has been integrated and made the default.

 * The test framework learned to detect unterminated here documents.

 * The name-hash used for detecting paths that are different only in
   cases (which matter on case insensitive filesystems) has been
   optimized to take advantage of multi-threading when it makes sense.

 * An earlier version of sha1dc/sha1.c that was merged to 'master'
   compiled incorrectly on Windows, which has been fixed.

 * "what URL do we want to update this submodule?" and "are we
   interested in this submodule?" are split into two distinct
   concepts, and then the way used to express the latter got extended,
   paving a way to make it easier to manage a project with many
   submodules and make it possible to later extend use of multiple
   worktrees for a project with submodules.

 * Some debugging output from "git describe" were marked for l10n,
   but some weren't.  Mark missing ones for l10n.

 * Define a new task in .travis.yml that triggers a test session on
   Windows run elsewhere.

 * Conversion from uchar[20] to struct object_id continues.

 * The "submodule" specific field in the ref_store structure is
   replaced with a more generic "gitdir" that can later be used also
   when dealing with ref_store that represents the set of refs visible
   from the other worktrees.

 * The string-list API used a custom reallocation strategy that was
   very inefficient, instead of using the usual ALLOC_GROW() macro,
   which has been fixed.
   (merge 950a234cbd jh/string-list-micro-optim later to maint).

 * In a 2- and 3-way merge of trees, more than one source trees often
   end up sharing an identical subtree; optimize by not reading the
   same tree multiple times in such a case.
   (merge d12a8cf0af jh/unpack-trees-micro-optim later to maint).

 * The index file has a trailing SHA-1 checksum to detect file
   corruption, and historically we checked it every time the index
   file is used.  Omit the validation during normal use, and instead
   verify only in "git fsck".

 * Having a git command on the upstream side of a pipe in a test
   script will hide the exit status from the command, which may cause
   us to fail to notice a breakage; rewrite tests in a script to avoid
   this issue.

 * Travis CI learns to run coccicheck.

 * "git checkout" that handles a lot of paths has been optimized by
   reducing the number of unnecessary checks of paths in the
   has_dir_name() function.

 * The internals of the refs API around the cached refs has been
   streamlined.

 * Output from perf tests have been updated to align their titles.

Also contains various documentation updates and code clean-ups.


Fixes since v2.12
-----------------

Unless otherwise noted, all the fixes since v2.12 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * "git repack --depth=<n>" for a long time busted the specified depth
   when reusing delta from existing packs.  This has been corrected.

 * The code to parse the command line "git grep <patterns>... <rev>
   [[--] <pathspec>...]" has been cleaned up, and a handful of bugs
   have been fixed (e.g. we used to check "--" if it is a rev).

 * "git ls-remote" and "git archive --remote" are designed to work
   without being in a directory under Git's control.  However, recent
   updates revealed that we randomly look into a directory called
   .git/ without actually doing necessary set-up when working in a
   repository.  Stop doing so.

 * "git show-branch" expected there were only very short branch names
   in the repository and used a fixed-length buffer to hold them
   without checking for overflow.

 * A caller of tempfile API that uses stdio interface to write to
   files may ignore errors while writing, which is detected when
   tempfile is closed (with a call to ferror()).  By that time, the
   original errno that may have told us what went wrong is likely to
   be long gone and was overwritten by an irrelevant value.
   close_tempfile() now resets errno to EIO to make errno at least
   predictable.

 * "git remote rm X", when a branch has remote X configured as the
   value of its branch.*.remote, tried to remove branch.*.remote and
   branch.*.merge and failed if either is unset.

 * A "gc.log" file left by a backgrounded "gc --auto" disables further
   automatic gc; it has been taught to run at least once a day (by
   default) by ignoring a stale "gc.log" file that is too old.

 * The code to parse "git -c VAR=VAL cmd" and set configuration
   variable for the duration of cmd had two small bugs, which have
   been fixed.

 * user.email that consists of only cruft chars should consistently
   error out, but didn't.

 * "git upload-pack", which is a counter-part of "git fetch", did not
   report a request for a ref that was not advertised as invalid.
   This is generally not a problem (because "git fetch" will stop
   before making such a request), but is the right thing to do.

 * A leak in a codepath to read from a packed object in (rare) cases
   has been plugged.

 * When a redirected http transport gets an error during the
   redirected request, we ignored the error we got from the server,
   and ended up giving a not-so-useful error message.

 * The patch subcommand of "git add -i" was meant to have paths
   selection prompt just like other subcommand, unlike "git add -p"
   directly jumps to hunk selection.  Recently, this was broken and
   "add -i" lost the paths selection dialog, but it now has been
   fixed.

 * Git v2.12 was shipped with an embarrassing breakage where various
   operations that verify paths given from the user stopped dying when
   seeing an issue, and instead later triggering segfault.

 * There is no need for Python only to give a few messages to the
   standard error stream, but we somehow did.

 * The code to parse "git log -L..." command line was buggy when there
   are many ranges specified with -L; overrun of the allocated buffer
   has been fixed.

 * The command-line parsing of "git log -L" copied internal data
   structures using incorrect size on ILP32 systems.

 * "git diff --quiet" relies on the size field in diff_filespec to be
   correctly populated, but diff_populate_filespec() helper function
   made an incorrect short-cut when asked only to populate the size
   field for paths that need to go through convert_to_git() (e.g. CRLF
   conversion).

 * A few tests were run conditionally under (rare) conditions where
   they cannot be run (like running cvs tests under 'root' account).

 * "git branch @" created refs/heads/@ as a branch, and in general the
   code that handled @{-1} and @{upstream} was a bit too loose in
   disambiguating.

 * "git fetch" that requests a commit by object name, when the other
   side does not allow such an request, failed without much
   explanation.

 * "git filter-branch --prune-empty" drops a single-parent commit that
   becomes a no-op, but did not drop a root commit whose tree is empty.

 * Recent versions of Git treats http alternates (used in dumb http
   transport) just like HTTP redirects and requires the client to
   enable following it, due to security concerns.  But we forgot to
   give a warning when we decide not to honor the alternates.

 * "git push" had a handful of codepaths that could lead to a deadlock
   when unexpected error happened, which has been fixed.

 * "Dumb http" transport used to misparse a nonsense http-alternates
   response, which has been fixed.

 * "git add -p <pathspec>" unnecessarily expanded the pathspec to a
   list of individual files that matches the pathspec by running "git
   ls-files <pathspec>", before feeding it to "git diff-index" to see
   which paths have changes, because historically the pathspec
   language supported by "diff-index" was weaker.  These days they are
   equivalent and there is no reason to internally expand it.  This
   helps both performance and avoids command line argument limit on
   some platforms.
   (merge 7288e12cce jk/add-i-use-pathspecs later to maint).

 * "git status --porcelain" is supposed to give a stable output, but a
   few strings were left as translatable by mistake.

 * "git revert -m 0 $merge_commit" complained that reverting a merge
   needs to say relative to which parent the reversion needs to
   happen, as if "-m 0" weren't given.  The correct diagnosis is that
   "-m 0" does not refer to the first parent ("-m 1" does).  This has
   been fixed.

 * Code to read submodule.<name>.ignore config did not state the
   variable name correctly when giving an error message diagnosing
   misconfiguration.

 * Fix for NO_PTHREADS build.

 * Fix for potential segv introduced in v2.11.0 and later (also
   v2.10.2) to "git log --pickaxe-regex -S".

 * A few unterminated here documents in tests were fixed, which in
   turn revealed incorrect expectations the tests make. These tests
   have been updated.

 * Fix for NO_PTHREADS option.
   (merge 2225e1ea20 bw/grep-recurse-submodules later to maint).

 * Git now avoids blindly falling back to ".git" when the setup
   sequence said we are _not_ in Git repository.  A corner case that
   happens to work right now may be broken by a call to die("BUG").
   (merge b1ef400eec jk/no-looking-at-dotgit-outside-repo-final later to maint).

 * A few commands that recently learned the "--recurse-submodule"
   option misbehaved when started from a subdirectory of the
   superproject.
   (merge b2dfeb7c00 bw/recurse-submodules-relative-fix later to maint).

 * FreeBSD implementation of getcwd(3) behaved differently when an
   intermediate directory is unreadable/unsearchable depending on the
   length of the buffer provided, which our strbuf_getcwd() was not
   aware of.  strbuf_getcwd() has been taught to cope with it better.
   (merge a54e938e5b rs/freebsd-getcwd-workaround later to maint).

 * A recent update to "rebase -i" stopped running hooks for the "git
   commit" command during "reword" action, which has been fixed.

 * Removing an entry from a notes tree and then looking another note
   entry from the resulting tree using the internal notes API
   functions did not work as expected.  No in-tree users of the API
   has such access pattern, but it still is worth fixing.

 * "git receive-pack" could have been forced to die by attempting
   allocate an unreasonably large amount of memory with a crafted push
   certificate; this has been fixed.
   (merge f2214dede9 bc/push-cert-receive-fix later to maint).

 * Update error handling for codepath that deals with corrupt loose
   objects.
   (merge 51054177b3 jk/loose-object-info-report-error later to maint).

 * "git diff --submodule=diff" learned to work better in a project
   with a submodule that in turn has its own submodules.
   (merge 17b254cda6 sb/show-diff-for-submodule-in-diff-fix later to maint).

 * Update the build dependency so that an update to /usr/bin/perl
   etc. result in recomputation of perl.mak file.
   (merge c59c4939c2 ab/regen-perl-mak-with-different-perl later to maint).

 * "git push --recurse-submodules --push-option=<string>" learned to
   propagate the push option recursively down to pushes in submodules.

 * If a patch e-mail had its first paragraph after an in-body header
   indented (even after a blank line after the in-body header line),
   the indented line was mistook as a continuation of the in-body
   header.  This has been fixed.
   (merge fd1062e52e lt/mailinfo-in-body-header-continuation later to maint).

 * Clean up fallouts from recent tightening of the set-up sequence,
   where Git barfs when repository information is accessed without
   first ensuring that it was started in a repository.
   (merge bccb22cbb1 jk/no-looking-at-dotgit-outside-repo later to maint).

 * "git p4" used "name-rev HEAD" when it wants to learn what branch is
   checked out; it should use "symbolic-ref HEAD".
   (merge eff451101d ld/p4-current-branch-fix later to maint).

 * "http.proxy" set to an empty string is used to disable the usage of
   proxy.  We broke this early last year.
   (merge ae51d91105 sr/http-proxy-configuration-fix later to maint).

 * $GIT_DIR may in some cases be normalized with all symlinks resolved
   while "gitdir" path expansion in the pattern does not receive the
   same treatment, leading to incorrect mismatch.  This has been fixed.

 * "git submodule" script does not work well with strange pathnames.
   Protect it from a path with slashes in them, at least.

 * "git fetch-pack" was not prepared to accept ERR packet that the
   upload-pack can send with a human-readable error message.  It
   showed the packet contents with ERR prefix, so there was no data
   loss, but it was redundant to say "ERR" in an error message.
   (merge 8e2c7bef03 jt/fetch-pack-error-reporting later to maint).

 * "ls-files --recurse-submodules" did not quite work well in a
   project with nested submodules.

 * gethostname(2) may not NUL terminate the buffer if hostname does
   not fit; unfortunately there is no easy way to see if our buffer
   was too small, but at least this will make sure we will not end up
   using garbage past the end of the buffer.
   (merge 5781a9a270 dt/xgethostname-nul-termination later to maint).

 * A recent update broke "git add -p ../foo" from a subdirectory.

 * While handy, "git_path()" is a dangerous function to use as a
   callsite that uses it safely one day can be broken by changes
   to other code that calls it.  Reduction of its use continues.
   (merge 16d2676c9e jk/war-on-git-path later to maint).

 * The split-index code configuration code used an unsafe git_path()
   function without copying its result out.

 * Many stale HTTP(s) links have been updated in our documentation.
   (merge 613416f0be jk/update-links-in-docs later to maint).

 * Other minor doc, test and build updates and code cleanups.
   (merge df2a6e38b7 jk/pager-in-use later to maint).
   (merge 75ec4a6cb0 ab/branch-list-doc later to maint).
   (merge 3e5b36c637 sg/skip-prefix-in-prettify-refname later to maint).
   (merge 2c5e2865cc jk/fast-import-cleanup later to maint).
   (merge 4473060bc2 ab/test-readme-updates later to maint).
   (merge 48a96972fd ab/doc-submitting later to maint).
   (merge f5c2bc2b96 jk/make-coccicheck-detect-errors later to maint).
   (merge c105f563d1 cc/untracked later to maint).
   (merge 8668976b53 jc/unused-symbols later to maint).
   (merge fba275dc93 jc/bs-t-is-not-a-tab-for-sed later to maint).
   (merge be6ed145de mm/ls-files-s-doc later to maint).
   (merge 60b091c679 qp/bisect-docfix later to maint).
   (merge 47242cd103 ah/diff-files-ours-theirs-doc later to maint).
   (merge 35ad44cbd8 sb/submodule-rm-absorb later to maint).
   (merge 0301f1fd92 va/i18n-perl-scripts later to maint).
   (merge 733e064d98 vn/revision-shorthand-for-side-branch-log later to maint).
   (merge 85999743e7 tb/doc-eol-normalization later to maint).
   (merge 0747fb49fd jk/loose-object-fsck later to maint).
   (merge d8f4481c4f jk/quarantine-received-objects later to maint).
   (merge 7ba1ceef95 xy/format-patch-base later to maint).
   (merge fa1912c89a rs/misc-cppcheck-fixes later to maint).
   (merge f17d642d3b ab/push-cas-doc-n-test later to maint).
   (merge 61e282425a ss/gitmodules-ignore-doc later to maint).
   (merge 8d3047cd5b ss/submodule-shallow-doc later to maint).
   (merge 1f9e18b772 jk/prio-queue-avoid-swap-with-self later to maint).
   (merge 627fde1025 jk/submodule-init-segv-fix later to maint).
   (merge d395745d81 rg/doc-pull-typofix later to maint).
   (merge 01e60a9a22 rg/doc-submittingpatches-wordfix later to maint).
   (merge 501d3cd7b8 sr/hooks-cwd-doc later to maint).

----------------------------------------------------------------

Changes since v2.12.0 are as follows:

Alex Henrie (1):
      log: if --decorate is not given, default to --decorate=auto

Allan Xavier (1):
      line-log.c: prevent crash during union of too many ranges

Andreas Heiduk (2):
      Documentation: improve description for core.quotePath
      diff-files: document --ours etc.

Brandon Williams (37):
      attr: pass struct attr_check to collect_some_attrs
      attr: use hashmap for attribute dictionary
      attr: eliminate global check_all_attr array
      attr: remove maybe-real, maybe-macro from git_attr
      attr: tighten const correctness with git_attr and match_attr
      attr: store attribute stack in attr_check structure
      attr: push the bare repo check into read_attr()
      attr: reformat git_attr_set_direction() function
      pathspec: allow querying for attributes
      pathspec: allow escaped query values
      submodule--helper: add is-active subcommand
      submodule status: use submodule--helper is-active
      submodule sync: skip work for inactive submodules
      submodule sync: use submodule--helper is-active
      submodule--helper clone: check for configured submodules using helper
      grep: fix help text typo
      setup: allow for prefix to be passed to git commands
      grep: fix bug when recursing with relative pathspec
      ls-files: fix typo in variable name
      ls-files: fix bug when recursing with relative pathspec
      grep: set default output method
      submodule: decouple url and submodule interest
      submodule init: initialize active submodules
      clone: teach --recurse-submodules to optionally take a pathspec
      submodule--helper init: set submodule.<name>.active
      submodule add: respect submodule.active and submodule.<name>.active
      grep: fix builds with with no thread support
      send-pack: send push options correctly in stateless-rpc case
      remote-curl: allow push options
      sequencer: fix missing newline
      push: unmark a local variable as static
      push: propagate push-options with --recurse-submodules
      remote: expose parse_push_refspec function
      submodule--helper: add push-check subcommand
      push: propagate remote and refspec with --recurse-submodules
      pathspec: fix segfault in clear_pathspec
      submodule: prevent backslash expantion in submodule names

Christian Couder (25):
      config: mark an error message up for translation
      t1700: change here document style
      config: add git_config_get_split_index()
      split-index: add {add,remove}_split_index() functions
      read-cache: add and then use tweak_split_index()
      update-index: warn in case of split-index incoherency
      t1700: add tests for core.splitIndex
      Documentation/config: add information for core.splitIndex
      Documentation/git-update-index: talk about core.splitIndex config var
      config: add git_config_get_max_percent_split_change()
      read-cache: regenerate shared index if necessary
      t1700: add tests for splitIndex.maxPercentChange
      Documentation/config: add splitIndex.maxPercentChange
      sha1_file: make check_and_freshen_file() non static
      read-cache: touch shared index files when used
      config: add git_config_get_expiry() from gc.c
      read-cache: unlink old sharedindex files
      t1700: test shared index file expiration
      read-cache: refactor read_index_from()
      read-cache: use freshen_shared_index() in read_index_from()
      Documentation/config: add splitIndex.sharedIndexExpire
      Documentation/git-update-index: explain splitIndex.*
      update-index: fix xgetcwd() related memory leak
      p0004: make perf test executable
      read-cache: avoid using git_path() in freshen_shared_index()

Cornelius Weig (1):
      tag: generate useful reflog message

David Aguilar (3):
      t7800: remove whitespace before redirect
      t7800: cleanup cruft left behind by tests
      difftool: handle modified symlinks in dir-diff mode

David Turner (3):
      gc: ignore old gc.log files
      http.postbuffer: allow full range of ssize_t values
      xgethostname: handle long hostnames

Devin J. Pohly (4):
      t7003: ensure --prune-empty can prune root commit
      t7003: ensure --prune-empty removes entire branch when applicable
      filter-branch: fix --prune-empty on parentless commits
      p7000: add test for filter-branch with --prune-empty

Devin Lehmacher (3):
      path.c: add xdg_cache_home
      credential-cache: use XDG_CACHE_HOME for socket
      credential-cache: add tests for XDG functionality

Eric Wong (3):
      README: create HTTP/HTTPS links from URLs in Markdown
      http: inform about alternates-as-redirects behavior
      http: release strbuf on disabled alternates

Giuseppe Bilotta (4):
      builtin/am: honor --signoff also when --rebasing
      builtin/am: fold am_signoff() into am_append_signoff()
      doc: trivial typo in git-format-patch.txt
      rebase: pass --[no-]signoff option to git am

Hiroshi Shirosaki (1):
      git svn: fix authentication with 'branch'

Jacob Keller (7):
      doc: add documentation for OPT_STRING_LIST
      name-rev: extend --refs to accept multiple patterns
      name-rev: add support to exclude refs by pattern match
      describe: teach --match to accept multiple patterns
      describe: teach describe negative pattern matches
      ls-files: fix recurse-submodules with nested submodules
      ls-files: fix path used when recursing into submodules

Jean-Noel Avila (1):
      i18n: remove i18n from tag reflog message

Jeff Hostetler (18):
      mingw: use OpenSSL's SHA-1 routines
      preload-index: avoid lstat for skip-worktree items
      name-hash: specify initial size for istate.dir_hash table
      hashmap: allow memihash computation to be continued
      hashmap: add disallow_rehash setting
      hashmap: document memihash_cont, hashmap_disallow_rehash api
      name-hash: perf improvement for lazy_init_name_hash
      name-hash: add test-lazy-init-name-hash
      name-hash: add perf test for lazy_init_name_hash
      test-online-cpus: helper to return cpu count
      read-cache: force_verify_index_checksum
      string-list: use ALLOC_GROW macro when reallocing string_list
      read-cache: add strcmp_offset function
      unpack-trees: avoid duplicate ODB lookups during checkout
      p0006-read-tree-checkout: perf test to time read-tree
      read-cache: speed up add_index_entry during checkout
      read-cache: speed up has_dir_name (part 1)
      read-cache: speed up has_dir_name (part 2)

Jeff King (131):
      setup_git_env: avoid blind fall-back to ".git"
      pack-objects: enforce --depth limit in reused deltas
      pack-objects: convert recursion to iteration in break_delta_chain()
      for_each_alternate_ref: handle failure from real_pathdup()
      for_each_alternate_ref: stop trimming trailing slashes
      for_each_alternate_ref: use strbuf for path allocation
      for_each_alternate_ref: pass name/oid instead of ref struct
      for_each_alternate_ref: replace transport code with for-each-ref
      fetch-pack: cache results of for_each_alternate_ref
      add oidset API
      receive-pack: use oidset to de-duplicate .have lines
      receive-pack: fix misleading namespace/.have comment
      receive-pack: treat namespace .have lines like alternates
      receive-pack: avoid duplicates between our refs and alternates
      grep: move thread initialization a little lower
      grep: re-order rev-parsing loop
      grep: fix "--" rev/pathspec disambiguation
      grep: avoid resolving revision names in --no-index case
      grep: do not diagnose misspelt revs with --no-index
      show-branch: drop head_len variable
      show-branch: store resolved head in heap buffer
      remote: avoid reading $GIT_DIR config in non-repo
      grep: treat revs the same for --untracked as for --no-index
      show-branch: use skip_prefix to drop magic numbers
      tempfile: set errno to a known value before calling ferror()
      http: restrict auth methods to what the server advertises
      ident: mark error messages for translation
      ident: handle NULL email when complaining of empty name
      ident: reject all-crud ident name
      ident: do not ignore empty config name/email
      parse_config_key: use skip_prefix instead of starts_with
      parse_config_key: allow matching single-level config
      parse_hide_refs_config: tell parse_config_key we don't want a subsection
      http: add an "auto" mode for http.emptyauth
      t6300: avoid creating refs/heads/HEAD
      add--interactive: fix missing file prompt for patch mode with "-i"
      interpret_branch_name(): handle auto-namelen for @{-1}
      interpret_branch_name: move docstring to header file
      strbuf_branchname: drop return value
      strbuf_branchname: add docstring
      interpret_branch_name: allow callers to restrict expansions
      t3204: test git-branch @-expansion corner cases
      branch: restrict @-expansions when deleting
      strbuf_check_ref_format(): expand only local branches
      checkout: restrict @-expansions when finding branch
      t/perf: use $MODERN_GIT for all repo-copying steps
      t/perf: add fallback for pre-bin-wrappers versions of git
      ewah: fix eword_t/uint64_t confusion
      receive-pack: fix deadlock when we cannot create tmpdir
      send-pack: extract parsing of "unpack" response
      send-pack: use skip_prefix for parsing unpack status
      send-pack: improve unpack-status error messages
      send-pack: read "unpack" status even on pack-objects failure
      send-pack: report signal death of pack-objects
      ref-filter: move ref_cbdata definition into ref-filter.c
      ref-filter: use contains_result enum consistently
      ref-filter: die on parse_commit errors
      ref-filter: use separate cache for contains_tag_algo
      t: add an interoperability test harness
      t/interop: add test of old clients against modern git-daemon
      http-walker: fix buffer underflow processing remote alternates
      add--interactive: do not expand pathspecs with ls-files
      cherry-pick: detect bogus arguments to --mainline
      rev-parse: use skip_prefix when parsing options
      rev-parse: add helper for parsing "--foo/--foo="
      rev-parse: simplify parsing of ref options
      move odb_* declarations out of git-compat-util.h
      sha1_file.c: make pack-name helper globally accessible
      odb_pack_keep(): stop generating keepfile name
      replace snprintf with odb_pack_name()
      index-pack: make pointer-alias fallbacks safer
      sha1dc: add collision-detecting sha1 implementation
      sha1dc: adjust header includes for git
      sha1dc: disable safe_hash feature
      sequencer: drop "warning:" when stopping for edit
      Makefile: add DC_SHA1 knob
      t0013: add a basic sha1 collision detection test
      run-command: fix segfault when cleaning forked async process
      hash-object: fix buffer reuse with --path in a subdirectory
      prefix_filename: move docstring to header file
      prefix_filename: drop length parameter
      prefix_filename: return newly allocated string
      prefix_filename: simplify windows #ifdef
      bundle: use prefix_filename with bundle path
      pager_in_use: use git_env_bool()
      fast-import: use xsnprintf for writing sha1s
      fast-import: use xsnprintf for formatting headers
      encode_in_pack_object_header: respect output buffer length
      pack.h: define largest possible encoded object size
      do not check odb_mkstemp return value for errors
      odb_mkstemp: write filename into strbuf
      odb_mkstemp: use git_path_buf
      Makefile: detect errors in running spatch
      difftool: avoid strcpy
      diff: avoid fixed-size buffer for patch-ids
      tag: use strbuf to format tag header
      fetch: use heap buffer to format reflog
      avoid using fixed PATH_MAX buffers for refs
      avoid using mksnpath for refs
      create_branch: move msg setup closer to point of use
      create_branch: use xstrfmt for reflog message
      name-rev: replace static buffer with strbuf
      receive-pack: print --pack-header directly into argv array
      replace unchecked snprintf calls with heap buffers
      combine-diff: replace malloc/snprintf with xstrfmt
      convert unchecked snprintf into xsnprintf
      transport-helper: replace checked snprintf with xsnprintf
      gc: replace local buffer with git_path
      daemon: use an argv_array to exec children
      sha1_loose_object_info: return error for corrupted objects
      index-pack: detect local corruption in collision check
      connect.c: handle errors from split_cmdline
      receive-pack: drop tmp_objdir_env from run_update_hook
      receive-pack: document user-visible quarantine effects
      refs: reject ref updates while GIT_QUARANTINE_PATH is set
      bisect: add git_path_bisect_terms helper
      branch: add edit_description() helper
      use git_path_* helper functions
      replace xstrdup(git_path(...)) with git_pathdup(...)
      replace strbuf_addstr(git_path()) with git_path_buf()
      am: drop "dir" parameter from am_state_init
      connect.c: fix leak in handle_ssh_variant
      doc: use https links to avoid http redirect
      doc: replace or.cz gitwiki link with git.wiki.kernel.org
      gitcore-tutorial: update broken link
      docs/archimport: quote sourcecontrol.net reference
      docs/bisect-lk2009: update nist report link
      docs/bisect-lk2009: update java code conventions link
      completion: optionally disable checkout DWIM
      submodule_init: die cleanly on submodules without url defined
      prio_queue_reverse: don't swap elements with themselves

Johan Hovold (1):
      send-email: only allow one address per body tag

Johannes Schindelin (23):
      git_connect(): factor out SSH variant handling
      rebase--helper: add a builtin helper for interactive rebases
      rebase -i: use the rebase--helper builtin
      rev-parse: fix several options when running in a subdirectory
      t7006: replace dubious test
      Travis: also test on 32-bit Linux
      setup_git_directory(): use is_dir_sep() helper
      t1501: demonstrate NULL pointer access with invalid GIT_WORK_TREE
      real_pathdup(): fix callsites that wanted it to die on error
      setup: prepare setup_discovered_git_dir() for the root directory
      setup_git_directory_1(): avoid changing global state
      setup: introduce the discover_git_directory() function
      setup: make read_early_config() reusable
      read_early_config(): avoid .git/config hack when unneeded
      read_early_config(): really discover .git/
      t1309: test read_early_config()
      setup_git_directory_gently_1(): avoid die()ing
      t1309: document cases where we would want early config not to die()
      setup.c: mention unresolved problems
      t7504: document regression: reword no longer calls commit-msg
      sequencer: make commit options more extensible
      sequencer: allow the commit-msg hooks to run during a `reword`
      difftool: fix use-after-free

Jonathan Nieder (2):
      remote helpers: avoid blind fall-back to ".git" when setting GIT_DIR
      has_sha1_file: don't bother if we are not in a repository

Jonathan Tan (5):
      grep: do not unnecessarily query repo for "--"
      upload-pack: report "not our ref" to client
      http: attempt updating base URL only if no error
      t/perf: export variable used in other blocks
      fetch-pack: show clearer error message upon ERR

Junio C Hamano (56):
      merge: drop 'git merge <message> HEAD <commit>' syntax
      connect: rename tortoiseplink and putty variables
      commit.c: use strchrnul() to scan for one line
      attr.c: use strchrnul() to scan for one line
      attr.c: update a stale comment on "struct match_attr"
      attr.c: explain the lack of attr-name syntax check in parse_attr()
      attr.c: complete a sentence in a comment
      attr.c: mark where #if DEBUG ends more clearly
      attr.c: simplify macroexpand_one()
      attr.c: tighten constness around "git_attr" structure
      attr.c: plug small leak in parse_attr_line()
      attr.c: add push_stack() helper
      attr.c: outline the future plans by heavily commenting
      attr: rename function and struct related to checking attributes
      attr: (re)introduce git_check_attr() and struct attr_check
      attr: convert git_all_attrs() to use "struct attr_check"
      attr: convert git_check_attrs() callers to use the new API
      attr: retire git_check_attrs() API
      attr: change validity check for attribute names to use positive logic
      ref-filter: resurrect "strip" as a synonym to "lstrip"
      connect.c: stop conflating ssh command names and overrides
      config: move a few helper functions up
      config: use git_config_parse_key() in git_config_parse_parameter()
      First batch after 2.12
      diff: do not short-cut CHECK_SIZE_ONLY check in diff_populate_filespec()
      branch: honor --abbrev/--no-abbrev in --list mode
      Second batch after 2.12
      Third batch after 2.12
      Fourth batch after 2.12
      Preparing for 2.12.1
      Makefile: make DC_SHA1 the default
      Fifth batch for 2.13
      Git 2.12.1
      Prepare for 2.12.2
      Sixth batch for 2.13
      t5615: fix a here-doc syntax error
      t7406: correct test case for submodule-update initial population
      tests: lint for run-away here-doc
      branch doc: update description for `--list`
      Git 2.12.2
      Seventh batch for 2.13
      sha1dc: avoid CPP macro collisions
      Eighth batch for 2.13
      Prepare for 2.12.3
      Ninth batch for 2.13
      Tenth batch for 2.13
      remote.[ch]: parse_push_cas_option() can be static
      contrib/git-resurrect.sh: do not write \t for HT in sed scripts
      Eleventh batch for 2.13
      Twelfth batch for 2.13
      replace: plug a memory leak
      Git 2.13-rc0
      Getting ready for -rc1
      Git 2.13-rc1
      Merging a handful of topics before -rc2
      Git 2.13-rc2

Karthik Nayak (20):
      ref-filter: implement %(if), %(then), and %(else) atoms
      ref-filter: include reference to 'used_atom' within 'atom_value'
      ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>)
      ref-filter: modify "%(objectname:short)" to take length
      ref-filter: move get_head_description() from branch.c
      ref-filter: introduce format_ref_array_item()
      ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreams
      ref-filter: add support for %(upstream:track,nobracket)
      ref-filter: make "%(symref)" atom work with the ':short' modifier
      ref-filter: introduce refname_atom_parser_internal()
      ref-filter: introduce refname_atom_parser()
      ref-filter: make remote_ref_atom_parser() use refname_atom_parser_internal()
      ref-filter: rename the 'strip' option to 'lstrip'
      ref-filter: Do not abruptly die when using the 'lstrip=<N>' option
      ref-filter: modify the 'lstrip=<N>' option to work with negative '<N>'
      ref-filter: add an 'rstrip=<N>' option to atoms which deal with refnames
      ref-filter: allow porcelain to translate messages in the output
      branch, tag: use porcelain output
      branch: use ref-filter printing APIs
      branch: implement '--format' option

Kevin Willford (2):
      name-hash: fix buffer overrun
      t3008: skip lazy-init test on a single-core box

Kyle Meyer (12):
      delete_ref: accept a reflog message argument
      update-ref: pass reflog message to delete_ref()
      rename_ref: replace empty message in HEAD's log
      branch: record creation of renamed branch in HEAD's log
      t1400: rename test descriptions to be unique
      t1400: set core.logAllRefUpdates in "logged by touch" tests
      t1400: use test_path_is_* helpers
      t1400: remove a set of unused output files
      t1400: use test_when_finished for cleanup
      doc/config: grammar fixes for core.{editor,commentChar}
      doc/revisions: remove brackets from rev^-n shorthand
      t1400: use consistent style for test_expect_success calls

Lars Schneider (4):
      travis-ci: build and test Git on Windows
      travis-ci: add static analysis build job to run coccicheck
      travis-ci: printf $STATUS as string
      travis-ci: set DEVELOPER knob for Linux32 build

Linus Torvalds (3):
      pathspec magic: add '^' as alias for '!'
      pathspec: don't error out on all-exclusionary pathspec patterns
      mailinfo: fix in-body header continuations

Luke Diamand (3):
      git-p4: add failing test for name-rev rather than symbolic-ref
      git-p4: add read_pipe_text() internal function
      git-p4: don't use name-rev to get current branch

Matt McCutchen (4):
      merge-recursive: make "CONFLICT (rename/delete)" message show both paths
      fetch-pack: move code to report unmatched refs to a function
      fetch_refs_via_pack: call report_unmatched_refs
      fetch-pack: add specific error for fetching an unadvertised object

Maxim Moseychuk (2):
      stop_progress_msg: convert xsnprintf to xstrfmt
      bisect_next_all: convert xsnprintf to xstrfmt

Michael Haggerty (52):
      files_rename_ref(): tidy up whitespace
      refname_is_safe(): correct docstring
      t5505: use "for-each-ref" to test for the non-existence of references
      safe_create_leading_directories_const(): preserve errno
      safe_create_leading_directories(): set errno on SCLD_EXISTS
      raceproof_create_file(): new function
      lock_ref_sha1_basic(): inline constant
      lock_ref_sha1_basic(): use raceproof_create_file()
      rename_tmp_log(): use raceproof_create_file()
      rename_tmp_log(): improve error reporting
      log_ref_write(): inline function
      log_ref_setup(): separate code for create vs non-create
      log_ref_setup(): improve robustness against races
      log_ref_setup(): pass the open file descriptor back to the caller
      log_ref_write_1(): don't depend on logfile argument
      log_ref_setup(): manage the name of the reflog file internally
      log_ref_write_1(): inline function
      delete_ref_loose(): derive loose reference path from lock
      delete_ref_loose(): inline function
      try_remove_empty_parents(): rename parameter "name" -> "refname"
      try_remove_empty_parents(): don't trash argument contents
      try_remove_empty_parents(): teach to remove parents of reflogs, too
      files_transaction_commit(): clean up empty directories
      refs: reorder some function definitions
      refs: make some ref_store lookup functions private
      refs: remove some unnecessary handling of submodule == ""
      register_ref_store(): new function
      refs: store submodule ref stores in a hashmap
      refs: push the submodule attribute down
      base_ref_store_init(): remove submodule argument
      files_ref_store::submodule: use NULL for the main repository
      read_loose_refs(): read refs using resolve_ref_recursively()
      get_ref_dir(): don't call read_loose_refs() for "refs/bisect"
      refs_read_raw_ref(): new function
      refs_ref_iterator_begin(): new function
      refs_verify_refname_available(): implement once for all backends
      refs_verify_refname_available(): use function in more places
      ref-cache: rename `add_ref()` to `add_ref_entry()`
      ref-cache: rename `find_ref()` to `find_ref_entry()`
      ref-cache: rename `remove_entry()` to `remove_entry_from_dir()`
      refs: split `ref_cache` code into separate files
      ref-cache: introduce a new type, ref_cache
      refs: record the ref_store in ref_cache, not ref_dir
      ref-cache: use a callback function to fill the cache
      refs: handle "refs/bisect/" in `loose_fill_ref_dir()`
      do_for_each_entry_in_dir(): eliminate `offset` argument
      get_loose_ref_dir(): function renamed from get_loose_refs()
      get_loose_ref_cache(): new function
      cache_ref_iterator_begin(): make function smarter
      commit_packed_refs(): use reference iteration
      files_pack_refs(): use reference iteration
      do_for_each_entry_in_dir(): delete function

Michael J Gruber (5):
      git-status: make porcelain more robust
      git-prompt: add a describe style for any tags
      mailmap: use Michael J Gruber's new address
      describe: localize debug output fully
      l10n: de: translate describe debug terms

Michael Rappazzo (1):
      rev-parse tests: add tests executed from a subdirectory

Mike Hommey (1):
      notes: do not break note_tree structure in note_tree_consolidate()

Mostyn Bramley-Moore (1):
      Documentation: document elements in "ls-files -s" output in order

Nguyễn Thái Ngọc Duy (40):
      attr: support quoting pathname patterns in C style
      clean: use warning_errno() when appropriate
      config.txt: clarify multiple key values in include.path
      config.txt: reflow the second include.path paragraph
      config: add conditional include
      refs.h: add forward declaration for structs used in this file
      git-commit.txt: list post-rewrite in HOOKS section
      files-backend: make files_log_ref_write() static
      files-backend.c: delete dead code in files_ref_iterator_begin()
      files-backend: delete dead code in files_init_db()
      files-backend: add and use files_packed_refs_path()
      files-backend: make sure files_rename_ref() always reach the end
      files-backend: convert git_path() to strbuf_git_path()
      files-backend: move "logs/" out of TMP_RENAMED_LOG
      files-backend: add and use files_reflog_path()
      files-backend: add and use files_ref_path()
      files-backend: remove the use of git_path()
      refs.c: introduce get_main_ref_store()
      refs: rename lookup_ref_store() to lookup_submodule_ref_store()
      refs.c: flatten get_ref_store() a bit
      refs.c: kill register_ref_store(), add register_submodule_ref_store()
      refs.c: make get_main_ref_store() public and use it
      path.c: move some code out of strbuf_git_path_submodule()
      refs: move submodule code out of files-backend.c
      files-backend: replace submodule_allowed check in files_downcast()
      refs: rename get_ref_store() to get_submodule_ref_store() and make it public
      refs: add new ref-store api
      refs: new transaction related ref-store api
      files-backend: avoid ref api targeting main ref store
      refs: delete pack_refs() in favor of refs_pack_refs()
      t/helper: add test-ref-store to test ref-store functions
      t1405: some basic tests on main ref store
      t1406: new tests for submodule ref store
      refs.h: add a note about sorting order of for_each_ref_*
      path.c: and an option to call real_path() in expand_user_path()
      config: resolve symlinks in conditional include's patterns
      config: prepare to pass more info in git_config_with_options()
      config: handle conditional include when $GIT_DIR is not set up
      config: correct file reading order in read_early_config()
      worktree add: add --lock option

Patrick Steinhardt (8):
      mailmap: add Patrick Steinhardt's work address
      urlmatch: enable normalization of URLs with globs
      urlmatch: split host and port fields in `struct url_info`
      urlmatch: include host in urlmatch ranking
      urlmatch: allow globbing for the URL host part
      docs/diffcore: fix grammar in diffcore-rename header
      docs/diffcore: unquote "Complete Rewrites" in headers
      pathspec: honor `PATHSPEC_PREFIX_ORIGIN` with empty prefix

Peter Krefting (1):
      i18n: read-cache: typofix

Prathamesh Chavan (1):
      t2027: avoid using pipes

Quentin Pradet (1):
      git-bisect.txt: add missing word

Ralf Thielow (2):
      submodule.c: add missing ' in error messages
      git-add--interactive.perl: add missing dot in a message

Ramsay Jones (3):
      wrapper.c: remove unused git_mkstemp() function
      wrapper.c: remove unused gitmkstemps() function
      name-hash: add test-lazy-init-name-hash to .gitignore

René Genz (3):
      doc: update SubmittingPatches
      fix minor typos
      doc: git-pull.txt use US spelling, fix minor typo

René Scharfe (18):
      sha1_file: release fallback base's memory in unpack_entry()
      cocci: use ALLOC_ARRAY
      strbuf: add strbuf_add_real_path()
      commit: be more precise when searching for headers
      commit: don't check for space twice when looking for header
      log-tree: factor out fmt_output_email_subject()
      pretty: use fmt_output_email_subject()
      blame: move blame_entry duplication to add_blame_entry()
      receive-pack: simplify run_update_post_hook()
      http-push: don't check return value of lookup_unknown_object()
      revision: remove declaration of path_name()
      shortlog: don't set after_subject to an empty string
      strbuf: support long paths w/o read rights in strbuf_getcwd() on FreeBSD
      test-read-cache: setup git dir
      am: close stream on error, but not stdin
      files_for_each_reflog_ent_reverse(): close stream and free strbuf on error
      server-info: avoid calling fclose(3) twice in update_info_file()
      use HOST_NAME_MAX to size buffers for gethostname(2)

Ross Lagerwall (1):
      remote: ignore failure to remove missing branch.<name>.merge

SZEDER Gábor (44):
      completion: improve __git_refs()'s in-code documentation
      completion tests: don't add test cruft to the test repository
      completion tests: make the $cur variable local to the test helper functions
      completion tests: consolidate getting path of current working directory
      completion tests: check __gitdir()'s output in the error cases
      completion tests: add tests for the __git_refs() helper function
      completion: ensure that the repository path given on the command line exists
      completion: fix most spots not respecting 'git --git-dir=<path>'
      completion: respect 'git --git-dir=<path>' when listing remote refs
      completion: list refs from remote when remote's name matches a directory
      completion: don't list 'HEAD' when trying refs completion outside of a repo
      completion: list short refs from a remote given as a URL
      completion: don't offer commands when 'git --opt' needs an argument
      completion: fix completion after 'git -C <path>'
      rev-parse: add '--absolute-git-dir' option
      completion: respect 'git -C <path>'
      completion: don't use __gitdir() for git commands
      completion: consolidate silencing errors from git commands
      completion: don't guard git executions with __gitdir()
      completion: extract repository discovery from __gitdir()
      completion: cache the path to the repository
      completion: restore removed line continuating backslash
      completion: remove redundant __gitcomp_nl() options from _git_commit()
      tests: create an interactive gdb session with the 'debug' helper
      tests: make the 'test_pause' helper work in non-verbose mode
      pickaxe: fix segfault with '-S<...> --pickaxe-regex'
      completion: wrap __git_refs() for better option parsing
      completion: support completing full refs after '--option=refs/<TAB>'
      completion: support completing fully qualified non-fast-forward refspecs
      completion: support excluding full refs
      completion: don't disambiguate tags and branches
      completion: don't disambiguate short refs
      completion: let 'for-each-ref' and 'ls-remote' filter matching refs
      completion: let 'for-each-ref' strip the remote name from remote branches
      completion: let 'for-each-ref' filter remote branches for 'checkout' DWIMery
      completion: let 'for-each-ref' sort remote branches for 'checkout' DWIMery
      completion: fill COMPREPLY directly when completing refs
      completion: fill COMPREPLY directly when completing fetch refspecs
      completion: speed up branch and tag completion
      refs.c: use skip_prefix() in prettify_refname()
      completion: put matching ctags symbol names directly into COMPREPLY
      completion: extract completing ctags symbol names into helper function
      completion: offer ctags symbol names for 'git log -S', '-G' and '-L:'
      t6500: wait for detached auto gc at the end of the test script

Santiago Torres (1):
      t7004, t7030: fix here-doc syntax errors

Sebastian Schuberth (5):
      contrib: git-remote-{bzr,hg} placeholders don't need Python
      sha1_file: remove an used fd variable
      submodule: remove a superfluous second check for the "new" variable
      gitmodules: clarify what history depth a shallow clone has
      gitmodules: clarify the ignore option values

Segev Finer (2):
      connect: handle putty/plink also in GIT_SSH_COMMAND
      connect: Add the envvar GIT_SSH_VARIANT and ssh.variant config

Sergey Ryazanov (2):
      http: honor empty http.proxy option to bypass proxy
      http: fix the silent ignoring of proxy misconfiguraion

Simon Ruderich (1):
      githooks.txt: clarify push hooks are always executed in $GIT_DIR

Stefan Beller (36):
      Documentation: fix a typo
      refs: parse_hide_refs_config to use parse_config_key
      submodule init: warn about falling back to a local path
      rev-parse: add --show-superproject-working-tree
      submodule-config: correct error reporting for invalid ignore value
      connect_work_tree_and_git_dir: safely create leading directories
      lib-submodule-update.sh: reorder create_lib_submodule_repo
      lib-submodule-update.sh: do not use ./. as submodule remote
      lib-submodule-update: teach test_submodule_content the -C <dir> flag
      lib-submodule-update.sh: replace sha1 by hash
      lib-submodule-update.sh: define tests for recursing into submodules
      make is_submodule_populated gently
      update submodules: add submodule config parsing
      update submodules: add a config option to determine if submodules are updated
      submodules: introduce check to see whether to touch a submodule
      update submodules: move up prepare_submodule_repo_env
      submodule.c: get_super_prefix_or_empty
      update submodules: add submodule_move_head
      unpack-trees: pass old oid to verify_clean_submodule
      unpack-trees: check if we can perform the operation for submodules
      entry.c: create submodules when interesting
      builtin/checkout: add --recurse-submodules switch
      builtin/read-tree: add --recurse-submodules switch
      wt-status: simplify by using for_each_string_list_item
      t3600: rename test to describe its functionality
      builtin/describe: introduce --broken flag
      submodule.c: use argv_array in is_submodule_modified
      submodule.c: factor out early loop termination in is_submodule_modified
      submodule.c: convert is_submodule_modified to use strbuf_getwholeline
      submodule.c: port is_submodule_modified to use porcelain 2
      submodule.c: stricter checking for submodules in is_submodule_modified
      short status: improve reporting for submodule changes
      unpack-trees.c: align submodule error message to the other error messages
      submodule.c: correctly handle nested submodules in is_submodule_modified
      diff: submodule inline diff to initialize env array.
      submodule--helper: fix typo in is_active error message

Stephen Hicks (1):
      rebase -i: reread the todo list if `exec` touched it

Thomas Gummerer (9):
      stash: introduce push verb
      stash: add test for the create command line arguments
      stash: refactor stash_create
      stash: teach 'push' (and 'create_stash') to honor pathspec
      stash: use stash_push for no verb form
      stash: allow pathspecs in the no verb form
      stash: don't show internal implementation details
      stash: pass the pathspec argument to git reset
      stash: keep untracked files intact in stash -k

Torsten Bögershausen (1):
      gitattributes.txt: document how to normalize the line endings

Valery Tolstov (1):
      submodule--helper.c: remove duplicate code

Vegard Nossum (2):
      xdiff -W: relax end-of-file function detection
      line-log: use COPY_ARRAY to fix mis-sized memcpy

brian m. carlson (41):
      hex: introduce parse_oid_hex
      builtin/commit: convert to struct object_id
      builtin/diff-tree: convert to struct object_id
      builtin/describe: convert to struct object_id
      builtin/fast-export: convert to struct object_id
      builtin/fmt-merge-message: convert to struct object_id
      builtin/grep: convert to struct object_id
      builtin/branch: convert to struct object_id
      builtin/clone: convert to struct object_id
      builtin/merge: convert to struct object_id
      Convert remaining callers of resolve_refdup to object_id
      builtin/replace: convert to struct object_id
      reflog-walk: convert struct reflog_info to struct object_id
      refs: convert each_reflog_ent_fn to struct object_id
      refs: simplify parsing of reflog entries
      sha1_file: introduce an nth_packed_object_oid function
      Convert object iteration callbacks to struct object_id
      builtin/merge-base: convert to struct object_id
      wt-status: convert to struct object_id
      hash.h: move SHA-1 implementation selection into a header file
      Define new hash-size constants for allocating memory
      Convert GIT_SHA1_HEXSZ used for allocation to GIT_MAX_HEXSZ
      Convert GIT_SHA1_RAWSZ used for allocation to GIT_MAX_RAWSZ
      builtin/diff: convert to struct object_id
      builtin/pull: convert portions to struct object_id
      builtin/receive-pack: fix incorrect pointer arithmetic
      builtin/receive-pack: convert portions to struct object_id
      fsck: convert init_skiplist to struct object_id
      parse-options-cb: convert sha1_array_append caller to struct object_id
      test-sha1-array: convert most code to struct object_id
      sha1_name: convert struct disambiguate_state to object_id
      sha1_name: convert disambiguate_hint_fn to take object_id
      submodule: convert check_for_new_submodule_commits to object_id
      builtin/pull: convert to struct object_id
      sha1-array: convert internal storage for struct sha1_array to object_id
      Make sha1_array_append take a struct object_id *
      Convert remaining callers of sha1_array_lookup to object_id
      Convert sha1_array_lookup to take struct object_id
      Convert sha1_array_for_each_unique and for_each_abbrev to object_id
      Rename sha1_array to oid_array
      Documentation: update and rename api-sha1-array.txt

Ævar Arnfjörð Bjarmason (33):
      cvs tests: skip tests that call "cvs commit" when running as root
      gitweb tests: change confusing "skip_all" phrasing
      gitweb tests: skip tests when we don't have Time::HiRes
      doc: change erroneous --[no]-whatever into --[no-]whatever
      push: mention "push.default=tracking" in the documentation
      tag doc: move the description of --[no-]merged earlier
      tag doc: split up the --[no-]merged documentation
      tag doc: reword --[no-]merged to talk about commits, not tips
      ref-filter: make combining --merged & --no-merged an error
      doc/SubmittingPatches: clarify the casing convention for "area: change..."
      t/README: link to metacpan.org, not search.cpan.org
      t/README: change "Inside <X> part" to "Inside the <X> part"
      ref-filter: add test for --contains on a non-commit
      tag: remove a TODO item from the test suite
      tag tests: fix a typo in a test description
      for-each-ref: partly change <object> to <commit> in help
      branch doc: change `git branch <pattern>` to use `<branchname>`
      tag: add more incompatibles mode tests
      parse-options: add OPT_NONEG to the "contains" option
      tag: change misleading --list <pattern> documentation
      tag: implicitly supply --list given another list-like option
      tag: change --point-at to default to HEAD
      ref-filter: add --no-contains option to tag/branch/for-each-ref
      ref-filter: reflow recently changed branch/tag/for-each-ref docs
      tag: add tests for --with and --without
      t/README: clarify the test_have_prereq documentation
      doc/SubmittingPatches: show how to get a CLI commit summary
      rev-parse: match @{upstream}, @{u} and @{push} case-insensitively
      perl: regenerate perl.mak if perl -V changes
      grep: plug a trivial memory leak
      push: document & test --force-with-lease with multiple remotes
      completion: expand "push --delete <remote> <ref>" for refs on that <remote>
      t/perf: correctly align non-ASCII descriptions in output


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.13.0-rc1
@ 2017-04-27  2:55  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2017-04-27  2:55 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

A release candidate Git v2.13.0-rc1 is now available for testing
at the usual places.  It is comprised of 684 non-merge commits
since v2.12.0, contributed by 54 people, 13 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.13.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.12.0 are as follows.
Welcome to the Git development community!

  Allan Xavier, Andreas Heiduk, Devin J. Pohly, Devin Lehmacher,
  Hiroshi Shirosaki, Johan Hovold, Maxim Moseychuk, Mostyn
  Bramley-Moore, Prathamesh Chavan, Quentin Pradet, Segev Finer,
  Sergey Ryazanov, and Valery Tolstov.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alex Henrie, Brandon Williams, brian
  m. carlson, Christian Couder, Cornelius Weig, David Aguilar,
  David Turner, Eric Wong, Giuseppe Bilotta, Jacob Keller, Jeff
  Hostetler, Jeff King, Johannes Schindelin, Jonathan Nieder,
  Jonathan Tan, Junio C Hamano, Karthik Nayak, Kevin Willford,
  Kyle Meyer, Lars Schneider, Linus Torvalds, Luke Diamand, Matt
  McCutchen, Michael Haggerty, Michael J Gruber, Michael Rappazzo,
  Mike Hommey, Nguyễn Thái Ngọc Duy, Patrick Steinhardt, Ralf
  Thielow, Ramsay Jones, René Scharfe, Ross Lagerwall, Santiago
  Torres, Sebastian Schuberth, Stefan Beller, SZEDER Gábor,
  Thomas Gummerer, Torsten Bögershausen, and Vegard Nossum.

----------------------------------------------------------------

Git 2.13 Release Notes (draft)
==============================

Backward compatibility notes.

 * Use of an empty string as a pathspec element that is used for
   'everything matches' is still warned and Git asks users to use a
   more explicit '.' for that instead.  The hope is that existing
   users will not mind this change, and eventually the warning can be
   turned into a hard error, upgrading the deprecation into removal of
   this (mis)feature.  That is not scheduled to happen in the upcoming
   release (yet).

 * The historical argument order "git merge <msg> HEAD <commit>..."
   has been deprecated for quite some time, and is now removed.

 * The default location "~/.git-credential-cache/socket" for the
   socket used to communicate with the credential-cache daemon has
   been moved to "~/.cache/git/credential/socket".

 * Git now avoids blindly falling back to ".git" when the setup
   sequence said we are _not_ in Git repository.  A corner case that
   happens to work right now may be broken by a call to die("BUG").
   We've tried hard to locate such cases and fixed them, but there
   might still be cases that need to be addressed--bug reports are
   greatly appreciated.


Updates since v2.12
-------------------

UI, Workflows & Features

 * "git describe" and "git name-rev" have been taught to take more
   than one refname patterns to restrict the set of refs to base their
   naming output on, and also learned to take negative patterns to
   name refs not to be used for naming via their "--exclude" option.

 * Deletion of a branch "foo/bar" could remove .git/refs/heads/foo
   once there no longer is any other branch whose name begins with
   "foo/", but we didn't do so so far.  Now we do.

 * When "git merge" detects a path that is renamed in one history
   while the other history deleted (or modified) it, it now reports
   both paths to help the user understand what is going on in the two
   histories being merged.

 * The <url> part in "http.<url>.<variable>" configuration variable
   can now be spelled with '*' that serves as wildcard.
   E.g. "http.https://*.example.com.proxy" can be used to specify the
   proxy used for https://a.example.com, https://b.example.com, etc.,
   i.e. any host in the example.com domain.

 * "git tag" did not leave useful message when adding a new entry to
   reflog; this was left unnoticed for a long time because refs/tags/*
   doesn't keep reflog by default.

 * The "negative" pathspec feature was somewhat more cumbersome to use
   than necessary in that its short-hand used "!" which needed to be
   escaped from shells, and it required "exclude from what?" specified.

 * The command line options for ssh invocation needs to be tweaked for
   some implementations of SSH (e.g. PuTTY plink wants "-P <port>"
   while OpenSSH wants "-p <port>" to specify port to connect to), and
   the variant was guessed when GIT_SSH environment variable is used
   to specify it.  The logic to guess now applies to the command
   specified by the newer GIT_SSH_COMMAND and also core.sshcommand
   configuration variable, and comes with an escape hatch for users to
   deal with misdetected cases.

 * The "--git-path", "--git-common-dir", and "--shared-index-path"
   options of "git rev-parse" did not produce usable output.  They are
   now updated to show the path to the correct file, relative to where
   the caller is.

 * "git diff -W" has been taught to handle the case where a new
   function is added at the end of the file better.

 * "git update-ref -d" and other operations to delete references did
   not leave any entry in HEAD's reflog when the reference being
   deleted was the current branch.  This is not a problem in practice
   because you do not want to delete the branch you are currently on,
   but caused renaming of the current branch to something else not to
   be logged in a useful way.

 * "Cc:" on the trailer part does not have to conform to RFC strictly,
   unlike in the e-mail header.  "git send-email" has been updated to
   ignore anything after '>' when picking addresses, to allow non-address
   cruft like " # stable 4.4" after the address.

 * When "git submodule init" decides that the submodule in the working
   tree is its upstream, it now gives a warning as it is not a very
   common setup.

 * "git stash push" takes a pathspec so that the local changes can be
   stashed away only partially.

 * Documentation for "git ls-files" did not refer to core.quotePath.

 * The experimental "split index" feature has gained a few
   configuration variables to make it easier to use.

 * From a working tree of a repository, a new option of "rev-parse"
   lets you ask if the repository is used as a submodule of another
   project, and where the root level of the working tree of that
   project (i.e. your superproject) is.

 * The pathspec mechanism learned to further limit the paths that
   match the pattern to those that have specified attributes attached
   via the gitattributes mechanism.

 * Our source code has used the SHA1_HEADER cpp macro after "#include"
   in the C code to switch among the SHA-1 implementations. Instead,
   list the exact header file names and switch among implementations
   using "#ifdef BLK_SHA1/#include "block-sha1/sha1.h"/.../#endif";
   this helps some IDE tools.

 * The start-up sequence of "git" needs to figure out some configured
   settings before it finds and set itself up in the location of the
   repository and was quite messy due to its "chicken-and-egg" nature.
   The code has been restructured.

 * The command line prompt (in contrib/) learned a new 'tag' style
   that can be specified with GIT_PS1_DESCRIBE_STYLE, to describe a
   detached HEAD with "git describe --tags".

 * The configuration file learned a new "includeIf.<condition>.path"
   that includes the contents of the given path only when the
   condition holds.  This allows you to say "include this work-related
   bit only in the repositories under my ~/work/ directory".

 * Recent update to "rebase -i" started showing a message that is not
   a warning with "warning:" prefix by mistake.  This has been fixed.

 * Recently we started passing the "--push-options" through the
   external remote helper interface; now the "smart HTTP" remote
   helper understands what to do with the passed information.

 * "git describe --dirty" dies when it cannot be determined if the
   state in the working tree matches that of HEAD (e.g. broken
   repository or broken submodule).  The command learned a new option
   "git describe --broken" to give "$name-broken" (where $name is the
   description of HEAD) in such a case.

 * "git checkout" is taught the "--recurse-submodules" option.

 * Recent enhancement to "git stash push" command to support pathspec
   to allow only a subset of working tree changes to be stashed away
   was found to be too chatty and exposed the internal implementation
   detail (e.g. when it uses reset to match the index to HEAD before
   doing other things, output from reset seeped out).  These, and
   other chattyness has been fixed.

 * "git merge <message> HEAD <commit>" syntax that has been deprecated
   since October 2007 has been removed.

 * The refs completion for large number of refs has been sped up,
   partly by giving up disambiguating ambiguous refs and partly by
   eliminating most of the shell processing between 'git for-each-ref'
   and 'ls-remote' and Bash's completion facility.

 * On many keyboards, typing "@{" involves holding down SHIFT key and
   one can easily end up with "@{Up..." when typing "@{upstream}".  As
   the upstream/push keywords do not appear anywhere else in the syntax,
   we can safely accept them case insensitively without introducing
   ambiguity or confusion to solve this.

 * "git tag/branch/for-each-ref" family of commands long allowed to
   filter the refs by "--contains X" (show only the refs that are
   descendants of X), "--merged X" (show only the refs that are
   ancestors of X), "--no-merged X" (show only the refs that are not
   ancestors of X).  One curious omission, "--no-contains X" (show
   only the refs that are not descendants of X) has been added to
   them.

 * The default behaviour of "git log" in an interactive session has
   been changed to enable "--decorate".

 * The output from "git status --short" has been extended to show
   various kinds of dirtyness in submodules differently; instead of to
   "M" for modified, 'm' and '?' can be shown to signal changes only
   to the working tree of the submodule but not the commit that is
   checked out.

 * Allow the http.postbuffer configuration variable to be set to a
   size that can be expressed in size_t, which can be larger than
   ulong on some platforms.

 * "git rebase" learns "--signoff" option.

 * The completion script (in contrib/) learned to complete "git push
   --delete b<TAB>" to complete branch name to be deleted.

 * "git worktree add --lock" allows to lock a worktree immediately
   after it's created. This helps prevent a race between "git worktree
   add; git worktree lock" and "git worktree prune".


Performance, Internal Implementation, Development Support etc.

 * The code to list branches in "git branch" has been consolidated
   with the more generic ref-filter API.

 * Resource usage while enumerating refs from alternate object store
   has been optimized to help receiving end of "push" that hosts a
   repository with many "forks".

 * The gitattributes machinery is being taught to work better in a
   multi-threaded environment.

 * "git rebase -i" starts using the recently updated "sequencer" code.

 * Code and design clean-up for the refs API.

 * The preload-index code has been taught not to bother with the index
   entries that are paths that are not checked out by "sparse checkout".

 * Some warning() messages from "git clean" were updated to show the
   errno from failed system calls.

 * The "parse_config_key()" API function has been cleaned up.

 * A test that creates a confusing branch whose name is HEAD has been
   corrected not to do so.

 * The code that parses header fields in the commit object has been
   updated for (micro)performance and code hygiene.

 * An helper function to make it easier to append the result from
   real_path() to a strbuf has been added.

 * Reduce authentication round-trip over HTTP when the server supports
   just a single authentication method.  This also improves the
   behaviour when Git is misconfigured to enable http.emptyAuth
   against a server that does not authenticate without a username
   (i.e. not using Kerberos etc., which makes http.emptyAuth
   pointless).

 * Windows port wants to use OpenSSL's implementation of SHA-1
   routines, so let them.

 * The t/perf performance test suite was not prepared to test not so
   old versions of Git, but now it covers versions of Git that are not
   so ancient.

 * Add 32-bit Linux variant to the set of platforms to be tested with
   Travis CI.

 * "git branch --list" takes the "--abbrev" and "--no-abbrev" options
   to control the output of the object name in its "-v"(erbose)
   output, but a recent update started ignoring them; fix it before
   the breakage reaches to any released version.

 * Picking two versions of Git and running tests to make sure the
   older one and the newer one interoperate happily has now become
   possible.

 * "git tag --contains" used to (ab)use the object bits to keep track
   of the state of object reachability without clearing them after
   use; this has been cleaned up and made to use the newer commit-slab
   facility.

 * The "debug" helper used in the test framework learned to run
   a command under "gdb" interactively.

 * The "detect attempt to create collisions" variant of SHA-1
   implementation by Marc Stevens (CWI) and Dan Shumow (Microsoft)
   has been integrated and made the default.

 * The test framework learned to detect unterminated here documents.

 * The name-hash used for detecting paths that are different only in
   cases (which matter on case insensitive filesystems) has been
   optimized to take advantage of multi-threading when it makes sense.

 * An earlier version of sha1dc/sha1.c that was merged to 'master'
   compiled incorrectly on Windows, which has been fixed.

 * "what URL do we want to update this submodule?" and "are we
   interested in this submodule?" are split into two distinct
   concepts, and then the way used to express the latter got extended,
   paving a way to make it easier to manage a project with many
   submodules and make it possible to later extend use of multiple
   worktrees for a project with submodules.

 * Some debugging output from "git describe" were marked for l10n,
   but some weren't.  Mark missing ones for l10n.

 * Define a new task in .travis.yml that triggers a test session on
   Windows run elsewhere.

 * Conversion from uchar[20] to struct object_id continues.

 * The "submodule" specific field in the ref_store structure is
   replaced with a more generic "gitdir" that can later be used also
   when dealing with ref_store that represents the set of refs visible
   from the other worktrees.

 * The string-list API used a custom reallocation strategy that was
   very inefficient, instead of using the usual ALLOC_GROW() macro,
   which has been fixed.
   (merge 950a234cbd jh/string-list-micro-optim later to maint).

 * In a 2- and 3-way merge of trees, more than one source trees often
   end up sharing an identical subtree; optimize by not reading the
   same tree multiple times in such a case.
   (merge d12a8cf0af jh/unpack-trees-micro-optim later to maint).

 * The index file has a trailing SHA-1 checksum to detect file
   corruption, and historically we checked it every time the index
   file is used.  Omit the validation during normal use, and instead
   verify only in "git fsck".

 * Having a git command on the upstream side of a pipe in a test
   script will hide the exit status from the command, which may cause
   us to fail to notice a breakage; rewrite tests in a script to avoid
   this issue.

 * Travis CI learns to run coccicheck.

 * "git checkout" that handles a lot of paths has been optimized by
   reducing the number of unnecessary checks of paths in the
   has_dir_name() function.

 * The internals of the refs API around the cached refs has been
   streamlined.

Also contains various documentation updates and code clean-ups.


Fixes since v2.12
-----------------

Unless otherwise noted, all the fixes since v2.12 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * "git repack --depth=<n>" for a long time busted the specified depth
   when reusing delta from existing packs.  This has been corrected.

 * The code to parse the command line "git grep <patterns>... <rev>
   [[--] <pathspec>...]" has been cleaned up, and a handful of bugs
   have been fixed (e.g. we used to check "--" if it is a rev).

 * "git ls-remote" and "git archive --remote" are designed to work
   without being in a directory under Git's control.  However, recent
   updates revealed that we randomly look into a directory called
   .git/ without actually doing necessary set-up when working in a
   repository.  Stop doing so.

 * "git show-branch" expected there were only very short branch names
   in the repository and used a fixed-length buffer to hold them
   without checking for overflow.

 * A caller of tempfile API that uses stdio interface to write to
   files may ignore errors while writing, which is detected when
   tempfile is closed (with a call to ferror()).  By that time, the
   original errno that may have told us what went wrong is likely to
   be long gone and was overwritten by an irrelevant value.
   close_tempfile() now resets errno to EIO to make errno at least
   predictable.

 * "git remote rm X", when a branch has remote X configured as the
   value of its branch.*.remote, tried to remove branch.*.remote and
   branch.*.merge and failed if either is unset.

 * A "gc.log" file left by a backgrounded "gc --auto" disables further
   automatic gc; it has been taught to run at least once a day (by
   default) by ignoring a stale "gc.log" file that is too old.

 * The code to parse "git -c VAR=VAL cmd" and set configuration
   variable for the duration of cmd had two small bugs, which have
   been fixed.

 * user.email that consists of only cruft chars should consistently
   error out, but didn't.

 * "git upload-pack", which is a counter-part of "git fetch", did not
   report a request for a ref that was not advertised as invalid.
   This is generally not a problem (because "git fetch" will stop
   before making such a request), but is the right thing to do.

 * A leak in a codepath to read from a packed object in (rare) cases
   has been plugged.

 * When a redirected http transport gets an error during the
   redirected request, we ignored the error we got from the server,
   and ended up giving a not-so-useful error message.

 * The patch subcommand of "git add -i" was meant to have paths
   selection prompt just like other subcommand, unlike "git add -p"
   directly jumps to hunk selection.  Recently, this was broken and
   "add -i" lost the paths selection dialog, but it now has been
   fixed.

 * Git v2.12 was shipped with an embarrassing breakage where various
   operations that verify paths given from the user stopped dying when
   seeing an issue, and instead later triggering segfault.

 * There is no need for Python only to give a few messages to the
   standard error stream, but we somehow did.

 * The code to parse "git log -L..." command line was buggy when there
   are many ranges specified with -L; overrun of the allocated buffer
   has been fixed.

 * The command-line parsing of "git log -L" copied internal data
   structures using incorrect size on ILP32 systems.

 * "git diff --quiet" relies on the size field in diff_filespec to be
   correctly populated, but diff_populate_filespec() helper function
   made an incorrect short-cut when asked only to populate the size
   field for paths that need to go through convert_to_git() (e.g. CRLF
   conversion).

 * A few tests were run conditionally under (rare) conditions where
   they cannot be run (like running cvs tests under 'root' account).

 * "git branch @" created refs/heads/@ as a branch, and in general the
   code that handled @{-1} and @{upstream} was a bit too loose in
   disambiguating.

 * "git fetch" that requests a commit by object name, when the other
   side does not allow such an request, failed without much
   explanation.

 * "git filter-branch --prune-empty" drops a single-parent commit that
   becomes a no-op, but did not drop a root commit whose tree is empty.

 * Recent versions of Git treats http alternates (used in dumb http
   transport) just like HTTP redirects and requires the client to
   enable following it, due to security concerns.  But we forgot to
   give a warning when we decide not to honor the alternates.

 * "git push" had a handful of codepaths that could lead to a deadlock
   when unexpected error happened, which has been fixed.

 * "Dumb http" transport used to misparse a nonsense http-alternates
   response, which has been fixed.

 * "git add -p <pathspec>" unnecessarily expanded the pathspec to a
   list of individual files that matches the pathspec by running "git
   ls-files <pathspec>", before feeding it to "git diff-index" to see
   which paths have changes, because historically the pathspec
   language supported by "diff-index" was weaker.  These days they are
   equivalent and there is no reason to internally expand it.  This
   helps both performance and avoids command line argument limit on
   some platforms.
   (merge 7288e12cce jk/add-i-use-pathspecs later to maint).

 * "git status --porcelain" is supposed to give a stable output, but a
   few strings were left as translatable by mistake.

 * "git revert -m 0 $merge_commit" complained that reverting a merge
   needs to say relative to which parent the reversion needs to
   happen, as if "-m 0" weren't given.  The correct diagnosis is that
   "-m 0" does not refer to the first parent ("-m 1" does).  This has
   been fixed.

 * Code to read submodule.<name>.ignore config did not state the
   variable name correctly when giving an error message diagnosing
   misconfiguration.

 * Fix for NO_PTHREADS build.

 * Fix for potential segv introduced in v2.11.0 and later (also
   v2.10.2) to "git log --pickaxe-regex -S".

 * A few unterminated here documents in tests were fixed, which in
   turn revealed incorrect expectations the tests make. These tests
   have been updated.

 * Fix for NO_PTHREADS option.
   (merge 2225e1ea20 bw/grep-recurse-submodules later to maint).

 * Git now avoids blindly falling back to ".git" when the setup
   sequence said we are _not_ in Git repository.  A corner case that
   happens to work right now may be broken by a call to die("BUG").
   (merge b1ef400eec jk/no-looking-at-dotgit-outside-repo-final later to maint).

 * A few commands that recently learned the "--recurse-submodule"
   option misbehaved when started from a subdirectory of the
   superproject.
   (merge b2dfeb7c00 bw/recurse-submodules-relative-fix later to maint).

 * FreeBSD implementation of getcwd(3) behaved differently when an
   intermediate directory is unreadable/unsearchable depending on the
   length of the buffer provided, which our strbuf_getcwd() was not
   aware of.  strbuf_getcwd() has been taught to cope with it better.
   (merge a54e938e5b rs/freebsd-getcwd-workaround later to maint).

 * A recent update to "rebase -i" stopped running hooks for the "git
   commit" command during "reword" action, which has been fixed.

 * Removing an entry from a notes tree and then looking another note
   entry from the resulting tree using the internal notes API
   functions did not work as expected.  No in-tree users of the API
   has such access pattern, but it still is worth fixing.

 * "git receive-pack" could have been forced to die by attempting
   allocate an unreasonably large amount of memory with a crafted push
   certificate; this has been fixed.
   (merge f2214dede9 bc/push-cert-receive-fix later to maint).

 * Update error handling for codepath that deals with corrupt loose
   objects.
   (merge 51054177b3 jk/loose-object-info-report-error later to maint).

 * "git diff --submodule=diff" learned to work better in a project
   with a submodule that in turn has its own submodules.
   (merge 17b254cda6 sb/show-diff-for-submodule-in-diff-fix later to maint).

 * Update the build dependency so that an update to /usr/bin/perl
   etc. result in recomputation of perl.mak file.
   (merge c59c4939c2 ab/regen-perl-mak-with-different-perl later to maint).

 * "git push --recurse-submodules --push-option=<string>" learned to
   propagate the push option recursively down to pushes in submodules.

 * If a patch e-mail had its first paragraph after an in-body header
   indented (even after a blank line after the in-body header line),
   the indented line was mistook as a continuation of the in-body
   header.  This has been fixed.
   (merge fd1062e52e lt/mailinfo-in-body-header-continuation later to maint).

 * Clean up fallouts from recent tightening of the set-up sequence,
   where Git barfs when repository information is accessed without
   first ensuring that it was started in a repository.
   (merge bccb22cbb1 jk/no-looking-at-dotgit-outside-repo later to maint).

 * "git p4" used "name-rev HEAD" when it wants to learn what branch is
   checked out; it should use "symbolic-ref HEAD".
   (merge eff451101d ld/p4-current-branch-fix later to maint).

 * "http.proxy" set to an empty string is used to disable the usage of
   proxy.  We broke this early last year.
   (merge ae51d91105 sr/http-proxy-configuration-fix later to maint).

 * $GIT_DIR may in some cases be normalized with all symlinks resolved
   while "gitdir" path expansion in the pattern does not receive the
   same treatment, leading to incorrect mismatch.  This has been fixed.

 * "git submodule" script does not work well with strange pathnames.
   Protect it from a path with slashes in them, at least.

 * "git fetch-pack" was not prepared to accept ERR packet that the
   upload-pack can send with a human-readable error message.  It
   showed the packet contents with ERR prefix, so there was no data
   loss, but it was redundant to say "ERR" in an error message.
   (merge 8e2c7bef03 jt/fetch-pack-error-reporting later to maint).

 * "ls-files --recurse-submodules" did not quite work well in a
   project with nested submodules.

 * gethostname(2) may not NUL terminate the buffer if hostname does
   not fit; unfortunately there is no easy way to see if our buffer
   was too small, but at least this will make sure we will not end up
   using garbage past the end of the buffer.
   (merge 5781a9a270 dt/xgethostname-nul-termination later to maint).

 * A recent update broke "git add -p ../foo" from a subdirectory.

 * While handy, "git_path()" is a dangerous function to use as a
   callsite that uses it safely one day can be broken by changes
   to other code that calls it.  Reduction of its use continues.
   (merge 16d2676c9e jk/war-on-git-path later to maint).

 * The split-index code configuration code used an unsafe git_path()
   function without copying its result out.

 * Many stale HTTP(s) links have been updated in our documentation.
   (merge 613416f0be jk/update-links-in-docs later to maint).

 * Other minor doc, test and build updates and code cleanups.
   (merge df2a6e38b7 jk/pager-in-use later to maint).
   (merge 75ec4a6cb0 ab/branch-list-doc later to maint).
   (merge 3e5b36c637 sg/skip-prefix-in-prettify-refname later to maint).
   (merge 2c5e2865cc jk/fast-import-cleanup later to maint).
   (merge 4473060bc2 ab/test-readme-updates later to maint).
   (merge 48a96972fd ab/doc-submitting later to maint).
   (merge f5c2bc2b96 jk/make-coccicheck-detect-errors later to maint).
   (merge c105f563d1 cc/untracked later to maint).
   (merge 8668976b53 jc/unused-symbols later to maint).
   (merge fba275dc93 jc/bs-t-is-not-a-tab-for-sed later to maint).
   (merge be6ed145de mm/ls-files-s-doc later to maint).
   (merge 60b091c679 qp/bisect-docfix later to maint).
   (merge 47242cd103 ah/diff-files-ours-theirs-doc later to maint).
   (merge 35ad44cbd8 sb/submodule-rm-absorb later to maint).
   (merge 0301f1fd92 va/i18n-perl-scripts later to maint).
   (merge 733e064d98 vn/revision-shorthand-for-side-branch-log later to maint).
   (merge 85999743e7 tb/doc-eol-normalization later to maint).
   (merge 0747fb49fd jk/loose-object-fsck later to maint).
   (merge d8f4481c4f jk/quarantine-received-objects later to maint).
   (merge 7ba1ceef95 xy/format-patch-base later to maint).
   (merge fa1912c89a rs/misc-cppcheck-fixes later to maint).
   (merge f17d642d3b ab/push-cas-doc-n-test later to maint).
   (merge 61e282425a ss/gitmodules-ignore-doc later to maint).
   (merge 8d3047cd5b ss/submodule-shallow-doc later to maint).

----------------------------------------------------------------

Changes since v2.12.0 are as follows:

Alex Henrie (1):
      log: if --decorate is not given, default to --decorate=auto

Allan Xavier (1):
      line-log.c: prevent crash during union of too many ranges

Andreas Heiduk (2):
      Documentation: improve description for core.quotePath
      diff-files: document --ours etc.

Brandon Williams (37):
      attr: pass struct attr_check to collect_some_attrs
      attr: use hashmap for attribute dictionary
      attr: eliminate global check_all_attr array
      attr: remove maybe-real, maybe-macro from git_attr
      attr: tighten const correctness with git_attr and match_attr
      attr: store attribute stack in attr_check structure
      attr: push the bare repo check into read_attr()
      attr: reformat git_attr_set_direction() function
      pathspec: allow querying for attributes
      pathspec: allow escaped query values
      submodule--helper: add is-active subcommand
      submodule status: use submodule--helper is-active
      submodule sync: skip work for inactive submodules
      submodule sync: use submodule--helper is-active
      submodule--helper clone: check for configured submodules using helper
      grep: fix help text typo
      setup: allow for prefix to be passed to git commands
      grep: fix bug when recursing with relative pathspec
      ls-files: fix typo in variable name
      ls-files: fix bug when recursing with relative pathspec
      grep: set default output method
      submodule: decouple url and submodule interest
      submodule init: initialize active submodules
      clone: teach --recurse-submodules to optionally take a pathspec
      submodule--helper init: set submodule.<name>.active
      submodule add: respect submodule.active and submodule.<name>.active
      grep: fix builds with with no thread support
      send-pack: send push options correctly in stateless-rpc case
      remote-curl: allow push options
      sequencer: fix missing newline
      push: unmark a local variable as static
      push: propagate push-options with --recurse-submodules
      remote: expose parse_push_refspec function
      submodule--helper: add push-check subcommand
      push: propagate remote and refspec with --recurse-submodules
      pathspec: fix segfault in clear_pathspec
      submodule: prevent backslash expantion in submodule names

Christian Couder (25):
      config: mark an error message up for translation
      t1700: change here document style
      config: add git_config_get_split_index()
      split-index: add {add,remove}_split_index() functions
      read-cache: add and then use tweak_split_index()
      update-index: warn in case of split-index incoherency
      t1700: add tests for core.splitIndex
      Documentation/config: add information for core.splitIndex
      Documentation/git-update-index: talk about core.splitIndex config var
      config: add git_config_get_max_percent_split_change()
      read-cache: regenerate shared index if necessary
      t1700: add tests for splitIndex.maxPercentChange
      Documentation/config: add splitIndex.maxPercentChange
      sha1_file: make check_and_freshen_file() non static
      read-cache: touch shared index files when used
      config: add git_config_get_expiry() from gc.c
      read-cache: unlink old sharedindex files
      t1700: test shared index file expiration
      read-cache: refactor read_index_from()
      read-cache: use freshen_shared_index() in read_index_from()
      Documentation/config: add splitIndex.sharedIndexExpire
      Documentation/git-update-index: explain splitIndex.*
      update-index: fix xgetcwd() related memory leak
      p0004: make perf test executable
      read-cache: avoid using git_path() in freshen_shared_index()

Cornelius Weig (1):
      tag: generate useful reflog message

David Aguilar (3):
      t7800: remove whitespace before redirect
      t7800: cleanup cruft left behind by tests
      difftool: handle modified symlinks in dir-diff mode

David Turner (3):
      gc: ignore old gc.log files
      http.postbuffer: allow full range of ssize_t values
      xgethostname: handle long hostnames

Devin J. Pohly (4):
      t7003: ensure --prune-empty can prune root commit
      t7003: ensure --prune-empty removes entire branch when applicable
      filter-branch: fix --prune-empty on parentless commits
      p7000: add test for filter-branch with --prune-empty

Devin Lehmacher (3):
      path.c: add xdg_cache_home
      credential-cache: use XDG_CACHE_HOME for socket
      credential-cache: add tests for XDG functionality

Eric Wong (3):
      README: create HTTP/HTTPS links from URLs in Markdown
      http: inform about alternates-as-redirects behavior
      http: release strbuf on disabled alternates

Giuseppe Bilotta (4):
      builtin/am: honor --signoff also when --rebasing
      builtin/am: fold am_signoff() into am_append_signoff()
      doc: trivial typo in git-format-patch.txt
      rebase: pass --[no-]signoff option to git am

Hiroshi Shirosaki (1):
      git svn: fix authentication with 'branch'

Jacob Keller (7):
      doc: add documentation for OPT_STRING_LIST
      name-rev: extend --refs to accept multiple patterns
      name-rev: add support to exclude refs by pattern match
      describe: teach --match to accept multiple patterns
      describe: teach describe negative pattern matches
      ls-files: fix recurse-submodules with nested submodules
      ls-files: fix path used when recursing into submodules

Jeff Hostetler (18):
      mingw: use OpenSSL's SHA-1 routines
      preload-index: avoid lstat for skip-worktree items
      name-hash: specify initial size for istate.dir_hash table
      hashmap: allow memihash computation to be continued
      hashmap: add disallow_rehash setting
      hashmap: document memihash_cont, hashmap_disallow_rehash api
      name-hash: perf improvement for lazy_init_name_hash
      name-hash: add test-lazy-init-name-hash
      name-hash: add perf test for lazy_init_name_hash
      test-online-cpus: helper to return cpu count
      read-cache: force_verify_index_checksum
      string-list: use ALLOC_GROW macro when reallocing string_list
      read-cache: add strcmp_offset function
      unpack-trees: avoid duplicate ODB lookups during checkout
      p0006-read-tree-checkout: perf test to time read-tree
      read-cache: speed up add_index_entry during checkout
      read-cache: speed up has_dir_name (part 1)
      read-cache: speed up has_dir_name (part 2)

Jeff King (128):
      setup_git_env: avoid blind fall-back to ".git"
      pack-objects: enforce --depth limit in reused deltas
      pack-objects: convert recursion to iteration in break_delta_chain()
      for_each_alternate_ref: handle failure from real_pathdup()
      for_each_alternate_ref: stop trimming trailing slashes
      for_each_alternate_ref: use strbuf for path allocation
      for_each_alternate_ref: pass name/oid instead of ref struct
      for_each_alternate_ref: replace transport code with for-each-ref
      fetch-pack: cache results of for_each_alternate_ref
      add oidset API
      receive-pack: use oidset to de-duplicate .have lines
      receive-pack: fix misleading namespace/.have comment
      receive-pack: treat namespace .have lines like alternates
      receive-pack: avoid duplicates between our refs and alternates
      grep: move thread initialization a little lower
      grep: re-order rev-parsing loop
      grep: fix "--" rev/pathspec disambiguation
      grep: avoid resolving revision names in --no-index case
      grep: do not diagnose misspelt revs with --no-index
      show-branch: drop head_len variable
      show-branch: store resolved head in heap buffer
      remote: avoid reading $GIT_DIR config in non-repo
      grep: treat revs the same for --untracked as for --no-index
      show-branch: use skip_prefix to drop magic numbers
      tempfile: set errno to a known value before calling ferror()
      http: restrict auth methods to what the server advertises
      ident: mark error messages for translation
      ident: handle NULL email when complaining of empty name
      ident: reject all-crud ident name
      ident: do not ignore empty config name/email
      parse_config_key: use skip_prefix instead of starts_with
      parse_config_key: allow matching single-level config
      parse_hide_refs_config: tell parse_config_key we don't want a subsection
      http: add an "auto" mode for http.emptyauth
      t6300: avoid creating refs/heads/HEAD
      add--interactive: fix missing file prompt for patch mode with "-i"
      interpret_branch_name(): handle auto-namelen for @{-1}
      interpret_branch_name: move docstring to header file
      strbuf_branchname: drop return value
      strbuf_branchname: add docstring
      interpret_branch_name: allow callers to restrict expansions
      t3204: test git-branch @-expansion corner cases
      branch: restrict @-expansions when deleting
      strbuf_check_ref_format(): expand only local branches
      checkout: restrict @-expansions when finding branch
      t/perf: use $MODERN_GIT for all repo-copying steps
      t/perf: add fallback for pre-bin-wrappers versions of git
      ewah: fix eword_t/uint64_t confusion
      receive-pack: fix deadlock when we cannot create tmpdir
      send-pack: extract parsing of "unpack" response
      send-pack: use skip_prefix for parsing unpack status
      send-pack: improve unpack-status error messages
      send-pack: read "unpack" status even on pack-objects failure
      send-pack: report signal death of pack-objects
      ref-filter: move ref_cbdata definition into ref-filter.c
      ref-filter: use contains_result enum consistently
      ref-filter: die on parse_commit errors
      ref-filter: use separate cache for contains_tag_algo
      t: add an interoperability test harness
      t/interop: add test of old clients against modern git-daemon
      http-walker: fix buffer underflow processing remote alternates
      add--interactive: do not expand pathspecs with ls-files
      cherry-pick: detect bogus arguments to --mainline
      rev-parse: use skip_prefix when parsing options
      rev-parse: add helper for parsing "--foo/--foo="
      rev-parse: simplify parsing of ref options
      move odb_* declarations out of git-compat-util.h
      sha1_file.c: make pack-name helper globally accessible
      odb_pack_keep(): stop generating keepfile name
      replace snprintf with odb_pack_name()
      index-pack: make pointer-alias fallbacks safer
      sha1dc: add collision-detecting sha1 implementation
      sha1dc: adjust header includes for git
      sha1dc: disable safe_hash feature
      sequencer: drop "warning:" when stopping for edit
      Makefile: add DC_SHA1 knob
      t0013: add a basic sha1 collision detection test
      run-command: fix segfault when cleaning forked async process
      hash-object: fix buffer reuse with --path in a subdirectory
      prefix_filename: move docstring to header file
      prefix_filename: drop length parameter
      prefix_filename: return newly allocated string
      prefix_filename: simplify windows #ifdef
      bundle: use prefix_filename with bundle path
      pager_in_use: use git_env_bool()
      fast-import: use xsnprintf for writing sha1s
      fast-import: use xsnprintf for formatting headers
      encode_in_pack_object_header: respect output buffer length
      pack.h: define largest possible encoded object size
      do not check odb_mkstemp return value for errors
      odb_mkstemp: write filename into strbuf
      odb_mkstemp: use git_path_buf
      Makefile: detect errors in running spatch
      difftool: avoid strcpy
      diff: avoid fixed-size buffer for patch-ids
      tag: use strbuf to format tag header
      fetch: use heap buffer to format reflog
      avoid using fixed PATH_MAX buffers for refs
      avoid using mksnpath for refs
      create_branch: move msg setup closer to point of use
      create_branch: use xstrfmt for reflog message
      name-rev: replace static buffer with strbuf
      receive-pack: print --pack-header directly into argv array
      replace unchecked snprintf calls with heap buffers
      combine-diff: replace malloc/snprintf with xstrfmt
      convert unchecked snprintf into xsnprintf
      transport-helper: replace checked snprintf with xsnprintf
      gc: replace local buffer with git_path
      daemon: use an argv_array to exec children
      sha1_loose_object_info: return error for corrupted objects
      index-pack: detect local corruption in collision check
      connect.c: handle errors from split_cmdline
      receive-pack: drop tmp_objdir_env from run_update_hook
      receive-pack: document user-visible quarantine effects
      refs: reject ref updates while GIT_QUARANTINE_PATH is set
      bisect: add git_path_bisect_terms helper
      branch: add edit_description() helper
      use git_path_* helper functions
      replace xstrdup(git_path(...)) with git_pathdup(...)
      replace strbuf_addstr(git_path()) with git_path_buf()
      am: drop "dir" parameter from am_state_init
      connect.c: fix leak in handle_ssh_variant
      doc: use https links to avoid http redirect
      doc: replace or.cz gitwiki link with git.wiki.kernel.org
      gitcore-tutorial: update broken link
      docs/archimport: quote sourcecontrol.net reference
      docs/bisect-lk2009: update nist report link
      docs/bisect-lk2009: update java code conventions link

Johan Hovold (1):
      send-email: only allow one address per body tag

Johannes Schindelin (23):
      git_connect(): factor out SSH variant handling
      rebase--helper: add a builtin helper for interactive rebases
      rebase -i: use the rebase--helper builtin
      rev-parse: fix several options when running in a subdirectory
      t7006: replace dubious test
      Travis: also test on 32-bit Linux
      setup_git_directory(): use is_dir_sep() helper
      t1501: demonstrate NULL pointer access with invalid GIT_WORK_TREE
      real_pathdup(): fix callsites that wanted it to die on error
      setup: prepare setup_discovered_git_dir() for the root directory
      setup_git_directory_1(): avoid changing global state
      setup: introduce the discover_git_directory() function
      setup: make read_early_config() reusable
      read_early_config(): avoid .git/config hack when unneeded
      read_early_config(): really discover .git/
      t1309: test read_early_config()
      setup_git_directory_gently_1(): avoid die()ing
      t1309: document cases where we would want early config not to die()
      setup.c: mention unresolved problems
      t7504: document regression: reword no longer calls commit-msg
      sequencer: make commit options more extensible
      sequencer: allow the commit-msg hooks to run during a `reword`
      difftool: fix use-after-free

Jonathan Nieder (2):
      remote helpers: avoid blind fall-back to ".git" when setting GIT_DIR
      has_sha1_file: don't bother if we are not in a repository

Jonathan Tan (5):
      grep: do not unnecessarily query repo for "--"
      upload-pack: report "not our ref" to client
      http: attempt updating base URL only if no error
      t/perf: export variable used in other blocks
      fetch-pack: show clearer error message upon ERR

Junio C Hamano (54):
      merge: drop 'git merge <message> HEAD <commit>' syntax
      connect: rename tortoiseplink and putty variables
      commit.c: use strchrnul() to scan for one line
      attr.c: use strchrnul() to scan for one line
      attr.c: update a stale comment on "struct match_attr"
      attr.c: explain the lack of attr-name syntax check in parse_attr()
      attr.c: complete a sentence in a comment
      attr.c: mark where #if DEBUG ends more clearly
      attr.c: simplify macroexpand_one()
      attr.c: tighten constness around "git_attr" structure
      attr.c: plug small leak in parse_attr_line()
      attr.c: add push_stack() helper
      attr.c: outline the future plans by heavily commenting
      attr: rename function and struct related to checking attributes
      attr: (re)introduce git_check_attr() and struct attr_check
      attr: convert git_all_attrs() to use "struct attr_check"
      attr: convert git_check_attrs() callers to use the new API
      attr: retire git_check_attrs() API
      attr: change validity check for attribute names to use positive logic
      ref-filter: resurrect "strip" as a synonym to "lstrip"
      connect.c: stop conflating ssh command names and overrides
      config: move a few helper functions up
      config: use git_config_parse_key() in git_config_parse_parameter()
      First batch after 2.12
      diff: do not short-cut CHECK_SIZE_ONLY check in diff_populate_filespec()
      branch: honor --abbrev/--no-abbrev in --list mode
      Second batch after 2.12
      Third batch after 2.12
      Fourth batch after 2.12
      Preparing for 2.12.1
      Makefile: make DC_SHA1 the default
      Fifth batch for 2.13
      Git 2.12.1
      Prepare for 2.12.2
      Sixth batch for 2.13
      t5615: fix a here-doc syntax error
      t7406: correct test case for submodule-update initial population
      tests: lint for run-away here-doc
      branch doc: update description for `--list`
      Git 2.12.2
      Seventh batch for 2.13
      sha1dc: avoid CPP macro collisions
      Eighth batch for 2.13
      Prepare for 2.12.3
      Ninth batch for 2.13
      Tenth batch for 2.13
      remote.[ch]: parse_push_cas_option() can be static
      contrib/git-resurrect.sh: do not write \t for HT in sed scripts
      Eleventh batch for 2.13
      Twelfth batch for 2.13
      replace: plug a memory leak
      Git 2.13-rc0
      Getting ready for -rc1
      Git 2.13-rc1

Karthik Nayak (20):
      ref-filter: implement %(if), %(then), and %(else) atoms
      ref-filter: include reference to 'used_atom' within 'atom_value'
      ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>)
      ref-filter: modify "%(objectname:short)" to take length
      ref-filter: move get_head_description() from branch.c
      ref-filter: introduce format_ref_array_item()
      ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreams
      ref-filter: add support for %(upstream:track,nobracket)
      ref-filter: make "%(symref)" atom work with the ':short' modifier
      ref-filter: introduce refname_atom_parser_internal()
      ref-filter: introduce refname_atom_parser()
      ref-filter: make remote_ref_atom_parser() use refname_atom_parser_internal()
      ref-filter: rename the 'strip' option to 'lstrip'
      ref-filter: Do not abruptly die when using the 'lstrip=<N>' option
      ref-filter: modify the 'lstrip=<N>' option to work with negative '<N>'
      ref-filter: add an 'rstrip=<N>' option to atoms which deal with refnames
      ref-filter: allow porcelain to translate messages in the output
      branch, tag: use porcelain output
      branch: use ref-filter printing APIs
      branch: implement '--format' option

Kevin Willford (2):
      name-hash: fix buffer overrun
      t3008: skip lazy-init test on a single-core box

Kyle Meyer (12):
      delete_ref: accept a reflog message argument
      update-ref: pass reflog message to delete_ref()
      rename_ref: replace empty message in HEAD's log
      branch: record creation of renamed branch in HEAD's log
      t1400: rename test descriptions to be unique
      t1400: set core.logAllRefUpdates in "logged by touch" tests
      t1400: use test_path_is_* helpers
      t1400: remove a set of unused output files
      t1400: use test_when_finished for cleanup
      doc/config: grammar fixes for core.{editor,commentChar}
      doc/revisions: remove brackets from rev^-n shorthand
      t1400: use consistent style for test_expect_success calls

Lars Schneider (2):
      travis-ci: build and test Git on Windows
      travis-ci: add static analysis build job to run coccicheck

Linus Torvalds (3):
      pathspec magic: add '^' as alias for '!'
      pathspec: don't error out on all-exclusionary pathspec patterns
      mailinfo: fix in-body header continuations

Luke Diamand (3):
      git-p4: add failing test for name-rev rather than symbolic-ref
      git-p4: add read_pipe_text() internal function
      git-p4: don't use name-rev to get current branch

Matt McCutchen (4):
      merge-recursive: make "CONFLICT (rename/delete)" message show both paths
      fetch-pack: move code to report unmatched refs to a function
      fetch_refs_via_pack: call report_unmatched_refs
      fetch-pack: add specific error for fetching an unadvertised object

Maxim Moseychuk (2):
      stop_progress_msg: convert xsnprintf to xstrfmt
      bisect_next_all: convert xsnprintf to xstrfmt

Michael Haggerty (52):
      files_rename_ref(): tidy up whitespace
      refname_is_safe(): correct docstring
      t5505: use "for-each-ref" to test for the non-existence of references
      safe_create_leading_directories_const(): preserve errno
      safe_create_leading_directories(): set errno on SCLD_EXISTS
      raceproof_create_file(): new function
      lock_ref_sha1_basic(): inline constant
      lock_ref_sha1_basic(): use raceproof_create_file()
      rename_tmp_log(): use raceproof_create_file()
      rename_tmp_log(): improve error reporting
      log_ref_write(): inline function
      log_ref_setup(): separate code for create vs non-create
      log_ref_setup(): improve robustness against races
      log_ref_setup(): pass the open file descriptor back to the caller
      log_ref_write_1(): don't depend on logfile argument
      log_ref_setup(): manage the name of the reflog file internally
      log_ref_write_1(): inline function
      delete_ref_loose(): derive loose reference path from lock
      delete_ref_loose(): inline function
      try_remove_empty_parents(): rename parameter "name" -> "refname"
      try_remove_empty_parents(): don't trash argument contents
      try_remove_empty_parents(): teach to remove parents of reflogs, too
      files_transaction_commit(): clean up empty directories
      refs: reorder some function definitions
      refs: make some ref_store lookup functions private
      refs: remove some unnecessary handling of submodule == ""
      register_ref_store(): new function
      refs: store submodule ref stores in a hashmap
      refs: push the submodule attribute down
      base_ref_store_init(): remove submodule argument
      files_ref_store::submodule: use NULL for the main repository
      read_loose_refs(): read refs using resolve_ref_recursively()
      get_ref_dir(): don't call read_loose_refs() for "refs/bisect"
      refs_read_raw_ref(): new function
      refs_ref_iterator_begin(): new function
      refs_verify_refname_available(): implement once for all backends
      refs_verify_refname_available(): use function in more places
      ref-cache: rename `add_ref()` to `add_ref_entry()`
      ref-cache: rename `find_ref()` to `find_ref_entry()`
      ref-cache: rename `remove_entry()` to `remove_entry_from_dir()`
      refs: split `ref_cache` code into separate files
      ref-cache: introduce a new type, ref_cache
      refs: record the ref_store in ref_cache, not ref_dir
      ref-cache: use a callback function to fill the cache
      refs: handle "refs/bisect/" in `loose_fill_ref_dir()`
      do_for_each_entry_in_dir(): eliminate `offset` argument
      get_loose_ref_dir(): function renamed from get_loose_refs()
      get_loose_ref_cache(): new function
      cache_ref_iterator_begin(): make function smarter
      commit_packed_refs(): use reference iteration
      files_pack_refs(): use reference iteration
      do_for_each_entry_in_dir(): delete function

Michael J Gruber (5):
      git-status: make porcelain more robust
      git-prompt: add a describe style for any tags
      mailmap: use Michael J Gruber's new address
      describe: localize debug output fully
      l10n: de: translate describe debug terms

Michael Rappazzo (1):
      rev-parse tests: add tests executed from a subdirectory

Mike Hommey (1):
      notes: do not break note_tree structure in note_tree_consolidate()

Mostyn Bramley-Moore (1):
      Documentation: document elements in "ls-files -s" output in order

Nguyễn Thái Ngọc Duy (40):
      attr: support quoting pathname patterns in C style
      clean: use warning_errno() when appropriate
      config.txt: clarify multiple key values in include.path
      config.txt: reflow the second include.path paragraph
      config: add conditional include
      refs.h: add forward declaration for structs used in this file
      git-commit.txt: list post-rewrite in HOOKS section
      files-backend: make files_log_ref_write() static
      files-backend.c: delete dead code in files_ref_iterator_begin()
      files-backend: delete dead code in files_init_db()
      files-backend: add and use files_packed_refs_path()
      files-backend: make sure files_rename_ref() always reach the end
      files-backend: convert git_path() to strbuf_git_path()
      files-backend: move "logs/" out of TMP_RENAMED_LOG
      files-backend: add and use files_reflog_path()
      files-backend: add and use files_ref_path()
      files-backend: remove the use of git_path()
      refs.c: introduce get_main_ref_store()
      refs: rename lookup_ref_store() to lookup_submodule_ref_store()
      refs.c: flatten get_ref_store() a bit
      refs.c: kill register_ref_store(), add register_submodule_ref_store()
      refs.c: make get_main_ref_store() public and use it
      path.c: move some code out of strbuf_git_path_submodule()
      refs: move submodule code out of files-backend.c
      files-backend: replace submodule_allowed check in files_downcast()
      refs: rename get_ref_store() to get_submodule_ref_store() and make it public
      refs: add new ref-store api
      refs: new transaction related ref-store api
      files-backend: avoid ref api targeting main ref store
      refs: delete pack_refs() in favor of refs_pack_refs()
      t/helper: add test-ref-store to test ref-store functions
      t1405: some basic tests on main ref store
      t1406: new tests for submodule ref store
      refs.h: add a note about sorting order of for_each_ref_*
      path.c: and an option to call real_path() in expand_user_path()
      config: resolve symlinks in conditional include's patterns
      config: prepare to pass more info in git_config_with_options()
      config: handle conditional include when $GIT_DIR is not set up
      config: correct file reading order in read_early_config()
      worktree add: add --lock option

Patrick Steinhardt (8):
      mailmap: add Patrick Steinhardt's work address
      urlmatch: enable normalization of URLs with globs
      urlmatch: split host and port fields in `struct url_info`
      urlmatch: include host in urlmatch ranking
      urlmatch: allow globbing for the URL host part
      docs/diffcore: fix grammar in diffcore-rename header
      docs/diffcore: unquote "Complete Rewrites" in headers
      pathspec: honor `PATHSPEC_PREFIX_ORIGIN` with empty prefix

Prathamesh Chavan (1):
      t2027: avoid using pipes

Quentin Pradet (1):
      git-bisect.txt: add missing word

Ralf Thielow (2):
      submodule.c: add missing ' in error messages
      git-add--interactive.perl: add missing dot in a message

Ramsay Jones (3):
      wrapper.c: remove unused git_mkstemp() function
      wrapper.c: remove unused gitmkstemps() function
      name-hash: add test-lazy-init-name-hash to .gitignore

René Scharfe (18):
      sha1_file: release fallback base's memory in unpack_entry()
      cocci: use ALLOC_ARRAY
      strbuf: add strbuf_add_real_path()
      commit: be more precise when searching for headers
      commit: don't check for space twice when looking for header
      log-tree: factor out fmt_output_email_subject()
      pretty: use fmt_output_email_subject()
      blame: move blame_entry duplication to add_blame_entry()
      receive-pack: simplify run_update_post_hook()
      http-push: don't check return value of lookup_unknown_object()
      revision: remove declaration of path_name()
      shortlog: don't set after_subject to an empty string
      strbuf: support long paths w/o read rights in strbuf_getcwd() on FreeBSD
      test-read-cache: setup git dir
      am: close stream on error, but not stdin
      files_for_each_reflog_ent_reverse(): close stream and free strbuf on error
      server-info: avoid calling fclose(3) twice in update_info_file()
      use HOST_NAME_MAX to size buffers for gethostname(2)

Ross Lagerwall (1):
      remote: ignore failure to remove missing branch.<name>.merge

SZEDER Gábor (44):
      completion: improve __git_refs()'s in-code documentation
      completion tests: don't add test cruft to the test repository
      completion tests: make the $cur variable local to the test helper functions
      completion tests: consolidate getting path of current working directory
      completion tests: check __gitdir()'s output in the error cases
      completion tests: add tests for the __git_refs() helper function
      completion: ensure that the repository path given on the command line exists
      completion: fix most spots not respecting 'git --git-dir=<path>'
      completion: respect 'git --git-dir=<path>' when listing remote refs
      completion: list refs from remote when remote's name matches a directory
      completion: don't list 'HEAD' when trying refs completion outside of a repo
      completion: list short refs from a remote given as a URL
      completion: don't offer commands when 'git --opt' needs an argument
      completion: fix completion after 'git -C <path>'
      rev-parse: add '--absolute-git-dir' option
      completion: respect 'git -C <path>'
      completion: don't use __gitdir() for git commands
      completion: consolidate silencing errors from git commands
      completion: don't guard git executions with __gitdir()
      completion: extract repository discovery from __gitdir()
      completion: cache the path to the repository
      completion: restore removed line continuating backslash
      completion: remove redundant __gitcomp_nl() options from _git_commit()
      tests: create an interactive gdb session with the 'debug' helper
      tests: make the 'test_pause' helper work in non-verbose mode
      pickaxe: fix segfault with '-S<...> --pickaxe-regex'
      completion: wrap __git_refs() for better option parsing
      completion: support completing full refs after '--option=refs/<TAB>'
      completion: support completing fully qualified non-fast-forward refspecs
      completion: support excluding full refs
      completion: don't disambiguate tags and branches
      completion: don't disambiguate short refs
      completion: let 'for-each-ref' and 'ls-remote' filter matching refs
      completion: let 'for-each-ref' strip the remote name from remote branches
      completion: let 'for-each-ref' filter remote branches for 'checkout' DWIMery
      completion: let 'for-each-ref' sort remote branches for 'checkout' DWIMery
      completion: fill COMPREPLY directly when completing refs
      completion: fill COMPREPLY directly when completing fetch refspecs
      completion: speed up branch and tag completion
      refs.c: use skip_prefix() in prettify_refname()
      completion: put matching ctags symbol names directly into COMPREPLY
      completion: extract completing ctags symbol names into helper function
      completion: offer ctags symbol names for 'git log -S', '-G' and '-L:'
      t6500: wait for detached auto gc at the end of the test script

Santiago Torres (1):
      t7004, t7030: fix here-doc syntax errors

Sebastian Schuberth (5):
      contrib: git-remote-{bzr,hg} placeholders don't need Python
      sha1_file: remove an used fd variable
      submodule: remove a superfluous second check for the "new" variable
      gitmodules: clarify what history depth a shallow clone has
      gitmodules: clarify the ignore option values

Segev Finer (2):
      connect: handle putty/plink also in GIT_SSH_COMMAND
      connect: Add the envvar GIT_SSH_VARIANT and ssh.variant config

Sergey Ryazanov (2):
      http: honor empty http.proxy option to bypass proxy
      http: fix the silent ignoring of proxy misconfiguraion

Stefan Beller (36):
      Documentation: fix a typo
      refs: parse_hide_refs_config to use parse_config_key
      submodule init: warn about falling back to a local path
      rev-parse: add --show-superproject-working-tree
      submodule-config: correct error reporting for invalid ignore value
      connect_work_tree_and_git_dir: safely create leading directories
      lib-submodule-update.sh: reorder create_lib_submodule_repo
      lib-submodule-update.sh: do not use ./. as submodule remote
      lib-submodule-update: teach test_submodule_content the -C <dir> flag
      lib-submodule-update.sh: replace sha1 by hash
      lib-submodule-update.sh: define tests for recursing into submodules
      make is_submodule_populated gently
      update submodules: add submodule config parsing
      update submodules: add a config option to determine if submodules are updated
      submodules: introduce check to see whether to touch a submodule
      update submodules: move up prepare_submodule_repo_env
      submodule.c: get_super_prefix_or_empty
      update submodules: add submodule_move_head
      unpack-trees: pass old oid to verify_clean_submodule
      unpack-trees: check if we can perform the operation for submodules
      entry.c: create submodules when interesting
      builtin/checkout: add --recurse-submodules switch
      builtin/read-tree: add --recurse-submodules switch
      wt-status: simplify by using for_each_string_list_item
      t3600: rename test to describe its functionality
      builtin/describe: introduce --broken flag
      submodule.c: use argv_array in is_submodule_modified
      submodule.c: factor out early loop termination in is_submodule_modified
      submodule.c: convert is_submodule_modified to use strbuf_getwholeline
      submodule.c: port is_submodule_modified to use porcelain 2
      submodule.c: stricter checking for submodules in is_submodule_modified
      short status: improve reporting for submodule changes
      unpack-trees.c: align submodule error message to the other error messages
      submodule.c: correctly handle nested submodules in is_submodule_modified
      diff: submodule inline diff to initialize env array.
      submodule--helper: fix typo in is_active error message

Thomas Gummerer (9):
      stash: introduce push verb
      stash: add test for the create command line arguments
      stash: refactor stash_create
      stash: teach 'push' (and 'create_stash') to honor pathspec
      stash: use stash_push for no verb form
      stash: allow pathspecs in the no verb form
      stash: don't show internal implementation details
      stash: pass the pathspec argument to git reset
      stash: keep untracked files intact in stash -k

Torsten Bögershausen (1):
      gitattributes.txt: document how to normalize the line endings

Valery Tolstov (1):
      submodule--helper.c: remove duplicate code

Vegard Nossum (2):
      xdiff -W: relax end-of-file function detection
      line-log: use COPY_ARRAY to fix mis-sized memcpy

brian m. carlson (41):
      hex: introduce parse_oid_hex
      builtin/commit: convert to struct object_id
      builtin/diff-tree: convert to struct object_id
      builtin/describe: convert to struct object_id
      builtin/fast-export: convert to struct object_id
      builtin/fmt-merge-message: convert to struct object_id
      builtin/grep: convert to struct object_id
      builtin/branch: convert to struct object_id
      builtin/clone: convert to struct object_id
      builtin/merge: convert to struct object_id
      Convert remaining callers of resolve_refdup to object_id
      builtin/replace: convert to struct object_id
      reflog-walk: convert struct reflog_info to struct object_id
      refs: convert each_reflog_ent_fn to struct object_id
      refs: simplify parsing of reflog entries
      sha1_file: introduce an nth_packed_object_oid function
      Convert object iteration callbacks to struct object_id
      builtin/merge-base: convert to struct object_id
      wt-status: convert to struct object_id
      hash.h: move SHA-1 implementation selection into a header file
      Define new hash-size constants for allocating memory
      Convert GIT_SHA1_HEXSZ used for allocation to GIT_MAX_HEXSZ
      Convert GIT_SHA1_RAWSZ used for allocation to GIT_MAX_RAWSZ
      builtin/diff: convert to struct object_id
      builtin/pull: convert portions to struct object_id
      builtin/receive-pack: fix incorrect pointer arithmetic
      builtin/receive-pack: convert portions to struct object_id
      fsck: convert init_skiplist to struct object_id
      parse-options-cb: convert sha1_array_append caller to struct object_id
      test-sha1-array: convert most code to struct object_id
      sha1_name: convert struct disambiguate_state to object_id
      sha1_name: convert disambiguate_hint_fn to take object_id
      submodule: convert check_for_new_submodule_commits to object_id
      builtin/pull: convert to struct object_id
      sha1-array: convert internal storage for struct sha1_array to object_id
      Make sha1_array_append take a struct object_id *
      Convert remaining callers of sha1_array_lookup to object_id
      Convert sha1_array_lookup to take struct object_id
      Convert sha1_array_for_each_unique and for_each_abbrev to object_id
      Rename sha1_array to oid_array
      Documentation: update and rename api-sha1-array.txt

Ævar Arnfjörð Bjarmason (32):
      cvs tests: skip tests that call "cvs commit" when running as root
      gitweb tests: change confusing "skip_all" phrasing
      gitweb tests: skip tests when we don't have Time::HiRes
      doc: change erroneous --[no]-whatever into --[no-]whatever
      push: mention "push.default=tracking" in the documentation
      tag doc: move the description of --[no-]merged earlier
      tag doc: split up the --[no-]merged documentation
      tag doc: reword --[no-]merged to talk about commits, not tips
      ref-filter: make combining --merged & --no-merged an error
      doc/SubmittingPatches: clarify the casing convention for "area: change..."
      t/README: link to metacpan.org, not search.cpan.org
      t/README: change "Inside <X> part" to "Inside the <X> part"
      ref-filter: add test for --contains on a non-commit
      tag: remove a TODO item from the test suite
      tag tests: fix a typo in a test description
      for-each-ref: partly change <object> to <commit> in help
      branch doc: change `git branch <pattern>` to use `<branchname>`
      tag: add more incompatibles mode tests
      parse-options: add OPT_NONEG to the "contains" option
      tag: change misleading --list <pattern> documentation
      tag: implicitly supply --list given another list-like option
      tag: change --point-at to default to HEAD
      ref-filter: add --no-contains option to tag/branch/for-each-ref
      ref-filter: reflow recently changed branch/tag/for-each-ref docs
      tag: add tests for --with and --without
      t/README: clarify the test_have_prereq documentation
      doc/SubmittingPatches: show how to get a CLI commit summary
      rev-parse: match @{upstream}, @{u} and @{push} case-insensitively
      perl: regenerate perl.mak if perl -V changes
      grep: plug a trivial memory leak
      push: document & test --force-with-lease with multiple remotes
      completion: expand "push --delete <remote> <ref>" for refs on that <remote>


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.12.0-rc1
@ 2017-02-10 21:29  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2017-02-10 21:29 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

A release candidate Git v2.12.0-rc1 is now available for testing
at the usual places.  It is comprised of 455 non-merge commits
since v2.11.0, contributed by 65 people, 20 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.12.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.11.0 are as follows.
Welcome to the Git development community!

  Alan Davies, Andreas Krey, Cornelius Weig, Denton Liu, George
  Vanburgh, Igor Kushnir, Jack Bates, Kristoffer Haugsbakk, Kyle
  Meyer, Luis Ressel, Lukas Puehringer, Markus Hitter, Peter Law,
  Rasmus Villemoes, Rogier Goossens, Stefan Dotterweich, Steven
  Penny, Vinicius Kursancew, Vladimir Panteleev, and Wolfram Sang.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  마누엘, Alex Henrie, Beat Bolli, Brandon Williams, brian
  m. carlson, Chris Packham, Christian Couder, David Aguilar, David
  Turner, Dennis Kaarsemaker, Dimitriy Ryazantcev, Elia Pinto,
  Eric Wong, Heiko Voigt, Jacob Keller, Jeff Hostetler, Jeff King,
  Johannes Schindelin, Johannes Sixt, Jonathan Tan, Junio C Hamano,
  Kyle J. McKay, Lars Schneider, Linus Torvalds, Luke Diamand, Matt
  McCutchen, Max Kirillov, Mike Hommey, Nguyễn Thái Ngọc Duy,
  Patrick Steinhardt, Paul Mackerras, Philip Oakley, Pranit Bauva,
  Ramsay Jones, René Scharfe, Richard Hansen, Santiago Torres,
  Satoshi Yasushima, Stefan Beller, Stephan Beyer, SZEDER Gábor,
  Torsten Bögershausen, Vasco Almeida, Vegard Nossum, and Vitaly
  "_Vi" Shukela.

----------------------------------------------------------------

Git 2.12 Release Notes (draft)
==============================

Backward compatibility notes.

 * Use of an empty string that is used for 'everything matches' is
   still warned and Git asks users to use a more explicit '.' for that
   instead.  The hope is that existing users will not mind this
   change, and eventually the warning can be turned into a hard error,
   upgrading the deprecation into removal of this (mis)feature.  That
   is not scheduled to happen in the upcoming release (yet).

 * The historical argument order "git merge <msg> HEAD <commit>..."
   has been deprecated for quite some time, and will be removed in a
   future release.

 * An ancient script "git relink" has been removed.


Updates since v2.11
-------------------

UI, Workflows & Features

 * Various updates to "git p4".

 * "git p4" didn't interact with the internal of .git directory
   correctly in the modern "git-worktree"-enabled world.

 * "git branch --list" and friends learned "--ignore-case" option to
   optionally sort branches and tags case insensitively.

 * In addition to %(subject), %(body), "log --pretty=format:..."
   learned a new placeholder %(trailers).

 * "git rebase" learned "--quit" option, which allows a user to
   remove the metadata left by an earlier "git rebase" that was
   manually aborted without using "git rebase --abort".

 * "git clone --reference $there --recurse-submodules $super" has been
   taught to guess repositories usable as references for submodules of
   $super that are embedded in $there while making a clone of the
   superproject borrow objects from $there; extend the mechanism to
   also allow submodules of these submodules to borrow repositories
   embedded in these clones of the submodules embedded in the clone of
   the superproject.

 * Porcelain scripts written in Perl are getting internationalized.

 * "git merge --continue" has been added as a synonym to "git commit"
   to conclude a merge that has stopped due to conflicts.

 * Finer-grained control of what protocols are allowed for transports
   during clone/fetch/push have been enabled via a new configuration
   mechanism.

 * "git shortlog" learned "--committer" option to group commits by
   committer, instead of author.

 * GitLFS integration with "git p4" has been updated.

 * The isatty() emulation for Windows has been updated to eradicate
   the previous hack that depended on internals of (older) MSVC
   runtime.

 * Some platforms no longer understand "latin-1" that is still seen in
   the wild in e-mail headers; replace them with "iso-8859-1" that is
   more widely known when conversion fails from/to it.

 * "git grep" has been taught to optionally recurse into submodules.

 * "git rm" used to refuse to remove a submodule when it has its own
   git repository embedded in its working tree.  It learned to move
   the repository away to $GIT_DIR/modules/ of the superproject
   instead, and allow the submodule to be deleted (as long as there
   will be no loss of local modifications, that is).

 * A recent updates to "git p4" was not usable for older p4 but it
   could be made to work with minimum changes.  Do so.

 * "git diff" learned diff.interHunkContext configuration variable
   that gives the default value for its --inter-hunk-context option.

 * The prereleaseSuffix feature of version comparison that is used in
   "git tag -l" did not correctly when two or more prereleases for the
   same release were present (e.g. when 2.0, 2.0-beta1, and 2.0-beta2
   are there and the code needs to compare 2.0-beta1 and 2.0-beta2).

 * "git submodule push" learned "--recurse-submodules=only option to
   push submodules out without pushing the top-level superproject.

 * "git tag" and "git verify-tag" learned to put GPG verification
   status in their "--format=<placeholders>" output format.

 * An ancient repository conversion tool left in contrib/ has been
   removed.

 * "git show-ref HEAD" used with "--verify" because the user is not
   interested in seeing refs/remotes/origin/HEAD, and used with
   "--head" because the user does not want HEAD to be filtered out,
   i.e. "git show-ref --head --verify HEAD", did not work as expected.

 * "git submodule add" used to be confused and refused to add a
   locally created repository; users can now use "--force" option
   to add them.
   (merge 619acfc78c sb/submodule-add-force later to maint).

 * Some people feel the default set of colors used by "git log --graph"
   rather limiting.  A mechanism to customize the set of colors has
   been introduced.

 * "git read-tree" and its underlying unpack_trees() machinery learned
   to report problematic paths prefixed with the --super-prefix option.

 * When a submodule "A", which has another submodule "B" nested within
   it, is "absorbed" into the top-level superproject, the inner
   submodule "B" used to be left in a strange state.  The logic to
   adjust the .git pointers in these submodules has been corrected.

 * The user can specify a custom update method that is run when
   "submodule update" updates an already checked out submodule.  This
   was ignored when checking the submodule out for the first time and
   we instead always just checked out the commit that is bound to the
   path in the superproject's index.

 * The command line completion (in contrib/) learned that
   "git diff --submodule=" can take "diff" as a recently added option.

 * The "core.logAllRefUpdates" that used to be boolean has been
   enhanced to take 'always' as well, to record ref updates to refs
   other than the ones that are expected to be updated (i.e. branches,
   remote-tracking branches and notes).


Performance, Internal Implementation, Development Support etc.

 * Commands that operate on a log message and add lines to the trailer
   blocks, such as "format-patch -s", "cherry-pick (-x|-s)", and
   "commit -s", have been taught to use the logic of and share the
   code with "git interpret-trailer".

 * The default Travis-CI configuration specifies newer P4 and GitLFS.

 * The "fast hash" that had disastrous performance issues in some
   corner cases has been retired from the internal diff.

 * The character width table has been updated to match Unicode 9.0

 * Update the procedure to generate "tags" for developer support.

 * The codeflow of setting NOATIME and CLOEXEC on file descriptors Git
   opens has been simplified.

 * "git diff" and its family had two experimental heuristics to shift
   the contents of a hunk to make the patch easier to read.  One of
   them turns out to be better than the other, so leave only the
   "--indent-heuristic" option and remove the other one.

 * A new submodule helper "git submodule embedgitdirs" to make it
   easier to move embedded .git/ directory for submodules in a
   superproject to .git/modules/ (and point the latter with the former
   that is turned into a "gitdir:" file) has been added.

 * "git push \\server\share\dir" has recently regressed and then
   fixed.  A test has retroactively been added for this breakage.

 * Build updates for Cygwin.

 * The implementation of "real_path()" was to go there with chdir(2)
   and call getcwd(3), but this obviously wouldn't be usable in a
   threaded environment.  Rewrite it to manually resolve relative
   paths including symbolic links in path components.

 * Adjust documentation to help AsciiDoctor render better while not
   breaking the rendering done by AsciiDoc.

 * The sequencer machinery has been further enhanced so that a later
   set of patches can start using it to reimplement "rebase -i".

 * Update the definition of the MacOSX test environment used by
   TravisCI.

 * Rewrite a scripted porcelain "git difftool" in C.

 * "make -C t failed" will now run only the tests that failed in the
   previous run.  This is usable only when prove is not use, and gives
   a useless error message when run after "make clean", but otherwise
   is serviceable.

 * "uchar [40]" to "struct object_id" conversion continues.


Also contains various documentation updates and code clean-ups.

Fixes since v2.10
-----------------

Unless otherwise noted, all the fixes since v2.9 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * We often decide if a session is interactive by checking if the
   standard I/O streams are connected to a TTY, but isatty() that
   comes with Windows incorrectly returned true if it is used on NUL
   (i.e. an equivalent to /dev/null).  This has been fixed.

 * "git svn" did not work well with path components that are "0", and
   some configuration variable it uses were not documented.

 * "git rev-parse --symbolic" failed with a more recent notation like
   "HEAD^-1" and "HEAD^!".

 * An empty directory in a working tree that can simply be nuked used
   to interfere while merging or cherry-picking a change to create a
   submodule directory there, which has been fixed..

 * The code in "git push" to compute if any commit being pushed in the
   superproject binds a commit in a submodule that hasn't been pushed
   out was overly inefficient, making it unusable even for a small
   project that does not have any submodule but have a reasonable
   number of refs.

 * "git push --dry-run --recurse-submodule=on-demand" wasn't
   "--dry-run" in the submodules.

 * The output from "git worktree list" was made in readdir() order,
   and was unstable.

 * mergetool.<tool>.trustExitCode configuration variable did not apply
   to built-in tools, but now it does.

 * "git p4" LFS support was broken when LFS stores an empty blob.

 * A corner case in merge-recursive regression that crept in
   during 2.10 development cycle has been fixed.

 * Transport with dumb http can be fooled into following foreign URLs
   that the end user does not intend to, especially with the server
   side redirects and http-alternates mechanism, which can lead to
   security issues.  Tighten the redirection and make it more obvious
   to the end user when it happens.

 * Update the error messages from the dumb-http client when it fails
   to obtain loose objects; we used to give sensible error message
   only upon 404 but we now forbid unexpected redirects that needs to
   be reported with something sensible.

 * When diff.renames configuration is on (and with Git 2.9 and later,
   it is enabled by default, which made it worse), "git stash"
   misbehaved if a file is removed and another file with a very
   similar content is added.

 * "git diff --no-index" did not take "--no-abbrev" option.

 * "git difftool --dir-diff" had a minor regression when started from
   a subdirectory, which has been fixed.

 * "git commit --allow-empty --only" (no pathspec) with dirty index
   ought to be an acceptable way to create a new commit that does not
   change any paths, but it was forbidden, perhaps because nobody
   needed it so far.

 * Git 2.11 had a minor regression in "merge --ff-only" that competed
   with another process that simultanously attempted to update the
   index. We used to explain what went wrong with an error message,
   but the new code silently failed.  The error message has been
   resurrected.

 * A pathname that begins with "//" or "\\" on Windows is special but
   path normalization logic was unaware of it.

 * "git pull --rebase", when there is no new commits on our side since
   we forked from the upstream, should be able to fast-forward without
   invoking "git rebase", but it didn't.

 * The way to specify hotkeys to "xxdiff" that is used by "git
   mergetool" has been modernized to match recent versions of xxdiff.

 * Unlike "git am --abort", "git cherry-pick --abort" moved HEAD back
   to where cherry-pick started while picking multiple changes, when
   the cherry-pick stopped to ask for help from the user, and the user
   did "git reset --hard" to a different commit in order to re-attempt
   the operation.

 * Code cleanup in shallow boundary computation.

 * A recent update to receive-pack to make it easier to drop garbage
   objects made it clear that GIT_ALTERNATE_OBJECT_DIRECTORIES cannot
   have a pathname with a colon in it (no surprise!), and this in turn
   made it impossible to push into a repository at such a path.  This
   has been fixed by introducing a quoting mechanism used when
   appending such a path to the colon-separated list.

 * The function usage_msg_opt() has been updated to say "fatal:"
   before the custom message programs give, when they want to die
   with a message about wrong command line options followed by the
   standard usage string.

 * "git index-pack --stdin" needs an access to an existing repository,
   but "git index-pack file.pack" to generate an .idx file that
   corresponds to a packfile does not.

 * Fix for NDEBUG builds.

 * A lazy "git push" without refspec did not internally use a fully
   specified refspec to perform 'current', 'simple', or 'upstream'
   push, causing unnecessary "ambiguous ref" errors.

 * "git p4" misbehaved when swapping a directory and a symbolic link.

 * Even though an fix was attempted in Git 2.9.3 days, but running
   "git difftool --dir-diff" from a subdirectory never worked. This
   has been fixed.

 * "git p4" that tracks multile p4 paths imported a single changelist
   that touches files in these multiple paths as one commit, followed
   by many empty commits.  This has been fixed.

 * A potential but unlikely buffer overflow in Windows port has been
   fixed.

 * When the http server gives an incomplete response to a smart-http
   rpc call, it could lead to client waiting for a full response that
   will never come.  Teach the client side to notice this condition
   and abort the transfer.

 * Compression setting for producing packfiles were spread across
   three codepaths, one of which did not honor any configuration.
   Unify these so that all of them honor core.compression and
   pack.compression variables the same way.

 * "git fast-import" sometimes mishandled while rebalancing notes
   tree, which has been fixed.

 * Recent update to the default abbreviation length that auto-scales
   lacked documentation update, which has been corrected.

 * Leakage of lockfiles in the config subsystem has been fixed.

 * It is natural that "git gc --auto" may not attempt to pack
   everything into a single pack, and there is no point in warning
   when the user has configured the system to use the pack bitmap,
   leading to disabling further "gc".

 * "git archive" did not read the standard configuration files, and
   failed to notice a file that is marked as binary via the userdiff
   driver configuration.

 * "git blame --porcelain" misidentified the "previous" <commit, path>
   pair (aka "source") when contents came from two or more files.

 * "git rebase -i" with a recent update started showing an incorrect
   count when squashing more than 10 commits.

 * "git <cmd> @{push}" on a detached HEAD used to segfault; it has
   been corrected to error out with a message.

 * Running "git add a/b" when "a" is a submodule correctly errored
   out, but without a meaningful error message.
   (merge 2d81c48fa7 sb/pathspec-errors later to maint).

 * Typing ^C to pager, which usually does not kill it, killed Git and
   took the pager down as a collateral damage in certain process-tree
   structure.  This has been fixed.

 * "git mergetool" without any pathspec on the command line that is
   run from a subdirectory became no-op in Git v2.11 by mistake, which
   has been fixed.

 * Retire long unused/unmaintained gitview from the contrib/ area.
   (merge 3120925c25 sb/remove-gitview later to maint).

 * Tighten a test to avoid mistaking an extended ERE regexp engine as
   a PRE regexp engine.

 * An error message with an ASCII control character like '\r' in it
   can alter the message to hide its early part, which is problematic
   when a remote side gives such an error message that the local side
   will relay with a "remote: " prefix.
   (merge f290089879 jk/vreport-sanitize later to maint).

 * "git fsck" inspects loose objects more carefully now.
   (merge cce044df7f jk/loose-object-fsck later to maint).

 * A crashing bug introduced in v2.11 timeframe has been found (it is
   triggerable only in fast-import) and fixed.
   (merge abd5a00268 jk/clear-delta-base-cache-fix later to maint).

 * With an anticipatory tweak for remotes defined in ~/.gitconfig
   (e.g. "remote.origin.prune" set to true, even though there may or
   may not actually be "origin" remote defined in a particular Git
   repository), "git remote rename" and other commands misinterpreted
   and behaved as if such a non-existing remote actually existed.
   (merge e459b073fb js/remote-rename-with-half-configured-remote later to maint).

 * A few codepaths had to rely on a global variable when sorting
   elements of an array because sort(3) API does not allow extra data
   to be passed to the comparison function.  Use qsort_s() when
   natively available, and a fallback implementation of it when not,
   to eliminate the need, which is a prerequisite for making the
   codepath reentrant.

 * "git fsck --connectivity-check" was not working at all.
   (merge a2b22854bd jk/fsck-connectivity-check-fix later to maint).

 * After starting "git rebase -i", which first opens the user's editor
   to edit the series of patches to apply, but before saving the
   contents of that file, "git status" failed to show the current
   state (i.e. you are in an interactive rebase session, but you have
   applied no steps yet) correctly.
   (merge df9ded4984 js/status-pre-rebase-i later to maint).

 * Test tweak for FreeBSD where /usr/bin/unzip is unsuitable to run
   our tests but /usr/local/bin/unzip is usable.
   (merge d98b2c5fce js/unzip-in-usr-bin-workaround later to maint).

 * "git p4" did not work well with multiple git-p4.mapUser entries on
   Windows.
   (merge c3c2b05776 gv/mingw-p4-mapuser later to maint).

 * "git help" enumerates executable files in $PATH; the implementation
   of "is this file executable?" on Windows has been optimized.
   (merge c755015f79 hv/mingw-help-is-executable later to maint).

 * Test tweaks for those who have default ACL in their git source tree
   that interfere with the umask test.
   (merge d549d21307 mm/reset-facl-before-umask-test later to maint).

 * Names of the various hook scripts must be spelled exactly, but on
   Windows, an .exe binary must be named with .exe suffix; notice
   $GIT_DIR/hooks/<hookname>.exe as a valid <hookname> hook.
   (merge 235be51fbe js/mingw-hooks-with-exe-suffix later to maint).

 * Asciidoctor, an alternative reimplementation of AsciiDoc, still
   needs some changes to work with documents meant to be formatted
   with AsciiDoc.  "make USE_ASCIIDOCTOR=YesPlease" to use it out of
   the box to document our pages is getting closer to reality.

 * Correct command line completion (in contrib/) on "git svn"
   (merge 2cbad17642 ew/complete-svn-authorship-options later to maint).

 * Incorrect usage help message for "git worktree prune" has been fixed.
   (merge 2488dcab22 ps/worktree-prune-help-fix later to maint).

 * Adjust a perf test to new world order where commands that do
   require a repository are really strict about having a repository.
   (merge c86000c1a7 rs/p5302-create-repositories-before-tests later to maint).

 * "git log --graph" did not work well with "--name-only", even though
   other forms of "diff" output were handled correctly.
   (merge f5022b5fed jk/log-graph-name-only later to maint).

 * Other minor doc, test and build updates and code cleanups.
   (merge f2627d9b19 sb/submodule-config-cleanup later to maint).
   (merge 384f1a167b sb/unpack-trees-cleanup later to maint).
   (merge 874444b704 rh/diff-orderfile-doc later to maint).
   (merge eafd5d9483 cw/doc-sign-off later to maint).
   (merge 0aaad415bc rs/absolute-pathdup later to maint).
   (merge 4432dd6b5b rs/receive-pack-cleanup later to maint).
   (merge 540a398e9c sg/mailmap-self later to maint).
   (merge 209df269a6 nd/rev-list-all-includes-HEAD-doc later to maint).

----------------------------------------------------------------

Changes since v2.11.0 are as follows:

Alan Davies (1):
      mingw: fix colourization on Cygwin pseudo terminals

Alex Henrie (3):
      bisect: improve English grammar of not-ancestors message
      receive-pack: improve English grammar of denyCurrentBranch message
      clone,fetch: explain the shallow-clone option a little more clearly

Andreas Krey (2):
      commit: make --only --allow-empty work without paths
      commit: remove 'Clever' message for --only --amend

Beat Bolli (6):
      update_unicode.sh: move it into contrib/update-unicode
      update_unicode.sh: remove an unnecessary subshell level
      update_unicode.sh: pin the uniset repo to a known good commit
      update_unicode.sh: automatically download newer definition files
      update_unicode.sh: remove the plane filter
      unicode_width.h: update the width tables to Unicode 9.0

Brandon Williams (40):
      push: --dry-run updates submodules when --recurse-submodules=on-demand
      push: fix --dry-run to not push submodules
      real_path: resolve symlinks by hand
      real_path: convert real_path_internal to strbuf_realpath
      real_path: create real_pathdup
      real_path: have callers use real_pathdup and strbuf_realpath
      lib-proto-disable: variable name fix
      http: always warn if libcurl version is too old
      transport: add protocol policy config option
      http: create function to get curl allowed protocols
      transport: add from_user parameter to is_transport_allowed
      transport: reformat flag #defines to be more readable
      submodules: add RECURSE_SUBMODULES_ONLY value
      push: add option to push only submodules
      submodules: add helper to determine if a submodule is populated
      submodules: add helper to determine if a submodule is initialized
      submodules: load gitmodules file from commit sha1
      grep: add submodules as a grep source type
      grep: optionally recurse into submodules
      grep: enable recurse-submodules to work on <tree> objects
      grep: search history of moved submodules
      mv: remove use of deprecated 'get_pathspec()'
      dir: remove struct path_simplify
      dir: convert fill_directory to use the pathspec struct interface
      ls-tree: convert show_recursive to use the pathspec struct interface
      pathspec: remove the deprecated get_pathspec function
      pathspec: copy and free owned memory
      pathspec: remove unused variable from unsupported_magic
      pathspec: always show mnemonic and name in unsupported_magic
      pathspec: simpler logic to prefix original pathspec elements
      pathspec: factor global magic into its own function
      pathspec: create parse_short_magic function
      pathspec: create parse_long_magic function
      pathspec: create parse_element_magic helper
      pathspec: create strip submodule slash helpers
      pathspec: small readability changes
      pathspec: rename prefix_pathspec to init_pathspec_item
      real_path: prevent redefinition of MAXSYMLINKS
      real_path: set errno when max number of symlinks is exceeded
      index: improve constness for reading blob data

Chris Packham (3):
      merge: add '--continue' option as a synonym for 'git commit'
      completion: add --continue option for merge
      merge: ensure '--abort' option takes no arguments

Christian Couder (1):
      Documentation/bisect: improve on (bad|new) and (good|bad)

Cornelius Weig (7):
      doc: clarify distinction between sign-off and pgp-signing
      config: add markup to core.logAllRefUpdates doc
      refs: add option core.logAllRefUpdates = always
      update-ref: add test cases for bare repository
      doc: add doc for git-push --recurse-submodules=only
      completion: add completion for --recurse-submodules=only
      doc: add note about ignoring '--no-create-reflog'

David Aguilar (12):
      mergetool: honor mergetool.$tool.trustExitCode for built-in tools
      mergetools/vimdiff: trust Vim's exit code
      difftool: fix dir-diff index creation when in a subdirectory
      difftool: fix dir-diff index creation when in a subdirectory
      difftool: sanitize $workdir as early as possible
      difftool: chdir as early as possible
      difftool: rename variables for consistency
      mergetools: fix xxdiff hotkeys
      gitk: Remove translated message from comments
      difftool: fix bug when printing usage
      t7800: simplify basic usage test
      t7800: replace "wc -l" with test_line_count

David Turner (5):
      submodules: allow empty working-tree dirs in merge/cherry-pick
      remote-curl: don't hang when a server dies before any output
      upload-pack: optionally allow fetching any sha1
      auto gc: don't write bitmaps for incremental repacks
      repack: die on incremental + write-bitmap-index

Dennis Kaarsemaker (1):
      push: test pushing ambiguously named branches

Denton Liu (1):
      Document the --no-gui option in difftool

Dimitriy Ryazantcev (1):
      gitk: ru.po: Update Russian translation

Elia Pinto (2):
      builtin/commit.c: remove the PATH_MAX limitation via dynamic allocation
      builtin/commit.c: switch to strbuf, instead of snprintf()

Eric Wong (3):
      git-svn: allow "0" in SVN path components
      git-svn: document useLogAuthor and addAuthorFrom config keys
      completion: fix git svn authorship switches

George Vanburgh (2):
      git-p4: fix multi-path changelist empty commits
      git-p4: fix git-p4.mapUser on Windows

Heiko Voigt (5):
      serialize collection of changed submodules
      serialize collection of refs that contain submodule changes
      batch check whether submodule needs pushing into one call
      submodule_needs_pushing(): explain the behaviour when we cannot answer
      help: improve is_executable() on Windows

Igor Kushnir (1):
      git-p4: do not pass '-r 0' to p4 commands

Jack Bates (1):
      diff: handle --no-abbrev in no-index case

Jacob Keller (3):
      pretty: add %(trailers) format for displaying trailers of a commit message
      ref-filter: add support to display trailers as part of contents
      reset: add an example of how to split a commit into two

Jeff Hostetler (1):
      mingw: replace isatty() hack

Jeff King (58):
      rev-parse: fix parent shorthands with --symbolic
      t7610: clean up foo.XXXXXX tmpdir
      http: simplify update_url_from_redirect
      http: always update the base URL for redirects
      remote-curl: rename shadowed options variable
      http: make redirects more obvious
      http: treat http-alternates like redirects
      http-walker: complain about non-404 loose object errors
      xdiff: drop XDL_FAST_HASH
      stash: prefer plumbing over git-diff
      alternates: accept double-quoted paths
      tmp-objdir: quote paths we add to alternates
      Makefile: reformat FIND_SOURCE_FILES
      Makefile: exclude test cruft from FIND_SOURCE_FILES
      Makefile: match shell scripts in FIND_SOURCE_FILES
      Makefile: exclude contrib from FIND_SOURCE_FILES
      parse-options: print "fatal:" before usage_msg_opt()
      http: respect protocol.*.allow=user for http-alternates
      README: replace gmane link with public-inbox
      merge: mark usage error strings for translation
      t5000: extract nongit function to test-lib-functions.sh
      index-pack: complain when --stdin is used outside of a repo
      t: use nongit() function where applicable
      shortlog: test and document --committer option
      index-pack: skip collision check when not in repository
      archive-zip: load userdiff config
      rebase--interactive: count squash commits above 10 correctly
      blame: fix alignment with --abbrev=40
      blame: handle --no-abbrev
      blame: output porcelain "previous" header for each file
      git_exec_path: do not return the result of getenv()
      execv_dashed_external: use child_process struct
      execv_dashed_external: stop exiting with negative code
      execv_dashed_external: wait for child on signal death
      t7810: avoid assumption about invalid regex syntax
      Revert "vreportf: avoid intermediate buffer"
      vreport: sanitize ASCII control chars
      t1450: refactor loose-object removal
      sha1_file: fix error message for alternate objects
      t1450: test fsck of packed objects
      sha1_file: add read_loose_object() function
      fsck: parse loose object paths directly
      fsck: detect trailing garbage in all object types
      t1450: clean up sub-objects in duplicate-entry test
      fsck: report trees as dangling
      fsck: prepare dummy objects for --connectivity-check
      fsck: tighten error-checks of "git fsck <head>"
      fsck: do not fallback "git fsck <bogus>" to "git fsck"
      fsck: check HAS_OBJ more consistently
      CodingGuidelines: clarify multi-line brace style
      clear_delta_base_cache(): don't modify hashmap while iterating
      t1450: use "mv -f" within loose object directory
      difftool: hack around -Wzero-length-format warning
      fsck: move typename() printing to its own function
      fsck: lazily load types under --connectivity-only
      color_parse_mem: allow empty color spec
      document behavior of empty color name
      diff: print line prefix for --name-only output

Johannes Schindelin (56):
      cherry-pick: demonstrate a segmentation fault
      merge-recursive: handle NULL in add_cacheinfo() correctly
      mingw: intercept isatty() to handle /dev/null as Git expects it
      mingw: adjust is_console() to work with stdin
      mingw: add a regression test for pushing to UNC paths
      giteveryday: unbreak rendering with AsciiDoctor
      git_exec_path: avoid Coverity warning about unfree()d result
      sequencer: avoid unnecessary curly braces
      sequencer: move "else" keyword onto the same line as preceding brace
      sequencer: use a helper to find the commit message
      sequencer: support a new action: 'interactive rebase'
      sequencer (rebase -i): implement the 'noop' command
      sequencer (rebase -i): implement the 'edit' command
      sequencer (rebase -i): implement the 'exec' command
      sequencer (rebase -i): learn about the 'verbose' mode
      sequencer (rebase -i): write the 'done' file
      sequencer (rebase -i): add support for the 'fixup' and 'squash' commands
      sequencer (rebase -i): implement the short commands
      sequencer (rebase -i): write an author-script file
      sequencer (rebase -i): allow continuing with staged changes
      sequencer (rebase -i): remove CHERRY_PICK_HEAD when no longer needed
      sequencer (rebase -i): skip some revert/cherry-pick specific code path
      sequencer (rebase -i): the todo can be empty when continuing
      sequencer (rebase -i): update refs after a successful rebase
      sequencer (rebase -i): leave a patch upon error
      sequencer (rebase -i): implement the 'reword' command
      sequencer (rebase -i): allow fast-forwarding for edit/reword
      sequencer (rebase -i): refactor setting the reflog message
      sequencer (rebase -i): set the reflog message consistently
      sequencer (rebase -i): copy commit notes at end
      sequencer (rebase -i): record interrupted commits in rewritten, too
      sequencer (rebase -i): run the post-rewrite hook, if needed
      sequencer (rebase -i): respect the rebase.autostash setting
      sequencer (rebase -i): respect strategy/strategy_opts settings
      sequencer (rebase -i): allow rescheduling commands
      sequencer (rebase -i): implement the 'drop' command
      sequencer (rebase -i): differentiate between comments and 'noop'
      difftool: add a skeleton for the upcoming builtin
      sequencer: update reading author-script
      sequencer: use run_command() directly
      sequencer (rebase -i): show only failed `git commit`'s output
      sequencer (rebase -i): show only failed cherry-picks' output
      sequencer (rebase -i): suggest --edit-todo upon unknown command
      sequencer (rebase -i): show the progress
      sequencer (rebase -i): write the progress into files
      sequencer (rebase -i): write out the final message
      mingw: follow-up to "replace isatty() hack"
      difftool: implement the functionality in the builtin
      difftool: retire the scripted version
      remote rename: demonstrate a bogus "remote exists" bug
      remote rename: more carefully determine whether a remote is configured
      relink: retire the command
      status: be prepared for not-yet-started interactive rebase
      t/Makefile: add a rule to re-run previously-failed tests
      test-lib: on FreeBSD, look for unzip(1) in /usr/local/bin/
      mingw: allow hooks to be .exe files

Johannes Sixt (4):
      t5547-push-quarantine: run the path separator test on Windows, too
      normalize_path_copy(): fix pushing to //server/share/dir on Windows
      t5615-alternate-env: double-quotes in file names do not work on Windows
      real_path: canonicalize directory separators in root parts

Jonathan Tan (6):
      fetch: do not redundantly calculate tag refmap
      trailer: be stricter in parsing separators
      commit: make ignore_non_trailer take buf/len
      trailer: avoid unnecessary splitting on lines
      trailer: have function to describe trailer layout
      sequencer: use trailer's trailer layout

Junio C Hamano (37):
      utf8: refactor code to decide fallback encoding
      utf8: accept "latin-1" as ISO-8859-1
      git_open(): untangle possible NOATIME and CLOEXEC interactions
      push: do not use potentially ambiguous default refspec
      git_open_cloexec(): use fcntl(2) w/ FD_CLOEXEC fallback
      sha1_file: stop opening files with O_NOATIME
      compression: unify pack.compression configuration parsing
      pull: fast-forward "pull --rebase=true"
      preparing for 2.10.3
      Start post 2.11 cycle
      wt-status: implement opportunisitc index update correctly
      hold_locked_index(): align error handling with hold_lockfile_for_update()
      lockfile: LOCK_REPORT_ON_ERROR
      Early fixes for 2.11.x series
      Revert "sequencer: remove useless get_dir() function"
      First batch for 2.12
      Second batch for 2.12
      i18n: fix misconversion in shell scripts
      t4201: make tests work with and without the MINGW prerequiste
      Third batch for 2.12
      config.abbrev: document the new default that auto-scales
      diff: retire "compaction" heuristics
      lockfile: move REPORT_ON_ERROR bit elsewhere
      Fourth batch for 2.12
      Fifth batch 2.12
      Almost ready for 2.11.1
      RelNotes: drop merge-later comments for maint
      Sixth batch for 2.12
      Seventh batch for 2.12
      show-ref: remove a stale comment
      relink: really remove the command
      Eighth batch for 2.12
      Ready for 2.11.1
      Git 2.11.1
      Ninth batch for 2.12; almost ready for -rc0
      Git 2.12-rc0
      Git 2.12-rc1

Kristoffer Haugsbakk (4):
      doc: add articles (grammar)
      doc: add verb in front of command to run
      doc: make the intent of sentence clearer
      doc: omit needless "for"

Kyle J. McKay (1):
      mailinfo.c: move side-effects outside of assert

Kyle Meyer (1):
      branch_get_push: do not segfault when HEAD is detached

Lars Schneider (8):
      git-p4: add config to retry p4 commands; retry 3 times by default
      travis-ci: update P4 to 16.2 and GitLFS to 1.5.2 in Linux build
      git-p4: fix empty file processing for large file system backend GitLFS
      t0021: minor filter process test cleanup
      docs: warn about possible '=' in clean/smudge filter process values
      t0021: fix flaky test
      git-p4: add diff/merge properties to .gitattributes for GitLFS files
      travis-ci: fix Perforce install on macOS

Linus Torvalds (1):
      shortlog: group by committer information

Luis Ressel (1):
      date-formats.txt: Typo fix

Lukas Puehringer (3):
      gpg-interface, tag: add GPG_VERIFY_OMIT_STATUS flag
      ref-filter: add function to print single ref_array_item
      builtin/tag: add --format argument for tag -v

Luke Diamand (3):
      git-p4: support updating an existing shelved changelist
      git-p4: support git worktrees
      git-p4: avoid crash adding symlinked directory

Markus Hitter (3):
      gitk: Turn off undo manager in the text widget
      gitk: Remove closed file descriptors from $blobdifffd
      gitk: Clear array 'commitinfo' on reload

Matt McCutchen (3):
      doc: mention transfer data leaks in more places
      git-gc.txt: expand discussion of races with other processes
      t0001: don't let a default ACL interfere with the umask test

Max Kirillov (1):
      mingw: consider that UNICODE_STRING::Length counts bytes

Mike Hommey (1):
      fast-import: properly fanout notes when tree is imported

Nguyễn Thái Ngọc Duy (19):
      worktree.c: zero new 'struct worktree' on allocation
      worktree: reorder an if statement
      get_worktrees() must return main worktree as first item even on error
      worktree.c: get_worktrees() takes a new flag argument
      worktree list: keep the list sorted
      merge-recursive.c: use string_list_sort instead of qsort
      tag, branch, for-each-ref: add --ignore-case for sorting and filtering
      shallow.c: rename fields in paint_info to better express their purposes
      shallow.c: stop abusing COMMIT_SLAB_SIZE for paint_info's memory pools
      shallow.c: make paint_alloc slightly more robust
      shallow.c: remove useless code
      rebase: add --quit to cleanup rebase, leave everything else untouched
      config.c: handle error case for fstat() calls
      config.c: rename label unlock_and_out
      config.c: handle lock file in error case in git_config_rename_...
      color.c: fix color_parse_mem() with value_len == 0
      color.c: trim leading spaces in color_parse_mem()
      log --graph: customize the graph lines with config log.graphColors
      rev-list-options.txt: update --all about HEAD

Patrick Steinhardt (1):
      worktree: fix option descriptions for `prune`

Paul Mackerras (2):
      gitk: Use explicit RGB green instead of "lime"
      gitk: Update copyright notice to 2016

Peter Law (1):
      Completion: Add support for --submodule=diff

Philip Oakley (3):
      doc: gitk: remove gitview reference
      doc: gitk: add the upstream repo location
      doc: git-gui browser does not default to HEAD

Pranit Bauva (2):
      don't use test_must_fail with grep
      t9813: avoid using pipes

Ramsay Jones (1):
      GIT-VERSION-GEN: do not force abbreviation length used by 'describe'

Rasmus Villemoes (2):
      shallow.c: avoid theoretical pointer wrap-around
      shallow.c: bit manipulation tweaks

René Scharfe (13):
      compat: add qsort_s()
      add QSORT_S
      perf: add basic sort performance test
      string-list: use QSORT_S in string_list_sort()
      ref-filter: use QSORT_S in ref_array_sort()
      abspath: add absolute_pathdup()
      use absolute_pathdup()
      use oid_to_hex_r() for converting struct object_id hashes to hex strings
      use oidcpy() for copying hashes between instances of struct object_id
      checkout: convert post_checkout_hook() to struct object_id
      receive-pack: call string_list_clear() unconditionally
      p5302: create repositories for index-pack results explicitly
      dir: avoid allocation in fill_directory()

Richard Hansen (16):
      .mailmap: record canonical email for Richard Hansen
      rev-parse doc: pass "--" to rev-parse in the --prefix example
      t7610: update branch names to match test number
      t7610: move setup code to the 'setup' test case
      t7610: use test_when_finished for cleanup tasks
      t7610: don't rely on state from previous test
      t7610: run 'git reset --hard' after each test to clean up
      t7610: delete some now-unnecessary 'git reset --hard' lines
      t7610: always work on a test-specific branch
      t7610: don't assume the checked-out commit
      t7610: spell 'git reset --hard' consistently
      t7610: add test case for rerere+mergetool+subdir bug
      mergetool: take the "-O" out of $orderfile
      mergetool: fix running in subdir when rerere enabled
      diff: document behavior of relative diff.orderFile
      diff: document the format of the -O (diff.orderFile) file

Rogier Goossens (3):
      gitk: Add a 'rename' option to the branch context menu
      gitk: Allow checking out a remote branch
      gitk: Include commit title in branch dialog

SZEDER Gábor (9):
      t7004-tag: delete unnecessary tags with test_when_finished
      t7004-tag: use test_config helper
      t7004-tag: add version sort tests to show prerelease reordering issues
      versioncmp: pass full tagnames to swap_prereleases()
      versioncmp: cope with common part overlapping with prerelease suffix
      versioncmp: use earliest-longest contained suffix to determine sorting order
      versioncmp: factor out helper for suffix matching
      versioncmp: generalize version sort suffix reordering
      .mailmap: update Gábor Szeder's email address

Santiago Torres (3):
      builtin/verify-tag: add --format to verify-tag
      t/t7030-verify-tag: Add --format specifier tests
      t/t7004-tag: Add --format specifier tests

Satoshi Yasushima (1):
      gitk: Fix Japanese translation for "marked commit"

Stefan Beller (42):
      submodule config: inline config_from_{name, path}
      submodule-config: rename commit_sha1 to treeish_name
      submodule-config: clarify parsing of null_sha1 element
      submodule add: extend force flag to add existing repos
      unpack-trees: fix grammar for untracked files in directories
      t3600: remove useless redirect
      submodule: use absolute path for computing relative path connecting
      submodule helper: support super prefix
      test-lib-functions.sh: teach test_commit -C <dir>
      worktree: check if a submodule uses worktrees
      move connect_work_tree_and_git_dir to dir.h
      submodule: add absorb-git-dir function
      t3600: slightly modernize style
      worktree: initialize return value for submodule_uses_worktrees
      submodule.h: add extern keyword to functions
      submodule: modernize ok_to_remove_submodule to use argv_array
      submodule: rename and add flags to ok_to_remove_submodule
      rm: absorb a submodules git dir before deletion
      submodule.c: use GIT_DIR_ENVIRONMENT consistently
      contrib: remove gitview
      pathspec: give better message for submodule related pathspec error
      unpack-trees: move checkout state into check_updates
      unpack-trees: remove unneeded continue
      unpack-trees: factor progress setup out of check_updates
      read-tree: use OPT_BOOL instead of OPT_SET_INT
      t1000: modernize style
      t1001: modernize style
      submodule absorbgitdirs: mention in docstring help
      t7411: quote URLs
      t7411: test lookup of uninitialized submodules
      submodule update --init: display correct path from submodule
      lib-submodule-update.sh: reduce use of subshell by using "git -C"
      cache.h: document index_name_pos
      cache.h: document remove_index_entry_at
      cache.h: document add_[file_]to_index
      documentation: retire unfinished documentation
      contrib: remove git-convert-objects
      unpack-trees: support super-prefix option
      setup: add gentle version of resolve_git_dir
      cache.h: expose the dying procedure for reading gitlinks
      submodule absorbing: fix worktree/gitdir pointers recursively for non-moves
      submodule update: run custom update script for initial populating as well

Stefan Dotterweich (1):
      gitk: Fix missing commits when using -S or -G

Stephan Beyer (5):
      am: fix filename in safe_to_abort() error message
      am: change safe_to_abort()'s not rewinding error into a warning
      t3510: test that cherry-pick --abort does not unsafely change HEAD
      sequencer: make sequencer abort safer
      sequencer: remove useless get_dir() function

Steven Penny (2):
      Makefile: POSIX windres
      Makefile: put LIBS after LDFLAGS for imap-send

Torsten Bögershausen (1):
      convert: git cherry-pick -Xrenormalize did not work

Vasco Almeida (18):
      gitk: Makefile: create install bin directory
      gitk: Add Portuguese translation
      Git.pm: add subroutines for commenting lines
      i18n: add--interactive: mark strings for translation
      i18n: add--interactive: mark simple here-documents for translation
      i18n: add--interactive: mark strings with interpolation for translation
      i18n: clean.c: match string with git-add--interactive.perl
      i18n: add--interactive: mark plural strings
      i18n: add--interactive: mark patch prompt for translation
      i18n: add--interactive: i18n of help_patch_cmd
      i18n: add--interactive: mark edit_hunk_manually message for translation
      i18n: add--interactive: remove %patch_modes entries
      i18n: add--interactive: mark status words for translation
      i18n: send-email: mark strings for translation
      i18n: send-email: mark warnings and errors for translation
      i18n: send-email: mark string with interpolation for translation
      i18n: send-email: mark composing message for translation
      i18n: difftool: mark warnings for translation

Vegard Nossum (1):
      diff: add interhunk context config option

Vinicius Kursancew (1):
      git-p4: allow submit to create shelved changelists.

Vitaly "_Vi" Shukela (1):
      submodule--helper: set alternateLocation for cloned submodules

Vladimir Panteleev (5):
      show-ref: accept HEAD with --verify
      show-ref: allow -d to work with --verify
      show-ref: move --quiet handling into show_one()
      show-ref: detect dangling refs under --verify as well
      show-ref: remove dead `if (verify)' check

Wolfram Sang (1):
      request-pull: drop old USAGE stuff

brian m. carlson (8):
      Documentation: fix warning in cat-texi.perl
      Documentation: modernize cat-texi.perl
      Documentation: remove unneeded argument in cat-texi.perl
      Documentation: sort sources for gitman.texi
      Documentation: add XSLT to fix DocBook for Texinfo
      Documentation: move dblatex arguments into variable
      Makefile: add a knob to enable the use of Asciidoctor
      Documentation: implement linkgit macro for Asciidoctor

마누엘 (1):
      asciidoctor: fix user-manual to be built by `asciidoctor`


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.12.0-rc0
@ 2017-02-03 21:51  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2017-02-03 21:51 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

An early preview release Git v2.12.0-rc0 is now available for
testing at the usual places.  It is comprised of 441 non-merge
commits since v2.11.0, contributed by 63 people, 19 of which are
new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.12.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.11.0 are as follows.
Welcome to the Git development community!

  Alan Davies, Andreas Krey, Cornelius Weig, George Vanburgh,
  Igor Kushnir, Jack Bates, Kristoffer Haugsbakk, Kyle Meyer,
  Luis Ressel, Lukas Puehringer, Markus Hitter, Peter Law, Rasmus
  Villemoes, Rogier Goossens, Stefan Dotterweich, Steven Penny,
  Vinicius Kursancew, Vladimir Panteleev, and Wolfram Sang.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  마누엘, Alex Henrie, Beat Bolli, Brandon Williams, brian
  m. carlson, Chris Packham, Christian Couder, David Aguilar,
  David Turner, Dennis Kaarsemaker, Dimitriy Ryazantcev, Elia
  Pinto, Eric Wong, Heiko Voigt, Jacob Keller, Jeff Hostetler,
  Jeff King, Johannes Schindelin, Johannes Sixt, Jonathan Tan,
  Junio C Hamano, Kyle J. McKay, Lars Schneider, Linus Torvalds,
  Luke Diamand, Matt McCutchen, Max Kirillov, Mike Hommey, Nguyễn
  Thái Ngọc Duy, Paul Mackerras, Philip Oakley, Pranit Bauva,
  Ramsay Jones, René Scharfe, Richard Hansen, Santiago Torres,
  Satoshi Yasushima, Stefan Beller, Stephan Beyer, SZEDER Gábor,
  Torsten Bögershausen, Vasco Almeida, Vegard Nossum, and Vitaly
  "_Vi" Shukela.

----------------------------------------------------------------

Git 2.12 Release Notes (draft)
==============================

Backward compatibility notes.

 * Use of an empty string that is used for 'everything matches' is
   still warned and Git asks users to use a more explicit '.' for that
   instead.  The hope is that existing users will not mind this
   change, and eventually the warning can be turned into a hard error,
   upgrading the deprecation into removal of this (mis)feature.  That
   is not scheduled to happen in the upcoming release (yet).

 * The historical argument order "git merge <msg> HEAD <commit>..."
   has been deprecated for quite some time, and will be removed in a
   future release.

 * An ancient script "git relink" has been removed.


Updates since v2.11
-------------------

UI, Workflows & Features

 * Various updates to "git p4".

 * "git p4" didn't interact with the internal of .git directory
   correctly in the modern "git-worktree"-enabled world.

 * "git branch --list" and friends learned "--ignore-case" option to
   optionally sort branches and tags case insensitively.

 * In addition to %(subject), %(body), "log --pretty=format:..."
   learned a new placeholder %(trailers).

 * "git rebase" learned "--quit" option, which allows a user to
   remove the metadata left by an earlier "git rebase" that was
   manually aborted without using "git rebase --abort".

 * "git clone --reference $there --recurse-submodules $super" has been
   taught to guess repositories usable as references for submodules of
   $super that are embedded in $there while making a clone of the
   superproject borrow objects from $there; extend the mechanism to
   also allow submodules of these submodules to borrow repositories
   embedded in these clones of the submodules embedded in the clone of
   the superproject.

 * Porcelain scripts written in Perl are getting internationalized.

 * "git merge --continue" has been added as a synonym to "git commit"
   to conclude a merge that has stopped due to conflicts.

 * Finer-grained control of what protocols are allowed for transports
   during clone/fetch/push have been enabled via a new configuration
   mechanism.

 * "git shortlog" learned "--committer" option to group commits by
   committer, instead of author.

 * GitLFS integration with "git p4" has been updated.

 * The isatty() emulation for Windows has been updated to eradicate
   the previous hack that depended on internals of (older) MSVC
   runtime.

 * Some platforms no longer understand "latin-1" that is still seen in
   the wild in e-mail headers; replace them with "iso-8859-1" that is
   more widely known when conversion fails from/to it.

 * "git grep" has been taught to optionally recurse into submodules.

 * "git rm" used to refuse to remove a submodule when it has its own
   git repository embedded in its working tree.  It learned to move
   the repository away to $GIT_DIR/modules/ of the superproject
   instead, and allow the submodule to be deleted (as long as there
   will be no loss of local modifications, that is).

 * A recent updates to "git p4" was not usable for older p4 but it
   could be made to work with minimum changes.  Do so.

 * "git diff" learned diff.interHunkContext configuration variable
   that gives the default value for its --inter-hunk-context option.

 * The prereleaseSuffix feature of version comparison that is used in
   "git tag -l" did not correctly when two or more prereleases for the
   same release were present (e.g. when 2.0, 2.0-beta1, and 2.0-beta2
   are there and the code needs to compare 2.0-beta1 and 2.0-beta2).

 * "git submodule push" learned "--recurse-submodules=only option to
   push submodules out without pushing the top-level superproject.

 * "git tag" and "git verify-tag" learned to put GPG verification
   status in their "--format=<placeholders>" output format.

 * An ancient repository conversion tool left in contrib/ has been
   removed.

 * "git show-ref HEAD" used with "--verify" because the user is not
   interested in seeing refs/remotes/origin/HEAD, and used with
   "--head" because the user does not want HEAD to be filtered out,
   i.e. "git show-ref --head --verify HEAD", did not work as expected.

 * "git submodule add" used to be confused and refused to add a
   locally created repository; users can now use "--force" option
   to add them.
   (merge 619acfc78c sb/submodule-add-force later to maint).

 * Some people feel the default set of colors used by "git log --graph"
   rather limiting.  A mechanism to customize the set of colors has
   been introduced.

 * "git read-tree" and its underlying unpack_trees() machinery learned
   to report problematic paths prefixed with the --super-prefix option.

 * When a submodule "A", which has another submodule "B" nested within
   it, is "absorbed" into the top-level superproject, the inner
   submodule "B" used to be left in a strange state.  The logic to
   adjust the .git pointers in these submodules has been corrected.

 * The user can specify a custom update method that is run when
   "submodule update" updates an already checked out submodule.  This
   was ignored when checking the submodule out for the first time and
   we instead always just checked out the commit that is bound to the
   path in the superproject's index.

 * The command line completion (in contrib/) learned that
   "git diff --submodule=" can take "diff" as a recently added option.

 * The "core.logAllRefUpdates" that used to be boolean has been
   enhanced to take 'always' as well, to record ref updates to refs
   other than the ones that are expected to be updated (i.e. branches,
   remote-tracking branches and notes).


Performance, Internal Implementation, Development Support etc.

 * Commands that operate on a log message and add lines to the trailer
   blocks, such as "format-patch -s", "cherry-pick (-x|-s)", and
   "commit -s", have been taught to use the logic of and share the
   code with "git interpret-trailer".

 * The default Travis-CI configuration specifies newer P4 and GitLFS.

 * The "fast hash" that had disastrous performance issues in some
   corner cases has been retired from the internal diff.

 * The character width table has been updated to match Unicode 9.0

 * Update the procedure to generate "tags" for developer support.

 * The codeflow of setting NOATIME and CLOEXEC on file descriptors Git
   opens has been simplified.

 * "git diff" and its family had two experimental heuristics to shift
   the contents of a hunk to make the patch easier to read.  One of
   them turns out to be better than the other, so leave only the
   "--indent-heuristic" option and remove the other one.

 * A new submodule helper "git submodule embedgitdirs" to make it
   easier to move embedded .git/ directory for submodules in a
   superproject to .git/modules/ (and point the latter with the former
   that is turned into a "gitdir:" file) has been added.

 * "git push \\server\share\dir" has recently regressed and then
   fixed.  A test has retroactively been added for this breakage.

 * Build updates for Cygwin.

 * The implementation of "real_path()" was to go there with chdir(2)
   and call getcwd(3), but this obviously wouldn't be usable in a
   threaded environment.  Rewrite it to manually resolve relative
   paths including symbolic links in path components.

 * Adjust documentation to help AsciiDoctor render better while not
   breaking the rendering done by AsciiDoc.

 * The sequencer machinery has been further enhanced so that a later
   set of patches can start using it to reimplement "rebase -i".

 * Update the definition of the MacOSX test environment used by
   TravisCI.

 * Rewrite a scripted porcelain "git difftool" in C.

 * "make -C t failed" will now run only the tests that failed in the
   previous run.  This is usable only when prove is not use, and gives
   a useless error message when run after "make clean", but otherwise
   is serviceable.

 * "uchar [40]" to "struct object_id" conversion continues.


Also contains various documentation updates and code clean-ups.

Fixes since v2.10
-----------------

Unless otherwise noted, all the fixes since v2.9 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * We often decide if a session is interactive by checking if the
   standard I/O streams are connected to a TTY, but isatty() that
   comes with Windows incorrectly returned true if it is used on NUL
   (i.e. an equivalent to /dev/null).  This has been fixed.

 * "git svn" did not work well with path components that are "0", and
   some configuration variable it uses were not documented.

 * "git rev-parse --symbolic" failed with a more recent notation like
   "HEAD^-1" and "HEAD^!".

 * An empty directory in a working tree that can simply be nuked used
   to interfere while merging or cherry-picking a change to create a
   submodule directory there, which has been fixed..

 * The code in "git push" to compute if any commit being pushed in the
   superproject binds a commit in a submodule that hasn't been pushed
   out was overly inefficient, making it unusable even for a small
   project that does not have any submodule but have a reasonable
   number of refs.

 * "git push --dry-run --recurse-submodule=on-demand" wasn't
   "--dry-run" in the submodules.

 * The output from "git worktree list" was made in readdir() order,
   and was unstable.

 * mergetool.<tool>.trustExitCode configuration variable did not apply
   to built-in tools, but now it does.

 * "git p4" LFS support was broken when LFS stores an empty blob.

 * A corner case in merge-recursive regression that crept in
   during 2.10 development cycle has been fixed.

 * Transport with dumb http can be fooled into following foreign URLs
   that the end user does not intend to, especially with the server
   side redirects and http-alternates mechanism, which can lead to
   security issues.  Tighten the redirection and make it more obvious
   to the end user when it happens.

 * Update the error messages from the dumb-http client when it fails
   to obtain loose objects; we used to give sensible error message
   only upon 404 but we now forbid unexpected redirects that needs to
   be reported with something sensible.

 * When diff.renames configuration is on (and with Git 2.9 and later,
   it is enabled by default, which made it worse), "git stash"
   misbehaved if a file is removed and another file with a very
   similar content is added.

 * "git diff --no-index" did not take "--no-abbrev" option.

 * "git difftool --dir-diff" had a minor regression when started from
   a subdirectory, which has been fixed.

 * "git commit --allow-empty --only" (no pathspec) with dirty index
   ought to be an acceptable way to create a new commit that does not
   change any paths, but it was forbidden, perhaps because nobody
   needed it so far.

 * Git 2.11 had a minor regression in "merge --ff-only" that competed
   with another process that simultanously attempted to update the
   index. We used to explain what went wrong with an error message,
   but the new code silently failed.  The error message has been
   resurrected.

 * A pathname that begins with "//" or "\\" on Windows is special but
   path normalization logic was unaware of it.

 * "git pull --rebase", when there is no new commits on our side since
   we forked from the upstream, should be able to fast-forward without
   invoking "git rebase", but it didn't.

 * The way to specify hotkeys to "xxdiff" that is used by "git
   mergetool" has been modernized to match recent versions of xxdiff.

 * Unlike "git am --abort", "git cherry-pick --abort" moved HEAD back
   to where cherry-pick started while picking multiple changes, when
   the cherry-pick stopped to ask for help from the user, and the user
   did "git reset --hard" to a different commit in order to re-attempt
   the operation.

 * Code cleanup in shallow boundary computation.

 * A recent update to receive-pack to make it easier to drop garbage
   objects made it clear that GIT_ALTERNATE_OBJECT_DIRECTORIES cannot
   have a pathname with a colon in it (no surprise!), and this in turn
   made it impossible to push into a repository at such a path.  This
   has been fixed by introducing a quoting mechanism used when
   appending such a path to the colon-separated list.

 * The function usage_msg_opt() has been updated to say "fatal:"
   before the custom message programs give, when they want to die
   with a message about wrong command line options followed by the
   standard usage string.

 * "git index-pack --stdin" needs an access to an existing repository,
   but "git index-pack file.pack" to generate an .idx file that
   corresponds to a packfile does not.

 * Fix for NDEBUG builds.

 * A lazy "git push" without refspec did not internally use a fully
   specified refspec to perform 'current', 'simple', or 'upstream'
   push, causing unnecessary "ambiguous ref" errors.

 * "git p4" misbehaved when swapping a directory and a symbolic link.

 * Even though an fix was attempted in Git 2.9.3 days, but running
   "git difftool --dir-diff" from a subdirectory never worked. This
   has been fixed.

 * "git p4" that tracks multile p4 paths imported a single changelist
   that touches files in these multiple paths as one commit, followed
   by many empty commits.  This has been fixed.

 * A potential but unlikely buffer overflow in Windows port has been
   fixed.

 * When the http server gives an incomplete response to a smart-http
   rpc call, it could lead to client waiting for a full response that
   will never come.  Teach the client side to notice this condition
   and abort the transfer.

 * Compression setting for producing packfiles were spread across
   three codepaths, one of which did not honor any configuration.
   Unify these so that all of them honor core.compression and
   pack.compression variables the same way.

 * "git fast-import" sometimes mishandled while rebalancing notes
   tree, which has been fixed.

 * Recent update to the default abbreviation length that auto-scales
   lacked documentation update, which has been corrected.

 * Leakage of lockfiles in the config subsystem has been fixed.

 * It is natural that "git gc --auto" may not attempt to pack
   everything into a single pack, and there is no point in warning
   when the user has configured the system to use the pack bitmap,
   leading to disabling further "gc".

 * "git archive" did not read the standard configuration files, and
   failed to notice a file that is marked as binary via the userdiff
   driver configuration.

 * "git blame --porcelain" misidentified the "previous" <commit, path>
   pair (aka "source") when contents came from two or more files.

 * "git rebase -i" with a recent update started showing an incorrect
   count when squashing more than 10 commits.

 * "git <cmd> @{push}" on a detached HEAD used to segfault; it has
   been corrected to error out with a message.

 * Running "git add a/b" when "a" is a submodule correctly errored
   out, but without a meaningful error message.
   (merge 2d81c48fa7 sb/pathspec-errors later to maint).

 * Typing ^C to pager, which usually does not kill it, killed Git and
   took the pager down as a collateral damage in certain process-tree
   structure.  This has been fixed.

 * "git mergetool" without any pathspec on the command line that is
   run from a subdirectory became no-op in Git v2.11 by mistake, which
   has been fixed.

 * Retire long unused/unmaintained gitview from the contrib/ area.
   (merge 3120925c25 sb/remove-gitview later to maint).

 * Tighten a test to avoid mistaking an extended ERE regexp engine as
   a PRE regexp engine.

 * An error message with an ASCII control character like '\r' in it
   can alter the message to hide its early part, which is problematic
   when a remote side gives such an error message that the local side
   will relay with a "remote: " prefix.
   (merge f290089879 jk/vreport-sanitize later to maint).

 * "git fsck" inspects loose objects more carefully now.
   (merge cce044df7f jk/loose-object-fsck later to maint).

 * A crashing bug introduced in v2.11 timeframe has been found (it is
   triggerable only in fast-import) and fixed.
   (merge abd5a00268 jk/clear-delta-base-cache-fix later to maint).

 * With an anticipatory tweak for remotes defined in ~/.gitconfig
   (e.g. "remote.origin.prune" set to true, even though there may or
   may not actually be "origin" remote defined in a particular Git
   repository), "git remote rename" and other commands misinterpreted
   and behaved as if such a non-existing remote actually existed.
   (merge e459b073fb js/remote-rename-with-half-configured-remote later to maint).

 * A few codepaths had to rely on a global variable when sorting
   elements of an array because sort(3) API does not allow extra data
   to be passed to the comparison function.  Use qsort_s() when
   natively available, and a fallback implementation of it when not,
   to eliminate the need, which is a prerequisite for making the
   codepath reentrant.

 * "git fsck --connectivity-check" was not working at all.
   (merge a2b22854bd jk/fsck-connectivity-check-fix later to maint).

 * After starting "git rebase -i", which first opens the user's editor
   to edit the series of patches to apply, but before saving the
   contents of that file, "git status" failed to show the current
   state (i.e. you are in an interactive rebase session, but you have
   applied no steps yet) correctly.
   (merge df9ded4984 js/status-pre-rebase-i later to maint).

 * Test tweak for FreeBSD where /usr/bin/unzip is unsuitable to run
   our tests but /usr/local/bin/unzip is usable.
   (merge d98b2c5fce js/unzip-in-usr-bin-workaround later to maint).

 * "git p4" did not work well with multiple git-p4.mapUser entries on
   Windows.
   (merge c3c2b05776 gv/mingw-p4-mapuser later to maint).

 * "git help" enumerates executable files in $PATH; the implementation
   of "is this file executable?" on Windows has been optimized.
   (merge c755015f79 hv/mingw-help-is-executable later to maint).

 * Test tweaks for those who have default ACL in their git source tree
   that interfere with the umask test.
   (merge d549d21307 mm/reset-facl-before-umask-test later to maint).

 * Names of the various hook scripts must be spelled exactly, but on
   Windows, an .exe binary must be named with .exe suffix; notice
   $GIT_DIR/hooks/<hookname>.exe as a valid <hookname> hook.
   (merge 235be51fbe js/mingw-hooks-with-exe-suffix later to maint).

 * Asciidoctor, an alternative reimplementation of AsciiDoc, still
   needs some changes to work with documents meant to be formatted
   with AsciiDoc.  "make USE_ASCIIDOCTOR=YesPlease" to use it out of
   the box to document our pages is getting closer to reality.

 * Other minor doc, test and build updates and code cleanups.
   (merge f2627d9b19 sb/submodule-config-cleanup later to maint).
   (merge 384f1a167b sb/unpack-trees-cleanup later to maint).
   (merge 874444b704 rh/diff-orderfile-doc later to maint).
   (merge eafd5d9483 cw/doc-sign-off later to maint).
   (merge 0aaad415bc rs/absolute-pathdup later to maint).
   (merge 4432dd6b5b rs/receive-pack-cleanup later to maint).
   (merge 540a398e9c sg/mailmap-self later to maint).

----------------------------------------------------------------

Changes since v2.11.0 are as follows:

Alan Davies (1):
      mingw: fix colourization on Cygwin pseudo terminals

Alex Henrie (3):
      bisect: improve English grammar of not-ancestors message
      receive-pack: improve English grammar of denyCurrentBranch message
      clone,fetch: explain the shallow-clone option a little more clearly

Andreas Krey (2):
      commit: make --only --allow-empty work without paths
      commit: remove 'Clever' message for --only --amend

Beat Bolli (6):
      update_unicode.sh: move it into contrib/update-unicode
      update_unicode.sh: remove an unnecessary subshell level
      update_unicode.sh: pin the uniset repo to a known good commit
      update_unicode.sh: automatically download newer definition files
      update_unicode.sh: remove the plane filter
      unicode_width.h: update the width tables to Unicode 9.0

Brandon Williams (40):
      push: --dry-run updates submodules when --recurse-submodules=on-demand
      push: fix --dry-run to not push submodules
      real_path: resolve symlinks by hand
      real_path: convert real_path_internal to strbuf_realpath
      real_path: create real_pathdup
      real_path: have callers use real_pathdup and strbuf_realpath
      lib-proto-disable: variable name fix
      http: always warn if libcurl version is too old
      transport: add protocol policy config option
      http: create function to get curl allowed protocols
      transport: add from_user parameter to is_transport_allowed
      transport: reformat flag #defines to be more readable
      submodules: add RECURSE_SUBMODULES_ONLY value
      push: add option to push only submodules
      submodules: add helper to determine if a submodule is populated
      submodules: add helper to determine if a submodule is initialized
      submodules: load gitmodules file from commit sha1
      grep: add submodules as a grep source type
      grep: optionally recurse into submodules
      grep: enable recurse-submodules to work on <tree> objects
      grep: search history of moved submodules
      mv: remove use of deprecated 'get_pathspec()'
      dir: remove struct path_simplify
      dir: convert fill_directory to use the pathspec struct interface
      ls-tree: convert show_recursive to use the pathspec struct interface
      pathspec: remove the deprecated get_pathspec function
      pathspec: copy and free owned memory
      pathspec: remove unused variable from unsupported_magic
      pathspec: always show mnemonic and name in unsupported_magic
      pathspec: simpler logic to prefix original pathspec elements
      pathspec: factor global magic into its own function
      pathspec: create parse_short_magic function
      pathspec: create parse_long_magic function
      pathspec: create parse_element_magic helper
      pathspec: create strip submodule slash helpers
      pathspec: small readability changes
      pathspec: rename prefix_pathspec to init_pathspec_item
      real_path: prevent redefinition of MAXSYMLINKS
      real_path: set errno when max number of symlinks is exceeded
      index: improve constness for reading blob data

Chris Packham (3):
      merge: add '--continue' option as a synonym for 'git commit'
      completion: add --continue option for merge
      merge: ensure '--abort' option takes no arguments

Christian Couder (1):
      Documentation/bisect: improve on (bad|new) and (good|bad)

Cornelius Weig (5):
      doc: clarify distinction between sign-off and pgp-signing
      config: add markup to core.logAllRefUpdates doc
      refs: add option core.logAllRefUpdates = always
      update-ref: add test cases for bare repository
      doc: add note about ignoring '--no-create-reflog'

David Aguilar (9):
      mergetool: honor mergetool.$tool.trustExitCode for built-in tools
      mergetools/vimdiff: trust Vim's exit code
      difftool: fix dir-diff index creation when in a subdirectory
      difftool: fix dir-diff index creation when in a subdirectory
      difftool: sanitize $workdir as early as possible
      difftool: chdir as early as possible
      difftool: rename variables for consistency
      mergetools: fix xxdiff hotkeys
      gitk: Remove translated message from comments

David Turner (5):
      submodules: allow empty working-tree dirs in merge/cherry-pick
      remote-curl: don't hang when a server dies before any output
      upload-pack: optionally allow fetching any sha1
      auto gc: don't write bitmaps for incremental repacks
      repack: die on incremental + write-bitmap-index

Dennis Kaarsemaker (1):
      push: test pushing ambiguously named branches

Dimitriy Ryazantcev (1):
      gitk: ru.po: Update Russian translation

Elia Pinto (2):
      builtin/commit.c: remove the PATH_MAX limitation via dynamic allocation
      builtin/commit.c: switch to strbuf, instead of snprintf()

Eric Wong (2):
      git-svn: allow "0" in SVN path components
      git-svn: document useLogAuthor and addAuthorFrom config keys

George Vanburgh (2):
      git-p4: fix multi-path changelist empty commits
      git-p4: fix git-p4.mapUser on Windows

Heiko Voigt (5):
      serialize collection of changed submodules
      serialize collection of refs that contain submodule changes
      batch check whether submodule needs pushing into one call
      submodule_needs_pushing(): explain the behaviour when we cannot answer
      help: improve is_executable() on Windows

Igor Kushnir (1):
      git-p4: do not pass '-r 0' to p4 commands

Jack Bates (1):
      diff: handle --no-abbrev in no-index case

Jacob Keller (2):
      pretty: add %(trailers) format for displaying trailers of a commit message
      ref-filter: add support to display trailers as part of contents

Jeff Hostetler (1):
      mingw: replace isatty() hack

Jeff King (57):
      rev-parse: fix parent shorthands with --symbolic
      t7610: clean up foo.XXXXXX tmpdir
      http: simplify update_url_from_redirect
      http: always update the base URL for redirects
      remote-curl: rename shadowed options variable
      http: make redirects more obvious
      http: treat http-alternates like redirects
      http-walker: complain about non-404 loose object errors
      xdiff: drop XDL_FAST_HASH
      stash: prefer plumbing over git-diff
      alternates: accept double-quoted paths
      tmp-objdir: quote paths we add to alternates
      Makefile: reformat FIND_SOURCE_FILES
      Makefile: exclude test cruft from FIND_SOURCE_FILES
      Makefile: match shell scripts in FIND_SOURCE_FILES
      Makefile: exclude contrib from FIND_SOURCE_FILES
      parse-options: print "fatal:" before usage_msg_opt()
      http: respect protocol.*.allow=user for http-alternates
      README: replace gmane link with public-inbox
      merge: mark usage error strings for translation
      t5000: extract nongit function to test-lib-functions.sh
      index-pack: complain when --stdin is used outside of a repo
      t: use nongit() function where applicable
      shortlog: test and document --committer option
      index-pack: skip collision check when not in repository
      archive-zip: load userdiff config
      rebase--interactive: count squash commits above 10 correctly
      blame: fix alignment with --abbrev=40
      blame: handle --no-abbrev
      blame: output porcelain "previous" header for each file
      git_exec_path: do not return the result of getenv()
      execv_dashed_external: use child_process struct
      execv_dashed_external: stop exiting with negative code
      execv_dashed_external: wait for child on signal death
      t7810: avoid assumption about invalid regex syntax
      Revert "vreportf: avoid intermediate buffer"
      vreport: sanitize ASCII control chars
      t1450: refactor loose-object removal
      sha1_file: fix error message for alternate objects
      t1450: test fsck of packed objects
      sha1_file: add read_loose_object() function
      fsck: parse loose object paths directly
      fsck: detect trailing garbage in all object types
      t1450: clean up sub-objects in duplicate-entry test
      fsck: report trees as dangling
      fsck: prepare dummy objects for --connectivity-check
      fsck: tighten error-checks of "git fsck <head>"
      fsck: do not fallback "git fsck <bogus>" to "git fsck"
      fsck: check HAS_OBJ more consistently
      CodingGuidelines: clarify multi-line brace style
      clear_delta_base_cache(): don't modify hashmap while iterating
      t1450: use "mv -f" within loose object directory
      difftool: hack around -Wzero-length-format warning
      fsck: move typename() printing to its own function
      fsck: lazily load types under --connectivity-only
      color_parse_mem: allow empty color spec
      document behavior of empty color name

Johannes Schindelin (56):
      cherry-pick: demonstrate a segmentation fault
      merge-recursive: handle NULL in add_cacheinfo() correctly
      mingw: intercept isatty() to handle /dev/null as Git expects it
      mingw: adjust is_console() to work with stdin
      mingw: add a regression test for pushing to UNC paths
      giteveryday: unbreak rendering with AsciiDoctor
      git_exec_path: avoid Coverity warning about unfree()d result
      sequencer: avoid unnecessary curly braces
      sequencer: move "else" keyword onto the same line as preceding brace
      sequencer: use a helper to find the commit message
      sequencer: support a new action: 'interactive rebase'
      sequencer (rebase -i): implement the 'noop' command
      sequencer (rebase -i): implement the 'edit' command
      sequencer (rebase -i): implement the 'exec' command
      sequencer (rebase -i): learn about the 'verbose' mode
      sequencer (rebase -i): write the 'done' file
      sequencer (rebase -i): add support for the 'fixup' and 'squash' commands
      sequencer (rebase -i): implement the short commands
      sequencer (rebase -i): write an author-script file
      sequencer (rebase -i): allow continuing with staged changes
      sequencer (rebase -i): remove CHERRY_PICK_HEAD when no longer needed
      sequencer (rebase -i): skip some revert/cherry-pick specific code path
      sequencer (rebase -i): the todo can be empty when continuing
      sequencer (rebase -i): update refs after a successful rebase
      sequencer (rebase -i): leave a patch upon error
      sequencer (rebase -i): implement the 'reword' command
      sequencer (rebase -i): allow fast-forwarding for edit/reword
      sequencer (rebase -i): refactor setting the reflog message
      sequencer (rebase -i): set the reflog message consistently
      sequencer (rebase -i): copy commit notes at end
      sequencer (rebase -i): record interrupted commits in rewritten, too
      sequencer (rebase -i): run the post-rewrite hook, if needed
      sequencer (rebase -i): respect the rebase.autostash setting
      sequencer (rebase -i): respect strategy/strategy_opts settings
      sequencer (rebase -i): allow rescheduling commands
      sequencer (rebase -i): implement the 'drop' command
      sequencer (rebase -i): differentiate between comments and 'noop'
      difftool: add a skeleton for the upcoming builtin
      sequencer: update reading author-script
      sequencer: use run_command() directly
      sequencer (rebase -i): show only failed `git commit`'s output
      sequencer (rebase -i): show only failed cherry-picks' output
      sequencer (rebase -i): suggest --edit-todo upon unknown command
      sequencer (rebase -i): show the progress
      sequencer (rebase -i): write the progress into files
      sequencer (rebase -i): write out the final message
      mingw: follow-up to "replace isatty() hack"
      difftool: implement the functionality in the builtin
      difftool: retire the scripted version
      remote rename: demonstrate a bogus "remote exists" bug
      remote rename: more carefully determine whether a remote is configured
      relink: retire the command
      status: be prepared for not-yet-started interactive rebase
      t/Makefile: add a rule to re-run previously-failed tests
      test-lib: on FreeBSD, look for unzip(1) in /usr/local/bin/
      mingw: allow hooks to be .exe files

Johannes Sixt (4):
      t5547-push-quarantine: run the path separator test on Windows, too
      normalize_path_copy(): fix pushing to //server/share/dir on Windows
      t5615-alternate-env: double-quotes in file names do not work on Windows
      real_path: canonicalize directory separators in root parts

Jonathan Tan (6):
      fetch: do not redundantly calculate tag refmap
      trailer: be stricter in parsing separators
      commit: make ignore_non_trailer take buf/len
      trailer: avoid unnecessary splitting on lines
      trailer: have function to describe trailer layout
      sequencer: use trailer's trailer layout

Junio C Hamano (36):
      utf8: refactor code to decide fallback encoding
      utf8: accept "latin-1" as ISO-8859-1
      git_open(): untangle possible NOATIME and CLOEXEC interactions
      push: do not use potentially ambiguous default refspec
      git_open_cloexec(): use fcntl(2) w/ FD_CLOEXEC fallback
      sha1_file: stop opening files with O_NOATIME
      compression: unify pack.compression configuration parsing
      pull: fast-forward "pull --rebase=true"
      preparing for 2.10.3
      Start post 2.11 cycle
      wt-status: implement opportunisitc index update correctly
      hold_locked_index(): align error handling with hold_lockfile_for_update()
      lockfile: LOCK_REPORT_ON_ERROR
      Early fixes for 2.11.x series
      Revert "sequencer: remove useless get_dir() function"
      First batch for 2.12
      Second batch for 2.12
      i18n: fix misconversion in shell scripts
      t4201: make tests work with and without the MINGW prerequiste
      Third batch for 2.12
      config.abbrev: document the new default that auto-scales
      diff: retire "compaction" heuristics
      lockfile: move REPORT_ON_ERROR bit elsewhere
      Fourth batch for 2.12
      Fifth batch 2.12
      Almost ready for 2.11.1
      RelNotes: drop merge-later comments for maint
      Sixth batch for 2.12
      Seventh batch for 2.12
      show-ref: remove a stale comment
      relink: really remove the command
      Eighth batch for 2.12
      Ready for 2.11.1
      Git 2.11.1
      Ninth batch for 2.12; almost ready for -rc0
      Git 2.12-rc0

Kristoffer Haugsbakk (4):
      doc: add articles (grammar)
      doc: add verb in front of command to run
      doc: make the intent of sentence clearer
      doc: omit needless "for"

Kyle J. McKay (1):
      mailinfo.c: move side-effects outside of assert

Kyle Meyer (1):
      branch_get_push: do not segfault when HEAD is detached

Lars Schneider (8):
      git-p4: add config to retry p4 commands; retry 3 times by default
      travis-ci: update P4 to 16.2 and GitLFS to 1.5.2 in Linux build
      git-p4: fix empty file processing for large file system backend GitLFS
      t0021: minor filter process test cleanup
      docs: warn about possible '=' in clean/smudge filter process values
      t0021: fix flaky test
      git-p4: add diff/merge properties to .gitattributes for GitLFS files
      travis-ci: fix Perforce install on macOS

Linus Torvalds (1):
      shortlog: group by committer information

Luis Ressel (1):
      date-formats.txt: Typo fix

Lukas Puehringer (3):
      gpg-interface, tag: add GPG_VERIFY_OMIT_STATUS flag
      ref-filter: add function to print single ref_array_item
      builtin/tag: add --format argument for tag -v

Luke Diamand (3):
      git-p4: support updating an existing shelved changelist
      git-p4: support git worktrees
      git-p4: avoid crash adding symlinked directory

Markus Hitter (3):
      gitk: Turn off undo manager in the text widget
      gitk: Remove closed file descriptors from $blobdifffd
      gitk: Clear array 'commitinfo' on reload

Matt McCutchen (3):
      doc: mention transfer data leaks in more places
      git-gc.txt: expand discussion of races with other processes
      t0001: don't let a default ACL interfere with the umask test

Max Kirillov (1):
      mingw: consider that UNICODE_STRING::Length counts bytes

Mike Hommey (1):
      fast-import: properly fanout notes when tree is imported

Nguyễn Thái Ngọc Duy (18):
      worktree.c: zero new 'struct worktree' on allocation
      worktree: reorder an if statement
      get_worktrees() must return main worktree as first item even on error
      worktree.c: get_worktrees() takes a new flag argument
      worktree list: keep the list sorted
      merge-recursive.c: use string_list_sort instead of qsort
      tag, branch, for-each-ref: add --ignore-case for sorting and filtering
      shallow.c: rename fields in paint_info to better express their purposes
      shallow.c: stop abusing COMMIT_SLAB_SIZE for paint_info's memory pools
      shallow.c: make paint_alloc slightly more robust
      shallow.c: remove useless code
      rebase: add --quit to cleanup rebase, leave everything else untouched
      config.c: handle error case for fstat() calls
      config.c: rename label unlock_and_out
      config.c: handle lock file in error case in git_config_rename_...
      color.c: fix color_parse_mem() with value_len == 0
      color.c: trim leading spaces in color_parse_mem()
      log --graph: customize the graph lines with config log.graphColors

Paul Mackerras (2):
      gitk: Use explicit RGB green instead of "lime"
      gitk: Update copyright notice to 2016

Peter Law (1):
      Completion: Add support for --submodule=diff

Philip Oakley (3):
      doc: gitk: remove gitview reference
      doc: gitk: add the upstream repo location
      doc: git-gui browser does not default to HEAD

Pranit Bauva (2):
      don't use test_must_fail with grep
      t9813: avoid using pipes

Ramsay Jones (1):
      GIT-VERSION-GEN: do not force abbreviation length used by 'describe'

Rasmus Villemoes (2):
      shallow.c: avoid theoretical pointer wrap-around
      shallow.c: bit manipulation tweaks

René Scharfe (11):
      compat: add qsort_s()
      add QSORT_S
      perf: add basic sort performance test
      string-list: use QSORT_S in string_list_sort()
      ref-filter: use QSORT_S in ref_array_sort()
      abspath: add absolute_pathdup()
      use absolute_pathdup()
      use oid_to_hex_r() for converting struct object_id hashes to hex strings
      use oidcpy() for copying hashes between instances of struct object_id
      checkout: convert post_checkout_hook() to struct object_id
      receive-pack: call string_list_clear() unconditionally

Richard Hansen (16):
      .mailmap: record canonical email for Richard Hansen
      rev-parse doc: pass "--" to rev-parse in the --prefix example
      t7610: update branch names to match test number
      t7610: move setup code to the 'setup' test case
      t7610: use test_when_finished for cleanup tasks
      t7610: don't rely on state from previous test
      t7610: run 'git reset --hard' after each test to clean up
      t7610: delete some now-unnecessary 'git reset --hard' lines
      t7610: always work on a test-specific branch
      t7610: don't assume the checked-out commit
      t7610: spell 'git reset --hard' consistently
      t7610: add test case for rerere+mergetool+subdir bug
      mergetool: take the "-O" out of $orderfile
      mergetool: fix running in subdir when rerere enabled
      diff: document behavior of relative diff.orderFile
      diff: document the format of the -O (diff.orderFile) file

Rogier Goossens (3):
      gitk: Add a 'rename' option to the branch context menu
      gitk: Allow checking out a remote branch
      gitk: Include commit title in branch dialog

SZEDER Gábor (9):
      t7004-tag: delete unnecessary tags with test_when_finished
      t7004-tag: use test_config helper
      t7004-tag: add version sort tests to show prerelease reordering issues
      versioncmp: pass full tagnames to swap_prereleases()
      versioncmp: cope with common part overlapping with prerelease suffix
      versioncmp: use earliest-longest contained suffix to determine sorting order
      versioncmp: factor out helper for suffix matching
      versioncmp: generalize version sort suffix reordering
      .mailmap: update Gábor Szeder's email address

Santiago Torres (3):
      builtin/verify-tag: add --format to verify-tag
      t/t7030-verify-tag: Add --format specifier tests
      t/t7004-tag: Add --format specifier tests

Satoshi Yasushima (1):
      gitk: Fix Japanese translation for "marked commit"

Stefan Beller (42):
      submodule config: inline config_from_{name, path}
      submodule-config: rename commit_sha1 to treeish_name
      submodule-config: clarify parsing of null_sha1 element
      submodule add: extend force flag to add existing repos
      unpack-trees: fix grammar for untracked files in directories
      t3600: remove useless redirect
      submodule: use absolute path for computing relative path connecting
      submodule helper: support super prefix
      test-lib-functions.sh: teach test_commit -C <dir>
      worktree: check if a submodule uses worktrees
      move connect_work_tree_and_git_dir to dir.h
      submodule: add absorb-git-dir function
      t3600: slightly modernize style
      worktree: initialize return value for submodule_uses_worktrees
      submodule.h: add extern keyword to functions
      submodule: modernize ok_to_remove_submodule to use argv_array
      submodule: rename and add flags to ok_to_remove_submodule
      rm: absorb a submodules git dir before deletion
      submodule.c: use GIT_DIR_ENVIRONMENT consistently
      contrib: remove gitview
      pathspec: give better message for submodule related pathspec error
      unpack-trees: move checkout state into check_updates
      unpack-trees: remove unneeded continue
      unpack-trees: factor progress setup out of check_updates
      read-tree: use OPT_BOOL instead of OPT_SET_INT
      t1000: modernize style
      t1001: modernize style
      submodule absorbgitdirs: mention in docstring help
      t7411: quote URLs
      t7411: test lookup of uninitialized submodules
      submodule update --init: display correct path from submodule
      lib-submodule-update.sh: reduce use of subshell by using "git -C"
      cache.h: document index_name_pos
      cache.h: document remove_index_entry_at
      cache.h: document add_[file_]to_index
      documentation: retire unfinished documentation
      contrib: remove git-convert-objects
      unpack-trees: support super-prefix option
      setup: add gentle version of resolve_git_dir
      cache.h: expose the dying procedure for reading gitlinks
      submodule absorbing: fix worktree/gitdir pointers recursively for non-moves
      submodule update: run custom update script for initial populating as well

Stefan Dotterweich (1):
      gitk: Fix missing commits when using -S or -G

Stephan Beyer (5):
      am: fix filename in safe_to_abort() error message
      am: change safe_to_abort()'s not rewinding error into a warning
      t3510: test that cherry-pick --abort does not unsafely change HEAD
      sequencer: make sequencer abort safer
      sequencer: remove useless get_dir() function

Steven Penny (2):
      Makefile: POSIX windres
      Makefile: put LIBS after LDFLAGS for imap-send

Torsten Bögershausen (1):
      convert: git cherry-pick -Xrenormalize did not work

Vasco Almeida (18):
      gitk: Makefile: create install bin directory
      gitk: Add Portuguese translation
      Git.pm: add subroutines for commenting lines
      i18n: add--interactive: mark strings for translation
      i18n: add--interactive: mark simple here-documents for translation
      i18n: add--interactive: mark strings with interpolation for translation
      i18n: clean.c: match string with git-add--interactive.perl
      i18n: add--interactive: mark plural strings
      i18n: add--interactive: mark patch prompt for translation
      i18n: add--interactive: i18n of help_patch_cmd
      i18n: add--interactive: mark edit_hunk_manually message for translation
      i18n: add--interactive: remove %patch_modes entries
      i18n: add--interactive: mark status words for translation
      i18n: send-email: mark strings for translation
      i18n: send-email: mark warnings and errors for translation
      i18n: send-email: mark string with interpolation for translation
      i18n: send-email: mark composing message for translation
      i18n: difftool: mark warnings for translation

Vegard Nossum (1):
      diff: add interhunk context config option

Vinicius Kursancew (1):
      git-p4: allow submit to create shelved changelists.

Vitaly "_Vi" Shukela (1):
      submodule--helper: set alternateLocation for cloned submodules

Vladimir Panteleev (5):
      show-ref: accept HEAD with --verify
      show-ref: allow -d to work with --verify
      show-ref: move --quiet handling into show_one()
      show-ref: detect dangling refs under --verify as well
      show-ref: remove dead `if (verify)' check

Wolfram Sang (1):
      request-pull: drop old USAGE stuff

brian m. carlson (8):
      Documentation: fix warning in cat-texi.perl
      Documentation: modernize cat-texi.perl
      Documentation: remove unneeded argument in cat-texi.perl
      Documentation: sort sources for gitman.texi
      Documentation: add XSLT to fix DocBook for Texinfo
      Documentation: move dblatex arguments into variable
      Makefile: add a knob to enable the use of Asciidoctor
      Documentation: implement linkgit macro for Asciidoctor

마누엘 (1):
      asciidoctor: fix user-manual to be built by `asciidoctor`


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.11.0
@ 2016-11-29 21:21  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2016-11-29 21:21 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

The latest feature release Git v2.11.0 is now available at the
usual places.  It is comprised of 673 non-merge commits since
v2.10.0, contributed by 74 people, 15 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.11.0'
tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.10.0 are as follows.
Welcome to the Git development community!

  Aaron M Watson, Brandon Williams, Brian Henderson, Emily Xie,
  Gavin Lambert, Ian Kelling, Jeff Hostetler, jfbu, Mantas
  Mikulėnas, Petr Stodulka, Satoshi Yasushima, Stefan Christ,
  Vegard Nossum, yaras, and Younes Khoudli.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alexander Shopov, Alex Henrie,
  Alex Riesen, Anders Kaseorg, Andreas Schwab, Beat Bolli, Ben
  North, brian m. carlson, Changwoo Ryu, Chris Packham, Christian
  Couder, David Aguilar, David Turner, Dennis Kaarsemaker,
  Dimitriy Ryazantcev, Elia Pinto, Eric Wong, Jacob Keller,
  Jakub Narębski, Jean-Noel Avila, Jean-Noël AVILA, Jeff King,
  Jiang Xin, Johannes Schindelin, Johannes Sixt, Jonathan Nieder,
  Jonathan Tan, Josh Triplett, Junio C Hamano, Karsten Blees,
  Kevin Daudt, Kirill Smelkov, Lars Schneider, Linus Torvalds,
  Marc Branchaud, Matthieu Moy, Michael Haggerty, Michael J
  Gruber, Mike Ralphson, Nguyễn Thái Ngọc Duy, Olaf Hering,
  Orgad Shaneh, Patrick Steinhardt, Pat Thoyts, Peter Krefting,
  Philip Oakley, Pranit Bauva, Ralf Thielow, Ray Chen, René
  Scharfe, Ronnie Sahlberg, Stefan Beller, SZEDER Gábor, Thomas
  Gummerer, Tobias Klauser, Trần Ngọc Quân, Vasco Almeida,
  and Дилян Палаузов.

----------------------------------------------------------------

Git 2.11 Release Notes
======================

Backward compatibility notes.

 * An empty string used as a pathspec element has always meant
   'everything matches', but it is too easy to write a script that
   finds a path to remove in $path and run 'git rm "$paht"' by
   mistake (when the user meant to give "$path"), which ends up
   removing everything.  This release starts warning about the
   use of an empty string that is used for 'everything matches' and
   asks users to use a more explicit '.' for that instead.

   The hope is that existing users will not mind this change, and
   eventually the warning can be turned into a hard error, upgrading
   the deprecation into removal of this (mis)feature.

 * The historical argument order "git merge <msg> HEAD <commit>..."
   has been deprecated for quite some time, and will be removed in the
   next release (not this one).

 * The default abbreviation length, which has historically been 7, now
   scales as the repository grows, using the approximate number of
   objects in the repository and a bit of math around the birthday
   paradox.  The logic suggests to use 12 hexdigits for the Linux
   kernel, and 9 to 10 for Git itself.


Updates since v2.10
-------------------

UI, Workflows & Features

 * Comes with new version of git-gui, now at its 0.21.0 tag.

 * "git format-patch --cover-letter HEAD^" to format a single patch
   with a separate cover letter now numbers the output as [PATCH 0/1]
   and [PATCH 1/1] by default.

 * An incoming "git push" that attempts to push too many bytes can now
   be rejected by setting a new configuration variable at the receiving
   end.

 * "git nosuchcommand --help" said "No manual entry for gitnosuchcommand",
   which was not intuitive, given that "git nosuchcommand" said "git:
   'nosuchcommand' is not a git command".

 * "git clone --recurse-submodules --reference $path $URL" is a way to
   reduce network transfer cost by borrowing objects in an existing
   $path repository when cloning the superproject from $URL; it
   learned to also peek into $path for presence of corresponding
   repositories of submodules and borrow objects from there when able.

 * The "git diff --submodule={short,log}" mechanism has been enhanced
   to allow "--submodule=diff" to show the patch between the submodule
   commits bound to the superproject.

 * Even though "git hash-objects", which is a tool to take an
   on-filesystem data stream and put it into the Git object store,
   can perform "outside-world-to-Git" conversions (e.g.
   end-of-line conversions and application of the clean-filter), and
   it has had this feature on by default from very early days, its reverse
   operation "git cat-file", which takes an object from the Git object
   store and externalizes it for consumption by the outside world,
   lacked an equivalent mechanism to run the "Git-to-outside-world"
   conversion.  The command learned the "--filters" option to do so.

 * Output from "git diff" can be made easier to read by intelligently selecting
   which lines are common and which lines are added/deleted
   when the lines before and after the changed section
   are the same.  A command line option (--indent-heuristic) and a
   configuration variable (diff.indentHeuristic) are added to help with the
   experiment to find good heuristics.

 * In some projects, it is common to use "[RFC PATCH]" as the subject
   prefix for a patch meant for discussion rather than application.  A
   new format-patch option "--rfc" is a short-hand for "--subject-prefix=RFC PATCH"
   to help the participants of such projects.

 * "git add --chmod={+,-}x <pathspec>" only changed the
   executable bit for paths that are either new or modified. This has
   been corrected to change the executable bit for all paths that match
   the given pathspec.

 * When "git format-patch --stdout" output is placed as an in-body
   header and it uses RFC2822 header folding, "git am" fails to
   put the header line back into a single logical line.  The
   underlying "git mailinfo" was taught to handle this properly.

 * "gitweb" can spawn "highlight" to show blob contents with
   (programming) language-specific syntax highlighting, but only
   when the language is known.  "highlight" can however be told
   to guess the language itself by giving it "--force" option, which
   has been enabled.

 * "git gui" l10n to Portuguese.

 * When given an abbreviated object name that is not (or more
   realistically, "no longer") unique, we gave a fatal error
   "ambiguous argument".  This error is now accompanied by a hint that
   lists the objects beginning with the given prefix.  During the
   course of development of this new feature, numerous minor bugs were
   uncovered and corrected, the most notable one of which is that we
   gave "short SHA1 xxxx is ambiguous." twice without good reason.

 * "git log rev^..rev" is an often-used revision range specification
   to show what was done on a side branch merged at rev.  This has
   gained a short-hand "rev^-1".  In general "rev^-$n" is the same as
   "^rev^$n rev", i.e. what has happened on other branches while the
   history leading to nth parent was looking the other way.

 * In recent versions of cURL, GSSAPI credential delegation is
   disabled by default due to CVE-2011-2192; introduce a http.delegation
   configuration variable to selectively allow enabling this.
   (merge 26a7b23429 ps/http-gssapi-cred-delegation later to maint).

 * "git mergetool" learned to honor "-O<orderfile>" to control the
   order of paths to present to the end user.

 * "git diff/log --ws-error-highlight=<kind>" lacked the corresponding
   configuration variable (diff.wsErrorHighlight) to set it by default.

 * "git ls-files" learned the "--recurse-submodules" option
   to get a listing of tracked files across submodules (i.e. this
   only works with the "--cached" option, not for listing untracked or
   ignored files).  This would be a useful tool to sit on the upstream
   side of a pipe that is read with xargs to work on all working tree
   files from the top-level superproject.

 * A new credential helper that talks via "libsecret" with
   implementations of XDG Secret Service API has been added to
   contrib/credential/.

 * The GPG verification status shown by the "%G?" pretty format specifier
   was not rich enough to differentiate a signature made by an expired
   key, a signature made by a revoked key, etc.  New output letters
   have been assigned to express them.

 * In addition to purely abbreviated commit object names, "gitweb"
   learned to turn "git describe" output (e.g. v2.9.3-599-g2376d31787)
   into clickable links in its output.

 * "git commit" created an empty commit when invoked with an index
   consisting solely of intend-to-add paths (added with "git add -N").
   It now requires the "--allow-empty" option to create such a commit.
   The same logic prevented "git status" from showing such paths as "new files" in the
   "Changes not staged for commit" section.

 * The smudge/clean filter API spawns an external process
   to filter the contents of each path that has a filter defined.  A
   new type of "process" filter API has been added to allow the first
   request to run the filter for a path to spawn a single process, and
   all filtering is served by this single process for multiple
   paths, reducing the process creation overhead.

 * The user always has to say "stash@{$N}" when naming a single
   element in the default location of the stash, i.e. reflogs in
   refs/stash.  The "git stash" command learned to accept "git stash
   apply 4" as a short-hand for "git stash apply stash@{4}".


Performance, Internal Implementation, Development Support etc.

 * The delta-base-cache mechanism has been a key to the performance in
   a repository with a tightly packed packfile, but it did not scale
   well even with a larger value of core.deltaBaseCacheLimit.

 * Enhance "git status --porcelain" output by collecting more data on
   the state of the index and the working tree files, which may
   further be used to teach git-prompt (in contrib/) to make fewer
   calls to git.

 * Extract a small helper out of the function that reads the authors
   script file "git am" internally uses.
   (merge a77598e jc/am-read-author-file later to maint).

 * Lift calls to exit(2) and die() higher in the callchain in
   sequencer.c files so that more helper functions in it can be used
   by callers that want to handle error conditions themselves.

 * "git am" has been taught to make an internal call to "git apply"'s
   innards without spawning the latter as a separate process.

 * The ref-store abstraction was introduced to the refs API so that we
   can plug in different backends to store references.

 * The "unsigned char sha1[20]" to "struct object_id" conversion
   continues.  Notable changes in this round includes that ce->sha1,
   i.e. the object name recorded in the cache_entry, turns into an
   object_id.

 * JGit can show a fake ref "capabilities^{}" to "git fetch" when it
   does not advertise any refs, but "git fetch" was not prepared to
   see such an advertisement.  When the other side disconnects without
   giving any ref advertisement, we used to say "there may not be a
   repository at that URL", but we may have seen other advertisements
   like "shallow" and ".have" in which case we definitely know that a
   repository is there.  The code to detect this case has also been
   updated.

 * Some codepaths in "git pack-objects" were not ready to use an
   existing pack bitmap; now they are and as a result they have
   become faster.

 * The codepath in "git fsck" to detect malformed tree objects has
   been updated not to die but keep going after detecting them.

 * We call "qsort(array, nelem, sizeof(array[0]), fn)", and most of
   the time third parameter is redundant.  A new QSORT() macro lets us
   omit it.

 * "git pack-objects" in a repository with many packfiles used to
   spend a lot of time looking for/at objects in them; the accesses to
   the packfiles are now optimized by checking the most-recently-used
   packfile first.
   (merge c9af708b1a jk/pack-objects-optim-mru later to maint).

 * Codepaths involved in interacting alternate object stores have
   been cleaned up.

 * In order for the receiving end of "git push" to inspect the
   received history and decide to reject the push, the objects sent
   from the sending end need to be made available to the hook and
   the mechanism for the connectivity check, and this was done
   traditionally by storing the objects in the receiving repository
   and letting "git gc" expire them.  Instead, store the newly
   received objects in a temporary area, and make them available by
   reusing the alternate object store mechanism to them only while we
   decide if we accept the check, and once we decide, either migrate
   them to the repository or purge them immediately.

 * The require_clean_work_tree() helper was recreated in C when "git
   pull" was rewritten from shell; the helper is now made available to
   other callers in preparation for upcoming "rebase -i" work.

 * "git upload-pack" had its code cleaned-up and performance improved
   by reducing use of timestamp-ordered commit-list, which was
   replaced with a priority queue.

 * "git diff --no-index" codepath has been updated not to try to peek
   into a .git/ directory that happens to be under the current
   directory, when we know we are operating outside any repository.

 * Update of the sequencer codebase to make it reusable to reimplement
   "rebase -i" continues.

 * Git generally does not explicitly close file descriptors that were
   open in the parent process when spawning a child process, but most
   of the time the child does not want to access them. As Windows does
   not allow removing or renaming a file that has a file descriptor
   open, a slow-to-exit child can even break the parent process by
   holding onto them.  Use O_CLOEXEC flag to open files in various
   codepaths.

 * Update "interpret-trailers" machinery and teach it that people in
   the real world write all sorts of cruft in the "trailer" that was
   originally designed to have the neat-o "Mail-Header: like thing"
   and nothing else.


Also contains various documentation updates and code clean-ups.


Fixes since v2.10
-----------------

Unless otherwise noted, all the fixes since v2.9 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * Clarify various ways to specify the "revision ranges" in the
   documentation.

 * "diff-highlight" script (in contrib/) learned to work better with
   "git log -p --graph" output.

 * The test framework left the number of tests and success/failure
   count in the t/test-results directory, keyed by the name of the
   test script plus the process ID.  The latter however turned out not
   to serve any useful purpose.  The process ID part of the filename
   has been removed.

 * Having a submodule whose ".git" repository is somehow corrupt
   caused a few commands that recurse into submodules to loop forever.

 * "git symbolic-ref -d HEAD" happily removes the symbolic ref, but
   the resulting repository becomes an invalid one.  Teach the command
   to forbid removal of HEAD.

 * A test spawned a short-lived background process, which sometimes
   prevented the test directory from getting removed at the end of the
   script on some platforms.

 * Update a few tests that used to use GIT_CURL_VERBOSE to use the
   newer GIT_TRACE_CURL.

 * "git pack-objects --include-tag" was taught that when we know that
   we are sending an object C, we want a tag B that directly points at
   C but also a tag A that points at the tag B.  We used to miss the
   intermediate tag B in some cases.

 * Update Japanese translation for "git-gui".

 * "git fetch http::/site/path" did not die correctly and segfaulted
   instead.

 * "git commit-tree" stopped reading commit.gpgsign configuration
   variable that was meant for Porcelain "git commit" in Git 2.9; we
   forgot to update "git gui" to look at the configuration to match
   this change.

 * "git add --chmod={+,-}x" added recently lacked documentation, which has
   been corrected.

 * "git log --cherry-pick" used to include merge commits as candidates
   to be matched up with other commits, resulting a lot of wasted time.
   The patch-id generation logic has been updated to ignore merges and
   avoid the wastage.

 * The http transport (with curl-multi option, which is the default
   these days) failed to remove curl-easy handle from a curlm session,
   which led to unnecessary API failures.

 * There were numerous corner cases in which the configuration files
   are read and used or not read at all depending on the directory a
   Git command was run, leading to inconsistent behaviour.  The code
   to set-up repository access at the beginning of a Git process has
   been updated to fix them.
   (merge 4d0efa1 jk/setup-sequence-update later to maint).

 * "git diff -W" output needs to extend the context backward to
   include the header line of the current function and also forward to
   include the body of the entire current function up to the header
   line of the next one.  This process may have to merge two adjacent
   hunks, but the code forgot to do so in some cases.

 * Performance tests done via "t/perf" did not use the right
   build configuration if the user relied on autoconf generated
   configuration.

 * "git format-patch --base=..." feature that was recently added
   showed the base commit information after the "-- " e-mail signature
   line, which turned out to be inconvenient.  The base information
   has been moved above the signature line.

 * More i18n.

 * Even when "git pull --rebase=preserve" (and the underlying "git
   rebase --preserve") can complete without creating any new commits
   (i.e. fast-forwards), it still insisted on having usable ident
   information (read: user.email is set correctly), which was less
   than nice.  As the underlying commands used inside "git rebase"
   would fail with a more meaningful error message and advice text
   when the bogus ident matters, this extra check was removed.

 * "git gc --aggressive" used to limit the delta-chain length to 250,
   which is way too deep for gaining additional space savings and is
   detrimental for runtime performance.  The limit has been reduced to
   50.

 * Documentation for individual configuration variables to control use
   of color (like `color.grep`) said that their default value is
   'false', instead of saying their default is taken from `color.ui`.
   When we updated the default value for color.ui from 'false' to
   'auto' quite a while ago, all of them broke.  This has been
   corrected.

 * The pretty-format specifier "%C(auto)" used by the "log" family of
   commands to enable coloring of the output is taught to also issue a
   color-reset sequence to the output.

 * A shell script example in check-ref-format documentation has been
   fixed.

 * "git checkout <word>" does not follow the usual disambiguation
   rules when the <word> can be both a rev and a path, to allow
   checking out a branch 'foo' in a project that happens to have a
   file 'foo' in the working tree without having to disambiguate.
   This was poorly documented and the check was incorrect when the
   command was run from a subdirectory.

 * Some codepaths in "git diff" used regexec(3) on a buffer that was
   mmap(2)ed, which may not have a terminating NUL, leading to a read
   beyond the end of the mapped region.  This was fixed by introducing
   a regexec_buf() helper that takes a <ptr,len> pair with REG_STARTEND
   extension.

 * The procedure to build Git on Mac OS X for Travis CI hardcoded the
   internal directory structure we assumed HomeBrew uses, which was a
   no-no.  The procedure has been updated to ask HomeBrew things we
   need to know to fix this.

 * When "git rebase -i" is given a broken instruction, it told the
   user to fix it with "--edit-todo", but didn't say what the step
   after that was (i.e. "--continue").

 * Documentation around tools to import from CVS was fairly outdated.

 * "git clone --recurse-submodules" lost the progress eye-candy in
   a recent update, which has been corrected.

 * A low-level function verify_packfile() was meant to show errors
   that were detected without dying itself, but under some conditions
   it didn't and died instead, which has been fixed.

 * When "git fetch" tries to find where the history of the repository
   it runs in has diverged from what the other side has, it has a
   mechanism to avoid digging too deep into irrelevant side branches.
   This however did not work well over the "smart-http" transport due
   to a design bug, which has been fixed.

 * In the codepath that comes up with the hostname to be used in an
   e-mail when the user didn't tell us, we looked at the ai_canonname
   field in struct addrinfo without making sure it is not NULL first.

 * "git worktree", even though it used the default_abbrev setting that
   ought to be affected by the core.abbrev configuration variable, ignored
   the variable setting.  The command has been taught to read the
   default set of configuration variables to correct this.

 * "git init" tried to record core.worktree in the repository's
   'config' file when the GIT_WORK_TREE environment variable was set and
   it was different from where GIT_DIR appears as ".git" at its top,
   but the logic was faulty when .git is a "gitdir:" file that points
   at the real place, causing trouble in working trees that are
   managed by "git worktree".  This has been corrected.

 * Codepaths that read from an on-disk loose object were too loose in
   validating that they are reading a proper object file and
   sometimes read past the data they read from the disk, which has
   been corrected.  H/t to Gustavo Grieco for reporting.

 * The original command line syntax for "git merge", which was "git
   merge <msg> HEAD <parent>...", has been deprecated for quite some
   time, and "git gui" was the last in-tree user of the syntax.  This
   is finally fixed, so that we can move forward with the deprecation.

 * An author name that has a backslash-quoted double quote in the
   human readable part ("My \"double quoted\" name"), was not unquoted
   correctly while applying a patch from a piece of e-mail.

 * Doc update to clarify what "log -3 --reverse" does.

 * Almost everybody uses DEFAULT_ABBREV to refer to the default
   setting for the abbreviation, but "git blame" peeked into
   underlying variable bypassing the macro for no good reason.

 * The "graph" API used in "git log --graph" miscounted the number of
   output columns consumed so far when drawing a padding line, which
   has been fixed; this did not affect any existing code as nobody
   tried to write anything after the padding on such a line, though.

 * The code that parses the format parameter of the for-each-ref command
   has seen a micro-optimization.

 * When we started to use cURL to talk to an imap server, we forgot to explicitly add
   imap(s):// before the destination.  To some folks, that didn't work
   and the library tried to make HTTP(s) requests instead.

 * The ./configure script generated from configure.ac was taught how
   to detect support of SSL by libcurl better.

 * The command-line completion script (in contrib/) learned to
   complete "git cmd ^mas<HT>" to complete the negative end of
   reference to "git cmd ^master".
   (merge 49416ad22a cp/completion-negative-refs later to maint).

 * The existing "git fetch --depth=<n>" option was hard to use
   correctly when making the history of an existing shallow clone
   deeper.  A new option, "--deepen=<n>", has been added to make this
   easier to use.  "git clone" also learned "--shallow-since=<date>"
   and "--shallow-exclude=<tag>" options to make it easier to specify
   "I am interested only in the recent N months worth of history" and
   "Give me only the history since that version".
   (merge cccf74e2da nd/shallow-deepen later to maint).

 * "git blame --reverse OLD path" is now DWIMmed to show how lines
   in path in an old revision OLD have survived up to the current
   commit.
   (merge e1d09701a4 jc/blame-reverse later to maint).

 * The http.emptyauth configuration variable is a way to allow an empty username to
   pass when attempting to authenticate using mechanisms like
   Kerberos.  We took an unspecified (NULL) username and sent ":"
   (i.e. no username, no password) to CURLOPT_USERPWD, but did not do
   the same when the username is explicitly set to an empty string.

 * "git clone" of a local repository can be done at the filesystem
   level, but the codepath did not check errors while copying and
   adjusting the file that lists alternate object stores.

 * Documentation for "git commit" was updated to clarify that "commit
   -p <paths>" adds to the current contents of the index to come up
   with what to commit.

 * A stray symbolic link in the $GIT_DIR/refs/ directory could make name
   resolution loop forever, which has been corrected.

 * The "submodule.<name>.path" stored in .gitmodules is never copied
   to .git/config and such a key in .git/config has no meaning, but
   the documentation described it next to submodule.<name>.url
   as if both belong to .git/config.  This has been fixed.

 * In a worktree created via "git
   worktree", "git checkout" attempts to protect users from confusion
   by refusing to check out a branch that is already checked out in
   another worktree.  However, this also prevented checking out a
   branch which is designated as the primary branch of a bare
   repository, in a worktree that is connected to the bare
   repository.  The check has been corrected to allow it.

 * "git rebase" immediately after "git clone" failed to find the fork
   point from the upstream.

 * When fetching from a remote that has many tags that are irrelevant
   to branches we are following, we used to waste way too many cycles
   checking if the object pointed at by a tag (that we are not
   going to fetch!) exists in our repository too carefully.

 * Protect our code from over-eager compilers.

 * Recent git allows submodule.<name>.branch to use a special token
   "." instead of the branch name; the documentation has been updated
   to describe it.

 * "git send-email" attempts to pick up valid e-mails from the
   trailers, but people in the real world write non-addresses there, like
   "Cc: Stable <add@re.ss> # 4.8+", which broke the output depending
   on the availability and vintage of the Mail::Address perl module.
   (merge dcfafc5214 mm/send-email-cc-cruft-after-address later to maint).

 * The Travis CI configuration we ship ran the tests with the --verbose
   option but this risks non-TAP output that happens to be "ok" to be
   misinterpreted as TAP signalling a test that passed.  This resulted
   in unnecessary failures.  This has been corrected by introducing a
   new mode to run our tests in the test harness to send the verbose
   output separately to the log file.

 * Some AsciiDoc formatters mishandle a displayed illustration with
   tabs in it.  Adjust a few of them in merge-base documentation to
   work around them.

 * Fixed a minor regression in "git submodule" that was introduced
   when more helper functions were reimplemented in C.
   (merge 77b63ac31e sb/submodule-ignore-trailing-slash later to maint).

 * The code that we have used for the past 10+ years to cycle
   4-element ring buffers turns out to be not quite portable in
   theoretical world.
   (merge bb84735c80 rs/ring-buffer-wraparound later to maint).

 * "git daemon" used fixed-length buffers to turn URLs to the
   repository the client asked for into the server side directory
   paths, using snprintf() to avoid overflowing these buffers, but
   allowed possibly truncated paths to the directory.  This has been
   tightened to reject such a request that causes an overlong path to be
   served.
   (merge 6bdb0083be jk/daemon-path-ok-check-truncation later to maint).

 * Recent update to git-sh-setup (a library of shell functions that
   are used by our in-tree scripted Porcelain commands) included
   another shell library git-sh-i18n without specifying where it is,
   relying on the $PATH.  This has been fixed to be more explicit by
   prefixing with $(git --exec-path) output.
   (merge 1073094f30 ak/sh-setup-dot-source-i18n-fix later to maint).

 * Fix for a racy false-positive test failure.
   (merge fdf4f6c79b as/merge-attr-sleep later to maint).

 * Portability update and workaround for builds on recent Mac OS X.
   (merge a296bc0132 ls/macos-update later to maint).

 * Using a %(HEAD) placeholder in "for-each-ref --format=" option
   caused the command to segfault when on an unborn branch.
   (merge 84679d470d jc/for-each-ref-head-segfault-fix later to maint).

 * "git rebase -i" did not work well with the core.commentchar
   configuration variable for two reasons, both of which have been
   fixed.
   (merge 882cd23777 js/rebase-i-commentchar-fix later to maint).

 * Other minor doc, test and build updates and code cleanups.
   (merge 5c238e29a8 jk/common-main later to maint).
   (merge 5a5749e45b ak/pre-receive-hook-template-modefix later to maint).
   (merge 6d834ac8f1 jk/rebase-config-insn-fmt-docfix later to maint).
   (merge de9f7fa3b0 rs/commit-pptr-simplify later to maint).
   (merge 4259d693fc sc/fmt-merge-msg-doc-markup-fix later to maint).
   (merge 28fab7b23d nd/test-helpers later to maint).
   (merge c2bb0c1d1e rs/cocci later to maint).
   (merge 3285b7badb ps/common-info-doc later to maint).
   (merge 2b090822e8 nd/worktree-lock later to maint).
   (merge 4bd488ea7c jk/create-branch-remove-unused-param later to maint).
   (merge 974e0044d6 tk/diffcore-delta-remove-unused later to maint).

----------------------------------------------------------------

Changes since v2.10.0 are as follows:

Aaron M Watson (1):
      stash: allow stashes to be referenced by index only

Alex Henrie (6):
      am: put spaces around pipe in usage string
      cat-file: put spaces around pipes in usage string
      git-rebase--interactive: fix English grammar
      git-merge-octopus: do not capitalize "octopus"
      unpack-trees: do not capitalize "working"
      l10n: ca.po: update translation

Alex Riesen (2):
      git-gui: support for $FILENAMES in tool definitions
      git-gui: ensure the file in the diff pane is in the list of selected files

Alexander Shopov (2):
      git-gui i18n: Updated Bulgarian translation (565,0f,0u)
      git-gui: Mark 'All' in remote.tcl for translation

Anders Kaseorg (3):
      imap-send: Tell cURL to use imap:// or imaps://
      pre-receive.sample: mark it executable
      git-sh-setup: be explicit where to dot-source git-sh-i18n from.

Andreas Schwab (2):
      t6026-merge-attr: don't fail if sleep exits early
      t6026-merge-attr: ensure that the merge driver was called

Beat Bolli (1):
      SubmittingPatches: use gitk's "Copy commit summary" format

Ben North (1):
      git-worktree.txt: fix typo "to"/"two", and add comma

Brandon Williams (6):
      pathspec: remove unnecessary function prototypes
      git: make super-prefix option
      ls-files: optionally recurse into submodules
      ls-files: pass through safe options for --recurse-submodules
      ls-files: add pathspec matching for submodules
      submodules doc: update documentation for "." used for submodule branches

Brian Henderson (3):
      diff-highlight: add some tests
      diff-highlight: add failing test for handling --graph output
      diff-highlight: add support for --graph output

Changwoo Ryu (1):
      l10n: ko.po: Update Korean translation

Chris Packham (1):
      completion: support excluding refs

Christian Couder (43):
      apply: make some names more specific
      apply: move 'struct apply_state' to apply.h
      builtin/apply: make apply_patch() return -1 or -128 instead of die()ing
      builtin/apply: read_patch_file() return -1 instead of die()ing
      builtin/apply: make find_header() return -128 instead of die()ing
      builtin/apply: make parse_chunk() return a negative integer on error
      builtin/apply: make parse_single_patch() return -1 on error
      builtin/apply: make parse_whitespace_option() return -1 instead of die()ing
      builtin/apply: make parse_ignorewhitespace_option() return -1 instead of die()ing
      builtin/apply: move init_apply_state() to apply.c
      apply: make init_apply_state() return -1 instead of exit()ing
      builtin/apply: make check_apply_state() return -1 instead of die()ing
      builtin/apply: move check_apply_state() to apply.c
      builtin/apply: make apply_all_patches() return 128 or 1 on error
      builtin/apply: make parse_traditional_patch() return -1 on error
      builtin/apply: make gitdiff_*() return 1 at end of header
      builtin/apply: make gitdiff_*() return -1 on error
      builtin/apply: change die_on_unsafe_path() to check_unsafe_path()
      builtin/apply: make build_fake_ancestor() return -1 on error
      builtin/apply: make remove_file() return -1 on error
      builtin/apply: make add_conflicted_stages_file() return -1 on error
      builtin/apply: make add_index_file() return -1 on error
      builtin/apply: make create_file() return -1 on error
      builtin/apply: make write_out_one_result() return -1 on error
      builtin/apply: make write_out_results() return -1 on error
      unpack-objects: add --max-input-size=<size> option
      builtin/apply: make try_create_file() return -1 on error
      builtin/apply: make create_one_file() return -1 on error
      builtin/apply: rename option parsing functions
      apply: rename and move opt constants to apply.h
      apply: move libified code from builtin/apply.c to apply.{c,h}
      apply: make some parsing functions static again
      apply: use error_errno() where possible
      apply: make it possible to silently apply
      apply: don't print on stdout in verbosity_silent mode
      usage: add set_warn_routine()
      usage: add get_error_routine() and get_warn_routine()
      apply: change error_routine when silent
      apply: refactor `git apply` option parsing
      apply: pass apply state to build_fake_ancestor()
      apply: learn to use a different index file
      builtin/am: use apply API in run_apply()
      split-index: s/eith/with/ typo fix

David Aguilar (4):
      mergetool: add copyright
      mergetool: move main program flow into a main() function
      mergetool: honor diff.orderFile
      mergetool: honor -O<orderfile>

David Turner (11):
      rename_ref_available(): add docstring
      refs: add methods for reflog
      refs: add method for initial ref transaction commit
      refs: make delete_refs() virtual
      refs: add methods to init refs db
      refs: add method to rename refs
      refs: make lock generic
      refs: implement iteration over only per-worktree refs
      add David Turner's Two Sigma address
      fsck: handle bad trees like other errors
      http: http.emptyauth should allow empty (not just NULL) usernames

Dennis Kaarsemaker (1):
      worktree: allow the main brach of a bare repository to be checked out

Dimitriy Ryazantcev (4):
      l10n: ru.po: update Russian translation
      git-gui: Update Russian translation
      l10n: ru.po: update Russian translation
      l10n: ru.po: update Russian translation

Elia Pinto (6):
      t5541-http-push-smart.sh: use the GIT_TRACE_CURL environment var
      test-lib.sh: preserve GIT_TRACE_CURL from the environment
      t5550-http-fetch-dumb.sh: use the GIT_TRACE_CURL environment var
      t5551-http-fetch-smart.sh: use the GIT_TRACE_CURL environment var
      git-check-ref-format.txt: fixup documentation
      git-gui/po/glossary/txt-to-pot.sh: use the $( ... ) construct for command substitution

Emily Xie (1):
      pathspec: warn on empty strings as pathspec

Eric Wong (5):
      http: warn on curl_multi_add_handle failures
      http: consolidate #ifdefs for curl_multi_remove_handle
      http: always remove curl easy from curlm session on release
      git-svn: reduce scope of input record separator change
      git-svn: "git worktree" awareness

Gavin Lambert (1):
      git-svn: do not reuse caches memoized for a different architecture

Ian Kelling (2):
      gitweb: remove unused guess_file_syntax() parameter
      gitweb: use highlight's shebang detection

Jacob Keller (9):
      format-patch: show 0/1 and 1/1 for singleton patch with cover letter
      cache: add empty_tree_oid object and helper function
      graph: add support for --line-prefix on all graph-aware output
      diff: prepare for additional submodule formats
      allow do_submodule_path to work even if submodule isn't checked out
      submodule: convert show_submodule_summary to use struct object_id *
      submodule: refactor show_submodule_summary with helper function
      diff: teach diff to display submodule difference with an inline diff
      rev-list: use hdr_termination instead of a always using a newline

Jakub Narębski (1):
      configure.ac: improve description of NO_REGEX test

Jean-Noel Avila (1):
      l10n: fr.po v2.11.0_rnd1

Jean-Noël AVILA (1):
      i18n: i18n: diff: mark die messages for translation

Jeff Hostetler (9):
      status: rename long-format print routines
      status: cleanup API to wt_status_print
      status: support --porcelain[=<version>]
      status: collect per-file data for --porcelain=v2
      status: print per-file porcelain v2 status data
      status: print branch info with --porcelain=v2 --branch
      git-status.txt: describe --porcelain=v2 format
      test-lib-functions.sh: add lf_to_nul helper
      status: unit tests for --porcelain=v2

Jeff King (117):
      rebase-interactive: drop early check for valid ident
      provide an initializer for "struct object_info"
      sha1_file: make packed_object_info public
      pack-objects: break delta cycles before delta-search phase
      pack-objects: use mru list when iterating over packs
      gc: default aggressive depth to 50
      cache_or_unpack_entry: drop keep_cache parameter
      clear_delta_base_cache_entry: use a more descriptive name
      release_delta_base_cache: reuse existing detach function
      delta_base_cache: use list.h for LRU
      delta_base_cache: drop special treatment of blobs
      delta_base_cache: use hashmap.h
      t/perf: add basic perf tests for delta base cache
      index-pack: add --max-input-size=<size> option
      receive-pack: allow a maximum input size to be specified
      test-lib: drop PID from test-results/*.count
      diff-highlight: ignore test cruft
      diff-highlight: add multi-byte tests
      diff-highlight: avoid highlighting combined diffs
      error_errno: use constant return similar to error()
      color_parse_mem: initialize "struct color" temporary
      t5305: move cleanup into test block
      t5305: drop "dry-run" of unpack-objects
      t5305: use "git -C"
      t5305: simplify packname handling
      pack-objects: walk tag chains for --include-tag
      remote-curl: handle URLs without protocol
      patch-ids: turn off rename detection
      add_delta_base_cache: use list_for_each_safe
      patch-ids: refuse to compute patch-id for merge commit
      hash-object: always try to set up the git repository
      patch-id: use RUN_SETUP_GENTLY
      diff: skip implicit no-index check when given --no-index
      diff: handle --no-index prefixes consistently
      diff: always try to set up the repository
      pager: remove obsolete comment
      pager: stop loading git_default_config()
      pager: make pager_program a file-local static
      pager: use callbacks instead of configset
      pager: handle early config
      t1302: use "git -C"
      test-config: setup git directory
      config: only read .git/config from configured repos
      init: expand comments explaining config trickery
      init: reset cached config when entering new repo
      t1007: factor out repeated setup
      verify_packfile: check pack validity before accessing data
      clone: pass --progress decision to recursive submodules
      docs/cvsimport: prefer cvs-fast-export to parsecvs
      docs/cvs-migration: update link to cvsps homepage
      docs/cvs-migration: mention cvsimport caveats
      ident: handle NULL ai_canonname
      get_sha1: detect buggy calls with multiple disambiguators
      get_sha1: avoid repeating ourselves via ONLY_TO_DIE
      get_sha1: propagate flags to child functions
      get_short_sha1: parse tags when looking for treeish
      get_short_sha1: refactor init of disambiguation code
      get_short_sha1: NUL-terminate hex prefix
      get_short_sha1: mark ambiguity error for translation
      sha1_array: let callbacks interrupt iteration
      for_each_abbrev: drop duplicate objects
      get_short_sha1: list ambiguous objects on error
      xdiff: rename "struct group" to "struct xdlgroup"
      get_short_sha1: make default disambiguation configurable
      tree-walk: be more specific about corrupt tree errors
      graph: fix extra spaces in graph_padding_line
      t5613: drop reachable_via function
      t5613: drop test_valid_repo function
      t5613: use test_must_fail
      t5613: whitespace/style cleanups
      t5613: do not chdir in main process
      find_unique_abbrev: move logic out of get_short_sha1()
      clone: detect errors in normalize_path_copy
      files_read_raw_ref: avoid infinite loop on broken symlinks
      files_read_raw_ref: prevent infinite retry loops in general
      t5613: clarify "too deep" recursion tests
      link_alt_odb_entry: handle normalize_path errors
      link_alt_odb_entry: refactor string handling
      alternates: provide helper for adding to alternates list
      alternates: provide helper for allocating alternate
      alternates: encapsulate alt->base munging
      alternates: use a separate scratch space
      fill_sha1_file: write "boring" characters
      alternates: store scratch buffer as strbuf
      fill_sha1_file: write into a strbuf
      count-objects: report alternates via verbose mode
      sha1_file: always allow relative paths to alternates
      alternates: use fspathcmp to detect duplicates
      check_connected: accept an env argument
      tmp-objdir: introduce API for temporary object directories
      receive-pack: quarantine objects until pre-receive accepts
      tmp-objdir: put quarantine information in the environment
      tmp-objdir: do not migrate files starting with '.'
      upload-pack: use priority queue in reachable() check
      merge-base: handle --fork-point without reflog
      fetch: use "quick" has_sha1_file for tag following
      test-lib: handle TEST_OUTPUT_DIRECTORY with spaces
      test-lib: add --verbose-log option
      travis: use --verbose-log test option
      test-lib: bail out when "-v" used under "prove"
      daemon: detect and reject too-long paths
      read info/{attributes,exclude} only when in repository
      test-*-cache-tree: setup git dir
      find_unique_abbrev: use 4-buffer ring
      diff_unique_abbrev: rename to diff_aligned_abbrev
      diff_aligned_abbrev: use "struct oid"
      diff: handle sha1 abbreviations outside of repository
      git-compat-util: move content inside ifdef/endif guards
      doc: fix missing "::" in config list
      t0021: use write_script to create rot13 shell script
      t0021: put $TEST_ROOT in $PATH
      t0021: use $PERL_PATH for rot13-filter.pl
      t0021: fix filehandle usage on older perl
      alternates: re-allow relative paths from environment
      sequencer: silence -Wtautological-constant-out-of-range-compare
      create_branch: drop unused "head" parameter
      common-main: stop munging argv[0] path

Jiang Xin (7):
      l10n: zh_CN: fixed some typos for git 2.10.0
      l10n: git.pot: v2.11.0 round 1 (209 new, 53 removed)
      l10n: zh_CN: for git v2.11.0 l10n round 1
      i18n: fix unmatched single quote in error message
      l10n: git.pot: v2.11.0 round 2 (1 new, 1 removed)
      l10n: Fixed typo of git fetch-pack command
      l10n: fix unmatched single quote in error message

Johannes Schindelin (63):
      cat-file: fix a grammo in the man page
      sequencer: lib'ify sequencer_pick_revisions()
      sequencer: do not die() in do_pick_commit()
      sequencer: lib'ify write_message()
      sequencer: lib'ify do_recursive_merge()
      sequencer: lib'ify do_pick_commit()
      sequencer: lib'ify walk_revs_populate_todo()
      sequencer: lib'ify prepare_revs()
      sequencer: lib'ify read_and_refresh_cache()
      sequencer: lib'ify read_populate_todo()
      sequencer: lib'ify read_populate_opts()
      sequencer: lib'ify create_seq_dir()
      sequencer: lib'ify save_head()
      sequencer: lib'ify save_todo()
      sequencer: lib'ify save_opts()
      sequencer: lib'ify fast_forward_to()
      sequencer: lib'ify checkout_fast_forward()
      sequencer: ensure to release the lock when we could not read the index
      cat-file: introduce the --filters option
      cat-file --textconv/--filters: allow specifying the path separately
      cat-file: support --textconv/--filters in batch mode
      git-gui: respect commit.gpgsign again
      regex: -G<pattern> feeds a non NUL-terminated string to regexec() and fails
      regex: add regexec_buf() that can work on a non NUL-terminated string
      regex: use regexec_buf()
      pull: drop confusing prefix parameter of die_on_unclean_work_tree()
      pull: make code more similar to the shell script again
      wt-status: make the require_clean_work_tree() function reusable
      wt-status: export also the has_un{staged,committed}_changes() functions
      wt-status: teach has_{unstaged,uncommitted}_changes() about submodules
      wt-status: begin error messages with lower-case
      reset: fix usage
      sequencer: use static initializers for replay_opts
      sequencer: use memoized sequencer directory path
      sequencer: avoid unnecessary indirection
      sequencer: future-proof remove_sequencer_state()
      sequencer: plug memory leaks for the option values
      sequencer: future-proof read_populate_todo()
      sequencer: refactor the code to obtain a short commit name
      sequencer: completely revamp the "todo" script parsing
      sequencer: strip CR from the todo script
      sequencer: avoid completely different messages for different actions
      sequencer: get rid of the subcommand field
      sequencer: remember the onelines when parsing the todo file
      sequencer: prepare for rebase -i's commit functionality
      sequencer: introduce a helper to read files written by scripts
      sequencer: allow editing the commit message on a case-by-case basis
      sequencer: support amending commits
      sequencer: support cleaning up commit messages
      sequencer: left-trim lines read from the script
      sequencer: stop releasing the strbuf in write_message()
      sequencer: roll back lock file if write_message() failed
      sequencer: refactor write_message() to take a pointer/length
      sequencer: teach write_message() to append an optional LF
      sequencer: remove overzealous assumption in rebase -i mode
      sequencer: mark action_name() for translation
      sequencer: quote filenames in error messages
      sequencer: start error messages consistently with lower case
      sequencer: mark all error messages for translation
      t6026: ensure that long-running script really is
      rebase -i: highlight problems with core.commentchar
      stripspace: respect repository config
      rebase -i: handle core.commentChar=auto

Johannes Sixt (9):
      t9903: fix broken && chain
      t6026-merge-attr: clean up background process at end of test case
      t3700-add: create subdirectory gently
      t3700-add: do not check working tree file mode without POSIXPERM
      t0060: sidestep surprising path mangling results on Windows
      t0021: expect more variations in the output of uniq -c
      t0021: compute file size with a single process instead of a pipeline
      t0021, t5615: use $PWD instead of $(pwd) in PATH-like shell variables
      t6026: clarify the point of "kill $(cat sleep.pid)"

Jonathan Nieder (1):
      connect: tighten check for unexpected early hang up

Jonathan Tan (15):
      tests: move test_lazy_prereq JGIT to test-lib.sh
      connect: advertized capability is not a ref
      mailinfo: separate in-body header processing
      mailinfo: make is_scissors_line take plain char *
      mailinfo: handle in-body header continuations
      fetch-pack: do not reset in_vain on non-novel acks
      trailer: improve const correctness
      trailer: use list.h for doubly-linked list
      trailer: streamline trailer item create and add
      trailer: make args have their own struct
      trailer: clarify failure modes in parse_trailer
      trailer: allow non-trailers in trailer block
      trailer: forbid leading whitespace in trailers
      trailer: support values folded to multiple lines
      doc: mention user-configured trailers

Josh Triplett (2):
      format-patch: show base info before email signature
      format-patch: add "--rfc" for the common case of [RFC PATCH]

Junio C Hamano (54):
      blame: improve diagnosis for "--reverse NEW"
      blame: dwim "blame --reverse OLD" as "blame --reverse OLD.."
      am: refactor read_author_script()
      diff.c: remove output_prefix_length field
      submodule: avoid auto-discovery in prepare_submodule_repo_env()
      symbolic-ref -d: do not allow removal of HEAD
      Prepare for 2.9.4
      Start the 2.11 cycle
      First batch for 2.11
      Second batch for 2.11
      Third batch for 2.11
      Start preparing for 2.10.1
      Fourth batch for 2.11
      streaming: make sure to notice corrupt object
      unpack_sha1_header(): detect malformed object header
      Fifth batch for 2.11
      worktree: honor configuration variables
      blame: use DEFAULT_ABBREV macro
      Prepare for 2.10.1
      Sixth batch for 2.11
      diff_unique_abbrev(): document its assumption and limitation
      abbrev: add FALLBACK_DEFAULT_ABBREV to prepare for auto sizing
      abbrev: prepare for new world order
      Git 2.10.1
      Seventh batch for 2.11
      t4015: split out the "setup" part of ws-error-highlight test
      diff.c: refactor parse_ws_error_highlight()
      diff.c: move ws-error-highlight parsing helpers up
      diff: introduce diff.wsErrorHighlight option
      Eighth batch for 2.11
      Ninth batch for 2.11
      Start preparing for 2.10.2
      cocci: refactor common patterns to use xstrdup_or_null()
      Tenth batch for 2.11
      t3700: fix broken test under !SANITY
      transport: pass summary_width down the callchain
      fetch: pass summary_width down the callchain
      transport: allow summary-width to be computed dynamically
      transport: compute summary-width dynamically
      Eleventh batch for 2.11
      Getting ready for 2.11-rc0
      Git 2.10.2
      Git 2.11-rc0
      A bit of updates post -rc0
      Revert "t6026-merge-attr: ensure that the merge driver was called"
      Revert "t6026-merge-attr: don't fail if sleep exits early"
      t0021: remove debugging cruft
      Git 2.11.0-rc1
      Git 2.11-rc2
      for-each-ref: do not segv with %(HEAD) on an unborn branch
      mailinfo: read local configuration
      archive: read local configuration
      Git 2.11-rc3
      Git 2.11

Karsten Blees (2):
      git-gui: unicode file name support on windows
      git-gui: handle the encoding of Git's output correctly

Kevin Daudt (2):
      t5100-mailinfo: replace common path prefix with variable
      mailinfo: unescape quoted-pair in header fields

Kirill Smelkov (3):
      pack-objects: respect --local/--honor-pack-keep/--incremental when bitmap is in use
      pack-objects: use reachability bitmap index when generating non-stdout pack
      t/perf/run: copy config.mak.autogen & friends to build area

Lars Schneider (20):
      travis-ci: ask homebrew for its path instead of hardcoding it
      convert: quote filter names in error messages
      convert: modernize tests
      run-command: move check_pipe() from write_or_die to run_command
      run-command: add clean_on_exit_handler
      pkt-line: rename packet_write() to packet_write_fmt()
      pkt-line: extract set_packet_header()
      pkt-line: add packet_write_fmt_gently()
      pkt-line: add packet_flush_gently()
      pkt-line: add packet_write_gently()
      pkt-line: add functions to read/write flush terminated packet streams
      convert: make apply_filter() adhere to standard Git error handling
      convert: prepare filter.<driver>.process option
      convert: add filter.<driver>.process option
      contrib/long-running-filter: add long running filter example
      sha1_file: rename git_open_noatime() to git_open()
      sha1_file: open window into packfiles with O_CLOEXEC
      read-cache: make sure file handles are not inherited by child processes
      Makefile: set NO_OPENSSL on macOS by default
      travis-ci: disable GIT_TEST_HTTPD for macOS

Linus Torvalds (1):
      abbrev: auto size the default abbreviation

Mantas Mikulėnas (1):
      contrib: add credential helper for libsecret

Marc Branchaud (1):
      RelNotes: spelling and phrasing fixups

Matthieu Moy (4):
      Documentation/config: default for color.* is color.ui
      parse_mailboxes: accept extra text after <...> address
      t9000-addresses: update expected results after fix
      Git.pm: add comment pointing to t9000

Michael Haggerty (36):
      xdl_change_compact(): fix compaction heuristic to adjust ixo
      xdl_change_compact(): only use heuristic if group can't be matched
      is_blank_line(): take a single xrecord_t as argument
      recs_match(): take two xrecord_t pointers as arguments
      xdl_change_compact(): introduce the concept of a change group
      resolve_gitlink_ref(): eliminate temporary variable
      refs: rename struct ref_cache to files_ref_store
      refs: create a base class "ref_store" for files_ref_store
      add_packed_ref(): add a files_ref_store argument
      get_packed_ref(): add a files_ref_store argument
      resolve_missing_loose_ref(): add a files_ref_store argument
      {lock,commit,rollback}_packed_refs(): add files_ref_store arguments
      refs: reorder definitions
      resolve_packed_ref(): rename function from resolve_missing_loose_ref()
      resolve_gitlink_packed_ref(): remove function
      read_raw_ref(): take a (struct ref_store *) argument
      resolve_ref_recursively(): new function
      resolve_gitlink_ref(): implement using resolve_ref_recursively()
      resolve_gitlink_ref(): avoid memory allocation in many cases
      resolve_gitlink_ref(): rename path parameter to submodule
      refs: make read_raw_ref() virtual
      refs: make verify_refname_available() virtual
      refs: make pack_refs() virtual
      refs: make create_symref() virtual
      refs: make peel_ref() virtual
      repack_without_refs(): add a files_ref_store argument
      lock_raw_ref(): add a files_ref_store argument
      commit_ref_update(): add a files_ref_store argument
      lock_ref_for_update(): add a files_ref_store argument
      lock_ref_sha1_basic(): add a files_ref_store argument
      split_symref_update(): add a files_ref_store argument
      files_ref_iterator_begin(): take a ref_store argument
      refs: add method iterator_begin
      diff: improve positioning of add/delete blocks in diffs
      parse-options: add parse_opt_unknown_cb()
      blame: honor the diff heuristic options and config

Michael J Gruber (1):
      gpg-interface: use more status letters

Mike Ralphson (1):
      vcs-svn/fast_export: fix timestamp fmt specifiers

Nguyễn Thái Ngọc Duy (40):
      remote-curl.c: convert fetch_git() to use argv_array
      transport-helper.c: refactor set_helper_option()
      upload-pack: move shallow deepen code out of receive_needs()
      upload-pack: move "shallow" sending code out of deepen()
      upload-pack: remove unused variable "backup"
      upload-pack: move "unshallow" sending code out of deepen()
      upload-pack: use skip_prefix() instead of starts_with()
      upload-pack: tighten number parsing at "deepen" lines
      upload-pack: make check_non_tip() clean things up on error
      upload-pack: move rev-list code out of check_non_tip()
      fetch-pack: use skip_prefix() instead of starts_with()
      fetch-pack: use a common function for verbose printing
      fetch-pack.c: mark strings for translating
      fetch-pack: use a separate flag for fetch in deepening mode
      shallow.c: implement a generic shallow boundary finder based on rev-list
      upload-pack: add deepen-since to cut shallow repos based on time
      fetch: define shallow boundary with --shallow-since
      clone: define shallow clone boundary based on time with --shallow-since
      t5500, t5539: tests for shallow depth since a specific date
      refs: add expand_ref()
      upload-pack: support define shallow boundary by excluding revisions
      fetch: define shallow boundary with --shallow-exclude
      clone: define shallow clone boundary with --shallow-exclude
      t5500, t5539: tests for shallow depth excluding a ref
      upload-pack: split check_unreachable() in two, prep for get_reachable_list()
      upload-pack: add get_reachable_list()
      fetch, upload-pack: --deepen=N extends shallow boundary by N commits
      checkout: add some spaces between code and comment
      checkout.txt: document a common case that ignores ambiguation rules
      checkout: fix ambiguity check in subdir
      init: correct re-initialization from a linked worktree
      init: call set_git_dir_init() from within init_db()
      init: kill set_git_dir_init()
      init: do not set unnecessary core.worktree
      init: kill git_link variable
      git-commit.txt: clarify --patch mode with pathspec
      diff-lib: allow ita entries treated as "not yet exist in index"
      diff: add --ita-[in]visible-in-index
      commit: fix empty commit creation when there's no changes but ita entries
      commit: don't be fooled by ita entries when creating initial commit

Olaf Hering (1):
      git-gui: sort entries in tclIndex

Orgad Shaneh (1):
      git-gui: Do not reset author details on amend

Pat Thoyts (7):
      Allow keyboard control to work in the staging widgets.
      Amend tab ordering and text widget border and highlighting.
      git-gui: fix detection of Cygwin
      git-gui (Windows): use git-gui.exe in `Create Desktop Shortcut`
      git-gui: maintain backwards compatibility for merge syntax
      git-gui: avoid persisting modified author identity
      git-gui: set version 0.21

Patrick Steinhardt (1):
      doc: fix location of 'info/' with $GIT_COMMON_DIR

Peter Krefting (1):
      l10n: sv.po: Update Swedish translation (2913t0f0u)

Petr Stodulka (1):
      http: control GSSAPI credential delegation

Philip Oakley (14):
      doc: use 'symmetric difference' consistently
      doc: revisions - name the left and right sides
      doc: show the actual left, right, and boundary marks
      doc: revisions: give headings for the two and three dot notations
      doc: revisions: extra clarification of <rev>^! notation effects
      doc: revisions: single vs multi-parent notation comparison
      doc: gitrevisions - use 'reachable' in page description
      doc: gitrevisions - clarify 'latter case' is revision walk
      doc: revisions - define `reachable`
      doc: revisions - clarify reachability examples
      doc: revisions: show revision expansion in examples
      doc: revisions: sort examples and fix alignment of the unchanged
      doc: fix merge-base ASCII art tab spacing
      doc: fix the 'revert a faulty merge' ASCII art tab spacing

Pranit Bauva (2):
      rev-list-options: clarify the usage of --reverse
      t0040: convert all possible tests to use `test-parse-options --expect`

Ralf Thielow (7):
      help: introduce option --exclude-guides
      help: make option --help open man pages only for Git commands
      rebase -i: improve advice on bad instruction lines
      l10n: de.po: fix translation of autostash
      l10n: de.po: translate 260 new messages
      fetch-pack.c: correct command at the beginning of an error message
      l10n: de.po: translate 210 new messages

Ray Chen (1):
      l10n: zh_CN: review for git v2.10.0 l10n

René Scharfe (36):
      compat: move strdup(3) replacement to its own file
      introduce hex2chr() for converting two hexadecimal digits to a character
      strbuf: use valid pointer in strbuf_remove()
      checkout: constify parameters of checkout_stage() and checkout_merged()
      unpack-trees: pass checkout state explicitly to check_updates()
      sha1_file: use llist_mergesort() for sorting packs
      xdiff: fix merging of hunks with -W context and -u context
      contrib/coccinelle: fix semantic patch for oid_to_hex_r()
      add coccicheck make target
      use strbuf_addstr() for adding constant strings to a strbuf, part 2
      pretty: let %C(auto) reset all attributes
      introduce CHECKOUT_INIT
      add COPY_ARRAY
      use COPY_ARRAY
      git-gui: stop using deprecated merge syntax
      gitignore: ignore output files of coccicheck make target
      use strbuf_addstr() instead of strbuf_addf() with "%s", part 2
      use strbuf_add_unique_abbrev() for adding short hashes, part 2
      add QSORT
      use QSORT
      remove unnecessary check before QSORT
      coccicheck: use --all-includes by default
      use QSORT, part 2
      pretty: avoid adding reset for %C(auto) if output is empty
      coccicheck: make transformation for strbuf_addf(sb, "...") more precise
      show-branch: use QSORT
      remove unnecessary NULL check before free(3)
      use strbuf_add_unique_abbrev() for adding short hashes, part 3
      pretty: fix document link for color specification
      avoid pointer arithmetic involving NULL in FLEX_ALLOC_MEM
      inline xalloc_flex() into FLEXPTR_ALLOC_MEM
      hex: make wraparound of the index into ring-buffer explicit
      valgrind: support test helpers
      commit: simplify building parents list
      sha1_name: make wraparound of the index into ring-buffer explicit
      cocci: avoid self-references in object_id transformations

Ronnie Sahlberg (2):
      refs: add a backend method structure
      refs: add a transaction_commit() method

SZEDER Gábor (1):
      ref-filter: strip format option after a field name only once while parsing

Satoshi Yasushima (6):
      git-gui: consistently use the same word for "remote" in Japanese
      git-gui: consistently use the same word for "blame" in Japanese
      git-gui: apply po template to Japanese translation
      git-gui: add Japanese language code
      git-gui: update Japanese translation
      git-gui: update Japanese information

Stefan Beller (16):
      t7408: modernize style
      t7408: merge short tests, factor out testing method
      submodule--helper module-clone: allow multiple references
      submodule--helper update-clone: allow multiple references
      clone: factor out checking for an alternate path
      clone: clarify option_reference as required
      clone: implement optional references
      clone: recursive and reference option triggers submodule alternates
      xdiff: remove unneeded declarations
      transport: report missing submodule pushes consistently on stderr
      diff.c: use diff_options directly
      diff: omit found pointer from emit_callback
      diff: remove dead code
      submodule: ignore trailing slash on superproject URL
      submodule: ignore trailing slash in relative url
      documentation: improve submodule.<name>.{url, path} description

Stefan Christ (1):
      Documentation/fmt-merge-msg: fix markup in example

Thomas Gummerer (4):
      add: document the chmod option
      update-index: add test for chmod flags
      read-cache: introduce chmod_index_entry
      add: modify already added files when --chmod is given

Tobias Klauser (1):
      diffcore-delta: remove unused parameter to diffcore_count_changes()

Trần Ngọc Quân (1):
      l10n: vi.po: Updated translation to v2.11.0 (2913t)

Vasco Almeida (33):
      l10n: pt_PT: update Portuguese translation
      l10n: pt_PT: update Portuguese repository info
      i18n: blame: mark error messages for translation
      i18n: branch: mark option description for translation
      i18n: config: mark error message for translation
      i18n: merge-recursive: mark error messages for translation
      i18n: merge-recursive: mark verbose message for translation
      i18n: notes: mark error messages for translation
      notes: spell first word of error messages in lowercase
      i18n: receive-pack: mark messages for translation
      i18n: show-branch: mark error messages for translation
      i18n: show-branch: mark plural strings for translation
      i18n: update-index: mark warnings for translation
      i18n: commit: mark message for translation
      i18n: connect: mark die messages for translation
      i18n: ident: mark hint for translation
      i18n: notes-merge: mark die messages for translation
      i18n: stash: mark messages for translation
      git-gui i18n: mark strings for translation
      git-gui: l10n: add Portuguese translation
      git-gui i18n: internationalize use of colon punctuation
      git-gui i18n: mark "usage:" strings for translation
      git-gui: fix incorrect use of Tcl append command
      git-gui i18n: mark string in lib/error.tcl for translation
      t1512: become resilient to GETTEXT_POISON build
      i18n: apply: mark plural string for translation
      i18n: apply: mark info messages for translation
      i18n: apply: mark error messages for translation
      i18n: apply: mark error message for translation
      i18n: convert mark error messages for translation
      i18n: credential-cache--daemon: mark advice for translation
      i18n: diff: mark warnings for translation
      l10n: pt_PT: update Portuguese translation

Vegard Nossum (1):
      revision: new rev^-n shorthand for rev^n..rev

Younes Khoudli (1):
      doc: remove reference to the traditional layout in git-tag.txt

brian m. carlson (20):
      cache: convert struct cache_entry to use struct object_id
      builtin/apply: convert static functions to struct object_id
      builtin/blame: convert struct origin to use struct object_id
      builtin/log: convert some static functions to use struct object_id
      builtin/cat-file: convert struct expand_data to use struct object_id
      builtin/cat-file: convert some static functions to struct object_id
      builtin: convert textconv_object to use struct object_id
      streaming: make stream_blob_to_fd take struct object_id
      builtin/checkout: convert some static functions to struct object_id
      notes-merge: convert struct notes_merge_pair to struct object_id
      Convert read_mmblob to take struct object_id.
      builtin/blame: convert file to use struct object_id
      builtin/rm: convert to use struct object_id
      notes: convert init_notes to use struct object_id
      builtin/update-index: convert file to struct object_id
      sha1_name: convert get_sha1_mb to struct object_id
      refs: add an update_ref_oid function.
      builtin/am: convert to struct object_id
      builtin/commit-tree: convert to struct object_id
      builtin/reset: convert to use struct object_id

jfbu (1):
      l10n: fr.po fix grammar mistakes

yaras (1):
      git-gui: fix initial git gui message encoding

Ævar Arnfjörð Bjarmason (3):
      gitweb: fix a typo in a comment
      gitweb: link to 7-char+ SHA-1s, not only 8-char+
      gitweb: link to "git describe"'d commits in log messages

Дилян Палаузов (1):
      ./configure.ac: detect SSL in libcurl using curl-config


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.11.0-rc3
@ 2016-11-23 23:21  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2016-11-23 23:21 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

A release candidate Git v2.11.0-rc3 is now available for testing
at the usual places.  It is comprised of 666 non-merge commits
since v2.10.0, contributed by 73 people, 15 of which are new faces.

It turns out that one recent fix exposed codepaths that have not
been using the API correctly, resulting apparent minor regressions
in a few programs.  This hopefully final release candidate contains
fixes to them.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.11.0-rc3' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.10.0 are as follows.
Welcome to the Git development community!

  Aaron M Watson, Brandon Williams, Brian Henderson, Emily Xie,
  Gavin Lambert, Ian Kelling, Jeff Hostetler, jfbu, Mantas
  Mikulėnas, Petr Stodulka, Satoshi Yasushima, Stefan Christ,
  Vegard Nossum, yaras, and Younes Khoudli.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alexander Shopov, Alex Henrie,
  Alex Riesen, Anders Kaseorg, Andreas Schwab, Beat Bolli, Ben
  North, brian m. carlson, Changwoo Ryu, Chris Packham, Christian
  Couder, David Aguilar, David Turner, Dennis Kaarsemaker,
  Dimitriy Ryazantcev, Elia Pinto, Eric Wong, Jacob Keller,
  Jakub Narębski, Jean-Noel Avila, Jean-Noël AVILA, Jeff King,
  Jiang Xin, Johannes Schindelin, Johannes Sixt, Jonathan Nieder,
  Jonathan Tan, Josh Triplett, Junio C Hamano, Karsten Blees, Kevin
  Daudt, Kirill Smelkov, Lars Schneider, Linus Torvalds, Matthieu
  Moy, Michael Haggerty, Michael J Gruber, Mike Ralphson, Nguyễn
  Thái Ngọc Duy, Olaf Hering, Orgad Shaneh, Patrick Steinhardt,
  Pat Thoyts, Peter Krefting, Philip Oakley, Pranit Bauva, Ralf
  Thielow, Ray Chen, René Scharfe, Ronnie Sahlberg, Stefan Beller,
  SZEDER Gábor, Thomas Gummerer, Tobias Klauser, Trần Ngọc
  Quân, Vasco Almeida, and Дилян Палаузов.

----------------------------------------------------------------

Git 2.11 Release Notes (draft)
==============================

Backward compatibility notes.

 * An empty string used as a pathspec element has always meant
   'everything matches', but it is too easy to write a script that
   finds a path to remove in $path and run 'git rm "$paht"' by
   mistake (when the user meant to give "$path"), which ends up
   removing everything.  This release starts warning about the
   use of an empty string that is used for 'everything matches' and
   asks users to use a more explicit '.' for that instead.

   The hope is that existing users will not mind this change, and
   eventually the warning can be turned into a hard error, upgrading
   the deprecation into removal of this (mis)feature.

 * The historical argument order "git merge <msg> HEAD <commit>..."
   has been deprecated for quite some time, and will be removed in the
   next release (not this one).

 * The default abbreviation length, which has historically been 7, now
   scales as the repository grows, using the approximate number of
   objects in the repository and a bit of math around the birthday
   paradox.  The logic suggests to use 12 hexdigits for the Linux
   kernel, and 9 to 10 for Git itself.


Updates since v2.10
-------------------

UI, Workflows & Features

 * Comes with new version of git-gui, now at its 0.21.0 tag.

 * "git format-patch --cover-letter HEAD^" to format a single patch
   with a separate cover letter now numbers the output as [PATCH 0/1]
   and [PATCH 1/1] by default.

 * An incoming "git push" that attempts to push too many bytes can now
   be rejected by setting a new configuration variable at the receiving
   end.

 * "git nosuchcommand --help" said "No manual entry for gitnosuchcommand",
   which was not intuitive, given that "git nosuchcommand" said "git:
   'nosuchcommand' is not a git command".

 * "git clone --recurse-submodules --reference $path $URL" is a way to
   reduce network transfer cost by borrowing objects in an existing
   $path repository when cloning the superproject from $URL; it
   learned to also peek into $path for presence of corresponding
   repositories of submodules and borrow objects from there when able.

 * The "git diff --submodule={short,log}" mechanism has been enhanced
   to allow "--submodule=diff" to show the patch between the submodule
   commits bound to the superproject.

 * Even though "git hash-objects", which is a tool to take an
   on-filesystem data stream and put it into the Git object store,
   allowed to perform the "outside-world-to-Git" conversions (e.g.
   end-of-line conversions and application of the clean-filter), and
   it had the feature on by default from very early days, its reverse
   operation "git cat-file", which takes an object from the Git object
   store and externalize for the consumption by the outside world,
   lacked an equivalent mechanism to run the "Git-to-outside-world"
   conversion.  The command learned the "--filters" option to do so.

 * Output from "git diff" can be made easier to read by selecting
   which lines are common and which lines are added/deleted
   intelligently when the lines before and after the changed section
   are the same.  A command line option is added to help with the
   experiment to find a good heuristics.

 * In some projects, it is common to use "[RFC PATCH]" as the subject
   prefix for a patch meant for discussion rather than application.  A
   new option "--rfc" is a short-hand for "--subject-prefix=RFC PATCH"
   to help the participants of such projects.

 * "git add --chmod=+x <pathspec>" added recently only toggled the
   executable bit for paths that are either new or modified. This has
   been corrected to flip the executable bit for all paths that match
   the given pathspec.

 * When "git format-patch --stdout" output is placed as an in-body
   header and it uses the RFC2822 header folding, "git am" failed to
   put the header line back into a single logical line.  The
   underlying "git mailinfo" was taught to handle this properly.

 * "gitweb" can spawn "highlight" to show blob contents with
   (programming) language-specific syntax highlighting, but only
   when the language is known.  "highlight" can however be told
   to make the guess itself by giving it "--force" option, which
   has been enabled.

 * "git gui" l10n to Portuguese.

 * When given an abbreviated object name that is not (or more
   realistically, "no longer") unique, we gave a fatal error
   "ambiguous argument".  This error is now accompanied by a hint that
   lists the objects beginning with the given prefix.  During the
   course of development of this new feature, numerous minor bugs were
   uncovered and corrected, the most notable one of which is that we
   gave "short SHA1 xxxx is ambiguous." twice without good reason.

 * "git log rev^..rev" is an often-used revision range specification
   to show what was done on a side branch merged at rev.  This has
   gained a short-hand "rev^-1".  In general "rev^-$n" is the same as
   "^rev^$n rev", i.e. what has happened on other branches while the
   history leading to nth parent was looking the other way.

 * In recent versions of cURL, GSSAPI credential delegation is
   disabled by default due to CVE-2011-2192; introduce a configuration
   to selectively allow enabling this.
   (merge 26a7b23429 ps/http-gssapi-cred-delegation later to maint).

 * "git mergetool" learned to honor "-O<orderfile>" to control the
   order of paths to present to the end user.

 * "git diff/log --ws-error-highlight=<kind>" lacked the corresponding
   configuration variable to set it by default.

 * "git ls-files" learned "--recurse-submodules" option that can be
   used to get a listing of tracked files across submodules (i.e. this
   only works with "--cached" option, not for listing untracked or
   ignored files).  This would be a useful tool to sit on the upstream
   side of a pipe that is read with xargs to work on all working tree
   files from the top-level superproject.

 * A new credential helper that talks via "libsecret" with
   implementations of XDG Secret Service API has been added to
   contrib/credential/.

 * The GPG verification status shown in "%G?" pretty format specifier
   was not rich enough to differentiate a signature made by an expired
   key, a signature made by a revoked key, etc.  New output letters
   have been assigned to express them.

 * In addition to purely abbreviated commit object names, "gitweb"
   learned to turn "git describe" output (e.g. v2.9.3-599-g2376d31787)
   into clickable links in its output.

 * When new paths were added by "git add -N" to the index, it was
   enough to circumvent the check by "git commit" to refrain from
   making an empty commit without "--allow-empty".  The same logic
   prevented "git status" to show such a path as "new file" in the
   "Changes not staged for commit" section.

 * The smudge/clean filter API expect an external process is spawned
   to filter the contents for each path that has a filter defined.  A
   new type of "process" filter API has been added to allow the first
   request to run the filter for a path to spawn a single process, and
   all filtering need is served by this single process for multiple
   paths, reducing the process creation overhead.

 * The user always has to say "stash@{$N}" when naming a single
   element in the default location of the stash, i.e. reflogs in
   refs/stash.  The "git stash" command learned to accept "git stash
   apply 4" as a short-hand for "git stash apply stash@{4}".


Performance, Internal Implementation, Development Support etc.

 * The delta-base-cache mechanism has been a key to the performance in
   a repository with a tightly packed packfile, but it did not scale
   well even with a larger value of core.deltaBaseCacheLimit.

 * Enhance "git status --porcelain" output by collecting more data on
   the state of the index and the working tree files, which may
   further be used to teach git-prompt (in contrib/) to make fewer
   calls to git.

 * Extract a small helper out of the function that reads the authors
   script file "git am" internally uses.
   (merge a77598e jc/am-read-author-file later to maint).

 * Lifts calls to exit(2) and die() higher in the callchain in
   sequencer.c files so that more helper functions in it can be used
   by callers that want to handle error conditions themselves.

 * "git am" has been taught to make an internal call to "git apply"'s
   innards without spawning the latter as a separate process.

 * The ref-store abstraction was introduced to the refs API so that we
   can plug in different backends to store references.

 * The "unsigned char sha1[20]" to "struct object_id" conversion
   continues.  Notable changes in this round includes that ce->sha1,
   i.e. the object name recorded in the cache_entry, turns into an
   object_id.

 * JGit can show a fake ref "capabilities^{}" to "git fetch" when it
   does not advertise any refs, but "git fetch" was not prepared to
   see such an advertisement.  When the other side disconnects without
   giving any ref advertisement, we used to say "there may not be a
   repository at that URL", but we may have seen other advertisement
   like "shallow" and ".have" in which case we definitely know that a
   repository is there.  The code to detect this case has also been
   updated.

 * Some codepaths in "git pack-objects" were not ready to use an
   existing pack bitmap; now they are and as the result they have
   become faster.

 * The codepath in "git fsck" to detect malformed tree objects has
   been updated not to die but keep going after detecting them.

 * We call "qsort(array, nelem, sizeof(array[0]), fn)", and most of
   the time third parameter is redundant.  A new QSORT() macro lets us
   omit it.

 * "git pack-objects" in a repository with many packfiles used to
   spend a lot of time looking for/at objects in them; the accesses to
   the packfiles are now optimized by checking the most-recently-used
   packfile first.
   (merge c9af708b1a jk/pack-objects-optim-mru later to maint).

 * Codepaths involved in interacting alternate object store have
   been cleaned up.

 * In order for the receiving end of "git push" to inspect the
   received history and decide to reject the push, the objects sent
   from the sending end need to be made available to the hook and
   the mechanism for the connectivity check, and this was done
   traditionally by storing the objects in the receiving repository
   and letting "git gc" to expire it.  Instead, store the newly
   received objects in a temporary area, and make them available by
   reusing the alternate object store mechanism to them only while we
   decide if we accept the check, and once we decide, either migrate
   them to the repository or purge them immediately.

 * The require_clean_work_tree() helper was recreated in C when "git
   pull" was rewritten from shell; the helper is now made available to
   other callers in preparation for upcoming "rebase -i" work.

 * "git upload-pack" had its code cleaned-up and performance improved
   by reducing use of timestamp-ordered commit-list, which was
   replaced with a priority queue.

 * "git diff --no-index" codepath has been updated not to try to peek
   into .git/ directory that happens to be under the current
   directory, when we know we are operating outside any repository.

 * Update of the sequencer codebase to make it reusable to reimplement
   "rebase -i" continues.

 * Git generally does not explicitly close file descriptors that were
   open in the parent process when spawning a child process, but most
   of the time the child does not want to access them. As Windows does
   not allow removing or renaming a file that has a file descriptor
   open, a slow-to-exit child can even break the parent process by
   holding onto them.  Use O_CLOEXEC flag to open files in various
   codepaths.

 * Update "interpret-trailers" machinery and teaches it that people in
   real world write all sorts of crufts in the "trailer" that was
   originally designed to have the neat-o "Mail-Header: like thing"
   and nothing else.


Also contains various documentation updates and code clean-ups.


Fixes since v2.10
-----------------

Unless otherwise noted, all the fixes since v2.9 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * Clarify various ways to specify the "revision ranges" in the
   documentation.

 * "diff-highlight" script (in contrib/) learned to work better with
   "git log -p --graph" output.

 * The test framework left the number of tests and success/failure
   count in the t/test-results directory, keyed by the name of the
   test script plus the process ID.  The latter however turned out not
   to serve any useful purpose.  The process ID part of the filename
   has been removed.

 * Having a submodule whose ".git" repository is somehow corrupt
   caused a few commands that recurse into submodules loop forever.

 * "git symbolic-ref -d HEAD" happily removes the symbolic ref, but
   the resulting repository becomes an invalid one.  Teach the command
   to forbid removal of HEAD.

 * A test spawned a short-lived background process, which sometimes
   prevented the test directory from getting removed at the end of the
   script on some platforms.

 * Update a few tests that used to use GIT_CURL_VERBOSE to use the
   newer GIT_TRACE_CURL.

 * "git pack-objects --include-tag" was taught that when we know that
   we are sending an object C, we want a tag B that directly points at
   C but also a tag A that points at the tag B.  We used to miss the
   intermediate tag B in some cases.

 * Update Japanese translation for "git-gui".

 * "git fetch http::/site/path" did not die correctly and segfaulted
   instead.

 * "git commit-tree" stopped reading commit.gpgsign configuration
   variable that was meant for Porcelain "git commit" in Git 2.9; we
   forgot to update "git gui" to look at the configuration to match
   this change.

 * "git add --chmod=+x" added recently lacked documentation, which has
   been corrected.

 * "git log --cherry-pick" used to include merge commits as candidates
   to be matched up with other commits, resulting a lot of wasted time.
   The patch-id generation logic has been updated to ignore merges to
   avoid the wastage.

 * The http transport (with curl-multi option, which is the default
   these days) failed to remove curl-easy handle from a curlm session,
   which led to unnecessary API failures.

 * There were numerous corner cases in which the configuration files
   are read and used or not read at all depending on the directory a
   Git command was run, leading to inconsistent behaviour.  The code
   to set-up repository access at the beginning of a Git process has
   been updated to fix them.
   (merge 4d0efa1 jk/setup-sequence-update later to maint).

 * "git diff -W" output needs to extend the context backward to
   include the header line of the current function and also forward to
   include the body of the entire current function up to the header
   line of the next one.  This process may have to merge two adjacent
   hunks, but the code forgot to do so in some cases.

 * Performance tests done via "t/perf" did not use the same set of
   build configuration if the user relied on autoconf generated
   configuration.

 * "git format-patch --base=..." feature that was recently added
   showed the base commit information after "-- " e-mail signature
   line, which turned out to be inconvenient.  The base information
   has been moved above the signature line.

 * More i18n.

 * Even when "git pull --rebase=preserve" (and the underlying "git
   rebase --preserve") can complete without creating any new commit
   (i.e. fast-forwards), it still insisted on having a usable ident
   information (read: user.email is set correctly), which was less
   than nice.  As the underlying commands used inside "git rebase"
   would fail with a more meaningful error message and advice text
   when the bogus ident matters, this extra check was removed.

 * "git gc --aggressive" used to limit the delta-chain length to 250,
   which is way too deep for gaining additional space savings and is
   detrimental for runtime performance.  The limit has been reduced to
   50.

 * Documentation for individual configuration variables to control use
   of color (like `color.grep`) said that their default value is
   'false', instead of saying their default is taken from `color.ui`.
   When we updated the default value for color.ui from 'false' to
   'auto' quite a while ago, all of them broke.  This has been
   corrected.

 * The pretty-format specifier "%C(auto)" used by the "log" family of
   commands to enable coloring of the output is taught to also issue a
   color-reset sequence to the output.

 * A shell script example in check-ref-format documentation has been
   fixed.

 * "git checkout <word>" does not follow the usual disambiguation
   rules when the <word> can be both a rev and a path, to allow
   checking out a branch 'foo' in a project that happens to have a
   file 'foo' in the working tree without having to disambiguate.
   This was poorly documented and the check was incorrect when the
   command was run from a subdirectory.

 * Some codepaths in "git diff" used regexec(3) on a buffer that was
   mmap(2)ed, which may not have a terminating NUL, leading to a read
   beyond the end of the mapped region.  This was fixed by introducing
   a regexec_buf() helper that takes a <ptr,len> pair with REG_STARTEND
   extension.

 * The procedure to build Git on Mac OS X for Travis CI hardcoded the
   internal directory structure we assumed HomeBrew uses, which was a
   no-no.  The procedure has been updated to ask HomeBrew things we
   need to know to fix this.

 * When "git rebase -i" is given a broken instruction, it told the
   user to fix it with "--edit-todo", but didn't say what the step
   after that was (i.e. "--continue").

 * Documentation around tools to import from CVS was fairly outdated.

 * "git clone --recurse-submodules" lost the progress eye-candy in
   recent update, which has been corrected.

 * A low-level function verify_packfile() was meant to show errors
   that were detected without dying itself, but under some conditions
   it didn't and died instead, which has been fixed.

 * When "git fetch" tries to find where the history of the repository
   it runs in has diverged from what the other side has, it has a
   mechanism to avoid digging too deep into irrelevant side branches.
   This however did not work well over the "smart-http" transport due
   to a design bug, which has been fixed.

 * In the codepath that comes up with the hostname to be used in an
   e-mail when the user didn't tell us, we looked at ai_canonname
   field in struct addrinfo without making sure it is not NULL first.

 * "git worktree", even though it used the default_abbrev setting that
   ought to be affected by core.abbrev configuration variable, ignored
   the variable setting.  The command has been taught to read the
   default set of configuration variables to correct this.

 * "git init" tried to record core.worktree in the repository's
   'config' file when GIT_WORK_TREE environment variable was set and
   it was different from where GIT_DIR appears as ".git" at its top,
   but the logic was faulty when .git is a "gitdir:" file that points
   at the real place, causing trouble in working trees that are
   managed by "git worktree".  This has been corrected.

 * Codepaths that read from an on-disk loose object were too loose in
   validating what they are reading is a proper object file and
   sometimes read past the data they read from the disk, which has
   been corrected.  H/t to Gustavo Grieco for reporting.

 * The original command line syntax for "git merge", which was "git
   merge <msg> HEAD <parent>...", has been deprecated for quite some
   time, and "git gui" was the last in-tree user of the syntax.  This
   is finally fixed, so that we can move forward with the deprecation.

 * An author name, that spelled a backslash-quoted double quote in the
   human readable part "My \"double quoted\" name", was not unquoted
   correctly while applying a patch from a piece of e-mail.

 * Doc update to clarify what "log -3 --reverse" does.

 * Almost everybody uses DEFAULT_ABBREV to refer to the default
   setting for the abbreviation, but "git blame" peeked into
   underlying variable bypassing the macro for no good reason.

 * The "graph" API used in "git log --graph" miscounted the number of
   output columns consumed so far when drawing a padding line, which
   has been fixed; this did not affect any existing code as nobody
   tried to write anything after the padding on such a line, though.

 * The code that parses the format parameter of for-each-ref command
   has seen a micro-optimization.

 * When we started cURL to talk to imap server when a new enough
   version of cURL library is available, we forgot to explicitly add
   imap(s):// before the destination.  To some folks, that didn't work
   and the library tried to make HTTP(s) requests instead.

 * The ./configure script generated from configure.ac was taught how
   to detect support of SSL by libcurl better.

 * The command-line completion script (in contrib/) learned to
   complete "git cmd ^mas<HT>" to complete the negative end of
   reference to "git cmd ^master".
   (merge 49416ad22a cp/completion-negative-refs later to maint).

 * The existing "git fetch --depth=<n>" option was hard to use
   correctly when making the history of an existing shallow clone
   deeper.  A new option, "--deepen=<n>", has been added to make this
   easier to use.  "git clone" also learned "--shallow-since=<date>"
   and "--shallow-exclude=<tag>" options to make it easier to specify
   "I am interested only in the recent N months worth of history" and
   "Give me only the history since that version".
   (merge cccf74e2da nd/shallow-deepen later to maint).

 * It is a common mistake to say "git blame --reverse OLD path",
   expecting that the command line is dwimmed as if asking how lines
   in path in an old revision OLD have survived up to the current
   commit.
   (merge e1d09701a4 jc/blame-reverse later to maint).

 * http.emptyauth configuration is a way to allow an empty username to
   pass when attempting to authenticate using mechanisms like
   Kerberos.  We took an unspecified (NULL) username and sent ":"
   (i.e. no username, no password) to CURLOPT_USERPWD, but did not do
   the same when the username is explicitly set to an empty string.

 * "git clone" of a local repository can be done at the filesystem
   level, but the codepath did not check errors while copying and
   adjusting the file that lists alternate object stores.

 * Documentation for "git commit" was updated to clarify that "commit
   -p <paths>" adds to the current contents of the index to come up
   with what to commit.

 * A stray symbolic link in $GIT_DIR/refs/ directory could make name
   resolution loop forever, which has been corrected.

 * The "submodule.<name>.path" stored in .gitmodules is never copied
   to .git/config and such a key in .git/config has no meaning, but
   the documentation described it and submodule.<name>.url next to
   each other as if both belong to .git/config.  This has been fixed.

 * In a worktree connected to a repository elsewhere, created via "git
   worktree", "git checkout" attempts to protect users from confusion
   by refusing to check out a branch that is already checked out in
   another worktree.  However, this also prevented checking out a
   branch, which is designated as the primary branch of a bare
   reopsitory, in a worktree that is connected to the bare
   repository.  The check has been corrected to allow it.

 * "git rebase" immediately after "git clone" failed to find the fork
   point from the upstream.

 * When fetching from a remote that has many tags that are irrelevant
   to branches we are following, we used to waste way too many cycles
   when checking if the object pointed at by a tag (that we are not
   going to fetch!) exists in our repository too carefully.

 * Protect our code from over-eager compilers.

 * Recent git allows submodule.<name>.branch to use a special token
   "." instead of the branch name; the documentation has been updated
   to describe it.

 * A hot-fix for a test added by a recent topic that went to both
   'master' and 'maint' already.

 * "git send-email" attempts to pick up valid e-mails from the
   trailers, but people in real world write non-addresses there, like
   "Cc: Stable <add@re.ss> # 4.8+", which broke the output depending
   on the availability and vintage of Mail::Address perl module.
   (merge dcfafc5214 mm/send-email-cc-cruft-after-address later to maint).

 * The Travis CI configuration we ship ran the tests with --verbose
   option but this risks non-TAP output that happens to be "ok" to be
   misinterpreted as TAP signalling a test that passed.  This resulted
   in unnecessary failure.  This has been corrected by introducing a
   new mode to run our tests in the test harness to send the verbose
   output separately to the log file.

 * Some AsciiDoc formatter mishandles a displayed illustration with
   tabs in it.  Adjust a few of them in merge-base documentation to
   work around them.

 * A minor regression fix for "git submodule" that was introduced
   when more helper functions were reimplemented in C.
   (merge 77b63ac31e sb/submodule-ignore-trailing-slash later to maint).

 * The code that we have used for the past 10+ years to cycle
   4-element ring buffers turns out to be not quite portable in
   theoretical world.
   (merge bb84735c80 rs/ring-buffer-wraparound later to maint).

 * "git daemon" used fixed-length buffers to turn URL to the
   repository the client asked for into the server side directory
   path, using snprintf() to avoid overflowing these buffers, but
   allowed possibly truncated paths to the directory.  This has been
   tightened to reject such a request that causes overlong path to be
   required to serve.
   (merge 6bdb0083be jk/daemon-path-ok-check-truncation later to maint).

 * Recent update to git-sh-setup (a library of shell functions that
   are used by our in-tree scripted Porcelain commands) included
   another shell library git-sh-i18n without specifying where it is,
   relying on the $PATH.  This has been fixed to be more explicit by
   prefixing $(git --exec-path) output in front.
   (merge 1073094f30 ak/sh-setup-dot-source-i18n-fix later to maint).

 * Fix for a racy false-positive test failure.
   (merge fdf4f6c79b as/merge-attr-sleep later to maint).

 * Portability update and workaround for builds on recent Mac OS X.
   (merge a296bc0132 ls/macos-update later to maint).

 * Using a %(HEAD) placeholder in "for-each-ref --format=" option
   caused the command to segfault when on an unborn branch.
   (merge 84679d470d jc/for-each-ref-head-segfault-fix later to maint).

 * "git rebase -i" did not work well with core.commentchar
   configuration variable for two reasons, both of which have been
   fixed.
   (merge 882cd23777 js/rebase-i-commentchar-fix later to maint).

 * Other minor doc, test and build updates and code cleanups.
   (merge 5c238e29a8 jk/common-main later to maint).
   (merge 5a5749e45b ak/pre-receive-hook-template-modefix later to maint).
   (merge 6d834ac8f1 jk/rebase-config-insn-fmt-docfix later to maint).
   (merge de9f7fa3b0 rs/commit-pptr-simplify later to maint).
   (merge 4259d693fc sc/fmt-merge-msg-doc-markup-fix later to maint).
   (merge 28fab7b23d nd/test-helpers later to maint).
   (merge c2bb0c1d1e rs/cocci later to maint).
   (merge 3285b7badb ps/common-info-doc later to maint).
   (merge 2b090822e8 nd/worktree-lock later to maint).
   (merge 4bd488ea7c jk/create-branch-remove-unused-param later to maint).
   (merge 974e0044d6 tk/diffcore-delta-remove-unused later to maint).

----------------------------------------------------------------

Changes since v2.10.0 are as follows:

Aaron M Watson (1):
      stash: allow stashes to be referenced by index only

Alex Henrie (5):
      am: put spaces around pipe in usage string
      cat-file: put spaces around pipes in usage string
      git-rebase--interactive: fix English grammar
      git-merge-octopus: do not capitalize "octopus"
      unpack-trees: do not capitalize "working"

Alex Riesen (2):
      git-gui: support for $FILENAMES in tool definitions
      git-gui: ensure the file in the diff pane is in the list of selected files

Alexander Shopov (2):
      git-gui i18n: Updated Bulgarian translation (565,0f,0u)
      git-gui: Mark 'All' in remote.tcl for translation

Anders Kaseorg (3):
      imap-send: Tell cURL to use imap:// or imaps://
      pre-receive.sample: mark it executable
      git-sh-setup: be explicit where to dot-source git-sh-i18n from.

Andreas Schwab (2):
      t6026-merge-attr: don't fail if sleep exits early
      t6026-merge-attr: ensure that the merge driver was called

Beat Bolli (1):
      SubmittingPatches: use gitk's "Copy commit summary" format

Ben North (1):
      git-worktree.txt: fix typo "to"/"two", and add comma

Brandon Williams (6):
      pathspec: remove unnecessary function prototypes
      git: make super-prefix option
      ls-files: optionally recurse into submodules
      ls-files: pass through safe options for --recurse-submodules
      ls-files: add pathspec matching for submodules
      submodules doc: update documentation for "." used for submodule branches

Brian Henderson (3):
      diff-highlight: add some tests
      diff-highlight: add failing test for handling --graph output
      diff-highlight: add support for --graph output

Changwoo Ryu (1):
      l10n: ko.po: Update Korean translation

Chris Packham (1):
      completion: support excluding refs

Christian Couder (43):
      apply: make some names more specific
      apply: move 'struct apply_state' to apply.h
      builtin/apply: make apply_patch() return -1 or -128 instead of die()ing
      builtin/apply: read_patch_file() return -1 instead of die()ing
      builtin/apply: make find_header() return -128 instead of die()ing
      builtin/apply: make parse_chunk() return a negative integer on error
      builtin/apply: make parse_single_patch() return -1 on error
      builtin/apply: make parse_whitespace_option() return -1 instead of die()ing
      builtin/apply: make parse_ignorewhitespace_option() return -1 instead of die()ing
      builtin/apply: move init_apply_state() to apply.c
      apply: make init_apply_state() return -1 instead of exit()ing
      builtin/apply: make check_apply_state() return -1 instead of die()ing
      builtin/apply: move check_apply_state() to apply.c
      builtin/apply: make apply_all_patches() return 128 or 1 on error
      builtin/apply: make parse_traditional_patch() return -1 on error
      builtin/apply: make gitdiff_*() return 1 at end of header
      builtin/apply: make gitdiff_*() return -1 on error
      builtin/apply: change die_on_unsafe_path() to check_unsafe_path()
      builtin/apply: make build_fake_ancestor() return -1 on error
      builtin/apply: make remove_file() return -1 on error
      builtin/apply: make add_conflicted_stages_file() return -1 on error
      builtin/apply: make add_index_file() return -1 on error
      builtin/apply: make create_file() return -1 on error
      builtin/apply: make write_out_one_result() return -1 on error
      builtin/apply: make write_out_results() return -1 on error
      unpack-objects: add --max-input-size=<size> option
      builtin/apply: make try_create_file() return -1 on error
      builtin/apply: make create_one_file() return -1 on error
      builtin/apply: rename option parsing functions
      apply: rename and move opt constants to apply.h
      apply: move libified code from builtin/apply.c to apply.{c,h}
      apply: make some parsing functions static again
      apply: use error_errno() where possible
      apply: make it possible to silently apply
      apply: don't print on stdout in verbosity_silent mode
      usage: add set_warn_routine()
      usage: add get_error_routine() and get_warn_routine()
      apply: change error_routine when silent
      apply: refactor `git apply` option parsing
      apply: pass apply state to build_fake_ancestor()
      apply: learn to use a different index file
      builtin/am: use apply API in run_apply()
      split-index: s/eith/with/ typo fix

David Aguilar (4):
      mergetool: add copyright
      mergetool: move main program flow into a main() function
      mergetool: honor diff.orderFile
      mergetool: honor -O<orderfile>

David Turner (11):
      rename_ref_available(): add docstring
      refs: add methods for reflog
      refs: add method for initial ref transaction commit
      refs: make delete_refs() virtual
      refs: add methods to init refs db
      refs: add method to rename refs
      refs: make lock generic
      refs: implement iteration over only per-worktree refs
      add David Turner's Two Sigma address
      fsck: handle bad trees like other errors
      http: http.emptyauth should allow empty (not just NULL) usernames

Dennis Kaarsemaker (1):
      worktree: allow the main brach of a bare repository to be checked out

Dimitriy Ryazantcev (3):
      l10n: ru.po: update Russian translation
      git-gui: Update Russian translation
      l10n: ru.po: update Russian translation

Elia Pinto (6):
      t5541-http-push-smart.sh: use the GIT_TRACE_CURL environment var
      test-lib.sh: preserve GIT_TRACE_CURL from the environment
      t5550-http-fetch-dumb.sh: use the GIT_TRACE_CURL environment var
      t5551-http-fetch-smart.sh: use the GIT_TRACE_CURL environment var
      git-check-ref-format.txt: fixup documentation
      git-gui/po/glossary/txt-to-pot.sh: use the $( ... ) construct for command substitution

Emily Xie (1):
      pathspec: warn on empty strings as pathspec

Eric Wong (5):
      http: warn on curl_multi_add_handle failures
      http: consolidate #ifdefs for curl_multi_remove_handle
      http: always remove curl easy from curlm session on release
      git-svn: reduce scope of input record separator change
      git-svn: "git worktree" awareness

Gavin Lambert (1):
      git-svn: do not reuse caches memoized for a different architecture

Ian Kelling (2):
      gitweb: remove unused guess_file_syntax() parameter
      gitweb: use highlight's shebang detection

Jacob Keller (9):
      format-patch: show 0/1 and 1/1 for singleton patch with cover letter
      cache: add empty_tree_oid object and helper function
      graph: add support for --line-prefix on all graph-aware output
      diff: prepare for additional submodule formats
      allow do_submodule_path to work even if submodule isn't checked out
      submodule: convert show_submodule_summary to use struct object_id *
      submodule: refactor show_submodule_summary with helper function
      diff: teach diff to display submodule difference with an inline diff
      rev-list: use hdr_termination instead of a always using a newline

Jakub Narębski (1):
      configure.ac: improve description of NO_REGEX test

Jean-Noel Avila (1):
      l10n: fr.po v2.11.0_rnd1

Jean-Noël AVILA (1):
      i18n: i18n: diff: mark die messages for translation

Jeff Hostetler (9):
      status: rename long-format print routines
      status: cleanup API to wt_status_print
      status: support --porcelain[=<version>]
      status: collect per-file data for --porcelain=v2
      status: print per-file porcelain v2 status data
      status: print branch info with --porcelain=v2 --branch
      git-status.txt: describe --porcelain=v2 format
      test-lib-functions.sh: add lf_to_nul helper
      status: unit tests for --porcelain=v2

Jeff King (116):
      rebase-interactive: drop early check for valid ident
      provide an initializer for "struct object_info"
      sha1_file: make packed_object_info public
      pack-objects: break delta cycles before delta-search phase
      pack-objects: use mru list when iterating over packs
      gc: default aggressive depth to 50
      cache_or_unpack_entry: drop keep_cache parameter
      clear_delta_base_cache_entry: use a more descriptive name
      release_delta_base_cache: reuse existing detach function
      delta_base_cache: use list.h for LRU
      delta_base_cache: drop special treatment of blobs
      delta_base_cache: use hashmap.h
      t/perf: add basic perf tests for delta base cache
      index-pack: add --max-input-size=<size> option
      receive-pack: allow a maximum input size to be specified
      test-lib: drop PID from test-results/*.count
      diff-highlight: ignore test cruft
      diff-highlight: add multi-byte tests
      diff-highlight: avoid highlighting combined diffs
      error_errno: use constant return similar to error()
      color_parse_mem: initialize "struct color" temporary
      t5305: move cleanup into test block
      t5305: drop "dry-run" of unpack-objects
      t5305: use "git -C"
      t5305: simplify packname handling
      pack-objects: walk tag chains for --include-tag
      remote-curl: handle URLs without protocol
      patch-ids: turn off rename detection
      add_delta_base_cache: use list_for_each_safe
      patch-ids: refuse to compute patch-id for merge commit
      hash-object: always try to set up the git repository
      patch-id: use RUN_SETUP_GENTLY
      diff: skip implicit no-index check when given --no-index
      diff: handle --no-index prefixes consistently
      diff: always try to set up the repository
      pager: remove obsolete comment
      pager: stop loading git_default_config()
      pager: make pager_program a file-local static
      pager: use callbacks instead of configset
      pager: handle early config
      t1302: use "git -C"
      test-config: setup git directory
      config: only read .git/config from configured repos
      init: expand comments explaining config trickery
      init: reset cached config when entering new repo
      t1007: factor out repeated setup
      verify_packfile: check pack validity before accessing data
      clone: pass --progress decision to recursive submodules
      docs/cvsimport: prefer cvs-fast-export to parsecvs
      docs/cvs-migration: update link to cvsps homepage
      docs/cvs-migration: mention cvsimport caveats
      ident: handle NULL ai_canonname
      get_sha1: detect buggy calls with multiple disambiguators
      get_sha1: avoid repeating ourselves via ONLY_TO_DIE
      get_sha1: propagate flags to child functions
      get_short_sha1: parse tags when looking for treeish
      get_short_sha1: refactor init of disambiguation code
      get_short_sha1: NUL-terminate hex prefix
      get_short_sha1: mark ambiguity error for translation
      sha1_array: let callbacks interrupt iteration
      for_each_abbrev: drop duplicate objects
      get_short_sha1: list ambiguous objects on error
      xdiff: rename "struct group" to "struct xdlgroup"
      get_short_sha1: make default disambiguation configurable
      tree-walk: be more specific about corrupt tree errors
      graph: fix extra spaces in graph_padding_line
      t5613: drop reachable_via function
      t5613: drop test_valid_repo function
      t5613: use test_must_fail
      t5613: whitespace/style cleanups
      t5613: do not chdir in main process
      find_unique_abbrev: move logic out of get_short_sha1()
      clone: detect errors in normalize_path_copy
      files_read_raw_ref: avoid infinite loop on broken symlinks
      files_read_raw_ref: prevent infinite retry loops in general
      t5613: clarify "too deep" recursion tests
      link_alt_odb_entry: handle normalize_path errors
      link_alt_odb_entry: refactor string handling
      alternates: provide helper for adding to alternates list
      alternates: provide helper for allocating alternate
      alternates: encapsulate alt->base munging
      alternates: use a separate scratch space
      fill_sha1_file: write "boring" characters
      alternates: store scratch buffer as strbuf
      fill_sha1_file: write into a strbuf
      count-objects: report alternates via verbose mode
      sha1_file: always allow relative paths to alternates
      alternates: use fspathcmp to detect duplicates
      check_connected: accept an env argument
      tmp-objdir: introduce API for temporary object directories
      receive-pack: quarantine objects until pre-receive accepts
      tmp-objdir: put quarantine information in the environment
      tmp-objdir: do not migrate files starting with '.'
      upload-pack: use priority queue in reachable() check
      merge-base: handle --fork-point without reflog
      fetch: use "quick" has_sha1_file for tag following
      test-lib: handle TEST_OUTPUT_DIRECTORY with spaces
      test-lib: add --verbose-log option
      travis: use --verbose-log test option
      test-lib: bail out when "-v" used under "prove"
      daemon: detect and reject too-long paths
      read info/{attributes,exclude} only when in repository
      test-*-cache-tree: setup git dir
      find_unique_abbrev: use 4-buffer ring
      diff_unique_abbrev: rename to diff_aligned_abbrev
      diff_aligned_abbrev: use "struct oid"
      diff: handle sha1 abbreviations outside of repository
      git-compat-util: move content inside ifdef/endif guards
      doc: fix missing "::" in config list
      t0021: use write_script to create rot13 shell script
      t0021: put $TEST_ROOT in $PATH
      t0021: use $PERL_PATH for rot13-filter.pl
      t0021: fix filehandle usage on older perl
      alternates: re-allow relative paths from environment
      sequencer: silence -Wtautological-constant-out-of-range-compare
      create_branch: drop unused "head" parameter

Jiang Xin (6):
      l10n: zh_CN: fixed some typos for git 2.10.0
      l10n: git.pot: v2.11.0 round 1 (209 new, 53 removed)
      l10n: zh_CN: for git v2.11.0 l10n round 1
      i18n: fix unmatched single quote in error message
      l10n: git.pot: v2.11.0 round 2 (1 new, 1 removed)
      l10n: Fixed typo of git fetch-pack command

Johannes Schindelin (63):
      cat-file: fix a grammo in the man page
      sequencer: lib'ify sequencer_pick_revisions()
      sequencer: do not die() in do_pick_commit()
      sequencer: lib'ify write_message()
      sequencer: lib'ify do_recursive_merge()
      sequencer: lib'ify do_pick_commit()
      sequencer: lib'ify walk_revs_populate_todo()
      sequencer: lib'ify prepare_revs()
      sequencer: lib'ify read_and_refresh_cache()
      sequencer: lib'ify read_populate_todo()
      sequencer: lib'ify read_populate_opts()
      sequencer: lib'ify create_seq_dir()
      sequencer: lib'ify save_head()
      sequencer: lib'ify save_todo()
      sequencer: lib'ify save_opts()
      sequencer: lib'ify fast_forward_to()
      sequencer: lib'ify checkout_fast_forward()
      sequencer: ensure to release the lock when we could not read the index
      cat-file: introduce the --filters option
      cat-file --textconv/--filters: allow specifying the path separately
      cat-file: support --textconv/--filters in batch mode
      git-gui: respect commit.gpgsign again
      regex: -G<pattern> feeds a non NUL-terminated string to regexec() and fails
      regex: add regexec_buf() that can work on a non NUL-terminated string
      regex: use regexec_buf()
      pull: drop confusing prefix parameter of die_on_unclean_work_tree()
      pull: make code more similar to the shell script again
      wt-status: make the require_clean_work_tree() function reusable
      wt-status: export also the has_un{staged,committed}_changes() functions
      wt-status: teach has_{unstaged,uncommitted}_changes() about submodules
      wt-status: begin error messages with lower-case
      reset: fix usage
      sequencer: use static initializers for replay_opts
      sequencer: use memoized sequencer directory path
      sequencer: avoid unnecessary indirection
      sequencer: future-proof remove_sequencer_state()
      sequencer: plug memory leaks for the option values
      sequencer: future-proof read_populate_todo()
      sequencer: refactor the code to obtain a short commit name
      sequencer: completely revamp the "todo" script parsing
      sequencer: strip CR from the todo script
      sequencer: avoid completely different messages for different actions
      sequencer: get rid of the subcommand field
      sequencer: remember the onelines when parsing the todo file
      sequencer: prepare for rebase -i's commit functionality
      sequencer: introduce a helper to read files written by scripts
      sequencer: allow editing the commit message on a case-by-case basis
      sequencer: support amending commits
      sequencer: support cleaning up commit messages
      sequencer: left-trim lines read from the script
      sequencer: stop releasing the strbuf in write_message()
      sequencer: roll back lock file if write_message() failed
      sequencer: refactor write_message() to take a pointer/length
      sequencer: teach write_message() to append an optional LF
      sequencer: remove overzealous assumption in rebase -i mode
      sequencer: mark action_name() for translation
      sequencer: quote filenames in error messages
      sequencer: start error messages consistently with lower case
      sequencer: mark all error messages for translation
      t6026: ensure that long-running script really is
      rebase -i: highlight problems with core.commentchar
      stripspace: respect repository config
      rebase -i: handle core.commentChar=auto

Johannes Sixt (9):
      t9903: fix broken && chain
      t6026-merge-attr: clean up background process at end of test case
      t3700-add: create subdirectory gently
      t3700-add: do not check working tree file mode without POSIXPERM
      t0060: sidestep surprising path mangling results on Windows
      t0021: expect more variations in the output of uniq -c
      t0021: compute file size with a single process instead of a pipeline
      t0021, t5615: use $PWD instead of $(pwd) in PATH-like shell variables
      t6026: clarify the point of "kill $(cat sleep.pid)"

Jonathan Nieder (1):
      connect: tighten check for unexpected early hang up

Jonathan Tan (15):
      tests: move test_lazy_prereq JGIT to test-lib.sh
      connect: advertized capability is not a ref
      mailinfo: separate in-body header processing
      mailinfo: make is_scissors_line take plain char *
      mailinfo: handle in-body header continuations
      fetch-pack: do not reset in_vain on non-novel acks
      trailer: improve const correctness
      trailer: use list.h for doubly-linked list
      trailer: streamline trailer item create and add
      trailer: make args have their own struct
      trailer: clarify failure modes in parse_trailer
      trailer: allow non-trailers in trailer block
      trailer: forbid leading whitespace in trailers
      trailer: support values folded to multiple lines
      doc: mention user-configured trailers

Josh Triplett (2):
      format-patch: show base info before email signature
      format-patch: add "--rfc" for the common case of [RFC PATCH]

Junio C Hamano (53):
      blame: improve diagnosis for "--reverse NEW"
      blame: dwim "blame --reverse OLD" as "blame --reverse OLD.."
      am: refactor read_author_script()
      diff.c: remove output_prefix_length field
      submodule: avoid auto-discovery in prepare_submodule_repo_env()
      symbolic-ref -d: do not allow removal of HEAD
      Prepare for 2.9.4
      Start the 2.11 cycle
      First batch for 2.11
      Second batch for 2.11
      Third batch for 2.11
      Start preparing for 2.10.1
      Fourth batch for 2.11
      streaming: make sure to notice corrupt object
      unpack_sha1_header(): detect malformed object header
      Fifth batch for 2.11
      worktree: honor configuration variables
      blame: use DEFAULT_ABBREV macro
      Prepare for 2.10.1
      Sixth batch for 2.11
      diff_unique_abbrev(): document its assumption and limitation
      abbrev: add FALLBACK_DEFAULT_ABBREV to prepare for auto sizing
      abbrev: prepare for new world order
      Git 2.10.1
      Seventh batch for 2.11
      t4015: split out the "setup" part of ws-error-highlight test
      diff.c: refactor parse_ws_error_highlight()
      diff.c: move ws-error-highlight parsing helpers up
      diff: introduce diff.wsErrorHighlight option
      Eighth batch for 2.11
      Ninth batch for 2.11
      Start preparing for 2.10.2
      cocci: refactor common patterns to use xstrdup_or_null()
      Tenth batch for 2.11
      t3700: fix broken test under !SANITY
      transport: pass summary_width down the callchain
      fetch: pass summary_width down the callchain
      transport: allow summary-width to be computed dynamically
      transport: compute summary-width dynamically
      Eleventh batch for 2.11
      Getting ready for 2.11-rc0
      Git 2.10.2
      Git 2.11-rc0
      A bit of updates post -rc0
      Revert "t6026-merge-attr: ensure that the merge driver was called"
      Revert "t6026-merge-attr: don't fail if sleep exits early"
      t0021: remove debugging cruft
      Git 2.11.0-rc1
      Git 2.11-rc2
      for-each-ref: do not segv with %(HEAD) on an unborn branch
      mailinfo: read local configuration
      archive: read local configuration
      Git 2.11-rc3

Karsten Blees (2):
      git-gui: unicode file name support on windows
      git-gui: handle the encoding of Git's output correctly

Kevin Daudt (2):
      t5100-mailinfo: replace common path prefix with variable
      mailinfo: unescape quoted-pair in header fields

Kirill Smelkov (3):
      pack-objects: respect --local/--honor-pack-keep/--incremental when bitmap is in use
      pack-objects: use reachability bitmap index when generating non-stdout pack
      t/perf/run: copy config.mak.autogen & friends to build area

Lars Schneider (20):
      travis-ci: ask homebrew for its path instead of hardcoding it
      convert: quote filter names in error messages
      convert: modernize tests
      run-command: move check_pipe() from write_or_die to run_command
      run-command: add clean_on_exit_handler
      pkt-line: rename packet_write() to packet_write_fmt()
      pkt-line: extract set_packet_header()
      pkt-line: add packet_write_fmt_gently()
      pkt-line: add packet_flush_gently()
      pkt-line: add packet_write_gently()
      pkt-line: add functions to read/write flush terminated packet streams
      convert: make apply_filter() adhere to standard Git error handling
      convert: prepare filter.<driver>.process option
      convert: add filter.<driver>.process option
      contrib/long-running-filter: add long running filter example
      sha1_file: rename git_open_noatime() to git_open()
      sha1_file: open window into packfiles with O_CLOEXEC
      read-cache: make sure file handles are not inherited by child processes
      Makefile: set NO_OPENSSL on macOS by default
      travis-ci: disable GIT_TEST_HTTPD for macOS

Linus Torvalds (1):
      abbrev: auto size the default abbreviation

Mantas Mikulėnas (1):
      contrib: add credential helper for libsecret

Matthieu Moy (4):
      Documentation/config: default for color.* is color.ui
      parse_mailboxes: accept extra text after <...> address
      t9000-addresses: update expected results after fix
      Git.pm: add comment pointing to t9000

Michael Haggerty (36):
      xdl_change_compact(): fix compaction heuristic to adjust ixo
      xdl_change_compact(): only use heuristic if group can't be matched
      is_blank_line(): take a single xrecord_t as argument
      recs_match(): take two xrecord_t pointers as arguments
      xdl_change_compact(): introduce the concept of a change group
      resolve_gitlink_ref(): eliminate temporary variable
      refs: rename struct ref_cache to files_ref_store
      refs: create a base class "ref_store" for files_ref_store
      add_packed_ref(): add a files_ref_store argument
      get_packed_ref(): add a files_ref_store argument
      resolve_missing_loose_ref(): add a files_ref_store argument
      {lock,commit,rollback}_packed_refs(): add files_ref_store arguments
      refs: reorder definitions
      resolve_packed_ref(): rename function from resolve_missing_loose_ref()
      resolve_gitlink_packed_ref(): remove function
      read_raw_ref(): take a (struct ref_store *) argument
      resolve_ref_recursively(): new function
      resolve_gitlink_ref(): implement using resolve_ref_recursively()
      resolve_gitlink_ref(): avoid memory allocation in many cases
      resolve_gitlink_ref(): rename path parameter to submodule
      refs: make read_raw_ref() virtual
      refs: make verify_refname_available() virtual
      refs: make pack_refs() virtual
      refs: make create_symref() virtual
      refs: make peel_ref() virtual
      repack_without_refs(): add a files_ref_store argument
      lock_raw_ref(): add a files_ref_store argument
      commit_ref_update(): add a files_ref_store argument
      lock_ref_for_update(): add a files_ref_store argument
      lock_ref_sha1_basic(): add a files_ref_store argument
      split_symref_update(): add a files_ref_store argument
      files_ref_iterator_begin(): take a ref_store argument
      refs: add method iterator_begin
      diff: improve positioning of add/delete blocks in diffs
      parse-options: add parse_opt_unknown_cb()
      blame: honor the diff heuristic options and config

Michael J Gruber (1):
      gpg-interface: use more status letters

Mike Ralphson (1):
      vcs-svn/fast_export: fix timestamp fmt specifiers

Nguyễn Thái Ngọc Duy (40):
      remote-curl.c: convert fetch_git() to use argv_array
      transport-helper.c: refactor set_helper_option()
      upload-pack: move shallow deepen code out of receive_needs()
      upload-pack: move "shallow" sending code out of deepen()
      upload-pack: remove unused variable "backup"
      upload-pack: move "unshallow" sending code out of deepen()
      upload-pack: use skip_prefix() instead of starts_with()
      upload-pack: tighten number parsing at "deepen" lines
      upload-pack: make check_non_tip() clean things up on error
      upload-pack: move rev-list code out of check_non_tip()
      fetch-pack: use skip_prefix() instead of starts_with()
      fetch-pack: use a common function for verbose printing
      fetch-pack.c: mark strings for translating
      fetch-pack: use a separate flag for fetch in deepening mode
      shallow.c: implement a generic shallow boundary finder based on rev-list
      upload-pack: add deepen-since to cut shallow repos based on time
      fetch: define shallow boundary with --shallow-since
      clone: define shallow clone boundary based on time with --shallow-since
      t5500, t5539: tests for shallow depth since a specific date
      refs: add expand_ref()
      upload-pack: support define shallow boundary by excluding revisions
      fetch: define shallow boundary with --shallow-exclude
      clone: define shallow clone boundary with --shallow-exclude
      t5500, t5539: tests for shallow depth excluding a ref
      upload-pack: split check_unreachable() in two, prep for get_reachable_list()
      upload-pack: add get_reachable_list()
      fetch, upload-pack: --deepen=N extends shallow boundary by N commits
      checkout: add some spaces between code and comment
      checkout.txt: document a common case that ignores ambiguation rules
      checkout: fix ambiguity check in subdir
      init: correct re-initialization from a linked worktree
      init: call set_git_dir_init() from within init_db()
      init: kill set_git_dir_init()
      init: do not set unnecessary core.worktree
      init: kill git_link variable
      git-commit.txt: clarify --patch mode with pathspec
      diff-lib: allow ita entries treated as "not yet exist in index"
      diff: add --ita-[in]visible-in-index
      commit: fix empty commit creation when there's no changes but ita entries
      commit: don't be fooled by ita entries when creating initial commit

Olaf Hering (1):
      git-gui: sort entries in tclIndex

Orgad Shaneh (1):
      git-gui: Do not reset author details on amend

Pat Thoyts (7):
      Allow keyboard control to work in the staging widgets.
      Amend tab ordering and text widget border and highlighting.
      git-gui: fix detection of Cygwin
      git-gui (Windows): use git-gui.exe in `Create Desktop Shortcut`
      git-gui: maintain backwards compatibility for merge syntax
      git-gui: avoid persisting modified author identity
      git-gui: set version 0.21

Patrick Steinhardt (1):
      doc: fix location of 'info/' with $GIT_COMMON_DIR

Peter Krefting (1):
      l10n: sv.po: Update Swedish translation (2913t0f0u)

Petr Stodulka (1):
      http: control GSSAPI credential delegation

Philip Oakley (14):
      doc: use 'symmetric difference' consistently
      doc: revisions - name the left and right sides
      doc: show the actual left, right, and boundary marks
      doc: revisions: give headings for the two and three dot notations
      doc: revisions: extra clarification of <rev>^! notation effects
      doc: revisions: single vs multi-parent notation comparison
      doc: gitrevisions - use 'reachable' in page description
      doc: gitrevisions - clarify 'latter case' is revision walk
      doc: revisions - define `reachable`
      doc: revisions - clarify reachability examples
      doc: revisions: show revision expansion in examples
      doc: revisions: sort examples and fix alignment of the unchanged
      doc: fix merge-base ASCII art tab spacing
      doc: fix the 'revert a faulty merge' ASCII art tab spacing

Pranit Bauva (2):
      rev-list-options: clarify the usage of --reverse
      t0040: convert all possible tests to use `test-parse-options --expect`

Ralf Thielow (6):
      help: introduce option --exclude-guides
      help: make option --help open man pages only for Git commands
      rebase -i: improve advice on bad instruction lines
      l10n: de.po: fix translation of autostash
      l10n: de.po: translate 260 new messages
      fetch-pack.c: correct command at the beginning of an error message

Ray Chen (1):
      l10n: zh_CN: review for git v2.10.0 l10n

René Scharfe (36):
      compat: move strdup(3) replacement to its own file
      introduce hex2chr() for converting two hexadecimal digits to a character
      strbuf: use valid pointer in strbuf_remove()
      checkout: constify parameters of checkout_stage() and checkout_merged()
      unpack-trees: pass checkout state explicitly to check_updates()
      sha1_file: use llist_mergesort() for sorting packs
      xdiff: fix merging of hunks with -W context and -u context
      contrib/coccinelle: fix semantic patch for oid_to_hex_r()
      add coccicheck make target
      use strbuf_addstr() for adding constant strings to a strbuf, part 2
      pretty: let %C(auto) reset all attributes
      introduce CHECKOUT_INIT
      add COPY_ARRAY
      use COPY_ARRAY
      git-gui: stop using deprecated merge syntax
      gitignore: ignore output files of coccicheck make target
      use strbuf_addstr() instead of strbuf_addf() with "%s", part 2
      use strbuf_add_unique_abbrev() for adding short hashes, part 2
      add QSORT
      use QSORT
      remove unnecessary check before QSORT
      coccicheck: use --all-includes by default
      use QSORT, part 2
      pretty: avoid adding reset for %C(auto) if output is empty
      coccicheck: make transformation for strbuf_addf(sb, "...") more precise
      show-branch: use QSORT
      remove unnecessary NULL check before free(3)
      use strbuf_add_unique_abbrev() for adding short hashes, part 3
      pretty: fix document link for color specification
      avoid pointer arithmetic involving NULL in FLEX_ALLOC_MEM
      inline xalloc_flex() into FLEXPTR_ALLOC_MEM
      hex: make wraparound of the index into ring-buffer explicit
      valgrind: support test helpers
      commit: simplify building parents list
      sha1_name: make wraparound of the index into ring-buffer explicit
      cocci: avoid self-references in object_id transformations

Ronnie Sahlberg (2):
      refs: add a backend method structure
      refs: add a transaction_commit() method

SZEDER Gábor (1):
      ref-filter: strip format option after a field name only once while parsing

Satoshi Yasushima (6):
      git-gui: consistently use the same word for "remote" in Japanese
      git-gui: consistently use the same word for "blame" in Japanese
      git-gui: apply po template to Japanese translation
      git-gui: add Japanese language code
      git-gui: update Japanese translation
      git-gui: update Japanese information

Stefan Beller (16):
      t7408: modernize style
      t7408: merge short tests, factor out testing method
      submodule--helper module-clone: allow multiple references
      submodule--helper update-clone: allow multiple references
      clone: factor out checking for an alternate path
      clone: clarify option_reference as required
      clone: implement optional references
      clone: recursive and reference option triggers submodule alternates
      xdiff: remove unneeded declarations
      transport: report missing submodule pushes consistently on stderr
      diff.c: use diff_options directly
      diff: omit found pointer from emit_callback
      diff: remove dead code
      submodule: ignore trailing slash on superproject URL
      submodule: ignore trailing slash in relative url
      documentation: improve submodule.<name>.{url, path} description

Stefan Christ (1):
      Documentation/fmt-merge-msg: fix markup in example

Thomas Gummerer (4):
      add: document the chmod option
      update-index: add test for chmod flags
      read-cache: introduce chmod_index_entry
      add: modify already added files when --chmod is given

Tobias Klauser (1):
      diffcore-delta: remove unused parameter to diffcore_count_changes()

Trần Ngọc Quân (1):
      l10n: vi.po: Updated translation to v2.11.0 (2913t)

Vasco Almeida (33):
      l10n: pt_PT: update Portuguese translation
      l10n: pt_PT: update Portuguese repository info
      i18n: blame: mark error messages for translation
      i18n: branch: mark option description for translation
      i18n: config: mark error message for translation
      i18n: merge-recursive: mark error messages for translation
      i18n: merge-recursive: mark verbose message for translation
      i18n: notes: mark error messages for translation
      notes: spell first word of error messages in lowercase
      i18n: receive-pack: mark messages for translation
      i18n: show-branch: mark error messages for translation
      i18n: show-branch: mark plural strings for translation
      i18n: update-index: mark warnings for translation
      i18n: commit: mark message for translation
      i18n: connect: mark die messages for translation
      i18n: ident: mark hint for translation
      i18n: notes-merge: mark die messages for translation
      i18n: stash: mark messages for translation
      git-gui i18n: mark strings for translation
      git-gui: l10n: add Portuguese translation
      git-gui i18n: internationalize use of colon punctuation
      git-gui i18n: mark "usage:" strings for translation
      git-gui: fix incorrect use of Tcl append command
      git-gui i18n: mark string in lib/error.tcl for translation
      t1512: become resilient to GETTEXT_POISON build
      i18n: apply: mark plural string for translation
      i18n: apply: mark info messages for translation
      i18n: apply: mark error messages for translation
      i18n: apply: mark error message for translation
      i18n: convert mark error messages for translation
      i18n: credential-cache--daemon: mark advice for translation
      i18n: diff: mark warnings for translation
      l10n: pt_PT: update Portuguese translation

Vegard Nossum (1):
      revision: new rev^-n shorthand for rev^n..rev

Younes Khoudli (1):
      doc: remove reference to the traditional layout in git-tag.txt

brian m. carlson (20):
      cache: convert struct cache_entry to use struct object_id
      builtin/apply: convert static functions to struct object_id
      builtin/blame: convert struct origin to use struct object_id
      builtin/log: convert some static functions to use struct object_id
      builtin/cat-file: convert struct expand_data to use struct object_id
      builtin/cat-file: convert some static functions to struct object_id
      builtin: convert textconv_object to use struct object_id
      streaming: make stream_blob_to_fd take struct object_id
      builtin/checkout: convert some static functions to struct object_id
      notes-merge: convert struct notes_merge_pair to struct object_id
      Convert read_mmblob to take struct object_id.
      builtin/blame: convert file to use struct object_id
      builtin/rm: convert to use struct object_id
      notes: convert init_notes to use struct object_id
      builtin/update-index: convert file to struct object_id
      sha1_name: convert get_sha1_mb to struct object_id
      refs: add an update_ref_oid function.
      builtin/am: convert to struct object_id
      builtin/commit-tree: convert to struct object_id
      builtin/reset: convert to use struct object_id

jfbu (1):
      l10n: fr.po fix grammar mistakes

yaras (1):
      git-gui: fix initial git gui message encoding

Ævar Arnfjörð Bjarmason (3):
      gitweb: fix a typo in a comment
      gitweb: link to 7-char+ SHA-1s, not only 8-char+
      gitweb: link to "git describe"'d commits in log messages

Дилян Палаузов (1):
      ./configure.ac: detect SSL in libcurl using curl-config


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.11.0-rc2
@ 2016-11-17 22:24  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2016-11-17 22:24 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

A release candidate Git v2.11.0-rc2 is now available for testing
at the usual places.  It is comprised of 646 non-merge commits
since v2.10.0, contributed by 68 people, 14 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.11.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.10.0 are as follows.
Welcome to the Git development community!

  Aaron M Watson, Brandon Williams, Brian Henderson, Emily Xie,
  Gavin Lambert, Ian Kelling, Jeff Hostetler, Mantas Mikulėnas,
  Petr Stodulka, Satoshi Yasushima, Stefan Christ, Vegard Nossum,
  yaras, and Younes Khoudli.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alexander Shopov, Alex Henrie,
  Alex Riesen, Anders Kaseorg, Andreas Schwab, Beat Bolli, Ben
  North, brian m. carlson, Chris Packham, Christian Couder, David
  Aguilar, David Turner, Dennis Kaarsemaker, Dimitriy Ryazantcev,
  Elia Pinto, Eric Wong, Jacob Keller, Jakub Narębski, Jean-Noël
  AVILA, Jeff King, Jiang Xin, Johannes Schindelin, Johannes Sixt,
  Jonathan Nieder, Jonathan Tan, Josh Triplett, Junio C Hamano,
  Karsten Blees, Kevin Daudt, Kirill Smelkov, Lars Schneider,
  Linus Torvalds, Matthieu Moy, Michael Haggerty, Michael J Gruber,
  Mike Ralphson, Nguyễn Thái Ngọc Duy, Olaf Hering, Orgad
  Shaneh, Patrick Steinhardt, Pat Thoyts, Philip Oakley, Pranit
  Bauva, Ralf Thielow, Ray Chen, René Scharfe, Ronnie Sahlberg,
  Stefan Beller, SZEDER Gábor, Thomas Gummerer, Tobias Klauser,
  Vasco Almeida, and Дилян Палаузов.

----------------------------------------------------------------

Git 2.11 Release Notes (draft)
==============================

Backward compatibility notes.

 * An empty string used as a pathspec element has always meant
   'everything matches', but it is too easy to write a script that
   finds a path to remove in $path and run 'git rm "$paht"' by
   mistake (when the user meant to give "$path"), which ends up
   removing everything.  This release starts warning about the
   use of an empty string that is used for 'everything matches' and
   asks users to use a more explicit '.' for that instead.

   The hope is that existing users will not mind this change, and
   eventually the warning can be turned into a hard error, upgrading
   the deprecation into removal of this (mis)feature.

 * The historical argument order "git merge <msg> HEAD <commit>..."
   has been deprecated for quite some time, and will be removed in the
   next release (not this one).

 * The default abbreviation length, which has historically been 7, now
   scales as the repository grows, using the approximate number of
   objects in the repository and a bit of math around the birthday
   paradox.  The logic suggests to use 12 hexdigits for the Linux
   kernel, and 9 to 10 for Git itself.


Updates since v2.10
-------------------

UI, Workflows & Features

 * Comes with new version of git-gui, now at its 0.21.0 tag.

 * "git format-patch --cover-letter HEAD^" to format a single patch
   with a separate cover letter now numbers the output as [PATCH 0/1]
   and [PATCH 1/1] by default.

 * An incoming "git push" that attempts to push too many bytes can now
   be rejected by setting a new configuration variable at the receiving
   end.

 * "git nosuchcommand --help" said "No manual entry for gitnosuchcommand",
   which was not intuitive, given that "git nosuchcommand" said "git:
   'nosuchcommand' is not a git command".

 * "git clone --recurse-submodules --reference $path $URL" is a way to
   reduce network transfer cost by borrowing objects in an existing
   $path repository when cloning the superproject from $URL; it
   learned to also peek into $path for presence of corresponding
   repositories of submodules and borrow objects from there when able.

 * The "git diff --submodule={short,log}" mechanism has been enhanced
   to allow "--submodule=diff" to show the patch between the submodule
   commits bound to the superproject.

 * Even though "git hash-objects", which is a tool to take an
   on-filesystem data stream and put it into the Git object store,
   allowed to perform the "outside-world-to-Git" conversions (e.g.
   end-of-line conversions and application of the clean-filter), and
   it had the feature on by default from very early days, its reverse
   operation "git cat-file", which takes an object from the Git object
   store and externalize for the consumption by the outside world,
   lacked an equivalent mechanism to run the "Git-to-outside-world"
   conversion.  The command learned the "--filters" option to do so.

 * Output from "git diff" can be made easier to read by selecting
   which lines are common and which lines are added/deleted
   intelligently when the lines before and after the changed section
   are the same.  A command line option is added to help with the
   experiment to find a good heuristics.

 * In some projects, it is common to use "[RFC PATCH]" as the subject
   prefix for a patch meant for discussion rather than application.  A
   new option "--rfc" is a short-hand for "--subject-prefix=RFC PATCH"
   to help the participants of such projects.

 * "git add --chmod=+x <pathspec>" added recently only toggled the
   executable bit for paths that are either new or modified. This has
   been corrected to flip the executable bit for all paths that match
   the given pathspec.

 * When "git format-patch --stdout" output is placed as an in-body
   header and it uses the RFC2822 header folding, "git am" failed to
   put the header line back into a single logical line.  The
   underlying "git mailinfo" was taught to handle this properly.

 * "gitweb" can spawn "highlight" to show blob contents with
   (programming) language-specific syntax highlighting, but only
   when the language is known.  "highlight" can however be told
   to make the guess itself by giving it "--force" option, which
   has been enabled.

 * "git gui" l10n to Portuguese.

 * When given an abbreviated object name that is not (or more
   realistically, "no longer") unique, we gave a fatal error
   "ambiguous argument".  This error is now accompanied by a hint that
   lists the objects beginning with the given prefix.  During the
   course of development of this new feature, numerous minor bugs were
   uncovered and corrected, the most notable one of which is that we
   gave "short SHA1 xxxx is ambiguous." twice without good reason.

 * "git log rev^..rev" is an often-used revision range specification
   to show what was done on a side branch merged at rev.  This has
   gained a short-hand "rev^-1".  In general "rev^-$n" is the same as
   "^rev^$n rev", i.e. what has happened on other branches while the
   history leading to nth parent was looking the other way.

 * In recent versions of cURL, GSSAPI credential delegation is
   disabled by default due to CVE-2011-2192; introduce a configuration
   to selectively allow enabling this.
   (merge 26a7b23429 ps/http-gssapi-cred-delegation later to maint).

 * "git mergetool" learned to honor "-O<orderfile>" to control the
   order of paths to present to the end user.

 * "git diff/log --ws-error-highlight=<kind>" lacked the corresponding
   configuration variable to set it by default.

 * "git ls-files" learned "--recurse-submodules" option that can be
   used to get a listing of tracked files across submodules (i.e. this
   only works with "--cached" option, not for listing untracked or
   ignored files).  This would be a useful tool to sit on the upstream
   side of a pipe that is read with xargs to work on all working tree
   files from the top-level superproject.

 * A new credential helper that talks via "libsecret" with
   implementations of XDG Secret Service API has been added to
   contrib/credential/.

 * The GPG verification status shown in "%G?" pretty format specifier
   was not rich enough to differentiate a signature made by an expired
   key, a signature made by a revoked key, etc.  New output letters
   have been assigned to express them.

 * In addition to purely abbreviated commit object names, "gitweb"
   learned to turn "git describe" output (e.g. v2.9.3-599-g2376d31787)
   into clickable links in its output.

 * When new paths were added by "git add -N" to the index, it was
   enough to circumvent the check by "git commit" to refrain from
   making an empty commit without "--allow-empty".  The same logic
   prevented "git status" to show such a path as "new file" in the
   "Changes not staged for commit" section.

 * The smudge/clean filter API expect an external process is spawned
   to filter the contents for each path that has a filter defined.  A
   new type of "process" filter API has been added to allow the first
   request to run the filter for a path to spawn a single process, and
   all filtering need is served by this single process for multiple
   paths, reducing the process creation overhead.

 * The user always has to say "stash@{$N}" when naming a single
   element in the default location of the stash, i.e. reflogs in
   refs/stash.  The "git stash" command learned to accept "git stash
   apply 4" as a short-hand for "git stash apply stash@{4}".


Performance, Internal Implementation, Development Support etc.

 * The delta-base-cache mechanism has been a key to the performance in
   a repository with a tightly packed packfile, but it did not scale
   well even with a larger value of core.deltaBaseCacheLimit.

 * Enhance "git status --porcelain" output by collecting more data on
   the state of the index and the working tree files, which may
   further be used to teach git-prompt (in contrib/) to make fewer
   calls to git.

 * Extract a small helper out of the function that reads the authors
   script file "git am" internally uses.
   (merge a77598e jc/am-read-author-file later to maint).

 * Lifts calls to exit(2) and die() higher in the callchain in
   sequencer.c files so that more helper functions in it can be used
   by callers that want to handle error conditions themselves.

 * "git am" has been taught to make an internal call to "git apply"'s
   innards without spawning the latter as a separate process.

 * The ref-store abstraction was introduced to the refs API so that we
   can plug in different backends to store references.

 * The "unsigned char sha1[20]" to "struct object_id" conversion
   continues.  Notable changes in this round includes that ce->sha1,
   i.e. the object name recorded in the cache_entry, turns into an
   object_id.

 * JGit can show a fake ref "capabilities^{}" to "git fetch" when it
   does not advertise any refs, but "git fetch" was not prepared to
   see such an advertisement.  When the other side disconnects without
   giving any ref advertisement, we used to say "there may not be a
   repository at that URL", but we may have seen other advertisement
   like "shallow" and ".have" in which case we definitely know that a
   repository is there.  The code to detect this case has also been
   updated.

 * Some codepaths in "git pack-objects" were not ready to use an
   existing pack bitmap; now they are and as the result they have
   become faster.

 * The codepath in "git fsck" to detect malformed tree objects has
   been updated not to die but keep going after detecting them.

 * We call "qsort(array, nelem, sizeof(array[0]), fn)", and most of
   the time third parameter is redundant.  A new QSORT() macro lets us
   omit it.

 * "git pack-objects" in a repository with many packfiles used to
   spend a lot of time looking for/at objects in them; the accesses to
   the packfiles are now optimized by checking the most-recently-used
   packfile first.
   (merge c9af708b1a jk/pack-objects-optim-mru later to maint).

 * Codepaths involved in interacting alternate object store have
   been cleaned up.

 * In order for the receiving end of "git push" to inspect the
   received history and decide to reject the push, the objects sent
   from the sending end need to be made available to the hook and
   the mechanism for the connectivity check, and this was done
   traditionally by storing the objects in the receiving repository
   and letting "git gc" to expire it.  Instead, store the newly
   received objects in a temporary area, and make them available by
   reusing the alternate object store mechanism to them only while we
   decide if we accept the check, and once we decide, either migrate
   them to the repository or purge them immediately.

 * The require_clean_work_tree() helper was recreated in C when "git
   pull" was rewritten from shell; the helper is now made available to
   other callers in preparation for upcoming "rebase -i" work.

 * "git upload-pack" had its code cleaned-up and performance improved
   by reducing use of timestamp-ordered commit-list, which was
   replaced with a priority queue.

 * "git diff --no-index" codepath has been updated not to try to peek
   into .git/ directory that happens to be under the current
   directory, when we know we are operating outside any repository.

 * Update of the sequencer codebase to make it reusable to reimplement
   "rebase -i" continues.

 * Git generally does not explicitly close file descriptors that were
   open in the parent process when spawning a child process, but most
   of the time the child does not want to access them. As Windows does
   not allow removing or renaming a file that has a file descriptor
   open, a slow-to-exit child can even break the parent process by
   holding onto them.  Use O_CLOEXEC flag to open files in various
   codepaths.

 * Update "interpret-trailers" machinery and teaches it that people in
   real world write all sorts of crufts in the "trailer" that was
   originally designed to have the neat-o "Mail-Header: like thing"
   and nothing else.


Also contains various documentation updates and code clean-ups.


Fixes since v2.10
-----------------

Unless otherwise noted, all the fixes since v2.9 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * Clarify various ways to specify the "revision ranges" in the
   documentation.

 * "diff-highlight" script (in contrib/) learned to work better with
   "git log -p --graph" output.

 * The test framework left the number of tests and success/failure
   count in the t/test-results directory, keyed by the name of the
   test script plus the process ID.  The latter however turned out not
   to serve any useful purpose.  The process ID part of the filename
   has been removed.

 * Having a submodule whose ".git" repository is somehow corrupt
   caused a few commands that recurse into submodules loop forever.

 * "git symbolic-ref -d HEAD" happily removes the symbolic ref, but
   the resulting repository becomes an invalid one.  Teach the command
   to forbid removal of HEAD.

 * A test spawned a short-lived background process, which sometimes
   prevented the test directory from getting removed at the end of the
   script on some platforms.

 * Update a few tests that used to use GIT_CURL_VERBOSE to use the
   newer GIT_TRACE_CURL.

 * "git pack-objects --include-tag" was taught that when we know that
   we are sending an object C, we want a tag B that directly points at
   C but also a tag A that points at the tag B.  We used to miss the
   intermediate tag B in some cases.

 * Update Japanese translation for "git-gui".

 * "git fetch http::/site/path" did not die correctly and segfaulted
   instead.

 * "git commit-tree" stopped reading commit.gpgsign configuration
   variable that was meant for Porcelain "git commit" in Git 2.9; we
   forgot to update "git gui" to look at the configuration to match
   this change.

 * "git add --chmod=+x" added recently lacked documentation, which has
   been corrected.

 * "git log --cherry-pick" used to include merge commits as candidates
   to be matched up with other commits, resulting a lot of wasted time.
   The patch-id generation logic has been updated to ignore merges to
   avoid the wastage.

 * The http transport (with curl-multi option, which is the default
   these days) failed to remove curl-easy handle from a curlm session,
   which led to unnecessary API failures.

 * There were numerous corner cases in which the configuration files
   are read and used or not read at all depending on the directory a
   Git command was run, leading to inconsistent behaviour.  The code
   to set-up repository access at the beginning of a Git process has
   been updated to fix them.
   (merge 4d0efa1 jk/setup-sequence-update later to maint).

 * "git diff -W" output needs to extend the context backward to
   include the header line of the current function and also forward to
   include the body of the entire current function up to the header
   line of the next one.  This process may have to merge two adjacent
   hunks, but the code forgot to do so in some cases.

 * Performance tests done via "t/perf" did not use the same set of
   build configuration if the user relied on autoconf generated
   configuration.

 * "git format-patch --base=..." feature that was recently added
   showed the base commit information after "-- " e-mail signature
   line, which turned out to be inconvenient.  The base information
   has been moved above the signature line.

 * More i18n.

 * Even when "git pull --rebase=preserve" (and the underlying "git
   rebase --preserve") can complete without creating any new commit
   (i.e. fast-forwards), it still insisted on having a usable ident
   information (read: user.email is set correctly), which was less
   than nice.  As the underlying commands used inside "git rebase"
   would fail with a more meaningful error message and advice text
   when the bogus ident matters, this extra check was removed.

 * "git gc --aggressive" used to limit the delta-chain length to 250,
   which is way too deep for gaining additional space savings and is
   detrimental for runtime performance.  The limit has been reduced to
   50.

 * Documentation for individual configuration variables to control use
   of color (like `color.grep`) said that their default value is
   'false', instead of saying their default is taken from `color.ui`.
   When we updated the default value for color.ui from 'false' to
   'auto' quite a while ago, all of them broke.  This has been
   corrected.

 * The pretty-format specifier "%C(auto)" used by the "log" family of
   commands to enable coloring of the output is taught to also issue a
   color-reset sequence to the output.

 * A shell script example in check-ref-format documentation has been
   fixed.

 * "git checkout <word>" does not follow the usual disambiguation
   rules when the <word> can be both a rev and a path, to allow
   checking out a branch 'foo' in a project that happens to have a
   file 'foo' in the working tree without having to disambiguate.
   This was poorly documented and the check was incorrect when the
   command was run from a subdirectory.

 * Some codepaths in "git diff" used regexec(3) on a buffer that was
   mmap(2)ed, which may not have a terminating NUL, leading to a read
   beyond the end of the mapped region.  This was fixed by introducing
   a regexec_buf() helper that takes a <ptr,len> pair with REG_STARTEND
   extension.

 * The procedure to build Git on Mac OS X for Travis CI hardcoded the
   internal directory structure we assumed HomeBrew uses, which was a
   no-no.  The procedure has been updated to ask HomeBrew things we
   need to know to fix this.

 * When "git rebase -i" is given a broken instruction, it told the
   user to fix it with "--edit-todo", but didn't say what the step
   after that was (i.e. "--continue").

 * Documentation around tools to import from CVS was fairly outdated.

 * "git clone --recurse-submodules" lost the progress eye-candy in
   recent update, which has been corrected.

 * A low-level function verify_packfile() was meant to show errors
   that were detected without dying itself, but under some conditions
   it didn't and died instead, which has been fixed.

 * When "git fetch" tries to find where the history of the repository
   it runs in has diverged from what the other side has, it has a
   mechanism to avoid digging too deep into irrelevant side branches.
   This however did not work well over the "smart-http" transport due
   to a design bug, which has been fixed.

 * In the codepath that comes up with the hostname to be used in an
   e-mail when the user didn't tell us, we looked at ai_canonname
   field in struct addrinfo without making sure it is not NULL first.

 * "git worktree", even though it used the default_abbrev setting that
   ought to be affected by core.abbrev configuration variable, ignored
   the variable setting.  The command has been taught to read the
   default set of configuration variables to correct this.

 * "git init" tried to record core.worktree in the repository's
   'config' file when GIT_WORK_TREE environment variable was set and
   it was different from where GIT_DIR appears as ".git" at its top,
   but the logic was faulty when .git is a "gitdir:" file that points
   at the real place, causing trouble in working trees that are
   managed by "git worktree".  This has been corrected.

 * Codepaths that read from an on-disk loose object were too loose in
   validating what they are reading is a proper object file and
   sometimes read past the data they read from the disk, which has
   been corrected.  H/t to Gustavo Grieco for reporting.

 * The original command line syntax for "git merge", which was "git
   merge <msg> HEAD <parent>...", has been deprecated for quite some
   time, and "git gui" was the last in-tree user of the syntax.  This
   is finally fixed, so that we can move forward with the deprecation.

 * An author name, that spelled a backslash-quoted double quote in the
   human readable part "My \"double quoted\" name", was not unquoted
   correctly while applying a patch from a piece of e-mail.

 * Doc update to clarify what "log -3 --reverse" does.

 * Almost everybody uses DEFAULT_ABBREV to refer to the default
   setting for the abbreviation, but "git blame" peeked into
   underlying variable bypassing the macro for no good reason.

 * The "graph" API used in "git log --graph" miscounted the number of
   output columns consumed so far when drawing a padding line, which
   has been fixed; this did not affect any existing code as nobody
   tried to write anything after the padding on such a line, though.

 * The code that parses the format parameter of for-each-ref command
   has seen a micro-optimization.

 * When we started cURL to talk to imap server when a new enough
   version of cURL library is available, we forgot to explicitly add
   imap(s):// before the destination.  To some folks, that didn't work
   and the library tried to make HTTP(s) requests instead.

 * The ./configure script generated from configure.ac was taught how
   to detect support of SSL by libcurl better.

 * The command-line completion script (in contrib/) learned to
   complete "git cmd ^mas<HT>" to complete the negative end of
   reference to "git cmd ^master".
   (merge 49416ad22a cp/completion-negative-refs later to maint).

 * The existing "git fetch --depth=<n>" option was hard to use
   correctly when making the history of an existing shallow clone
   deeper.  A new option, "--deepen=<n>", has been added to make this
   easier to use.  "git clone" also learned "--shallow-since=<date>"
   and "--shallow-exclude=<tag>" options to make it easier to specify
   "I am interested only in the recent N months worth of history" and
   "Give me only the history since that version".
   (merge cccf74e2da nd/shallow-deepen later to maint).

 * It is a common mistake to say "git blame --reverse OLD path",
   expecting that the command line is dwimmed as if asking how lines
   in path in an old revision OLD have survived up to the current
   commit.
   (merge e1d09701a4 jc/blame-reverse later to maint).

 * http.emptyauth configuration is a way to allow an empty username to
   pass when attempting to authenticate using mechanisms like
   Kerberos.  We took an unspecified (NULL) username and sent ":"
   (i.e. no username, no password) to CURLOPT_USERPWD, but did not do
   the same when the username is explicitly set to an empty string.

 * "git clone" of a local repository can be done at the filesystem
   level, but the codepath did not check errors while copying and
   adjusting the file that lists alternate object stores.

 * Documentation for "git commit" was updated to clarify that "commit
   -p <paths>" adds to the current contents of the index to come up
   with what to commit.

 * A stray symbolic link in $GIT_DIR/refs/ directory could make name
   resolution loop forever, which has been corrected.

 * The "submodule.<name>.path" stored in .gitmodules is never copied
   to .git/config and such a key in .git/config has no meaning, but
   the documentation described it and submodule.<name>.url next to
   each other as if both belong to .git/config.  This has been fixed.

 * In a worktree connected to a repository elsewhere, created via "git
   worktree", "git checkout" attempts to protect users from confusion
   by refusing to check out a branch that is already checked out in
   another worktree.  However, this also prevented checking out a
   branch, which is designated as the primary branch of a bare
   reopsitory, in a worktree that is connected to the bare
   repository.  The check has been corrected to allow it.

 * "git rebase" immediately after "git clone" failed to find the fork
   point from the upstream.

 * When fetching from a remote that has many tags that are irrelevant
   to branches we are following, we used to waste way too many cycles
   when checking if the object pointed at by a tag (that we are not
   going to fetch!) exists in our repository too carefully.

 * Protect our code from over-eager compilers.

 * Recent git allows submodule.<name>.branch to use a special token
   "." instead of the branch name; the documentation has been updated
   to describe it.

 * A hot-fix for a test added by a recent topic that went to both
   'master' and 'maint' already.

 * "git send-email" attempts to pick up valid e-mails from the
   trailers, but people in real world write non-addresses there, like
   "Cc: Stable <add@re.ss> # 4.8+", which broke the output depending
   on the availability and vintage of Mail::Address perl module.
   (merge dcfafc5214 mm/send-email-cc-cruft-after-address later to maint).

 * The Travis CI configuration we ship ran the tests with --verbose
   option but this risks non-TAP output that happens to be "ok" to be
   misinterpreted as TAP signalling a test that passed.  This resulted
   in unnecessary failure.  This has been corrected by introducing a
   new mode to run our tests in the test harness to send the verbose
   output separately to the log file.

 * Some AsciiDoc formatter mishandles a displayed illustration with
   tabs in it.  Adjust a few of them in merge-base documentation to
   work around them.

 * A minor regression fix for "git submodule" that was introduced
   when more helper functions were reimplemented in C.
   (merge 77b63ac31e sb/submodule-ignore-trailing-slash later to maint).

 * The code that we have used for the past 10+ years to cycle
   4-element ring buffers turns out to be not quite portable in
   theoretical world.
   (merge bb84735c80 rs/ring-buffer-wraparound later to maint).

 * "git daemon" used fixed-length buffers to turn URL to the
   repository the client asked for into the server side directory
   path, using snprintf() to avoid overflowing these buffers, but
   allowed possibly truncated paths to the directory.  This has been
   tightened to reject such a request that causes overlong path to be
   required to serve.
   (merge 6bdb0083be jk/daemon-path-ok-check-truncation later to maint).

 * Recent update to git-sh-setup (a library of shell functions that
   are used by our in-tree scripted Porcelain commands) included
   another shell library git-sh-i18n without specifying where it is,
   relying on the $PATH.  This has been fixed to be more explicit by
   prefixing $(git --exec-path) output in front.
   (merge 1073094f30 ak/sh-setup-dot-source-i18n-fix later to maint).

 * Fix for a racy false-positive test failure.
   (merge fdf4f6c79b as/merge-attr-sleep later to maint).

 * Portability update and workaround for builds on recent Mac OS X.
   (merge a296bc0132 ls/macos-update later to maint).

 * Other minor doc, test and build updates and code cleanups.
   (merge 5c238e29a8 jk/common-main later to maint).
   (merge 5a5749e45b ak/pre-receive-hook-template-modefix later to maint).
   (merge 6d834ac8f1 jk/rebase-config-insn-fmt-docfix later to maint).
   (merge de9f7fa3b0 rs/commit-pptr-simplify later to maint).
   (merge 4259d693fc sc/fmt-merge-msg-doc-markup-fix later to maint).
   (merge 28fab7b23d nd/test-helpers later to maint).
   (merge c2bb0c1d1e rs/cocci later to maint).
   (merge 3285b7badb ps/common-info-doc later to maint).
   (merge 2b090822e8 nd/worktree-lock later to maint).
   (merge 4bd488ea7c jk/create-branch-remove-unused-param later to maint).
   (merge 974e0044d6 tk/diffcore-delta-remove-unused later to maint).

----------------------------------------------------------------

Changes since v2.10.0 are as follows:

Aaron M Watson (1):
      stash: allow stashes to be referenced by index only

Alex Henrie (5):
      am: put spaces around pipe in usage string
      cat-file: put spaces around pipes in usage string
      git-rebase--interactive: fix English grammar
      git-merge-octopus: do not capitalize "octopus"
      unpack-trees: do not capitalize "working"

Alex Riesen (2):
      git-gui: support for $FILENAMES in tool definitions
      git-gui: ensure the file in the diff pane is in the list of selected files

Alexander Shopov (2):
      git-gui i18n: Updated Bulgarian translation (565,0f,0u)
      git-gui: Mark 'All' in remote.tcl for translation

Anders Kaseorg (3):
      imap-send: Tell cURL to use imap:// or imaps://
      pre-receive.sample: mark it executable
      git-sh-setup: be explicit where to dot-source git-sh-i18n from.

Andreas Schwab (2):
      t6026-merge-attr: don't fail if sleep exits early
      t6026-merge-attr: ensure that the merge driver was called

Beat Bolli (1):
      SubmittingPatches: use gitk's "Copy commit summary" format

Ben North (1):
      git-worktree.txt: fix typo "to"/"two", and add comma

Brandon Williams (6):
      pathspec: remove unnecessary function prototypes
      git: make super-prefix option
      ls-files: optionally recurse into submodules
      ls-files: pass through safe options for --recurse-submodules
      ls-files: add pathspec matching for submodules
      submodules doc: update documentation for "." used for submodule branches

Brian Henderson (3):
      diff-highlight: add some tests
      diff-highlight: add failing test for handling --graph output
      diff-highlight: add support for --graph output

Chris Packham (1):
      completion: support excluding refs

Christian Couder (43):
      apply: make some names more specific
      apply: move 'struct apply_state' to apply.h
      builtin/apply: make apply_patch() return -1 or -128 instead of die()ing
      builtin/apply: read_patch_file() return -1 instead of die()ing
      builtin/apply: make find_header() return -128 instead of die()ing
      builtin/apply: make parse_chunk() return a negative integer on error
      builtin/apply: make parse_single_patch() return -1 on error
      builtin/apply: make parse_whitespace_option() return -1 instead of die()ing
      builtin/apply: make parse_ignorewhitespace_option() return -1 instead of die()ing
      builtin/apply: move init_apply_state() to apply.c
      apply: make init_apply_state() return -1 instead of exit()ing
      builtin/apply: make check_apply_state() return -1 instead of die()ing
      builtin/apply: move check_apply_state() to apply.c
      builtin/apply: make apply_all_patches() return 128 or 1 on error
      builtin/apply: make parse_traditional_patch() return -1 on error
      builtin/apply: make gitdiff_*() return 1 at end of header
      builtin/apply: make gitdiff_*() return -1 on error
      builtin/apply: change die_on_unsafe_path() to check_unsafe_path()
      builtin/apply: make build_fake_ancestor() return -1 on error
      builtin/apply: make remove_file() return -1 on error
      builtin/apply: make add_conflicted_stages_file() return -1 on error
      builtin/apply: make add_index_file() return -1 on error
      builtin/apply: make create_file() return -1 on error
      builtin/apply: make write_out_one_result() return -1 on error
      builtin/apply: make write_out_results() return -1 on error
      unpack-objects: add --max-input-size=<size> option
      builtin/apply: make try_create_file() return -1 on error
      builtin/apply: make create_one_file() return -1 on error
      builtin/apply: rename option parsing functions
      apply: rename and move opt constants to apply.h
      apply: move libified code from builtin/apply.c to apply.{c,h}
      apply: make some parsing functions static again
      apply: use error_errno() where possible
      apply: make it possible to silently apply
      apply: don't print on stdout in verbosity_silent mode
      usage: add set_warn_routine()
      usage: add get_error_routine() and get_warn_routine()
      apply: change error_routine when silent
      apply: refactor `git apply` option parsing
      apply: pass apply state to build_fake_ancestor()
      apply: learn to use a different index file
      builtin/am: use apply API in run_apply()
      split-index: s/eith/with/ typo fix

David Aguilar (4):
      mergetool: add copyright
      mergetool: move main program flow into a main() function
      mergetool: honor diff.orderFile
      mergetool: honor -O<orderfile>

David Turner (11):
      rename_ref_available(): add docstring
      refs: add methods for reflog
      refs: add method for initial ref transaction commit
      refs: make delete_refs() virtual
      refs: add methods to init refs db
      refs: add method to rename refs
      refs: make lock generic
      refs: implement iteration over only per-worktree refs
      add David Turner's Two Sigma address
      fsck: handle bad trees like other errors
      http: http.emptyauth should allow empty (not just NULL) usernames

Dennis Kaarsemaker (1):
      worktree: allow the main brach of a bare repository to be checked out

Dimitriy Ryazantcev (2):
      l10n: ru.po: update Russian translation
      git-gui: Update Russian translation

Elia Pinto (6):
      t5541-http-push-smart.sh: use the GIT_TRACE_CURL environment var
      test-lib.sh: preserve GIT_TRACE_CURL from the environment
      t5550-http-fetch-dumb.sh: use the GIT_TRACE_CURL environment var
      t5551-http-fetch-smart.sh: use the GIT_TRACE_CURL environment var
      git-check-ref-format.txt: fixup documentation
      git-gui/po/glossary/txt-to-pot.sh: use the $( ... ) construct for command substitution

Emily Xie (1):
      pathspec: warn on empty strings as pathspec

Eric Wong (5):
      http: warn on curl_multi_add_handle failures
      http: consolidate #ifdefs for curl_multi_remove_handle
      http: always remove curl easy from curlm session on release
      git-svn: reduce scope of input record separator change
      git-svn: "git worktree" awareness

Gavin Lambert (1):
      git-svn: do not reuse caches memoized for a different architecture

Ian Kelling (2):
      gitweb: remove unused guess_file_syntax() parameter
      gitweb: use highlight's shebang detection

Jacob Keller (9):
      format-patch: show 0/1 and 1/1 for singleton patch with cover letter
      cache: add empty_tree_oid object and helper function
      graph: add support for --line-prefix on all graph-aware output
      diff: prepare for additional submodule formats
      allow do_submodule_path to work even if submodule isn't checked out
      submodule: convert show_submodule_summary to use struct object_id *
      submodule: refactor show_submodule_summary with helper function
      diff: teach diff to display submodule difference with an inline diff
      rev-list: use hdr_termination instead of a always using a newline

Jakub Narębski (1):
      configure.ac: improve description of NO_REGEX test

Jean-Noël AVILA (1):
      i18n: i18n: diff: mark die messages for translation

Jeff Hostetler (9):
      status: rename long-format print routines
      status: cleanup API to wt_status_print
      status: support --porcelain[=<version>]
      status: collect per-file data for --porcelain=v2
      status: print per-file porcelain v2 status data
      status: print branch info with --porcelain=v2 --branch
      git-status.txt: describe --porcelain=v2 format
      test-lib-functions.sh: add lf_to_nul helper
      status: unit tests for --porcelain=v2

Jeff King (116):
      rebase-interactive: drop early check for valid ident
      provide an initializer for "struct object_info"
      sha1_file: make packed_object_info public
      pack-objects: break delta cycles before delta-search phase
      pack-objects: use mru list when iterating over packs
      gc: default aggressive depth to 50
      cache_or_unpack_entry: drop keep_cache parameter
      clear_delta_base_cache_entry: use a more descriptive name
      release_delta_base_cache: reuse existing detach function
      delta_base_cache: use list.h for LRU
      delta_base_cache: drop special treatment of blobs
      delta_base_cache: use hashmap.h
      t/perf: add basic perf tests for delta base cache
      index-pack: add --max-input-size=<size> option
      receive-pack: allow a maximum input size to be specified
      test-lib: drop PID from test-results/*.count
      diff-highlight: ignore test cruft
      diff-highlight: add multi-byte tests
      diff-highlight: avoid highlighting combined diffs
      error_errno: use constant return similar to error()
      color_parse_mem: initialize "struct color" temporary
      t5305: move cleanup into test block
      t5305: drop "dry-run" of unpack-objects
      t5305: use "git -C"
      t5305: simplify packname handling
      pack-objects: walk tag chains for --include-tag
      remote-curl: handle URLs without protocol
      patch-ids: turn off rename detection
      add_delta_base_cache: use list_for_each_safe
      patch-ids: refuse to compute patch-id for merge commit
      hash-object: always try to set up the git repository
      patch-id: use RUN_SETUP_GENTLY
      diff: skip implicit no-index check when given --no-index
      diff: handle --no-index prefixes consistently
      diff: always try to set up the repository
      pager: remove obsolete comment
      pager: stop loading git_default_config()
      pager: make pager_program a file-local static
      pager: use callbacks instead of configset
      pager: handle early config
      t1302: use "git -C"
      test-config: setup git directory
      config: only read .git/config from configured repos
      init: expand comments explaining config trickery
      init: reset cached config when entering new repo
      t1007: factor out repeated setup
      verify_packfile: check pack validity before accessing data
      clone: pass --progress decision to recursive submodules
      docs/cvsimport: prefer cvs-fast-export to parsecvs
      docs/cvs-migration: update link to cvsps homepage
      docs/cvs-migration: mention cvsimport caveats
      ident: handle NULL ai_canonname
      get_sha1: detect buggy calls with multiple disambiguators
      get_sha1: avoid repeating ourselves via ONLY_TO_DIE
      get_sha1: propagate flags to child functions
      get_short_sha1: parse tags when looking for treeish
      get_short_sha1: refactor init of disambiguation code
      get_short_sha1: NUL-terminate hex prefix
      get_short_sha1: mark ambiguity error for translation
      sha1_array: let callbacks interrupt iteration
      for_each_abbrev: drop duplicate objects
      get_short_sha1: list ambiguous objects on error
      xdiff: rename "struct group" to "struct xdlgroup"
      get_short_sha1: make default disambiguation configurable
      tree-walk: be more specific about corrupt tree errors
      graph: fix extra spaces in graph_padding_line
      t5613: drop reachable_via function
      t5613: drop test_valid_repo function
      t5613: use test_must_fail
      t5613: whitespace/style cleanups
      t5613: do not chdir in main process
      find_unique_abbrev: move logic out of get_short_sha1()
      clone: detect errors in normalize_path_copy
      files_read_raw_ref: avoid infinite loop on broken symlinks
      files_read_raw_ref: prevent infinite retry loops in general
      t5613: clarify "too deep" recursion tests
      link_alt_odb_entry: handle normalize_path errors
      link_alt_odb_entry: refactor string handling
      alternates: provide helper for adding to alternates list
      alternates: provide helper for allocating alternate
      alternates: encapsulate alt->base munging
      alternates: use a separate scratch space
      fill_sha1_file: write "boring" characters
      alternates: store scratch buffer as strbuf
      fill_sha1_file: write into a strbuf
      count-objects: report alternates via verbose mode
      sha1_file: always allow relative paths to alternates
      alternates: use fspathcmp to detect duplicates
      check_connected: accept an env argument
      tmp-objdir: introduce API for temporary object directories
      receive-pack: quarantine objects until pre-receive accepts
      tmp-objdir: put quarantine information in the environment
      tmp-objdir: do not migrate files starting with '.'
      upload-pack: use priority queue in reachable() check
      merge-base: handle --fork-point without reflog
      fetch: use "quick" has_sha1_file for tag following
      test-lib: handle TEST_OUTPUT_DIRECTORY with spaces
      test-lib: add --verbose-log option
      travis: use --verbose-log test option
      test-lib: bail out when "-v" used under "prove"
      daemon: detect and reject too-long paths
      read info/{attributes,exclude} only when in repository
      test-*-cache-tree: setup git dir
      find_unique_abbrev: use 4-buffer ring
      diff_unique_abbrev: rename to diff_aligned_abbrev
      diff_aligned_abbrev: use "struct oid"
      diff: handle sha1 abbreviations outside of repository
      git-compat-util: move content inside ifdef/endif guards
      doc: fix missing "::" in config list
      t0021: use write_script to create rot13 shell script
      t0021: put $TEST_ROOT in $PATH
      t0021: use $PERL_PATH for rot13-filter.pl
      t0021: fix filehandle usage on older perl
      alternates: re-allow relative paths from environment
      sequencer: silence -Wtautological-constant-out-of-range-compare
      create_branch: drop unused "head" parameter

Jiang Xin (1):
      l10n: zh_CN: fixed some typos for git 2.10.0

Johannes Schindelin (60):
      cat-file: fix a grammo in the man page
      sequencer: lib'ify sequencer_pick_revisions()
      sequencer: do not die() in do_pick_commit()
      sequencer: lib'ify write_message()
      sequencer: lib'ify do_recursive_merge()
      sequencer: lib'ify do_pick_commit()
      sequencer: lib'ify walk_revs_populate_todo()
      sequencer: lib'ify prepare_revs()
      sequencer: lib'ify read_and_refresh_cache()
      sequencer: lib'ify read_populate_todo()
      sequencer: lib'ify read_populate_opts()
      sequencer: lib'ify create_seq_dir()
      sequencer: lib'ify save_head()
      sequencer: lib'ify save_todo()
      sequencer: lib'ify save_opts()
      sequencer: lib'ify fast_forward_to()
      sequencer: lib'ify checkout_fast_forward()
      sequencer: ensure to release the lock when we could not read the index
      cat-file: introduce the --filters option
      cat-file --textconv/--filters: allow specifying the path separately
      cat-file: support --textconv/--filters in batch mode
      git-gui: respect commit.gpgsign again
      regex: -G<pattern> feeds a non NUL-terminated string to regexec() and fails
      regex: add regexec_buf() that can work on a non NUL-terminated string
      regex: use regexec_buf()
      pull: drop confusing prefix parameter of die_on_unclean_work_tree()
      pull: make code more similar to the shell script again
      wt-status: make the require_clean_work_tree() function reusable
      wt-status: export also the has_un{staged,committed}_changes() functions
      wt-status: teach has_{unstaged,uncommitted}_changes() about submodules
      wt-status: begin error messages with lower-case
      reset: fix usage
      sequencer: use static initializers for replay_opts
      sequencer: use memoized sequencer directory path
      sequencer: avoid unnecessary indirection
      sequencer: future-proof remove_sequencer_state()
      sequencer: plug memory leaks for the option values
      sequencer: future-proof read_populate_todo()
      sequencer: refactor the code to obtain a short commit name
      sequencer: completely revamp the "todo" script parsing
      sequencer: strip CR from the todo script
      sequencer: avoid completely different messages for different actions
      sequencer: get rid of the subcommand field
      sequencer: remember the onelines when parsing the todo file
      sequencer: prepare for rebase -i's commit functionality
      sequencer: introduce a helper to read files written by scripts
      sequencer: allow editing the commit message on a case-by-case basis
      sequencer: support amending commits
      sequencer: support cleaning up commit messages
      sequencer: left-trim lines read from the script
      sequencer: stop releasing the strbuf in write_message()
      sequencer: roll back lock file if write_message() failed
      sequencer: refactor write_message() to take a pointer/length
      sequencer: teach write_message() to append an optional LF
      sequencer: remove overzealous assumption in rebase -i mode
      sequencer: mark action_name() for translation
      sequencer: quote filenames in error messages
      sequencer: start error messages consistently with lower case
      sequencer: mark all error messages for translation
      t6026: ensure that long-running script really is

Johannes Sixt (9):
      t9903: fix broken && chain
      t6026-merge-attr: clean up background process at end of test case
      t3700-add: create subdirectory gently
      t3700-add: do not check working tree file mode without POSIXPERM
      t0060: sidestep surprising path mangling results on Windows
      t0021: expect more variations in the output of uniq -c
      t0021: compute file size with a single process instead of a pipeline
      t0021, t5615: use $PWD instead of $(pwd) in PATH-like shell variables
      t6026: clarify the point of "kill $(cat sleep.pid)"

Jonathan Nieder (1):
      connect: tighten check for unexpected early hang up

Jonathan Tan (14):
      tests: move test_lazy_prereq JGIT to test-lib.sh
      connect: advertized capability is not a ref
      mailinfo: separate in-body header processing
      mailinfo: make is_scissors_line take plain char *
      mailinfo: handle in-body header continuations
      fetch-pack: do not reset in_vain on non-novel acks
      trailer: improve const correctness
      trailer: use list.h for doubly-linked list
      trailer: streamline trailer item create and add
      trailer: make args have their own struct
      trailer: clarify failure modes in parse_trailer
      trailer: allow non-trailers in trailer block
      trailer: forbid leading whitespace in trailers
      trailer: support values folded to multiple lines

Josh Triplett (2):
      format-patch: show base info before email signature
      format-patch: add "--rfc" for the common case of [RFC PATCH]

Junio C Hamano (49):
      blame: improve diagnosis for "--reverse NEW"
      blame: dwim "blame --reverse OLD" as "blame --reverse OLD.."
      am: refactor read_author_script()
      diff.c: remove output_prefix_length field
      submodule: avoid auto-discovery in prepare_submodule_repo_env()
      symbolic-ref -d: do not allow removal of HEAD
      Prepare for 2.9.4
      Start the 2.11 cycle
      First batch for 2.11
      Second batch for 2.11
      Third batch for 2.11
      Start preparing for 2.10.1
      Fourth batch for 2.11
      streaming: make sure to notice corrupt object
      unpack_sha1_header(): detect malformed object header
      Fifth batch for 2.11
      worktree: honor configuration variables
      blame: use DEFAULT_ABBREV macro
      Prepare for 2.10.1
      Sixth batch for 2.11
      diff_unique_abbrev(): document its assumption and limitation
      abbrev: add FALLBACK_DEFAULT_ABBREV to prepare for auto sizing
      abbrev: prepare for new world order
      Git 2.10.1
      Seventh batch for 2.11
      t4015: split out the "setup" part of ws-error-highlight test
      diff.c: refactor parse_ws_error_highlight()
      diff.c: move ws-error-highlight parsing helpers up
      diff: introduce diff.wsErrorHighlight option
      Eighth batch for 2.11
      Ninth batch for 2.11
      Start preparing for 2.10.2
      cocci: refactor common patterns to use xstrdup_or_null()
      Tenth batch for 2.11
      t3700: fix broken test under !SANITY
      transport: pass summary_width down the callchain
      fetch: pass summary_width down the callchain
      transport: allow summary-width to be computed dynamically
      transport: compute summary-width dynamically
      Eleventh batch for 2.11
      Getting ready for 2.11-rc0
      Git 2.10.2
      Git 2.11-rc0
      A bit of updates post -rc0
      Revert "t6026-merge-attr: ensure that the merge driver was called"
      Revert "t6026-merge-attr: don't fail if sleep exits early"
      t0021: remove debugging cruft
      Git 2.11.0-rc1
      Git 2.11-rc2

Karsten Blees (2):
      git-gui: unicode file name support on windows
      git-gui: handle the encoding of Git's output correctly

Kevin Daudt (2):
      t5100-mailinfo: replace common path prefix with variable
      mailinfo: unescape quoted-pair in header fields

Kirill Smelkov (3):
      pack-objects: respect --local/--honor-pack-keep/--incremental when bitmap is in use
      pack-objects: use reachability bitmap index when generating non-stdout pack
      t/perf/run: copy config.mak.autogen & friends to build area

Lars Schneider (20):
      travis-ci: ask homebrew for its path instead of hardcoding it
      convert: quote filter names in error messages
      convert: modernize tests
      run-command: move check_pipe() from write_or_die to run_command
      run-command: add clean_on_exit_handler
      pkt-line: rename packet_write() to packet_write_fmt()
      pkt-line: extract set_packet_header()
      pkt-line: add packet_write_fmt_gently()
      pkt-line: add packet_flush_gently()
      pkt-line: add packet_write_gently()
      pkt-line: add functions to read/write flush terminated packet streams
      convert: make apply_filter() adhere to standard Git error handling
      convert: prepare filter.<driver>.process option
      convert: add filter.<driver>.process option
      contrib/long-running-filter: add long running filter example
      sha1_file: rename git_open_noatime() to git_open()
      sha1_file: open window into packfiles with O_CLOEXEC
      read-cache: make sure file handles are not inherited by child processes
      Makefile: set NO_OPENSSL on macOS by default
      travis-ci: disable GIT_TEST_HTTPD for macOS

Linus Torvalds (1):
      abbrev: auto size the default abbreviation

Mantas Mikulėnas (1):
      contrib: add credential helper for libsecret

Matthieu Moy (4):
      Documentation/config: default for color.* is color.ui
      parse_mailboxes: accept extra text after <...> address
      t9000-addresses: update expected results after fix
      Git.pm: add comment pointing to t9000

Michael Haggerty (36):
      xdl_change_compact(): fix compaction heuristic to adjust ixo
      xdl_change_compact(): only use heuristic if group can't be matched
      is_blank_line(): take a single xrecord_t as argument
      recs_match(): take two xrecord_t pointers as arguments
      xdl_change_compact(): introduce the concept of a change group
      resolve_gitlink_ref(): eliminate temporary variable
      refs: rename struct ref_cache to files_ref_store
      refs: create a base class "ref_store" for files_ref_store
      add_packed_ref(): add a files_ref_store argument
      get_packed_ref(): add a files_ref_store argument
      resolve_missing_loose_ref(): add a files_ref_store argument
      {lock,commit,rollback}_packed_refs(): add files_ref_store arguments
      refs: reorder definitions
      resolve_packed_ref(): rename function from resolve_missing_loose_ref()
      resolve_gitlink_packed_ref(): remove function
      read_raw_ref(): take a (struct ref_store *) argument
      resolve_ref_recursively(): new function
      resolve_gitlink_ref(): implement using resolve_ref_recursively()
      resolve_gitlink_ref(): avoid memory allocation in many cases
      resolve_gitlink_ref(): rename path parameter to submodule
      refs: make read_raw_ref() virtual
      refs: make verify_refname_available() virtual
      refs: make pack_refs() virtual
      refs: make create_symref() virtual
      refs: make peel_ref() virtual
      repack_without_refs(): add a files_ref_store argument
      lock_raw_ref(): add a files_ref_store argument
      commit_ref_update(): add a files_ref_store argument
      lock_ref_for_update(): add a files_ref_store argument
      lock_ref_sha1_basic(): add a files_ref_store argument
      split_symref_update(): add a files_ref_store argument
      files_ref_iterator_begin(): take a ref_store argument
      refs: add method iterator_begin
      diff: improve positioning of add/delete blocks in diffs
      parse-options: add parse_opt_unknown_cb()
      blame: honor the diff heuristic options and config

Michael J Gruber (1):
      gpg-interface: use more status letters

Mike Ralphson (1):
      vcs-svn/fast_export: fix timestamp fmt specifiers

Nguyễn Thái Ngọc Duy (40):
      remote-curl.c: convert fetch_git() to use argv_array
      transport-helper.c: refactor set_helper_option()
      upload-pack: move shallow deepen code out of receive_needs()
      upload-pack: move "shallow" sending code out of deepen()
      upload-pack: remove unused variable "backup"
      upload-pack: move "unshallow" sending code out of deepen()
      upload-pack: use skip_prefix() instead of starts_with()
      upload-pack: tighten number parsing at "deepen" lines
      upload-pack: make check_non_tip() clean things up on error
      upload-pack: move rev-list code out of check_non_tip()
      fetch-pack: use skip_prefix() instead of starts_with()
      fetch-pack: use a common function for verbose printing
      fetch-pack.c: mark strings for translating
      fetch-pack: use a separate flag for fetch in deepening mode
      shallow.c: implement a generic shallow boundary finder based on rev-list
      upload-pack: add deepen-since to cut shallow repos based on time
      fetch: define shallow boundary with --shallow-since
      clone: define shallow clone boundary based on time with --shallow-since
      t5500, t5539: tests for shallow depth since a specific date
      refs: add expand_ref()
      upload-pack: support define shallow boundary by excluding revisions
      fetch: define shallow boundary with --shallow-exclude
      clone: define shallow clone boundary with --shallow-exclude
      t5500, t5539: tests for shallow depth excluding a ref
      upload-pack: split check_unreachable() in two, prep for get_reachable_list()
      upload-pack: add get_reachable_list()
      fetch, upload-pack: --deepen=N extends shallow boundary by N commits
      checkout: add some spaces between code and comment
      checkout.txt: document a common case that ignores ambiguation rules
      checkout: fix ambiguity check in subdir
      init: correct re-initialization from a linked worktree
      init: call set_git_dir_init() from within init_db()
      init: kill set_git_dir_init()
      init: do not set unnecessary core.worktree
      init: kill git_link variable
      git-commit.txt: clarify --patch mode with pathspec
      diff-lib: allow ita entries treated as "not yet exist in index"
      diff: add --ita-[in]visible-in-index
      commit: fix empty commit creation when there's no changes but ita entries
      commit: don't be fooled by ita entries when creating initial commit

Olaf Hering (1):
      git-gui: sort entries in tclIndex

Orgad Shaneh (1):
      git-gui: Do not reset author details on amend

Pat Thoyts (7):
      Allow keyboard control to work in the staging widgets.
      Amend tab ordering and text widget border and highlighting.
      git-gui: fix detection of Cygwin
      git-gui (Windows): use git-gui.exe in `Create Desktop Shortcut`
      git-gui: maintain backwards compatibility for merge syntax
      git-gui: avoid persisting modified author identity
      git-gui: set version 0.21

Patrick Steinhardt (1):
      doc: fix location of 'info/' with $GIT_COMMON_DIR

Petr Stodulka (1):
      http: control GSSAPI credential delegation

Philip Oakley (14):
      doc: use 'symmetric difference' consistently
      doc: revisions - name the left and right sides
      doc: show the actual left, right, and boundary marks
      doc: revisions: give headings for the two and three dot notations
      doc: revisions: extra clarification of <rev>^! notation effects
      doc: revisions: single vs multi-parent notation comparison
      doc: gitrevisions - use 'reachable' in page description
      doc: gitrevisions - clarify 'latter case' is revision walk
      doc: revisions - define `reachable`
      doc: revisions - clarify reachability examples
      doc: revisions: show revision expansion in examples
      doc: revisions: sort examples and fix alignment of the unchanged
      doc: fix merge-base ASCII art tab spacing
      doc: fix the 'revert a faulty merge' ASCII art tab spacing

Pranit Bauva (2):
      rev-list-options: clarify the usage of --reverse
      t0040: convert all possible tests to use `test-parse-options --expect`

Ralf Thielow (6):
      help: introduce option --exclude-guides
      help: make option --help open man pages only for Git commands
      rebase -i: improve advice on bad instruction lines
      l10n: de.po: fix translation of autostash
      l10n: de.po: translate 260 new messages
      fetch-pack.c: correct command at the beginning of an error message

Ray Chen (1):
      l10n: zh_CN: review for git v2.10.0 l10n

René Scharfe (36):
      compat: move strdup(3) replacement to its own file
      introduce hex2chr() for converting two hexadecimal digits to a character
      strbuf: use valid pointer in strbuf_remove()
      checkout: constify parameters of checkout_stage() and checkout_merged()
      unpack-trees: pass checkout state explicitly to check_updates()
      sha1_file: use llist_mergesort() for sorting packs
      xdiff: fix merging of hunks with -W context and -u context
      contrib/coccinelle: fix semantic patch for oid_to_hex_r()
      add coccicheck make target
      use strbuf_addstr() for adding constant strings to a strbuf, part 2
      pretty: let %C(auto) reset all attributes
      introduce CHECKOUT_INIT
      add COPY_ARRAY
      use COPY_ARRAY
      git-gui: stop using deprecated merge syntax
      gitignore: ignore output files of coccicheck make target
      use strbuf_addstr() instead of strbuf_addf() with "%s", part 2
      use strbuf_add_unique_abbrev() for adding short hashes, part 2
      add QSORT
      use QSORT
      remove unnecessary check before QSORT
      coccicheck: use --all-includes by default
      use QSORT, part 2
      pretty: avoid adding reset for %C(auto) if output is empty
      coccicheck: make transformation for strbuf_addf(sb, "...") more precise
      show-branch: use QSORT
      remove unnecessary NULL check before free(3)
      use strbuf_add_unique_abbrev() for adding short hashes, part 3
      pretty: fix document link for color specification
      avoid pointer arithmetic involving NULL in FLEX_ALLOC_MEM
      inline xalloc_flex() into FLEXPTR_ALLOC_MEM
      hex: make wraparound of the index into ring-buffer explicit
      valgrind: support test helpers
      commit: simplify building parents list
      sha1_name: make wraparound of the index into ring-buffer explicit
      cocci: avoid self-references in object_id transformations

Ronnie Sahlberg (2):
      refs: add a backend method structure
      refs: add a transaction_commit() method

SZEDER Gábor (1):
      ref-filter: strip format option after a field name only once while parsing

Satoshi Yasushima (6):
      git-gui: consistently use the same word for "remote" in Japanese
      git-gui: consistently use the same word for "blame" in Japanese
      git-gui: apply po template to Japanese translation
      git-gui: add Japanese language code
      git-gui: update Japanese translation
      git-gui: update Japanese information

Stefan Beller (16):
      t7408: modernize style
      t7408: merge short tests, factor out testing method
      submodule--helper module-clone: allow multiple references
      submodule--helper update-clone: allow multiple references
      clone: factor out checking for an alternate path
      clone: clarify option_reference as required
      clone: implement optional references
      clone: recursive and reference option triggers submodule alternates
      xdiff: remove unneeded declarations
      transport: report missing submodule pushes consistently on stderr
      diff.c: use diff_options directly
      diff: omit found pointer from emit_callback
      diff: remove dead code
      submodule: ignore trailing slash on superproject URL
      submodule: ignore trailing slash in relative url
      documentation: improve submodule.<name>.{url, path} description

Stefan Christ (1):
      Documentation/fmt-merge-msg: fix markup in example

Thomas Gummerer (4):
      add: document the chmod option
      update-index: add test for chmod flags
      read-cache: introduce chmod_index_entry
      add: modify already added files when --chmod is given

Tobias Klauser (1):
      diffcore-delta: remove unused parameter to diffcore_count_changes()

Vasco Almeida (32):
      l10n: pt_PT: update Portuguese translation
      l10n: pt_PT: update Portuguese repository info
      i18n: blame: mark error messages for translation
      i18n: branch: mark option description for translation
      i18n: config: mark error message for translation
      i18n: merge-recursive: mark error messages for translation
      i18n: merge-recursive: mark verbose message for translation
      i18n: notes: mark error messages for translation
      notes: spell first word of error messages in lowercase
      i18n: receive-pack: mark messages for translation
      i18n: show-branch: mark error messages for translation
      i18n: show-branch: mark plural strings for translation
      i18n: update-index: mark warnings for translation
      i18n: commit: mark message for translation
      i18n: connect: mark die messages for translation
      i18n: ident: mark hint for translation
      i18n: notes-merge: mark die messages for translation
      i18n: stash: mark messages for translation
      git-gui i18n: mark strings for translation
      git-gui: l10n: add Portuguese translation
      git-gui i18n: internationalize use of colon punctuation
      git-gui i18n: mark "usage:" strings for translation
      git-gui: fix incorrect use of Tcl append command
      git-gui i18n: mark string in lib/error.tcl for translation
      t1512: become resilient to GETTEXT_POISON build
      i18n: apply: mark plural string for translation
      i18n: apply: mark info messages for translation
      i18n: apply: mark error messages for translation
      i18n: apply: mark error message for translation
      i18n: convert mark error messages for translation
      i18n: credential-cache--daemon: mark advice for translation
      i18n: diff: mark warnings for translation

Vegard Nossum (1):
      revision: new rev^-n shorthand for rev^n..rev

Younes Khoudli (1):
      doc: remove reference to the traditional layout in git-tag.txt

brian m. carlson (20):
      cache: convert struct cache_entry to use struct object_id
      builtin/apply: convert static functions to struct object_id
      builtin/blame: convert struct origin to use struct object_id
      builtin/log: convert some static functions to use struct object_id
      builtin/cat-file: convert struct expand_data to use struct object_id
      builtin/cat-file: convert some static functions to struct object_id
      builtin: convert textconv_object to use struct object_id
      streaming: make stream_blob_to_fd take struct object_id
      builtin/checkout: convert some static functions to struct object_id
      notes-merge: convert struct notes_merge_pair to struct object_id
      Convert read_mmblob to take struct object_id.
      builtin/blame: convert file to use struct object_id
      builtin/rm: convert to use struct object_id
      notes: convert init_notes to use struct object_id
      builtin/update-index: convert file to struct object_id
      sha1_name: convert get_sha1_mb to struct object_id
      refs: add an update_ref_oid function.
      builtin/am: convert to struct object_id
      builtin/commit-tree: convert to struct object_id
      builtin/reset: convert to use struct object_id

yaras (1):
      git-gui: fix initial git gui message encoding

Ævar Arnfjörð Bjarmason (3):
      gitweb: fix a typo in a comment
      gitweb: link to 7-char+ SHA-1s, not only 8-char+
      gitweb: link to "git describe"'d commits in log messages

Дилян Палаузов (1):
      ./configure.ac: detect SSL in libcurl using curl-config


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.11.0-rc1
@ 2016-11-11 23:27  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2016-11-11 23:27 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

A release candidate Git v2.11.0-rc1 is now available for testing
at the usual places.  It is comprised of 642 non-merge commits
since v2.10.0, contributed by 66 people, 14 of which are new faces.

Due to the last-minute fixups and timezone differences, there might
be a few more updates to test scripts that are necessary depending
on your platform, but otherwise this should be pretty much what the
final 2.11 will look like.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.11.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.10.0 are as follows.
Welcome to the Git development community!

  Aaron M Watson, Brandon Williams, Brian Henderson, Emily Xie,
  Gavin Lambert, Ian Kelling, Jeff Hostetler, Mantas Mikulėnas,
  Petr Stodulka, Satoshi Yasushima, Stefan Christ, Vegard Nossum,
  yaras, and Younes Khoudli.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alexander Shopov, Alex Henrie,
  Alex Riesen, Anders Kaseorg, Andreas Schwab, Beat Bolli, brian
  m. carlson, Chris Packham, Christian Couder, David Aguilar,
  David Turner, Dennis Kaarsemaker, Dimitriy Ryazantcev, Elia
  Pinto, Eric Wong, Jacob Keller, Jakub Narębski, Jean-Noël
  AVILA, Jeff King, Jiang Xin, Johannes Schindelin, Johannes Sixt,
  Jonathan Nieder, Jonathan Tan, Josh Triplett, Junio C Hamano,
  Karsten Blees, Kevin Daudt, Kirill Smelkov, Lars Schneider,
  Linus Torvalds, Matthieu Moy, Michael Haggerty, Michael J Gruber,
  Mike Ralphson, Nguyễn Thái Ngọc Duy, Olaf Hering, Orgad
  Shaneh, Patrick Steinhardt, Pat Thoyts, Philip Oakley, Pranit
  Bauva, Ralf Thielow, Ray Chen, René Scharfe, Ronnie Sahlberg,
  Stefan Beller, SZEDER Gábor, Thomas Gummerer, Vasco Almeida,
  and Дилян Палаузов.

----------------------------------------------------------------

Git 2.11 Release Notes (draft)
==============================

Backward compatibility notes.

 * An empty string used as a pathspec element has always meant
   'everything matches', but it is too easy to write a script that
   finds a path to remove in $path and run 'git rm "$paht"' by
   mistake (when the user meant to give "$path"), which ends up
   removing everything.  This release starts warning about the
   use of an empty string that is used for 'everything matches' and
   asks users to use a more explicit '.' for that instead.

   The hope is that existing users will not mind this change, and
   eventually the warning can be turned into a hard error, upgrading
   the deprecation into removal of this (mis)feature.

 * The historical argument order "git merge <msg> HEAD <commit>..."
   has been deprecated for quite some time, and will be removed in the
   next release (not this one).

 * The default abbreviation length, which has historically been 7, now
   scales as the repository grows, using the approximate number of
   objects in the repository and a bit of math around the birthday
   paradox.  The logic suggests to use 12 hexdigits for the Linux
   kernel, and 9 to 10 for Git itself.


Updates since v2.10
-------------------

UI, Workflows & Features

 * Comes with new version of git-gui, now at its 0.21.0 tag.

 * "git format-patch --cover-letter HEAD^" to format a single patch
   with a separate cover letter now numbers the output as [PATCH 0/1]
   and [PATCH 1/1] by default.

 * An incoming "git push" that attempts to push too many bytes can now
   be rejected by setting a new configuration variable at the receiving
   end.

 * "git nosuchcommand --help" said "No manual entry for gitnosuchcommand",
   which was not intuitive, given that "git nosuchcommand" said "git:
   'nosuchcommand' is not a git command".

 * "git clone --recurse-submodules --reference $path $URL" is a way to
   reduce network transfer cost by borrowing objects in an existing
   $path repository when cloning the superproject from $URL; it
   learned to also peek into $path for presence of corresponding
   repositories of submodules and borrow objects from there when able.

 * The "git diff --submodule={short,log}" mechanism has been enhanced
   to allow "--submodule=diff" to show the patch between the submodule
   commits bound to the superproject.

 * Even though "git hash-objects", which is a tool to take an
   on-filesystem data stream and put it into the Git object store,
   allowed to perform the "outside-world-to-Git" conversions (e.g.
   end-of-line conversions and application of the clean-filter), and
   it had the feature on by default from very early days, its reverse
   operation "git cat-file", which takes an object from the Git object
   store and externalize for the consumption by the outside world,
   lacked an equivalent mechanism to run the "Git-to-outside-world"
   conversion.  The command learned the "--filters" option to do so.

 * Output from "git diff" can be made easier to read by selecting
   which lines are common and which lines are added/deleted
   intelligently when the lines before and after the changed section
   are the same.  A command line option is added to help with the
   experiment to find a good heuristics.

 * In some projects, it is common to use "[RFC PATCH]" as the subject
   prefix for a patch meant for discussion rather than application.  A
   new option "--rfc" is a short-hand for "--subject-prefix=RFC PATCH"
   to help the participants of such projects.

 * "git add --chmod=+x <pathspec>" added recently only toggled the
   executable bit for paths that are either new or modified. This has
   been corrected to flip the executable bit for all paths that match
   the given pathspec.

 * When "git format-patch --stdout" output is placed as an in-body
   header and it uses the RFC2822 header folding, "git am" failed to
   put the header line back into a single logical line.  The
   underlying "git mailinfo" was taught to handle this properly.

 * "gitweb" can spawn "highlight" to show blob contents with
   (programming) language-specific syntax highlighting, but only
   when the language is known.  "highlight" can however be told
   to make the guess itself by giving it "--force" option, which
   has been enabled.

 * "git gui" l10n to Portuguese.

 * When given an abbreviated object name that is not (or more
   realistically, "no longer") unique, we gave a fatal error
   "ambiguous argument".  This error is now accompanied by a hint that
   lists the objects beginning with the given prefix.  During the
   course of development of this new feature, numerous minor bugs were
   uncovered and corrected, the most notable one of which is that we
   gave "short SHA1 xxxx is ambiguous." twice without good reason.

 * "git log rev^..rev" is an often-used revision range specification
   to show what was done on a side branch merged at rev.  This has
   gained a short-hand "rev^-1".  In general "rev^-$n" is the same as
   "^rev^$n rev", i.e. what has happened on other branches while the
   history leading to nth parent was looking the other way.

 * In recent versions of cURL, GSSAPI credential delegation is
   disabled by default due to CVE-2011-2192; introduce a configuration
   to selectively allow enabling this.
   (merge 26a7b23429 ps/http-gssapi-cred-delegation later to maint).

 * "git mergetool" learned to honor "-O<orderfile>" to control the
   order of paths to present to the end user.

 * "git diff/log --ws-error-highlight=<kind>" lacked the corresponding
   configuration variable to set it by default.

 * "git ls-files" learned "--recurse-submodules" option that can be
   used to get a listing of tracked files across submodules (i.e. this
   only works with "--cached" option, not for listing untracked or
   ignored files).  This would be a useful tool to sit on the upstream
   side of a pipe that is read with xargs to work on all working tree
   files from the top-level superproject.

 * A new credential helper that talks via "libsecret" with
   implementations of XDG Secret Service API has been added to
   contrib/credential/.

 * The GPG verification status shown in "%G?" pretty format specifier
   was not rich enough to differentiate a signature made by an expired
   key, a signature made by a revoked key, etc.  New output letters
   have been assigned to express them.

 * In addition to purely abbreviated commit object names, "gitweb"
   learned to turn "git describe" output (e.g. v2.9.3-599-g2376d31787)
   into clickable links in its output.

 * When new paths were added by "git add -N" to the index, it was
   enough to circumvent the check by "git commit" to refrain from
   making an empty commit without "--allow-empty".  The same logic
   prevented "git status" to show such a path as "new file" in the
   "Changes not staged for commit" section.

 * The smudge/clean filter API expect an external process is spawned
   to filter the contents for each path that has a filter defined.  A
   new type of "process" filter API has been added to allow the first
   request to run the filter for a path to spawn a single process, and
   all filtering need is served by this single process for multiple
   paths, reducing the process creation overhead.

 * The user always has to say "stash@{$N}" when naming a single
   element in the default location of the stash, i.e. reflogs in
   refs/stash.  The "git stash" command learned to accept "git stash
   apply 4" as a short-hand for "git stash apply stash@{4}".


Performance, Internal Implementation, Development Support etc.

 * The delta-base-cache mechanism has been a key to the performance in
   a repository with a tightly packed packfile, but it did not scale
   well even with a larger value of core.deltaBaseCacheLimit.

 * Enhance "git status --porcelain" output by collecting more data on
   the state of the index and the working tree files, which may
   further be used to teach git-prompt (in contrib/) to make fewer
   calls to git.

 * Extract a small helper out of the function that reads the authors
   script file "git am" internally uses.
   (merge a77598e jc/am-read-author-file later to maint).

 * Lifts calls to exit(2) and die() higher in the callchain in
   sequencer.c files so that more helper functions in it can be used
   by callers that want to handle error conditions themselves.

 * "git am" has been taught to make an internal call to "git apply"'s
   innards without spawning the latter as a separate process.

 * The ref-store abstraction was introduced to the refs API so that we
   can plug in different backends to store references.

 * The "unsigned char sha1[20]" to "struct object_id" conversion
   continues.  Notable changes in this round includes that ce->sha1,
   i.e. the object name recorded in the cache_entry, turns into an
   object_id.

 * JGit can show a fake ref "capabilities^{}" to "git fetch" when it
   does not advertise any refs, but "git fetch" was not prepared to
   see such an advertisement.  When the other side disconnects without
   giving any ref advertisement, we used to say "there may not be a
   repository at that URL", but we may have seen other advertisement
   like "shallow" and ".have" in which case we definitely know that a
   repository is there.  The code to detect this case has also been
   updated.

 * Some codepaths in "git pack-objects" were not ready to use an
   existing pack bitmap; now they are and as the result they have
   become faster.

 * The codepath in "git fsck" to detect malformed tree objects has
   been updated not to die but keep going after detecting them.

 * We call "qsort(array, nelem, sizeof(array[0]), fn)", and most of
   the time third parameter is redundant.  A new QSORT() macro lets us
   omit it.

 * "git pack-objects" in a repository with many packfiles used to
   spend a lot of time looking for/at objects in them; the accesses to
   the packfiles are now optimized by checking the most-recently-used
   packfile first.
   (merge c9af708b1a jk/pack-objects-optim-mru later to maint).

 * Codepaths involved in interacting alternate object store have
   been cleaned up.

 * In order for the receiving end of "git push" to inspect the
   received history and decide to reject the push, the objects sent
   from the sending end need to be made available to the hook and
   the mechanism for the connectivity check, and this was done
   traditionally by storing the objects in the receiving repository
   and letting "git gc" to expire it.  Instead, store the newly
   received objects in a temporary area, and make them available by
   reusing the alternate object store mechanism to them only while we
   decide if we accept the check, and once we decide, either migrate
   them to the repository or purge them immediately.

 * The require_clean_work_tree() helper was recreated in C when "git
   pull" was rewritten from shell; the helper is now made available to
   other callers in preparation for upcoming "rebase -i" work.

 * "git upload-pack" had its code cleaned-up and performance improved
   by reducing use of timestamp-ordered commit-list, which was
   replaced with a priority queue.

 * "git diff --no-index" codepath has been updated not to try to peek
   into .git/ directory that happens to be under the current
   directory, when we know we are operating outside any repository.

 * Update of the sequencer codebase to make it reusable to reimplement
   "rebase -i" continues.

 * Git generally does not explicitly close file descriptors that were
   open in the parent process when spawning a child process, but most
   of the time the child does not want to access them. As Windows does
   not allow removing or renaming a file that has a file descriptor
   open, a slow-to-exit child can even break the parent process by
   holding onto them.  Use O_CLOEXEC flag to open files in various
   codepaths.

 * Update "interpret-trailers" machinery and teaches it that people in
   real world write all sorts of crufts in the "trailer" that was
   originally designed to have the neat-o "Mail-Header: like thing"
   and nothing else.


Also contains various documentation updates and code clean-ups.


Fixes since v2.10
-----------------

Unless otherwise noted, all the fixes since v2.9 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * Clarify various ways to specify the "revision ranges" in the
   documentation.

 * "diff-highlight" script (in contrib/) learned to work better with
   "git log -p --graph" output.

 * The test framework left the number of tests and success/failure
   count in the t/test-results directory, keyed by the name of the
   test script plus the process ID.  The latter however turned out not
   to serve any useful purpose.  The process ID part of the filename
   has been removed.

 * Having a submodule whose ".git" repository is somehow corrupt
   caused a few commands that recurse into submodules loop forever.

 * "git symbolic-ref -d HEAD" happily removes the symbolic ref, but
   the resulting repository becomes an invalid one.  Teach the command
   to forbid removal of HEAD.

 * A test spawned a short-lived background process, which sometimes
   prevented the test directory from getting removed at the end of the
   script on some platforms.

 * Update a few tests that used to use GIT_CURL_VERBOSE to use the
   newer GIT_TRACE_CURL.

 * "git pack-objects --include-tag" was taught that when we know that
   we are sending an object C, we want a tag B that directly points at
   C but also a tag A that points at the tag B.  We used to miss the
   intermediate tag B in some cases.

 * Update Japanese translation for "git-gui".

 * "git fetch http::/site/path" did not die correctly and segfaulted
   instead.

 * "git commit-tree" stopped reading commit.gpgsign configuration
   variable that was meant for Porcelain "git commit" in Git 2.9; we
   forgot to update "git gui" to look at the configuration to match
   this change.

 * "git add --chmod=+x" added recently lacked documentation, which has
   been corrected.

 * "git log --cherry-pick" used to include merge commits as candidates
   to be matched up with other commits, resulting a lot of wasted time.
   The patch-id generation logic has been updated to ignore merges to
   avoid the wastage.

 * The http transport (with curl-multi option, which is the default
   these days) failed to remove curl-easy handle from a curlm session,
   which led to unnecessary API failures.

 * There were numerous corner cases in which the configuration files
   are read and used or not read at all depending on the directory a
   Git command was run, leading to inconsistent behaviour.  The code
   to set-up repository access at the beginning of a Git process has
   been updated to fix them.
   (merge 4d0efa1 jk/setup-sequence-update later to maint).

 * "git diff -W" output needs to extend the context backward to
   include the header line of the current function and also forward to
   include the body of the entire current function up to the header
   line of the next one.  This process may have to merge two adjacent
   hunks, but the code forgot to do so in some cases.

 * Performance tests done via "t/perf" did not use the same set of
   build configuration if the user relied on autoconf generated
   configuration.

 * "git format-patch --base=..." feature that was recently added
   showed the base commit information after "-- " e-mail signature
   line, which turned out to be inconvenient.  The base information
   has been moved above the signature line.

 * More i18n.

 * Even when "git pull --rebase=preserve" (and the underlying "git
   rebase --preserve") can complete without creating any new commit
   (i.e. fast-forwards), it still insisted on having a usable ident
   information (read: user.email is set correctly), which was less
   than nice.  As the underlying commands used inside "git rebase"
   would fail with a more meaningful error message and advice text
   when the bogus ident matters, this extra check was removed.

 * "git gc --aggressive" used to limit the delta-chain length to 250,
   which is way too deep for gaining additional space savings and is
   detrimental for runtime performance.  The limit has been reduced to
   50.

 * Documentation for individual configuration variables to control use
   of color (like `color.grep`) said that their default value is
   'false', instead of saying their default is taken from `color.ui`.
   When we updated the default value for color.ui from 'false' to
   'auto' quite a while ago, all of them broke.  This has been
   corrected.

 * The pretty-format specifier "%C(auto)" used by the "log" family of
   commands to enable coloring of the output is taught to also issue a
   color-reset sequence to the output.

 * A shell script example in check-ref-format documentation has been
   fixed.

 * "git checkout <word>" does not follow the usual disambiguation
   rules when the <word> can be both a rev and a path, to allow
   checking out a branch 'foo' in a project that happens to have a
   file 'foo' in the working tree without having to disambiguate.
   This was poorly documented and the check was incorrect when the
   command was run from a subdirectory.

 * Some codepaths in "git diff" used regexec(3) on a buffer that was
   mmap(2)ed, which may not have a terminating NUL, leading to a read
   beyond the end of the mapped region.  This was fixed by introducing
   a regexec_buf() helper that takes a <ptr,len> pair with REG_STARTEND
   extension.

 * The procedure to build Git on Mac OS X for Travis CI hardcoded the
   internal directory structure we assumed HomeBrew uses, which was a
   no-no.  The procedure has been updated to ask HomeBrew things we
   need to know to fix this.

 * When "git rebase -i" is given a broken instruction, it told the
   user to fix it with "--edit-todo", but didn't say what the step
   after that was (i.e. "--continue").

 * Documentation around tools to import from CVS was fairly outdated.

 * "git clone --recurse-submodules" lost the progress eye-candy in
   recent update, which has been corrected.

 * A low-level function verify_packfile() was meant to show errors
   that were detected without dying itself, but under some conditions
   it didn't and died instead, which has been fixed.

 * When "git fetch" tries to find where the history of the repository
   it runs in has diverged from what the other side has, it has a
   mechanism to avoid digging too deep into irrelevant side branches.
   This however did not work well over the "smart-http" transport due
   to a design bug, which has been fixed.

 * In the codepath that comes up with the hostname to be used in an
   e-mail when the user didn't tell us, we looked at ai_canonname
   field in struct addrinfo without making sure it is not NULL first.

 * "git worktree", even though it used the default_abbrev setting that
   ought to be affected by core.abbrev configuration variable, ignored
   the variable setting.  The command has been taught to read the
   default set of configuration variables to correct this.

 * "git init" tried to record core.worktree in the repository's
   'config' file when GIT_WORK_TREE environment variable was set and
   it was different from where GIT_DIR appears as ".git" at its top,
   but the logic was faulty when .git is a "gitdir:" file that points
   at the real place, causing trouble in working trees that are
   managed by "git worktree".  This has been corrected.

 * Codepaths that read from an on-disk loose object were too loose in
   validating what they are reading is a proper object file and
   sometimes read past the data they read from the disk, which has
   been corrected.  H/t to Gustavo Grieco for reporting.

 * The original command line syntax for "git merge", which was "git
   merge <msg> HEAD <parent>...", has been deprecated for quite some
   time, and "git gui" was the last in-tree user of the syntax.  This
   is finally fixed, so that we can move forward with the deprecation.

 * An author name, that spelled a backslash-quoted double quote in the
   human readable part "My \"double quoted\" name", was not unquoted
   correctly while applying a patch from a piece of e-mail.

 * Doc update to clarify what "log -3 --reverse" does.

 * Almost everybody uses DEFAULT_ABBREV to refer to the default
   setting for the abbreviation, but "git blame" peeked into
   underlying variable bypassing the macro for no good reason.

 * The "graph" API used in "git log --graph" miscounted the number of
   output columns consumed so far when drawing a padding line, which
   has been fixed; this did not affect any existing code as nobody
   tried to write anything after the padding on such a line, though.

 * The code that parses the format parameter of for-each-ref command
   has seen a micro-optimization.

 * When we started cURL to talk to imap server when a new enough
   version of cURL library is available, we forgot to explicitly add
   imap(s):// before the destination.  To some folks, that didn't work
   and the library tried to make HTTP(s) requests instead.

 * The ./configure script generated from configure.ac was taught how
   to detect support of SSL by libcurl better.

 * The command-line completion script (in contrib/) learned to
   complete "git cmd ^mas<HT>" to complete the negative end of
   reference to "git cmd ^master".
   (merge 49416ad22a cp/completion-negative-refs later to maint).

 * The existing "git fetch --depth=<n>" option was hard to use
   correctly when making the history of an existing shallow clone
   deeper.  A new option, "--deepen=<n>", has been added to make this
   easier to use.  "git clone" also learned "--shallow-since=<date>"
   and "--shallow-exclude=<tag>" options to make it easier to specify
   "I am interested only in the recent N months worth of history" and
   "Give me only the history since that version".
   (merge cccf74e2da nd/shallow-deepen later to maint).

 * It is a common mistake to say "git blame --reverse OLD path",
   expecting that the command line is dwimmed as if asking how lines
   in path in an old revision OLD have survived up to the current
   commit.
   (merge e1d09701a4 jc/blame-reverse later to maint).

 * http.emptyauth configuration is a way to allow an empty username to
   pass when attempting to authenticate using mechanisms like
   Kerberos.  We took an unspecified (NULL) username and sent ":"
   (i.e. no username, no password) to CURLOPT_USERPWD, but did not do
   the same when the username is explicitly set to an empty string.

 * "git clone" of a local repository can be done at the filesystem
   level, but the codepath did not check errors while copying and
   adjusting the file that lists alternate object stores.

 * Documentation for "git commit" was updated to clarify that "commit
   -p <paths>" adds to the current contents of the index to come up
   with what to commit.

 * A stray symbolic link in $GIT_DIR/refs/ directory could make name
   resolution loop forever, which has been corrected.

 * The "submodule.<name>.path" stored in .gitmodules is never copied
   to .git/config and such a key in .git/config has no meaning, but
   the documentation described it and submodule.<name>.url next to
   each other as if both belong to .git/config.  This has been fixed.

 * In a worktree connected to a repository elsewhere, created via "git
   worktree", "git checkout" attempts to protect users from confusion
   by refusing to check out a branch that is already checked out in
   another worktree.  However, this also prevented checking out a
   branch, which is designated as the primary branch of a bare
   reopsitory, in a worktree that is connected to the bare
   repository.  The check has been corrected to allow it.

 * "git rebase" immediately after "git clone" failed to find the fork
   point from the upstream.

 * When fetching from a remote that has many tags that are irrelevant
   to branches we are following, we used to waste way too many cycles
   when checking if the object pointed at by a tag (that we are not
   going to fetch!) exists in our repository too carefully.

 * Protect our code from over-eager compilers.

 * Recent git allows submodule.<name>.branch to use a special token
   "." instead of the branch name; the documentation has been updated
   to describe it.

 * A hot-fix for a test added by a recent topic that went to both
   'master' and 'maint' already.

 * "git send-email" attempts to pick up valid e-mails from the
   trailers, but people in real world write non-addresses there, like
   "Cc: Stable <add@re.ss> # 4.8+", which broke the output depending
   on the availability and vintage of Mail::Address perl module.
   (merge dcfafc5214 mm/send-email-cc-cruft-after-address later to maint).

 * The Travis CI configuration we ship ran the tests with --verbose
   option but this risks non-TAP output that happens to be "ok" to be
   misinterpreted as TAP signalling a test that passed.  This resulted
   in unnecessary failure.  This has been corrected by introducing a
   new mode to run our tests in the test harness to send the verbose
   output separately to the log file.

 * Some AsciiDoc formatter mishandles a displayed illustration with
   tabs in it.  Adjust a few of them in merge-base documentation to
   work around them.

 * A minor regression fix for "git submodule" that was introduced
   when more helper functions were reimplemented in C.
   (merge 77b63ac31e sb/submodule-ignore-trailing-slash later to maint).

 * The code that we have used for the past 10+ years to cycle
   4-element ring buffers turns out to be not quite portable in
   theoretical world.
   (merge bb84735c80 rs/ring-buffer-wraparound later to maint).

 * "git daemon" used fixed-length buffers to turn URL to the
   repository the client asked for into the server side directory
   path, using snprintf() to avoid overflowing these buffers, but
   allowed possibly truncated paths to the directory.  This has been
   tightened to reject such a request that causes overlong path to be
   required to serve.
   (merge 6bdb0083be jk/daemon-path-ok-check-truncation later to maint).

 * Recent update to git-sh-setup (a library of shell functions that
   are used by our in-tree scripted Porcelain commands) included
   another shell library git-sh-i18n without specifying where it is,
   relying on the $PATH.  This has been fixed to be more explicit by
   prefixing $(git --exec-path) output in front.
   (merge 1073094f30 ak/sh-setup-dot-source-i18n-fix later to maint).

 * Fix for a racy false-positive test failure.
   (merge fdf4f6c79b as/merge-attr-sleep later to maint).

 * Portability update and workaround for builds on recent Mac OS X.
   (merge a296bc0132 ls/macos-update later to maint).

 * Other minor doc, test and build updates and code cleanups.
   (merge 5c238e29a8 jk/common-main later to maint).
   (merge 5a5749e45b ak/pre-receive-hook-template-modefix later to maint).
   (merge 6d834ac8f1 jk/rebase-config-insn-fmt-docfix later to maint).
   (merge de9f7fa3b0 rs/commit-pptr-simplify later to maint).
   (merge 4259d693fc sc/fmt-merge-msg-doc-markup-fix later to maint).
   (merge 28fab7b23d nd/test-helpers later to maint).
   (merge c2bb0c1d1e rs/cocci later to maint).
   (merge 3285b7badb ps/common-info-doc later to maint).

----------------------------------------------------------------

Changes since v2.10.0 are as follows:

Aaron M Watson (1):
      stash: allow stashes to be referenced by index only

Alex Henrie (5):
      am: put spaces around pipe in usage string
      cat-file: put spaces around pipes in usage string
      git-rebase--interactive: fix English grammar
      git-merge-octopus: do not capitalize "octopus"
      unpack-trees: do not capitalize "working"

Alex Riesen (2):
      git-gui: support for $FILENAMES in tool definitions
      git-gui: ensure the file in the diff pane is in the list of selected files

Alexander Shopov (2):
      git-gui i18n: Updated Bulgarian translation (565,0f,0u)
      git-gui: Mark 'All' in remote.tcl for translation

Anders Kaseorg (3):
      imap-send: Tell cURL to use imap:// or imaps://
      pre-receive.sample: mark it executable
      git-sh-setup: be explicit where to dot-source git-sh-i18n from.

Andreas Schwab (2):
      t6026-merge-attr: don't fail if sleep exits early
      t6026-merge-attr: ensure that the merge driver was called

Beat Bolli (1):
      SubmittingPatches: use gitk's "Copy commit summary" format

Brandon Williams (6):
      pathspec: remove unnecessary function prototypes
      git: make super-prefix option
      ls-files: optionally recurse into submodules
      ls-files: pass through safe options for --recurse-submodules
      ls-files: add pathspec matching for submodules
      submodules doc: update documentation for "." used for submodule branches

Brian Henderson (3):
      diff-highlight: add some tests
      diff-highlight: add failing test for handling --graph output
      diff-highlight: add support for --graph output

Chris Packham (1):
      completion: support excluding refs

Christian Couder (43):
      apply: make some names more specific
      apply: move 'struct apply_state' to apply.h
      builtin/apply: make apply_patch() return -1 or -128 instead of die()ing
      builtin/apply: read_patch_file() return -1 instead of die()ing
      builtin/apply: make find_header() return -128 instead of die()ing
      builtin/apply: make parse_chunk() return a negative integer on error
      builtin/apply: make parse_single_patch() return -1 on error
      builtin/apply: make parse_whitespace_option() return -1 instead of die()ing
      builtin/apply: make parse_ignorewhitespace_option() return -1 instead of die()ing
      builtin/apply: move init_apply_state() to apply.c
      apply: make init_apply_state() return -1 instead of exit()ing
      builtin/apply: make check_apply_state() return -1 instead of die()ing
      builtin/apply: move check_apply_state() to apply.c
      builtin/apply: make apply_all_patches() return 128 or 1 on error
      builtin/apply: make parse_traditional_patch() return -1 on error
      builtin/apply: make gitdiff_*() return 1 at end of header
      builtin/apply: make gitdiff_*() return -1 on error
      builtin/apply: change die_on_unsafe_path() to check_unsafe_path()
      builtin/apply: make build_fake_ancestor() return -1 on error
      builtin/apply: make remove_file() return -1 on error
      builtin/apply: make add_conflicted_stages_file() return -1 on error
      builtin/apply: make add_index_file() return -1 on error
      builtin/apply: make create_file() return -1 on error
      builtin/apply: make write_out_one_result() return -1 on error
      builtin/apply: make write_out_results() return -1 on error
      unpack-objects: add --max-input-size=<size> option
      builtin/apply: make try_create_file() return -1 on error
      builtin/apply: make create_one_file() return -1 on error
      builtin/apply: rename option parsing functions
      apply: rename and move opt constants to apply.h
      apply: move libified code from builtin/apply.c to apply.{c,h}
      apply: make some parsing functions static again
      apply: use error_errno() where possible
      apply: make it possible to silently apply
      apply: don't print on stdout in verbosity_silent mode
      usage: add set_warn_routine()
      usage: add get_error_routine() and get_warn_routine()
      apply: change error_routine when silent
      apply: refactor `git apply` option parsing
      apply: pass apply state to build_fake_ancestor()
      apply: learn to use a different index file
      builtin/am: use apply API in run_apply()
      split-index: s/eith/with/ typo fix

David Aguilar (4):
      mergetool: add copyright
      mergetool: move main program flow into a main() function
      mergetool: honor diff.orderFile
      mergetool: honor -O<orderfile>

David Turner (11):
      rename_ref_available(): add docstring
      refs: add methods for reflog
      refs: add method for initial ref transaction commit
      refs: make delete_refs() virtual
      refs: add methods to init refs db
      refs: add method to rename refs
      refs: make lock generic
      refs: implement iteration over only per-worktree refs
      add David Turner's Two Sigma address
      fsck: handle bad trees like other errors
      http: http.emptyauth should allow empty (not just NULL) usernames

Dennis Kaarsemaker (1):
      worktree: allow the main brach of a bare repository to be checked out

Dimitriy Ryazantcev (2):
      l10n: ru.po: update Russian translation
      git-gui: Update Russian translation

Elia Pinto (6):
      t5541-http-push-smart.sh: use the GIT_TRACE_CURL environment var
      test-lib.sh: preserve GIT_TRACE_CURL from the environment
      t5550-http-fetch-dumb.sh: use the GIT_TRACE_CURL environment var
      t5551-http-fetch-smart.sh: use the GIT_TRACE_CURL environment var
      git-check-ref-format.txt: fixup documentation
      git-gui/po/glossary/txt-to-pot.sh: use the $( ... ) construct for command substitution

Emily Xie (1):
      pathspec: warn on empty strings as pathspec

Eric Wong (5):
      http: warn on curl_multi_add_handle failures
      http: consolidate #ifdefs for curl_multi_remove_handle
      http: always remove curl easy from curlm session on release
      git-svn: reduce scope of input record separator change
      git-svn: "git worktree" awareness

Gavin Lambert (1):
      git-svn: do not reuse caches memoized for a different architecture

Ian Kelling (2):
      gitweb: remove unused guess_file_syntax() parameter
      gitweb: use highlight's shebang detection

Jacob Keller (9):
      format-patch: show 0/1 and 1/1 for singleton patch with cover letter
      cache: add empty_tree_oid object and helper function
      graph: add support for --line-prefix on all graph-aware output
      diff: prepare for additional submodule formats
      allow do_submodule_path to work even if submodule isn't checked out
      submodule: convert show_submodule_summary to use struct object_id *
      submodule: refactor show_submodule_summary with helper function
      diff: teach diff to display submodule difference with an inline diff
      rev-list: use hdr_termination instead of a always using a newline

Jakub Narębski (1):
      configure.ac: improve description of NO_REGEX test

Jean-Noël AVILA (1):
      i18n: i18n: diff: mark die messages for translation

Jeff Hostetler (9):
      status: rename long-format print routines
      status: cleanup API to wt_status_print
      status: support --porcelain[=<version>]
      status: collect per-file data for --porcelain=v2
      status: print per-file porcelain v2 status data
      status: print branch info with --porcelain=v2 --branch
      git-status.txt: describe --porcelain=v2 format
      test-lib-functions.sh: add lf_to_nul helper
      status: unit tests for --porcelain=v2

Jeff King (115):
      rebase-interactive: drop early check for valid ident
      provide an initializer for "struct object_info"
      sha1_file: make packed_object_info public
      pack-objects: break delta cycles before delta-search phase
      pack-objects: use mru list when iterating over packs
      gc: default aggressive depth to 50
      cache_or_unpack_entry: drop keep_cache parameter
      clear_delta_base_cache_entry: use a more descriptive name
      release_delta_base_cache: reuse existing detach function
      delta_base_cache: use list.h for LRU
      delta_base_cache: drop special treatment of blobs
      delta_base_cache: use hashmap.h
      t/perf: add basic perf tests for delta base cache
      index-pack: add --max-input-size=<size> option
      receive-pack: allow a maximum input size to be specified
      test-lib: drop PID from test-results/*.count
      diff-highlight: ignore test cruft
      diff-highlight: add multi-byte tests
      diff-highlight: avoid highlighting combined diffs
      error_errno: use constant return similar to error()
      color_parse_mem: initialize "struct color" temporary
      t5305: move cleanup into test block
      t5305: drop "dry-run" of unpack-objects
      t5305: use "git -C"
      t5305: simplify packname handling
      pack-objects: walk tag chains for --include-tag
      remote-curl: handle URLs without protocol
      patch-ids: turn off rename detection
      add_delta_base_cache: use list_for_each_safe
      patch-ids: refuse to compute patch-id for merge commit
      hash-object: always try to set up the git repository
      patch-id: use RUN_SETUP_GENTLY
      diff: skip implicit no-index check when given --no-index
      diff: handle --no-index prefixes consistently
      diff: always try to set up the repository
      pager: remove obsolete comment
      pager: stop loading git_default_config()
      pager: make pager_program a file-local static
      pager: use callbacks instead of configset
      pager: handle early config
      t1302: use "git -C"
      test-config: setup git directory
      config: only read .git/config from configured repos
      init: expand comments explaining config trickery
      init: reset cached config when entering new repo
      t1007: factor out repeated setup
      verify_packfile: check pack validity before accessing data
      clone: pass --progress decision to recursive submodules
      docs/cvsimport: prefer cvs-fast-export to parsecvs
      docs/cvs-migration: update link to cvsps homepage
      docs/cvs-migration: mention cvsimport caveats
      ident: handle NULL ai_canonname
      get_sha1: detect buggy calls with multiple disambiguators
      get_sha1: avoid repeating ourselves via ONLY_TO_DIE
      get_sha1: propagate flags to child functions
      get_short_sha1: parse tags when looking for treeish
      get_short_sha1: refactor init of disambiguation code
      get_short_sha1: NUL-terminate hex prefix
      get_short_sha1: mark ambiguity error for translation
      sha1_array: let callbacks interrupt iteration
      for_each_abbrev: drop duplicate objects
      get_short_sha1: list ambiguous objects on error
      xdiff: rename "struct group" to "struct xdlgroup"
      get_short_sha1: make default disambiguation configurable
      tree-walk: be more specific about corrupt tree errors
      graph: fix extra spaces in graph_padding_line
      t5613: drop reachable_via function
      t5613: drop test_valid_repo function
      t5613: use test_must_fail
      t5613: whitespace/style cleanups
      t5613: do not chdir in main process
      find_unique_abbrev: move logic out of get_short_sha1()
      clone: detect errors in normalize_path_copy
      files_read_raw_ref: avoid infinite loop on broken symlinks
      files_read_raw_ref: prevent infinite retry loops in general
      t5613: clarify "too deep" recursion tests
      link_alt_odb_entry: handle normalize_path errors
      link_alt_odb_entry: refactor string handling
      alternates: provide helper for adding to alternates list
      alternates: provide helper for allocating alternate
      alternates: encapsulate alt->base munging
      alternates: use a separate scratch space
      fill_sha1_file: write "boring" characters
      alternates: store scratch buffer as strbuf
      fill_sha1_file: write into a strbuf
      count-objects: report alternates via verbose mode
      sha1_file: always allow relative paths to alternates
      alternates: use fspathcmp to detect duplicates
      check_connected: accept an env argument
      tmp-objdir: introduce API for temporary object directories
      receive-pack: quarantine objects until pre-receive accepts
      tmp-objdir: put quarantine information in the environment
      tmp-objdir: do not migrate files starting with '.'
      upload-pack: use priority queue in reachable() check
      merge-base: handle --fork-point without reflog
      fetch: use "quick" has_sha1_file for tag following
      test-lib: handle TEST_OUTPUT_DIRECTORY with spaces
      test-lib: add --verbose-log option
      travis: use --verbose-log test option
      test-lib: bail out when "-v" used under "prove"
      daemon: detect and reject too-long paths
      read info/{attributes,exclude} only when in repository
      test-*-cache-tree: setup git dir
      find_unique_abbrev: use 4-buffer ring
      diff_unique_abbrev: rename to diff_aligned_abbrev
      diff_aligned_abbrev: use "struct oid"
      diff: handle sha1 abbreviations outside of repository
      git-compat-util: move content inside ifdef/endif guards
      doc: fix missing "::" in config list
      t0021: use write_script to create rot13 shell script
      t0021: put $TEST_ROOT in $PATH
      t0021: use $PERL_PATH for rot13-filter.pl
      t0021: fix filehandle usage on older perl
      alternates: re-allow relative paths from environment
      sequencer: silence -Wtautological-constant-out-of-range-compare

Jiang Xin (1):
      l10n: zh_CN: fixed some typos for git 2.10.0

Johannes Schindelin (60):
      cat-file: fix a grammo in the man page
      sequencer: lib'ify sequencer_pick_revisions()
      sequencer: do not die() in do_pick_commit()
      sequencer: lib'ify write_message()
      sequencer: lib'ify do_recursive_merge()
      sequencer: lib'ify do_pick_commit()
      sequencer: lib'ify walk_revs_populate_todo()
      sequencer: lib'ify prepare_revs()
      sequencer: lib'ify read_and_refresh_cache()
      sequencer: lib'ify read_populate_todo()
      sequencer: lib'ify read_populate_opts()
      sequencer: lib'ify create_seq_dir()
      sequencer: lib'ify save_head()
      sequencer: lib'ify save_todo()
      sequencer: lib'ify save_opts()
      sequencer: lib'ify fast_forward_to()
      sequencer: lib'ify checkout_fast_forward()
      sequencer: ensure to release the lock when we could not read the index
      cat-file: introduce the --filters option
      cat-file --textconv/--filters: allow specifying the path separately
      cat-file: support --textconv/--filters in batch mode
      git-gui: respect commit.gpgsign again
      regex: -G<pattern> feeds a non NUL-terminated string to regexec() and fails
      regex: add regexec_buf() that can work on a non NUL-terminated string
      regex: use regexec_buf()
      pull: drop confusing prefix parameter of die_on_unclean_work_tree()
      pull: make code more similar to the shell script again
      wt-status: make the require_clean_work_tree() function reusable
      wt-status: export also the has_un{staged,committed}_changes() functions
      wt-status: teach has_{unstaged,uncommitted}_changes() about submodules
      wt-status: begin error messages with lower-case
      reset: fix usage
      sequencer: use static initializers for replay_opts
      sequencer: use memoized sequencer directory path
      sequencer: avoid unnecessary indirection
      sequencer: future-proof remove_sequencer_state()
      sequencer: plug memory leaks for the option values
      sequencer: future-proof read_populate_todo()
      sequencer: refactor the code to obtain a short commit name
      sequencer: completely revamp the "todo" script parsing
      sequencer: strip CR from the todo script
      sequencer: avoid completely different messages for different actions
      sequencer: get rid of the subcommand field
      sequencer: remember the onelines when parsing the todo file
      sequencer: prepare for rebase -i's commit functionality
      sequencer: introduce a helper to read files written by scripts
      sequencer: allow editing the commit message on a case-by-case basis
      sequencer: support amending commits
      sequencer: support cleaning up commit messages
      sequencer: left-trim lines read from the script
      sequencer: stop releasing the strbuf in write_message()
      sequencer: roll back lock file if write_message() failed
      sequencer: refactor write_message() to take a pointer/length
      sequencer: teach write_message() to append an optional LF
      sequencer: remove overzealous assumption in rebase -i mode
      sequencer: mark action_name() for translation
      sequencer: quote filenames in error messages
      sequencer: start error messages consistently with lower case
      sequencer: mark all error messages for translation
      t6026: ensure that long-running script really is

Johannes Sixt (9):
      t9903: fix broken && chain
      t6026-merge-attr: clean up background process at end of test case
      t3700-add: create subdirectory gently
      t3700-add: do not check working tree file mode without POSIXPERM
      t0060: sidestep surprising path mangling results on Windows
      t0021: expect more variations in the output of uniq -c
      t0021: compute file size with a single process instead of a pipeline
      t0021, t5615: use $PWD instead of $(pwd) in PATH-like shell variables
      t6026: clarify the point of "kill $(cat sleep.pid)"

Jonathan Nieder (1):
      connect: tighten check for unexpected early hang up

Jonathan Tan (14):
      tests: move test_lazy_prereq JGIT to test-lib.sh
      connect: advertized capability is not a ref
      mailinfo: separate in-body header processing
      mailinfo: make is_scissors_line take plain char *
      mailinfo: handle in-body header continuations
      fetch-pack: do not reset in_vain on non-novel acks
      trailer: improve const correctness
      trailer: use list.h for doubly-linked list
      trailer: streamline trailer item create and add
      trailer: make args have their own struct
      trailer: clarify failure modes in parse_trailer
      trailer: allow non-trailers in trailer block
      trailer: forbid leading whitespace in trailers
      trailer: support values folded to multiple lines

Josh Triplett (2):
      format-patch: show base info before email signature
      format-patch: add "--rfc" for the common case of [RFC PATCH]

Junio C Hamano (48):
      blame: improve diagnosis for "--reverse NEW"
      blame: dwim "blame --reverse OLD" as "blame --reverse OLD.."
      am: refactor read_author_script()
      diff.c: remove output_prefix_length field
      submodule: avoid auto-discovery in prepare_submodule_repo_env()
      symbolic-ref -d: do not allow removal of HEAD
      Prepare for 2.9.4
      Start the 2.11 cycle
      First batch for 2.11
      Second batch for 2.11
      Third batch for 2.11
      Start preparing for 2.10.1
      Fourth batch for 2.11
      streaming: make sure to notice corrupt object
      unpack_sha1_header(): detect malformed object header
      Fifth batch for 2.11
      worktree: honor configuration variables
      blame: use DEFAULT_ABBREV macro
      Prepare for 2.10.1
      Sixth batch for 2.11
      diff_unique_abbrev(): document its assumption and limitation
      abbrev: add FALLBACK_DEFAULT_ABBREV to prepare for auto sizing
      abbrev: prepare for new world order
      Git 2.10.1
      Seventh batch for 2.11
      t4015: split out the "setup" part of ws-error-highlight test
      diff.c: refactor parse_ws_error_highlight()
      diff.c: move ws-error-highlight parsing helpers up
      diff: introduce diff.wsErrorHighlight option
      Eighth batch for 2.11
      Ninth batch for 2.11
      Start preparing for 2.10.2
      cocci: refactor common patterns to use xstrdup_or_null()
      Tenth batch for 2.11
      t3700: fix broken test under !SANITY
      transport: pass summary_width down the callchain
      fetch: pass summary_width down the callchain
      transport: allow summary-width to be computed dynamically
      transport: compute summary-width dynamically
      Eleventh batch for 2.11
      Getting ready for 2.11-rc0
      Git 2.10.2
      Git 2.11-rc0
      A bit of updates post -rc0
      Revert "t6026-merge-attr: ensure that the merge driver was called"
      Revert "t6026-merge-attr: don't fail if sleep exits early"
      t0021: remove debugging cruft
      Git 2.11.0-rc1

Karsten Blees (2):
      git-gui: unicode file name support on windows
      git-gui: handle the encoding of Git's output correctly

Kevin Daudt (2):
      t5100-mailinfo: replace common path prefix with variable
      mailinfo: unescape quoted-pair in header fields

Kirill Smelkov (3):
      pack-objects: respect --local/--honor-pack-keep/--incremental when bitmap is in use
      pack-objects: use reachability bitmap index when generating non-stdout pack
      t/perf/run: copy config.mak.autogen & friends to build area

Lars Schneider (20):
      travis-ci: ask homebrew for its path instead of hardcoding it
      convert: quote filter names in error messages
      convert: modernize tests
      run-command: move check_pipe() from write_or_die to run_command
      run-command: add clean_on_exit_handler
      pkt-line: rename packet_write() to packet_write_fmt()
      pkt-line: extract set_packet_header()
      pkt-line: add packet_write_fmt_gently()
      pkt-line: add packet_flush_gently()
      pkt-line: add packet_write_gently()
      pkt-line: add functions to read/write flush terminated packet streams
      convert: make apply_filter() adhere to standard Git error handling
      convert: prepare filter.<driver>.process option
      convert: add filter.<driver>.process option
      contrib/long-running-filter: add long running filter example
      sha1_file: rename git_open_noatime() to git_open()
      sha1_file: open window into packfiles with O_CLOEXEC
      read-cache: make sure file handles are not inherited by child processes
      Makefile: set NO_OPENSSL on macOS by default
      travis-ci: disable GIT_TEST_HTTPD for macOS

Linus Torvalds (1):
      abbrev: auto size the default abbreviation

Mantas Mikulėnas (1):
      contrib: add credential helper for libsecret

Matthieu Moy (4):
      Documentation/config: default for color.* is color.ui
      parse_mailboxes: accept extra text after <...> address
      t9000-addresses: update expected results after fix
      Git.pm: add comment pointing to t9000

Michael Haggerty (36):
      xdl_change_compact(): fix compaction heuristic to adjust ixo
      xdl_change_compact(): only use heuristic if group can't be matched
      is_blank_line(): take a single xrecord_t as argument
      recs_match(): take two xrecord_t pointers as arguments
      xdl_change_compact(): introduce the concept of a change group
      resolve_gitlink_ref(): eliminate temporary variable
      refs: rename struct ref_cache to files_ref_store
      refs: create a base class "ref_store" for files_ref_store
      add_packed_ref(): add a files_ref_store argument
      get_packed_ref(): add a files_ref_store argument
      resolve_missing_loose_ref(): add a files_ref_store argument
      {lock,commit,rollback}_packed_refs(): add files_ref_store arguments
      refs: reorder definitions
      resolve_packed_ref(): rename function from resolve_missing_loose_ref()
      resolve_gitlink_packed_ref(): remove function
      read_raw_ref(): take a (struct ref_store *) argument
      resolve_ref_recursively(): new function
      resolve_gitlink_ref(): implement using resolve_ref_recursively()
      resolve_gitlink_ref(): avoid memory allocation in many cases
      resolve_gitlink_ref(): rename path parameter to submodule
      refs: make read_raw_ref() virtual
      refs: make verify_refname_available() virtual
      refs: make pack_refs() virtual
      refs: make create_symref() virtual
      refs: make peel_ref() virtual
      repack_without_refs(): add a files_ref_store argument
      lock_raw_ref(): add a files_ref_store argument
      commit_ref_update(): add a files_ref_store argument
      lock_ref_for_update(): add a files_ref_store argument
      lock_ref_sha1_basic(): add a files_ref_store argument
      split_symref_update(): add a files_ref_store argument
      files_ref_iterator_begin(): take a ref_store argument
      refs: add method iterator_begin
      diff: improve positioning of add/delete blocks in diffs
      parse-options: add parse_opt_unknown_cb()
      blame: honor the diff heuristic options and config

Michael J Gruber (1):
      gpg-interface: use more status letters

Mike Ralphson (1):
      vcs-svn/fast_export: fix timestamp fmt specifiers

Nguyễn Thái Ngọc Duy (40):
      remote-curl.c: convert fetch_git() to use argv_array
      transport-helper.c: refactor set_helper_option()
      upload-pack: move shallow deepen code out of receive_needs()
      upload-pack: move "shallow" sending code out of deepen()
      upload-pack: remove unused variable "backup"
      upload-pack: move "unshallow" sending code out of deepen()
      upload-pack: use skip_prefix() instead of starts_with()
      upload-pack: tighten number parsing at "deepen" lines
      upload-pack: make check_non_tip() clean things up on error
      upload-pack: move rev-list code out of check_non_tip()
      fetch-pack: use skip_prefix() instead of starts_with()
      fetch-pack: use a common function for verbose printing
      fetch-pack.c: mark strings for translating
      fetch-pack: use a separate flag for fetch in deepening mode
      shallow.c: implement a generic shallow boundary finder based on rev-list
      upload-pack: add deepen-since to cut shallow repos based on time
      fetch: define shallow boundary with --shallow-since
      clone: define shallow clone boundary based on time with --shallow-since
      t5500, t5539: tests for shallow depth since a specific date
      refs: add expand_ref()
      upload-pack: support define shallow boundary by excluding revisions
      fetch: define shallow boundary with --shallow-exclude
      clone: define shallow clone boundary with --shallow-exclude
      t5500, t5539: tests for shallow depth excluding a ref
      upload-pack: split check_unreachable() in two, prep for get_reachable_list()
      upload-pack: add get_reachable_list()
      fetch, upload-pack: --deepen=N extends shallow boundary by N commits
      checkout: add some spaces between code and comment
      checkout.txt: document a common case that ignores ambiguation rules
      checkout: fix ambiguity check in subdir
      init: correct re-initialization from a linked worktree
      init: call set_git_dir_init() from within init_db()
      init: kill set_git_dir_init()
      init: do not set unnecessary core.worktree
      init: kill git_link variable
      git-commit.txt: clarify --patch mode with pathspec
      diff-lib: allow ita entries treated as "not yet exist in index"
      diff: add --ita-[in]visible-in-index
      commit: fix empty commit creation when there's no changes but ita entries
      commit: don't be fooled by ita entries when creating initial commit

Olaf Hering (1):
      git-gui: sort entries in tclIndex

Orgad Shaneh (1):
      git-gui: Do not reset author details on amend

Pat Thoyts (7):
      Allow keyboard control to work in the staging widgets.
      Amend tab ordering and text widget border and highlighting.
      git-gui: fix detection of Cygwin
      git-gui (Windows): use git-gui.exe in `Create Desktop Shortcut`
      git-gui: maintain backwards compatibility for merge syntax
      git-gui: avoid persisting modified author identity
      git-gui: set version 0.21

Patrick Steinhardt (1):
      doc: fix location of 'info/' with $GIT_COMMON_DIR

Petr Stodulka (1):
      http: control GSSAPI credential delegation

Philip Oakley (14):
      doc: use 'symmetric difference' consistently
      doc: revisions - name the left and right sides
      doc: show the actual left, right, and boundary marks
      doc: revisions: give headings for the two and three dot notations
      doc: revisions: extra clarification of <rev>^! notation effects
      doc: revisions: single vs multi-parent notation comparison
      doc: gitrevisions - use 'reachable' in page description
      doc: gitrevisions - clarify 'latter case' is revision walk
      doc: revisions - define `reachable`
      doc: revisions - clarify reachability examples
      doc: revisions: show revision expansion in examples
      doc: revisions: sort examples and fix alignment of the unchanged
      doc: fix merge-base ASCII art tab spacing
      doc: fix the 'revert a faulty merge' ASCII art tab spacing

Pranit Bauva (2):
      rev-list-options: clarify the usage of --reverse
      t0040: convert all possible tests to use `test-parse-options --expect`

Ralf Thielow (6):
      help: introduce option --exclude-guides
      help: make option --help open man pages only for Git commands
      rebase -i: improve advice on bad instruction lines
      l10n: de.po: fix translation of autostash
      l10n: de.po: translate 260 new messages
      fetch-pack.c: correct command at the beginning of an error message

Ray Chen (1):
      l10n: zh_CN: review for git v2.10.0 l10n

René Scharfe (36):
      compat: move strdup(3) replacement to its own file
      introduce hex2chr() for converting two hexadecimal digits to a character
      strbuf: use valid pointer in strbuf_remove()
      checkout: constify parameters of checkout_stage() and checkout_merged()
      unpack-trees: pass checkout state explicitly to check_updates()
      sha1_file: use llist_mergesort() for sorting packs
      xdiff: fix merging of hunks with -W context and -u context
      contrib/coccinelle: fix semantic patch for oid_to_hex_r()
      add coccicheck make target
      use strbuf_addstr() for adding constant strings to a strbuf, part 2
      pretty: let %C(auto) reset all attributes
      introduce CHECKOUT_INIT
      add COPY_ARRAY
      use COPY_ARRAY
      git-gui: stop using deprecated merge syntax
      gitignore: ignore output files of coccicheck make target
      use strbuf_addstr() instead of strbuf_addf() with "%s", part 2
      use strbuf_add_unique_abbrev() for adding short hashes, part 2
      add QSORT
      use QSORT
      remove unnecessary check before QSORT
      coccicheck: use --all-includes by default
      use QSORT, part 2
      pretty: avoid adding reset for %C(auto) if output is empty
      coccicheck: make transformation for strbuf_addf(sb, "...") more precise
      show-branch: use QSORT
      remove unnecessary NULL check before free(3)
      use strbuf_add_unique_abbrev() for adding short hashes, part 3
      pretty: fix document link for color specification
      avoid pointer arithmetic involving NULL in FLEX_ALLOC_MEM
      inline xalloc_flex() into FLEXPTR_ALLOC_MEM
      hex: make wraparound of the index into ring-buffer explicit
      valgrind: support test helpers
      commit: simplify building parents list
      sha1_name: make wraparound of the index into ring-buffer explicit
      cocci: avoid self-references in object_id transformations

Ronnie Sahlberg (2):
      refs: add a backend method structure
      refs: add a transaction_commit() method

SZEDER Gábor (1):
      ref-filter: strip format option after a field name only once while parsing

Satoshi Yasushima (6):
      git-gui: consistently use the same word for "remote" in Japanese
      git-gui: consistently use the same word for "blame" in Japanese
      git-gui: apply po template to Japanese translation
      git-gui: add Japanese language code
      git-gui: update Japanese translation
      git-gui: update Japanese information

Stefan Beller (16):
      t7408: modernize style
      t7408: merge short tests, factor out testing method
      submodule--helper module-clone: allow multiple references
      submodule--helper update-clone: allow multiple references
      clone: factor out checking for an alternate path
      clone: clarify option_reference as required
      clone: implement optional references
      clone: recursive and reference option triggers submodule alternates
      xdiff: remove unneeded declarations
      transport: report missing submodule pushes consistently on stderr
      diff.c: use diff_options directly
      diff: omit found pointer from emit_callback
      diff: remove dead code
      submodule: ignore trailing slash on superproject URL
      submodule: ignore trailing slash in relative url
      documentation: improve submodule.<name>.{url, path} description

Stefan Christ (1):
      Documentation/fmt-merge-msg: fix markup in example

Thomas Gummerer (4):
      add: document the chmod option
      update-index: add test for chmod flags
      read-cache: introduce chmod_index_entry
      add: modify already added files when --chmod is given

Vasco Almeida (32):
      l10n: pt_PT: update Portuguese translation
      l10n: pt_PT: update Portuguese repository info
      i18n: blame: mark error messages for translation
      i18n: branch: mark option description for translation
      i18n: config: mark error message for translation
      i18n: merge-recursive: mark error messages for translation
      i18n: merge-recursive: mark verbose message for translation
      i18n: notes: mark error messages for translation
      notes: spell first word of error messages in lowercase
      i18n: receive-pack: mark messages for translation
      i18n: show-branch: mark error messages for translation
      i18n: show-branch: mark plural strings for translation
      i18n: update-index: mark warnings for translation
      i18n: commit: mark message for translation
      i18n: connect: mark die messages for translation
      i18n: ident: mark hint for translation
      i18n: notes-merge: mark die messages for translation
      i18n: stash: mark messages for translation
      git-gui i18n: mark strings for translation
      git-gui: l10n: add Portuguese translation
      git-gui i18n: internationalize use of colon punctuation
      git-gui i18n: mark "usage:" strings for translation
      git-gui: fix incorrect use of Tcl append command
      git-gui i18n: mark string in lib/error.tcl for translation
      t1512: become resilient to GETTEXT_POISON build
      i18n: apply: mark plural string for translation
      i18n: apply: mark info messages for translation
      i18n: apply: mark error messages for translation
      i18n: apply: mark error message for translation
      i18n: convert mark error messages for translation
      i18n: credential-cache--daemon: mark advice for translation
      i18n: diff: mark warnings for translation

Vegard Nossum (1):
      revision: new rev^-n shorthand for rev^n..rev

Younes Khoudli (1):
      doc: remove reference to the traditional layout in git-tag.txt

brian m. carlson (20):
      cache: convert struct cache_entry to use struct object_id
      builtin/apply: convert static functions to struct object_id
      builtin/blame: convert struct origin to use struct object_id
      builtin/log: convert some static functions to use struct object_id
      builtin/cat-file: convert struct expand_data to use struct object_id
      builtin/cat-file: convert some static functions to struct object_id
      builtin: convert textconv_object to use struct object_id
      streaming: make stream_blob_to_fd take struct object_id
      builtin/checkout: convert some static functions to struct object_id
      notes-merge: convert struct notes_merge_pair to struct object_id
      Convert read_mmblob to take struct object_id.
      builtin/blame: convert file to use struct object_id
      builtin/rm: convert to use struct object_id
      notes: convert init_notes to use struct object_id
      builtin/update-index: convert file to struct object_id
      sha1_name: convert get_sha1_mb to struct object_id
      refs: add an update_ref_oid function.
      builtin/am: convert to struct object_id
      builtin/commit-tree: convert to struct object_id
      builtin/reset: convert to use struct object_id

yaras (1):
      git-gui: fix initial git gui message encoding

Ævar Arnfjörð Bjarmason (3):
      gitweb: fix a typo in a comment
      gitweb: link to 7-char+ SHA-1s, not only 8-char+
      gitweb: link to "git describe"'d commits in log messages

Дилян Палаузов (1):
      ./configure.ac: detect SSL in libcurl using curl-config


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.11.0-rc0
@ 2016-10-31 21:49  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2016-10-31 21:49 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

An early preview release Git v2.11.0-rc0 is now available for
testing at the usual places.  It is comprised of 617 non-merge
commits since v2.10.0, contributed by 64 people, 14 of which are
new faces.

An updated, slightly slipped from the original, schedule is found at
http://tinyurl.com/gitCal and I am hoping that we can conclude this
cycle before US Thanksgiving.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.11.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.10.0 are as follows.
Welcome to the Git development community!

  Aaron M Watson, Brandon Williams, Brian Henderson, Emily Xie,
  Gavin Lambert, Ian Kelling, Jeff Hostetler, Mantas Mikulėnas,
  Petr Stodulka, Satoshi Yasushima, Stefan Christ, Vegard Nossum,
  yaras, and Younes Khoudli.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Ævar Arnfjörð Bjarmason, Alexander Shopov, Alex Henrie,
  Alex Riesen, Anders Kaseorg, Beat Bolli, brian m. carlson,
  Chris Packham, Christian Couder, David Aguilar, David Turner,
  Dennis Kaarsemaker, Dimitriy Ryazantcev, Elia Pinto, Eric Wong,
  Jacob Keller, Jakub Narębski, Jean-Noël AVILA, Jeff King,
  Jiang Xin, Johannes Schindelin, Johannes Sixt, Jonathan Nieder,
  Jonathan Tan, Josh Triplett, Junio C Hamano, Karsten Blees,
  Kevin Daudt, Kirill Smelkov, Lars Schneider, Linus Torvalds,
  Matthieu Moy, Michael Haggerty, Michael J Gruber, Mike Ralphson,
  Nguyễn Thái Ngọc Duy, Olaf Hering, Orgad Shaneh, Pat
  Thoyts, Philip Oakley, Pranit Bauva, Ralf Thielow, Ray Chen,
  René Scharfe, Ronnie Sahlberg, Stefan Beller, SZEDER Gábor,
  Thomas Gummerer, Vasco Almeida, and Дилян Палаузов.

----------------------------------------------------------------

Git 2.11 Release Notes (draft)
==============================

Backward compatibility notes.

 * An empty string used as a pathspec element has always meant
   'everything matches', but it is too easy to write a script that
   finds a path to remove in $path and run 'git rm "$paht"' by
   mistake (when the user meant to give "$path"), which ends up
   removing everything.  This release starts warning about the
   use of an empty string that is used for 'everything matches' and
   asks users to use a more explicit '.' for that instead.

   The hope is that existing users will not mind this change, and
   eventually the warning can be turned into a hard error, upgrading
   the deprecation into removal of this (mis)feature.

 * The historical argument order "git merge <msg> HEAD <commit>..."
   has been deprecated for quite some time, and will be removed in the
   next release (not this one).

 * The default abbreviation length, which has historically been 7, now
   scales as the repository grows, using the approximate number of
   objects in the reopsitory and a bit of math around the birthday
   paradox.  The logic suggests to use 12 hexdigits for the Linux
   kernel, and 9 to 10 for Git itself.


Updates since v2.10
-------------------

UI, Workflows & Features

 * Comes with new version of git-gui, now at its 0.21.0 tag.

 * "git format-patch --cover-letter HEAD^" to format a single patch
   with a separate cover letter now numbers the output as [PATCH 0/1]
   and [PATCH 1/1] by default.

 * An incoming "git push" that attempts to push too many bytes can now
   be rejected by setting a new configuration variable at the receiving
   end.

 * "git nosuchcommand --help" said "No manual entry for gitnosuchcommand",
   which was not intuitive, given that "git nosuchcommand" said "git:
   'nosuchcommand' is not a git command".

 * "git clone --resurse-submodules --reference $path $URL" is a way to
   reduce network transfer cost by borrowing objects in an existing
   $path repository when cloning the superproject from $URL; it
   learned to also peek into $path for presense of corresponding
   repositories of submodules and borrow objects from there when able.

 * The "git diff --submodule={short,log}" mechanism has been enhanced
   to allow "--submodule=diff" to show the patch between the submodule
   commits bound to the superproject.

 * Even though "git hash-objects", which is a tool to take an
   on-filesystem data stream and put it into the Git object store,
   allowed to perform the "outside-world-to-Git" conversions (e.g.
   end-of-line conversions and application of the clean-filter), and
   it had the feature on by default from very early days, its reverse
   operation "git cat-file", which takes an object from the Git object
   store and externalize for the consumption by the outside world,
   lacked an equivalent mechanism to run the "Git-to-outside-world"
   conversion.  The command learned the "--filters" option to do so.

 * Output from "git diff" can be made easier to read by selecting
   which lines are common and which lines are added/deleted
   intelligently when the lines before and after the changed section
   are the same.  A command line option is added to help with the
   experiment to find a good heuristics.

 * In some projects, it is common to use "[RFC PATCH]" as the subject
   prefix for a patch meant for discussion rather than application.  A
   new option "--rfc" was a short-hand for "--subject-prefix=RFC PATCH"
   to help the participants of such projects.

 * "git add --chmod=+x <pathspec>" added recently only toggled the
   executable bit for paths that are either new or modified. This has
   been corrected to flip the executable bit for all paths that match
   the given pathspec.

 * When "git format-patch --stdout" output is placed as an in-body
   header and it uses the RFC2822 header folding, "git am" failed to
   put the header line back into a single logical line.  The
   underlying "git mailinfo" was taught to handle this properly.

 * "gitweb" can spawn "highlight" to show blob contents with
   (programming) language-specific syntax highlighting, but only
   when the language is known.  "highlight" can however be told
   to make the guess itself by giving it "--force" option, which
   has been enabled.

 * "git gui" l10n to Portuguese.

 * When given an abbreviated object name that is not (or more
   realistically, "no longer") unique, we gave a fatal error
   "ambiguous argument".  This error is now accompanied by hints that
   lists the objects that begins with the given prefix.  During the
   course of development of this new feature, numerous minor bugs were
   uncovered and corrected, the most notable one of which is that we
   gave "short SHA1 xxxx is ambiguous." twice without good reason.

 * "git log rev^..rev" is an often-used revision range specification
   to show what was done on a side branch merged at rev.  This has
   gained a short-hand "rev^-1".  In general "rev^-$n" is the same as
   "^rev^$n rev", i.e. what has happened on other branches while the
   history leading to nth parent was looking the other way.

 * In recent versions of cURL, GSSAPI credential delegation is
   disabled by default due to CVE-2011-2192; introduce a configuration
   to selectively allow enabling this.
   (merge 26a7b23429 ps/http-gssapi-cred-delegation later to maint).

 * "git mergetool" learned to honor "-O<orderfile>" to control the
   order of paths to present to the end user.

 * "git diff/log --ws-error-highlight=<kind>" lacked the corresponding
   configuration variable to set it by default.

 * "git ls-files" learned "--recurse-submodules" option that can be
   used to get a listing of tracked files across submodules (i.e. this
   only works with "--cached" option, not for listing untracked or
   ignored files).  This would be a useful tool to sit on the upstream
   side of a pipe that is read with xargs to work on all working tree
   files from the top-level superproject.

 * A new credential helper that talks via "libsecret" with
   implementations of XDG Secret Service API has been added to
   contrib/credential/.

 * The GPG verification status shown in "%G?" pretty format specifier
   was not rich enough to differentiate a signature made by an expired
   key, a signature made by a revoked key, etc.  New output letters
   have been assigned to express them.

 * In addition to purely abbreviated commit object names, "gitweb"
   learned to turn "git describe" output (e.g. v2.9.3-599-g2376d31787)
   into clickable links in its output.

 * When new paths were added by "git add -N" to the index, it was
   enough to circumvent the check by "git commit" to refrain from
   making an empty commit without "--allow-empty".  The same logic
   prevented "git status" to show such a path as "new file" in the
   "Changes not staged for commit" section.

 * The smudge/clean filter API expect an external process is spawned
   to filter the contents for each path that has a filter defined.  A
   new type of "process" filter API has been added to allow the first
   request to run the filter for a path to spawn a single process, and
   all filtering need is served by this single process for multiple
   paths, reducing the process creation overhead.

 * The user always has to say "stash@{$N}" when naming a single
   element in the default location of the stash, i.e. reflogs in
   refs/stash.  The "git stash" command learned to accept "git stash
   apply 4" as a short-hand for "git stash apply stash@{4}".


Performance, Internal Implementation, Development Support etc.

 * The delta-base-cache mechanism has been a key to the performance in
   a repository with a tightly packed packfile, but it did not scale
   well even with a larger value of core.deltaBaseCacheLimit.

 * Enhance "git status --porcelain" output by collecting more data on
   the state of the index and the working tree files, which may
   further be used to teach git-prompt (in contrib/) to make fewer
   calls to git.

 * Extract a small helper out of the function that reads the authors
   script file "git am" internally uses.
   (merge a77598e jc/am-read-author-file later to maint).

 * Lifts calls to exit(2) and die() higher in the callchain in
   sequencer.c files so that more helper functions in it can be used
   by callers that want to handle error conditions themselves.

 * "git am" has been taught to make an internal call to "git apply"'s
   innards without spawning the latter as a separate process.

 * The ref-store abstraction was introduced to the refs API so that we
   can plug in different backends to store references.

 * The "unsigned char sha1[20]" to "struct object_id" conversion
   continues.  Notable changes in this round includes that ce->sha1,
   i.e. the object name recorded in the cache_entry, turns into an
   object_id.

 * JGit can show a fake ref "capabilities^{}" to "git fetch" when it
   does not advertise any refs, but "git fetch" was not prepared to
   see such an advertisement.  When the other side disconnects without
   giving any ref advertisement, we used to say "there may not be a
   repository at that URL", but we may have seen other advertisement
   like "shallow" and ".have" in which case we definitely know that a
   repository is there.  The code to detect this case has also been
   updated.

 * Some codepaths in "git pack-objects" were not ready to use an
   existing pack bitmap; now they are and as the result they have
   become faster.

 * The codepath in "git fsck" to detect malformed tree objects has
   been updated not to die but keep going after detecting them.

 * We call "qsort(array, nelem, sizeof(array[0]), fn)", and most of
   the time third parameter is redundant.  A new QSORT() macro lets us
   omit it.

 * "git pack-objects" in a repository with many packfiles used to
   spend a lot of time looking for/at objects in them; the accesses to
   the packfiles are now optimized by checking the most-recently-used
   packfile first.
   (merge c9af708b1a jk/pack-objects-optim-mru later to maint).

 * Codepaths involved in interacting alternate object store have
   been cleaned up.

 * In order for the receiving end of "git push" to inspect the
   received history and decide to reject the push, the objects sent
   from the sending end need to be made available to the hook and
   the mechanism for the connectivity check, and this was done
   traditionally by storing the objects in the receiving repository
   and letting "git gc" to expire it.  Instead, store the newly
   received objects in a temporary area, and make them available by
   reusing the alternate object store mechanism to them only while we
   decide if we accept the check, and once we decide, either migrate
   them to the repository or purge them immediately.

 * The require_clean_work_tree() helper was recreated in C when "git
   pull" was rewritten from shell; the helper is now made available to
   other callers in preparation for upcoming "rebase -i" work.

 * "git upload-pack" had its code cleaned-up and performance improved
   by reducing use of timestamp-ordered commit-list, which was
   replaced with a priority queue.

 * "git diff --no-index" codepath has been updated not to try to peek
   into .git/ directory that happens to be under the current
   directory, when we know we are operating outside any repository.

 * Update of the sequencer codebase to make it reusable to reimplement
   "rebase -i" continues.

 * Git generally does not explicitly close file descriptors that were
   open in the parent process when spawning a child process, but most
   of the time the child does not want to access them. As Windows does
   not allow removing or renaming a file that has a file descriptor
   open, a slow-to-exit child can even break the parent process by
   holding onto them.  Use O_CLOEXEC flag to open files in various
   codepaths.

 * Update "interpret-trailers" machinery and teaches it that people in
   real world write all sorts of crufts in the "trailer" that was
   originally designed to have the neat-o "Mail-Header: like thing"
   and nothing else.


Also contains various documentation updates and code clean-ups.


Fixes since v2.10
-----------------

Unless otherwise noted, all the fixes since v2.9 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * Clarify various ways to specify the "revision ranges" in the
   documentation.

 * "diff-highlight" script (in contrib/) learned to work better with
   "git log -p --graph" output.

 * The test framework left the number of tests and success/failure
   count in the t/test-results directory, keyed by the name of the
   test script plus the process ID.  The latter however turned out not
   to serve any useful purpose.  The process ID part of the filename
   has been removed.

 * Having a submodule whose ".git" repository is somehow corrupt
   caused a few commands that recurse into submodules loop forever.

 * "git symbolic-ref -d HEAD" happily removes the symbolic ref, but
   the resulting repository becomes an invalid one.  Teach the command
   to forbid removal of HEAD.

 * A test spawned a short-lived background process, which sometimes
   prevented the test directory from getting removed at the end of the
   script on some platforms.

 * Update a few tests that used to use GIT_CURL_VERBOSE to use the
   newer GIT_TRACE_CURL.

 * "git pack-objects --include-tag" was taught that when we know that
   we are sending an object C, we want a tag B that directly points at
   C but also a tag A that points at the tag B.  We used to miss the
   intermediate tag B in some cases.

 * Update Japanese translation for "git-gui".

 * "git fetch http::/site/path" did not die correctly and segfaulted
   instead.

 * "git commit-tree" stopped reading commit.gpgsign configuration
   variable that was meant for Porcelain "git commit" in Git 2.9; we
   forgot to update "git gui" to look at the configuration to match
   this change.

 * "git add --chmod=+x" added recently lacked documentation, which has
   been corrected.

 * "git log --cherry-pick" used to include merge commits as candidates
   to be matched up with other commits, resulting a lot of wasted time.
   The patch-id generation logic has been updated to ignore merges to
   avoid the wastage.

 * The http transport (with curl-multi option, which is the default
   these days) failed to remove curl-easy handle from a curlm session,
   which led to unnecessary API failures.

 * There were numerous corner cases in which the configuration files
   are read and used or not read at all depending on the directory a
   Git command was run, leading to inconsistent behaviour.  The code
   to set-up repository access at the beginning of a Git process has
   been updated to fix them.
   (merge 4d0efa1 jk/setup-sequence-update later to maint).

 * "git diff -W" output needs to extend the context backward to
   include the header line of the current function and also forward to
   include the body of the entire current function up to the header
   line of the next one.  This process may have to merge to adjacent
   hunks, but the code forgot to do so in some cases.

 * Performance tests done via "t/perf" did not use the same set of
   build configuration if the user relied on autoconf generated
   configuration.

 * "git format-patch --base=..." feature that was recently added
   showed the base commit information after "-- " e-mail signature
   line, which turned out to be inconvenient.  The base information
   has been moved above the signature line.

 * More i18n.

 * Even when "git pull --rebase=preserve" (and the underlying "git
   rebase --preserve") can complete without creating any new commit
   (i.e. fast-forwards), it still insisted on having a usable ident
   information (read: user.email is set correctly), which was less
   than nice.  As the underlying commands used inside "git rebase"
   would fail with a more meaningful error message and advice text
   when the bogus ident matters, this extra check was removed.

 * "git gc --aggressive" used to limit the delta-chain length to 250,
   which is way too deep for gaining additional space savings and is
   detrimental for runtime performance.  The limit has been reduced to
   50.

 * Documentation for individual configuration variables to control use
   of color (like `color.grep`) said that their default value is
   'false', instead of saying their default is taken from `color.ui`.
   When we updated the default value for color.ui from 'false' to
   'auto' quite a while ago, all of them broke.  This has been
   corrected.

 * The pretty-format specifier "%C(auto)" used by the "log" family of
   commands to enable coloring of the output is taught to also issue a
   color-reset sequence to the output.

 * A shell script example in check-ref-format documentation has been
   fixed.

 * "git checkout <word>" does not follow the usual disambiguation
   rules when the <word> can be both a rev and a path, to allow
   checking out a branch 'foo' in a project that happens to have a
   file 'foo' in the working tree without having to disambiguate.
   This was poorly documented and the check was incorrect when the
   command was run from a subdirectory.

 * Some codepaths in "git diff" used regexec(3) on a buffer that was
   mmap(2)ed, which may not have a terminating NUL, leading to a read
   beyond the end of the mapped region.  This was fixed by introducing
   a regexec_buf() helper that takes a <ptr,len> pair with REG_STARTEND
   extension.

 * The procedure to build Git on Mac OS X for Travis CI hardcoded the
   internal directory structure we assumed HomeBrew uses, which was a
   no-no.  The procedure has been updated to ask HomeBrew things we
   need to know to fix this.

 * When "git rebase -i" is given a broken instruction, it told the
   user to fix it with "--edit-todo", but didn't say what the step
   after that was (i.e. "--continue").

 * Documentation around tools to import from CVS was fairly outdated.

 * "git clone --recurse-submodules" lost the progress eye-candy in
   recent update, which has been corrected.

 * A low-level function verify_packfile() was meant to show errors
   that were detected without dying itself, but under some conditions
   it didn't and died instead, which has been fixed.

 * When "git fetch" tries to find where the history of the repository
   it runs in has diverged from what the other side has, it has a
   mechanism to avoid digging too deep into irrelevant side branches.
   This however did not work well over the "smart-http" transport due
   to a design bug, which has been fixed.

 * In the codepath that comes up with the hostname to be used in an
   e-mail when the user didn't tell us, we looked at ai_canonname
   field in struct addrinfo without making sure it is not NULL first.

 * "git worktree", even though it used the default_abbrev setting that
   ought to be affected by core.abbrev configuration variable, ignored
   the variable setting.  The command has been taught to read the
   default set of configuration variables to correct this.

 * "git init" tried to record core.worktree in the repository's
   'config' file when GIT_WORK_TREE environment variable was set and
   it was different from where GIT_DIR appears as ".git" at its top,
   but the logic was faulty when .git is a "gitdir:" file that points
   at the real place, causing trouble in working trees that are
   managed by "git worktree".  This has been corrected.

 * Codepaths that read from an on-disk loose object were too loose in
   validating what they are reading is a proper object file and
   sometimes read past the data they read from the disk, which has
   been corrected.  H/t to Gustavo Grieco for reporting.

 * The original command line syntax for "git merge", which was "git
   merge <msg> HEAD <parent>...", has been deprecated for quite some
   time, and "git gui" was the last in-tree user of the syntax.  This
   is finally fixed, so that we can move forward with the deprecation.

 * An author name, that spelled a backslash-quoted double quote in the
   human readable part "My \"double quoted\" name", was not unquoted
   correctly while applying a patch from a piece of e-mail.

 * Doc update to clarify what "log -3 --reverse" does.

 * Almost everybody uses DEFAULT_ABBREV to refer to the default
   setting for the abbreviation, but "git blame" peeked into
   underlying variable bypassing the macro for no good reason.

 * The "graph" API used in "git log --graph" miscounted the number of
   output columns consumed so far when drawing a padding line, which
   has been fixed; this did not affect any existing code as nobody
   tried to write anything after the padding on such a line, though.

 * The code that parses the format parameter of for-each-ref command
   has seen a micro-optimization.

 * When we started cURL to talk to imap server when a new enough
   version of cURL library is available, we forgot to explicitly add
   imap(s):// before the destination.  To some folks, that didn't work
   and the library tried to make HTTP(s) requests instead.

 * The ./configure script generated from configure.ac was taught how
   to detect support of SSL by libcurl better.

 * The command-line completion script (in contrib/) learned to
   complete "git cmd ^mas<HT>" to complete the negative end of
   reference to "git cmd ^master".
   (merge 49416ad22a cp/completion-negative-refs later to maint).

 * The existing "git fetch --depth=<n>" option was hard to use
   correctly when making the history of an existing shallow clone
   deeper.  A new option, "--deepen=<n>", has been added to make this
   easier to use.  "git clone" also learned "--shallow-since=<date>"
   and "--shallow-exclude=<tag>" options to make it easier to specify
   "I am interested only in the recent N months worth of history" and
   "Give me only the history since that version".
   (merge cccf74e2da nd/shallow-deepen later to maint).

 * It is a common mistake to say "git blame --reverse OLD path",
   expecting that the command line is dwimmed as if asking how lines
   in path in an old revision OLD have survived up to the current
   commit.
   (merge e1d09701a4 jc/blame-reverse later to maint).

 * http.emptyauth configuration is a way to allow an empty username to
   pass when attempting to authenticate using mechanisms like
   Kerberos.  We took an unspecified (NULL) username and sent ":"
   (i.e. no username, no password) to CURLOPT_USERPWD, but did not do
   the same when the username is explicitly set to an empty string.

 * "git clone" of a local repository can be done at the filesystem
   level, but the codepath did not check errors while copying and
   adjusting the file that lists alternate object stores.

 * Documentation for "git commit" was updated to clarify that "commit
   -p <paths>" adds to the current contents of the index to come up
   with what to commit.

 * A stray symbolic link in $GIT_DIR/refs/ directory could make name
   resolution loop forever, which has been corrected.

 * The "submodule.<name>.path" stored in .gitmodules is never copied
   to .git/config and such a key in .git/config has no meaning, but
   the documentation described it and submodule.<name>.url next to
   each other as if both belong to .git/config.  This has been fixed.

 * In a worktree connected to a repository elsewhere, created via "git
   worktree", "git checkout" attempts to protect users from confusion
   by refusing to check out a branch that is already checked out in
   another worktree.  However, this also prevented checking out a
   branch, which is designated as the primary branch of a bare
   reopsitory, in a worktree that is connected to the bare
   repository.  The check has been corrected to allow it.

 * "git rebase" immediately after "git clone" failed to find the fork
   point from the upstream.

 * When fetching from a remote that has many tags that are irrelevant
   to branches we are following, we used to waste way too many cycles
   when checking if the object pointed at by a tag (that we are not
   going to fetch!) exists in our repository too carefully.

 * Protect our code from over-eager compilers.

 * Recent git allows submodule.<name>.branch to use a special token
   "." instead of the branch name; the documentation has been updated
   to describe it.

 * A hot-fix for a test added by a recent topic that went to both
   'master' and 'maint' already.

 * "git send-email" attempts to pick up valid e-mails from the
   trailers, but people in real world write non-addresses there, like
   "Cc: Stable <add@re.ss> # 4.8+", which broke the output depending
   on the availability and vintage of Mail::Address perl module.
   (merge dcfafc5214 mm/send-email-cc-cruft-after-address later to maint).

 * The Travis CI configuration we ship ran the tests with --verbose
   option but this risks non-TAP output that happens to be "ok" to be
   misinterpreted as TAP signalling a test that passed.  This resulted
   in unnecessary failure.  This has been corrected by introducing a
   new mode to run our tests in the test harness to send the verbose
   output separately to the log file.

 * Some AsciiDoc formatter mishandles a displayed illustration with
   tabs in it.  Adjust a few of them in merge-base documentation to
   work around them.

 * A minor regression fix for "git submodule" that was introduced
   when more helper functions were reimplemented in C.
   (merge 77b63ac31e sb/submodule-ignore-trailing-slash later to maint).

 * The code that we have used for the past 10+ years to cycle
   4-element ring buffers turns out to be not quite portable in
   theoretical world.
   (merge bb84735c80 rs/ring-buffer-wraparound later to maint).

 * "git daemon" used fixed-length buffers to turn URL to the
   repository the client asked for into the server side directory
   path, using snprintf() to avoid overflowing these buffers, but
   allowed possibly truncated paths to the directory.  This has been
   tightened to reject such a request that causes overlong path to be
   required to serve.
   (merge 6bdb0083be jk/daemon-path-ok-check-truncation later to maint).

 * Recent update to git-sh-setup (a library of shell functions that
   are used by our in-tree scripted Porcelain commands) included
   another shell library git-sh-i18n without specifying where it is,
   relying on the $PATH.  This has been fixed to be more explicit by
   prefixing $(git --exec-path) output in front.
   (merge 1073094f30 ak/sh-setup-dot-source-i18n-fix later to maint).

 * Other minor doc, test and build updates and code cleanups.
   (merge 5c238e29a8 jk/common-main later to maint).
   (merge 5a5749e45b ak/pre-receive-hook-template-modefix later to maint).
   (merge 6d834ac8f1 jk/rebase-config-insn-fmt-docfix later to maint).
   (merge de9f7fa3b0 rs/commit-pptr-simplify later to maint).
   (merge 4259d693fc sc/fmt-merge-msg-doc-markup-fix later to maint).
   (merge 28fab7b23d nd/test-helpers later to maint).

----------------------------------------------------------------

Changes since v2.10.0 are as follows:

Aaron M Watson (1):
      stash: allow stashes to be referenced by index only

Alex Henrie (5):
      am: put spaces around pipe in usage string
      cat-file: put spaces around pipes in usage string
      git-rebase--interactive: fix English grammar
      git-merge-octopus: do not capitalize "octopus"
      unpack-trees: do not capitalize "working"

Alex Riesen (2):
      git-gui: support for $FILENAMES in tool definitions
      git-gui: ensure the file in the diff pane is in the list of selected files

Alexander Shopov (2):
      git-gui i18n: Updated Bulgarian translation (565,0f,0u)
      git-gui: Mark 'All' in remote.tcl for translation

Anders Kaseorg (3):
      imap-send: Tell cURL to use imap:// or imaps://
      pre-receive.sample: mark it executable
      git-sh-setup: be explicit where to dot-source git-sh-i18n from.

Beat Bolli (1):
      SubmittingPatches: use gitk's "Copy commit summary" format

Brandon Williams (6):
      pathspec: remove unnecessary function prototypes
      git: make super-prefix option
      ls-files: optionally recurse into submodules
      ls-files: pass through safe options for --recurse-submodules
      ls-files: add pathspec matching for submodules
      submodules doc: update documentation for "." used for submodule branches

Brian Henderson (3):
      diff-highlight: add some tests
      diff-highlight: add failing test for handling --graph output
      diff-highlight: add support for --graph output

Chris Packham (1):
      completion: support excluding refs

Christian Couder (42):
      apply: make some names more specific
      apply: move 'struct apply_state' to apply.h
      builtin/apply: make apply_patch() return -1 or -128 instead of die()ing
      builtin/apply: read_patch_file() return -1 instead of die()ing
      builtin/apply: make find_header() return -128 instead of die()ing
      builtin/apply: make parse_chunk() return a negative integer on error
      builtin/apply: make parse_single_patch() return -1 on error
      builtin/apply: make parse_whitespace_option() return -1 instead of die()ing
      builtin/apply: make parse_ignorewhitespace_option() return -1 instead of die()ing
      builtin/apply: move init_apply_state() to apply.c
      apply: make init_apply_state() return -1 instead of exit()ing
      builtin/apply: make check_apply_state() return -1 instead of die()ing
      builtin/apply: move check_apply_state() to apply.c
      builtin/apply: make apply_all_patches() return 128 or 1 on error
      builtin/apply: make parse_traditional_patch() return -1 on error
      builtin/apply: make gitdiff_*() return 1 at end of header
      builtin/apply: make gitdiff_*() return -1 on error
      builtin/apply: change die_on_unsafe_path() to check_unsafe_path()
      builtin/apply: make build_fake_ancestor() return -1 on error
      builtin/apply: make remove_file() return -1 on error
      builtin/apply: make add_conflicted_stages_file() return -1 on error
      builtin/apply: make add_index_file() return -1 on error
      builtin/apply: make create_file() return -1 on error
      builtin/apply: make write_out_one_result() return -1 on error
      builtin/apply: make write_out_results() return -1 on error
      unpack-objects: add --max-input-size=<size> option
      builtin/apply: make try_create_file() return -1 on error
      builtin/apply: make create_one_file() return -1 on error
      builtin/apply: rename option parsing functions
      apply: rename and move opt constants to apply.h
      apply: move libified code from builtin/apply.c to apply.{c,h}
      apply: make some parsing functions static again
      apply: use error_errno() where possible
      apply: make it possible to silently apply
      apply: don't print on stdout in verbosity_silent mode
      usage: add set_warn_routine()
      usage: add get_error_routine() and get_warn_routine()
      apply: change error_routine when silent
      apply: refactor `git apply` option parsing
      apply: pass apply state to build_fake_ancestor()
      apply: learn to use a different index file
      builtin/am: use apply API in run_apply()

David Aguilar (4):
      mergetool: add copyright
      mergetool: move main program flow into a main() function
      mergetool: honor diff.orderFile
      mergetool: honor -O<orderfile>

David Turner (11):
      rename_ref_available(): add docstring
      refs: add methods for reflog
      refs: add method for initial ref transaction commit
      refs: make delete_refs() virtual
      refs: add methods to init refs db
      refs: add method to rename refs
      refs: make lock generic
      refs: implement iteration over only per-worktree refs
      add David Turner's Two Sigma address
      fsck: handle bad trees like other errors
      http: http.emptyauth should allow empty (not just NULL) usernames

Dennis Kaarsemaker (1):
      worktree: allow the main brach of a bare repository to be checked out

Dimitriy Ryazantcev (2):
      l10n: ru.po: update Russian translation
      git-gui: Update Russian translation

Elia Pinto (6):
      t5541-http-push-smart.sh: use the GIT_TRACE_CURL environment var
      test-lib.sh: preserve GIT_TRACE_CURL from the environment
      t5550-http-fetch-dumb.sh: use the GIT_TRACE_CURL environment var
      t5551-http-fetch-smart.sh: use the GIT_TRACE_CURL environment var
      git-check-ref-format.txt: fixup documentation
      git-gui/po/glossary/txt-to-pot.sh: use the $( ... ) construct for command substitution

Emily Xie (1):
      pathspec: warn on empty strings as pathspec

Eric Wong (5):
      http: warn on curl_multi_add_handle failures
      http: consolidate #ifdefs for curl_multi_remove_handle
      http: always remove curl easy from curlm session on release
      git-svn: reduce scope of input record separator change
      git-svn: "git worktree" awareness

Gavin Lambert (1):
      git-svn: do not reuse caches memoized for a different architecture

Ian Kelling (2):
      gitweb: remove unused guess_file_syntax() parameter
      gitweb: use highlight's shebang detection

Jacob Keller (9):
      format-patch: show 0/1 and 1/1 for singleton patch with cover letter
      cache: add empty_tree_oid object and helper function
      graph: add support for --line-prefix on all graph-aware output
      diff: prepare for additional submodule formats
      allow do_submodule_path to work even if submodule isn't checked out
      submodule: convert show_submodule_summary to use struct object_id *
      submodule: refactor show_submodule_summary with helper function
      diff: teach diff to display submodule difference with an inline diff
      rev-list: use hdr_termination instead of a always using a newline

Jakub Narębski (1):
      configure.ac: improve description of NO_REGEX test

Jean-Noël AVILA (1):
      i18n: i18n: diff: mark die messages for translation

Jeff Hostetler (9):
      status: rename long-format print routines
      status: cleanup API to wt_status_print
      status: support --porcelain[=<version>]
      status: collect per-file data for --porcelain=v2
      status: print per-file porcelain v2 status data
      status: print branch info with --porcelain=v2 --branch
      git-status.txt: describe --porcelain=v2 format
      test-lib-functions.sh: add lf_to_nul helper
      status: unit tests for --porcelain=v2

Jeff King (109):
      rebase-interactive: drop early check for valid ident
      provide an initializer for "struct object_info"
      sha1_file: make packed_object_info public
      pack-objects: break delta cycles before delta-search phase
      pack-objects: use mru list when iterating over packs
      gc: default aggressive depth to 50
      cache_or_unpack_entry: drop keep_cache parameter
      clear_delta_base_cache_entry: use a more descriptive name
      release_delta_base_cache: reuse existing detach function
      delta_base_cache: use list.h for LRU
      delta_base_cache: drop special treatment of blobs
      delta_base_cache: use hashmap.h
      t/perf: add basic perf tests for delta base cache
      index-pack: add --max-input-size=<size> option
      receive-pack: allow a maximum input size to be specified
      test-lib: drop PID from test-results/*.count
      diff-highlight: ignore test cruft
      diff-highlight: add multi-byte tests
      diff-highlight: avoid highlighting combined diffs
      error_errno: use constant return similar to error()
      color_parse_mem: initialize "struct color" temporary
      t5305: move cleanup into test block
      t5305: drop "dry-run" of unpack-objects
      t5305: use "git -C"
      t5305: simplify packname handling
      pack-objects: walk tag chains for --include-tag
      remote-curl: handle URLs without protocol
      patch-ids: turn off rename detection
      add_delta_base_cache: use list_for_each_safe
      patch-ids: refuse to compute patch-id for merge commit
      hash-object: always try to set up the git repository
      patch-id: use RUN_SETUP_GENTLY
      diff: skip implicit no-index check when given --no-index
      diff: handle --no-index prefixes consistently
      diff: always try to set up the repository
      pager: remove obsolete comment
      pager: stop loading git_default_config()
      pager: make pager_program a file-local static
      pager: use callbacks instead of configset
      pager: handle early config
      t1302: use "git -C"
      test-config: setup git directory
      config: only read .git/config from configured repos
      init: expand comments explaining config trickery
      init: reset cached config when entering new repo
      t1007: factor out repeated setup
      verify_packfile: check pack validity before accessing data
      clone: pass --progress decision to recursive submodules
      docs/cvsimport: prefer cvs-fast-export to parsecvs
      docs/cvs-migration: update link to cvsps homepage
      docs/cvs-migration: mention cvsimport caveats
      ident: handle NULL ai_canonname
      get_sha1: detect buggy calls with multiple disambiguators
      get_sha1: avoid repeating ourselves via ONLY_TO_DIE
      get_sha1: propagate flags to child functions
      get_short_sha1: parse tags when looking for treeish
      get_short_sha1: refactor init of disambiguation code
      get_short_sha1: NUL-terminate hex prefix
      get_short_sha1: mark ambiguity error for translation
      sha1_array: let callbacks interrupt iteration
      for_each_abbrev: drop duplicate objects
      get_short_sha1: list ambiguous objects on error
      xdiff: rename "struct group" to "struct xdlgroup"
      get_short_sha1: make default disambiguation configurable
      tree-walk: be more specific about corrupt tree errors
      graph: fix extra spaces in graph_padding_line
      t5613: drop reachable_via function
      t5613: drop test_valid_repo function
      t5613: use test_must_fail
      t5613: whitespace/style cleanups
      t5613: do not chdir in main process
      find_unique_abbrev: move logic out of get_short_sha1()
      clone: detect errors in normalize_path_copy
      files_read_raw_ref: avoid infinite loop on broken symlinks
      files_read_raw_ref: prevent infinite retry loops in general
      t5613: clarify "too deep" recursion tests
      link_alt_odb_entry: handle normalize_path errors
      link_alt_odb_entry: refactor string handling
      alternates: provide helper for adding to alternates list
      alternates: provide helper for allocating alternate
      alternates: encapsulate alt->base munging
      alternates: use a separate scratch space
      fill_sha1_file: write "boring" characters
      alternates: store scratch buffer as strbuf
      fill_sha1_file: write into a strbuf
      count-objects: report alternates via verbose mode
      sha1_file: always allow relative paths to alternates
      alternates: use fspathcmp to detect duplicates
      check_connected: accept an env argument
      tmp-objdir: introduce API for temporary object directories
      receive-pack: quarantine objects until pre-receive accepts
      tmp-objdir: put quarantine information in the environment
      tmp-objdir: do not migrate files starting with '.'
      upload-pack: use priority queue in reachable() check
      merge-base: handle --fork-point without reflog
      fetch: use "quick" has_sha1_file for tag following
      test-lib: handle TEST_OUTPUT_DIRECTORY with spaces
      test-lib: add --verbose-log option
      travis: use --verbose-log test option
      test-lib: bail out when "-v" used under "prove"
      daemon: detect and reject too-long paths
      read info/{attributes,exclude} only when in repository
      test-*-cache-tree: setup git dir
      find_unique_abbrev: use 4-buffer ring
      diff_unique_abbrev: rename to diff_aligned_abbrev
      diff_aligned_abbrev: use "struct oid"
      diff: handle sha1 abbreviations outside of repository
      git-compat-util: move content inside ifdef/endif guards
      doc: fix missing "::" in config list

Jiang Xin (1):
      l10n: zh_CN: fixed some typos for git 2.10.0

Johannes Schindelin (59):
      cat-file: fix a grammo in the man page
      sequencer: lib'ify sequencer_pick_revisions()
      sequencer: do not die() in do_pick_commit()
      sequencer: lib'ify write_message()
      sequencer: lib'ify do_recursive_merge()
      sequencer: lib'ify do_pick_commit()
      sequencer: lib'ify walk_revs_populate_todo()
      sequencer: lib'ify prepare_revs()
      sequencer: lib'ify read_and_refresh_cache()
      sequencer: lib'ify read_populate_todo()
      sequencer: lib'ify read_populate_opts()
      sequencer: lib'ify create_seq_dir()
      sequencer: lib'ify save_head()
      sequencer: lib'ify save_todo()
      sequencer: lib'ify save_opts()
      sequencer: lib'ify fast_forward_to()
      sequencer: lib'ify checkout_fast_forward()
      sequencer: ensure to release the lock when we could not read the index
      cat-file: introduce the --filters option
      cat-file --textconv/--filters: allow specifying the path separately
      cat-file: support --textconv/--filters in batch mode
      git-gui: respect commit.gpgsign again
      regex: -G<pattern> feeds a non NUL-terminated string to regexec() and fails
      regex: add regexec_buf() that can work on a non NUL-terminated string
      regex: use regexec_buf()
      pull: drop confusing prefix parameter of die_on_unclean_work_tree()
      pull: make code more similar to the shell script again
      wt-status: make the require_clean_work_tree() function reusable
      wt-status: export also the has_un{staged,committed}_changes() functions
      wt-status: teach has_{unstaged,uncommitted}_changes() about submodules
      wt-status: begin error messages with lower-case
      reset: fix usage
      sequencer: use static initializers for replay_opts
      sequencer: use memoized sequencer directory path
      sequencer: avoid unnecessary indirection
      sequencer: future-proof remove_sequencer_state()
      sequencer: plug memory leaks for the option values
      sequencer: future-proof read_populate_todo()
      sequencer: refactor the code to obtain a short commit name
      sequencer: completely revamp the "todo" script parsing
      sequencer: strip CR from the todo script
      sequencer: avoid completely different messages for different actions
      sequencer: get rid of the subcommand field
      sequencer: remember the onelines when parsing the todo file
      sequencer: prepare for rebase -i's commit functionality
      sequencer: introduce a helper to read files written by scripts
      sequencer: allow editing the commit message on a case-by-case basis
      sequencer: support amending commits
      sequencer: support cleaning up commit messages
      sequencer: left-trim lines read from the script
      sequencer: stop releasing the strbuf in write_message()
      sequencer: roll back lock file if write_message() failed
      sequencer: refactor write_message() to take a pointer/length
      sequencer: teach write_message() to append an optional LF
      sequencer: remove overzealous assumption in rebase -i mode
      sequencer: mark action_name() for translation
      sequencer: quote filenames in error messages
      sequencer: start error messages consistently with lower case
      sequencer: mark all error messages for translation

Johannes Sixt (5):
      t9903: fix broken && chain
      t6026-merge-attr: clean up background process at end of test case
      t3700-add: create subdirectory gently
      t3700-add: do not check working tree file mode without POSIXPERM
      t0060: sidestep surprising path mangling results on Windows

Jonathan Nieder (1):
      connect: tighten check for unexpected early hang up

Jonathan Tan (14):
      tests: move test_lazy_prereq JGIT to test-lib.sh
      connect: advertized capability is not a ref
      mailinfo: separate in-body header processing
      mailinfo: make is_scissors_line take plain char *
      mailinfo: handle in-body header continuations
      fetch-pack: do not reset in_vain on non-novel acks
      trailer: improve const correctness
      trailer: use list.h for doubly-linked list
      trailer: streamline trailer item create and add
      trailer: make args have their own struct
      trailer: clarify failure modes in parse_trailer
      trailer: allow non-trailers in trailer block
      trailer: forbid leading whitespace in trailers
      trailer: support values folded to multiple lines

Josh Triplett (2):
      format-patch: show base info before email signature
      format-patch: add "--rfc" for the common case of [RFC PATCH]

Junio C Hamano (43):
      blame: improve diagnosis for "--reverse NEW"
      blame: dwim "blame --reverse OLD" as "blame --reverse OLD.."
      am: refactor read_author_script()
      diff.c: remove output_prefix_length field
      submodule: avoid auto-discovery in prepare_submodule_repo_env()
      symbolic-ref -d: do not allow removal of HEAD
      Prepare for 2.9.4
      Start the 2.11 cycle
      First batch for 2.11
      Second batch for 2.11
      Third batch for 2.11
      Start preparing for 2.10.1
      Fourth batch for 2.11
      streaming: make sure to notice corrupt object
      unpack_sha1_header(): detect malformed object header
      Fifth batch for 2.11
      worktree: honor configuration variables
      blame: use DEFAULT_ABBREV macro
      Prepare for 2.10.1
      Sixth batch for 2.11
      diff_unique_abbrev(): document its assumption and limitation
      abbrev: add FALLBACK_DEFAULT_ABBREV to prepare for auto sizing
      abbrev: prepare for new world order
      Git 2.10.1
      Seventh batch for 2.11
      t4015: split out the "setup" part of ws-error-highlight test
      diff.c: refactor parse_ws_error_highlight()
      diff.c: move ws-error-highlight parsing helpers up
      diff: introduce diff.wsErrorHighlight option
      Eighth batch for 2.11
      Ninth batch for 2.11
      Start preparing for 2.10.2
      cocci: refactor common patterns to use xstrdup_or_null()
      Tenth batch for 2.11
      t3700: fix broken test under !SANITY
      transport: pass summary_width down the callchain
      fetch: pass summary_width down the callchain
      transport: allow summary-width to be computed dynamically
      transport: compute summary-width dynamically
      Eleventh batch for 2.11
      Getting ready for 2.11-rc0
      Git 2.10.2
      Git 2.11-rc0

Karsten Blees (2):
      git-gui: unicode file name support on windows
      git-gui: handle the encoding of Git's output correctly

Kevin Daudt (2):
      t5100-mailinfo: replace common path prefix with variable
      mailinfo: unescape quoted-pair in header fields

Kirill Smelkov (3):
      pack-objects: respect --local/--honor-pack-keep/--incremental when bitmap is in use
      pack-objects: use reachability bitmap index when generating non-stdout pack
      t/perf/run: copy config.mak.autogen & friends to build area

Lars Schneider (18):
      travis-ci: ask homebrew for its path instead of hardcoding it
      convert: quote filter names in error messages
      convert: modernize tests
      run-command: move check_pipe() from write_or_die to run_command
      run-command: add clean_on_exit_handler
      pkt-line: rename packet_write() to packet_write_fmt()
      pkt-line: extract set_packet_header()
      pkt-line: add packet_write_fmt_gently()
      pkt-line: add packet_flush_gently()
      pkt-line: add packet_write_gently()
      pkt-line: add functions to read/write flush terminated packet streams
      convert: make apply_filter() adhere to standard Git error handling
      convert: prepare filter.<driver>.process option
      convert: add filter.<driver>.process option
      contrib/long-running-filter: add long running filter example
      sha1_file: rename git_open_noatime() to git_open()
      sha1_file: open window into packfiles with O_CLOEXEC
      read-cache: make sure file handles are not inherited by child processes

Linus Torvalds (1):
      abbrev: auto size the default abbreviation

Mantas Mikulėnas (1):
      contrib: add credential helper for libsecret

Matthieu Moy (4):
      Documentation/config: default for color.* is color.ui
      parse_mailboxes: accept extra text after <...> address
      t9000-addresses: update expected results after fix
      Git.pm: add comment pointing to t9000

Michael Haggerty (36):
      xdl_change_compact(): fix compaction heuristic to adjust ixo
      xdl_change_compact(): only use heuristic if group can't be matched
      is_blank_line(): take a single xrecord_t as argument
      recs_match(): take two xrecord_t pointers as arguments
      xdl_change_compact(): introduce the concept of a change group
      resolve_gitlink_ref(): eliminate temporary variable
      refs: rename struct ref_cache to files_ref_store
      refs: create a base class "ref_store" for files_ref_store
      add_packed_ref(): add a files_ref_store argument
      get_packed_ref(): add a files_ref_store argument
      resolve_missing_loose_ref(): add a files_ref_store argument
      {lock,commit,rollback}_packed_refs(): add files_ref_store arguments
      refs: reorder definitions
      resolve_packed_ref(): rename function from resolve_missing_loose_ref()
      resolve_gitlink_packed_ref(): remove function
      read_raw_ref(): take a (struct ref_store *) argument
      resolve_ref_recursively(): new function
      resolve_gitlink_ref(): implement using resolve_ref_recursively()
      resolve_gitlink_ref(): avoid memory allocation in many cases
      resolve_gitlink_ref(): rename path parameter to submodule
      refs: make read_raw_ref() virtual
      refs: make verify_refname_available() virtual
      refs: make pack_refs() virtual
      refs: make create_symref() virtual
      refs: make peel_ref() virtual
      repack_without_refs(): add a files_ref_store argument
      lock_raw_ref(): add a files_ref_store argument
      commit_ref_update(): add a files_ref_store argument
      lock_ref_for_update(): add a files_ref_store argument
      lock_ref_sha1_basic(): add a files_ref_store argument
      split_symref_update(): add a files_ref_store argument
      files_ref_iterator_begin(): take a ref_store argument
      refs: add method iterator_begin
      diff: improve positioning of add/delete blocks in diffs
      parse-options: add parse_opt_unknown_cb()
      blame: honor the diff heuristic options and config

Michael J Gruber (1):
      gpg-interface: use more status letters

Mike Ralphson (1):
      vcs-svn/fast_export: fix timestamp fmt specifiers

Nguyễn Thái Ngọc Duy (40):
      remote-curl.c: convert fetch_git() to use argv_array
      transport-helper.c: refactor set_helper_option()
      upload-pack: move shallow deepen code out of receive_needs()
      upload-pack: move "shallow" sending code out of deepen()
      upload-pack: remove unused variable "backup"
      upload-pack: move "unshallow" sending code out of deepen()
      upload-pack: use skip_prefix() instead of starts_with()
      upload-pack: tighten number parsing at "deepen" lines
      upload-pack: make check_non_tip() clean things up on error
      upload-pack: move rev-list code out of check_non_tip()
      fetch-pack: use skip_prefix() instead of starts_with()
      fetch-pack: use a common function for verbose printing
      fetch-pack.c: mark strings for translating
      fetch-pack: use a separate flag for fetch in deepening mode
      shallow.c: implement a generic shallow boundary finder based on rev-list
      upload-pack: add deepen-since to cut shallow repos based on time
      fetch: define shallow boundary with --shallow-since
      clone: define shallow clone boundary based on time with --shallow-since
      t5500, t5539: tests for shallow depth since a specific date
      refs: add expand_ref()
      upload-pack: support define shallow boundary by excluding revisions
      fetch: define shallow boundary with --shallow-exclude
      clone: define shallow clone boundary with --shallow-exclude
      t5500, t5539: tests for shallow depth excluding a ref
      upload-pack: split check_unreachable() in two, prep for get_reachable_list()
      upload-pack: add get_reachable_list()
      fetch, upload-pack: --deepen=N extends shallow boundary by N commits
      checkout: add some spaces between code and comment
      checkout.txt: document a common case that ignores ambiguation rules
      checkout: fix ambiguity check in subdir
      init: correct re-initialization from a linked worktree
      init: call set_git_dir_init() from within init_db()
      init: kill set_git_dir_init()
      init: do not set unnecessary core.worktree
      init: kill git_link variable
      git-commit.txt: clarify --patch mode with pathspec
      diff-lib: allow ita entries treated as "not yet exist in index"
      diff: add --ita-[in]visible-in-index
      commit: fix empty commit creation when there's no changes but ita entries
      commit: don't be fooled by ita entries when creating initial commit

Olaf Hering (1):
      git-gui: sort entries in tclIndex

Orgad Shaneh (1):
      git-gui: Do not reset author details on amend

Pat Thoyts (7):
      Allow keyboard control to work in the staging widgets.
      Amend tab ordering and text widget border and highlighting.
      git-gui: fix detection of Cygwin
      git-gui (Windows): use git-gui.exe in `Create Desktop Shortcut`
      git-gui: maintain backwards compatibility for merge syntax
      git-gui: avoid persisting modified author identity
      git-gui: set version 0.21

Petr Stodulka (1):
      http: control GSSAPI credential delegation

Philip Oakley (14):
      doc: use 'symmetric difference' consistently
      doc: revisions - name the left and right sides
      doc: show the actual left, right, and boundary marks
      doc: revisions: give headings for the two and three dot notations
      doc: revisions: extra clarification of <rev>^! notation effects
      doc: revisions: single vs multi-parent notation comparison
      doc: gitrevisions - use 'reachable' in page description
      doc: gitrevisions - clarify 'latter case' is revision walk
      doc: revisions - define `reachable`
      doc: revisions - clarify reachability examples
      doc: revisions: show revision expansion in examples
      doc: revisions: sort examples and fix alignment of the unchanged
      doc: fix merge-base ASCII art tab spacing
      doc: fix the 'revert a faulty merge' ASCII art tab spacing

Pranit Bauva (2):
      rev-list-options: clarify the usage of --reverse
      t0040: convert all possible tests to use `test-parse-options --expect`

Ralf Thielow (5):
      help: introduce option --exclude-guides
      help: make option --help open man pages only for Git commands
      rebase -i: improve advice on bad instruction lines
      l10n: de.po: fix translation of autostash
      l10n: de.po: translate 260 new messages

Ray Chen (1):
      l10n: zh_CN: review for git v2.10.0 l10n

René Scharfe (34):
      compat: move strdup(3) replacement to its own file
      introduce hex2chr() for converting two hexadecimal digits to a character
      strbuf: use valid pointer in strbuf_remove()
      checkout: constify parameters of checkout_stage() and checkout_merged()
      unpack-trees: pass checkout state explicitly to check_updates()
      sha1_file: use llist_mergesort() for sorting packs
      xdiff: fix merging of hunks with -W context and -u context
      contrib/coccinelle: fix semantic patch for oid_to_hex_r()
      add coccicheck make target
      use strbuf_addstr() for adding constant strings to a strbuf, part 2
      pretty: let %C(auto) reset all attributes
      introduce CHECKOUT_INIT
      add COPY_ARRAY
      use COPY_ARRAY
      git-gui: stop using deprecated merge syntax
      gitignore: ignore output files of coccicheck make target
      use strbuf_addstr() instead of strbuf_addf() with "%s", part 2
      use strbuf_add_unique_abbrev() for adding short hashes, part 2
      add QSORT
      use QSORT
      remove unnecessary check before QSORT
      coccicheck: use --all-includes by default
      use QSORT, part 2
      pretty: avoid adding reset for %C(auto) if output is empty
      coccicheck: make transformation for strbuf_addf(sb, "...") more precise
      show-branch: use QSORT
      remove unnecessary NULL check before free(3)
      use strbuf_add_unique_abbrev() for adding short hashes, part 3
      pretty: fix document link for color specification
      avoid pointer arithmetic involving NULL in FLEX_ALLOC_MEM
      inline xalloc_flex() into FLEXPTR_ALLOC_MEM
      hex: make wraparound of the index into ring-buffer explicit
      valgrind: support test helpers
      commit: simplify building parents list

Ronnie Sahlberg (2):
      refs: add a backend method structure
      refs: add a transaction_commit() method

SZEDER Gábor (1):
      ref-filter: strip format option after a field name only once while parsing

Satoshi Yasushima (6):
      git-gui: consistently use the same word for "remote" in Japanese
      git-gui: consistently use the same word for "blame" in Japanese
      git-gui: apply po template to Japanese translation
      git-gui: add Japanese language code
      git-gui: update Japanese translation
      git-gui: update Japanese information

Stefan Beller (16):
      t7408: modernize style
      t7408: merge short tests, factor out testing method
      submodule--helper module-clone: allow multiple references
      submodule--helper update-clone: allow multiple references
      clone: factor out checking for an alternate path
      clone: clarify option_reference as required
      clone: implement optional references
      clone: recursive and reference option triggers submodule alternates
      xdiff: remove unneeded declarations
      transport: report missing submodule pushes consistently on stderr
      diff.c: use diff_options directly
      diff: omit found pointer from emit_callback
      diff: remove dead code
      submodule: ignore trailing slash on superproject URL
      submodule: ignore trailing slash in relative url
      documentation: improve submodule.<name>.{url, path} description

Stefan Christ (1):
      Documentation/fmt-merge-msg: fix markup in example

Thomas Gummerer (4):
      add: document the chmod option
      update-index: add test for chmod flags
      read-cache: introduce chmod_index_entry
      add: modify already added files when --chmod is given

Vasco Almeida (32):
      l10n: pt_PT: update Portuguese translation
      l10n: pt_PT: update Portuguese repository info
      i18n: blame: mark error messages for translation
      i18n: branch: mark option description for translation
      i18n: config: mark error message for translation
      i18n: merge-recursive: mark error messages for translation
      i18n: merge-recursive: mark verbose message for translation
      i18n: notes: mark error messages for translation
      notes: spell first word of error messages in lowercase
      i18n: receive-pack: mark messages for translation
      i18n: show-branch: mark error messages for translation
      i18n: show-branch: mark plural strings for translation
      i18n: update-index: mark warnings for translation
      i18n: commit: mark message for translation
      i18n: connect: mark die messages for translation
      i18n: ident: mark hint for translation
      i18n: notes-merge: mark die messages for translation
      i18n: stash: mark messages for translation
      git-gui i18n: mark strings for translation
      git-gui: l10n: add Portuguese translation
      git-gui i18n: internationalize use of colon punctuation
      git-gui i18n: mark "usage:" strings for translation
      git-gui: fix incorrect use of Tcl append command
      git-gui i18n: mark string in lib/error.tcl for translation
      t1512: become resilient to GETTEXT_POISON build
      i18n: apply: mark plural string for translation
      i18n: apply: mark info messages for translation
      i18n: apply: mark error messages for translation
      i18n: apply: mark error message for translation
      i18n: convert mark error messages for translation
      i18n: credential-cache--daemon: mark advice for translation
      i18n: diff: mark warnings for translation

Vegard Nossum (1):
      revision: new rev^-n shorthand for rev^n..rev

Younes Khoudli (1):
      doc: remove reference to the traditional layout in git-tag.txt

brian m. carlson (20):
      cache: convert struct cache_entry to use struct object_id
      builtin/apply: convert static functions to struct object_id
      builtin/blame: convert struct origin to use struct object_id
      builtin/log: convert some static functions to use struct object_id
      builtin/cat-file: convert struct expand_data to use struct object_id
      builtin/cat-file: convert some static functions to struct object_id
      builtin: convert textconv_object to use struct object_id
      streaming: make stream_blob_to_fd take struct object_id
      builtin/checkout: convert some static functions to struct object_id
      notes-merge: convert struct notes_merge_pair to struct object_id
      Convert read_mmblob to take struct object_id.
      builtin/blame: convert file to use struct object_id
      builtin/rm: convert to use struct object_id
      notes: convert init_notes to use struct object_id
      builtin/update-index: convert file to struct object_id
      sha1_name: convert get_sha1_mb to struct object_id
      refs: add an update_ref_oid function.
      builtin/am: convert to struct object_id
      builtin/commit-tree: convert to struct object_id
      builtin/reset: convert to use struct object_id

yaras (1):
      git-gui: fix initial git gui message encoding

Ævar Arnfjörð Bjarmason (3):
      gitweb: fix a typo in a comment
      gitweb: link to 7-char+ SHA-1s, not only 8-char+
      gitweb: link to "git describe"'d commits in log messages

Дилян Палаузов (1):
      ./configure.ac: detect SSL in libcurl using curl-config


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.10.0
@ 2016-09-03  2:17  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2016-09-03  2:17 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

The latest feature release Git v2.10.0 is now available at the
usual places.  It is comprised of 639 non-merge commits since
v2.9.0, contributed by 76 people, 22 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.10.0'
tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.9.0 are as follows.
Welcome to the Git development community!

  Alexander Hirsch, Andreas Brauchli, Andrew Oakley, Antoine Queru,
  Ben Wijen, Christopher Layne, Dave Nicolson, David Glasser, Ed
  Maste, Heiko Becker, Ingo Brückl, Jonathan Tan, Jordan DE GEA,
  Josef Kufner, Keith McGuigan, Kevin Willford, LE Manh Cuong,
  Michael Stahl, Parker Moore, Peter Colberg, Tom Russello,
  and William Duclot.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alex Henrie, Alfred Perlstein, Armin Kunaschik, brian m. carlson,
  Changwoo Ryu, Charles Bailey, Chris Packham, Christian Couder,
  David A. Greene, David Aguilar, David Kastrup, David Turner,
  Edward Thomson, Elia Pinto, Eric Sunshine, Eric Wong, Heiko
  Voigt, Jacob Keller, Jean-Noel Avila, Jeff King, Jiang Xin,
  Joey Hess, Johannes Schindelin, Johannes Sixt, John Keeping,
  Jonathan Nieder, Josh Triplett, Junio C Hamano, Lars Schneider,
  Lars Vogel, Linus Torvalds, Lukas Fleischer, Matthieu Moy,
  Mehul Jain, Michael Haggerty, Michael J Gruber, Mike Hommey,
  Nguyễn Thái Ngọc Duy, Nicolas Pitre, Orgad Shaneh, Patrick
  Steinhardt, Peter Krefting, Pranit Bauva, Ramsay Jones, René
  Scharfe, Ronald Wampler, Stefan Beller, SZEDER Gábor, Thomas
  Braun, Thomas Gummerer, Torsten Bögershausen, Trần Ngọc
  Quân, Vasco Almeida, and Ville Skyttä.

----------------------------------------------------------------

Git 2.10 Release Notes
======================

Backward compatibility notes
----------------------------

Updates since v2.9
------------------

UI, Workflows & Features

 * "git pull --rebase --verify-signature" learned to warn the user
   that "--verify-signature" is a no-op when rebasing.

 * An upstream project can make a recommendation to shallowly clone
   some submodules in the .gitmodules file it ships.

 * "git worktree add" learned that '-' can be used as a short-hand for
   "@{-1}", the previous branch.

 * Update the funcname definition to support css files.

 * The completion script (in contrib/) learned to complete "git
   status" options.

 * Messages that are generated by auto gc during "git push" on the
   receiving end are now passed back to the sending end in such a way
   that they are shown with "remote: " prefix to avoid confusing the
   users.

 * "git add -i/-p" learned to honor diff.compactionHeuristic
   experimental knob, so that the user can work on the same hunk split
   as "git diff" output.

 * "upload-pack" allows a custom "git pack-objects" replacement when
   responding to "fetch/clone" via the uploadpack.packObjectsHook.
   (merge b738396 jk/upload-pack-hook later to maint).

 * Teach format-patch and mailsplit (hence "am") how a line that
   happens to begin with "From " in the e-mail message is quoted with
   ">", so that these lines can be restored to their original shape.
   (merge d9925d1 ew/mboxrd-format-am later to maint).

 * "git repack" learned the "--keep-unreachable" option, which sends
   loose unreachable objects to a pack instead of leaving them loose.
   This helps heuristics based on the number of loose objects
   (e.g. "gc --auto").
   (merge e26a8c4 jk/repack-keep-unreachable later to maint).

 * "log --graph --format=" learned that "%>|(N)" specifies the width
   relative to the terminal's left edge, not relative to the area to
   draw text that is to the right of the ancestry-graph section.  It
   also now accepts negative N that means the column limit is relative
   to the right border.

 * A careless invocation of "git send-email directory/" after editing
   0001-change.patch with an editor often ends up sending both
   0001-change.patch and its backup file, 0001-change.patch~, causing
   embarrassment and a minor confusion.  Detect such an input and
   offer to skip the backup files when sending the patches out.
   (merge 531220b jc/send-email-skip-backup later to maint).

 * "git submodule update" that drives many "git clone" could
   eventually hit flaky servers/network conditions on one of the
   submodules; the command learned to retry the attempt.

 * The output coloring scheme learned two new attributes, italic and
   strike, in addition to existing bold, reverse, etc.

 * "git log" learns log.showSignature configuration variable, and a
   command line option "--no-show-signature" to countermand it.
   (merge fce04c3 mj/log-show-signature-conf later to maint).

 * More markings of messages for i18n, with updates to various tests
   to pass GETTEXT_POISON tests.

 * "git archive" learned to handle files that are larger than 8GB and
   commits far in the future than expressible by the traditional US-TAR
   format.
   (merge 560b0e8 jk/big-and-future-archive-tar later to maint).


 * A new configuration variable core.sshCommand has been added to
   specify what value for GIT_SSH_COMMAND to use per repository.

 * "git worktree prune" protected worktrees that are marked as
   "locked" by creating a file in a known location.  "git worktree"
   command learned a dedicated command pair to create and remove such
   a file, so that the users do not have to do this with editor.

 * A handful of "git svn" updates.

 * "git push" learned to accept and pass extra options to the
   receiving end so that hooks can read and react to them.

 * "git status" learned to suggest "merge --abort" during a conflicted
   merge, just like it already suggests "rebase --abort" during a
   conflicted rebase.

 * "git jump" script (in contrib/) has been updated a bit.
   (merge a91e692 jk/git-jump later to maint).

 * "git push" and "git clone" learned to give better progress meters
   to the end user who is waiting on the terminal.

 * An entry "git log --decorate" for the tip of the current branch is
   shown as "HEAD -> name" (where "name" is the name of the branch);
   the arrow is now painted in the same color as "HEAD", not in the
   color for commits.

 * "git format-patch" learned format.from configuration variable to
   specify the default settings for its "--from" option.

 * "git am -3" calls "git merge-recursive" when it needs to fall back
   to a three-way merge; this call has been turned into an internal
   subroutine call instead of spawning a separate subprocess.

 * The command line completion scripts (in contrib/) now knows about
   "git branch --delete/--move [--remote]".
   (merge 2703c22 vs/completion-branch-fully-spelled-d-m-r later to maint).

 * "git rev-parse --git-path hooks/<hook>" learned to take
   core.hooksPath configuration variable (introduced during 2.9 cycle)
   into account.
   (merge 9445b49 ab/hooks later to maint).

 * "git log --show-signature" and other commands that display the
   verification status of PGP signature now shows the longer key-id,
   as 32-bit key-id is so last century.


Performance, Internal Implementation, Development Support etc.

 * "git fast-import" learned the same performance trick to avoid
   creating too small a packfile as "git fetch" and "git push" have,
   using *.unpackLimit configuration.

 * When "git daemon" is run without --[init-]timeout specified, a
   connection from a client that silently goes offline can hang around
   for a long time, wasting resources.  The socket-level KEEPALIVE has
   been enabled to allow the OS to notice such failed connections.

 * "git upload-pack" command has been updated to use the parse-options
   API.

 * The "git apply" standalone program is being libified; the first
   step to move many state variables into a structure that can be
   explicitly (re)initialized to make the machinery callable more
   than once has been merged.

 * HTTP transport gained an option to produce more detailed debugging
   trace.
   (merge 73e57aa ep/http-curl-trace later to maint).

 * Instead of taking advantage of the fact that a struct string_list
   that is allocated with all NULs happens to be the INIT_NODUP kind,
   the users of string_list structures are taught to initialize them
   explicitly as such, to document their behaviour better.
   (merge 2721ce2 jk/string-list-static-init later to maint).

 * HTTPd tests learned to show the server error log to help diagnosing
   a failing tests.
   (merge 44f243d nd/test-lib-httpd-show-error-log-in-verbose later to maint).

 * The ownership rule for the piece of memory that hold references to
   be fetched in "git fetch" was screwy, which has been cleaned up.

 * "git bisect" makes an internal call to "git diff-tree" when
   bisection finds the culprit, but this call did not initialize the
   data structure to pass to the diff-tree API correctly.

 * Further preparatory clean-up for "worktree" feature continues.
   (merge 0409e0b nd/worktree-cleanup-post-head-protection later to maint).

 * Formats of the various data (and how to validate them) where we use
   GPG signature have been documented.

 * A new run-command API function pipe_command() is introduced to
   sanely feed data to the standard input while capturing data from
   the standard output and the standard error of an external process,
   which is cumbersome to hand-roll correctly without deadlocking.

 * The codepath to sign data in a prepared buffer with GPG has been
   updated to use this API to read from the status-fd to check for
   errors (instead of relying on GPG's exit status).
   (merge efee955 jk/gpg-interface-cleanup later to maint).

 * Allow t/perf framework to use the features from the most recent
   version of Git even when testing an older installed version.

 * The commands in the "log/diff" family have had an FILE* pointer in the
   data structure they pass around for a long time, but some codepaths
   used to always write to the standard output.  As a preparatory step
   to make "git format-patch" available to the internal callers, these
   codepaths have been updated to consistently write into that FILE*
   instead.

 * Conversion from unsigned char sha1[20] to struct object_id
   continues.

 * Improve the look of the way "git fetch" reports what happened to
   each ref that was fetched.

 * The .c/.h sources are marked as such in our .gitattributes file so
   that "git diff -W" and friends would work better.

 * Code clean-up to avoid using a variable string that compilers may
   feel untrustable as printf-style format given to write_file()
   helper function.

 * "git p4" used a location outside $GIT_DIR/refs/ to place its
   temporary branches, which has been moved to refs/git-p4-tmp/.

 * Existing autoconf generated test for the need to link with pthread
   library did not check all the functions from pthread libraries;
   recent FreeBSD has some functions in libc but not others, and we
   mistakenly thought linking with libc is enough when it is not.

 * When "git fsck" reports a broken link (e.g. a tree object contains
   a blob that does not exist), both containing object and the object
   that is referred to were reported with their 40-hex object names.
   The command learned the "--name-objects" option to show the path to
   the containing object from existing refs (e.g. "HEAD~24^2:file.txt").

 * Allow http daemon tests in Travis CI tests.

 * Makefile assumed that -lrt is always available on platforms that
   want to use clock_gettime() and CLOCK_MONOTONIC, which is not a
   case for recent Mac OS X.  The necessary symbols are often found in
   libc on many modern systems and having -lrt on the command line, as
   long as the library exists, had no effect, but when the platform
   removes librt.a that is a different matter--having -lrt will break
   the linkage.

   This change could be seen as a regression for those who do need to
   specify -lrt, as they now specifically ask for NEEDS_LIBRT when
   building. Hopefully they are in the minority these days.

 * Further preparatory work on the refs API before the pluggable
   backend series can land.

 * Error handling in the codepaths that updates refs has been
   improved.

 * The API to iterate over all the refs (i.e. for_each_ref(), etc.)
   has been revamped.

 * The handling of the "text=auto" attribute has been corrected.
   $ echo "* text=auto eol=crlf" >.gitattributes
   used to have the same effect as
   $ echo "* text eol=crlf" >.gitattributes
   i.e. declaring all files are text (ignoring "auto").  The
   combination has been fixed to be equivalent to doing
   $ git config core.autocrlf true

 * Documentation has been updated to show better example usage
   of the updated "text=auto" attribute.

 * A few tests that specifically target "git rebase -i" have been
   added.

 * Dumb http transport on the client side has been optimized.
   (merge ecba195 ew/http-walker later to maint).

 * Users of the parse_options_concat() API function need to allocate
   extra slots in advance and fill them with OPT_END() when they want
   to decide the set of supported options dynamically, which makes the
   code error-prone and hard to read.  This has been corrected by tweaking
   the API to allocate and return a new copy of "struct option" array.

 * "git fetch" exchanges batched have/ack messages between the sender
   and the receiver, initially doubling every time and then falling
   back to enlarge the window size linearly.  The "smart http"
   transport, being an half-duplex protocol, outgrows the preset limit
   too quickly and becomes inefficient when interacting with a large
   repository.  The internal mechanism learned to grow the window size
   more aggressively when working with the "smart http" transport.

 * Tests for "git svn" have been taught to reuse the lib-httpd test
   infrastructure when testing the subversion integration that
   interacts with subversion repositories served over the http://
   protocol.
   (merge a8a5d25 ew/git-svn-http-tests later to maint).

 * "git pack-objects" has a few options that tell it not to pack
   objects found in certain packfiles, which require it to scan .idx
   files of all available packs.  The codepaths involved in these
   operations have been optimized for a common case of not having any
   non-local pack and/or any .kept pack.

 * The t3700 test about "add --chmod=-x" have been made a bit more
   robust and generally cleaned up.
   (merge 766cdc4 ib/t3700-add-chmod-x-updates later to maint).

 * The build procedure learned PAGER_ENV knob that lists what default
   environment variable settings to export for popular pagers.  This
   mechanism is used to tweak the default settings to MORE on FreeBSD.
   (merge 995bc22 ew/build-time-pager-tweaks later to maint).

 * The http-backend (the server-side component of smart-http
   transport) used to trickle the HTTP header one at a time.  Now
   these write(2)s are batched.
   (merge b36045c ew/http-backend-batch-headers later to maint).

 * When "git rebase" tries to compare set of changes on the updated
   upstream and our own branch, it computes patch-id for all of these
   changes and attempts to find matches. This has been optimized by
   lazily computing the full patch-id (which is expensive) to be
   compared only for changes that touch the same set of paths.
   (merge ba67504 kw/patch-ids-optim later to maint).

 * A handful of tests that were broken under gettext-poison build have
   been fixed.

 * The recent i18n patch we added during this cycle did a bit too much
   refactoring of the messages to avoid word-legos; the repetition has
   been reduced to help translators.


Also contains various documentation updates and code clean-ups.


Fixes since v2.9
----------------

Unless otherwise noted, all the fixes since v2.8 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * The commands in `git log` family take %C(auto) in a custom format
   string.  This unconditionally turned the color on, ignoring
   --no-color or with --color=auto when the output is not connected to
   a tty; this was corrected to make the format truly behave as
   "auto".

 * "git rev-list --count" whose walk-length is limited with "-n"
   option did not work well with the counting optimized to look at the
   bitmap index.

 * "git show -W" (extend hunks to cover the entire function, delimited
   by lines that match the "funcname" pattern) used to show the entire
   file when a change added an entire function at the end of the file,
   which has been fixed.

 * The documentation set has been updated so that literal commands,
   configuration variables and environment variables are consistently
   typeset in fixed-width font and bold in manpages.

 * "git svn propset" subcommand that was added in 2.3 days is
   documented now.

 * The documentation tries to consistently spell "GPG"; when
   referring to the specific program name, "gpg" is used.

 * "git reflog" stopped upon seeing an entry that denotes a branch
   creation event (aka "unborn"), which made it appear as if the
   reflog was truncated.

 * The git-prompt scriptlet (in contrib/) was not friendly with those
   who uses "set -u", which has been fixed.

 * compat/regex code did not cleanly compile.

 * A codepath that used alloca(3) to place an unbounded amount of data
   on the stack has been updated to avoid doing so.

 * "git update-index --add --chmod=+x file" may be usable as an escape
   hatch, but not a friendly thing to force for people who do need to
   use it regularly.  "git add --chmod=+x file" can be used instead.

 * Build improvements for gnome-keyring (in contrib/)

 * "git status" used to say "working directory" when it meant "working
   tree".

 * Comments about misbehaving FreeBSD shells have been clarified with
   the version number (9.x and before are broken, newer ones are OK).

 * "git cherry-pick A" worked on an unborn branch, but "git
   cherry-pick A..B" didn't.

 * Fix an unintended regression in v2.9 that breaks "clone --depth"
   that recurses down to submodules by forcing the submodules to also
   be cloned shallowly, which many server instances that host upstream
   of the submodules are not prepared for.

 * Fix unnecessarily waste in the idiomatic use of ': ${VAR=default}'
   to set the default value, without enclosing it in double quotes.

 * Some platform-specific code had non-ANSI strict declarations of C
   functions that do not take any parameters, which has been
   corrected.

 * The internal code used to show local timezone offset is not
   prepared to handle timestamps beyond year 2100, and gave a
   bogus offset value to the caller.  Use a more benign looking
   +0000 instead and let "git log" going in such a case, instead
   of aborting.

 * One among four invocations of readlink(1) in our test suite has
   been rewritten so that the test can run on systems without the
   command (others are in valgrind test framework and t9802).

 * t/perf needs /usr/bin/time with GNU extension; the invocation of it
   is updated to "gtime" on Darwin.

 * A bug, which caused "git p4" while running under verbose mode to
   report paths that are omitted due to branch prefix incorrectly, has
   been fixed; the command said "Ignoring file outside of prefix" for
   paths that are _inside_.

 * The top level documentation "git help git" still pointed at the
   documentation set hosted at now-defunct google-code repository.
   Update it to point to https://git.github.io/htmldocs/git.html
   instead.

 * A helper function that takes the contents of a commit object and
   finds its subject line did not ignore leading blank lines, as is
   commonly done by other codepaths.  Make it ignore leading blank
   lines to match.

 * For a long time, we carried an in-code comment that said our
   colored output would work only when we use fprintf/fputs on
   Windows, which no longer is the case for the past few years.

 * "gc.autoPackLimit" when set to 1 should not trigger a repacking
   when there is only one pack, but the code counted poorly and did
   so.

 * Add a test to specify the desired behaviour that currently is not
   available in "git rebase -Xsubtree=...".

 * More mark-up updates to typeset strings that are expected to
   literally typed by the end user in fixed-width font.

 * "git commit --amend --allow-empty-message -S" for a commit without
   any message body could have misidentified where the header of the
   commit object ends.

 * "git rebase -i --autostash" did not restore the auto-stashed change
   when the operation was aborted.

 * Git does not know what the contents in the index should be for a
   path added with "git add -N" yet, so "git grep --cached" should not
   show hits (or show lack of hits, with -L) in such a path, but that
   logic does not apply to "git grep", i.e. searching in the working
   tree files.  But we did so by mistake, which has been corrected.

 * "git blame -M" missed a single line that was moved within the file.

 * Fix recently introduced codepaths that are involved in parallel
   submodule operations, which gave up on reading too early, and
   could have wasted CPU while attempting to write under a corner
   case condition.

 * "git grep -i" has been taught to fold case in non-ascii locales
   correctly.

 * A test that unconditionally used "mktemp" learned that the command
   is not necessarily available everywhere.

 * There are certain house-keeping tasks that need to be performed at
   the very beginning of any Git program, and programs that are not
   built-in commands had to do them exactly the same way as "git"
   potty does.  It was easy to make mistakes in one-off standalone
   programs (like test helpers).  A common "main()" function that
   calls cmd_main() of individual program has been introduced to
   make it harder to make mistakes.
   (merge de61ceb jk/common-main later to maint).

 * The test framework learned a new helper test_match_signal to
   check an exit code from getting killed by an expected signal.

 * General code clean-up around a helper function to write a
   single-liner to a file.
   (merge 7eb6e10 jk/write-file later to maint).

 * One part of "git am" had an oddball helper function that called
   stuff from outside "his" as opposed to calling what we have "ours",
   which was not gender-neutral and also inconsistent with the rest of
   the system where outside stuff is usuall called "theirs" in
   contrast to "ours".

 * "git blame file" allowed the lineage of lines in the uncommitted,
   unadded contents of "file" to be inspected, but it refused when
   "file" did not appear in the current commit.  When "file" was
   created by renaming an existing file (but the change has not been
   committed), this restriction was unnecessarily tight.

 * "git add -N dir/file && git write-tree" produced an incorrect tree
   when there are other paths in the same directory that sorts after
   "file".

 * "git fetch http://user:pass@host/repo..." scrubbed the userinfo
   part, but "git push" didn't.

 * "git merge" with renormalization did not work well with
   merge-recursive, due to "safer crlf" conversion kicking in when it
   shouldn't.
   (merge 1335d76 jc/renormalize-merge-kill-safer-crlf later to maint).

 * The use of strbuf in "git rm" to build filename to remove was a bit
   suboptimal, which has been fixed.

 * An age old bug that caused "git diff --ignore-space-at-eol"
   misbehave has been fixed.

 * "git notes merge" had a code to see if a path exists (and fails if
   it does) and then open the path for writing (when it doesn't).
   Replace it with open with O_EXCL.

 * "git pack-objects" and "git index-pack" mostly operate with off_t
   when talking about the offset of objects in a packfile, but there
   were a handful of places that used "unsigned long" to hold that
   value, leading to an unintended truncation.

 * Recent update to "git daemon" tries to enable the socket-level
   KEEPALIVE, but when it is spawned via inetd, the standard input
   file descriptor may not necessarily be connected to a socket.
   Suppress an ENOTSOCK error from setsockopt().

 * Recent FreeBSD stopped making perl available at /usr/bin/perl;
   switch the default the built-in path to /usr/local/bin/perl on not
   too ancient FreeBSD releases.

 * "git commit --help" said "--no-verify" is only about skipping the
   pre-commit hook, and failed to say that it also skipped the
   commit-msg hook.

 * "git merge" in Git v2.9 was taught to forbid merging an unrelated
   lines of history by default, but that is exactly the kind of thing
   the "--rejoin" mode of "git subtree" (in contrib/) wants to do.
   "git subtree" has been taught to use the "--allow-unrelated-histories"
   option to override the default.

 * The build procedure for "git persistent-https" helper (in contrib/)
   has been updated so that it can be built with more recent versions
   of Go.

 * There is an optimization used in "git diff $treeA $treeB" to borrow
   an already checked-out copy in the working tree when it is known to
   be the same as the blob being compared, expecting that open/mmap of
   such a file is faster than reading it from the object store, which
   involves inflating and applying delta.  This however kicked in even
   when the checked-out copy needs to go through the convert-to-git
   conversion (including the clean filter), which defeats the whole
   point of the optimization.  The optimization has been disabled when
   the conversion is necessary.

 * "git -c grep.patternType=extended log --basic-regexp" misbehaved
   because the internal API to access the grep machinery was not
   designed well.

 * Windows port was failing some tests in t4130, due to the lack of
   inum in the returned values by its lstat(2) emulation.

 * The reflog output format is documented better, and a new format
   --date=unix to report the seconds-since-epoch (without timezone)
   has been added.
   (merge 442f6fd jk/reflog-date later to maint).

 * "git difftool <paths>..." started in a subdirectory failed to
   interpret the paths relative to that directory, which has been
   fixed.

 * The characters in the label shown for tags/refs for commits in
   "gitweb" output are now properly escaped for proper HTML output.

 * FreeBSD can lie when asked mtime of a directory, which made the
   untracked cache code to fall back to a slow-path, which in turn
   caused tests in t7063 to fail because it wanted to verify the
   behaviour of the fast-path.

 * Squelch compiler warnings for nedmalloc (in compat/) library.

 * A small memory leak in the command line parsing of "git blame"
   has been plugged.

 * The API documentation for hashmap was unclear if hashmap_entry
   can be safely discarded without any other consideration.  State
   that it is safe to do so.

 * Not-so-recent rewrite of "git am" that started making internal
   calls into the commit machinery had an unintended regression, in
   that no matter how many seconds it took to apply many patches, the
   resulting committer timestamp for the resulting commits were all
   the same.

 * "git push --force-with-lease" already had enough logic to allow
   ensuring that such a push results in creation of a ref (i.e. the
   receiving end did not have another push from sideways that would be
   discarded by our force-pushing), but didn't expose this possibility
   to the users.  It does so now.
   (merge 9eed4f3 jk/push-force-with-lease-creation later to maint).

 * The mechanism to limit the pack window memory size, when packing is
   done using multiple threads (which is the default), is per-thread,
   but this was not documented clearly.
   (merge 954176c ms/document-pack-window-memory-is-per-thread later to maint).

 * "import-tars" fast-import script (in contrib/) used to ignore a
   hardlink target and replaced it with an empty file, which has been
   corrected to record the same blob as the other file the hardlink is
   shared with.
   (merge 04e0869 js/import-tars-hardlinks later to maint).

 * "git mv dir non-existing-dir/" did not work in some environments
   the same way as existing mainstream platforms.  The code now moves
   "dir" to "non-existing-dir", without relying on rename("A", "B/")
   that strips the trailing slash of '/'.
   (merge 189d035 js/mv-dir-to-new-directory later to maint).

 * The "t/" hierarchy is prone to get an unusual pathname; "make test"
   has been taught to make sure they do not contain paths that cannot
   be checked out on Windows (and the mechanism can be reusable to
   catch pathnames that are not portable to other platforms as need
   arises).
   (merge c2cafd3 js/test-lint-pathname later to maint).

 * When "git merge-recursive" works on history with many criss-cross
   merges in "verbose" mode, the names the command assigns to the
   virtual merge bases could have overwritten each other by unintended
   reuse of the same piece of memory.
   (merge 5447a76 rs/pull-signed-tag later to maint).

 * "git checkout --detach <branch>" used to give the same advice
   message as that is issued when "git checkout <tag>" (or anything
   that is not a branch name) is given, but asking with "--detach" is
   an explicit enough sign that the user knows what is going on.  The
   advice message has been squelched in this case.
   (merge 779b88a sb/checkout-explit-detach-no-advice later to maint).

 * "git difftool" by default ignores the error exit from the backend
   commands it spawns, because often they signal that they found
   differences by exiting with a non-zero status code just like "diff"
   does; the exit status codes 126 and above however are special in
   that they are used to signal that the command is not executable,
   does not exist, or killed by a signal.  "git difftool" has been
   taught to notice these exit status codes.
   (merge 45a4f5d jk/difftool-command-not-found later to maint).

 * On Windows, help.browser configuration variable used to be ignored,
   which has been corrected.
   (merge 6db5967 js/no-html-bypass-on-windows later to maint).

 * The "git -c var[=val] cmd" facility to append a configuration
   variable definition at the end of the search order was described in
   git(1) manual page, but not in git-config(1), which was more likely
   place for people to look for when they ask "can I make a one-shot
   override, and if so how?"
   (merge ae1f709 dg/document-git-c-in-git-config-doc later to maint).

 * The tempfile (hence its user lockfile) API lets the caller to open
   a file descriptor to a temporary file, write into it and then
   finalize it by first closing the filehandle and then either
   removing or renaming the temporary file.  When the process spawns a
   subprocess after obtaining the file descriptor, and if the
   subprocess has not exited when the attempt to remove or rename is
   made, the last step fails on Windows, because the subprocess has
   the file descriptor still open.  Open tempfile with O_CLOEXEC flag
   to avoid this (on Windows, this is mapped to O_NOINHERIT).
   (merge 05d1ed6 bw/mingw-avoid-inheriting-fd-to-lockfile later to maint).

 * Correct an age-old calco (is that a typo-like word for calc)
   in the documentation.
   (merge 7841c48 ls/packet-line-protocol-doc-fix later to maint).

 * Other minor clean-ups and documentation updates
   (merge 02a8cfa rs/merge-add-strategies-simplification later to maint).
   (merge af4941d rs/merge-recursive-string-list-init later to maint).
   (merge 1eb47f1 rs/use-strbuf-add-unique-abbrev later to maint).
   (merge ddd0bfa jk/tighten-alloc later to maint).
   (merge ecf30b2 rs/mailinfo-lib later to maint).
   (merge 0eb75ce sg/reflog-past-root later to maint).
   (merge 4369523 hv/doc-commit-reference-style later to maint).

----------------------------------------------------------------

Changes since v2.9.0 are as follows:

Alex Henrie (2):
      unpack-trees: fix English grammar in do-this-before-that messages
      l10n: ca.po: update translation

Alexander Hirsch (1):
      pull: warn on --verify-signatures with --rebase

Alfred Perlstein (1):
      git-svn: document the 'git svn propset' command

Andreas Brauchli (1):
      gitweb: escape link body in format_ref_marker

Andrew Oakley (1):
      git-p4: correct hasBranchPrefix verbose output

Antoine Queru (1):
      upload-pack.c: use parse-options API

Armin Kunaschik (2):
      t7800: readlink may not be available
      t7610: test for mktemp before test execution

Ben Wijen (2):
      t6026-merge-attr: child processes must not inherit index.lock handles
      mingw: ensure temporary file handles are not inherited by child processes

Changwoo Ryu (1):
      l10n: ko.po: Update Korean translation

Charles Bailey (4):
      t7810: fix duplicated test title
      t7810-grep.sh: fix duplicated test name
      t7810-grep.sh: fix a whitespace inconsistency
      grep: fix grepping for "intent to add" files

Chris Packham (1):
      completion: add option '--recurse-submodules' to 'git clone'

Christian Couder (50):
      builtin/apply: make gitdiff_verify_name() return void
      builtin/apply: avoid parameter shadowing 'p_value' global
      builtin/apply: avoid parameter shadowing 'linenr' global
      builtin/apply: avoid local variable shadowing 'len' parameter
      builtin/apply: extract line_by_line_fuzzy_match() from match_fragment()
      builtin/apply: move 'options' variable into cmd_apply()
      builtin/apply: move 'read_stdin' global into cmd_apply()
      builtin/apply: introduce 'struct apply_state' to start libifying
      builtin/apply: move 'state' init into init_apply_state()
      builtin/apply: move 'unidiff_zero' global into 'struct apply_state'
      builtin/apply: move 'check' global into 'struct apply_state'
      builtin/apply: move 'check_index' global into 'struct apply_state'
      builtin/apply: move 'apply_in_reverse' global into 'struct apply_state'
      builtin/apply: move 'apply_with_reject' global into 'struct apply_state'
      builtin/apply: move 'apply_verbosely' global into 'struct apply_state'
      builtin/apply: move 'update_index' global into 'struct apply_state'
      builtin/apply: move 'allow_overlap' global into 'struct apply_state'
      builtin/apply: move 'cached' global into 'struct apply_state'
      builtin/apply: move 'diffstat' global into 'struct apply_state'
      builtin/apply: move 'numstat' global into 'struct apply_state'
      builtin/apply: move 'summary' global into 'struct apply_state'
      builtin/apply: move 'threeway' global into 'struct apply_state'
      builtin/apply: move 'no_add' global into 'struct apply_state'
      builtin/apply: move 'unsafe_paths' global into 'struct apply_state'
      builtin/apply: move 'line_termination' global into 'struct apply_state'
      builtin/apply: move 'fake_ancestor' global into 'struct apply_state'
      builtin/apply: move 'p_context' global into 'struct apply_state'
      builtin/apply: move 'apply' global into 'struct apply_state'
      builtin/apply: move 'patch_input_file' global into 'struct apply_state'
      builtin/apply: move 'limit_by_name' global into 'struct apply_state'
      builtin/apply: move 'has_include' global into 'struct apply_state'
      builtin/apply: move 'p_value' global into 'struct apply_state'
      builtin/apply: move 'p_value_known' global into 'struct apply_state'
      builtin/apply: move 'root' global into 'struct apply_state'
      builtin/apply: move 'whitespace_error' global into 'struct apply_state'
      builtin/apply: move 'whitespace_option' into 'struct apply_state'
      builtin/apply: remove whitespace_option arg from set_default_whitespace_mode()
      builtin/apply: move 'squelch_whitespace_errors' into 'struct apply_state'
      builtin/apply: move 'applied_after_fixing_ws' into 'struct apply_state'
      builtin/apply: move 'ws_error_action' into 'struct apply_state'
      builtin/apply: move 'ws_ignore_action' into 'struct apply_state'
      builtin/apply: move 'max_change' and 'max_len' into 'struct apply_state'
      builtin/apply: move 'state_linenr' global into 'struct apply_state'
      builtin/apply: move 'fn_table' global into 'struct apply_state'
      builtin/apply: move 'symlink_changes' global into 'struct apply_state'
      builtin/apply: move 'state' check into check_apply_state()
      builtin/apply: move applying patches into apply_all_patches()
      builtin/apply: add 'lock_file' pointer into 'struct apply_state'
      builtin/apply: move 'newfd' global into 'struct apply_state'
      .mailmap: use Christian Couder's Tuxfamily address

Christopher Layne (1):
      git-svn: clone: Fail on missing url argument

Dave Nicolson (1):
      Documentation: GPG capitalization

David A. Greene (1):
      contrib/subtree: Add a test for subtree rebase that loses commits

David Aguilar (6):
      t7900-subtree.sh: fix quoting and broken && chains
      subtree: fix "git subtree split --rejoin"
      subtree: adjust style to match CodingGuidelines
      subtree: adjust function definitions to match CodingGuidelines
      difftool: avoid $GIT_DIR and $GIT_WORK_TREE
      difftool: use Git::* functions instead of passing around state

David Glasser (1):
      doc: mention `git -c` in git-config(1)

David Kastrup (1):
      blame: require 0 context lines while finding moved lines with -M

David Turner (3):
      refs: allow log-only updates
      refs: don't dereference on rename
      mailmap: use main email address for dturner

Ed Maste (1):
      rebase: update comment about FreeBSD /bin/sh

Edward Thomson (2):
      format_commit_message: honor `color=auto` for `%C(auto)`
      add: add --chmod=+x / --chmod=-x options

Elia Pinto (2):
      http.c: implement the GIT_TRACE_CURL environment variable
      imap-send.c: introduce the GIT_TRACE_CURL enviroment variable

Eric Sunshine (1):
      blame: drop strdup of string literal

Eric Wong (24):
      fast-import: implement unpack limit
      daemon: enable SO_KEEPALIVE for all sockets
      fast-import: invalidate pack_id references after loosening
      pretty: support "mboxrd" output format
      mailsplit: support unescaping mboxrd messages
      am: support --patch-format=mboxrd
      git-svn: skip mergeinfo handling with --no-follow-parent
      gc: fix off-by-one error with gc.autoPackLimit
      xread: retry after poll on EAGAIN/EWOULDBLOCK
      xwrite: poll on non-blocking FDs
      git-svn: warn instead of dying when commit data is missing
      hoist out handle_nonblock function for xread and xwrite
      config.mak.uname: define NEEDS_LIBRT under Linux, for now
      http-walker: remove unused parameter from fetch_object
      http: avoid disconnecting on 404s for loose objects
      http-walker: reduce O(n) ops with doubly-linked list
      list: avoid incompatibility with *BSD sys/queue.h
      daemon: ignore ENOTSOCK from setsockopt
      configure.ac: stronger test for pthread linkage
      git-svn: document svn.authorsProg in config
      git-svn: allow --version to work anywhere
      git svn: migrate tests to use lib-httpd
      pager: move pager-specific setup into the build
      http-backend: buffer headers before sending

Heiko Becker (1):
      gnome-keyring: Don't hard-code pkg-config executable

Heiko Voigt (4):
      submodule-config: passing name reference for .gitmodule blobs
      submodule-config: combine early return code into one goto
      submodule-config: fix test binary crashing when no arguments given
      SubmittingPatches: document how to reference previous commits

Ingo Brückl (3):
      t3700: remove unwanted leftover files before running new tests
      t3700: merge two tests into one
      t3700: add a test_mode_in_index helper function

Jacob Keller (1):
      completion: add completion for --submodule=* diff option

Jean-Noel Avila (4):
      i18n: fix typos for translation
      i18n: fix git rebase interactive commit messages
      i18n: simplify numeric error reporting
      l10n: fr.po v2.10.0-rc2

Jeff King (107):
      git_config_with_options: drop "found" counting
      git_config_parse_parameter: refactor cleanup code
      config: set up config_source for command-line config
      config: return configset value for current_config_ functions
      config: add a notion of "scope"
      upload-pack: provide a hook for running pack-objects
      rev-list: "adjust" results of "--count --use-bitmap-index -n"
      rev-list: disable bitmaps when "-n" is used with listing objects
      tree-diff: avoid alloca for large allocations
      send-pack: use buffered I/O to talk to pack-objects
      parse_opt_string_list: stop allocating new strings
      interpret-trailers: don't duplicate option strings
      blame,shortlog: don't make local option variables static
      use string_list initializer consistently
      fetch: document that pruning happens before fetching
      repack: document --unpack-unreachable option
      repack: add --keep-unreachable option
      repack: extend --keep-unreachable to loose objects
      add--interactive: respect diff.compactionHeuristic
      bisect: always call setup_revisions after init_revisions
      gpg-interface: use child_process.args
      verify_signed_buffer: drop pbuf variable
      verify_signed_buffer: use tempfile object
      run-command: add pipe_command helper
      verify_signed_buffer: use pipe_command
      sign_buffer: use pipe_command
      t0006: rename test-date's "show" to "relative"
      t0006: test various date formats
      local_tzoffset: detect errors from tm_to_time_t
      t/perf: fix regression in testing older versions of git
      p4211: explicitly disable renames in no-rename test
      color: fix max-size comment
      doc: refactor description of color format
      add skip_prefix_mem helper
      color: refactor parse_attr
      color: allow "no-" for negating attributes
      color: support "italic" attribute
      color: support strike-through attribute
      t9300: factor out portable "head -c" replacement
      t5000: test tar files that overflow ustar headers
      archive-tar: write extended headers for file sizes >= 8GB
      archive-tar: write extended headers for far-future mtime
      archive-tar: drop return value
      add an extra level of indirection to main()
      common-main: call git_extract_argv0_path()
      common-main: call sanitize_stdfds()
      common-main: call restore_sigpipe_to_default()
      common-main: call git_setup_gettext()
      tests: factor portable signal check out of t0005
      t0005: use test_match_signal as appropriate
      test_must_fail: use test_match_signal
      t/lib-git-daemon: use test_match_signal
      parse_options: allocate a new array when concatenating
      Makefile: drop extra dependencies for test helpers
      Makefile: use VCSSVN_LIB to refer to svn library
      config: fix bogus fd check when setting up default config
      branch: use non-gentle write_file for branch description
      write_file: drop "gently" form
      write_file: use xopen
      write_file: add pointer+len variant
      write_file: add format attribute
      use write_file_buf where applicable
      branch: use write_file_buf instead of write_file
      walker: let walker_say take arbitrary formats
      avoid using sha1_to_hex output as printf format
      push: anonymize URL in status output
      t0006: skip "far in the future" test when unsigned long is not long enough
      check_everything_connected: always pass --quiet to rev-list
      rev-list: add optional progress reporting
      check_everything_connected: convert to argv_array
      check_everything_connected: use a struct with named options
      check_connected: relay errors to alternate descriptor
      check_connected: add progress flag
      clone: use a real progress meter for connectivity check
      index-pack: add flag for showing delta-resolution progress
      receive-pack: turn on index-pack resolving progress
      receive-pack: relay connectivity errors to sideband
      receive-pack: turn on connectivity progress
      receive-pack: send keepalives during quiet periods
      t5541: fix url scrubbing test when GPG is not set
      diff: do not reuse worktree files that need "clean" conversion
      contrib/git-jump: fix greedy regex when matching hunks
      contrib/git-jump: add whitespace-checking mode
      contrib/git-jump: fix typo in README
      doc/rev-list-options: clarify "commit@{Nth}" for "-g" option
      doc/rev-list-options: explain "-g" output formats
      doc/pretty-formats: describe index/time formats for %gd
      doc/pretty-formats: explain shortening of %gd
      t4205: drop top-level &&-chaining
      t4205: indent here documents
      date: document and test "raw-local" mode
      date: add "unix" format
      t/perf: add tests for many-pack scenarios
      sha1_file: drop free_pack_by_name
      add generic most-recently-used list
      find_pack_entry: replace last_found_pack with MRU cache
      pack-objects: break out of want_object loop early
      pack-objects: compute local/ignore_pack_keep early
      am: reset cached ident date for each patch
      trace: handle NULL argument in trace_disable()
      trace: stop using write_or_whine_pipe()
      trace: use warning() for printing trace errors
      trace: cosmetic fixes for error messages
      trace: correct variable name in write() error message
      trace: disable key after write error
      write_or_die: drop write_or_whine_pipe()
      trace: do not fall back to stderr

Jiang Xin (3):
      l10n: git.pot: v2.10.0 round 1 (248 new, 56 removed)
      l10n: git.pot: v2.10.0 round 2 (12 new, 44 removed)
      l10n: zh_CN: for git v2.10.0 l10n round 2

Joey Hess (1):
      clarify %f documentation

Johannes Schindelin (59):
      mingw: let the build succeed with DEVELOPER=1
      perf: accommodate for MacOSX
      pretty: make the skip_blank_lines() function public
      commit.c: make find_commit_subject() more robust
      t2300: "git --exec-path" is not usable in $PATH on Windows as-is
      log: prepare log/log-tree to reuse the diffopt.close_file attribute
      log-tree: respect diffopt's configured output file stream
      line-log: respect diffopt's configured output file stream
      graph: respect the diffopt.file setting
      shortlog: support outputting to streams other than stdout
      format-patch: explicitly switch off color when writing to files
      format-patch: avoid freopen()
      format-patch: use stdout directly
      shortlog: respect the --output=<file> setting
      t4211: ensure that log respects --output=<file>
      color.h: remove obsolete comment about limitations on Windows
      diff: do not color output when --color=auto and --output=<file> is given
      t3404: fix a grammo (commands are ran -> commands are run)
      commit -C: skip blank lines at the beginning of the message
      sequencer: use skip_blank_lines() to find the commit subject
      reset --hard: skip blank lines when reporting the commit subject
      commit -S: avoid invalid pointer with empty message
      mingw: declare main()'s argv as const
      t3404: add a test for the --gpg-sign option
      rebase -i: demonstrate a bug with --autosquash
      rebase -i: we allow extra spaces after fixup!/squash!
      am: counteract gender bias
      diff: demonstrate a bug with --patience and --ignore-space-at-eol
      diff: fix a double off-by-one with --ignore-space-at-eol
      t/test-lib.sh: fix running tests with --valgrind
      mingw: fix the shortlog --output=<file> test
      mingw: fix regression in t1308-config-set
      fsck: refactor how to describe objects
      fsck_walk(): optionally name objects on the go
      fsck: give the error function a chance to see the fsck_options
      fsck: optionally show more helpful info for broken links
      t5520: verify that `pull --rebase` shows the helpful advice when failing
      die("bug"): report bugs consistently
      die(_("BUG")): avoid translating bug messages
      merge-recursive: clarify code in was_tracked()
      prepare the builtins for a libified merge_recursive()
      merge_recursive: abort properly upon errors
      merge-recursive: avoid returning a wholesale struct
      merge-recursive: allow write_tree_from_memory() to error out
      merge-recursive: handle return values indicating errors
      merge-recursive: switch to returning errors instead of dying
      am -3: use merge_recursive() directly again
      merge-recursive: flush output buffer before printing error messages
      merge-recursive: write the commit title in one go
      merge-recursive: offer an option to retain the output in 'obuf'
      merge_trees(): ensure that the callers release output buffer
      merge-recursive: flush output buffer even when erroring out
      import-tars: support hard links
      t5533: make it pass on case-sensitive filesystems
      nedmalloc: fix misleading indentation
      git mv: do not keep slash in `git mv dir non-existing-dir/`
      t/Makefile: ensure that paths are valid on platforms we care
      rev-parse: respect core.hooksPath in --git-path
      Revert "display HTML in default browser using Windows' shell API"

Johannes Sixt (7):
      Windows: add missing definition of ENOTSOCK
      git-submodule: forward exit code of git-submodule--helper more faithfully
      submodule-helper: fix indexing in clone retry error reporting path
      rebase-interactive: trim leading whitespace from progress count
      t4130: work around Windows limitation
      config.c: avoid duplicated global static variables
      commit-slab.h: avoid duplicated global static variables

John Keeping (5):
      difftool: fix argument handling in subdirs
      Documentation/git-push: fix placeholder formatting
      push: add shorthand for --force-with-lease branch creation
      push: allow pushing new branches with --force-with-lease
      difftool: always honor fatal error exit codes

Jonathan Nieder (1):
      doc: git-htmldocs.googlecode.com is no more

Jonathan Tan (1):
      fetch-pack: grow stateless RPC windows exponentially

Jordan DE GEA (1):
      worktree: allow "-" short-hand for @{-1} in add command

Josef Kufner (1):
      pretty: pass graph width to pretty formatting for use in '%>|(N)'

Josh Triplett (1):
      format-patch: format.from gives the default for --from

Junio C Hamano (44):
      send-email: detect and offer to skip backup files
      pathspec: rename free_pathspec() to clear_pathspec()
      t1308: do not get fooled by symbolic links to the source tree
      builtin/apply: remove misleading comment on lock_file field
      blame, line-log: do not loop around deref_tag()
      Start the post-2.9 cycle
      clone: do not let --depth imply --shallow-submodules
      Start preparing for 2.9.1
      Second batch of topics for 2.10
      More fixes for 2.9.1
      Third batch of topics for 2.10
      commit.c: remove print_commit_list()
      Fourth batch of topics for 2.10
      Git 2.9.1
      merge: avoid "safer crlf" during recording of merge results
      Fifth batch of topics for 2.10
      diff: document diff-filter exclusion
      Git 2.9.2
      archive-tar: huge offset and future timestamps would not work on 32-bit
      Sixth batch of topics for 2.10
      grep: further simplify setting the pattern type
      Seventh batch of topics for 2.10
      date: clarify --date=raw description
      Some fixes for 2.9.3
      t9100: portability fix
      Eighth batch of topics for 2.10
      hashmap: clarify that hashmap_entry can safely be discarded
      Ninth batch of topics for 2.10
      Tenth batch for 2.10
      Hopefully final batch for 2.9.3
      Eleventh batch for 2.10
      Yet another batch for 2.9.3
      Twelfth batch for 2.10
      Git 2.9.3
      Final batch before 2.10-rc0
      Git 2.10-rc0
      Relnotes: decribe the updates to the "text=auto" attribute
      relnotes: redo the description of text=auto fix
      RelNotes: final batch of topics before -rc1
      Git 2.10-rc1
      Prepare for 2.10.0-rc2
      Git 2.10-rc2
      A few more fixes before the final 2.10
      Git 2.10

Keith McGuigan (1):
      builtin/fetch.c: don't free remote->name after fetch

Kevin Willford (4):
      patch-ids: stop using a hand-rolled hashmap implementation
      patch-ids: replace the seen indicator with a commit pointer
      patch-ids: add flag to create the diff patch id using header only data
      rebase: avoid computing unnecessary patch IDs

LE Manh Cuong (1):
      sh-setup: enclose setting of ${VAR=default} in double-quotes

Lars Schneider (3):
      git-p4: place temporary refs used for branch import under refs/git-p4-tmp
      travis-ci: enable web server tests t55xx on Linux
      pack-protocol: fix maximum pkt-line size

Lars Vogel (1):
      Use "working tree" instead of "working directory" for git status

Linus Torvalds (1):
      gpg-interface: prefer "long" key format output when verifying pgp signatures

Lukas Fleischer (4):
      receive-pack: send auto-gc output over sideband 2
      sideband.c: make send_sideband() return void
      upload-pack.c: make send_client_data() return void
      sideband.c: refactor recv_sideband()

Matthieu Moy (9):
      Documentation/git-mv.txt: fix whitespace indentation
      doc: typeset short command-line options as literal
      doc: typeset long command-line options as literal
      doc: typeset '--' as literal
      doc: typeset long options with argument as literal
      CodingGuidelines: formatting HEAD in documentation
      doc: typeset HEAD and variants as literal
      status: suggest 'git merge --abort' when appropriate
      git-multimail: update to release 1.4.0

Mehul Jain (3):
      t4202: refactor test
      log: add "--no-show-signature" command line option
      log: add log.showSignature configuration variable

Michael Haggerty (50):
      t1404: demonstrate a bug resolving references
      commit_ref(): if there is an empty dir in the way, delete it
      read_raw_ref(): don't get confused by an empty directory
      safe_create_leading_directories(): improve docstring
      remove_dir_recursively(): add docstring
      refname_is_safe(): use skip_prefix()
      refname_is_safe(): don't allow the empty string
      refname_is_safe(): insist that the refname already be normalized
      commit_ref_update(): write error message to *err, not stderr
      rename_ref(): remove unneeded local variable
      ref_transaction_commit(): remove local variables n and updates
      read_raw_ref(): rename flags argument to type
      read_raw_ref(): clear *type at start of function
      read_raw_ref(): rename symref argument to referent
      read_raw_ref(): improve docstring
      read_raw_ref(): move docstring to header file
      lock_ref_sha1_basic(): remove unneeded local variable
      refs: make error messages more consistent
      ref_transaction_create(): disallow recursive pruning
      ref_transaction_commit(): correctly report close_ref() failure
      delete_branches(): use resolve_refdup()
      verify_refname_available(): adjust constness in declaration
      add_update(): initialize the whole ref_update
      lock_ref_for_update(): new function
      unlock_ref(): move definition higher in the file
      ref_transaction_update(): check refname_is_safe() at a minimum
      refs: resolve symbolic refs first
      lock_ref_for_update(): don't re-read non-symbolic references
      lock_ref_for_update(): don't resolve symrefs
      commit_ref_update(): remove the flags parameter
      lock_ref_sha1_basic(): only handle REF_NODEREF mode
      refs: remove unnecessary "extern" keywords
      do_for_each_ref(): move docstring to the header file
      refs: use name "prefix" consistently
      delete_refs(): add a flags argument
      remote rm: handle symbolic refs correctly
      get_ref_cache(): only create an instance if there is a submodule
      entry_resolves_to_object(): rename function from ref_resolves_to_object()
      ref_resolves_to_object(): new function
      refs: introduce an iterator interface
      do_for_each_ref(): reimplement using reference iteration
      for_each_reflog(): don't abort for bad references
      dir_iterator: new API for iterating over a directory tree
      for_each_reflog(): reimplement using iterators
      t1404: rename file to t1404-update-ref-errors.sh
      t1404: remove "prefix" argument to test_update_rejected
      t1404: document function test_update_rejected
      t1404: add more tests of update-ref error handling
      lock_ref_for_update(): make error handling more uniform
      lock_ref_for_update(): avoid a symref resolution

Michael J Gruber (7):
      cherry-pick: allow to pick to unborn branches
      Documentation/technical: describe signature formats
      Documentation/technical: signed tag format
      Documentation/technical: signed commit format
      Documentation/technical: signed merge tag format
      gpg-interface: check gpg signature creation status
      t/t91*: do not say how to avoid the tests

Michael Stahl (1):
      document git-repack interaction of pack.threads and pack.windowMemory

Mike Hommey (2):
      blame: allow to blame paths freshly added to the index
      t/t8003-blame-corner-cases.sh: Use here documents

Nguyễn Thái Ngọc Duy (47):
      completion: support git-worktree
      worktree.c: rewrite mark_current_worktree() to avoid strbuf
      git-worktree.txt: keep subcommand listing in alphabetical order
      worktree.c: use is_dot_or_dotdot()
      worktree: avoid 0{40}, too many zeroes, hard to read
      worktree: simplify prefixing paths
      worktree.c: add find_worktree()
      worktree.c: add is_main_worktree()
      lib-httpd.sh: print error.log on error
      worktree.c: add is_worktree_locked()
      pretty.c: support <direction>|(<negative number>) forms
      new-command.txt: correct the command description file
      grep: break down an "if" stmt in preparation for next changes
      test-regex: isolate the bug test code
      test-regex: expose full regcomp() to the command line
      grep/icase: avoid kwsset on literal non-ascii strings
      git-fetch.txt: document fetch output
      fetch: refactor ref update status formatting code
      fetch: change flag code for displaying tag update and deleted ref
      grep/icase: avoid kwsset when -F is specified
      grep: rewrite an if/else condition to avoid duplicate expression
      grep/pcre: prepare locale-dependent tables for icase matching
      gettext: add is_utf8_locale()
      grep/pcre: support utf-8
      diffcore-pickaxe: Add regcomp_or_die()
      diffcore-pickaxe: support case insensitive match on non-ascii
      grep.c: reuse "icase" variable
      fetch: align all "remote -> local" output
      fetch: reduce duplicate in ref update status lines with placeholder
      connect: read $GIT_SSH_COMMAND from config file
      worktree: add "lock" command
      worktree: add "unlock" command
      worktree.c: find_worktree() search by path suffix
      pack-objects: pass length to check_pack_crc() without truncation
      log: decorate HEAD -> branch with the same color for arrow and HEAD
      sha1_file.c: use type off_t* for object_info->disk_sizep
      index-pack: correct "len" type in unpack_data()
      index-pack: report correct bad object offsets even if they are large
      index-pack: correct "offset" type in unpack_entry_data()
      pack-objects: do not truncate result in-pack object size on 32-bit systems
      fsck: use streaming interface for large blobs in pack
      test-lib.sh: introduce and use $EMPTY_TREE
      test-lib.sh: introduce and use $EMPTY_BLOB
      cache-tree.c: fix i-t-a entry skipping directory updates sometimes
      cache-tree: do not generate empty trees as a result of all i-t-a subentries
      config.mak.uname: correct perl path on FreeBSD
      t7063: work around FreeBSD's lazy mtime update feature

Nicolas Pitre (1):
      sideband.c: small optimization of strbuf usage

Orgad Shaneh (1):
      commit: describe that --no-verify skips the commit-msg hook in the help text

Parker Moore (2):
      contrib/persistent-https: update ldflags syntax for Go 1.7+
      contrib/persistent-https: use Git version for build label

Patrick Steinhardt (1):
      rebase -i: restore autostash on abort

Peter Colberg (2):
      refs.h: fix misspelt "occurred" in a comment
      config.c: fix misspelt "occurred" in an error message

Peter Krefting (1):
      l10n: sv.po: Update Swedish translation (2757t0f0u)

Pranit Bauva (2):
      builtin/commit.c: memoize git-path for COMMIT_EDITMSG
      strbuf: describe the return value of strbuf_read_file

Ramsay Jones (2):
      regex: fix a SIZE_MAX macro redefinition warning
      write_or_die: remove the unused write_or_whine() function

René Scharfe (34):
      t4051: rewrite, add more tests
      xdiff: factor out match_func_rec()
      xdiff: handle appended chunks better with -W
      xdiff: ignore empty lines before added functions with -W
      xdiff: -W: don't include common trailing empty lines in context
      xdiff: don't trim common tail with -W
      t7810: add test for grep -W and trailing empty context lines
      grep: -W: don't extend context to trailing empty lines
      xdiff: fix merging of appended hunk with -W
      .gitattributes: set file type for C files
      notes-merge: use O_EXCL to avoid overwriting existing files
      am: ignore return value of write_file()
      rm: reuse strbuf for all remove_dir_recursively() calls
      worktree: use strbuf_add_absolute_path() directly
      use strbuf_addbuf() for appending a strbuf to another
      submodule-config: use explicit empty string instead of strbuf in config_from()
      strbuf: avoid calling strbuf_grow() twice in strbuf_addbuf()
      use strbuf_addstr() for adding constant strings to a strbuf
      pass constants as first argument to st_mult()
      use strbuf_addstr() instead of strbuf_addf() with "%s"
      use CHILD_PROCESS_INIT to initialize automatic variables
      merge-recursive: use STRING_LIST_INIT_NODUP
      merge: use string_list_split() in add_strategies()
      nedmalloc: work around overzealous GCC 6 warning
      archive-tar: make write_extended_header() void
      use strbuf_add_unique_abbrev() for adding short hashes
      correct FLEXPTR_* example in comment
      mailinfo: recycle strbuf in check_header()
      commit: use xstrdup() in get_merge_parent()
      commit: factor out set_merge_remote_desc()
      merge-recursive: fix verbose output for multiple base trees
      commit: use FLEX_ARRAY in struct merge_remote_desc
      receive-pack: use FLEX_ALLOC_MEM in queue_command()
      p3400: make test script executable

Ronald Wampler (1):
      Makefile: add NEEDS_LIBRT to optionally link with librt

SZEDER Gábor (2):
      reflog: continue walking the reflog past root commits
      t1410: remove superfluous 'git reflog' from the 'walk past root' test

Stefan Beller (23):
      submodule update: make use of the existing fetch_in_submodule function
      submodule-config: keep shallow recommendation around
      submodule update: learn `--[no-]recommend-shallow` option
      submodule--helper: initial clone learns retry logic
      submodule update: continue when a clone fails
      t5614: don't use subshells
      push options: {pre,post}-receive hook learns about push options
      receive-pack: implement advertising and receiving push options
      push: accept push options
      add a test for push options
      Documentation: pack-protocol correct NAK response
      submodule deinit: remove outdated comment
      t7406: future proof tests with hard coded depth
      submodule update: respect depth in subsequent fetches
      submodule update: narrow scope of local variable
      submodule--helper: fix usage string for relative-path
      submodule-config: keep configured branch around
      gitmodules: document shallow recommendation
      submodule--helper: add remote-branch helper
      submodule update: allow '.' for branch value
      submodule--helper: use parallel processor correctly
      t7406: fix breakage on OSX
      checkout: do not mention detach advice for explicit --detach option

Thomas Braun (3):
      completion: factor out untracked file modes into a variable
      completion: add __git_get_option_value helper
      completion: add git status

Thomas Gummerer (1):
      blame: fix segfault on untracked files

Tom Russello (4):
      doc: clearer rule about formatting literals
      doc: change environment variables format
      doc: more consistency in environment variables format
      doc: change configuration variables format

Torsten Bögershausen (4):
      convert: unify the "auto" handling of CRLF
      convert: Correct NNO tests and missing `LF will be replaced by CRLF`
      git ls-files: text=auto eol=lf is supported in Git 2.10
      gitattributes: Document the unified "auto" handling

Trần Ngọc Quân (2):
      l10n: Updated Vietnamese translation for v2.10.0 (2789t)
      l10n: Updated Vietnamese translation for v2.10.0-rc2 (2757t)

Vasco Almeida (49):
      i18n: builtin/remote.c: fix mark for translation
      i18n: advice: mark string about detached head for translation
      i18n: advice: internationalize message for conflicts
      i18n: transport: mark strings for translation
      i18n: sequencer: mark entire sentences for translation
      i18n: rebase-interactive: mark here-doc strings for translation
      i18n: sequencer: mark string for translation
      i18n: rebase-interactive: mark comments of squash for translation
      i18n: merge-octopus: mark messages for translation
      i18n: setup: mark strings for translation
      merge-octopus: use die shell function from git-sh-setup.sh
      tests: use test_i18n* functions to suppress false positives
      i18n: rebase: fix marked string to use eval_gettext variant
      tests: unpack-trees: update to use test_i18n* functions
      i18n: rebase: mark placeholder for translation
      t9003: become resilient to GETTEXT_POISON
      i18n: bisect: simplify error message for i18n
      t4153: fix negated test_i18ngrep call
      t6030: update to use test_i18ncmp
      t5523: use test_i18ngrep for negation
      i18n: git-sh-setup.sh: mark strings for translation
      i18n: bisect: mark strings for translation
      i18n: rebase-interactive: mark strings for translation
      i18n: transport-helper.c: change N_() call to _()
      i18n: notes: mark strings for translation
      i18n: notes: mark options for translation
      i18n: merge: mark messages for translation
      i18n: merge: change command option help to lowercase
      i18n: sequencer: add period to error message
      i18n: standardise messages
      i18n: remote: mark URL fallback text for translation
      i18n: remote: allow translations to reorder message
      i18n: init-db: join message pieces
      i18n: submodule: join strings marked for translation
      i18n: submodule: escape shell variables inside eval_gettext
      i18n: unmark die messages for translation
      i18n: branch: mark comment when editing branch description for translation
      t5541: become resilient to GETTEXT_POISON
      t5510: skip tests under GETTEXT_POISON build
      i18n: notes: mark comment for translation
      i18n: config: unfold error messages marked for translation
      i18n: setup: mark error messages for translation
      i18n: archive: mark errors for translation
      i18n: git-stash: mark messages for translation
      t3404: become resilient to GETTEXT_POISON
      t5520: become resilient to GETTEXT_POISON
      t7411: become resilient to GETTEXT_POISON
      l10n: pt_PT: merge git.pot
      l10n: pt_PT: update Portuguese translation

Ville Skyttä (3):
      git-prompt.sh: Don't error on null ${ZSH,BASH}_VERSION, $short_sha
      completion: complete --delete, --move, and --remotes for git branch
      Spelling fixes

William Duclot (1):
      userdiff: add built-in pattern for CSS

brian m. carlson (11):
      hex: add oid_to_hex_r()
      contrib/coccinelle: add basic Coccinelle transforms
      coccinelle: convert hashcpy() with null_sha1 to hashclr()
      coccinelle: apply object_id Coccinelle transformations
      diff: convert struct diff_filespec to struct object_id
      diff: rename struct diff_filespec's sha1_valid member
      merge-recursive: convert struct stage_data to use object_id
      merge-recursive: convert struct merge_file_info to object_id
      merge-recursive: convert leaf functions to use struct object_id
      merge-recursive: convert merge_recursive_generic() to object_id
      diff: convert prep_temp_blob() to struct object_id


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.10.0-rc2
@ 2016-08-26 22:31  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2016-08-26 22:31 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

A release candidate Git v2.10.0-rc2 is now available for testing
at the usual places.  It is comprised of 623 non-merge commits
since v2.9.0, contributed by 71 people, 22 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.10.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.9.0 are as follows.
Welcome to the Git development community!

  Alexander Hirsch, Andreas Brauchli, Andrew Oakley, Antoine Queru,
  Ben Wijen, Christopher Layne, Dave Nicolson, David Glasser, Ed
  Maste, Heiko Becker, Ingo Brückl, Jonathan Tan, Jordan DE GEA,
  Josef Kufner, Keith McGuigan, Kevin Willford, LE Manh Cuong,
  Michael Stahl, Parker Moore, Peter Colberg, Tom Russello,
  and William Duclot.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alex Henrie, Alfred Perlstein, Armin Kunaschik, brian m. carlson,
  Charles Bailey, Chris Packham, Christian Couder, David A. Greene,
  David Aguilar, David Kastrup, David Turner, Edward Thomson,
  Elia Pinto, Eric Sunshine, Eric Wong, Heiko Voigt, Jacob Keller,
  Jean-Noel Avila, Jeff King, Joey Hess, Johannes Schindelin,
  Johannes Sixt, John Keeping, Jonathan Nieder, Josh Triplett,
  Junio C Hamano, Lars Schneider, Lars Vogel, Linus Torvalds,
  Lukas Fleischer, Matthieu Moy, Mehul Jain, Michael Haggerty,
  Michael J Gruber, Mike Hommey, Nguyễn Thái Ngọc Duy,
  Nicolas Pitre, Orgad Shaneh, Patrick Steinhardt, Pranit Bauva,
  Ramsay Jones, René Scharfe, Ronald Wampler, Stefan Beller,
  SZEDER Gábor, Thomas Braun, Torsten Bögershausen, Vasco
  Almeida, and Ville Skyttä.

----------------------------------------------------------------

Git 2.10 Release Notes (draft)
==============================

Backward compatibility notes
----------------------------

Updates since v2.9
------------------

UI, Workflows & Features

 * "git pull --rebase --verify-signature" learned to warn the user
   that "--verify-signature" is a no-op when rebasing.

 * An upstream project can make a recommendation to shallowly clone
   some submodules in the .gitmodules file it ships.

 * "git worktree add" learned that '-' can be used as a short-hand for
   "@{-1}", the previous branch.

 * Update the funcname definition to support css files.

 * The completion script (in contrib/) learned to complete "git
   status" options.

 * Messages that are generated by auto gc during "git push" on the
   receiving end are now passed back to the sending end in such a way
   that they are shown with "remote: " prefix to avoid confusing the
   users.

 * "git add -i/-p" learned to honor diff.compactionHeuristic
   experimental knob, so that the user can work on the same hunk split
   as "git diff" output.

 * "upload-pack" allows a custom "git pack-objects" replacement when
   responding to "fetch/clone" via the uploadpack.packObjectsHook.
   (merge b738396 jk/upload-pack-hook later to maint).

 * Teach format-patch and mailsplit (hence "am") how a line that
   happens to begin with "From " in the e-mail message is quoted with
   ">", so that these lines can be restored to their original shape.
   (merge d9925d1 ew/mboxrd-format-am later to maint).

 * "git repack" learned the "--keep-unreachable" option, which sends
   loose unreachable objects to a pack instead of leaving them loose.
   This helps heuristics based on the number of loose objects
   (e.g. "gc --auto").
   (merge e26a8c4 jk/repack-keep-unreachable later to maint).

 * "log --graph --format=" learned that "%>|(N)" specifies the width
   relative to the terminal's left edge, not relative to the area to
   draw text that is to the right of the ancestry-graph section.  It
   also now accepts negative N that means the column limit is relative
   to the right border.

 * A careless invocation of "git send-email directory/" after editing
   0001-change.patch with an editor often ends up sending both
   0001-change.patch and its backup file, 0001-change.patch~, causing
   embarrassment and a minor confusion.  Detect such an input and
   offer to skip the backup files when sending the patches out.
   (merge 531220b jc/send-email-skip-backup later to maint).

 * "git submodule update" that drives many "git clone" could
   eventually hit flaky servers/network conditions on one of the
   submodules; the command learned to retry the attempt.

 * The output coloring scheme learned two new attributes, italic and
   strike, in addition to existing bold, reverse, etc.

 * "git log" learns log.showSignature configuration variable, and a
   command line option "--no-show-signature" to countermand it.
   (merge fce04c3 mj/log-show-signature-conf later to maint).

 * More markings of messages for i18n, with updates to various tests
   to pass GETTEXT_POISON tests.

 * "git archive" learned to handle files that are larger than 8GB and
   commits far in the future than expressible by the traditional US-TAR
   format.
   (merge 5caeeb8 jk/big-and-future-archive-tar later to maint).

 * A new configuration variable core.sshCommand has been added to
   specify what value for GIT_SSH_COMMAND to use per repository.

 * "git worktree prune" protected worktrees that are marked as
   "locked" by creating a file in a known location.  "git worktree"
   command learned a dedicated command pair to create and remove such
   a file, so that the users do not have to do this with editor.

 * A handful of "git svn" updates.

 * "git push" learned to accept and pass extra options to the
   receiving end so that hooks can read and react to them.

 * "git status" learned to suggest "merge --abort" during a conflicted
   merge, just like it already suggests "rebase --abort" during a
   conflicted rebase.

 * "git jump" script (in contrib/) has been updated a bit.
   (merge a91e692 jk/git-jump later to maint).

 * "git push" and "git clone" learned to give better progress meters
   to the end user who is waiting on the terminal.

 * An entry "git log --decorate" for the tip of the current branch is
   shown as "HEAD -> name" (where "name" is the name of the branch);
   the arrow is now painted in the same color as "HEAD", not in the
   color for commits.

 * "git format-patch" learned format.from configuration variable to
   specify the default settings for its "--from" option.

 * "git am -3" calls "git merge-recursive" when it needs to fall back
   to a three-way merge; this call has been turned into an internal
   subroutine call instead of spawning a separate subprocess.

 * The command line completion scripts (in contrib/) now knows about
   "git branch --delete/--move [--remote]".
   (merge 2703c22 vs/completion-branch-fully-spelled-d-m-r later to maint).

 * "git rev-parse --git-path hooks/<hook>" learned to take
   core.hooksPath configuration variable (introduced during 2.9 cycle)
   into account.
   (merge 9445b49 ab/hooks later to maint).

 * "git log --show-signature" and other commands that display the
   verification status of PGP signature now shows the longer key-id,
   as 32-bit key-id is so last century.


Performance, Internal Implementation, Development Support etc.

 * "git fast-import" learned the same performance trick to avoid
   creating too small a packfile as "git fetch" and "git push" have,
   using *.unpackLimit configuration.

 * When "git daemon" is run without --[init-]timeout specified, a
   connection from a client that silently goes offline can hang around
   for a long time, wasting resources.  The socket-level KEEPALIVE has
   been enabled to allow the OS to notice such failed connections.

 * "git upload-pack" command has been updated to use the parse-options
   API.

 * The "git apply" standalone program is being libified; the first
   step to move many state variables into a structure that can be
   explicitly (re)initialized to make the machinery callable more
   than once has been merged.

 * HTTP transport gained an option to produce more detailed debugging
   trace.
   (merge 73e57aa ep/http-curl-trace later to maint).

 * Instead of taking advantage of the fact that a struct string_list
   that is allocated with all NULs happens to be the INIT_NODUP kind,
   the users of string_list structures are taught to initialize them
   explicitly as such, to document their behaviour better.
   (merge 2721ce2 jk/string-list-static-init later to maint).

 * HTTPd tests learned to show the server error log to help diagnosing
   a failing tests.
   (merge 44f243d nd/test-lib-httpd-show-error-log-in-verbose later to maint).

 * The ownership rule for the piece of memory that hold references to
   be fetched in "git fetch" was screwy, which has been cleaned up.

 * "git bisect" makes an internal call to "git diff-tree" when
   bisection finds the culprit, but this call did not initialize the
   data structure to pass to the diff-tree API correctly.

 * Further preparatory clean-up for "worktree" feature continues.
   (merge 0409e0b nd/worktree-cleanup-post-head-protection later to maint).

 * Formats of the various data (and how to validate them) where we use
   GPG signature have been documented.

 * A new run-command API function pipe_command() is introduced to
   sanely feed data to the standard input while capturing data from
   the standard output and the standard error of an external process,
   which is cumbersome to hand-roll correctly without deadlocking.

 * The codepath to sign data in a prepared buffer with GPG has been
   updated to use this API to read from the status-fd to check for
   errors (instead of relying on GPG's exit status).
   (merge efee955 jk/gpg-interface-cleanup later to maint).

 * Allow t/perf framework to use the features from the most recent
   version of Git even when testing an older installed version.

 * The commands in the "log/diff" family have had an FILE* pointer in the
   data structure they pass around for a long time, but some codepaths
   used to always write to the standard output.  As a preparatory step
   to make "git format-patch" available to the internal callers, these
   codepaths have been updated to consistently write into that FILE*
   instead.

 * Conversion from unsigned char sha1[20] to struct object_id
   continues.

 * Improve the look of the way "git fetch" reports what happened to
   each ref that was fetched.

 * The .c/.h sources are marked as such in our .gitattributes file so
   that "git diff -W" and friends would work better.

 * Code clean-up to avoid using a variable string that compilers may
   feel untrustable as printf-style format given to write_file()
   helper function.

 * "git p4" used a location outside $GIT_DIR/refs/ to place its
   temporary branches, which has been moved to refs/git-p4-tmp/.

 * Existing autoconf generated test for the need to link with pthread
   library did not check all the functions from pthread libraries;
   recent FreeBSD has some functions in libc but not others, and we
   mistakenly thought linking with libc is enough when it is not.

 * When "git fsck" reports a broken link (e.g. a tree object contains
   a blob that does not exist), both containing object and the object
   that is referred to were reported with their 40-hex object names.
   The command learned the "--name-objects" option to show the path to
   the containing object from existing refs (e.g. "HEAD~24^2:file.txt").

 * Allow http daemon tests in Travis CI tests.

 * Makefile assumed that -lrt is always available on platforms that
   want to use clock_gettime() and CLOCK_MONOTONIC, which is not a
   case for recent Mac OS X.  The necessary symbols are often found in
   libc on many modern systems and having -lrt on the command line, as
   long as the library exists, had no effect, but when the platform
   removes librt.a that is a different matter--having -lrt will break
   the linkage.

   This change could be seen as a regression for those who do need to
   specify -lrt, as they now specifically ask for NEEDS_LIBRT when
   building. Hopefully they are in the minority these days.

 * Further preparatory work on the refs API before the pluggable
   backend series can land.

 * Error handling in the codepaths that updates refs has been
   improved.

 * The API to iterate over all the refs (i.e. for_each_ref(), etc.)
   has been revamped.

 * The handling of the "text=auto" attribute has been corrected.
   $ echo "* text=auto eol=crlf" >.gitattributes
   used to have the same effect as
   $ echo "* text eol=crlf" >.gitattributes
   i.e. declaring all files are text (ignoring "auto").  The
   combination has been fixed to be equivalent to doing
   $ git config core.autocrlf true

 * Documentation has been updated to show better example usage
   of the updated "text=auto" attribute.

 * A few tests that specifically target "git rebase -i" have been
   added.

 * Dumb http transport on the client side has been optimized.
   (merge ecba195 ew/http-walker later to maint).

 * Users of the parse_options_concat() API function need to allocate
   extra slots in advance and fill them with OPT_END() when they want
   to decide the set of supported options dynamically, which makes the
   code error-prone and hard to read.  This has been corrected by tweaking
   the API to allocate and return a new copy of "struct option" array.

 * "git fetch" exchanges batched have/ack messages between the sender
   and the receiver, initially doubling every time and then falling
   back to enlarge the window size linearly.  The "smart http"
   transport, being an half-duplex protocol, outgrows the preset limit
   too quickly and becomes inefficient when interacting with a large
   repository.  The internal mechanism learned to grow the window size
   more aggressively when working with the "smart http" transport.

 * Tests for "git svn" have been taught to reuse the lib-httpd test
   infrastructure when testing the subversion integration that
   interacts with subversion repositories served over the http://
   protocol.
   (merge a8a5d25 ew/git-svn-http-tests later to maint).

 * "git pack-objects" has a few options that tell it not to pack
   objects found in certain packfiles, which require it to scan .idx
   files of all available packs.  The codepaths involved in these
   operations have been optimized for a common case of not having any
   non-local pack and/or any .kept pack.

 * The t3700 test about "add --chmod=-x" have been made a bit more
   robust and generally cleaned up.
   (merge 766cdc4 ib/t3700-add-chmod-x-updates later to maint).

 * The build procedure learned PAGER_ENV knob that lists what default
   environment variable settings to export for popular pagers.  This
   mechanism is used to tweak the default settings to MORE on FreeBSD.
   (merge 995bc22 ew/build-time-pager-tweaks later to maint).

 * The http-backend (the server-side component of smart-http
   transport) used to trickle the HTTP header one at a time.  Now
   these write(2)s are batched.
   (merge b36045c ew/http-backend-batch-headers later to maint).

 * When "git rebase" tries to compare set of changes on the updated
   upstream and our own branch, it computes patch-id for all of these
   changes and attempts to find matches. This has been optimized by
   lazily computing the full patch-id (which is expensive) to be
   compared only for changes that touch the same set of paths.
   (merge b3dfeeb kw/patch-ids-optim later to maint).

 * A handful of tests that were broken under gettext-poison build have
   been fixed.

 * The recent i18n patch we added during this cycle did a bit too much
   refactoring of the messages to avoid word-legos; the repetition has
   been reduced to help translators.


Also contains various documentation updates and code clean-ups.


Fixes since v2.9
----------------

Unless otherwise noted, all the fixes since v2.8 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * The commands in `git log` family take %C(auto) in a custom format
   string.  This unconditionally turned the color on, ignoring
   --no-color or with --color=auto when the output is not connected to
   a tty; this was corrected to make the format truly behave as
   "auto".

 * "git rev-list --count" whose walk-length is limited with "-n"
   option did not work well with the counting optimized to look at the
   bitmap index.

 * "git show -W" (extend hunks to cover the entire function, delimited
   by lines that match the "funcname" pattern) used to show the entire
   file when a change added an entire function at the end of the file,
   which has been fixed.

 * The documentation set has been updated so that literal commands,
   configuration variables and environment variables are consistently
   typeset in fixed-width font and bold in manpages.

 * "git svn propset" subcommand that was added in 2.3 days is
   documented now.

 * The documentation tries to consistently spell "GPG"; when
   referring to the specific program name, "gpg" is used.

 * "git reflog" stopped upon seeing an entry that denotes a branch
   creation event (aka "unborn"), which made it appear as if the
   reflog was truncated.

 * The git-prompt scriptlet (in contrib/) was not friendly with those
   who uses "set -u", which has been fixed.

 * compat/regex code did not cleanly compile.

 * A codepath that used alloca(3) to place an unbounded amount of data
   on the stack has been updated to avoid doing so.

 * "git update-index --add --chmod=+x file" may be usable as an escape
   hatch, but not a friendly thing to force for people who do need to
   use it regularly.  "git add --chmod=+x file" can be used instead.

 * Build improvements for gnome-keyring (in contrib/)

 * "git status" used to say "working directory" when it meant "working
   tree".

 * Comments about misbehaving FreeBSD shells have been clarified with
   the version number (9.x and before are broken, newer ones are OK).

 * "git cherry-pick A" worked on an unborn branch, but "git
   cherry-pick A..B" didn't.

 * Fix an unintended regression in v2.9 that breaks "clone --depth"
   that recurses down to submodules by forcing the submodules to also
   be cloned shallowly, which many server instances that host upstream
   of the submodules are not prepared for.

 * Fix unnecessarily waste in the idiomatic use of ': ${VAR=default}'
   to set the default value, without enclosing it in double quotes.

 * Some platform-specific code had non-ANSI strict declarations of C
   functions that do not take any parameters, which has been
   corrected.

 * The internal code used to show local timezone offset is not
   prepared to handle timestamps beyond year 2100, and gave a
   bogus offset value to the caller.  Use a more benign looking
   +0000 instead and let "git log" going in such a case, instead
   of aborting.

 * One among four invocations of readlink(1) in our test suite has
   been rewritten so that the test can run on systems without the
   command (others are in valgrind test framework and t9802).

 * t/perf needs /usr/bin/time with GNU extension; the invocation of it
   is updated to "gtime" on Darwin.

 * A bug, which caused "git p4" while running under verbose mode to
   report paths that are omitted due to branch prefix incorrectly, has
   been fixed; the command said "Ignoring file outside of prefix" for
   paths that are _inside_.

 * The top level documentation "git help git" still pointed at the
   documentation set hosted at now-defunct google-code repository.
   Update it to point to https://git.github.io/htmldocs/git.html
   instead.

 * A helper function that takes the contents of a commit object and
   finds its subject line did not ignore leading blank lines, as is
   commonly done by other codepaths.  Make it ignore leading blank
   lines to match.

 * For a long time, we carried an in-code comment that said our
   colored output would work only when we use fprintf/fputs on
   Windows, which no longer is the case for the past few years.

 * "gc.autoPackLimit" when set to 1 should not trigger a repacking
   when there is only one pack, but the code counted poorly and did
   so.

 * Add a test to specify the desired behaviour that currently is not
   available in "git rebase -Xsubtree=...".

 * More mark-up updates to typeset strings that are expected to
   literally typed by the end user in fixed-width font.

 * "git commit --amend --allow-empty-message -S" for a commit without
   any message body could have misidentified where the header of the
   commit object ends.

 * "git rebase -i --autostash" did not restore the auto-stashed change
   when the operation was aborted.

 * Git does not know what the contents in the index should be for a
   path added with "git add -N" yet, so "git grep --cached" should not
   show hits (or show lack of hits, with -L) in such a path, but that
   logic does not apply to "git grep", i.e. searching in the working
   tree files.  But we did so by mistake, which has been corrected.

 * "git blame -M" missed a single line that was moved within the file.

 * Fix recently introduced codepaths that are involved in parallel
   submodule operations, which gave up on reading too early, and
   could have wasted CPU while attempting to write under a corner
   case condition.

 * "git grep -i" has been taught to fold case in non-ascii locales
   correctly.

 * A test that unconditionally used "mktemp" learned that the command
   is not necessarily available everywhere.

 * There are certain house-keeping tasks that need to be performed at
   the very beginning of any Git program, and programs that are not
   built-in commands had to do them exactly the same way as "git"
   potty does.  It was easy to make mistakes in one-off standalone
   programs (like test helpers).  A common "main()" function that
   calls cmd_main() of individual program has been introduced to
   make it harder to make mistakes.
   (merge de61ceb jk/common-main later to maint).

 * The test framework learned a new helper test_match_signal to
   check an exit code from getting killed by an expected signal.

 * General code clean-up around a helper function to write a
   single-liner to a file.
   (merge 7eb6e10 jk/write-file later to maint).

 * One part of "git am" had an oddball helper function that called
   stuff from outside "his" as opposed to calling what we have "ours",
   which was not gender-neutral and also inconsistent with the rest of
   the system where outside stuff is usuall called "theirs" in
   contrast to "ours".

 * "git blame file" allowed the lineage of lines in the uncommitted,
   unadded contents of "file" to be inspected, but it refused when
   "file" did not appear in the current commit.  When "file" was
   created by renaming an existing file (but the change has not been
   committed), this restriction was unnecessarily tight.

 * "git add -N dir/file && git write-tree" produced an incorrect tree
   when there are other paths in the same directory that sorts after
   "file".

 * "git fetch http://user:pass@host/repo..." scrubbed the userinfo
   part, but "git push" didn't.

 * "git merge" with renormalization did not work well with
   merge-recursive, due to "safer crlf" conversion kicking in when it
   shouldn't.
   (merge 1335d76 jc/renormalize-merge-kill-safer-crlf later to maint).

 * The use of strbuf in "git rm" to build filename to remove was a bit
   suboptimal, which has been fixed.

 * An age old bug that caused "git diff --ignore-space-at-eol"
   misbehave has been fixed.

 * "git notes merge" had a code to see if a path exists (and fails if
   it does) and then open the path for writing (when it doesn't).
   Replace it with open with O_EXCL.

 * "git pack-objects" and "git index-pack" mostly operate with off_t
   when talking about the offset of objects in a packfile, but there
   were a handful of places that used "unsigned long" to hold that
   value, leading to an unintended truncation.

 * Recent update to "git daemon" tries to enable the socket-level
   KEEPALIVE, but when it is spawned via inetd, the standard input
   file descriptor may not necessarily be connected to a socket.
   Suppress an ENOTSOCK error from setsockopt().

 * Recent FreeBSD stopped making perl available at /usr/bin/perl;
   switch the default the built-in path to /usr/local/bin/perl on not
   too ancient FreeBSD releases.

 * "git commit --help" said "--no-verify" is only about skipping the
   pre-commit hook, and failed to say that it also skipped the
   commit-msg hook.

 * "git merge" in Git v2.9 was taught to forbid merging an unrelated
   lines of history by default, but that is exactly the kind of thing
   the "--rejoin" mode of "git subtree" (in contrib/) wants to do.
   "git subtree" has been taught to use the "--allow-unrelated-histories"
   option to override the default.

 * The build procedure for "git persistent-https" helper (in contrib/)
   has been updated so that it can be built with more recent versions
   of Go.

 * There is an optimization used in "git diff $treeA $treeB" to borrow
   an already checked-out copy in the working tree when it is known to
   be the same as the blob being compared, expecting that open/mmap of
   such a file is faster than reading it from the object store, which
   involves inflating and applying delta.  This however kicked in even
   when the checked-out copy needs to go through the convert-to-git
   conversion (including the clean filter), which defeats the whole
   point of the optimization.  The optimization has been disabled when
   the conversion is necessary.

 * "git -c grep.patternType=extended log --basic-regexp" misbehaved
   because the internal API to access the grep machinery was not
   designed well.

 * Windows port was failing some tests in t4130, due to the lack of
   inum in the returned values by its lstat(2) emulation.

 * The reflog output format is documented better, and a new format
   --date=unix to report the seconds-since-epoch (without timezone)
   has been added.
   (merge 442f6fd jk/reflog-date later to maint).

 * "git difftool <paths>..." started in a subdirectory failed to
   interpret the paths relative to that directory, which has been
   fixed.

 * The characters in the label shown for tags/refs for commits in
   "gitweb" output are now properly escaped for proper HTML output.

 * FreeBSD can lie when asked mtime of a directory, which made the
   untracked cache code to fall back to a slow-path, which in turn
   caused tests in t7063 to fail because it wanted to verify the
   behaviour of the fast-path.

 * Squelch compiler warnings for nedmalloc (in compat/) library.

 * A small memory leak in the command line parsing of "git blame"
   has been plugged.

 * The API documentation for hashmap was unclear if hashmap_entry
   can be safely discarded without any other consideration.  State
   that it is safe to do so.

 * Not-so-recent rewrite of "git am" that started making internal
   calls into the commit machinery had an unintended regression, in
   that no matter how many seconds it took to apply many patches, the
   resulting committer timestamp for the resulting commits were all
   the same.

 * "git push --force-with-lease" already had enough logic to allow
   ensuring that such a push results in creation of a ref (i.e. the
   receiving end did not have another push from sideways that would be
   discarded by our force-pushing), but didn't expose this possibility
   to the users.  It does so now.
   (merge 9eed4f3 jk/push-force-with-lease-creation later to maint).

 * The mechanism to limit the pack window memory size, when packing is
   done using multiple threads (which is the default), is per-thread,
   but this was not documented clearly.
   (merge 954176c ms/document-pack-window-memory-is-per-thread later to maint).

 * "import-tars" fast-import script (in contrib/) used to ignore a
   hardlink target and replaced it with an empty file, which has been
   corrected to record the same blob as the other file the hardlink is
   shared with.
   (merge 04e0869 js/import-tars-hardlinks later to maint).

 * "git mv dir non-existing-dir/" did not work in some environments
   the same way as existing mainstream platforms.  The code now moves
   "dir" to "non-existing-dir", without relying on rename("A", "B/")
   that strips the trailing slash of '/'.
   (merge 189d035 js/mv-dir-to-new-directory later to maint).

 * The "t/" hierarchy is prone to get an unusual pathname; "make test"
   has been taught to make sure they do not contain paths that cannot
   be checked out on Windows (and the mechanism can be reusable to
   catch pathnames that are not portable to other platforms as need
   arises).
   (merge c2cafd3 js/test-lint-pathname later to maint).

 * When "git merge-recursive" works on history with many criss-cross
   merges in "verbose" mode, the names the command assigns to the
   virtual merge bases could have overwritten each other by unintended
   reuse of the same piece of memory.
   (merge 5447a76 rs/pull-signed-tag later to maint).

 * "git checkout --detach <branch>" used to give the same advice
   message as that is issued when "git checkout <tag>" (or anything
   that is not a branch name) is given, but asking with "--detach" is
   an explicit enough sign that the user knows what is going on.  The
   advice message has been squelched in this case.
   (merge 779b88a sb/checkout-explit-detach-no-advice later to maint).

 * "git difftool" by default ignores the error exit from the backend
   commands it spawns, because often they signal that they found
   differences by exiting with a non-zero status code just like "diff"
   does; the exit status codes 126 and above however are special in
   that they are used to signal that the command is not executable,
   does not exist, or killed by a signal.  "git difftool" has been
   taught to notice these exit status codes.
   (merge 45a4f5d jk/difftool-command-not-found later to maint).

 * On Windows, help.browser configuration variable used to be ignored,
   which has been corrected.
   (merge 6db5967 js/no-html-bypass-on-windows later to maint).

 * The "git -c var[=val] cmd" facility to append a configuration
   variable definition at the end of the search order was described in
   git(1) manual page, but not in git-config(1), which was more likely
   place for people to look for when they ask "can I make a one-shot
   override, and if so how?"
   (merge ae1f709 dg/document-git-c-in-git-config-doc later to maint).

 * The tempfile (hence its user lockfile) API lets the caller to open
   a file descriptor to a temporary file, write into it and then
   finalize it by first closing the filehandle and then either
   removing or renaming the temporary file.  When the process spawns a
   subprocess after obtaining the file descriptor, and if the
   subprocess has not exited when the attempt to remove or rename is
   made, the last step fails on Windows, because the subprocess has
   the file descriptor still open.  Open tempfile with O_CLOEXEC flag
   to avoid this (on Windows, this is mapped to O_NOINHERIT).
   (merge 05d1ed6 bw/mingw-avoid-inheriting-fd-to-lockfile later to maint).

 * Other minor clean-ups and documentation updates
   (merge 02a8cfa rs/merge-add-strategies-simplification later to maint).
   (merge af4941d rs/merge-recursive-string-list-init later to maint).
   (merge 1eb47f1 rs/use-strbuf-add-unique-abbrev later to maint).
   (merge ddd0bfa jk/tighten-alloc later to maint).
   (merge ecf30b2 rs/mailinfo-lib later to maint).
   (merge 0eb75ce sg/reflog-past-root later to maint).
   (merge 175d38c hv/doc-commit-reference-style later to maint).

----------------------------------------------------------------

Changes since v2.9.0 are as follows:

Alex Henrie (1):
      unpack-trees: fix English grammar in do-this-before-that messages

Alexander Hirsch (1):
      pull: warn on --verify-signatures with --rebase

Alfred Perlstein (1):
      git-svn: document the 'git svn propset' command

Andreas Brauchli (1):
      gitweb: escape link body in format_ref_marker

Andrew Oakley (1):
      git-p4: correct hasBranchPrefix verbose output

Antoine Queru (1):
      upload-pack.c: use parse-options API

Armin Kunaschik (2):
      t7800: readlink may not be available
      t7610: test for mktemp before test execution

Ben Wijen (2):
      t6026-merge-attr: child processes must not inherit index.lock handles
      mingw: ensure temporary file handles are not inherited by child processes

Charles Bailey (4):
      t7810: fix duplicated test title
      t7810-grep.sh: fix duplicated test name
      t7810-grep.sh: fix a whitespace inconsistency
      grep: fix grepping for "intent to add" files

Chris Packham (1):
      completion: add option '--recurse-submodules' to 'git clone'

Christian Couder (50):
      builtin/apply: make gitdiff_verify_name() return void
      builtin/apply: avoid parameter shadowing 'p_value' global
      builtin/apply: avoid parameter shadowing 'linenr' global
      builtin/apply: avoid local variable shadowing 'len' parameter
      builtin/apply: extract line_by_line_fuzzy_match() from match_fragment()
      builtin/apply: move 'options' variable into cmd_apply()
      builtin/apply: move 'read_stdin' global into cmd_apply()
      builtin/apply: introduce 'struct apply_state' to start libifying
      builtin/apply: move 'state' init into init_apply_state()
      builtin/apply: move 'unidiff_zero' global into 'struct apply_state'
      builtin/apply: move 'check' global into 'struct apply_state'
      builtin/apply: move 'check_index' global into 'struct apply_state'
      builtin/apply: move 'apply_in_reverse' global into 'struct apply_state'
      builtin/apply: move 'apply_with_reject' global into 'struct apply_state'
      builtin/apply: move 'apply_verbosely' global into 'struct apply_state'
      builtin/apply: move 'update_index' global into 'struct apply_state'
      builtin/apply: move 'allow_overlap' global into 'struct apply_state'
      builtin/apply: move 'cached' global into 'struct apply_state'
      builtin/apply: move 'diffstat' global into 'struct apply_state'
      builtin/apply: move 'numstat' global into 'struct apply_state'
      builtin/apply: move 'summary' global into 'struct apply_state'
      builtin/apply: move 'threeway' global into 'struct apply_state'
      builtin/apply: move 'no_add' global into 'struct apply_state'
      builtin/apply: move 'unsafe_paths' global into 'struct apply_state'
      builtin/apply: move 'line_termination' global into 'struct apply_state'
      builtin/apply: move 'fake_ancestor' global into 'struct apply_state'
      builtin/apply: move 'p_context' global into 'struct apply_state'
      builtin/apply: move 'apply' global into 'struct apply_state'
      builtin/apply: move 'patch_input_file' global into 'struct apply_state'
      builtin/apply: move 'limit_by_name' global into 'struct apply_state'
      builtin/apply: move 'has_include' global into 'struct apply_state'
      builtin/apply: move 'p_value' global into 'struct apply_state'
      builtin/apply: move 'p_value_known' global into 'struct apply_state'
      builtin/apply: move 'root' global into 'struct apply_state'
      builtin/apply: move 'whitespace_error' global into 'struct apply_state'
      builtin/apply: move 'whitespace_option' into 'struct apply_state'
      builtin/apply: remove whitespace_option arg from set_default_whitespace_mode()
      builtin/apply: move 'squelch_whitespace_errors' into 'struct apply_state'
      builtin/apply: move 'applied_after_fixing_ws' into 'struct apply_state'
      builtin/apply: move 'ws_error_action' into 'struct apply_state'
      builtin/apply: move 'ws_ignore_action' into 'struct apply_state'
      builtin/apply: move 'max_change' and 'max_len' into 'struct apply_state'
      builtin/apply: move 'state_linenr' global into 'struct apply_state'
      builtin/apply: move 'fn_table' global into 'struct apply_state'
      builtin/apply: move 'symlink_changes' global into 'struct apply_state'
      builtin/apply: move 'state' check into check_apply_state()
      builtin/apply: move applying patches into apply_all_patches()
      builtin/apply: add 'lock_file' pointer into 'struct apply_state'
      builtin/apply: move 'newfd' global into 'struct apply_state'
      .mailmap: use Christian Couder's Tuxfamily address

Christopher Layne (1):
      git-svn: clone: Fail on missing url argument

Dave Nicolson (1):
      Documentation: GPG capitalization

David A. Greene (1):
      contrib/subtree: Add a test for subtree rebase that loses commits

David Aguilar (6):
      t7900-subtree.sh: fix quoting and broken && chains
      subtree: fix "git subtree split --rejoin"
      subtree: adjust style to match CodingGuidelines
      subtree: adjust function definitions to match CodingGuidelines
      difftool: avoid $GIT_DIR and $GIT_WORK_TREE
      difftool: use Git::* functions instead of passing around state

David Glasser (1):
      doc: mention `git -c` in git-config(1)

David Kastrup (1):
      blame: require 0 context lines while finding moved lines with -M

David Turner (3):
      refs: allow log-only updates
      refs: don't dereference on rename
      mailmap: use main email address for dturner

Ed Maste (1):
      rebase: update comment about FreeBSD /bin/sh

Edward Thomson (2):
      format_commit_message: honor `color=auto` for `%C(auto)`
      add: add --chmod=+x / --chmod=-x options

Elia Pinto (2):
      http.c: implement the GIT_TRACE_CURL environment variable
      imap-send.c: introduce the GIT_TRACE_CURL enviroment variable

Eric Sunshine (1):
      blame: drop strdup of string literal

Eric Wong (24):
      fast-import: implement unpack limit
      daemon: enable SO_KEEPALIVE for all sockets
      fast-import: invalidate pack_id references after loosening
      pretty: support "mboxrd" output format
      mailsplit: support unescaping mboxrd messages
      am: support --patch-format=mboxrd
      git-svn: skip mergeinfo handling with --no-follow-parent
      gc: fix off-by-one error with gc.autoPackLimit
      xread: retry after poll on EAGAIN/EWOULDBLOCK
      xwrite: poll on non-blocking FDs
      git-svn: warn instead of dying when commit data is missing
      hoist out handle_nonblock function for xread and xwrite
      config.mak.uname: define NEEDS_LIBRT under Linux, for now
      http-walker: remove unused parameter from fetch_object
      http: avoid disconnecting on 404s for loose objects
      http-walker: reduce O(n) ops with doubly-linked list
      list: avoid incompatibility with *BSD sys/queue.h
      daemon: ignore ENOTSOCK from setsockopt
      configure.ac: stronger test for pthread linkage
      git-svn: document svn.authorsProg in config
      git-svn: allow --version to work anywhere
      git svn: migrate tests to use lib-httpd
      pager: move pager-specific setup into the build
      http-backend: buffer headers before sending

Heiko Becker (1):
      gnome-keyring: Don't hard-code pkg-config executable

Heiko Voigt (4):
      submodule-config: passing name reference for .gitmodule blobs
      submodule-config: combine early return code into one goto
      submodule-config: fix test binary crashing when no arguments given
      SubmittingPatches: document how to reference previous commits

Ingo Brückl (3):
      t3700: remove unwanted leftover files before running new tests
      t3700: merge two tests into one
      t3700: add a test_mode_in_index helper function

Jacob Keller (1):
      completion: add completion for --submodule=* diff option

Jean-Noel Avila (3):
      i18n: fix typos for translation
      i18n: fix git rebase interactive commit messages
      i18n: simplify numeric error reporting

Jeff King (107):
      git_config_with_options: drop "found" counting
      git_config_parse_parameter: refactor cleanup code
      config: set up config_source for command-line config
      config: return configset value for current_config_ functions
      config: add a notion of "scope"
      upload-pack: provide a hook for running pack-objects
      rev-list: "adjust" results of "--count --use-bitmap-index -n"
      rev-list: disable bitmaps when "-n" is used with listing objects
      tree-diff: avoid alloca for large allocations
      send-pack: use buffered I/O to talk to pack-objects
      parse_opt_string_list: stop allocating new strings
      interpret-trailers: don't duplicate option strings
      blame,shortlog: don't make local option variables static
      use string_list initializer consistently
      fetch: document that pruning happens before fetching
      repack: document --unpack-unreachable option
      repack: add --keep-unreachable option
      repack: extend --keep-unreachable to loose objects
      add--interactive: respect diff.compactionHeuristic
      bisect: always call setup_revisions after init_revisions
      gpg-interface: use child_process.args
      verify_signed_buffer: drop pbuf variable
      verify_signed_buffer: use tempfile object
      run-command: add pipe_command helper
      verify_signed_buffer: use pipe_command
      sign_buffer: use pipe_command
      t0006: rename test-date's "show" to "relative"
      t0006: test various date formats
      local_tzoffset: detect errors from tm_to_time_t
      t/perf: fix regression in testing older versions of git
      p4211: explicitly disable renames in no-rename test
      color: fix max-size comment
      doc: refactor description of color format
      add skip_prefix_mem helper
      color: refactor parse_attr
      color: allow "no-" for negating attributes
      color: support "italic" attribute
      color: support strike-through attribute
      t9300: factor out portable "head -c" replacement
      t5000: test tar files that overflow ustar headers
      archive-tar: write extended headers for file sizes >= 8GB
      archive-tar: write extended headers for far-future mtime
      archive-tar: drop return value
      add an extra level of indirection to main()
      common-main: call git_extract_argv0_path()
      common-main: call sanitize_stdfds()
      common-main: call restore_sigpipe_to_default()
      common-main: call git_setup_gettext()
      tests: factor portable signal check out of t0005
      t0005: use test_match_signal as appropriate
      test_must_fail: use test_match_signal
      t/lib-git-daemon: use test_match_signal
      parse_options: allocate a new array when concatenating
      Makefile: drop extra dependencies for test helpers
      Makefile: use VCSSVN_LIB to refer to svn library
      config: fix bogus fd check when setting up default config
      branch: use non-gentle write_file for branch description
      write_file: drop "gently" form
      write_file: use xopen
      write_file: add pointer+len variant
      write_file: add format attribute
      use write_file_buf where applicable
      branch: use write_file_buf instead of write_file
      walker: let walker_say take arbitrary formats
      avoid using sha1_to_hex output as printf format
      push: anonymize URL in status output
      t0006: skip "far in the future" test when unsigned long is not long enough
      check_everything_connected: always pass --quiet to rev-list
      rev-list: add optional progress reporting
      check_everything_connected: convert to argv_array
      check_everything_connected: use a struct with named options
      check_connected: relay errors to alternate descriptor
      check_connected: add progress flag
      clone: use a real progress meter for connectivity check
      index-pack: add flag for showing delta-resolution progress
      receive-pack: turn on index-pack resolving progress
      receive-pack: relay connectivity errors to sideband
      receive-pack: turn on connectivity progress
      receive-pack: send keepalives during quiet periods
      t5541: fix url scrubbing test when GPG is not set
      diff: do not reuse worktree files that need "clean" conversion
      contrib/git-jump: fix greedy regex when matching hunks
      contrib/git-jump: add whitespace-checking mode
      contrib/git-jump: fix typo in README
      doc/rev-list-options: clarify "commit@{Nth}" for "-g" option
      doc/rev-list-options: explain "-g" output formats
      doc/pretty-formats: describe index/time formats for %gd
      doc/pretty-formats: explain shortening of %gd
      t4205: drop top-level &&-chaining
      t4205: indent here documents
      date: document and test "raw-local" mode
      date: add "unix" format
      t/perf: add tests for many-pack scenarios
      sha1_file: drop free_pack_by_name
      add generic most-recently-used list
      find_pack_entry: replace last_found_pack with MRU cache
      pack-objects: break out of want_object loop early
      pack-objects: compute local/ignore_pack_keep early
      am: reset cached ident date for each patch
      trace: handle NULL argument in trace_disable()
      trace: stop using write_or_whine_pipe()
      trace: use warning() for printing trace errors
      trace: cosmetic fixes for error messages
      trace: correct variable name in write() error message
      trace: disable key after write error
      write_or_die: drop write_or_whine_pipe()
      trace: do not fall back to stderr

Joey Hess (1):
      clarify %f documentation

Johannes Schindelin (59):
      mingw: let the build succeed with DEVELOPER=1
      perf: accommodate for MacOSX
      pretty: make the skip_blank_lines() function public
      commit.c: make find_commit_subject() more robust
      t2300: "git --exec-path" is not usable in $PATH on Windows as-is
      log: prepare log/log-tree to reuse the diffopt.close_file attribute
      log-tree: respect diffopt's configured output file stream
      line-log: respect diffopt's configured output file stream
      graph: respect the diffopt.file setting
      shortlog: support outputting to streams other than stdout
      format-patch: explicitly switch off color when writing to files
      format-patch: avoid freopen()
      format-patch: use stdout directly
      shortlog: respect the --output=<file> setting
      t4211: ensure that log respects --output=<file>
      color.h: remove obsolete comment about limitations on Windows
      diff: do not color output when --color=auto and --output=<file> is given
      t3404: fix a grammo (commands are ran -> commands are run)
      commit -C: skip blank lines at the beginning of the message
      sequencer: use skip_blank_lines() to find the commit subject
      reset --hard: skip blank lines when reporting the commit subject
      commit -S: avoid invalid pointer with empty message
      mingw: declare main()'s argv as const
      t3404: add a test for the --gpg-sign option
      rebase -i: demonstrate a bug with --autosquash
      rebase -i: we allow extra spaces after fixup!/squash!
      am: counteract gender bias
      diff: demonstrate a bug with --patience and --ignore-space-at-eol
      diff: fix a double off-by-one with --ignore-space-at-eol
      t/test-lib.sh: fix running tests with --valgrind
      mingw: fix the shortlog --output=<file> test
      mingw: fix regression in t1308-config-set
      fsck: refactor how to describe objects
      fsck_walk(): optionally name objects on the go
      fsck: give the error function a chance to see the fsck_options
      fsck: optionally show more helpful info for broken links
      t5520: verify that `pull --rebase` shows the helpful advice when failing
      die("bug"): report bugs consistently
      die(_("BUG")): avoid translating bug messages
      merge-recursive: clarify code in was_tracked()
      prepare the builtins for a libified merge_recursive()
      merge_recursive: abort properly upon errors
      merge-recursive: avoid returning a wholesale struct
      merge-recursive: allow write_tree_from_memory() to error out
      merge-recursive: handle return values indicating errors
      merge-recursive: switch to returning errors instead of dying
      am -3: use merge_recursive() directly again
      merge-recursive: flush output buffer before printing error messages
      merge-recursive: write the commit title in one go
      merge-recursive: offer an option to retain the output in 'obuf'
      merge_trees(): ensure that the callers release output buffer
      merge-recursive: flush output buffer even when erroring out
      import-tars: support hard links
      t5533: make it pass on case-sensitive filesystems
      nedmalloc: fix misleading indentation
      git mv: do not keep slash in `git mv dir non-existing-dir/`
      t/Makefile: ensure that paths are valid on platforms we care
      rev-parse: respect core.hooksPath in --git-path
      Revert "display HTML in default browser using Windows' shell API"

Johannes Sixt (7):
      Windows: add missing definition of ENOTSOCK
      git-submodule: forward exit code of git-submodule--helper more faithfully
      submodule-helper: fix indexing in clone retry error reporting path
      rebase-interactive: trim leading whitespace from progress count
      t4130: work around Windows limitation
      config.c: avoid duplicated global static variables
      commit-slab.h: avoid duplicated global static variables

John Keeping (5):
      difftool: fix argument handling in subdirs
      Documentation/git-push: fix placeholder formatting
      push: add shorthand for --force-with-lease branch creation
      push: allow pushing new branches with --force-with-lease
      difftool: always honor fatal error exit codes

Jonathan Nieder (1):
      doc: git-htmldocs.googlecode.com is no more

Jonathan Tan (1):
      fetch-pack: grow stateless RPC windows exponentially

Jordan DE GEA (1):
      worktree: allow "-" short-hand for @{-1} in add command

Josef Kufner (1):
      pretty: pass graph width to pretty formatting for use in '%>|(N)'

Josh Triplett (1):
      format-patch: format.from gives the default for --from

Junio C Hamano (42):
      send-email: detect and offer to skip backup files
      pathspec: rename free_pathspec() to clear_pathspec()
      t1308: do not get fooled by symbolic links to the source tree
      builtin/apply: remove misleading comment on lock_file field
      blame, line-log: do not loop around deref_tag()
      Start the post-2.9 cycle
      clone: do not let --depth imply --shallow-submodules
      Start preparing for 2.9.1
      Second batch of topics for 2.10
      More fixes for 2.9.1
      Third batch of topics for 2.10
      commit.c: remove print_commit_list()
      Fourth batch of topics for 2.10
      Git 2.9.1
      merge: avoid "safer crlf" during recording of merge results
      Fifth batch of topics for 2.10
      diff: document diff-filter exclusion
      Git 2.9.2
      archive-tar: huge offset and future timestamps would not work on 32-bit
      Sixth batch of topics for 2.10
      grep: further simplify setting the pattern type
      Seventh batch of topics for 2.10
      date: clarify --date=raw description
      Some fixes for 2.9.3
      t9100: portability fix
      Eighth batch of topics for 2.10
      hashmap: clarify that hashmap_entry can safely be discarded
      Ninth batch of topics for 2.10
      Tenth batch for 2.10
      Hopefully final batch for 2.9.3
      Eleventh batch for 2.10
      Yet another batch for 2.9.3
      Twelfth batch for 2.10
      Git 2.9.3
      Final batch before 2.10-rc0
      Git 2.10-rc0
      Relnotes: decribe the updates to the "text=auto" attribute
      relnotes: redo the description of text=auto fix
      RelNotes: final batch of topics before -rc1
      Git 2.10-rc1
      Prepare for 2.10.0-rc2
      Git 2.10-rc2

Keith McGuigan (1):
      builtin/fetch.c: don't free remote->name after fetch

Kevin Willford (4):
      patch-ids: stop using a hand-rolled hashmap implementation
      patch-ids: replace the seen indicator with a commit pointer
      patch-ids: add flag to create the diff patch id using header only data
      rebase: avoid computing unnecessary patch IDs

LE Manh Cuong (1):
      sh-setup: enclose setting of ${VAR=default} in double-quotes

Lars Schneider (2):
      git-p4: place temporary refs used for branch import under refs/git-p4-tmp
      travis-ci: enable web server tests t55xx on Linux

Lars Vogel (1):
      Use "working tree" instead of "working directory" for git status

Linus Torvalds (1):
      gpg-interface: prefer "long" key format output when verifying pgp signatures

Lukas Fleischer (4):
      receive-pack: send auto-gc output over sideband 2
      sideband.c: make send_sideband() return void
      upload-pack.c: make send_client_data() return void
      sideband.c: refactor recv_sideband()

Matthieu Moy (9):
      Documentation/git-mv.txt: fix whitespace indentation
      doc: typeset short command-line options as literal
      doc: typeset long command-line options as literal
      doc: typeset '--' as literal
      doc: typeset long options with argument as literal
      CodingGuidelines: formatting HEAD in documentation
      doc: typeset HEAD and variants as literal
      status: suggest 'git merge --abort' when appropriate
      git-multimail: update to release 1.4.0

Mehul Jain (3):
      t4202: refactor test
      log: add "--no-show-signature" command line option
      log: add log.showSignature configuration variable

Michael Haggerty (50):
      t1404: demonstrate a bug resolving references
      commit_ref(): if there is an empty dir in the way, delete it
      read_raw_ref(): don't get confused by an empty directory
      safe_create_leading_directories(): improve docstring
      remove_dir_recursively(): add docstring
      refname_is_safe(): use skip_prefix()
      refname_is_safe(): don't allow the empty string
      refname_is_safe(): insist that the refname already be normalized
      commit_ref_update(): write error message to *err, not stderr
      rename_ref(): remove unneeded local variable
      ref_transaction_commit(): remove local variables n and updates
      read_raw_ref(): rename flags argument to type
      read_raw_ref(): clear *type at start of function
      read_raw_ref(): rename symref argument to referent
      read_raw_ref(): improve docstring
      read_raw_ref(): move docstring to header file
      lock_ref_sha1_basic(): remove unneeded local variable
      refs: make error messages more consistent
      ref_transaction_create(): disallow recursive pruning
      ref_transaction_commit(): correctly report close_ref() failure
      delete_branches(): use resolve_refdup()
      verify_refname_available(): adjust constness in declaration
      add_update(): initialize the whole ref_update
      lock_ref_for_update(): new function
      unlock_ref(): move definition higher in the file
      ref_transaction_update(): check refname_is_safe() at a minimum
      refs: resolve symbolic refs first
      lock_ref_for_update(): don't re-read non-symbolic references
      lock_ref_for_update(): don't resolve symrefs
      commit_ref_update(): remove the flags parameter
      lock_ref_sha1_basic(): only handle REF_NODEREF mode
      refs: remove unnecessary "extern" keywords
      do_for_each_ref(): move docstring to the header file
      refs: use name "prefix" consistently
      delete_refs(): add a flags argument
      remote rm: handle symbolic refs correctly
      get_ref_cache(): only create an instance if there is a submodule
      entry_resolves_to_object(): rename function from ref_resolves_to_object()
      ref_resolves_to_object(): new function
      refs: introduce an iterator interface
      do_for_each_ref(): reimplement using reference iteration
      for_each_reflog(): don't abort for bad references
      dir_iterator: new API for iterating over a directory tree
      for_each_reflog(): reimplement using iterators
      t1404: rename file to t1404-update-ref-errors.sh
      t1404: remove "prefix" argument to test_update_rejected
      t1404: document function test_update_rejected
      t1404: add more tests of update-ref error handling
      lock_ref_for_update(): make error handling more uniform
      lock_ref_for_update(): avoid a symref resolution

Michael J Gruber (7):
      cherry-pick: allow to pick to unborn branches
      Documentation/technical: describe signature formats
      Documentation/technical: signed tag format
      Documentation/technical: signed commit format
      Documentation/technical: signed merge tag format
      gpg-interface: check gpg signature creation status
      t/t91*: do not say how to avoid the tests

Michael Stahl (1):
      document git-repack interaction of pack.threads and pack.windowMemory

Mike Hommey (2):
      blame: allow to blame paths freshly added to the index
      t/t8003-blame-corner-cases.sh: Use here documents

Nguyễn Thái Ngọc Duy (47):
      completion: support git-worktree
      worktree.c: rewrite mark_current_worktree() to avoid strbuf
      git-worktree.txt: keep subcommand listing in alphabetical order
      worktree.c: use is_dot_or_dotdot()
      worktree: avoid 0{40}, too many zeroes, hard to read
      worktree: simplify prefixing paths
      worktree.c: add find_worktree()
      worktree.c: add is_main_worktree()
      lib-httpd.sh: print error.log on error
      worktree.c: add is_worktree_locked()
      pretty.c: support <direction>|(<negative number>) forms
      new-command.txt: correct the command description file
      grep: break down an "if" stmt in preparation for next changes
      test-regex: isolate the bug test code
      test-regex: expose full regcomp() to the command line
      grep/icase: avoid kwsset on literal non-ascii strings
      git-fetch.txt: document fetch output
      fetch: refactor ref update status formatting code
      fetch: change flag code for displaying tag update and deleted ref
      grep/icase: avoid kwsset when -F is specified
      grep: rewrite an if/else condition to avoid duplicate expression
      grep/pcre: prepare locale-dependent tables for icase matching
      gettext: add is_utf8_locale()
      grep/pcre: support utf-8
      diffcore-pickaxe: Add regcomp_or_die()
      diffcore-pickaxe: support case insensitive match on non-ascii
      grep.c: reuse "icase" variable
      fetch: align all "remote -> local" output
      fetch: reduce duplicate in ref update status lines with placeholder
      connect: read $GIT_SSH_COMMAND from config file
      worktree: add "lock" command
      worktree: add "unlock" command
      worktree.c: find_worktree() search by path suffix
      pack-objects: pass length to check_pack_crc() without truncation
      log: decorate HEAD -> branch with the same color for arrow and HEAD
      sha1_file.c: use type off_t* for object_info->disk_sizep
      index-pack: correct "len" type in unpack_data()
      index-pack: report correct bad object offsets even if they are large
      index-pack: correct "offset" type in unpack_entry_data()
      pack-objects: do not truncate result in-pack object size on 32-bit systems
      fsck: use streaming interface for large blobs in pack
      test-lib.sh: introduce and use $EMPTY_TREE
      test-lib.sh: introduce and use $EMPTY_BLOB
      cache-tree.c: fix i-t-a entry skipping directory updates sometimes
      cache-tree: do not generate empty trees as a result of all i-t-a subentries
      config.mak.uname: correct perl path on FreeBSD
      t7063: work around FreeBSD's lazy mtime update feature

Nicolas Pitre (1):
      sideband.c: small optimization of strbuf usage

Orgad Shaneh (1):
      commit: describe that --no-verify skips the commit-msg hook in the help text

Parker Moore (2):
      contrib/persistent-https: update ldflags syntax for Go 1.7+
      contrib/persistent-https: use Git version for build label

Patrick Steinhardt (1):
      rebase -i: restore autostash on abort

Peter Colberg (2):
      refs.h: fix misspelt "occurred" in a comment
      config.c: fix misspelt "occurred" in an error message

Pranit Bauva (2):
      builtin/commit.c: memoize git-path for COMMIT_EDITMSG
      strbuf: describe the return value of strbuf_read_file

Ramsay Jones (2):
      regex: fix a SIZE_MAX macro redefinition warning
      write_or_die: remove the unused write_or_whine() function

René Scharfe (33):
      t4051: rewrite, add more tests
      xdiff: factor out match_func_rec()
      xdiff: handle appended chunks better with -W
      xdiff: ignore empty lines before added functions with -W
      xdiff: -W: don't include common trailing empty lines in context
      xdiff: don't trim common tail with -W
      t7810: add test for grep -W and trailing empty context lines
      grep: -W: don't extend context to trailing empty lines
      xdiff: fix merging of appended hunk with -W
      .gitattributes: set file type for C files
      notes-merge: use O_EXCL to avoid overwriting existing files
      am: ignore return value of write_file()
      rm: reuse strbuf for all remove_dir_recursively() calls
      worktree: use strbuf_add_absolute_path() directly
      use strbuf_addbuf() for appending a strbuf to another
      submodule-config: use explicit empty string instead of strbuf in config_from()
      strbuf: avoid calling strbuf_grow() twice in strbuf_addbuf()
      use strbuf_addstr() for adding constant strings to a strbuf
      pass constants as first argument to st_mult()
      use strbuf_addstr() instead of strbuf_addf() with "%s"
      use CHILD_PROCESS_INIT to initialize automatic variables
      merge-recursive: use STRING_LIST_INIT_NODUP
      merge: use string_list_split() in add_strategies()
      nedmalloc: work around overzealous GCC 6 warning
      archive-tar: make write_extended_header() void
      use strbuf_add_unique_abbrev() for adding short hashes
      correct FLEXPTR_* example in comment
      mailinfo: recycle strbuf in check_header()
      commit: use xstrdup() in get_merge_parent()
      commit: factor out set_merge_remote_desc()
      merge-recursive: fix verbose output for multiple base trees
      commit: use FLEX_ARRAY in struct merge_remote_desc
      receive-pack: use FLEX_ALLOC_MEM in queue_command()

Ronald Wampler (1):
      Makefile: add NEEDS_LIBRT to optionally link with librt

SZEDER Gábor (2):
      reflog: continue walking the reflog past root commits
      t1410: remove superfluous 'git reflog' from the 'walk past root' test

Stefan Beller (23):
      submodule update: make use of the existing fetch_in_submodule function
      submodule-config: keep shallow recommendation around
      submodule update: learn `--[no-]recommend-shallow` option
      submodule--helper: initial clone learns retry logic
      submodule update: continue when a clone fails
      t5614: don't use subshells
      push options: {pre,post}-receive hook learns about push options
      receive-pack: implement advertising and receiving push options
      push: accept push options
      add a test for push options
      Documentation: pack-protocol correct NAK response
      submodule deinit: remove outdated comment
      t7406: future proof tests with hard coded depth
      submodule update: respect depth in subsequent fetches
      submodule update: narrow scope of local variable
      submodule--helper: fix usage string for relative-path
      submodule-config: keep configured branch around
      gitmodules: document shallow recommendation
      submodule--helper: add remote-branch helper
      submodule update: allow '.' for branch value
      submodule--helper: use parallel processor correctly
      t7406: fix breakage on OSX
      checkout: do not mention detach advice for explicit --detach option

Thomas Braun (3):
      completion: factor out untracked file modes into a variable
      completion: add __git_get_option_value helper
      completion: add git status

Tom Russello (4):
      doc: clearer rule about formatting literals
      doc: change environment variables format
      doc: more consistency in environment variables format
      doc: change configuration variables format

Torsten Bögershausen (4):
      convert: unify the "auto" handling of CRLF
      convert: Correct NNO tests and missing `LF will be replaced by CRLF`
      git ls-files: text=auto eol=lf is supported in Git 2.10
      gitattributes: Document the unified "auto" handling

Vasco Almeida (47):
      i18n: builtin/remote.c: fix mark for translation
      i18n: advice: mark string about detached head for translation
      i18n: advice: internationalize message for conflicts
      i18n: transport: mark strings for translation
      i18n: sequencer: mark entire sentences for translation
      i18n: rebase-interactive: mark here-doc strings for translation
      i18n: sequencer: mark string for translation
      i18n: rebase-interactive: mark comments of squash for translation
      i18n: merge-octopus: mark messages for translation
      i18n: setup: mark strings for translation
      merge-octopus: use die shell function from git-sh-setup.sh
      tests: use test_i18n* functions to suppress false positives
      i18n: rebase: fix marked string to use eval_gettext variant
      tests: unpack-trees: update to use test_i18n* functions
      i18n: rebase: mark placeholder for translation
      t9003: become resilient to GETTEXT_POISON
      i18n: bisect: simplify error message for i18n
      t4153: fix negated test_i18ngrep call
      t6030: update to use test_i18ncmp
      t5523: use test_i18ngrep for negation
      i18n: git-sh-setup.sh: mark strings for translation
      i18n: bisect: mark strings for translation
      i18n: rebase-interactive: mark strings for translation
      i18n: transport-helper.c: change N_() call to _()
      i18n: notes: mark strings for translation
      i18n: notes: mark options for translation
      i18n: merge: mark messages for translation
      i18n: merge: change command option help to lowercase
      i18n: sequencer: add period to error message
      i18n: standardise messages
      i18n: remote: mark URL fallback text for translation
      i18n: remote: allow translations to reorder message
      i18n: init-db: join message pieces
      i18n: submodule: join strings marked for translation
      i18n: submodule: escape shell variables inside eval_gettext
      i18n: unmark die messages for translation
      i18n: branch: mark comment when editing branch description for translation
      t5541: become resilient to GETTEXT_POISON
      t5510: skip tests under GETTEXT_POISON build
      i18n: notes: mark comment for translation
      i18n: config: unfold error messages marked for translation
      i18n: setup: mark error messages for translation
      i18n: archive: mark errors for translation
      i18n: git-stash: mark messages for translation
      t3404: become resilient to GETTEXT_POISON
      t5520: become resilient to GETTEXT_POISON
      t7411: become resilient to GETTEXT_POISON

Ville Skyttä (3):
      git-prompt.sh: Don't error on null ${ZSH,BASH}_VERSION, $short_sha
      completion: complete --delete, --move, and --remotes for git branch
      Spelling fixes

William Duclot (1):
      userdiff: add built-in pattern for CSS

brian m. carlson (11):
      hex: add oid_to_hex_r()
      contrib/coccinelle: add basic Coccinelle transforms
      coccinelle: convert hashcpy() with null_sha1 to hashclr()
      coccinelle: apply object_id Coccinelle transformations
      diff: convert struct diff_filespec to struct object_id
      diff: rename struct diff_filespec's sha1_valid member
      merge-recursive: convert struct stage_data to use object_id
      merge-recursive: convert struct merge_file_info to object_id
      merge-recursive: convert leaf functions to use struct object_id
      merge-recursive: convert merge_recursive_generic() to object_id
      diff: convert prep_temp_blob() to struct object_id


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.10.0-rc1
@ 2016-08-19 23:10  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2016-08-19 23:10 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

A release candidate Git v2.10.0-rc1 is now available for testing
at the usual places.  It is comprised of 611 non-merge commits
since v2.9.0, contributed by 68 people, 20 of which are new faces.

Relative to v2.10-0-rc0 (the preview), there is a last-minute merge
of Linus's "Let's show longer fingerprint in the GPG output" patch
(which was a bit scary but I made sure push-certificate codepath
would not be negatively affected), among other small topics.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.10.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.9.0 are as follows.
Welcome to the Git development community!

  Alexander Hirsch, Andreas Brauchli, Andrew Oakley, Antoine
  Queru, Christopher Layne, Dave Nicolson, Ed Maste, Heiko Becker,
  Ingo Brückl, Jonathan Tan, Jordan DE GEA, Josef Kufner, Keith
  McGuigan, Kevin Willford, LE Manh Cuong, Michael Stahl, Parker
  Moore, Peter Colberg, Tom Russello, and William Duclot.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alex Henrie, Alfred Perlstein, Armin Kunaschik, brian m. carlson,
  Charles Bailey, Chris Packham, Christian Couder, David A. Greene,
  David Aguilar, David Kastrup, David Turner, Edward Thomson, Elia
  Pinto, Eric Sunshine, Eric Wong, Heiko Voigt, Jacob Keller,
  Jeff King, Joey Hess, Johannes Schindelin, Johannes Sixt,
  John Keeping, Jonathan Nieder, Josh Triplett, Junio C Hamano,
  Lars Schneider, Lars Vogel, Linus Torvalds, Lukas Fleischer,
  Matthieu Moy, Mehul Jain, Michael Haggerty, Michael J Gruber,
  Mike Hommey, Nguyễn Thái Ngọc Duy, Nicolas Pitre, Orgad
  Shaneh, Patrick Steinhardt, Pranit Bauva, Ramsay Jones, René
  Scharfe, Ronald Wampler, Stefan Beller, SZEDER Gábor, Thomas
  Braun, Torsten Bögershausen, Vasco Almeida, and Ville Skyttä.

----------------------------------------------------------------

Git 2.10 Release Notes (draft)
==============================

Backward compatibility notes
----------------------------

Updates since v2.9
------------------

UI, Workflows & Features

 * "git pull --rebase --verify-signature" learned to warn the user
   that "--verify-signature" is a no-op when rebasing.

 * An upstream project can make a recommendation to shallowly clone
   some submodules in the .gitmodules file it ships.

 * "git worktree add" learned that '-' can be used as a short-hand for
   "@{-1}", the previous branch.

 * Update the funcname definition to support css files.

 * The completion script (in contrib/) learned to complete "git
   status" options.

 * Messages that are generated by auto gc during "git push" on the
   receiving end are now passed back to the sending end in such a way
   that they are shown with "remote: " prefix to avoid confusing the
   users.

 * "git add -i/-p" learned to honor diff.compactionHeuristic
   experimental knob, so that the user can work on the same hunk split
   as "git diff" output.

 * "upload-pack" allows a custom "git pack-objects" replacement when
   responding to "fetch/clone" via the uploadpack.packObjectsHook.
   (merge b738396 jk/upload-pack-hook later to maint).

 * Teach format-patch and mailsplit (hence "am") how a line that
   happens to begin with "From " in the e-mail message is quoted with
   ">", so that these lines can be restored to their original shape.
   (merge d9925d1 ew/mboxrd-format-am later to maint).

 * "git repack" learned the "--keep-unreachable" option, which sends
   loose unreachable objects to a pack instead of leaving them loose.
   This helps heuristics based on the number of loose objects
   (e.g. "gc --auto").
   (merge e26a8c4 jk/repack-keep-unreachable later to maint).

 * "log --graph --format=" learned that "%>|(N)" specifies the width
   relative to the terminal's left edge, not relative to the area to
   draw text that is to the right of the ancestry-graph section.  It
   also now accepts negative N that means the column limit is relative
   to the right border.

 * A careless invocation of "git send-email directory/" after editing
   0001-change.patch with an editor often ends up sending both
   0001-change.patch and its backup file, 0001-change.patch~, causing
   embarrassment and a minor confusion.  Detect such an input and
   offer to skip the backup files when sending the patches out.
   (merge 531220b jc/send-email-skip-backup later to maint).

 * "git submodule update" that drives many "git clone" could
   eventually hit flaky servers/network conditions on one of the
   submodules; the command learned to retry the attempt.

 * The output coloring scheme learned two new attributes, italic and
   strike, in addition to existing bold, reverse, etc.

 * "git log" learns log.showSignature configuration variable, and a
   command line option "--no-show-signature" to countermand it.
   (merge fce04c3 mj/log-show-signature-conf later to maint).

 * More markings of messages for i18n, with updates to various tests
   to pass GETTEXT_POISON tests.

 * "git archive" learned to handle files that are larger than 8GB and
   commits far in the future than expressible by the traditional US-TAR
   format.
   (merge 5caeeb8 jk/big-and-future-archive-tar later to maint).

 * A new configuration variable core.sshCommand has been added to
   specify what value for GIT_SSH_COMMAND to use per repository.

 * "git worktree prune" protected worktrees that are marked as
   "locked" by creating a file in a known location.  "git worktree"
   command learned a dedicated command pair to create and remove such
   a file, so that the users do not have to do this with editor.

 * A handful of "git svn" updates.

 * "git push" learned to accept and pass extra options to the
   receiving end so that hooks can read and react to them.

 * "git status" learned to suggest "merge --abort" during a conflicted
   merge, just like it already suggests "rebase --abort" during a
   conflicted rebase.

 * "git jump" script (in contrib/) has been updated a bit.
   (merge a91e692 jk/git-jump later to maint).

 * "git push" and "git clone" learned to give better progress meters
   to the end user who is waiting on the terminal.

 * An entry "git log --decorate" for the tip of the current branch is
   shown as "HEAD -> name" (where "name" is the name of the branch);
   the arrow is now painted in the same color as "HEAD", not in the
   color for commits.

 * "git format-patch" learned format.from configuration variable to
   specify the default settings for its "--from" option.

 * "git am -3" calls "git merge-recursive" when it needs to fall back
   to a three-way merge; this call has been turned into an internal
   subroutine call instead of spawning a separate subprocess.

 * The command line completion scripts (in contrib/) now knows about
   "git branch --delete/--move [--remote]".
   (merge 2703c22 vs/completion-branch-fully-spelled-d-m-r later to maint).

 * "git rev-parse --git-path hooks/<hook>" learned to take
   core.hooksPath configuration variable (introduced during 2.9 cycle)
   into account.
   (merge 9445b49 ab/hooks later to maint).

 * "git log --show-signature" and other commands that display the
   verification status of PGP signature now shows the longer key-id,
   as 32-bit key-id is so last century.


Performance, Internal Implementation, Development Support etc.

 * "git fast-import" learned the same performance trick to avoid
   creating too small a packfile as "git fetch" and "git push" have,
   using *.unpackLimit configuration.

 * When "git daemon" is run without --[init-]timeout specified, a
   connection from a client that silently goes offline can hang around
   for a long time, wasting resources.  The socket-level KEEPALIVE has
   been enabled to allow the OS to notice such failed connections.

 * "git upload-pack" command has been updated to use the parse-options
   API.

 * The "git apply" standalone program is being libified; the first
   step to move many state variables into a structure that can be
   explicitly (re)initialized to make the machinery callable more
   than once has been merged.

 * HTTP transport gained an option to produce more detailed debugging
   trace.
   (merge 73e57aa ep/http-curl-trace later to maint).

 * Instead of taking advantage of the fact that a struct string_list
   that is allocated with all NULs happens to be the INIT_NODUP kind,
   the users of string_list structures are taught to initialize them
   explicitly as such, to document their behaviour better.
   (merge 2721ce2 jk/string-list-static-init later to maint).

 * HTTPd tests learned to show the server error log to help diagnosing
   a failing tests.
   (merge 44f243d nd/test-lib-httpd-show-error-log-in-verbose later to maint).

 * The ownership rule for the piece of memory that hold references to
   be fetched in "git fetch" was screwy, which has been cleaned up.

 * "git bisect" makes an internal call to "git diff-tree" when
   bisection finds the culprit, but this call did not initialize the
   data structure to pass to the diff-tree API correctly.

 * Further preparatory clean-up for "worktree" feature continues.
   (merge 0409e0b nd/worktree-cleanup-post-head-protection later to maint).

 * Formats of the various data (and how to validate them) where we use
   GPG signature have been documented.

 * A new run-command API function pipe_command() is introduced to
   sanely feed data to the standard input while capturing data from
   the standard output and the standard error of an external process,
   which is cumbersome to hand-roll correctly without deadlocking.

   The codepath to sign data in a prepared buffer with GPG has been
   updated to use this API to read from the status-fd to check for
   errors (instead of relying on GPG's exit status).
   (merge efee955 jk/gpg-interface-cleanup later to maint).

 * Allow t/perf framework to use the features from the most recent
   version of Git even when testing an older installed version.

 * The commands in the "log/diff" family have had an FILE* pointer in the
   data structure they pass around for a long time, but some codepaths
   used to always write to the standard output.  As a preparatory step
   to make "git format-patch" available to the internal callers, these
   codepaths have been updated to consistently write into that FILE*
   instead.

 * Conversion from unsigned char sha1[20] to struct object_id
   continues.

 * Improve the look of the way "git fetch" reports what happened to
   each ref that was fetched.

 * The .c/.h sources are marked as such in our .gitattributes file so
   that "git diff -W" and friends would work better.

 * Code clean-up to avoid using a variable string that compilers may
   feel untrustable as printf-style format given to write_file()
   helper function.

 * "git p4" used a location outside $GIT_DIR/refs/ to place its
   temporary branches, which has been moved to refs/git-p4-tmp/.

 * Existing autoconf generated test for the need to link with pthread
   library did not check all the functions from pthread libraries;
   recent FreeBSD has some functions in libc but not others, and we
   mistakenly thought linking with libc is enough when it is not.

 * When "git fsck" reports a broken link (e.g. a tree object contains
   a blob that does not exist), both containing object and the object
   that is referred to were reported with their 40-hex object names.
   The command learned the "--name-objects" option to show the path to
   the containing object from existing refs (e.g. "HEAD~24^2:file.txt").

 * Allow http daemon tests in Travis CI tests.

 * Makefile assumed that -lrt is always available on platforms that
   want to use clock_gettime() and CLOCK_MONOTONIC, which is not a
   case for recent Mac OS X.  The necessary symbols are often found in
   libc on many modern systems and having -lrt on the command line, as
   long as the library exists, had no effect, but when the platform
   removes librt.a that is a different matter--having -lrt will break
   the linkage.

   This change could be seen as a regression for those who do need to
   specify -lrt, as they now specifically ask for NEEDS_LIBRT when
   building. Hopefully they are in the minority these days.

 * Further preparatory work on the refs API before the pluggable
   backend series can land.

 * Error handling in the codepaths that updates refs has been
   improved.

 * The API to iterate over all the refs (i.e. for_each_ref(), etc.)
   has been revamped.

 * The handling of the "text=auto" attribute has been corrected.
   $ echo "* text=auto eol=crlf" >.gitattributes
   used to have the same effect as
   $ echo "* text eol=crlf" >.gitattributes
   i.e. declaring all files are text (ignoring "auto").  The
   combination has been fixed to be equivalent to doing
   $ git config core.autocrlf true

 * A few tests that specifically target "git rebase -i" have been
   added.

 * Dumb http transport on the client side has been optimized.
   (merge ecba195 ew/http-walker later to maint).

 * Users of the parse_options_concat() API function need to allocate
   extra slots in advance and fill them with OPT_END() when they want
   to decide the set of supported options dynamically, which makes the
   code error-prone and hard to read.  This has been corrected by tweaking
   the API to allocate and return a new copy of "struct option" array.

 * "git fetch" exchanges batched have/ack messages between the sender
   and the receiver, initially doubling every time and then falling
   back to enlarge the window size linearly.  The "smart http"
   transport, being an half-duplex protocol, outgrows the preset limit
   too quickly and becomes inefficient when interacting with a large
   repository.  The internal mechanism learned to grow the window size
   more aggressively when working with the "smart http" transport.

 * Tests for "git svn" have been taught to reuse the lib-httpd test
   infrastructure when testing the subversion integration that
   interacts with subversion repositories served over the http://
   protocol.
   (merge a8a5d25 ew/git-svn-http-tests later to maint).

 * "git pack-objects" has a few options that tell it not to pack
   objects found in certain packfiles, which require it to scan .idx
   files of all available packs.  The codepaths involved in these
   operations have been optimized for a common case of not having any
   non-local pack and/or any .kept pack.

 * The t3700 test about "add --chmod=-x" have been made a bit more
   robust and generally cleaned up.
   (merge 766cdc4 ib/t3700-add-chmod-x-updates later to maint).

 * The build procedure learned PAGER_ENV knob that lists what default
   environment variable settings to export for popular pagers.  This
   mechanism is used to tweak the default settings to MORE on FreeBSD.
   (merge 995bc22 ew/build-time-pager-tweaks later to maint).

 * The http-backend (the server-side component of smart-http
   transport) used to trickle the HTTP header one at a time.  Now
   these write(2)s are batched.
   (merge b36045c ew/http-backend-batch-headers later to maint).

 * When "git rebase" tries to compare set of changes on the updated
   upstream and our own branch, it computes patch-id for all of these
   changes and attempts to find matches. This has been optimized by
   lazily computing the full patch-id (which is expensive) to be
   compared only for changes that touch the same set of paths.
   (merge b3dfeeb kw/patch-ids-optim later to maint).

 * A handful of tests that were broken under gettext-poison build have
   been fixed.


Also contains various documentation updates and code clean-ups.


Fixes since v2.9
----------------

Unless otherwise noted, all the fixes since v2.8 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * The commands in `git log` family take %C(auto) in a custom format
   string.  This unconditionally turned the color on, ignoring
   --no-color or with --color=auto when the output is not connected to
   a tty; this was corrected to make the format truly behave as
   "auto".

 * "git rev-list --count" whose walk-length is limited with "-n"
   option did not work well with the counting optimized to look at the
   bitmap index.

 * "git show -W" (extend hunks to cover the entire function, delimited
   by lines that match the "funcname" pattern) used to show the entire
   file when a change added an entire function at the end of the file,
   which has been fixed.

 * The documentation set has been updated so that literal commands,
   configuration variables and environment variables are consistently
   typeset in fixed-width font and bold in manpages.

 * "git svn propset" subcommand that was added in 2.3 days is
   documented now.

 * The documentation tries to consistently spell "GPG"; when
   referring to the specific program name, "gpg" is used.

 * "git reflog" stopped upon seeing an entry that denotes a branch
   creation event (aka "unborn"), which made it appear as if the
   reflog was truncated.

 * The git-prompt scriptlet (in contrib/) was not friendly with those
   who uses "set -u", which has been fixed.

 * compat/regex code did not cleanly compile.

 * A codepath that used alloca(3) to place an unbounded amount of data
   on the stack has been updated to avoid doing so.

 * "git update-index --add --chmod=+x file" may be usable as an escape
   hatch, but not a friendly thing to force for people who do need to
   use it regularly.  "git add --chmod=+x file" can be used instead.

 * Build improvements for gnome-keyring (in contrib/)

 * "git status" used to say "working directory" when it meant "working
   tree".

 * Comments about misbehaving FreeBSD shells have been clarified with
   the version number (9.x and before are broken, newer ones are OK).

 * "git cherry-pick A" worked on an unborn branch, but "git
   cherry-pick A..B" didn't.

 * Fix an unintended regression in v2.9 that breaks "clone --depth"
   that recurses down to submodules by forcing the submodules to also
   be cloned shallowly, which many server instances that host upstream
   of the submodules are not prepared for.

 * Fix unnecessarily waste in the idiomatic use of ': ${VAR=default}'
   to set the default value, without enclosing it in double quotes.

 * Some platform-specific code had non-ANSI strict declarations of C
   functions that do not take any parameters, which has been
   corrected.

 * The internal code used to show local timezone offset is not
   prepared to handle timestamps beyond year 2100, and gave a
   bogus offset value to the caller.  Use a more benign looking
   +0000 instead and let "git log" going in such a case, instead
   of aborting.

 * One among four invocations of readlink(1) in our test suite has
   been rewritten so that the test can run on systems without the
   command (others are in valgrind test framework and t9802).

 * t/perf needs /usr/bin/time with GNU extension; the invocation of it
   is updated to "gtime" on Darwin.

 * A bug, which caused "git p4" while running under verbose mode to
   report paths that are omitted due to branch prefix incorrectly, has
   been fixed; the command said "Ignoring file outside of prefix" for
   paths that are _inside_.

 * The top level documentation "git help git" still pointed at the
   documentation set hosted at now-defunct google-code repository.
   Update it to point to https://git.github.io/htmldocs/git.html
   instead.

 * A helper function that takes the contents of a commit object and
   finds its subject line did not ignore leading blank lines, as is
   commonly done by other codepaths.  Make it ignore leading blank
   lines to match.

 * For a long time, we carried an in-code comment that said our
   colored output would work only when we use fprintf/fputs on
   Windows, which no longer is the case for the past few years.

 * "gc.autoPackLimit" when set to 1 should not trigger a repacking
   when there is only one pack, but the code counted poorly and did
   so.

 * Add a test to specify the desired behaviour that currently is not
   available in "git rebase -Xsubtree=...".

 * More mark-up updates to typeset strings that are expected to
   literally typed by the end user in fixed-width font.

 * "git commit --amend --allow-empty-message -S" for a commit without
   any message body could have misidentified where the header of the
   commit object ends.

 * "git rebase -i --autostash" did not restore the auto-stashed change
   when the operation was aborted.

 * Git does not know what the contents in the index should be for a
   path added with "git add -N" yet, so "git grep --cached" should not
   show hits (or show lack of hits, with -L) in such a path, but that
   logic does not apply to "git grep", i.e. searching in the working
   tree files.  But we did so by mistake, which has been corrected.

 * "git blame -M" missed a single line that was moved within the file.

 * Fix recently introduced codepaths that are involved in parallel
   submodule operations, which gave up on reading too early, and
   could have wasted CPU while attempting to write under a corner
   case condition.

 * "git grep -i" has been taught to fold case in non-ascii locales
   correctly.

 * A test that unconditionally used "mktemp" learned that the command
   is not necessarily available everywhere.

 * There are certain house-keeping tasks that need to be performed at
   the very beginning of any Git program, and programs that are not
   built-in commands had to do them exactly the same way as "git"
   potty does.  It was easy to make mistakes in one-off standalone
   programs (like test helpers).  A common "main()" function that
   calls cmd_main() of individual program has been introduced to
   make it harder to make mistakes.
   (merge de61ceb jk/common-main later to maint).

 * The test framework learned a new helper test_match_signal to
   check an exit code from getting killed by an expected signal.

 * General code clean-up around a helper function to write a
   single-liner to a file.
   (merge 7eb6e10 jk/write-file later to maint).

 * One part of "git am" had an oddball helper function that called
   stuff from outside "his" as opposed to calling what we have "ours",
   which was not gender-neutral and also inconsistent with the rest of
   the system where outside stuff is usuall called "theirs" in
   contrast to "ours".

 * "git blame file" allowed the lineage of lines in the uncommitted,
   unadded contents of "file" to be inspected, but it refused when
   "file" did not appear in the current commit.  When "file" was
   created by renaming an existing file (but the change has not been
   committed), this restriction was unnecessarily tight.

 * "git add -N dir/file && git write-tree" produced an incorrect tree
   when there are other paths in the same directory that sorts after
   "file".

 * "git fetch http://user:pass@host/repo..." scrubbed the userinfo
   part, but "git push" didn't.

 * "git merge" with renormalization did not work well with
   merge-recursive, due to "safer crlf" conversion kicking in when it
   shouldn't.
   (merge 1335d76 jc/renormalize-merge-kill-safer-crlf later to maint).

 * The use of strbuf in "git rm" to build filename to remove was a bit
   suboptimal, which has been fixed.

 * An age old bug that caused "git diff --ignore-space-at-eol"
   misbehave has been fixed.

 * "git notes merge" had a code to see if a path exists (and fails if
   it does) and then open the path for writing (when it doesn't).
   Replace it with open with O_EXCL.

 * "git pack-objects" and "git index-pack" mostly operate with off_t
   when talking about the offset of objects in a packfile, but there
   were a handful of places that used "unsigned long" to hold that
   value, leading to an unintended truncation.

 * Recent update to "git daemon" tries to enable the socket-level
   KEEPALIVE, but when it is spawned via inetd, the standard input
   file descriptor may not necessarily be connected to a socket.
   Suppress an ENOTSOCK error from setsockopt().

 * Recent FreeBSD stopped making perl available at /usr/bin/perl;
   switch the default the built-in path to /usr/local/bin/perl on not
   too ancient FreeBSD releases.

 * "git commit --help" said "--no-verify" is only about skipping the
   pre-commit hook, and failed to say that it also skipped the
   commit-msg hook.

 * "git merge" in Git v2.9 was taught to forbid merging an unrelated
   lines of history by default, but that is exactly the kind of thing
   the "--rejoin" mode of "git subtree" (in contrib/) wants to do.
   "git subtree" has been taught to use the "--allow-unrelated-histories"
   option to override the default.

 * The build procedure for "git persistent-https" helper (in contrib/)
   has been updated so that it can be built with more recent versions
   of Go.

 * There is an optimization used in "git diff $treeA $treeB" to borrow
   an already checked-out copy in the working tree when it is known to
   be the same as the blob being compared, expecting that open/mmap of
   such a file is faster than reading it from the object store, which
   involves inflating and applying delta.  This however kicked in even
   when the checked-out copy needs to go through the convert-to-git
   conversion (including the clean filter), which defeats the whole
   point of the optimization.  The optimization has been disabled when
   the conversion is necessary.

 * "git -c grep.patternType=extended log --basic-regexp" misbehaved
   because the internal API to access the grep machinery was not
   designed well.

 * Windows port was failing some tests in t4130, due to the lack of
   inum in the returned values by its lstat(2) emulation.

 * The reflog output format is documented better, and a new format
   --date=unix to report the seconds-since-epoch (without timezone)
   has been added.
   (merge 442f6fd jk/reflog-date later to maint).

 * "git difftool <paths>..." started in a subdirectory failed to
   interpret the paths relative to that directory, which has been
   fixed.

 * The characters in the label shown for tags/refs for commits in
   "gitweb" output are now properly escaped for proper HTML output.

 * FreeBSD can lie when asked mtime of a directory, which made the
   untracked cache code to fall back to a slow-path, which in turn
   caused tests in t7063 to fail because it wanted to verify the
   behaviour of the fast-path.

 * Squelch compiler warnings for netmalloc (in compat/) library.

 * A small memory leak in the command line parsing of "git blame"
   has been plugged.

 * The API documentation for hashmap was unclear if hashmap_entry
   can be safely discarded without any other consideration.  State
   that it is safe to do so.

 * Not-so-recent rewrite of "git am" that started making internal
   calls into the commit machinery had an unintended regression, in
   that no matter how many seconds it took to apply many patches, the
   resulting committer timestamp for the resulting commits were all
   the same.

 * "git push --force-with-lease" already had enough logic to allow
   ensuring that such a push results in creation of a ref (i.e. the
   receiving end did not have another push from sideways that would be
   discarded by our force-pushing), but didn't expose this possibility
   to the users.  It does so now.
   (merge 9eed4f3 jk/push-force-with-lease-creation later to maint).

 * The mechanism to limit the pack window memory size, when packing is
   done using multiple threads (which is the default), is per-thread,
   but this was not documented clearly.
   (merge 954176c ms/document-pack-window-memory-is-per-thread later to maint).

 * "import-tars" fast-import script (in contrib/) used to ignore a
   hardlink target and replaced it with an empty file, which has been
   corrected to record the same blob as the other file the hardlink is
   shared with.
   (merge 04e0869 js/import-tars-hardlinks later to maint).

 * "git mv dir non-existing-dir/" did not work in some environments
   the same way as existing mainstream platforms.  The code now moves
   "dir" to "non-existing-dir", without relying on rename("A", "B/")
   that strips the trailing slash of '/'.
   (merge 189d035 js/mv-dir-to-new-directory later to maint).

 * The "t/" hierarchy is prone to get an unusual pathname; "make test"
   has been taught to make sure they do not contain paths that cannot
   be checked out on Windows (and the mechanism can be reusable to
   catch pathnames that are not portable to other platforms as need
   arises).
   (merge c2cafd3 js/test-lint-pathname later to maint).

 * When "git merge-recursive" works on history with many criss-cross
   merges in "verbose" mode, the names the command assigns to the
   virtual merge bases could have overwritten each other by unintended
   reuse of the same piece of memory.
   (merge 5447a76 rs/pull-signed-tag later to maint).

 * "git checkout --detach <branch>" used to give the same advice
   message as that is issued when "git checkout <tag>" (or anything
   that is not a branch name) is given, but asking with "--detach" is
   an explicit enough sign that the user knows what is going on.  The
   advice message has been squelched in this case.
   (merge 779b88a sb/checkout-explit-detach-no-advice later to maint).

 * "git difftool" by default ignores the error exit from the backend
   commands it spawns, because often they signal that they found
   differences by exiting with a non-zero status code just like "diff"
   does; the exit status codes 126 and above however are special in
   that they are used to signal that the command is not executable,
   does not exist, or killed by a signal.  "git difftool" has been
   taught to notice these exit status codes.
   (merge 45a4f5d jk/difftool-command-not-found later to maint).

 * Other minor clean-ups and documentation updates
   (merge 02a8cfa rs/merge-add-strategies-simplification later to maint).
   (merge af4941d rs/merge-recursive-string-list-init later to maint).
   (merge 1eb47f1 rs/use-strbuf-add-unique-abbrev later to maint).
   (merge ddd0bfa jk/tighten-alloc later to maint).
   (merge ecf30b2 rs/mailinfo-lib later to maint).
   (merge 0eb75ce sg/reflog-past-root later to maint).

----------------------------------------------------------------

Changes since v2.9.0 are as follows:

Alex Henrie (1):
      unpack-trees: fix English grammar in do-this-before-that messages

Alexander Hirsch (1):
      pull: warn on --verify-signatures with --rebase

Alfred Perlstein (1):
      git-svn: document the 'git svn propset' command

Andreas Brauchli (1):
      gitweb: escape link body in format_ref_marker

Andrew Oakley (1):
      git-p4: correct hasBranchPrefix verbose output

Antoine Queru (1):
      upload-pack.c: use parse-options API

Armin Kunaschik (2):
      t7800: readlink may not be available
      t7610: test for mktemp before test execution

Charles Bailey (4):
      t7810: fix duplicated test title
      t7810-grep.sh: fix duplicated test name
      t7810-grep.sh: fix a whitespace inconsistency
      grep: fix grepping for "intent to add" files

Chris Packham (1):
      completion: add option '--recurse-submodules' to 'git clone'

Christian Couder (50):
      builtin/apply: make gitdiff_verify_name() return void
      builtin/apply: avoid parameter shadowing 'p_value' global
      builtin/apply: avoid parameter shadowing 'linenr' global
      builtin/apply: avoid local variable shadowing 'len' parameter
      builtin/apply: extract line_by_line_fuzzy_match() from match_fragment()
      builtin/apply: move 'options' variable into cmd_apply()
      builtin/apply: move 'read_stdin' global into cmd_apply()
      builtin/apply: introduce 'struct apply_state' to start libifying
      builtin/apply: move 'state' init into init_apply_state()
      builtin/apply: move 'unidiff_zero' global into 'struct apply_state'
      builtin/apply: move 'check' global into 'struct apply_state'
      builtin/apply: move 'check_index' global into 'struct apply_state'
      builtin/apply: move 'apply_in_reverse' global into 'struct apply_state'
      builtin/apply: move 'apply_with_reject' global into 'struct apply_state'
      builtin/apply: move 'apply_verbosely' global into 'struct apply_state'
      builtin/apply: move 'update_index' global into 'struct apply_state'
      builtin/apply: move 'allow_overlap' global into 'struct apply_state'
      builtin/apply: move 'cached' global into 'struct apply_state'
      builtin/apply: move 'diffstat' global into 'struct apply_state'
      builtin/apply: move 'numstat' global into 'struct apply_state'
      builtin/apply: move 'summary' global into 'struct apply_state'
      builtin/apply: move 'threeway' global into 'struct apply_state'
      builtin/apply: move 'no_add' global into 'struct apply_state'
      builtin/apply: move 'unsafe_paths' global into 'struct apply_state'
      builtin/apply: move 'line_termination' global into 'struct apply_state'
      builtin/apply: move 'fake_ancestor' global into 'struct apply_state'
      builtin/apply: move 'p_context' global into 'struct apply_state'
      builtin/apply: move 'apply' global into 'struct apply_state'
      builtin/apply: move 'patch_input_file' global into 'struct apply_state'
      builtin/apply: move 'limit_by_name' global into 'struct apply_state'
      builtin/apply: move 'has_include' global into 'struct apply_state'
      builtin/apply: move 'p_value' global into 'struct apply_state'
      builtin/apply: move 'p_value_known' global into 'struct apply_state'
      builtin/apply: move 'root' global into 'struct apply_state'
      builtin/apply: move 'whitespace_error' global into 'struct apply_state'
      builtin/apply: move 'whitespace_option' into 'struct apply_state'
      builtin/apply: remove whitespace_option arg from set_default_whitespace_mode()
      builtin/apply: move 'squelch_whitespace_errors' into 'struct apply_state'
      builtin/apply: move 'applied_after_fixing_ws' into 'struct apply_state'
      builtin/apply: move 'ws_error_action' into 'struct apply_state'
      builtin/apply: move 'ws_ignore_action' into 'struct apply_state'
      builtin/apply: move 'max_change' and 'max_len' into 'struct apply_state'
      builtin/apply: move 'state_linenr' global into 'struct apply_state'
      builtin/apply: move 'fn_table' global into 'struct apply_state'
      builtin/apply: move 'symlink_changes' global into 'struct apply_state'
      builtin/apply: move 'state' check into check_apply_state()
      builtin/apply: move applying patches into apply_all_patches()
      builtin/apply: add 'lock_file' pointer into 'struct apply_state'
      builtin/apply: move 'newfd' global into 'struct apply_state'
      .mailmap: use Christian Couder's Tuxfamily address

Christopher Layne (1):
      git-svn: clone: Fail on missing url argument

Dave Nicolson (1):
      Documentation: GPG capitalization

David A. Greene (1):
      contrib/subtree: Add a test for subtree rebase that loses commits

David Aguilar (6):
      t7900-subtree.sh: fix quoting and broken && chains
      subtree: fix "git subtree split --rejoin"
      subtree: adjust style to match CodingGuidelines
      subtree: adjust function definitions to match CodingGuidelines
      difftool: avoid $GIT_DIR and $GIT_WORK_TREE
      difftool: use Git::* functions instead of passing around state

David Kastrup (1):
      blame: require 0 context lines while finding moved lines with -M

David Turner (3):
      refs: allow log-only updates
      refs: don't dereference on rename
      mailmap: use main email address for dturner

Ed Maste (1):
      rebase: update comment about FreeBSD /bin/sh

Edward Thomson (2):
      format_commit_message: honor `color=auto` for `%C(auto)`
      add: add --chmod=+x / --chmod=-x options

Elia Pinto (2):
      http.c: implement the GIT_TRACE_CURL environment variable
      imap-send.c: introduce the GIT_TRACE_CURL enviroment variable

Eric Sunshine (1):
      blame: drop strdup of string literal

Eric Wong (24):
      fast-import: implement unpack limit
      daemon: enable SO_KEEPALIVE for all sockets
      fast-import: invalidate pack_id references after loosening
      pretty: support "mboxrd" output format
      mailsplit: support unescaping mboxrd messages
      am: support --patch-format=mboxrd
      git-svn: skip mergeinfo handling with --no-follow-parent
      gc: fix off-by-one error with gc.autoPackLimit
      xread: retry after poll on EAGAIN/EWOULDBLOCK
      xwrite: poll on non-blocking FDs
      git-svn: warn instead of dying when commit data is missing
      hoist out handle_nonblock function for xread and xwrite
      config.mak.uname: define NEEDS_LIBRT under Linux, for now
      http-walker: remove unused parameter from fetch_object
      http: avoid disconnecting on 404s for loose objects
      http-walker: reduce O(n) ops with doubly-linked list
      list: avoid incompatibility with *BSD sys/queue.h
      daemon: ignore ENOTSOCK from setsockopt
      configure.ac: stronger test for pthread linkage
      git-svn: document svn.authorsProg in config
      git-svn: allow --version to work anywhere
      git svn: migrate tests to use lib-httpd
      pager: move pager-specific setup into the build
      http-backend: buffer headers before sending

Heiko Becker (1):
      gnome-keyring: Don't hard-code pkg-config executable

Heiko Voigt (3):
      submodule-config: passing name reference for .gitmodule blobs
      submodule-config: combine early return code into one goto
      submodule-config: fix test binary crashing when no arguments given

Ingo Brückl (3):
      t3700: remove unwanted leftover files before running new tests
      t3700: merge two tests into one
      t3700: add a test_mode_in_index helper function

Jacob Keller (1):
      completion: add completion for --submodule=* diff option

Jeff King (107):
      git_config_with_options: drop "found" counting
      git_config_parse_parameter: refactor cleanup code
      config: set up config_source for command-line config
      config: return configset value for current_config_ functions
      config: add a notion of "scope"
      upload-pack: provide a hook for running pack-objects
      rev-list: "adjust" results of "--count --use-bitmap-index -n"
      rev-list: disable bitmaps when "-n" is used with listing objects
      tree-diff: avoid alloca for large allocations
      send-pack: use buffered I/O to talk to pack-objects
      parse_opt_string_list: stop allocating new strings
      interpret-trailers: don't duplicate option strings
      blame,shortlog: don't make local option variables static
      use string_list initializer consistently
      fetch: document that pruning happens before fetching
      repack: document --unpack-unreachable option
      repack: add --keep-unreachable option
      repack: extend --keep-unreachable to loose objects
      add--interactive: respect diff.compactionHeuristic
      bisect: always call setup_revisions after init_revisions
      gpg-interface: use child_process.args
      verify_signed_buffer: drop pbuf variable
      verify_signed_buffer: use tempfile object
      run-command: add pipe_command helper
      verify_signed_buffer: use pipe_command
      sign_buffer: use pipe_command
      t0006: rename test-date's "show" to "relative"
      t0006: test various date formats
      local_tzoffset: detect errors from tm_to_time_t
      t/perf: fix regression in testing older versions of git
      p4211: explicitly disable renames in no-rename test
      color: fix max-size comment
      doc: refactor description of color format
      add skip_prefix_mem helper
      color: refactor parse_attr
      color: allow "no-" for negating attributes
      color: support "italic" attribute
      color: support strike-through attribute
      t9300: factor out portable "head -c" replacement
      t5000: test tar files that overflow ustar headers
      archive-tar: write extended headers for file sizes >= 8GB
      archive-tar: write extended headers for far-future mtime
      archive-tar: drop return value
      add an extra level of indirection to main()
      common-main: call git_extract_argv0_path()
      common-main: call sanitize_stdfds()
      common-main: call restore_sigpipe_to_default()
      common-main: call git_setup_gettext()
      tests: factor portable signal check out of t0005
      t0005: use test_match_signal as appropriate
      test_must_fail: use test_match_signal
      t/lib-git-daemon: use test_match_signal
      parse_options: allocate a new array when concatenating
      Makefile: drop extra dependencies for test helpers
      Makefile: use VCSSVN_LIB to refer to svn library
      config: fix bogus fd check when setting up default config
      branch: use non-gentle write_file for branch description
      write_file: drop "gently" form
      write_file: use xopen
      write_file: add pointer+len variant
      write_file: add format attribute
      use write_file_buf where applicable
      branch: use write_file_buf instead of write_file
      walker: let walker_say take arbitrary formats
      avoid using sha1_to_hex output as printf format
      push: anonymize URL in status output
      t0006: skip "far in the future" test when unsigned long is not long enough
      check_everything_connected: always pass --quiet to rev-list
      rev-list: add optional progress reporting
      check_everything_connected: convert to argv_array
      check_everything_connected: use a struct with named options
      check_connected: relay errors to alternate descriptor
      check_connected: add progress flag
      clone: use a real progress meter for connectivity check
      index-pack: add flag for showing delta-resolution progress
      receive-pack: turn on index-pack resolving progress
      receive-pack: relay connectivity errors to sideband
      receive-pack: turn on connectivity progress
      receive-pack: send keepalives during quiet periods
      t5541: fix url scrubbing test when GPG is not set
      diff: do not reuse worktree files that need "clean" conversion
      contrib/git-jump: fix greedy regex when matching hunks
      contrib/git-jump: add whitespace-checking mode
      contrib/git-jump: fix typo in README
      doc/rev-list-options: clarify "commit@{Nth}" for "-g" option
      doc/rev-list-options: explain "-g" output formats
      doc/pretty-formats: describe index/time formats for %gd
      doc/pretty-formats: explain shortening of %gd
      t4205: drop top-level &&-chaining
      t4205: indent here documents
      date: document and test "raw-local" mode
      date: add "unix" format
      t/perf: add tests for many-pack scenarios
      sha1_file: drop free_pack_by_name
      add generic most-recently-used list
      find_pack_entry: replace last_found_pack with MRU cache
      pack-objects: break out of want_object loop early
      pack-objects: compute local/ignore_pack_keep early
      am: reset cached ident date for each patch
      trace: handle NULL argument in trace_disable()
      trace: stop using write_or_whine_pipe()
      trace: use warning() for printing trace errors
      trace: cosmetic fixes for error messages
      trace: correct variable name in write() error message
      trace: disable key after write error
      write_or_die: drop write_or_whine_pipe()
      trace: do not fall back to stderr

Joey Hess (1):
      clarify %f documentation

Johannes Schindelin (58):
      mingw: let the build succeed with DEVELOPER=1
      perf: accommodate for MacOSX
      pretty: make the skip_blank_lines() function public
      commit.c: make find_commit_subject() more robust
      t2300: "git --exec-path" is not usable in $PATH on Windows as-is
      log: prepare log/log-tree to reuse the diffopt.close_file attribute
      log-tree: respect diffopt's configured output file stream
      line-log: respect diffopt's configured output file stream
      graph: respect the diffopt.file setting
      shortlog: support outputting to streams other than stdout
      format-patch: explicitly switch off color when writing to files
      format-patch: avoid freopen()
      format-patch: use stdout directly
      shortlog: respect the --output=<file> setting
      t4211: ensure that log respects --output=<file>
      color.h: remove obsolete comment about limitations on Windows
      diff: do not color output when --color=auto and --output=<file> is given
      t3404: fix a grammo (commands are ran -> commands are run)
      commit -C: skip blank lines at the beginning of the message
      sequencer: use skip_blank_lines() to find the commit subject
      reset --hard: skip blank lines when reporting the commit subject
      commit -S: avoid invalid pointer with empty message
      mingw: declare main()'s argv as const
      t3404: add a test for the --gpg-sign option
      rebase -i: demonstrate a bug with --autosquash
      rebase -i: we allow extra spaces after fixup!/squash!
      am: counteract gender bias
      diff: demonstrate a bug with --patience and --ignore-space-at-eol
      diff: fix a double off-by-one with --ignore-space-at-eol
      t/test-lib.sh: fix running tests with --valgrind
      mingw: fix the shortlog --output=<file> test
      mingw: fix regression in t1308-config-set
      fsck: refactor how to describe objects
      fsck_walk(): optionally name objects on the go
      fsck: give the error function a chance to see the fsck_options
      fsck: optionally show more helpful info for broken links
      t5520: verify that `pull --rebase` shows the helpful advice when failing
      die("bug"): report bugs consistently
      die(_("BUG")): avoid translating bug messages
      merge-recursive: clarify code in was_tracked()
      prepare the builtins for a libified merge_recursive()
      merge_recursive: abort properly upon errors
      merge-recursive: avoid returning a wholesale struct
      merge-recursive: allow write_tree_from_memory() to error out
      merge-recursive: handle return values indicating errors
      merge-recursive: switch to returning errors instead of dying
      am -3: use merge_recursive() directly again
      merge-recursive: flush output buffer before printing error messages
      merge-recursive: write the commit title in one go
      merge-recursive: offer an option to retain the output in 'obuf'
      merge_trees(): ensure that the callers release output buffer
      merge-recursive: flush output buffer even when erroring out
      import-tars: support hard links
      t5533: make it pass on case-sensitive filesystems
      nedmalloc: fix misleading indentation
      git mv: do not keep slash in `git mv dir non-existing-dir/`
      t/Makefile: ensure that paths are valid on platforms we care
      rev-parse: respect core.hooksPath in --git-path

Johannes Sixt (7):
      Windows: add missing definition of ENOTSOCK
      git-submodule: forward exit code of git-submodule--helper more faithfully
      submodule-helper: fix indexing in clone retry error reporting path
      rebase-interactive: trim leading whitespace from progress count
      t4130: work around Windows limitation
      config.c: avoid duplicated global static variables
      commit-slab.h: avoid duplicated global static variables

John Keeping (5):
      difftool: fix argument handling in subdirs
      Documentation/git-push: fix placeholder formatting
      push: add shorthand for --force-with-lease branch creation
      push: allow pushing new branches with --force-with-lease
      difftool: always honor fatal error exit codes

Jonathan Nieder (1):
      doc: git-htmldocs.googlecode.com is no more

Jonathan Tan (1):
      fetch-pack: grow stateless RPC windows exponentially

Jordan DE GEA (1):
      worktree: allow "-" short-hand for @{-1} in add command

Josef Kufner (1):
      pretty: pass graph width to pretty formatting for use in '%>|(N)'

Josh Triplett (1):
      format-patch: format.from gives the default for --from

Junio C Hamano (40):
      send-email: detect and offer to skip backup files
      pathspec: rename free_pathspec() to clear_pathspec()
      t1308: do not get fooled by symbolic links to the source tree
      builtin/apply: remove misleading comment on lock_file field
      blame, line-log: do not loop around deref_tag()
      Start the post-2.9 cycle
      clone: do not let --depth imply --shallow-submodules
      Start preparing for 2.9.1
      Second batch of topics for 2.10
      More fixes for 2.9.1
      Third batch of topics for 2.10
      commit.c: remove print_commit_list()
      Fourth batch of topics for 2.10
      Git 2.9.1
      merge: avoid "safer crlf" during recording of merge results
      Fifth batch of topics for 2.10
      diff: document diff-filter exclusion
      Git 2.9.2
      archive-tar: huge offset and future timestamps would not work on 32-bit
      Sixth batch of topics for 2.10
      grep: further simplify setting the pattern type
      Seventh batch of topics for 2.10
      date: clarify --date=raw description
      Some fixes for 2.9.3
      t9100: portability fix
      Eighth batch of topics for 2.10
      hashmap: clarify that hashmap_entry can safely be discarded
      Ninth batch of topics for 2.10
      Tenth batch for 2.10
      Hopefully final batch for 2.9.3
      Eleventh batch for 2.10
      Yet another batch for 2.9.3
      Twelfth batch for 2.10
      Git 2.9.3
      Final batch before 2.10-rc0
      Git 2.10-rc0
      Relnotes: decribe the updates to the "text=auto" attribute
      relnotes: redo the description of text=auto fix
      RelNotes: final batch of topics before -rc1
      Git 2.10-rc1

Keith McGuigan (1):
      builtin/fetch.c: don't free remote->name after fetch

Kevin Willford (4):
      patch-ids: stop using a hand-rolled hashmap implementation
      patch-ids: replace the seen indicator with a commit pointer
      patch-ids: add flag to create the diff patch id using header only data
      rebase: avoid computing unnecessary patch IDs

LE Manh Cuong (1):
      sh-setup: enclose setting of ${VAR=default} in double-quotes

Lars Schneider (2):
      git-p4: place temporary refs used for branch import under refs/git-p4-tmp
      travis-ci: enable web server tests t55xx on Linux

Lars Vogel (1):
      Use "working tree" instead of "working directory" for git status

Linus Torvalds (1):
      gpg-interface: prefer "long" key format output when verifying pgp signatures

Lukas Fleischer (4):
      receive-pack: send auto-gc output over sideband 2
      sideband.c: make send_sideband() return void
      upload-pack.c: make send_client_data() return void
      sideband.c: refactor recv_sideband()

Matthieu Moy (9):
      Documentation/git-mv.txt: fix whitespace indentation
      doc: typeset short command-line options as literal
      doc: typeset long command-line options as literal
      doc: typeset '--' as literal
      doc: typeset long options with argument as literal
      CodingGuidelines: formatting HEAD in documentation
      doc: typeset HEAD and variants as literal
      status: suggest 'git merge --abort' when appropriate
      git-multimail: update to release 1.4.0

Mehul Jain (3):
      t4202: refactor test
      log: add "--no-show-signature" command line option
      log: add log.showSignature configuration variable

Michael Haggerty (50):
      t1404: demonstrate a bug resolving references
      commit_ref(): if there is an empty dir in the way, delete it
      read_raw_ref(): don't get confused by an empty directory
      safe_create_leading_directories(): improve docstring
      remove_dir_recursively(): add docstring
      refname_is_safe(): use skip_prefix()
      refname_is_safe(): don't allow the empty string
      refname_is_safe(): insist that the refname already be normalized
      commit_ref_update(): write error message to *err, not stderr
      rename_ref(): remove unneeded local variable
      ref_transaction_commit(): remove local variables n and updates
      read_raw_ref(): rename flags argument to type
      read_raw_ref(): clear *type at start of function
      read_raw_ref(): rename symref argument to referent
      read_raw_ref(): improve docstring
      read_raw_ref(): move docstring to header file
      lock_ref_sha1_basic(): remove unneeded local variable
      refs: make error messages more consistent
      ref_transaction_create(): disallow recursive pruning
      ref_transaction_commit(): correctly report close_ref() failure
      delete_branches(): use resolve_refdup()
      verify_refname_available(): adjust constness in declaration
      add_update(): initialize the whole ref_update
      lock_ref_for_update(): new function
      unlock_ref(): move definition higher in the file
      ref_transaction_update(): check refname_is_safe() at a minimum
      refs: resolve symbolic refs first
      lock_ref_for_update(): don't re-read non-symbolic references
      lock_ref_for_update(): don't resolve symrefs
      commit_ref_update(): remove the flags parameter
      lock_ref_sha1_basic(): only handle REF_NODEREF mode
      refs: remove unnecessary "extern" keywords
      do_for_each_ref(): move docstring to the header file
      refs: use name "prefix" consistently
      delete_refs(): add a flags argument
      remote rm: handle symbolic refs correctly
      get_ref_cache(): only create an instance if there is a submodule
      entry_resolves_to_object(): rename function from ref_resolves_to_object()
      ref_resolves_to_object(): new function
      refs: introduce an iterator interface
      do_for_each_ref(): reimplement using reference iteration
      for_each_reflog(): don't abort for bad references
      dir_iterator: new API for iterating over a directory tree
      for_each_reflog(): reimplement using iterators
      t1404: rename file to t1404-update-ref-errors.sh
      t1404: remove "prefix" argument to test_update_rejected
      t1404: document function test_update_rejected
      t1404: add more tests of update-ref error handling
      lock_ref_for_update(): make error handling more uniform
      lock_ref_for_update(): avoid a symref resolution

Michael J Gruber (7):
      cherry-pick: allow to pick to unborn branches
      Documentation/technical: describe signature formats
      Documentation/technical: signed tag format
      Documentation/technical: signed commit format
      Documentation/technical: signed merge tag format
      gpg-interface: check gpg signature creation status
      t/t91*: do not say how to avoid the tests

Michael Stahl (1):
      document git-repack interaction of pack.threads and pack.windowMemory

Mike Hommey (2):
      blame: allow to blame paths freshly added to the index
      t/t8003-blame-corner-cases.sh: Use here documents

Nguyễn Thái Ngọc Duy (47):
      completion: support git-worktree
      worktree.c: rewrite mark_current_worktree() to avoid strbuf
      git-worktree.txt: keep subcommand listing in alphabetical order
      worktree.c: use is_dot_or_dotdot()
      worktree: avoid 0{40}, too many zeroes, hard to read
      worktree: simplify prefixing paths
      worktree.c: add find_worktree()
      worktree.c: add is_main_worktree()
      lib-httpd.sh: print error.log on error
      worktree.c: add is_worktree_locked()
      pretty.c: support <direction>|(<negative number>) forms
      new-command.txt: correct the command description file
      grep: break down an "if" stmt in preparation for next changes
      test-regex: isolate the bug test code
      test-regex: expose full regcomp() to the command line
      grep/icase: avoid kwsset on literal non-ascii strings
      git-fetch.txt: document fetch output
      fetch: refactor ref update status formatting code
      fetch: change flag code for displaying tag update and deleted ref
      grep/icase: avoid kwsset when -F is specified
      grep: rewrite an if/else condition to avoid duplicate expression
      grep/pcre: prepare locale-dependent tables for icase matching
      gettext: add is_utf8_locale()
      grep/pcre: support utf-8
      diffcore-pickaxe: Add regcomp_or_die()
      diffcore-pickaxe: support case insensitive match on non-ascii
      grep.c: reuse "icase" variable
      fetch: align all "remote -> local" output
      fetch: reduce duplicate in ref update status lines with placeholder
      connect: read $GIT_SSH_COMMAND from config file
      worktree: add "lock" command
      worktree: add "unlock" command
      worktree.c: find_worktree() search by path suffix
      pack-objects: pass length to check_pack_crc() without truncation
      log: decorate HEAD -> branch with the same color for arrow and HEAD
      sha1_file.c: use type off_t* for object_info->disk_sizep
      index-pack: correct "len" type in unpack_data()
      index-pack: report correct bad object offsets even if they are large
      index-pack: correct "offset" type in unpack_entry_data()
      pack-objects: do not truncate result in-pack object size on 32-bit systems
      fsck: use streaming interface for large blobs in pack
      test-lib.sh: introduce and use $EMPTY_TREE
      test-lib.sh: introduce and use $EMPTY_BLOB
      cache-tree.c: fix i-t-a entry skipping directory updates sometimes
      cache-tree: do not generate empty trees as a result of all i-t-a subentries
      config.mak.uname: correct perl path on FreeBSD
      t7063: work around FreeBSD's lazy mtime update feature

Nicolas Pitre (1):
      sideband.c: small optimization of strbuf usage

Orgad Shaneh (1):
      commit: describe that --no-verify skips the commit-msg hook in the help text

Parker Moore (2):
      contrib/persistent-https: update ldflags syntax for Go 1.7+
      contrib/persistent-https: use Git version for build label

Patrick Steinhardt (1):
      rebase -i: restore autostash on abort

Peter Colberg (2):
      refs.h: fix misspelt "occurred" in a comment
      config.c: fix misspelt "occurred" in an error message

Pranit Bauva (2):
      builtin/commit.c: memoize git-path for COMMIT_EDITMSG
      strbuf: describe the return value of strbuf_read_file

Ramsay Jones (2):
      regex: fix a SIZE_MAX macro redefinition warning
      write_or_die: remove the unused write_or_whine() function

René Scharfe (33):
      t4051: rewrite, add more tests
      xdiff: factor out match_func_rec()
      xdiff: handle appended chunks better with -W
      xdiff: ignore empty lines before added functions with -W
      xdiff: -W: don't include common trailing empty lines in context
      xdiff: don't trim common tail with -W
      t7810: add test for grep -W and trailing empty context lines
      grep: -W: don't extend context to trailing empty lines
      xdiff: fix merging of appended hunk with -W
      .gitattributes: set file type for C files
      notes-merge: use O_EXCL to avoid overwriting existing files
      am: ignore return value of write_file()
      rm: reuse strbuf for all remove_dir_recursively() calls
      worktree: use strbuf_add_absolute_path() directly
      use strbuf_addbuf() for appending a strbuf to another
      submodule-config: use explicit empty string instead of strbuf in config_from()
      strbuf: avoid calling strbuf_grow() twice in strbuf_addbuf()
      use strbuf_addstr() for adding constant strings to a strbuf
      pass constants as first argument to st_mult()
      use strbuf_addstr() instead of strbuf_addf() with "%s"
      use CHILD_PROCESS_INIT to initialize automatic variables
      merge-recursive: use STRING_LIST_INIT_NODUP
      merge: use string_list_split() in add_strategies()
      nedmalloc: work around overzealous GCC 6 warning
      archive-tar: make write_extended_header() void
      use strbuf_add_unique_abbrev() for adding short hashes
      correct FLEXPTR_* example in comment
      mailinfo: recycle strbuf in check_header()
      commit: use xstrdup() in get_merge_parent()
      commit: factor out set_merge_remote_desc()
      merge-recursive: fix verbose output for multiple base trees
      commit: use FLEX_ARRAY in struct merge_remote_desc
      receive-pack: use FLEX_ALLOC_MEM in queue_command()

Ronald Wampler (1):
      Makefile: add NEEDS_LIBRT to optionally link with librt

SZEDER Gábor (2):
      reflog: continue walking the reflog past root commits
      t1410: remove superfluous 'git reflog' from the 'walk past root' test

Stefan Beller (23):
      submodule update: make use of the existing fetch_in_submodule function
      submodule-config: keep shallow recommendation around
      submodule update: learn `--[no-]recommend-shallow` option
      submodule--helper: initial clone learns retry logic
      submodule update: continue when a clone fails
      t5614: don't use subshells
      push options: {pre,post}-receive hook learns about push options
      receive-pack: implement advertising and receiving push options
      push: accept push options
      add a test for push options
      Documentation: pack-protocol correct NAK response
      submodule deinit: remove outdated comment
      t7406: future proof tests with hard coded depth
      submodule update: respect depth in subsequent fetches
      submodule update: narrow scope of local variable
      submodule--helper: fix usage string for relative-path
      submodule-config: keep configured branch around
      gitmodules: document shallow recommendation
      submodule--helper: add remote-branch helper
      submodule update: allow '.' for branch value
      submodule--helper: use parallel processor correctly
      t7406: fix breakage on OSX
      checkout: do not mention detach advice for explicit --detach option

Thomas Braun (3):
      completion: factor out untracked file modes into a variable
      completion: add __git_get_option_value helper
      completion: add git status

Tom Russello (4):
      doc: clearer rule about formatting literals
      doc: change environment variables format
      doc: more consistency in environment variables format
      doc: change configuration variables format

Torsten Bögershausen (2):
      convert: unify the "auto" handling of CRLF
      convert: Correct NNO tests and missing `LF will be replaced by CRLF`

Vasco Almeida (47):
      i18n: builtin/remote.c: fix mark for translation
      i18n: advice: mark string about detached head for translation
      i18n: advice: internationalize message for conflicts
      i18n: transport: mark strings for translation
      i18n: sequencer: mark entire sentences for translation
      i18n: rebase-interactive: mark here-doc strings for translation
      i18n: sequencer: mark string for translation
      i18n: rebase-interactive: mark comments of squash for translation
      i18n: merge-octopus: mark messages for translation
      i18n: setup: mark strings for translation
      merge-octopus: use die shell function from git-sh-setup.sh
      tests: use test_i18n* functions to suppress false positives
      i18n: rebase: fix marked string to use eval_gettext variant
      tests: unpack-trees: update to use test_i18n* functions
      i18n: rebase: mark placeholder for translation
      t9003: become resilient to GETTEXT_POISON
      i18n: bisect: simplify error message for i18n
      t4153: fix negated test_i18ngrep call
      t6030: update to use test_i18ncmp
      t5523: use test_i18ngrep for negation
      i18n: git-sh-setup.sh: mark strings for translation
      i18n: bisect: mark strings for translation
      i18n: rebase-interactive: mark strings for translation
      i18n: transport-helper.c: change N_() call to _()
      i18n: notes: mark strings for translation
      i18n: notes: mark options for translation
      i18n: merge: mark messages for translation
      i18n: merge: change command option help to lowercase
      i18n: sequencer: add period to error message
      i18n: standardise messages
      i18n: remote: mark URL fallback text for translation
      i18n: remote: allow translations to reorder message
      i18n: init-db: join message pieces
      i18n: submodule: join strings marked for translation
      i18n: submodule: escape shell variables inside eval_gettext
      i18n: unmark die messages for translation
      i18n: branch: mark comment when editing branch description for translation
      t5541: become resilient to GETTEXT_POISON
      t5510: skip tests under GETTEXT_POISON build
      i18n: notes: mark comment for translation
      i18n: config: unfold error messages marked for translation
      i18n: setup: mark error messages for translation
      i18n: archive: mark errors for translation
      i18n: git-stash: mark messages for translation
      t3404: become resilient to GETTEXT_POISON
      t5520: become resilient to GETTEXT_POISON
      t7411: become resilient to GETTEXT_POISON

Ville Skyttä (3):
      git-prompt.sh: Don't error on null ${ZSH,BASH}_VERSION, $short_sha
      completion: complete --delete, --move, and --remotes for git branch
      Spelling fixes

William Duclot (1):
      userdiff: add built-in pattern for CSS

brian m. carlson (11):
      hex: add oid_to_hex_r()
      contrib/coccinelle: add basic Coccinelle transforms
      coccinelle: convert hashcpy() with null_sha1 to hashclr()
      coccinelle: apply object_id Coccinelle transformations
      diff: convert struct diff_filespec to struct object_id
      diff: rename struct diff_filespec's sha1_valid member
      merge-recursive: convert struct stage_data to use object_id
      merge-recursive: convert struct merge_file_info to object_id
      merge-recursive: convert leaf functions to use struct object_id
      merge-recursive: convert merge_recursive_generic() to object_id
      diff: convert prep_temp_blob() to struct object_id


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.10.0-rc0
@ 2016-08-14 22:47  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2016-08-14 22:47 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

An early preview release Git v2.10.0-rc0 is now available for
testing at the usual places.  It is comprised of 589 non-merge
commits since v2.9.0, contributed by 67 people, 20 of which are
new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.10.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.9.0 are as follows.
Welcome to the Git development community!

  Alexander Hirsch, Andreas Brauchli, Andrew Oakley, Antoine
  Queru, Christopher Layne, Dave Nicolson, Ed Maste, Heiko Becker,
  Ingo Brückl, Jonathan Tan, Jordan DE GEA, Josef Kufner, Keith
  McGuigan, Kevin Willford, LE Manh Cuong, Michael Stahl, Parker
  Moore, Peter Colberg, Tom Russello, and William Duclot.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alex Henrie, Alfred Perlstein, Armin Kunaschik, brian m. carlson,
  Charles Bailey, Chris Packham, Christian Couder, David A. Greene,
  David Aguilar, David Kastrup, David Turner, Edward Thomson, Elia
  Pinto, Eric Sunshine, Eric Wong, Heiko Voigt, Jacob Keller,
  Jeff King, Joey Hess, Johannes Schindelin, Johannes Sixt,
  John Keeping, Jonathan Nieder, Josh Triplett, Junio C Hamano,
  Lars Schneider, Lars Vogel, Lukas Fleischer, Matthieu Moy,
  Mehul Jain, Michael Haggerty, Michael J Gruber, Mike Hommey,
  Nguyễn Thái Ngọc Duy, Nicolas Pitre, Orgad Shaneh, Patrick
  Steinhardt, Pranit Bauva, Ramsay Jones, René Scharfe, Ronald
  Wampler, Stefan Beller, SZEDER Gábor, Thomas Braun, Torsten
  Bögershausen, Vasco Almeida, and Ville Skyttä.

----------------------------------------------------------------

Git 2.10 Release Notes (draft)
==============================

Backward compatibility notes
----------------------------

Updates since v2.9
------------------

UI, Workflows & Features

 * "git pull --rebase --verify-signature" learned to warn the user
   that "--verify-signature" is a no-op when rebasing.

 * An upstream project can make a recommendation to shallowly clone
   some submodules in the .gitmodules file it ships.

 * "git worktree add" learned that '-' can be used as a short-hand for
   "@{-1}", the previous branch.

 * Update the funcname definition to support css files.

 * The completion script (in contrib/) learned to complete "git
   status" options.

 * Messages that are generated by auto gc during "git push" on the
   receiving end are now passed back to the sending end in such a way
   that they are shown with "remote: " prefix to avoid confusing the
   users.

 * "git add -i/-p" learned to honor diff.compactionHeuristic
   experimental knob, so that the user can work on the same hunk split
   as "git diff" output.

 * "upload-pack" allows a custom "git pack-objects" replacement when
   responding to "fetch/clone" via the uploadpack.packObjectsHook.
   (merge b738396 jk/upload-pack-hook later to maint).

 * Teach format-patch and mailsplit (hence "am") how a line that
   happens to begin with "From " in the e-mail message is quoted with
   ">", so that these lines can be restored to their original shape.
   (merge d9925d1 ew/mboxrd-format-am later to maint).

 * "git repack" learned the "--keep-unreachable" option, which sends
   loose unreachable objects to a pack instead of leaving them loose.
   This helps heuristics based on the number of loose objects
   (e.g. "gc --auto").
   (merge e26a8c4 jk/repack-keep-unreachable later to maint).

 * "log --graph --format=" learned that "%>|(N)" specifies the width
   relative to the terminal's left edge, not relative to the area to
   draw text that is to the right of the ancestry-graph section.  It
   also now accepts negative N that means the column limit is relative
   to the right border.

 * A careless invocation of "git send-email directory/" after editing
   0001-change.patch with an editor often ends up sending both
   0001-change.patch and its backup file, 0001-change.patch~, causing
   embarrassment and a minor confusion.  Detect such an input and
   offer to skip the backup files when sending the patches out.
   (merge 531220b jc/send-email-skip-backup later to maint).

 * "git submodule update" that drives many "git clone" could
   eventually hit flaky servers/network conditions on one of the
   submodules; the command learned to retry the attempt.

 * The output coloring scheme learned two new attributes, italic and
   strike, in addition to existing bold, reverse, etc.

 * "git log" learns log.showSignature configuration variable, and a
   command line option "--no-show-signature" to countermand it.
   (merge fce04c3 mj/log-show-signature-conf later to maint).

 * More markings of messages for i18n, with updates to various tests
   to pass GETTEXT_POISON tests.

 * "git archive" learned to handle files that are larger than 8GB and
   commits far in the future than expressible by the traditional US-TAR
   format.
   (merge 5caeeb8 jk/big-and-future-archive-tar later to maint).

 * A new configuration variable core.sshCommand has been added to
   specify what value for GIT_SSH_COMMAND to use per repository.

 * "git worktree prune" protected worktrees that are marked as
   "locked" by creating a file in a known location.  "git worktree"
   command learned a dedicated command pair to create and remove such
   a file, so that the users do not have to do this with editor.

 * A handful of "git svn" updates.

 * "git push" learned to accept and pass extra options to the
   receiving end so that hooks can read and react to them.

 * "git status" learned to suggest "merge --abort" during a conflicted
   merge, just like it already suggests "rebase --abort" during a
   conflicted rebase.

 * "git jump" script (in contrib/) has been updated a bit.
   (merge a91e692 jk/git-jump later to maint).

 * "git push" and "git clone" learned to give better progress meters
   to the end user who is waiting on the terminal.

 * An entry "git log --decorate" for the tip of the current branch is
   shown as "HEAD -> name" (where "name" is the name of the branch);
   the arrow is now painted in the same color as "HEAD", not in the
   color for commits.

 * "git format-patch" learned format.from configuration variable to
   specify the default settings for its "--from" option.

 * "git am -3" calls "git merge-recursive" when it needs to fall back
   to a three-way merge; this call has been turned into an internal
   subroutine call instead of spawning a separate subprocess.

 * The command line completion scripts (in contrib/) now knows about
   "git branch --delete/--move [--remote]".
   (merge 2703c22 vs/completion-branch-fully-spelled-d-m-r later to maint).


Performance, Internal Implementation, Development Support etc.

 * "git fast-import" learned the same performance trick to avoid
   creating too small a packfile as "git fetch" and "git push" have,
   using *.unpackLimit configuration.

 * When "git daemon" is run without --[init-]timeout specified, a
   connection from a client that silently goes offline can hang around
   for a long time, wasting resources.  The socket-level KEEPALIVE has
   been enabled to allow the OS to notice such failed connections.

 * "git upload-pack" command has been updated to use the parse-options
   API.

 * The "git apply" standalone program is being libified; the first
   step to move many state variables into a structure that can be
   explicitly (re)initialized to make the machinery callable more
   than once has been merged.

 * HTTP transport gained an option to produce more detailed debugging
   trace.
   (merge 73e57aa ep/http-curl-trace later to maint).

 * Instead of taking advantage of the fact that a struct string_list
   that is allocated with all NULs happens to be the INIT_NODUP kind,
   the users of string_list structures are taught to initialize them
   explicitly as such, to document their behaviour better.
   (merge 2721ce2 jk/string-list-static-init later to maint).

 * HTTPd tests learned to show the server error log to help diagnosing
   a failing tests.
   (merge 44f243d nd/test-lib-httpd-show-error-log-in-verbose later to maint).

 * The ownership rule for the piece of memory that hold references to
   be fetched in "git fetch" was screwy, which has been cleaned up.

 * "git bisect" makes an internal call to "git diff-tree" when
   bisection finds the culprit, but this call did not initialize the
   data structure to pass to the diff-tree API correctly.

 * Further preparatory clean-up for "worktree" feature continues.
   (merge 0409e0b nd/worktree-cleanup-post-head-protection later to maint).

 * Formats of the various data (and how to validate them) where we use
   GPG signature have been documented.

 * A new run-command API function pipe_command() is introduced to
   sanely feed data to the standard input while capturing data from
   the standard output and the standard error of an external process,
   which is cumbersome to hand-roll correctly without deadlocking.

   The codepath to sign data in a prepared buffer with GPG has been
   updated to use this API to read from the status-fd to check for
   errors (instead of relying on GPG's exit status).
   (merge efee955 jk/gpg-interface-cleanup later to maint).

 * Allow t/perf framework to use the features from the most recent
   version of Git even when testing an older installed version.

 * The commands in the "log/diff" family have had an FILE* pointer in the
   data structure they pass around for a long time, but some codepaths
   used to always write to the standard output.  As a preparatory step
   to make "git format-patch" available to the internal callers, these
   codepaths have been updated to consistently write into that FILE*
   instead.

 * Conversion from unsigned char sha1[20] to struct object_id
   continues.

 * Improve the look of the way "git fetch" reports what happened to
   each ref that was fetched.

 * The .c/.h sources are marked as such in our .gitattributes file so
   that "git diff -W" and friends would work better.

 * Code clean-up to avoid using a variable string that compilers may
   feel untrustable as printf-style format given to write_file()
   helper function.

 * "git p4" used a location outside $GIT_DIR/refs/ to place its
   temporary branches, which has been moved to refs/git-p4-tmp/.

 * Existing autoconf generated test for the need to link with pthread
   library did not check all the functions from pthread libraries;
   recent FreeBSD has some functions in libc but not others, and we
   mistakenly thought linking with libc is enough when it is not.

 * When "git fsck" reports a broken link (e.g. a tree object contains
   a blob that does not exist), both containing object and the object
   that is referred to were reported with their 40-hex object names.
   The command learned the "--name-objects" option to show the path to
   the containing object from existing refs (e.g. "HEAD~24^2:file.txt").

 * Allow http daemon tests in Travis CI tests.

 * Makefile assumed that -lrt is always available on platforms that
   want to use clock_gettime() and CLOCK_MONOTONIC, which is not a
   case for recent Mac OS X.  The necessary symbols are often found in
   libc on many modern systems and having -lrt on the command line, as
   long as the library exists, had no effect, but when the platform
   removes librt.a that is a different matter--having -lrt will break
   the linkage.

   This change could be seen as a regression for those who do need to
   specify -lrt, as they now specifically ask for NEEDS_LIBRT when
   building. Hopefully they are in the minority these days.

 * Further preparatory work on the refs API before the pluggable
   backend series can land.

 * Error handling in the codepaths that updates refs has been
   improved.

 * The API to iterate over all the refs (i.e. for_each_ref(), etc.)
   has been revamped.

 * A few tests that specifically target "git rebase -i" have been
   added.

 * Dumb http transport on the client side has been optimized.
   (merge ecba195 ew/http-walker later to maint).

 * Users of the parse_options_concat() API function need to allocate
   extra slots in advance and fill them with OPT_END() when they want
   to decide the set of supported options dynamically, which makes the
   code error-prone and hard to read.  This has been corrected by tweaking
   the API to allocate and return a new copy of "struct option" array.

 * "git fetch" exchanges batched have/ack messages between the sender
   and the receiver, initially doubling every time and then falling
   back to enlarge the window size linearly.  The "smart http"
   transport, being an half-duplex protocol, outgrows the preset limit
   too quickly and becomes inefficient when interacting with a large
   repository.  The internal mechanism learned to grow the window size
   more aggressively when working with the "smart http" transport.

 * Tests for "git svn" have been taught to reuse the lib-httpd test
   infrastructure when testing the subversion integration that
   interacts with subversion repositories served over the http://
   protocol.
   (merge a8a5d25 ew/git-svn-http-tests later to maint).

 * "git pack-objects" has a few options that tell it not to pack
   objects found in certain packfiles, which require it to scan .idx
   files of all available packs.  The codepaths involved in these
   operations have been optimized for a common case of not having any
   non-local pack and/or any .kept pack.

 * The t3700 test about "add --chmod=-x" have been made a bit more
   robust and generally cleaned up.
   (merge 766cdc4 ib/t3700-add-chmod-x-updates later to maint).

 * The build procedure learned PAGER_ENV knob that lists what default
   environment variable settings to export for popular pagers.  This
   mechanism is used to tweak the default settings to MORE on FreeBSD.
   (merge 995bc22 ew/build-time-pager-tweaks later to maint).

 * The http-backend (the server-side component of smart-http
   transport) used to trickle the HTTP header one at a time.  Now
   these write(2)s are batched.
   (merge b36045c ew/http-backend-batch-headers later to maint).

 * When "git rebase" tries to compare set of changes on the updated
   upstream and our own branch, it computes patch-id for all of these
   changes and attempts to find matches. This has been optimized by
   lazily computing the full patch-id (which is expensive) to be
   compared only for changes that touch the same set of paths.
   (merge b3dfeeb kw/patch-ids-optim later to maint).


Also contains various documentation updates and code clean-ups.


Fixes since v2.9
----------------

Unless otherwise noted, all the fixes since v2.8 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * The commands in `git log` family take %C(auto) in a custom format
   string.  This unconditionally turned the color on, ignoring
   --no-color or with --color=auto when the output is not connected to
   a tty; this was corrected to make the format truly behave as
   "auto".

 * "git rev-list --count" whose walk-length is limited with "-n"
   option did not work well with the counting optimized to look at the
   bitmap index.

 * "git show -W" (extend hunks to cover the entire function, delimited
   by lines that match the "funcname" pattern) used to show the entire
   file when a change added an entire function at the end of the file,
   which has been fixed.

 * The documentation set has been updated so that literal commands,
   configuration variables and environment variables are consistently
   typeset in fixed-width font and bold in manpages.

 * "git svn propset" subcommand that was added in 2.3 days is
   documented now.

 * The documentation tries to consistently spell "GPG"; when
   referring to the specific program name, "gpg" is used.

 * "git reflog" stopped upon seeing an entry that denotes a branch
   creation event (aka "unborn"), which made it appear as if the
   reflog was truncated.

 * The git-prompt scriptlet (in contrib/) was not friendly with those
   who uses "set -u", which has been fixed.

 * compat/regex code did not cleanly compile.

 * A codepath that used alloca(3) to place an unbounded amount of data
   on the stack has been updated to avoid doing so.

 * "git update-index --add --chmod=+x file" may be usable as an escape
   hatch, but not a friendly thing to force for people who do need to
   use it regularly.  "git add --chmod=+x file" can be used instead.

 * Build improvements for gnome-keyring (in contrib/)

 * "git status" used to say "working directory" when it meant "working
   tree".

 * Comments about misbehaving FreeBSD shells have been clarified with
   the version number (9.x and before are broken, newer ones are OK).

 * "git cherry-pick A" worked on an unborn branch, but "git
   cherry-pick A..B" didn't.

 * Fix an unintended regression in v2.9 that breaks "clone --depth"
   that recurses down to submodules by forcing the submodules to also
   be cloned shallowly, which many server instances that host upstream
   of the submodules are not prepared for.

 * Fix unnecessarily waste in the idiomatic use of ': ${VAR=default}'
   to set the default value, without enclosing it in double quotes.

 * Some platform-specific code had non-ANSI strict declarations of C
   functions that do not take any parameters, which has been
   corrected.

 * The internal code used to show local timezone offset is not
   prepared to handle timestamps beyond year 2100, and gave a
   bogus offset value to the caller.  Use a more benign looking
   +0000 instead and let "git log" going in such a case, instead
   of aborting.

 * One among four invocations of readlink(1) in our test suite has
   been rewritten so that the test can run on systems without the
   command (others are in valgrind test framework and t9802).

 * t/perf needs /usr/bin/time with GNU extension; the invocation of it
   is updated to "gtime" on Darwin.

 * A bug, which caused "git p4" while running under verbose mode to
   report paths that are omitted due to branch prefix incorrectly, has
   been fixed; the command said "Ignoring file outside of prefix" for
   paths that are _inside_.

 * The top level documentation "git help git" still pointed at the
   documentation set hosted at now-defunct google-code repository.
   Update it to point to https://git.github.io/htmldocs/git.html
   instead.

 * A helper function that takes the contents of a commit object and
   finds its subject line did not ignore leading blank lines, as is
   commonly done by other codepaths.  Make it ignore leading blank
   lines to match.

 * For a long time, we carried an in-code comment that said our
   colored output would work only when we use fprintf/fputs on
   Windows, which no longer is the case for the past few years.

 * "gc.autoPackLimit" when set to 1 should not trigger a repacking
   when there is only one pack, but the code counted poorly and did
   so.

 * Add a test to specify the desired behaviour that currently is not
   available in "git rebase -Xsubtree=...".

 * More mark-up updates to typeset strings that are expected to
   literally typed by the end user in fixed-width font.

 * "git commit --amend --allow-empty-message -S" for a commit without
   any message body could have misidentified where the header of the
   commit object ends.

 * "git rebase -i --autostash" did not restore the auto-stashed change
   when the operation was aborted.

 * Git does not know what the contents in the index should be for a
   path added with "git add -N" yet, so "git grep --cached" should not
   show hits (or show lack of hits, with -L) in such a path, but that
   logic does not apply to "git grep", i.e. searching in the working
   tree files.  But we did so by mistake, which has been corrected.

 * "git blame -M" missed a single line that was moved within the file.

 * Fix recently introduced codepaths that are involved in parallel
   submodule operations, which gave up on reading too early, and
   could have wasted CPU while attempting to write under a corner
   case condition.

 * "git grep -i" has been taught to fold case in non-ascii locales
   correctly.

 * A test that unconditionally used "mktemp" learned that the command
   is not necessarily available everywhere.

 * There are certain house-keeping tasks that need to be performed at
   the very beginning of any Git program, and programs that are not
   built-in commands had to do them exactly the same way as "git"
   potty does.  It was easy to make mistakes in one-off standalone
   programs (like test helpers).  A common "main()" function that
   calls cmd_main() of individual program has been introduced to
   make it harder to make mistakes.
   (merge de61ceb jk/common-main later to maint).

 * The test framework learned a new helper test_match_signal to
   check an exit code from getting killed by an expected signal.

 * General code clean-up around a helper function to write a
   single-liner to a file.
   (merge 7eb6e10 jk/write-file later to maint).

 * One part of "git am" had an oddball helper function that called
   stuff from outside "his" as opposed to calling what we have "ours",
   which was not gender-neutral and also inconsistent with the rest of
   the system where outside stuff is usuall called "theirs" in
   contrast to "ours".

 * "git blame file" allowed the lineage of lines in the uncommitted,
   unadded contents of "file" to be inspected, but it refused when
   "file" did not appear in the current commit.  When "file" was
   created by renaming an existing file (but the change has not been
   committed), this restriction was unnecessarily tight.

 * "git add -N dir/file && git write-tree" produced an incorrect tree
   when there are other paths in the same directory that sorts after
   "file".

 * "git fetch http://user:pass@host/repo..." scrubbed the userinfo
   part, but "git push" didn't.

 * "git merge" with renormalization did not work well with
   merge-recursive, due to "safer crlf" conversion kicking in when it
   shouldn't.
   (merge 1335d76 jc/renormalize-merge-kill-safer-crlf later to maint).

 * The use of strbuf in "git rm" to build filename to remove was a bit
   suboptimal, which has been fixed.

 * An age old bug that caused "git diff --ignore-space-at-eol"
   misbehave has been fixed.

 * "git notes merge" had a code to see if a path exists (and fails if
   it does) and then open the path for writing (when it doesn't).
   Replace it with open with O_EXCL.

 * "git pack-objects" and "git index-pack" mostly operate with off_t
   when talking about the offset of objects in a packfile, but there
   were a handful of places that used "unsigned long" to hold that
   value, leading to an unintended truncation.

 * Recent update to "git daemon" tries to enable the socket-level
   KEEPALIVE, but when it is spawned via inetd, the standard input
   file descriptor may not necessarily be connected to a socket.
   Suppress an ENOTSOCK error from setsockopt().

 * Recent FreeBSD stopped making perl available at /usr/bin/perl;
   switch the default the built-in path to /usr/local/bin/perl on not
   too ancient FreeBSD releases.

 * "git commit --help" said "--no-verify" is only about skipping the
   pre-commit hook, and failed to say that it also skipped the
   commit-msg hook.

 * "git merge" in Git v2.9 was taught to forbid merging an unrelated
   lines of history by default, but that is exactly the kind of thing
   the "--rejoin" mode of "git subtree" (in contrib/) wants to do.
   "git subtree" has been taught to use the "--allow-unrelated-histories"
   option to override the default.

 * The build procedure for "git persistent-https" helper (in contrib/)
   has been updated so that it can be built with more recent versions
   of Go.

 * There is an optimization used in "git diff $treeA $treeB" to borrow
   an already checked-out copy in the working tree when it is known to
   be the same as the blob being compared, expecting that open/mmap of
   such a file is faster than reading it from the object store, which
   involves inflating and applying delta.  This however kicked in even
   when the checked-out copy needs to go through the convert-to-git
   conversion (including the clean filter), which defeats the whole
   point of the optimization.  The optimization has been disabled when
   the conversion is necessary.

 * "git -c grep.patternType=extended log --basic-regexp" misbehaved
   because the internal API to access the grep machinery was not
   designed well.

 * Windows port was failing some tests in t4130, due to the lack of
   inum in the returned values by its lstat(2) emulation.

 * The reflog output format is documented better, and a new format
   --date=unix to report the seconds-since-epoch (without timezone)
   has been added.
   (merge 442f6fd jk/reflog-date later to maint).

 * "git difftool <paths>..." started in a subdirectory failed to
   interpret the paths relative to that directory, which has been
   fixed.

 * The characters in the label shown for tags/refs for commits in
   "gitweb" output are now properly escaped for proper HTML output.

 * FreeBSD can lie when asked mtime of a directory, which made the
   untracked cache code to fall back to a slow-path, which in turn
   caused tests in t7063 to fail because it wanted to verify the
   behaviour of the fast-path.

 * Squelch compiler warnings for netmalloc (in compat/) library.

 * A small memory leak in the command line parsing of "git blame"
   has been plugged.

 * The API documentation for hashmap was unclear if hashmap_entry
   can be safely discarded without any other consideration.  State
   that it is safe to do so.

 * Not-so-recent rewrite of "git am" that started making internal
   calls into the commit machinery had an unintended regression, in
   that no matter how many seconds it took to apply many patches, the
   resulting committer timestamp for the resulting commits were all
   the same.

 * "git push --force-with-lease" already had enough logic to allow
   ensuring that such a push results in creation of a ref (i.e. the
   receiving end did not have another push from sideways that would be
   discarded by our force-pushing), but didn't expose this possibility
   to the users.  It does so now.
   (merge 9eed4f3 jk/push-force-with-lease-creation later to maint).

 * The mechanism to limit the pack window memory size, when packing is
   done using multiple threads (which is the default), is per-thread,
   but this was not documented clearly.
   (merge 954176c ms/document-pack-window-memory-is-per-thread later to maint).

 * "import-tars" fast-import script (in contrib/) used to ignore a
   hardlink target and replaced it with an empty file, which has been
   corrected to record the same blob as the other file the hardlink is
   shared with.
   (merge 04e0869 js/import-tars-hardlinks later to maint).

 * "git mv dir non-existing-dir/" did not work in some environments
   the same way as existing mainstream platforms.  The code now moves
   "dir" to "non-existing-dir", without relying on rename("A", "B/")
   that strips the trailing slash of '/'.
   (merge 189d035 js/mv-dir-to-new-directory later to maint).

 * Other minor clean-ups and documentation updates
   (merge 02a8cfa rs/merge-add-strategies-simplification later to maint).
   (merge af4941d rs/merge-recursive-string-list-init later to maint).
   (merge 1eb47f1 rs/use-strbuf-add-unique-abbrev later to maint).

----------------------------------------------------------------

Changes since v2.9.0 are as follows:

Alex Henrie (1):
      unpack-trees: fix English grammar in do-this-before-that messages

Alexander Hirsch (1):
      pull: warn on --verify-signatures with --rebase

Alfred Perlstein (1):
      git-svn: document the 'git svn propset' command

Andreas Brauchli (1):
      gitweb: escape link body in format_ref_marker

Andrew Oakley (1):
      git-p4: correct hasBranchPrefix verbose output

Antoine Queru (1):
      upload-pack.c: use parse-options API

Armin Kunaschik (2):
      t7800: readlink may not be available
      t7610: test for mktemp before test execution

Charles Bailey (4):
      t7810: fix duplicated test title
      t7810-grep.sh: fix duplicated test name
      t7810-grep.sh: fix a whitespace inconsistency
      grep: fix grepping for "intent to add" files

Chris Packham (1):
      completion: add option '--recurse-submodules' to 'git clone'

Christian Couder (50):
      builtin/apply: make gitdiff_verify_name() return void
      builtin/apply: avoid parameter shadowing 'p_value' global
      builtin/apply: avoid parameter shadowing 'linenr' global
      builtin/apply: avoid local variable shadowing 'len' parameter
      builtin/apply: extract line_by_line_fuzzy_match() from match_fragment()
      builtin/apply: move 'options' variable into cmd_apply()
      builtin/apply: move 'read_stdin' global into cmd_apply()
      builtin/apply: introduce 'struct apply_state' to start libifying
      builtin/apply: move 'state' init into init_apply_state()
      builtin/apply: move 'unidiff_zero' global into 'struct apply_state'
      builtin/apply: move 'check' global into 'struct apply_state'
      builtin/apply: move 'check_index' global into 'struct apply_state'
      builtin/apply: move 'apply_in_reverse' global into 'struct apply_state'
      builtin/apply: move 'apply_with_reject' global into 'struct apply_state'
      builtin/apply: move 'apply_verbosely' global into 'struct apply_state'
      builtin/apply: move 'update_index' global into 'struct apply_state'
      builtin/apply: move 'allow_overlap' global into 'struct apply_state'
      builtin/apply: move 'cached' global into 'struct apply_state'
      builtin/apply: move 'diffstat' global into 'struct apply_state'
      builtin/apply: move 'numstat' global into 'struct apply_state'
      builtin/apply: move 'summary' global into 'struct apply_state'
      builtin/apply: move 'threeway' global into 'struct apply_state'
      builtin/apply: move 'no_add' global into 'struct apply_state'
      builtin/apply: move 'unsafe_paths' global into 'struct apply_state'
      builtin/apply: move 'line_termination' global into 'struct apply_state'
      builtin/apply: move 'fake_ancestor' global into 'struct apply_state'
      builtin/apply: move 'p_context' global into 'struct apply_state'
      builtin/apply: move 'apply' global into 'struct apply_state'
      builtin/apply: move 'patch_input_file' global into 'struct apply_state'
      builtin/apply: move 'limit_by_name' global into 'struct apply_state'
      builtin/apply: move 'has_include' global into 'struct apply_state'
      builtin/apply: move 'p_value' global into 'struct apply_state'
      builtin/apply: move 'p_value_known' global into 'struct apply_state'
      builtin/apply: move 'root' global into 'struct apply_state'
      builtin/apply: move 'whitespace_error' global into 'struct apply_state'
      builtin/apply: move 'whitespace_option' into 'struct apply_state'
      builtin/apply: remove whitespace_option arg from set_default_whitespace_mode()
      builtin/apply: move 'squelch_whitespace_errors' into 'struct apply_state'
      builtin/apply: move 'applied_after_fixing_ws' into 'struct apply_state'
      builtin/apply: move 'ws_error_action' into 'struct apply_state'
      builtin/apply: move 'ws_ignore_action' into 'struct apply_state'
      builtin/apply: move 'max_change' and 'max_len' into 'struct apply_state'
      builtin/apply: move 'state_linenr' global into 'struct apply_state'
      builtin/apply: move 'fn_table' global into 'struct apply_state'
      builtin/apply: move 'symlink_changes' global into 'struct apply_state'
      builtin/apply: move 'state' check into check_apply_state()
      builtin/apply: move applying patches into apply_all_patches()
      builtin/apply: add 'lock_file' pointer into 'struct apply_state'
      builtin/apply: move 'newfd' global into 'struct apply_state'
      .mailmap: use Christian Couder's Tuxfamily address

Christopher Layne (1):
      git-svn: clone: Fail on missing url argument

Dave Nicolson (1):
      Documentation: GPG capitalization

David A. Greene (1):
      contrib/subtree: Add a test for subtree rebase that loses commits

David Aguilar (6):
      t7900-subtree.sh: fix quoting and broken && chains
      subtree: fix "git subtree split --rejoin"
      subtree: adjust style to match CodingGuidelines
      subtree: adjust function definitions to match CodingGuidelines
      difftool: avoid $GIT_DIR and $GIT_WORK_TREE
      difftool: use Git::* functions instead of passing around state

David Kastrup (1):
      blame: require 0 context lines while finding moved lines with -M

David Turner (3):
      refs: allow log-only updates
      refs: don't dereference on rename
      mailmap: use main email address for dturner

Ed Maste (1):
      rebase: update comment about FreeBSD /bin/sh

Edward Thomson (2):
      format_commit_message: honor `color=auto` for `%C(auto)`
      add: add --chmod=+x / --chmod=-x options

Elia Pinto (2):
      http.c: implement the GIT_TRACE_CURL environment variable
      imap-send.c: introduce the GIT_TRACE_CURL enviroment variable

Eric Sunshine (1):
      blame: drop strdup of string literal

Eric Wong (24):
      fast-import: implement unpack limit
      daemon: enable SO_KEEPALIVE for all sockets
      fast-import: invalidate pack_id references after loosening
      pretty: support "mboxrd" output format
      mailsplit: support unescaping mboxrd messages
      am: support --patch-format=mboxrd
      git-svn: skip mergeinfo handling with --no-follow-parent
      gc: fix off-by-one error with gc.autoPackLimit
      xread: retry after poll on EAGAIN/EWOULDBLOCK
      xwrite: poll on non-blocking FDs
      git-svn: warn instead of dying when commit data is missing
      hoist out handle_nonblock function for xread and xwrite
      config.mak.uname: define NEEDS_LIBRT under Linux, for now
      http-walker: remove unused parameter from fetch_object
      http: avoid disconnecting on 404s for loose objects
      http-walker: reduce O(n) ops with doubly-linked list
      list: avoid incompatibility with *BSD sys/queue.h
      daemon: ignore ENOTSOCK from setsockopt
      configure.ac: stronger test for pthread linkage
      git-svn: document svn.authorsProg in config
      git-svn: allow --version to work anywhere
      git svn: migrate tests to use lib-httpd
      pager: move pager-specific setup into the build
      http-backend: buffer headers before sending

Heiko Becker (1):
      gnome-keyring: Don't hard-code pkg-config executable

Heiko Voigt (3):
      submodule-config: passing name reference for .gitmodule blobs
      submodule-config: combine early return code into one goto
      submodule-config: fix test binary crashing when no arguments given

Ingo Brückl (3):
      t3700: remove unwanted leftover files before running new tests
      t3700: merge two tests into one
      t3700: add a test_mode_in_index helper function

Jacob Keller (1):
      completion: add completion for --submodule=* diff option

Jeff King (107):
      git_config_with_options: drop "found" counting
      git_config_parse_parameter: refactor cleanup code
      config: set up config_source for command-line config
      config: return configset value for current_config_ functions
      config: add a notion of "scope"
      upload-pack: provide a hook for running pack-objects
      rev-list: "adjust" results of "--count --use-bitmap-index -n"
      rev-list: disable bitmaps when "-n" is used with listing objects
      tree-diff: avoid alloca for large allocations
      send-pack: use buffered I/O to talk to pack-objects
      parse_opt_string_list: stop allocating new strings
      interpret-trailers: don't duplicate option strings
      blame,shortlog: don't make local option variables static
      use string_list initializer consistently
      fetch: document that pruning happens before fetching
      repack: document --unpack-unreachable option
      repack: add --keep-unreachable option
      repack: extend --keep-unreachable to loose objects
      add--interactive: respect diff.compactionHeuristic
      bisect: always call setup_revisions after init_revisions
      gpg-interface: use child_process.args
      verify_signed_buffer: drop pbuf variable
      verify_signed_buffer: use tempfile object
      run-command: add pipe_command helper
      verify_signed_buffer: use pipe_command
      sign_buffer: use pipe_command
      t0006: rename test-date's "show" to "relative"
      t0006: test various date formats
      local_tzoffset: detect errors from tm_to_time_t
      t/perf: fix regression in testing older versions of git
      p4211: explicitly disable renames in no-rename test
      color: fix max-size comment
      doc: refactor description of color format
      add skip_prefix_mem helper
      color: refactor parse_attr
      color: allow "no-" for negating attributes
      color: support "italic" attribute
      color: support strike-through attribute
      t9300: factor out portable "head -c" replacement
      t5000: test tar files that overflow ustar headers
      archive-tar: write extended headers for file sizes >= 8GB
      archive-tar: write extended headers for far-future mtime
      archive-tar: drop return value
      add an extra level of indirection to main()
      common-main: call git_extract_argv0_path()
      common-main: call sanitize_stdfds()
      common-main: call restore_sigpipe_to_default()
      common-main: call git_setup_gettext()
      tests: factor portable signal check out of t0005
      t0005: use test_match_signal as appropriate
      test_must_fail: use test_match_signal
      t/lib-git-daemon: use test_match_signal
      parse_options: allocate a new array when concatenating
      Makefile: drop extra dependencies for test helpers
      Makefile: use VCSSVN_LIB to refer to svn library
      config: fix bogus fd check when setting up default config
      branch: use non-gentle write_file for branch description
      write_file: drop "gently" form
      write_file: use xopen
      write_file: add pointer+len variant
      write_file: add format attribute
      use write_file_buf where applicable
      branch: use write_file_buf instead of write_file
      walker: let walker_say take arbitrary formats
      avoid using sha1_to_hex output as printf format
      push: anonymize URL in status output
      t0006: skip "far in the future" test when unsigned long is not long enough
      check_everything_connected: always pass --quiet to rev-list
      rev-list: add optional progress reporting
      check_everything_connected: convert to argv_array
      check_everything_connected: use a struct with named options
      check_connected: relay errors to alternate descriptor
      check_connected: add progress flag
      clone: use a real progress meter for connectivity check
      index-pack: add flag for showing delta-resolution progress
      receive-pack: turn on index-pack resolving progress
      receive-pack: relay connectivity errors to sideband
      receive-pack: turn on connectivity progress
      receive-pack: send keepalives during quiet periods
      t5541: fix url scrubbing test when GPG is not set
      diff: do not reuse worktree files that need "clean" conversion
      contrib/git-jump: fix greedy regex when matching hunks
      contrib/git-jump: add whitespace-checking mode
      contrib/git-jump: fix typo in README
      doc/rev-list-options: clarify "commit@{Nth}" for "-g" option
      doc/rev-list-options: explain "-g" output formats
      doc/pretty-formats: describe index/time formats for %gd
      doc/pretty-formats: explain shortening of %gd
      t4205: drop top-level &&-chaining
      t4205: indent here documents
      date: document and test "raw-local" mode
      date: add "unix" format
      t/perf: add tests for many-pack scenarios
      sha1_file: drop free_pack_by_name
      add generic most-recently-used list
      find_pack_entry: replace last_found_pack with MRU cache
      pack-objects: break out of want_object loop early
      pack-objects: compute local/ignore_pack_keep early
      am: reset cached ident date for each patch
      trace: handle NULL argument in trace_disable()
      trace: stop using write_or_whine_pipe()
      trace: use warning() for printing trace errors
      trace: cosmetic fixes for error messages
      trace: correct variable name in write() error message
      trace: disable key after write error
      write_or_die: drop write_or_whine_pipe()
      trace: do not fall back to stderr

Joey Hess (1):
      clarify %f documentation

Johannes Schindelin (56):
      mingw: let the build succeed with DEVELOPER=1
      perf: accommodate for MacOSX
      pretty: make the skip_blank_lines() function public
      commit.c: make find_commit_subject() more robust
      t2300: "git --exec-path" is not usable in $PATH on Windows as-is
      log: prepare log/log-tree to reuse the diffopt.close_file attribute
      log-tree: respect diffopt's configured output file stream
      line-log: respect diffopt's configured output file stream
      graph: respect the diffopt.file setting
      shortlog: support outputting to streams other than stdout
      format-patch: explicitly switch off color when writing to files
      format-patch: avoid freopen()
      format-patch: use stdout directly
      shortlog: respect the --output=<file> setting
      t4211: ensure that log respects --output=<file>
      color.h: remove obsolete comment about limitations on Windows
      diff: do not color output when --color=auto and --output=<file> is given
      t3404: fix a grammo (commands are ran -> commands are run)
      commit -C: skip blank lines at the beginning of the message
      sequencer: use skip_blank_lines() to find the commit subject
      reset --hard: skip blank lines when reporting the commit subject
      commit -S: avoid invalid pointer with empty message
      mingw: declare main()'s argv as const
      t3404: add a test for the --gpg-sign option
      rebase -i: demonstrate a bug with --autosquash
      rebase -i: we allow extra spaces after fixup!/squash!
      am: counteract gender bias
      diff: demonstrate a bug with --patience and --ignore-space-at-eol
      diff: fix a double off-by-one with --ignore-space-at-eol
      t/test-lib.sh: fix running tests with --valgrind
      mingw: fix the shortlog --output=<file> test
      mingw: fix regression in t1308-config-set
      fsck: refactor how to describe objects
      fsck_walk(): optionally name objects on the go
      fsck: give the error function a chance to see the fsck_options
      fsck: optionally show more helpful info for broken links
      t5520: verify that `pull --rebase` shows the helpful advice when failing
      die("bug"): report bugs consistently
      die(_("BUG")): avoid translating bug messages
      merge-recursive: clarify code in was_tracked()
      prepare the builtins for a libified merge_recursive()
      merge_recursive: abort properly upon errors
      merge-recursive: avoid returning a wholesale struct
      merge-recursive: allow write_tree_from_memory() to error out
      merge-recursive: handle return values indicating errors
      merge-recursive: switch to returning errors instead of dying
      am -3: use merge_recursive() directly again
      merge-recursive: flush output buffer before printing error messages
      merge-recursive: write the commit title in one go
      merge-recursive: offer an option to retain the output in 'obuf'
      merge_trees(): ensure that the callers release output buffer
      merge-recursive: flush output buffer even when erroring out
      import-tars: support hard links
      t5533: make it pass on case-sensitive filesystems
      nedmalloc: fix misleading indentation
      git mv: do not keep slash in `git mv dir non-existing-dir/`

Johannes Sixt (7):
      Windows: add missing definition of ENOTSOCK
      git-submodule: forward exit code of git-submodule--helper more faithfully
      submodule-helper: fix indexing in clone retry error reporting path
      rebase-interactive: trim leading whitespace from progress count
      t4130: work around Windows limitation
      config.c: avoid duplicated global static variables
      commit-slab.h: avoid duplicated global static variables

John Keeping (4):
      difftool: fix argument handling in subdirs
      Documentation/git-push: fix placeholder formatting
      push: add shorthand for --force-with-lease branch creation
      push: allow pushing new branches with --force-with-lease

Jonathan Nieder (1):
      doc: git-htmldocs.googlecode.com is no more

Jonathan Tan (1):
      fetch-pack: grow stateless RPC windows exponentially

Jordan DE GEA (1):
      worktree: allow "-" short-hand for @{-1} in add command

Josef Kufner (1):
      pretty: pass graph width to pretty formatting for use in '%>|(N)'

Josh Triplett (1):
      format-patch: format.from gives the default for --from

Junio C Hamano (36):
      send-email: detect and offer to skip backup files
      pathspec: rename free_pathspec() to clear_pathspec()
      t1308: do not get fooled by symbolic links to the source tree
      builtin/apply: remove misleading comment on lock_file field
      blame, line-log: do not loop around deref_tag()
      Start the post-2.9 cycle
      clone: do not let --depth imply --shallow-submodules
      Start preparing for 2.9.1
      Second batch of topics for 2.10
      More fixes for 2.9.1
      Third batch of topics for 2.10
      commit.c: remove print_commit_list()
      Fourth batch of topics for 2.10
      Git 2.9.1
      merge: avoid "safer crlf" during recording of merge results
      Fifth batch of topics for 2.10
      diff: document diff-filter exclusion
      Git 2.9.2
      archive-tar: huge offset and future timestamps would not work on 32-bit
      Sixth batch of topics for 2.10
      grep: further simplify setting the pattern type
      Seventh batch of topics for 2.10
      date: clarify --date=raw description
      Some fixes for 2.9.3
      t9100: portability fix
      Eighth batch of topics for 2.10
      hashmap: clarify that hashmap_entry can safely be discarded
      Ninth batch of topics for 2.10
      Tenth batch for 2.10
      Hopefully final batch for 2.9.3
      Eleventh batch for 2.10
      Yet another batch for 2.9.3
      Twelfth batch for 2.10
      Git 2.9.3
      Final batch before 2.10-rc0
      Git 2.10-rc0

Keith McGuigan (1):
      builtin/fetch.c: don't free remote->name after fetch

Kevin Willford (4):
      patch-ids: stop using a hand-rolled hashmap implementation
      patch-ids: replace the seen indicator with a commit pointer
      patch-ids: add flag to create the diff patch id using header only data
      rebase: avoid computing unnecessary patch IDs

LE Manh Cuong (1):
      sh-setup: enclose setting of ${VAR=default} in double-quotes

Lars Schneider (2):
      git-p4: place temporary refs used for branch import under refs/git-p4-tmp
      travis-ci: enable web server tests t55xx on Linux

Lars Vogel (1):
      Use "working tree" instead of "working directory" for git status

Lukas Fleischer (4):
      receive-pack: send auto-gc output over sideband 2
      sideband.c: make send_sideband() return void
      upload-pack.c: make send_client_data() return void
      sideband.c: refactor recv_sideband()

Matthieu Moy (8):
      Documentation/git-mv.txt: fix whitespace indentation
      doc: typeset short command-line options as literal
      doc: typeset long command-line options as literal
      doc: typeset '--' as literal
      doc: typeset long options with argument as literal
      CodingGuidelines: formatting HEAD in documentation
      doc: typeset HEAD and variants as literal
      status: suggest 'git merge --abort' when appropriate

Mehul Jain (3):
      t4202: refactor test
      log: add "--no-show-signature" command line option
      log: add log.showSignature configuration variable

Michael Haggerty (50):
      t1404: demonstrate a bug resolving references
      commit_ref(): if there is an empty dir in the way, delete it
      read_raw_ref(): don't get confused by an empty directory
      safe_create_leading_directories(): improve docstring
      remove_dir_recursively(): add docstring
      refname_is_safe(): use skip_prefix()
      refname_is_safe(): don't allow the empty string
      refname_is_safe(): insist that the refname already be normalized
      commit_ref_update(): write error message to *err, not stderr
      rename_ref(): remove unneeded local variable
      ref_transaction_commit(): remove local variables n and updates
      read_raw_ref(): rename flags argument to type
      read_raw_ref(): clear *type at start of function
      read_raw_ref(): rename symref argument to referent
      read_raw_ref(): improve docstring
      read_raw_ref(): move docstring to header file
      lock_ref_sha1_basic(): remove unneeded local variable
      refs: make error messages more consistent
      ref_transaction_create(): disallow recursive pruning
      ref_transaction_commit(): correctly report close_ref() failure
      delete_branches(): use resolve_refdup()
      verify_refname_available(): adjust constness in declaration
      add_update(): initialize the whole ref_update
      lock_ref_for_update(): new function
      unlock_ref(): move definition higher in the file
      ref_transaction_update(): check refname_is_safe() at a minimum
      refs: resolve symbolic refs first
      lock_ref_for_update(): don't re-read non-symbolic references
      lock_ref_for_update(): don't resolve symrefs
      commit_ref_update(): remove the flags parameter
      lock_ref_sha1_basic(): only handle REF_NODEREF mode
      refs: remove unnecessary "extern" keywords
      do_for_each_ref(): move docstring to the header file
      refs: use name "prefix" consistently
      delete_refs(): add a flags argument
      remote rm: handle symbolic refs correctly
      get_ref_cache(): only create an instance if there is a submodule
      entry_resolves_to_object(): rename function from ref_resolves_to_object()
      ref_resolves_to_object(): new function
      refs: introduce an iterator interface
      do_for_each_ref(): reimplement using reference iteration
      for_each_reflog(): don't abort for bad references
      dir_iterator: new API for iterating over a directory tree
      for_each_reflog(): reimplement using iterators
      t1404: rename file to t1404-update-ref-errors.sh
      t1404: remove "prefix" argument to test_update_rejected
      t1404: document function test_update_rejected
      t1404: add more tests of update-ref error handling
      lock_ref_for_update(): make error handling more uniform
      lock_ref_for_update(): avoid a symref resolution

Michael J Gruber (7):
      cherry-pick: allow to pick to unborn branches
      Documentation/technical: describe signature formats
      Documentation/technical: signed tag format
      Documentation/technical: signed commit format
      Documentation/technical: signed merge tag format
      gpg-interface: check gpg signature creation status
      t/t91*: do not say how to avoid the tests

Michael Stahl (1):
      document git-repack interaction of pack.threads and pack.windowMemory

Mike Hommey (2):
      blame: allow to blame paths freshly added to the index
      t/t8003-blame-corner-cases.sh: Use here documents

Nguyễn Thái Ngọc Duy (47):
      completion: support git-worktree
      worktree.c: rewrite mark_current_worktree() to avoid strbuf
      git-worktree.txt: keep subcommand listing in alphabetical order
      worktree.c: use is_dot_or_dotdot()
      worktree: avoid 0{40}, too many zeroes, hard to read
      worktree: simplify prefixing paths
      worktree.c: add find_worktree()
      worktree.c: add is_main_worktree()
      lib-httpd.sh: print error.log on error
      worktree.c: add is_worktree_locked()
      pretty.c: support <direction>|(<negative number>) forms
      new-command.txt: correct the command description file
      grep: break down an "if" stmt in preparation for next changes
      test-regex: isolate the bug test code
      test-regex: expose full regcomp() to the command line
      grep/icase: avoid kwsset on literal non-ascii strings
      git-fetch.txt: document fetch output
      fetch: refactor ref update status formatting code
      fetch: change flag code for displaying tag update and deleted ref
      grep/icase: avoid kwsset when -F is specified
      grep: rewrite an if/else condition to avoid duplicate expression
      grep/pcre: prepare locale-dependent tables for icase matching
      gettext: add is_utf8_locale()
      grep/pcre: support utf-8
      diffcore-pickaxe: Add regcomp_or_die()
      diffcore-pickaxe: support case insensitive match on non-ascii
      grep.c: reuse "icase" variable
      fetch: align all "remote -> local" output
      fetch: reduce duplicate in ref update status lines with placeholder
      connect: read $GIT_SSH_COMMAND from config file
      worktree: add "lock" command
      worktree: add "unlock" command
      worktree.c: find_worktree() search by path suffix
      pack-objects: pass length to check_pack_crc() without truncation
      log: decorate HEAD -> branch with the same color for arrow and HEAD
      sha1_file.c: use type off_t* for object_info->disk_sizep
      index-pack: correct "len" type in unpack_data()
      index-pack: report correct bad object offsets even if they are large
      index-pack: correct "offset" type in unpack_entry_data()
      pack-objects: do not truncate result in-pack object size on 32-bit systems
      fsck: use streaming interface for large blobs in pack
      test-lib.sh: introduce and use $EMPTY_TREE
      test-lib.sh: introduce and use $EMPTY_BLOB
      cache-tree.c: fix i-t-a entry skipping directory updates sometimes
      cache-tree: do not generate empty trees as a result of all i-t-a subentries
      config.mak.uname: correct perl path on FreeBSD
      t7063: work around FreeBSD's lazy mtime update feature

Nicolas Pitre (1):
      sideband.c: small optimization of strbuf usage

Orgad Shaneh (1):
      commit: describe that --no-verify skips the commit-msg hook in the help text

Parker Moore (2):
      contrib/persistent-https: update ldflags syntax for Go 1.7+
      contrib/persistent-https: use Git version for build label

Patrick Steinhardt (1):
      rebase -i: restore autostash on abort

Peter Colberg (2):
      refs.h: fix misspelt "occurred" in a comment
      config.c: fix misspelt "occurred" in an error message

Pranit Bauva (2):
      builtin/commit.c: memoize git-path for COMMIT_EDITMSG
      strbuf: describe the return value of strbuf_read_file

Ramsay Jones (2):
      regex: fix a SIZE_MAX macro redefinition warning
      write_or_die: remove the unused write_or_whine() function

René Scharfe (26):
      t4051: rewrite, add more tests
      xdiff: factor out match_func_rec()
      xdiff: handle appended chunks better with -W
      xdiff: ignore empty lines before added functions with -W
      xdiff: -W: don't include common trailing empty lines in context
      xdiff: don't trim common tail with -W
      t7810: add test for grep -W and trailing empty context lines
      grep: -W: don't extend context to trailing empty lines
      xdiff: fix merging of appended hunk with -W
      .gitattributes: set file type for C files
      notes-merge: use O_EXCL to avoid overwriting existing files
      am: ignore return value of write_file()
      rm: reuse strbuf for all remove_dir_recursively() calls
      worktree: use strbuf_add_absolute_path() directly
      use strbuf_addbuf() for appending a strbuf to another
      submodule-config: use explicit empty string instead of strbuf in config_from()
      strbuf: avoid calling strbuf_grow() twice in strbuf_addbuf()
      use strbuf_addstr() for adding constant strings to a strbuf
      pass constants as first argument to st_mult()
      use strbuf_addstr() instead of strbuf_addf() with "%s"
      use CHILD_PROCESS_INIT to initialize automatic variables
      merge-recursive: use STRING_LIST_INIT_NODUP
      merge: use string_list_split() in add_strategies()
      nedmalloc: work around overzealous GCC 6 warning
      archive-tar: make write_extended_header() void
      use strbuf_add_unique_abbrev() for adding short hashes

Ronald Wampler (1):
      Makefile: add NEEDS_LIBRT to optionally link with librt

SZEDER Gábor (1):
      reflog: continue walking the reflog past root commits

Stefan Beller (22):
      submodule update: make use of the existing fetch_in_submodule function
      submodule-config: keep shallow recommendation around
      submodule update: learn `--[no-]recommend-shallow` option
      submodule--helper: initial clone learns retry logic
      submodule update: continue when a clone fails
      t5614: don't use subshells
      push options: {pre,post}-receive hook learns about push options
      receive-pack: implement advertising and receiving push options
      push: accept push options
      add a test for push options
      Documentation: pack-protocol correct NAK response
      submodule deinit: remove outdated comment
      t7406: future proof tests with hard coded depth
      submodule update: respect depth in subsequent fetches
      submodule update: narrow scope of local variable
      submodule--helper: fix usage string for relative-path
      submodule-config: keep configured branch around
      gitmodules: document shallow recommendation
      submodule--helper: add remote-branch helper
      submodule update: allow '.' for branch value
      submodule--helper: use parallel processor correctly
      t7406: fix breakage on OSX

Thomas Braun (3):
      completion: factor out untracked file modes into a variable
      completion: add __git_get_option_value helper
      completion: add git status

Tom Russello (4):
      doc: clearer rule about formatting literals
      doc: change environment variables format
      doc: more consistency in environment variables format
      doc: change configuration variables format

Torsten Bögershausen (1):
      convert: unify the "auto" handling of CRLF

Vasco Almeida (44):
      i18n: builtin/remote.c: fix mark for translation
      i18n: advice: mark string about detached head for translation
      i18n: advice: internationalize message for conflicts
      i18n: transport: mark strings for translation
      i18n: sequencer: mark entire sentences for translation
      i18n: rebase-interactive: mark here-doc strings for translation
      i18n: sequencer: mark string for translation
      i18n: rebase-interactive: mark comments of squash for translation
      i18n: merge-octopus: mark messages for translation
      i18n: setup: mark strings for translation
      merge-octopus: use die shell function from git-sh-setup.sh
      tests: use test_i18n* functions to suppress false positives
      i18n: rebase: fix marked string to use eval_gettext variant
      tests: unpack-trees: update to use test_i18n* functions
      i18n: rebase: mark placeholder for translation
      t9003: become resilient to GETTEXT_POISON
      i18n: bisect: simplify error message for i18n
      t4153: fix negated test_i18ngrep call
      t6030: update to use test_i18ncmp
      t5523: use test_i18ngrep for negation
      i18n: git-sh-setup.sh: mark strings for translation
      i18n: bisect: mark strings for translation
      i18n: rebase-interactive: mark strings for translation
      i18n: transport-helper.c: change N_() call to _()
      i18n: notes: mark strings for translation
      i18n: notes: mark options for translation
      i18n: merge: mark messages for translation
      i18n: merge: change command option help to lowercase
      i18n: sequencer: add period to error message
      i18n: standardise messages
      i18n: remote: mark URL fallback text for translation
      i18n: remote: allow translations to reorder message
      i18n: init-db: join message pieces
      i18n: submodule: join strings marked for translation
      i18n: submodule: escape shell variables inside eval_gettext
      i18n: unmark die messages for translation
      i18n: branch: mark comment when editing branch description for translation
      t5541: become resilient to GETTEXT_POISON
      t5510: skip tests under GETTEXT_POISON build
      i18n: notes: mark comment for translation
      i18n: config: unfold error messages marked for translation
      i18n: setup: mark error messages for translation
      i18n: archive: mark errors for translation
      i18n: git-stash: mark messages for translation

Ville Skyttä (3):
      git-prompt.sh: Don't error on null ${ZSH,BASH}_VERSION, $short_sha
      completion: complete --delete, --move, and --remotes for git branch
      Spelling fixes

William Duclot (1):
      userdiff: add built-in pattern for CSS

brian m. carlson (11):
      hex: add oid_to_hex_r()
      contrib/coccinelle: add basic Coccinelle transforms
      coccinelle: convert hashcpy() with null_sha1 to hashclr()
      coccinelle: apply object_id Coccinelle transformations
      diff: convert struct diff_filespec to struct object_id
      diff: rename struct diff_filespec's sha1_valid member
      merge-recursive: convert struct stage_data to use object_id
      merge-recursive: convert struct merge_file_info to object_id
      merge-recursive: convert leaf functions to use struct object_id
      merge-recursive: convert merge_recursive_generic() to object_id
      diff: convert prep_temp_blob() to struct object_id


^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.9.0
@ 2016-06-13 19:45  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2016-06-13 19:45 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

The latest feature release Git v2.9.0 is now available at the
usual places.  It is comprised of 497 non-merge commits since
v2.8.0, contributed by 75 people, 28 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.9.0'
tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.8.0 are as follows.
Welcome to the Git development community!

  Alexander Rinass, Antonin, Armin Kunaschik, Benjamin Dopplinger,
  Ben Woosley, Erwan Mathoniere, Gabriel Souza Franco, Jacob
  Nisnevich, Jan Durovec, Jean-Noël Avila, Kazuki Yamaguchi,
  Keller Fuchs, Laurent Arnoud, Li Peng, Marios Titas, Mehul Jain,
  Michael Procter, Nikola Forró, Pablo Santiago Blum de Aguiar,
  Pranit Bauva, Ray Zhang, René Nyffenegger, Santiago Torres,
  Saurav Sachidanand, Shin Kojima, Sidhant Sharma [:tk], Stanislav
  Kolotinskiy, and Xiaolong Ye.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alexander Kuleshov,
  Alexander Shopov, brian m. carlson, Brian Norris, Changwoo
  Ryu, Christian Couder, David Aguilar, David Turner, Dennis
  Kaarsemaker, Dimitriy Ryazantcev, Elia Pinto, Elijah Newren,
  Eric Sunshine, Eric Wong, Felipe Contreras, Jacob Keller,
  Jean-Noel Avila, Jeff King, Jiang Xin, Johannes Schindelin,
  Johannes Sixt, John Keeping, Junio C Hamano, Karsten Blees,
  Lars Schneider, Linus Torvalds, Luke Diamand, Matthieu Moy,
  Michael Haggerty, Michael J Gruber, Michael Rappazzo, Nguyễn
  Thái Ngọc Duy, Ori Avtalion, Peter Krefting, Ralf Thielow,
  Ramsay Jones, Ray Chen, René Scharfe, Stefan Beller, Stephen
  P. Smith, Sven Strickroth, SZEDER Gábor, Torsten Bögershausen,
  Trần Ngọc Quân, and Vasco Almeida.

----------------------------------------------------------------

Git 2.9 Release Notes
=====================

Backward compatibility notes
----------------------------

The end-user facing Porcelain level commands in the "git diff" and
"git log" family by default enable the rename detection; you can still
use "diff.renames" configuration variable to disable this.

Merging two branches that have no common ancestor with "git merge" is
by default forbidden now to prevent creating such an unusual merge by
mistake.

The output formats of "git log" that indents the commit log message by
4 spaces now expands HT in the log message by default.  You can use
the "--no-expand-tabs" option to disable this.

"git commit-tree" plumbing command required the user to always sign
its result when the user sets the commit.gpgsign configuration
variable, which was an ancient mistake, which this release corrects.
A script that drives commit-tree, if it relies on this mistake, now
needs to read commit.gpgsign and pass the -S option as necessary.


Updates since v2.8
------------------

UI, Workflows & Features

 * Comes with git-multimail 1.3.1 (in contrib/).

 * The end-user facing commands like "git diff" and "git log"
   now enable the rename detection by default.

 * The credential.helper configuration variable is cumulative and
   there is no good way to override it from the command line.  As
   a special case, giving an empty string as its value now serves
   as the signal to clear the values specified in various files.

 * A new "interactive.diffFilter" configuration can be used to
   customize the diff shown in "git add -i" sessions.

 * "git p4" now allows P4 author names to be mapped to Git author
   names.

 * "git rebase -x" can be used without passing "-i" option.

 * "git -c credential.<var>=<value> submodule" can now be used to
   propagate configuration variables related to credential helper
   down to the submodules.

 * "git tag" can create an annotated tag without explicitly given an
   "-a" (or "-s") option (i.e. when a tag message is given).  A new
   configuration variable, tag.forceSignAnnotated, can be used to tell
   the command to create signed tag in such a situation.

 * "git merge" used to allow merging two branches that have no common
   base by default, which led to a brand new history of an existing
   project created and then get pulled by an unsuspecting maintainer,
   which allowed an unnecessary parallel history merged into the
   existing project.  The command has been taught not to allow this by
   default, with an escape hatch "--allow-unrelated-histories" option
   to be used in a rare event that merges histories of two projects
   that started their lives independently.

 * "git pull" has been taught to pass the "--allow-unrelated-histories"
   option to underlying "git merge".

 * "git apply -v" learned to report paths in the patch that were
   skipped via --include/--exclude mechanism or being outside the
   current working directory.

 * Shell completion (in contrib/) updates.

 * The commit object name reported when "rebase -i" stops has been
   shortened.

 * "git worktree add" can be given "--no-checkout" option to only
   create an empty worktree without checking out the files.

 * "git mergetools" learned to drive ExamDiff.

 * "git pull --rebase" learned "--[no-]autostash" option, so that
   the rebase.autostash configuration variable set to true can be
   overridden from the command line.

 * When "git log" shows the log message indented by 4-spaces, the
   remainder of a line after a HT does not align in the way the author
   originally intended.  The command now expands tabs by default to help
   such a case, and allows the users to override it with a new option,
   "--no-expand-tabs".

 * "git send-email" now uses a more readable timestamps when
   formulating a message ID.

 * "git rerere" can encounter two or more files with the same conflict
   signature that have to be resolved in different ways, but there was
   no way to record these separate resolutions.

 * "git p4" learned to record P4 jobs in Git commit that imports from
   the history in Perforce.

 * "git describe --contains" often made a hard-to-justify choice of
   tag to name a given commit, because it tried to come up
   with a name with smallest number of hops from a tag, causing an old
   commit whose close descendant that is recently tagged were not
   described with respect to an old tag but with a newer tag.  It did
   not help that its computation of "hop" count was further tweaked to
   penalize being on a side branch of a merge.  The logic has been
   updated to favor using the tag with the oldest tagger date, which
   is a lot easier to explain to the end users: "We describe a commit
   in terms of the (chronologically) oldest tag that contains the
   commit."

 * "git clone" learned the "--shallow-submodules" option.

 * HTTP transport clients learned to throw extra HTTP headers at the
   server, specified via http.extraHeader configuration variable.

 * The "--compaction-heuristic" option to "git diff" family of
   commands enables a heuristic to make the patch output more readable
   by using a blank line as a strong hint that the contents before and
   after it belong to logically separate units.  It is still
   experimental.

 * A new configuration variable core.hooksPath allows customizing
   where the hook directory is.

 * An earlier addition of "sanitize_submodule_env" with 14111fc4 (git:
   submodule honor -c credential.* from command line, 2016-02-29)
   turned out to be a convoluted no-op; implement what it wanted to do
   correctly, and stop filtering settings given via "git -c var=val".

 * "git commit --dry-run" reported "No, no, you cannot commit." in one
   case where "git commit" would have allowed you to commit, and this
   improves it a little bit ("git commit --dry-run --short" still does
   not give you the correct answer, for example).  This is a stop-gap
   measure in that "commit --short --dry-run" still gives an incorrect
   result.

 * The experimental "multiple worktree" feature gains more safety to
   forbid operations on a branch that is checked out or being actively
   worked on elsewhere, by noticing that e.g. it is being rebased.

 * "git format-patch" learned a new "--base" option to record what
   (public, well-known) commit the original series was built on in
   its output.

 * "git commit" learned to pay attention to the "commit.verbose"
   configuration variable and act as if the "--verbose" option
   was given from the command line.

 * Updated documentation gives hints to GMail users with two-factor
   auth enabled that they need app-specific-password when using
   "git send-email".

 * The manpage output of our documentation did not render well in
   terminal; typeset literals in bold by default to make them stand
   out more.

 * The mark-up in the top-level README.md file has been updated to
   typeset CLI command names differently from the body text.


Performance, Internal Implementation, Development Support etc.

 * The embedded args argv-array in the child process is used to build
   the command line to run pack-objects instead of using a separate
   array of strings.

 * A test for tags has been restructured so that more parts of it can
   easily be run on a platform without a working GnuPG.

 * The startup_info data, which records if we are working inside a
   repository (among other things), are now uniformly available to Git
   subcommand implementations, and Git avoids attempting to touch
   references when we are not in a repository.

 * The command line argument parser for "receive-pack" has been
   rewritten to use parse-options.

 * A major part of "git submodule update" has been ported to C to take
   advantage of the recently added framework to run download tasks in
   parallel.  Other updates to "git submodule" that move pieces of
   logic to C continues.

 * Rename bunch of tests on "git clone" for better organization.

 * The tests that involve running httpd leaked the system-wide
   configuration in /etc/gitconfig to the tested environment.

 * Build updates for MSVC.

 * The repository set-up sequence has been streamlined (the biggest
   change is that there is no longer git_config_early()), so that we
   do not attempt to look into refs/* when we know we do not have a
   Git repository.

 * Code restructuring around the "refs" API to prepare for pluggable
   refs backends.

 * Sources to many test helper binaries and the generated helpers
   have been moved to t/helper/ subdirectory to reduce clutter at the
   top level of the tree.

 * Unify internal logic between "git tag -v" and "git verify-tag"
   commands by making one directly call into the other.

 * "merge-recursive" strategy incorrectly checked if a path that is
   involved in its internal merge exists in the working tree.

 * The test scripts for "git p4" (but not "git p4" implementation
   itself) has been updated so that they would work even on a system
   where the installed version of Python is python 3.

 * As nobody maintains our in-tree git.spec.in and distros use their
   own spec file, we stopped pretending that we support "make rpm".

 * Move from "unsigned char[20]" to "struct object_id" continues.

 * The code for warning_errno/die_errno has been refactored and a new
   error_errno() reporting helper is introduced.
   (merge 1da045f nd/error-errno later to maint).

 * Running tests with '-x' option to trace the individual command
   executions is a useful way to debug test scripts, but some tests
   that capture the standard error stream and check what the command
   said can be broken with the trace output mixed in.  When running
   our tests under "bash", however, we can redirect the trace output
   to another file descriptor to keep the standard error of programs
   being tested intact.

 * t0040 had too many unnecessary repetitions in its test data.  Teach
   test-parse-options program so that a caller can tell what it
   expects in its output, so that these repetitions can be cleaned up.

 * Add perf test for "rebase -i".

 * Common mistakes when writing gitlink: in our documentation are
   found by "make check-docs".

 * t9xxx series has been updated primarily for readability, while
   fixing small bugs in it.  A few scripted Porcelain commands have
   also been updated to fix possible bugs around their use of
   "test -z" and "test -n".

 * CI test was taught to run git-svn tests.

 * "git cat-file --batch-all" has been sped up, by taking advantage
   of the fact that it does not have to read a list of objects, in two
   ways.

 * test updates to make it more readable and maintainable.
   (merge e6273f4 es/t1500-modernize later to maint).

 * "make DEVELOPER=1" worked as expected; setting DEVELOPER=1 in
   config.mak didn't.
   (merge 51dd3e8 mm/makefile-developer-can-be-in-config-mak later to maint).

 * The way how "submodule--helper list" signals unmatch error to its
   callers has been updated.

 * A bash-ism "local" has been removed from "git submodule" scripted
   Porcelain.


Also contains various documentation updates and code clean-ups.


Fixes since v2.8
----------------

Unless otherwise noted, all the fixes since v2.8 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * "git config --get-urlmatch", unlike other variants of the "git
   config --get" family, did not signal error with its exit status
   when there was no matching configuration.

 * The "--local-env-vars" and "--resolve-git-dir" options of "git
   rev-parse" failed to work outside a repository when the command's
   option parsing was rewritten in 1.8.5 era.

 * "git index-pack --keep[=<msg>] pack-$name.pack" simply did not work.

 * Fetching of history by naming a commit object name directly didn't
   work across remote-curl transport.

 * A small memory leak in an error codepath has been plugged in xdiff
   code.

 * strbuf_getwholeline() did not NUL-terminate the buffer on certain
   corner cases in its error codepath.

 * "git mergetool" did not work well with conflicts that both sides
   deleted.

 * "git send-email" had trouble parsing alias file in mailrc format
   when lines in it had trailing whitespaces on them.

 * When "git merge --squash" stopped due to conflict, the concluding
   "git commit" failed to read in the SQUASH_MSG that shows the log
   messages from all the squashed commits.

 * "git merge FETCH_HEAD" dereferenced NULL pointer when merging
   nothing into an unborn history (which is arguably unusual usage,
   which perhaps was the reason why nobody noticed it).

 * When "git worktree" feature is in use, "git branch -d" allowed
   deletion of a branch that is checked out in another worktree,
   which was wrong.

 * When "git worktree" feature is in use, "git branch -m" renamed a
   branch that is checked out in another worktree without adjusting
   the HEAD symbolic ref for the worktree.

 * "git diff -M" used to work better when two originally identical
   files A and B got renamed to X/A and X/B by pairing A to X/A and B
   to X/B, but this was broken in the 2.0 timeframe.

 * "git send-pack --all <there>" was broken when its command line
   option parsing was written in the 2.6 timeframe.

 * "git format-patch --help" showed `-s` and `--no-patch` as if these
   are valid options to the command.  We already hide `--patch` option
   from the documentation, because format-patch is about showing the
   diff, and the documentation now hides these options as well.

 * When running "git blame $path" with unnormalized data in the index
   for the path, the data in the working tree was blamed, even though
   "git add" would not have changed what is already in the index, due
   to "safe crlf" that disables the line-end conversion.  It has been
   corrected.

 * A change back in version 2.7 to "git branch" broke display of a
   symbolic ref in a non-standard place in the refs/ hierarchy (we
   expect symbolic refs to appear in refs/remotes/*/HEAD to point at
   the primary branch the remote has, and as .git/HEAD to point at the
   branch we locally checked out).

 * A partial rewrite of "git submodule" in the 2.7 timeframe changed
   the way the gitdir: pointer in the submodules point at the real
   repository location to use absolute paths by accident.  This has
   been corrected.

 * "git commit" misbehaved in a few minor ways when an empty message
   is given via -m '', all of which has been corrected.

 * Support for CRAM-MD5 authentication method in "git imap-send" did
   not work well.

 * Upcoming OpenSSL 1.1.0 will break compilation by updating a few API
   elements we use in imap-send, which has been adjusted for the change.

 * The socks5:// proxy support added back in 2.6.4 days was not aware
   that socks5h:// proxies behave differently from socks5:// proxies.

 * "git config" had a codepath that tried to pass a NULL to
   printf("%s"), which nobody seems to have noticed.

 * On Cygwin, object creation uses the "create a temporary and then
   rename it to the final name" pattern, not "create a temporary,
   hardlink it to the final name and then unlink the temporary"
   pattern.

   This is necessary to use Git on Windows shared directories, and is
   already enabled for the MinGW and plain Windows builds.  It also
   has been used in Cygwin packaged versions of Git for quite a while.
   See http://thread.gmane.org/gmane.comp.version-control.git/291853

 * "merge-octopus" strategy did not ensure that the index is clean
   when merge begins.

 * When "git merge" notices that the merge can be resolved purely at
   the tree level (without having to merge blobs) and the resulting
   tree happens to already exist in the object store, it forgot to
   update the index, which left an inconsistent state that would
   break later operations.

 * "git submodule" reports the paths of submodules the command
   recurses into, but these paths were incorrectly reported when
   the command was not run from the root level of the superproject.

 * The "user.useConfigOnly" configuration variable makes it an error
   if users do not explicitly set user.name and user.email.  However,
   its check was not done early enough and allowed another error to
   trigger, reporting that the default value we guessed from the
   system setting was unusable.  This was a suboptimal end-user
   experience as we want the users to set user.name/user.email without
   relying on the auto-detection at all.

 * "git mv old new" did not adjust the path for a submodule that lives
   as a subdirectory inside old/ directory correctly.

 * "git replace -e" did not honour "core.editor" configuration.

 * "git push" from a corrupt repository that attempts to push a large
   number of refs deadlocked; the thread to relay rejection notices
   for these ref updates blocked on writing them to the main thread,
   after the main thread at the receiving end notices that the push
   failed and decides not to read these notices and return a failure.

 * mmap emulation on Windows has been optimized and work better without
   consuming paging store when not needed.

 * A question by "git send-email" to ask the identity of the sender
   has been updated.

 * UI consistency improvements for "git mergetool".

 * "git rebase -m" could be asked to rebase an entire branch starting
   from the root, but failed by assuming that there always is a parent
   commit to the first commit on the branch.

 * Fix a broken "p4 lfs" test.

 * Recent update to Git LFS broke "git p4" by changing the output from
   its "lfs pointer" subcommand.

 * "git fetch" test t5510 was flaky while running a (forced) automagic
   garbage collection.

 * Documentation updates to help contributors setting up Travis CI
   test for their patches.

 * Some multi-byte encoding can have a backslash byte as a later part
   of one letter, which would confuse "highlight" filter used in
   gitweb.

 * "git commit-tree" plumbing command required the user to always sign
   its result when the user sets the commit.gpgsign configuration
   variable, which was an ancient mistake.  Rework "git rebase" that
   relied on this mistake so that it reads commit.gpgsign and pass (or
   not pass) the -S option to "git commit-tree" to keep the end-user
   expectation the same, while teaching "git commit-tree" to ignore
   the configuration variable.  This will stop requiring the users to
   sign commit objects used internally as an implementation detail of
   "git stash".

 * "http.cookieFile" configuration variable clearly wants a pathname,
   but we forgot to treat it as such by e.g. applying tilde expansion.

 * Consolidate description of tilde-expansion that is done to
   configuration variables that take pathname to a single place.

 * Correct faulty recommendation to use "git submodule deinit ." when
   de-initialising all submodules, which would result in a strange
   error message in a pathological corner case.

 * Many 'linkgit:<git documentation page>' references were broken,
   which are all fixed with this.

 * "git rerere" can get confused by conflict markers deliberately left
   by the inner merge step, because they are indistinguishable from
   the real conflict markers left by the outermost merge which are
   what the end user and "rerere" need to look at.  This was fixed by
   making the conflict markers left by the inner merges a bit longer.
   (merge 0f9fd5c jc/ll-merge-internal later to maint).

 * CI test was taught to build documentation pages.

 * "git fsck" learned to catch NUL byte in a commit object as
   potential error and warn.

 * Portability enhancement for "rebase -i" to help platforms whose
   shell does not like "for i in <empty>" (which is not POSIX-kosher).

 * On Windows, .git and optionally any files whose name starts with a
   dot are now marked as hidden, with a core.hideDotFiles knob to
   customize this behaviour.

 * Documentation for "git merge --verify-signatures" has been updated
   to clarify that the signature of only the commit at the tip is
   verified.  Also the phrasing used for signature and key validity is
   adjusted to align with that used by OpenPGP.

 * A couple of bugs around core.autocrlf have been fixed.

 * Many commands normalize command line arguments from NFD to NFC
   variant of UTF-8 on OSX, but commands in the "diff" family did
   not, causing "git diff $path" to complain that no such path is
   known to Git.  They have been taught to do the normalization.

 * "git difftool" learned to handle unmerged paths correctly in
   dir-diff mode.

 * The "are we talking with TTY, doing an interactive session?"
   detection has been updated to work better for "Git for Windows".

 * We forgot to add "git log --decorate=auto" to documentation when we
   added the feature back in v2.1.0 timeframe.
   (merge 462cbb4 rj/log-decorate-auto later to maint).

 * "git fast-import --export-marks" would overwrite the existing marks
   file even when it makes a dump from its custom die routine.
   Prevent it from doing so when we have an import-marks file but
   haven't finished reading it.
   (merge f4beed6 fc/fast-import-broken-marks-file later to maint).

 * "git rebase -i", after it fails to auto-resolve the conflict, had
   an unnecessary call to "git rerere" from its very early days, which
   was spotted recently; the call has been removed.
   (merge 7063693 js/rebase-i-dedup-call-to-rerere later to maint).

 * Other minor clean-ups and documentation updates
   (merge cd82b7a pa/cherry-pick-doc-typo later to maint).
   (merge 2bb73ae rs/patch-id-use-skip-prefix later to maint).
   (merge aa20cbc rs/apply-name-terminate later to maint).
   (merge fe17fc0 jc/t2300-setup later to maint).
   (merge e256eec jk/shell-portability later to maint).

----------------------------------------------------------------

Changes since v2.8.0 are as follows:

Adam Dinwoodie (2):
      config.mak.uname: Cygwin needs OBJECT_CREATION_USES_RENAMES
      commit: --amend -m '' silently fails to wipe message

Alexander Kuleshov (1):
      submodule-config: use hashmap_iter_first()

Alexander Rinass (1):
      diff: run arguments through precompose_argv

Alexander Shopov (1):
      l10n: Updated Bulgarian translation of git (2597t,0f,0u)

Antonin (1):
      l10n: fr.po Fixed grammar mistake

Armin Kunaschik (2):
      t4151: make sure argument to 'test -z' is given
      t0008: 4 tests fail with ksh88

Ben Woosley (1):
      git-rebase--merge: don't include absent parent as a base

Benjamin Dopplinger (1):
      README.md: format CLI commands with code syntax

Brian Norris (3):
      Documentation: config: improve word ordering for http.cookieFile
      http: expand http.cookieFile as a path
      config: consistently format $variables in monospaced font

Changwoo Ryu (1):
      l10n: ko.po: Update Korean translation

Christian Couder (5):
      Documentation: talk about pager in api-trace.txt
      builtin/apply: get rid of useless 'name' variable
      builtin/apply: handle parse_binary() failure
      builtin/apply: free patch when parse_chunk() fails
      Git/SVN: die when there is no commit metadata

David Aguilar (4):
      mergetool: support delete/delete conflicts
      mergetool: honor tempfile configuration when resolving delete conflicts
      difftool: initialize variables for readability
      difftool: handle unmerged files in dir-diff mode

David Turner (5):
      refs: move head_ref{,_submodule} to the common code
      refs: move for_each_*ref* functions into common code
      files-backend: break out ref reading
      refs: move resolve_ref_unsafe into common code
      refs: on symref reflog expire, lock symref not referrent

Dennis Kaarsemaker (1):
      Makefile: remove dependency on git.spec

Dimitriy Ryazantcev (1):
      l10n: ru.po: update Russian translation

Elia Pinto (1):
      api-trace.txt: fix typo

Elijah Newren (6):
      merge-recursive: remove duplicate code
      merge-recursive: do not check working copy when creating a virtual merge base
      t7605: add a testcase demonstrating a bug with trivial merges
      builtin/merge.c: fix a bug with trivial merges
      merge-octopus: abort if index does not match HEAD
      t6044: new merge testcases for when index doesn't match HEAD

Eric Sunshine (10):
      lib-gpg: drop unnecessary "missing GPG" warning
      t6302: normalize names and descriptions of signed tags
      t6302: also test annotated in addition to signed tags
      t6302: skip only signed tags rather than all tests when GPG is missing
      git-format-patch.txt: don't show -s as shorthand for multiple options
      t1500: be considerate to future potential tests
      t1500: test_rev_parse: facilitate future test enhancements
      t1500: avoid changing working directory outside of tests
      t1500: avoid setting configuration options outside of tests
      t1500: avoid setting environment variables outside of tests

Eric Wong (4):
      send-email: more meaningful Message-ID
      send-email: do not load Data::Dumper
      pack-objects: warn on split packs disabling bitmaps
      .mailmap: update to my shorter email address

Erwan Mathoniere (1):
      Documentation: bold literals in man

Felipe Contreras (1):
      fast-import: do not truncate exported marks file

Gabriel Souza Franco (2):
      fetch-pack: fix object_id of exact sha1
      fetch-pack: update the documentation for "<refs>..." arguments

Jacob Keller (7):
      submodule: don't pass empty string arguments to submodule--helper clone
      submodule: check argc count for git submodule--helper clone
      submodule: fix submodule--helper clone usage
      submodule: fix segmentation fault in submodule--helper clone
      quote: implement sq_quotef()
      git: submodule honor -c credential.* from command line
      xdiff: add recs_match helper function

Jacob Nisnevich (2):
      mergetools: create mergetool_find_win32_cmd() helper function for winmerge
      mergetools: add support for ExamDiff

Jan Durovec (2):
      git-p4: clean-up code style in tests
      git-p4: add P4 jobs to git commit message

Jean-Noel Avila (1):
      l10n: fr.po v2.9.0rnd1

Jeff King (56):
      credential: let empty credential specs reset helper list
      t1515: add tests for rev-parse out-of-repo helpers
      add--interactive: allow custom diff highlighting programs
      rev-parse: let some options run outside repository
      strbuf_getwholeline: NUL-terminate getdelim buffer on error
      setup: make startup_info available everywhere
      setup: set startup_info->have_repository more reliably
      remote: don't resolve HEAD in non-repository
      mailmap: do not resolve blobs in a non-repository
      grep: turn off gitlink detection for --no-index
      use setup_git_directory() in test-* programs
      setup: document check_repository_format()
      wrap shared_repository global in get/set accessors
      lazily load core.sharedrepository
      check_repository_format_gently: stop using git_config_early
      config: drop git_config_early
      setup: refactor repo format reading and verification
      init: use setup.c's repo version verification
      setup: unify repository version callbacks
      setup: drop repository_format_version global
      verify_repository_format: mark messages for translation
      send-email: ignore trailing whitespace in mailrc alias file
      credential-cache--daemon: clarify "exit" action semantics
      t/lib-httpd: pass through GIT_CONFIG_NOSYSTEM env
      git_config_push_parameter: handle empty GIT_CONFIG_PARAMETERS
      branch: fix shortening of non-remote symrefs
      commit: do not ignore an empty message given by -m ''
      config: lower-case first word of error strings
      git_config_set_multivar_in_file: all non-zero returns are errors
      git_config_set_multivar_in_file: handle "unset" errors
      t5532: use write_script
      send-pack: close demux pipe before finishing async process
      run-command: teach async threads to ignore SIGPIPE
      send-pack: isolate sigpipe in demuxer thread
      fetch-pack: isolate sigpipe in demuxer thread
      t5504: drop sigpipe=ok from push tests
      remote.c: spell __attribute__ correctly
      t5550: fix typo in $HTTPD_URL
      t5550: break submodule config test into multiple sub-tests
      submodule: export sanitized GIT_CONFIG_PARAMETERS
      submodule--helper: move config-sanitizing to submodule.c
      submodule: use prepare_submodule_repo_env consistently
      submodule: stop sanitizing config options
      t6302: simplify non-gpg cases
      rebase--interactive: avoid empty list in shell for-loop
      test-lib: set BASH_XTRACEFD automatically
      t/lib-git-svn: drop $remote_git_svn and $git_svn_id
      t9100,t3419: enclose all test code in single-quotes
      t9107: use "return 1" instead of "exit 1"
      t9107: switch inverted single/double quotes in test
      t9103: modernize test style
      always quote shell arguments to test -z/-n
      cat-file: avoid noop calls to sha1_object_info_extended
      cat-file: default to --buffer when --batch-all-objects is used
      archive-tar: convert snprintf to xsnprintf
      test-lib: add in-shell "env" replacement

Jiang Xin (2):
      l10n: git.pot: v2.9.0 round 1 (104 new, 37 removed)
      l10n: zh_CN: for git v2.9.0 l10n round 1

Johannes Schindelin (16):
      replace --edit: respect core.editor
      name-rev: include taggerdate in considering the best name
      win32mmap: set errno appropriately
      mmap(win32): avoid copy-on-write when it is unnecessary
      mmap(win32): avoid expensive fstat() call
      http: support sending custom HTTP headers
      tests: adjust the configuration for Apache 2.2
      t5551: make the test for extra HTTP headers more robust
      t3404: fix typo
      submodule: ensure that -c http.extraheader is heeded
      mingw: introduce the 'core.hideDotFiles' setting
      mingw: remove unnecessary definition
      Windows: only add a no-op pthread_sigmask() when needed
      perf: let's disable symlinks when they are not available
      perf: make the tests work in worktrees
      perf: run "rebase -i" under perf

Johannes Sixt (4):
      Windows: shorten code by re-using convert_slashes()
      Windows: add pthread_sigmask() that does nothing
      t6044: replace seq by test_seq
      rebase -i: remove an unnecessary 'rerere' invocation

John Keeping (3):
      config: fail if --get-urlmatch finds no value
      Documentation/git-config: use bulleted list for exit codes
      Documentation/git-config: fix --get-all description

Junio C Hamano (82):
      rerere: split conflict ID further
      rerere: scan $GIT_DIR/rr-cache/$ID when instantiating a rerere_id
      index-pack: correct --keep[=<msg>]
      index-pack: add a helper function to derive .idx/.keep filename
      rerere: handle leftover rr-cache/$ID directory and postimage files
      rerere: delay the recording of preimage
      rerere: allow multiple variants to exist
      t4200: rerere a merge with two identical conflicts
      rerere: do use multiple variants
      apply: remove unused call to free() in gitdiff_{old,new}name()
      merge: fix NULL pointer dereference when merging nothing into void
      merge: refuse to create too cool a merge by default
      pretty: enable --expand-tabs by default for selected pretty formats
      pretty: allow tweaking tabwidth in --expand-tabs
      submodule--helper: do not borrow absolute_path() result for too long
      Git 2.8.1
      First batch for post 2.8 cycle
      pretty: test --expand-tabs
      Makefile: fix misdirected redirections
      Second batch for post 2.8 cycle
      Makefile: stop pretending to support rpmbuild
      rerere: gc and clear
      rerere: move code related to "forget" together
      rerere: split code to call ll_merge() further
      rerere: adjust 'forget' to multi-variant world order
      setup.c: do not feed NULL to "%.*s" even with precision 0
      Third batch for post 2.8 cycle
      http: differentiate socks5:// and socks5h://
      t1020: do not overuse printf and use write_script
      t3404: use write_script
      Fourth batch for post 2.8 cycle
      Start preparing for 2.8.2
      fsck_commit_buffer(): do not special case the last validation
      ll-merge: fix typo in comment
      Prepare for 2.8.2
      Makefile: clean *.o files we create
      Fifth batch for post 2.8 cycle
      t3033: avoid 'ambiguous refs' warning
      pull: pass --allow-unrelated-histories to "git merge"
      Sixth batch for post 2.8 cycle
      send-email: fix grammo in the prompt that asks e-mail recipients
      Seventh batch for post 2.8 cycle
      Git 2.8.2
      Eighth batch for 2.9
      diff: undocument the compaction heuristic knobs for experimentation
      Start preparing for 2.8.3
      commit-tree: do not pay attention to commit.gpgsign
      Ninth batch for 2.9
      config: describe 'pathname' value type
      Tenth batch for 2.9
      Almost ready for 2.8.3
      test-lib-functions.sh: remove misleading comment on test_seq
      test-lib-functions.sh: rewrite test_seq without Perl
      ll-merge: use a longer conflict marker for internal merge
      t6036: remove pointless test that expects failure
      Documentation: fix linkgit references
      fsck: detect and warn a commit with embedded NUL
      ci: validate "linkgit:" in documentation
      test-parse-options: fix output when callback option fails
      test-parse-options: --expect=<string> option to simplify tests
      t0040: remove unused test helpers
      t0040: convert a few tests to use test-parse-options --expect
      Eleventh batch for 2.9
      rerere: plug memory leaks upon "rerere forget" failure
      Twelfth batch for 2.9
      Thirteenth batch for 2.9
      Git 2.8.3
      rerere: remove an null statement
      Git 2.9-rc0
      t4204: do not let $name variable clobbered
      Start preparing for 2.8.4
      Final batch before 2.9-rc1
      More topics for 2.8.4
      Git 2.9-rc1
      t5500 & t7403: lose bash-ism "local"
      t2300: run git-sh-setup in an environment that better mimics the real life
      Almost ready for 2.9-rc2
      Git 2.8.4
      Git 2.9-rc2
      diff: disable compaction heuristic for now
      Hopefully the final last-minute update before 2.9 final
      Git 2.9

Karsten Blees (1):
      mingw: make isatty() recognize MSYS2's pseudo terminals (/dev/pty*)

Kazuki Yamaguchi (10):
      branch -d: refuse deleting a branch which is currently checked out
      refs: add a new function set_worktree_head_symref
      branch -m: update all per-worktree HEADs
      set_worktree_head_symref(): fix error message
      imap-send: use HMAC() function provided by OpenSSL
      imap-send: check NULL return of SSL_CTX_new()
      imap-send: avoid deprecated TLSv1_method()
      configure: remove checking for HMAC_CTX_cleanup
      imap-send: check for NOLOGIN capability only when using LOGIN command
      imap-send: fix CRAM-MD5 response calculation

Keller Fuchs (1):
      Documentation: clarify signature verification

Lars Schneider (8):
      git-p4: map a P4 user to Git author name and email address
      travis-ci: update Git-LFS and P4 to the latest version
      travis-ci: express Linux/OS X dependency versions more clearly
      git-p4: fix Git LFS pointer parsing
      t9824: fix wrong reference value
      Documentation: add setup instructions for Travis CI
      travis-ci: build documentation
      travis-ci: enable Git SVN tests t91xx on Linux

Laurent Arnoud (1):
      tag: add the option to force signing of annotated tags

Li Peng (1):
      typofix: assorted typofixes in comments, documentation and messages

Linus Torvalds (1):
      pretty: expand tabs in indented logs to make things line up properly

Luke Diamand (3):
      git-p4 tests: cd to / before running python
      git-p4 tests: work with python3 as well as python2
      git-p4 tests: time_in_seconds should use $PYTHON_PATH

Marios Titas (2):
      ident: check for useConfigOnly before auto-detection of name/email
      ident: give "please tell me" message upon useConfigOnly error

Matthieu Moy (13):
      Documentation/diff-config: fix description of diff.renames
      t4001-diff-rename: wrap file creations in a test
      t: add tests for diff.renames (true/false/unset)
      log: introduce init_log_defaults()
      diff: activate diff.renames by default
      lockfile: mark strings for translation
      lockfile: improve error message when lockfile exists
      git.spec.in: use README.md, not README
      README.md: don't take 'commandname' literally
      git-multimail: update to release 1.3.0
      git-multimail: update to release 1.3.1
      Makefile: move 'ifdef DEVELOPER' after config.mak* inclusion
      Makefile: add $(DEVELOPER_CFLAGS) variable

Mehul Jain (9):
      git-pull.c: introduce git_pull_config()
      pull --rebase: add --[no-]autostash flag
      t5520: use consistent capitalization in test titles
      t5520: ensure consistent test conditions
      t5520: use better test to check stderr output
      t5520: factor out common "successful autostash" code
      t5520: factor out common "failing autostash" code
      t5520: reduce commom lines of code
      t5520: test --[no-]autostash with pull.rebase=true

Michael Haggerty (19):
      t1430: test the output and error of some commands more carefully
      t1430: clean up broken refs/tags/shadow
      t1430: don't rely on symbolic-ref for creating broken symrefs
      t1430: test for-each-ref in the presence of badly-named refs
      t1430: improve test coverage of deletion of badly-named refs
      resolve_missing_loose_ref(): simplify semantics
      resolve_ref_unsafe(): use for loop to count up to MAXDEPTH
      resolve_ref_unsafe(): ensure flags is always set
      resolve_ref_1(): eliminate local variable
      resolve_ref_1(): reorder code
      resolve_ref_1(): eliminate local variable "bad_name"
      read_raw_ref(): manage own scratch space
      files-backend: inline resolve_ref_1() into resolve_ref_unsafe()
      read_raw_ref(): change flags parameter to unsigned int
      fsck_head_link(): remove unneeded flag variable
      cmd_merge(): remove unneeded flag variable
      checkout_paths(): remove unneeded flag variable
      check_aliased_update(): check that dst_name is non-NULL
      show_head_ref(): check the result of resolve_ref_namespace()

Michael J Gruber (1):
      completion: complete --cherry-mark for git log

Michael Procter (1):
      upload-pack: use argv_array for pack_objects

Michael Rappazzo (1):
      Documentation: add instructions to help setup gmail 2FA

Nguyễn Thái Ngọc Duy (62):
      git-apply.txt: remove a space
      git-apply.txt: mention the behavior inside a subdir
      apply: report patch skipping in verbose mode
      test helpers: move test-* to t/helper/ subdirectory
      dir.c: remove dead function fnmatch_icase()
      wrapper.c: delete dead function git_mkstemps()
      dir.c: rename str(n)cmp_icase to fspath(n)cmp
      path.c: add git_common_path() and strbuf_git_common_path()
      worktree.c: store "id" instead of "git_dir"
      worktree.c: make find_shared_symref() return struct worktree *
      worktree.c: mark current worktree
      path.c: refactor and add worktree_git_path()
      wt-status.c: split rebase detection out of wt_status_get_state()
      wt-status.c: make wt_status_check_rebase() work on any worktree
      worktree.c: avoid referencing to worktrees[i] multiple times
      worktree.c: check whether branch is rebased in another worktree
      wt-status.c: split bisect detection out of wt_status_get_state()
      worktree.c: check whether branch is bisected in another worktree
      branch: do not rename a branch under bisect or rebase
      remote.c: specify correct plural form in "commit diverge" message
      usage.c: move format processing out of die_errno()
      usage.c: add warning_errno() and error_errno()
      bisect.c: use die_errno() and warning_errno()
      builtin/am.c: use error_errno()
      builtin/branch.c: use error_errno()
      builtin/fetch.c: use error_errno()
      builtin/help.c: use warning_errno()
      builtin/mailsplit.c: use error_errno()
      builtin/merge-file.c: use error_errno()
      builtin/pack-objects.c: use die_errno() and warning_errno()
      builtin/rm.c: use warning_errno()
      builtin/update-index.c: prefer "err" to "errno" in process_lstat_error
      builtin/upload-archive.c: use error_errno()
      builtin/worktree.c: use error_errno()
      check-racy.c: use error_errno()
      combine-diff.c: use error_errno()
      compat/win32/syslog.c: use warning_errno()
      config.c: use error_errno()
      connected.c: use error_errno()
      copy.c: use error_errno()
      credential-cache--daemon.c: use warning_errno()
      diff-no-index.c: use error_errno()
      editor.c: use error_errno()
      entry.c: use error_errno()
      fast-import.c: use error_errno()
      gpg-interface.c: use error_errno()
      grep.c: use error_errno()
      http.c: use error_errno() and warning_errno()
      ident.c: use warning_errno()
      mailmap.c: use error_errno()
      reachable.c: use error_errno()
      rerere.c: use error_errno() and warning_errno()
      run-command.c: use error_errno()
      sequencer.c: use error_errno()
      server-info.c: use error_errno()
      sha1_file.c: use {error,die,warning}_errno()
      transport-helper.c: use error_errno()
      unpack-trees.c: use error_errno()
      upload-pack.c: use error_errno()
      vcs-svn: use error_errno()
      wrapper.c: use warning_errno()
      wrap-for-bin.sh: regenerate bin-wrappers when switching branches

Nikola Forró (1):
      difftool/mergetool: make the form of yes/no questions consistent

Ori Avtalion (1):
      Documentation: git diff --check detects conflict markers

Pablo Santiago Blum de Aguiar (1):
      git-cherry-pick.txt: correct a small typo

Peter Krefting (1):
      l10n: sv.po: Update Swedish translation (2597t0f0u)

Pranit Bauva (9):
      t/t7502 : drop duplicate test
      api-parse-options.txt: document OPT_CMDMODE()
      t0040-test-parse-options.sh: fix style issues
      test-parse-options: print quiet as integer
      t0040-parse-options: improve test coverage
      t/t7507: improve test coverage
      parse-options.c: make OPTION_COUNTUP respect "unspecified" values
      t7507-commit-verbose: improve test coverage by testing number of diffs
      commit: add a commit.verbose config variable

Ralf Thielow (5):
      completion: add option '--guides' to 'git help'
      completion: add 'revisions' and 'everyday' to 'git help'
      rebase-i: print an abbreviated hash when stop for editing
      string_list: use string-list API in unsorted_string_list_lookup()
      l10n: de.po: translate 104 new messages

Ramsay Jones (3):
      xdiff/xprepare: use the XDF_DIFF_ALG() macro to access flag bits
      xdiff/xprepare: fix a memory leak
      log: document the --decorate=auto option

Ray Chen (1):
      l10n: zh_CN: review for git v2.9.0 l10n round 1

Ray Zhang (1):
      worktree: add: introduce --checkout option

René Nyffenegger (1):
      Documentation: fix typo 'In such these cases'

René Scharfe (3):
      apply: remove unused parameters from name_terminate()
      patch-id: use starts_with() and skip_prefix()
      perf: make the tests work without a worktree

SZEDER Gábor (6):
      diffcore: fix iteration order of identical files during rename detection
      for-each-ref: fix description of '--contains' in manpage
      test-lib: simplify '--option=value' parsing
      t9824: fix broken &&-chain in a subshell
      t5510: run auto-gc in the foreground
      Documentation/git-send-email: fix typo in gmail 2FA section

Santiago Torres (6):
      builtin/verify-tag.c: ignore SIGPIPE in gpg-interface
      t7030: test verifying multiple tags
      verify-tag: update variable name and type
      verify-tag: prepare verify_tag for libification
      verify-tag: move tag verification code to tag.c
      tag -v: verify directly rather than exec-ing verify-tag

Saurav Sachidanand (1):
      dir: store EXC_FLAG_* values in unsigned integers

Shin Kojima (1):
      gitweb: apply fallback encoding before highlight

Sidhant Sharma [:tk] (1):
      builtin/receive-pack.c: use parse_options API

Stanislav Kolotinskiy (1):
      git-send-pack: fix --all option when used with directory

Stefan Beller (46):
      submodule-config: keep update strategy around
      submodule-config: drop check against NULL
      fetching submodules: respect `submodule.fetchJobs` config option
      submodule update: direct error message to stderr
      run_processes_parallel: treat output of children as byte array
      run_processes_parallel: rename parameters for the callbacks
      git submodule update: have a dedicated helper for cloning
      submodule helper: remove double 'fatal: ' prefix
      submodule update: expose parallelism to the user
      clone: allow an explicit argument for parallel submodule clones
      clone tests: rename t57* => t56*
      rebase: decouple --exec from --interactive
      t3404: cleanup double empty lines between tests
      submodule foreach: correct path display in recursive submodules
      submodule update --init: correct path handling in recursive submodules
      submodule status: correct path handling in recursive submodules
      submodule update: align reporting path for custom command execution
      submodule update: test recursive path reporting from subdirectory
      t7407: make expectation as clear as possible
      recursive submodules: test for relative paths
      submodule--helper: fix potential NULL-dereference
      submodule--helper clone: create the submodule path just once
      notes: don't leak memory in git_config_get_notes_strategy
      abbrev_sha1_in_line: don't leak memory
      bundle: don't leak an fd in case of early return
      credential-cache, send_request: close fd when done
      submodule--helper, module_clone: always operate on absolute paths
      submodule--helper, module_clone: catch fprintf failure
      submodule: port resolve_relative_url from shell to C
      submodule: port init from shell to C
      xdiff: implement empty line chunk heuristic
      mv: allow moving nested submodules
      clone: add `--shallow-submodules` flag
      config doc: improve exit code listing
      config.c: drop local variable
      submodule-config: don't shadow `cache`
      submodule init: fail gracefully with a missing .gitmodules file
      submodule--helper update-clone: abort gracefully on missing .gitmodules
      submodule deinit test: fix broken && chain in subshell
      submodule init: redirect stdout to stderr
      t7300: mark test with SANITY
      submodule deinit: require '--all' instead of '.' for all submodules
      t3513: do not compress backup tar file
      t6041: do not compress backup tar file
      submodule--helper: offer a consistent API
      submodule: remove bashism from shell script

Stephen P. Smith (1):
      wt-status.c: set commitable bit if there is a meaningful merge.

Sven Strickroth (3):
      commit: do not lose SQUASH_MSG contents
      MSVC: vsnprintf in Visual Studio 2015 doesn't need SNPRINTF_SIZE_CORR any more
      MSVC: use shipped headers instead of fallback definitions

Torsten Bögershausen (6):
      correct blame for files commited with CRLF
      t0027: make commit_chk_wrnNNO() reliable
      convert: allow core.autocrlf=input and core.eol=crlf
      t0027: test cases for combined attributes
      convert.c: ident + core.autocrlf didn't work
      t5601: Remove trailing space in sed expression

Trần Ngọc Quân (1):
      l10n: Updated Vietnamese translation (2597t)

Vasco Almeida (19):
      l10n: fr: fix transcation of "dir"
      l10n: fr: fix wrongly translated option name
      l10n: fr: change "id de clé" to match "id-clé"
      l10n: fr: don't translate "merge" as a parameter
      i18n: index-pack: use plural string instead of normal one
      i18n: builtin/branch.c: mark option for translation
      i18n: unpack-trees: mark strings for translation
      i18n: builtin/rm.c: remove a comma ',' from string
      i18n: branch: unmark string for translation
      i18n: branch: move comment for translators
      i18n: git-parse-remote.sh: mark strings for translation
      i18n: builtin/pull.c: mark placeholders for translation
      i18n: builtin/pull.c: split strings marked for translation
      i18n: remote: add comment for translators
      Documentation/git-mailinfo: fix typo
      i18n: unpack-trees: avoid substituting only a verb in sentences
      l10n: pt_PT: merge git.pot file
      l10n: pt_PT: update according to git-gui glossary
      l10n: pt_PT: update Portuguese translation

Xiaolong Ye (4):
      patch-ids: make commit_patch_id() a public helper function
      format-patch: add '--base' option to record base tree info
      format-patch: introduce --base=auto option
      format-patch: introduce format.useAutoBase configuration

brian m. carlson (6):
      sha1-name: introduce a get_oid() function
      test-match-trees: convert to use struct object_id
      match-trees: convert shift_tree() and shift_tree_by() to use object_id
      struct name_entry: use struct object_id instead of unsigned char sha1[20]
      tree-walk: convert tree_entry_extract() to use struct object_id
      match-trees: convert several leaf functions to use struct object_id

Ævar Arnfjörð Bjarmason (4):
      githooks.txt: improve the intro section
      githooks.txt: amend dangerous advice about 'update' hook ACL
      githooks.txt: minor improvements to the grammar & phrasing
      hooks: allow customizing where the hook directory is

^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.9.0-rc2
@ 2016-06-07  5:57  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2016-06-07  5:57 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

A release candidate Git v2.9.0-rc2 is now available for testing
at the usual places.  It is comprised of 477 non-merge commits
since v2.8.0, contributed by 67 people, 27 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.9.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.8.0 are as follows.
Welcome to the Git development community!

  Alexander Rinass, Armin Kunaschik, Benjamin Dopplinger,
  Ben Woosley, Erwan Mathoniere, Gabriel Souza Franco, Jacob
  Nisnevich, Jan Durovec, Jean-Noël Avila, Kazuki Yamaguchi,
  Keller Fuchs, Laurent Arnoud, Li Peng, Marios Titas, Mehul Jain,
  Michael Procter, Nikola Forró, Pablo Santiago Blum de Aguiar,
  Pranit Bauva, Ray Zhang, René Nyffenegger, Santiago Torres,
  Saurav Sachidanand, Shin Kojima, Sidhant Sharma [:tk], Stanislav
  Kolotinskiy, and Xiaolong Ye.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alexander Kuleshov,
  brian m. carlson, Brian Norris, Christian Couder, David Aguilar,
  David Turner, Dennis Kaarsemaker, Elia Pinto, Elijah Newren,
  Eric Sunshine, Eric Wong, Felipe Contreras, Jacob Keller,
  Jeff King, Jiang Xin, Johannes Schindelin, Johannes Sixt,
  John Keeping, Junio C Hamano, Karsten Blees, Lars Schneider,
  Linus Torvalds, Luke Diamand, Matthieu Moy, Michael Haggerty,
  Michael J Gruber, Michael Rappazzo, Nguyễn Thái Ngọc
  Duy, Ori Avtalion, Ralf Thielow, Ramsay Jones, René Scharfe,
  Stefan Beller, Stephen P. Smith, Sven Strickroth, SZEDER Gábor,
  Torsten Bögershausen, and Vasco Almeida.

----------------------------------------------------------------

Git 2.9 Release Notes (draft)
=============================

Backward compatibility notes
----------------------------

The end-user facing Porcelain level commands in the "git diff" and
"git log" family by default enable the rename detection; you can still
use "diff.renames" configuration variable to disable this.

Merging two branches that have no common ancestor with "git merge" is
by default forbidden now to prevent creating such an unusual merge by
mistake.

The output formats of "git log" that indents the commit log message by
4 spaces now expands HT in the log message by default.  You can use
the "--no-expand-tabs" option to disable this.

"git commit-tree" plumbing command required the user to always sign
its result when the user sets the commit.gpgsign configuration
variable, which was an ancient mistake, which this release corrects.
A script that drives commit-tree, if it relies on this mistake, now
needs to read commit.gpgsign and pass the -S option as necessary.


Updates since v2.8
------------------

UI, Workflows & Features

 * Comes with git-multimail 1.3.1 (in contrib/).

 * The end-user facing commands like "git diff" and "git log"
   now enable the rename detection by default.

 * The credential.helper configuration variable is cumulative and
   there is no good way to override it from the command line.  As
   a special case, giving an empty string as its value now serves
   as the signal to clear the values specified in various files.

 * A new "interactive.diffFilter" configuration can be used to
   customize the diff shown in "git add -i" sessions.

 * "git p4" now allows P4 author names to be mapped to Git author
   names.

 * "git rebase -x" can be used without passing "-i" option.

 * "git -c credential.<var>=<value> submodule" can now be used to
   propagate configuration variables related to credential helper
   down to the submodules.

 * "git tag" can create an annotated tag without explicitly given an
   "-a" (or "-s") option (i.e. when a tag message is given).  A new
   configuration variable, tag.forceSignAnnotated, can be used to tell
   the command to create signed tag in such a situation.

 * "git merge" used to allow merging two branches that have no common
   base by default, which led to a brand new history of an existing
   project created and then get pulled by an unsuspecting maintainer,
   which allowed an unnecessary parallel history merged into the
   existing project.  The command has been taught not to allow this by
   default, with an escape hatch "--allow-unrelated-histories" option
   to be used in a rare event that merges histories of two projects
   that started their lives independently.

 * "git pull" has been taught to pass the "--allow-unrelated-histories"
   option to underlying "git merge".

 * "git apply -v" learned to report paths in the patch that were
   skipped via --include/--exclude mechanism or being outside the
   current working directory.

 * Shell completion (in contrib/) updates.

 * The commit object name reported when "rebase -i" stops has been
   shortened.

 * "git worktree add" can be given "--no-checkout" option to only
   create an empty worktree without checking out the files.

 * "git mergetools" learned to drive ExamDiff.

 * "git pull --rebase" learned "--[no-]autostash" option, so that
   the rebase.autostash configuration variable set to true can be
   overridden from the command line.

 * When "git log" shows the log message indented by 4-spaces, the
   remainder of a line after a HT does not align in the way the author
   originally intended.  The command now expands tabs by default to help
   such a case, and allows the users to override it with a new option,
   "--no-expand-tabs".

 * "git send-email" now uses a more readable timestamps when
   formulating a message ID.

 * "git rerere" can encounter two or more files with the same conflict
   signature that have to be resolved in different ways, but there was
   no way to record these separate resolutions.

 * "git p4" learned to record P4 jobs in Git commit that imports from
   the history in Perforce.

 * "git describe --contains" often made a hard-to-justify choice of
   tag to name a given commit, because it tried to come up
   with a name with smallest number of hops from a tag, causing an old
   commit whose close descendant that is recently tagged were not
   described with respect to an old tag but with a newer tag.  It did
   not help that its computation of "hop" count was further tweaked to
   penalize being on a side branch of a merge.  The logic has been
   updated to favor using the tag with the oldest tagger date, which
   is a lot easier to explain to the end users: "We describe a commit
   in terms of the (chronologically) oldest tag that contains the
   commit."

 * "git clone" learned the "--shallow-submodules" option.

 * HTTP transport clients learned to throw extra HTTP headers at the
   server, specified via http.extraHeader configuration variable.

 * Patch output from "git diff" and friends has been tweaked to be
   more readable by using a blank line as a strong hint that the
   contents before and after it belong to logically separate units.

 * A new configuration variable core.hooksPath allows customizing
   where the hook directory is.

 * An earlier addition of "sanitize_submodule_env" with 14111fc4 (git:
   submodule honor -c credential.* from command line, 2016-02-29)
   turned out to be a convoluted no-op; implement what it wanted to do
   correctly, and stop filtering settings given via "git -c var=val".

 * "git commit --dry-run" reported "No, no, you cannot commit." in one
   case where "git commit" would have allowed you to commit, and this
   improves it a little bit ("git commit --dry-run --short" still does
   not give you the correct answer, for example).  This is a stop-gap
   measure in that "commit --short --dry-run" still gives an incorrect
   result.

 * The experimental "multiple worktree" feature gains more safety to
   forbid operations on a branch that is checked out or being actively
   worked on elsewhere, by noticing that e.g. it is being rebased.

 * "git format-patch" learned a new "--base" option to record what
   (public, well-known) commit the original series was built on in
   its output.

 * "git commit" learned to pay attention to the "commit.verbose"
   configuration variable and act as if the "--verbose" option
   was given from the command line.

 * Updated documentation gives hints to GMail users with two-factor
   auth enabled that they need app-specific-password when using
   "git send-email".

 * The manpage output of our documentation did not render well in
   terminal; typeset literals in bold by default to make them stand
   out more.

 * The mark-up in the top-level README.md file has been updated to
   typeset CLI command names differently from the body text.


Performance, Internal Implementation, Development Support etc.

 * The embedded args argv-array in the child process is used to build
   the command line to run pack-objects instead of using a separate
   array of strings.

 * A test for tags has been restructured so that more parts of it can
   easily be run on a platform without a working GnuPG.

 * The startup_info data, which records if we are working inside a
   repository (among other things), are now uniformly available to Git
   subcommand implementations, and Git avoids attempting to touch
   references when we are not in a repository.

 * The command line argument parser for "receive-pack" has been
   rewritten to use parse-options.

 * A major part of "git submodule update" has been ported to C to take
   advantage of the recently added framework to run download tasks in
   parallel.  Other updates to "git submodule" that move pieces of
   logic to C continues.

 * Rename bunch of tests on "git clone" for better organization.

 * The tests that involve running httpd leaked the system-wide
   configuration in /etc/gitconfig to the tested environment.

 * Build updates for MSVC.

 * The repository set-up sequence has been streamlined (the biggest
   change is that there is no longer git_config_early()), so that we
   do not attempt to look into refs/* when we know we do not have a
   Git repository.

 * Code restructuring around the "refs" API to prepare for pluggable
   refs backends.

 * Sources to many test helper binaries and the generated helpers
   have been moved to t/helper/ subdirectory to reduce clutter at the
   top level of the tree.

 * Unify internal logic between "git tag -v" and "git verify-tag"
   commands by making one directly call into the other.

 * "merge-recursive" strategy incorrectly checked if a path that is
   involved in its internal merge exists in the working tree.

 * The test scripts for "git p4" (but not "git p4" implementation
   itself) has been updated so that they would work even on a system
   where the installed version of Python is python 3.

 * As nobody maintains our in-tree git.spec.in and distros use their
   own spec file, we stopped pretending that we support "make rpm".

 * Move from "unsigned char[20]" to "struct object_id" continues.

 * The code for warning_errno/die_errno has been refactored and a new
   error_errno() reporting helper is introduced.
   (merge 1da045f nd/error-errno later to maint).

 * Running tests with '-x' option to trace the individual command
   executions is a useful way to debug test scripts, but some tests
   that capture the standard error stream and check what the command
   said can be broken with the trace output mixed in.  When running
   our tests under "bash", however, we can redirect the trace output
   to another file descriptor to keep the standard error of programs
   being tested intact.

 * t0040 had too many unnecessary repetitions in its test data.  Teach
   test-parse-options program so that a caller can tell what it
   expects in its output, so that these repetitions can be cleaned up.

 * Add perf test for "rebase -i".

 * Common mistakes when writing gitlink: in our documentation are
   found by "make check-docs".

 * t9xxx series has been updated primarily for readability, while
   fixing small bugs in it.  A few scripted Porcelain commands have
   also been updated to fix possible bugs around their use of
   "test -z" and "test -n".

 * CI test was taught to run git-svn tests.

 * "git cat-file --batch-all" has been sped up, by taking advantage
   of the fact that it does not have to read a list of objects, in two
   ways.

 * test updates to make it more readable and maintainable.
   (merge e6273f4 es/t1500-modernize later to maint).

 * "make DEVELOPER=1" worked as expected; setting DEVELOPER=1 in
   config.mak didn't.
   (merge 51dd3e8 mm/makefile-developer-can-be-in-config-mak later to maint).

 * The way how "submodule--helper list" signals unmatch error to its
   callers has been updated.

 * A bash-ism "local" has been removed from "git submodule" scripted
   Porcelain.


Also contains various documentation updates and code clean-ups.


Fixes since v2.8
----------------

Unless otherwise noted, all the fixes since v2.8 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * "git config --get-urlmatch", unlike other variants of the "git
   config --get" family, did not signal error with its exit status
   when there was no matching configuration.

 * The "--local-env-vars" and "--resolve-git-dir" options of "git
   rev-parse" failed to work outside a repository when the command's
   option parsing was rewritten in 1.8.5 era.

 * "git index-pack --keep[=<msg>] pack-$name.pack" simply did not work.

 * Fetching of history by naming a commit object name directly didn't
   work across remote-curl transport.

 * A small memory leak in an error codepath has been plugged in xdiff
   code.

 * strbuf_getwholeline() did not NUL-terminate the buffer on certain
   corner cases in its error codepath.

 * "git mergetool" did not work well with conflicts that both sides
   deleted.

 * "git send-email" had trouble parsing alias file in mailrc format
   when lines in it had trailing whitespaces on them.

 * When "git merge --squash" stopped due to conflict, the concluding
   "git commit" failed to read in the SQUASH_MSG that shows the log
   messages from all the squashed commits.

 * "git merge FETCH_HEAD" dereferenced NULL pointer when merging
   nothing into an unborn history (which is arguably unusual usage,
   which perhaps was the reason why nobody noticed it).

 * When "git worktree" feature is in use, "git branch -d" allowed
   deletion of a branch that is checked out in another worktree,
   which was wrong.

 * When "git worktree" feature is in use, "git branch -m" renamed a
   branch that is checked out in another worktree without adjusting
   the HEAD symbolic ref for the worktree.

 * "git diff -M" used to work better when two originally identical
   files A and B got renamed to X/A and X/B by pairing A to X/A and B
   to X/B, but this was broken in the 2.0 timeframe.

 * "git send-pack --all <there>" was broken when its command line
   option parsing was written in the 2.6 timeframe.

 * "git format-patch --help" showed `-s` and `--no-patch` as if these
   are valid options to the command.  We already hide `--patch` option
   from the documentation, because format-patch is about showing the
   diff, and the documentation now hides these options as well.

 * When running "git blame $path" with unnormalized data in the index
   for the path, the data in the working tree was blamed, even though
   "git add" would not have changed what is already in the index, due
   to "safe crlf" that disables the line-end conversion.  It has been
   corrected.

 * A change back in version 2.7 to "git branch" broke display of a
   symbolic ref in a non-standard place in the refs/ hierarchy (we
   expect symbolic refs to appear in refs/remotes/*/HEAD to point at
   the primary branch the remote has, and as .git/HEAD to point at the
   branch we locally checked out).

 * A partial rewrite of "git submodule" in the 2.7 timeframe changed
   the way the gitdir: pointer in the submodules point at the real
   repository location to use absolute paths by accident.  This has
   been corrected.

 * "git commit" misbehaved in a few minor ways when an empty message
   is given via -m '', all of which has been corrected.

 * Support for CRAM-MD5 authentication method in "git imap-send" did
   not work well.

 * Upcoming OpenSSL 1.1.0 will break compilation by updating a few API
   elements we use in imap-send, which has been adjusted for the change.

 * The socks5:// proxy support added back in 2.6.4 days was not aware
   that socks5h:// proxies behave differently from socks5:// proxies.

 * "git config" had a codepath that tried to pass a NULL to
   printf("%s"), which nobody seems to have noticed.

 * On Cygwin, object creation uses the "create a temporary and then
   rename it to the final name" pattern, not "create a temporary,
   hardlink it to the final name and then unlink the temporary"
   pattern.

   This is necessary to use Git on Windows shared directories, and is
   already enabled for the MinGW and plain Windows builds.  It also
   has been used in Cygwin packaged versions of Git for quite a while.
   See http://thread.gmane.org/gmane.comp.version-control.git/291853

 * "merge-octopus" strategy did not ensure that the index is clean
   when merge begins.

 * When "git merge" notices that the merge can be resolved purely at
   the tree level (without having to merge blobs) and the resulting
   tree happens to already exist in the object store, it forgot to
   update the index, which left an inconsistent state that would
   break later operations.

 * "git submodule" reports the paths of submodules the command
   recurses into, but these paths were incorrectly reported when
   the command was not run from the root level of the superproject.

 * The "user.useConfigOnly" configuration variable makes it an error
   if users do not explicitly set user.name and user.email.  However,
   its check was not done early enough and allowed another error to
   trigger, reporting that the default value we guessed from the
   system setting was unusable.  This was a suboptimal end-user
   experience as we want the users to set user.name/user.email without
   relying on the auto-detection at all.

 * "git mv old new" did not adjust the path for a submodule that lives
   as a subdirectory inside old/ directory correctly.

 * "git replace -e" did not honour "core.editor" configuration.

 * "git push" from a corrupt repository that attempts to push a large
   number of refs deadlocked; the thread to relay rejection notices
   for these ref updates blocked on writing them to the main thread,
   after the main thread at the receiving end notices that the push
   failed and decides not to read these notices and return a failure.

 * mmap emulation on Windows has been optimized and work better without
   consuming paging store when not needed.

 * A question by "git send-email" to ask the identity of the sender
   has been updated.

 * UI consistency improvements for "git mergetool".

 * "git rebase -m" could be asked to rebase an entire branch starting
   from the root, but failed by assuming that there always is a parent
   commit to the first commit on the branch.

 * Fix a broken "p4 lfs" test.

 * Recent update to Git LFS broke "git p4" by changing the output from
   its "lfs pointer" subcommand.

 * "git fetch" test t5510 was flaky while running a (forced) automagic
   garbage collection.

 * Documentation updates to help contributors setting up Travis CI
   test for their patches.

 * Some multi-byte encoding can have a backslash byte as a later part
   of one letter, which would confuse "highlight" filter used in
   gitweb.

 * "git commit-tree" plumbing command required the user to always sign
   its result when the user sets the commit.gpgsign configuration
   variable, which was an ancient mistake.  Rework "git rebase" that
   relied on this mistake so that it reads commit.gpgsign and pass (or
   not pass) the -S option to "git commit-tree" to keep the end-user
   expectation the same, while teaching "git commit-tree" to ignore
   the configuration variable.  This will stop requiring the users to
   sign commit objects used internally as an implementation detail of
   "git stash".

 * "http.cookieFile" configuration variable clearly wants a pathname,
   but we forgot to treat it as such by e.g. applying tilde expansion.

 * Consolidate description of tilde-expansion that is done to
   configuration variables that take pathname to a single place.

 * Correct faulty recommendation to use "git submodule deinit ." when
   de-initialising all submodules, which would result in a strange
   error message in a pathological corner case.

 * Many 'linkgit:<git documentation page>' references were broken,
   which are all fixed with this.

 * "git rerere" can get confused by conflict markers deliberately left
   by the inner merge step, because they are indistinguishable from
   the real conflict markers left by the outermost merge which are
   what the end user and "rerere" need to look at.  This was fixed by
   making the conflict markers left by the inner merges a bit longer.
   (merge 0f9fd5c jc/ll-merge-internal later to maint).

 * CI test was taught to build documentation pages.

 * "git fsck" learned to catch NUL byte in a commit object as
   potential error and warn.

 * Portability enhancement for "rebase -i" to help platforms whose
   shell does not like "for i in <empty>" (which is not POSIX-kosher).

 * On Windows, .git and optionally any files whose name starts with a
   dot are now marked as hidden, with a core.hideDotFiles knob to
   customize this behaviour.

 * Documentation for "git merge --verify-signatures" has been updated
   to clarify that the signature of only the commit at the tip is
   verified.  Also the phrasing used for signature and key validity is
   adjusted to align with that used by OpenPGP.

 * A couple of bugs around core.autocrlf have been fixed.

 * Many commands normalize command line arguments from NFD to NFC
   variant of UTF-8 on OSX, but commands in the "diff" family did
   not, causing "git diff $path" to complain that no such path is
   known to Git.  They have been taught to do the normalization.

 * "git difftool" learned to handle unmerged paths correctly in
   dir-diff mode.

 * The "are we talking with TTY, doing an interactive session?"
   detection has been updated to work better for "Git for Windows".

 * We forgot to add "git log --decorate=auto" to documentation when we
   added the feature back in v2.1.0 timeframe.
   (merge 462cbb4 rj/log-decorate-auto later to maint).

 * "git fast-import --export-marks" would overwrite the existing marks
   file even when it makes a dump from its custom die routine.
   Prevent it from doing so when we have an import-marks file but
   haven't finished reading it.
   (merge f4beed6 fc/fast-import-broken-marks-file later to maint).

 * "git rebase -i", after it fails to auto-resolve the conflict, had
   an unnecessary call to "git rerere" from its very early days, which
   was spotted recently; the call has been removed.
   (merge 7063693 js/rebase-i-dedup-call-to-rerere later to maint).

 * Other minor clean-ups and documentation updates
   (merge cd82b7a pa/cherry-pick-doc-typo later to maint).
   (merge 2bb73ae rs/patch-id-use-skip-prefix later to maint).
   (merge aa20cbc rs/apply-name-terminate later to maint).

----------------------------------------------------------------

Changes since v2.8.0 are as follows:

Adam Dinwoodie (2):
      config.mak.uname: Cygwin needs OBJECT_CREATION_USES_RENAMES
      commit: --amend -m '' silently fails to wipe message

Alexander Kuleshov (1):
      submodule-config: use hashmap_iter_first()

Alexander Rinass (1):
      diff: run arguments through precompose_argv

Armin Kunaschik (2):
      t4151: make sure argument to 'test -z' is given
      t0008: 4 tests fail with ksh88

Ben Woosley (1):
      git-rebase--merge: don't include absent parent as a base

Benjamin Dopplinger (1):
      README.md: format CLI commands with code syntax

Brian Norris (3):
      Documentation: config: improve word ordering for http.cookieFile
      http: expand http.cookieFile as a path
      config: consistently format $variables in monospaced font

Christian Couder (5):
      Documentation: talk about pager in api-trace.txt
      builtin/apply: get rid of useless 'name' variable
      builtin/apply: handle parse_binary() failure
      builtin/apply: free patch when parse_chunk() fails
      Git/SVN: die when there is no commit metadata

David Aguilar (4):
      mergetool: support delete/delete conflicts
      mergetool: honor tempfile configuration when resolving delete conflicts
      difftool: initialize variables for readability
      difftool: handle unmerged files in dir-diff mode

David Turner (5):
      refs: move head_ref{,_submodule} to the common code
      refs: move for_each_*ref* functions into common code
      files-backend: break out ref reading
      refs: move resolve_ref_unsafe into common code
      refs: on symref reflog expire, lock symref not referrent

Dennis Kaarsemaker (1):
      Makefile: remove dependency on git.spec

Elia Pinto (1):
      api-trace.txt: fix typo

Elijah Newren (6):
      merge-recursive: remove duplicate code
      merge-recursive: do not check working copy when creating a virtual merge base
      t7605: add a testcase demonstrating a bug with trivial merges
      builtin/merge.c: fix a bug with trivial merges
      merge-octopus: abort if index does not match HEAD
      t6044: new merge testcases for when index doesn't match HEAD

Eric Sunshine (10):
      lib-gpg: drop unnecessary "missing GPG" warning
      t6302: normalize names and descriptions of signed tags
      t6302: also test annotated in addition to signed tags
      t6302: skip only signed tags rather than all tests when GPG is missing
      git-format-patch.txt: don't show -s as shorthand for multiple options
      t1500: be considerate to future potential tests
      t1500: test_rev_parse: facilitate future test enhancements
      t1500: avoid changing working directory outside of tests
      t1500: avoid setting configuration options outside of tests
      t1500: avoid setting environment variables outside of tests

Eric Wong (4):
      send-email: more meaningful Message-ID
      send-email: do not load Data::Dumper
      pack-objects: warn on split packs disabling bitmaps
      .mailmap: update to my shorter email address

Erwan Mathoniere (1):
      Documentation: bold literals in man

Felipe Contreras (1):
      fast-import: do not truncate exported marks file

Gabriel Souza Franco (2):
      fetch-pack: fix object_id of exact sha1
      fetch-pack: update the documentation for "<refs>..." arguments

Jacob Keller (7):
      submodule: don't pass empty string arguments to submodule--helper clone
      submodule: check argc count for git submodule--helper clone
      submodule: fix submodule--helper clone usage
      submodule: fix segmentation fault in submodule--helper clone
      quote: implement sq_quotef()
      git: submodule honor -c credential.* from command line
      xdiff: add recs_match helper function

Jacob Nisnevich (2):
      mergetools: create mergetool_find_win32_cmd() helper function for winmerge
      mergetools: add support for ExamDiff

Jan Durovec (2):
      git-p4: clean-up code style in tests
      git-p4: add P4 jobs to git commit message

Jeff King (55):
      credential: let empty credential specs reset helper list
      t1515: add tests for rev-parse out-of-repo helpers
      add--interactive: allow custom diff highlighting programs
      rev-parse: let some options run outside repository
      strbuf_getwholeline: NUL-terminate getdelim buffer on error
      setup: make startup_info available everywhere
      setup: set startup_info->have_repository more reliably
      remote: don't resolve HEAD in non-repository
      mailmap: do not resolve blobs in a non-repository
      grep: turn off gitlink detection for --no-index
      use setup_git_directory() in test-* programs
      setup: document check_repository_format()
      wrap shared_repository global in get/set accessors
      lazily load core.sharedrepository
      check_repository_format_gently: stop using git_config_early
      config: drop git_config_early
      setup: refactor repo format reading and verification
      init: use setup.c's repo version verification
      setup: unify repository version callbacks
      setup: drop repository_format_version global
      verify_repository_format: mark messages for translation
      send-email: ignore trailing whitespace in mailrc alias file
      credential-cache--daemon: clarify "exit" action semantics
      t/lib-httpd: pass through GIT_CONFIG_NOSYSTEM env
      git_config_push_parameter: handle empty GIT_CONFIG_PARAMETERS
      branch: fix shortening of non-remote symrefs
      commit: do not ignore an empty message given by -m ''
      config: lower-case first word of error strings
      git_config_set_multivar_in_file: all non-zero returns are errors
      git_config_set_multivar_in_file: handle "unset" errors
      t5532: use write_script
      send-pack: close demux pipe before finishing async process
      run-command: teach async threads to ignore SIGPIPE
      send-pack: isolate sigpipe in demuxer thread
      fetch-pack: isolate sigpipe in demuxer thread
      t5504: drop sigpipe=ok from push tests
      remote.c: spell __attribute__ correctly
      t5550: fix typo in $HTTPD_URL
      t5550: break submodule config test into multiple sub-tests
      submodule: export sanitized GIT_CONFIG_PARAMETERS
      submodule--helper: move config-sanitizing to submodule.c
      submodule: use prepare_submodule_repo_env consistently
      submodule: stop sanitizing config options
      t6302: simplify non-gpg cases
      rebase--interactive: avoid empty list in shell for-loop
      test-lib: set BASH_XTRACEFD automatically
      t/lib-git-svn: drop $remote_git_svn and $git_svn_id
      t9100,t3419: enclose all test code in single-quotes
      t9107: use "return 1" instead of "exit 1"
      t9107: switch inverted single/double quotes in test
      t9103: modernize test style
      always quote shell arguments to test -z/-n
      cat-file: avoid noop calls to sha1_object_info_extended
      cat-file: default to --buffer when --batch-all-objects is used
      archive-tar: convert snprintf to xsnprintf

Johannes Schindelin (16):
      replace --edit: respect core.editor
      name-rev: include taggerdate in considering the best name
      win32mmap: set errno appropriately
      mmap(win32): avoid copy-on-write when it is unnecessary
      mmap(win32): avoid expensive fstat() call
      http: support sending custom HTTP headers
      tests: adjust the configuration for Apache 2.2
      t5551: make the test for extra HTTP headers more robust
      t3404: fix typo
      submodule: ensure that -c http.extraheader is heeded
      mingw: introduce the 'core.hideDotFiles' setting
      mingw: remove unnecessary definition
      Windows: only add a no-op pthread_sigmask() when needed
      perf: let's disable symlinks when they are not available
      perf: make the tests work in worktrees
      perf: run "rebase -i" under perf

Johannes Sixt (4):
      Windows: shorten code by re-using convert_slashes()
      Windows: add pthread_sigmask() that does nothing
      t6044: replace seq by test_seq
      rebase -i: remove an unnecessary 'rerere' invocation

John Keeping (3):
      config: fail if --get-urlmatch finds no value
      Documentation/git-config: use bulleted list for exit codes
      Documentation/git-config: fix --get-all description

Junio C Hamano (77):
      rerere: split conflict ID further
      rerere: scan $GIT_DIR/rr-cache/$ID when instantiating a rerere_id
      index-pack: correct --keep[=<msg>]
      index-pack: add a helper function to derive .idx/.keep filename
      rerere: handle leftover rr-cache/$ID directory and postimage files
      rerere: delay the recording of preimage
      rerere: allow multiple variants to exist
      t4200: rerere a merge with two identical conflicts
      rerere: do use multiple variants
      apply: remove unused call to free() in gitdiff_{old,new}name()
      merge: fix NULL pointer dereference when merging nothing into void
      merge: refuse to create too cool a merge by default
      pretty: enable --expand-tabs by default for selected pretty formats
      pretty: allow tweaking tabwidth in --expand-tabs
      submodule--helper: do not borrow absolute_path() result for too long
      Git 2.8.1
      First batch for post 2.8 cycle
      pretty: test --expand-tabs
      Makefile: fix misdirected redirections
      Second batch for post 2.8 cycle
      Makefile: stop pretending to support rpmbuild
      rerere: gc and clear
      rerere: move code related to "forget" together
      rerere: split code to call ll_merge() further
      rerere: adjust 'forget' to multi-variant world order
      setup.c: do not feed NULL to "%.*s" even with precision 0
      Third batch for post 2.8 cycle
      http: differentiate socks5:// and socks5h://
      t1020: do not overuse printf and use write_script
      t3404: use write_script
      Fourth batch for post 2.8 cycle
      Start preparing for 2.8.2
      fsck_commit_buffer(): do not special case the last validation
      ll-merge: fix typo in comment
      Prepare for 2.8.2
      Makefile: clean *.o files we create
      Fifth batch for post 2.8 cycle
      t3033: avoid 'ambiguous refs' warning
      pull: pass --allow-unrelated-histories to "git merge"
      Sixth batch for post 2.8 cycle
      send-email: fix grammo in the prompt that asks e-mail recipients
      Seventh batch for post 2.8 cycle
      Git 2.8.2
      Eighth batch for 2.9
      diff: undocument the compaction heuristic knobs for experimentation
      Start preparing for 2.8.3
      commit-tree: do not pay attention to commit.gpgsign
      Ninth batch for 2.9
      config: describe 'pathname' value type
      Tenth batch for 2.9
      Almost ready for 2.8.3
      test-lib-functions.sh: remove misleading comment on test_seq
      test-lib-functions.sh: rewrite test_seq without Perl
      ll-merge: use a longer conflict marker for internal merge
      t6036: remove pointless test that expects failure
      Documentation: fix linkgit references
      fsck: detect and warn a commit with embedded NUL
      ci: validate "linkgit:" in documentation
      test-parse-options: fix output when callback option fails
      test-parse-options: --expect=<string> option to simplify tests
      t0040: remove unused test helpers
      t0040: convert a few tests to use test-parse-options --expect
      Eleventh batch for 2.9
      rerere: plug memory leaks upon "rerere forget" failure
      Twelfth batch for 2.9
      Thirteenth batch for 2.9
      Git 2.8.3
      rerere: remove an null statement
      Git 2.9-rc0
      t4204: do not let $name variable clobbered
      Start preparing for 2.8.4
      Final batch before 2.9-rc1
      More topics for 2.8.4
      Git 2.9-rc1
      Almost ready for 2.9-rc2
      Git 2.8.4
      Git 2.9-rc2

Karsten Blees (1):
      mingw: make isatty() recognize MSYS2's pseudo terminals (/dev/pty*)

Kazuki Yamaguchi (10):
      branch -d: refuse deleting a branch which is currently checked out
      refs: add a new function set_worktree_head_symref
      branch -m: update all per-worktree HEADs
      set_worktree_head_symref(): fix error message
      imap-send: use HMAC() function provided by OpenSSL
      imap-send: check NULL return of SSL_CTX_new()
      imap-send: avoid deprecated TLSv1_method()
      configure: remove checking for HMAC_CTX_cleanup
      imap-send: check for NOLOGIN capability only when using LOGIN command
      imap-send: fix CRAM-MD5 response calculation

Keller Fuchs (1):
      Documentation: clarify signature verification

Lars Schneider (8):
      git-p4: map a P4 user to Git author name and email address
      travis-ci: update Git-LFS and P4 to the latest version
      travis-ci: express Linux/OS X dependency versions more clearly
      git-p4: fix Git LFS pointer parsing
      t9824: fix wrong reference value
      Documentation: add setup instructions for Travis CI
      travis-ci: build documentation
      travis-ci: enable Git SVN tests t91xx on Linux

Laurent Arnoud (1):
      tag: add the option to force signing of annotated tags

Li Peng (1):
      typofix: assorted typofixes in comments, documentation and messages

Linus Torvalds (1):
      pretty: expand tabs in indented logs to make things line up properly

Luke Diamand (3):
      git-p4 tests: cd to / before running python
      git-p4 tests: work with python3 as well as python2
      git-p4 tests: time_in_seconds should use $PYTHON_PATH

Marios Titas (2):
      ident: check for useConfigOnly before auto-detection of name/email
      ident: give "please tell me" message upon useConfigOnly error

Matthieu Moy (13):
      Documentation/diff-config: fix description of diff.renames
      t4001-diff-rename: wrap file creations in a test
      t: add tests for diff.renames (true/false/unset)
      log: introduce init_log_defaults()
      diff: activate diff.renames by default
      lockfile: mark strings for translation
      lockfile: improve error message when lockfile exists
      git.spec.in: use README.md, not README
      README.md: don't take 'commandname' literally
      git-multimail: update to release 1.3.0
      git-multimail: update to release 1.3.1
      Makefile: move 'ifdef DEVELOPER' after config.mak* inclusion
      Makefile: add $(DEVELOPER_CFLAGS) variable

Mehul Jain (9):
      git-pull.c: introduce git_pull_config()
      pull --rebase: add --[no-]autostash flag
      t5520: use consistent capitalization in test titles
      t5520: ensure consistent test conditions
      t5520: use better test to check stderr output
      t5520: factor out common "successful autostash" code
      t5520: factor out common "failing autostash" code
      t5520: reduce commom lines of code
      t5520: test --[no-]autostash with pull.rebase=true

Michael Haggerty (19):
      t1430: test the output and error of some commands more carefully
      t1430: clean up broken refs/tags/shadow
      t1430: don't rely on symbolic-ref for creating broken symrefs
      t1430: test for-each-ref in the presence of badly-named refs
      t1430: improve test coverage of deletion of badly-named refs
      resolve_missing_loose_ref(): simplify semantics
      resolve_ref_unsafe(): use for loop to count up to MAXDEPTH
      resolve_ref_unsafe(): ensure flags is always set
      resolve_ref_1(): eliminate local variable
      resolve_ref_1(): reorder code
      resolve_ref_1(): eliminate local variable "bad_name"
      read_raw_ref(): manage own scratch space
      files-backend: inline resolve_ref_1() into resolve_ref_unsafe()
      read_raw_ref(): change flags parameter to unsigned int
      fsck_head_link(): remove unneeded flag variable
      cmd_merge(): remove unneeded flag variable
      checkout_paths(): remove unneeded flag variable
      check_aliased_update(): check that dst_name is non-NULL
      show_head_ref(): check the result of resolve_ref_namespace()

Michael J Gruber (1):
      completion: complete --cherry-mark for git log

Michael Procter (1):
      upload-pack: use argv_array for pack_objects

Michael Rappazzo (1):
      Documentation: add instructions to help setup gmail 2FA

Nguyễn Thái Ngọc Duy (62):
      git-apply.txt: remove a space
      git-apply.txt: mention the behavior inside a subdir
      apply: report patch skipping in verbose mode
      test helpers: move test-* to t/helper/ subdirectory
      dir.c: remove dead function fnmatch_icase()
      wrapper.c: delete dead function git_mkstemps()
      dir.c: rename str(n)cmp_icase to fspath(n)cmp
      path.c: add git_common_path() and strbuf_git_common_path()
      worktree.c: store "id" instead of "git_dir"
      worktree.c: make find_shared_symref() return struct worktree *
      worktree.c: mark current worktree
      path.c: refactor and add worktree_git_path()
      wt-status.c: split rebase detection out of wt_status_get_state()
      wt-status.c: make wt_status_check_rebase() work on any worktree
      worktree.c: avoid referencing to worktrees[i] multiple times
      worktree.c: check whether branch is rebased in another worktree
      wt-status.c: split bisect detection out of wt_status_get_state()
      worktree.c: check whether branch is bisected in another worktree
      branch: do not rename a branch under bisect or rebase
      remote.c: specify correct plural form in "commit diverge" message
      usage.c: move format processing out of die_errno()
      usage.c: add warning_errno() and error_errno()
      bisect.c: use die_errno() and warning_errno()
      builtin/am.c: use error_errno()
      builtin/branch.c: use error_errno()
      builtin/fetch.c: use error_errno()
      builtin/help.c: use warning_errno()
      builtin/mailsplit.c: use error_errno()
      builtin/merge-file.c: use error_errno()
      builtin/pack-objects.c: use die_errno() and warning_errno()
      builtin/rm.c: use warning_errno()
      builtin/update-index.c: prefer "err" to "errno" in process_lstat_error
      builtin/upload-archive.c: use error_errno()
      builtin/worktree.c: use error_errno()
      check-racy.c: use error_errno()
      combine-diff.c: use error_errno()
      compat/win32/syslog.c: use warning_errno()
      config.c: use error_errno()
      connected.c: use error_errno()
      copy.c: use error_errno()
      credential-cache--daemon.c: use warning_errno()
      diff-no-index.c: use error_errno()
      editor.c: use error_errno()
      entry.c: use error_errno()
      fast-import.c: use error_errno()
      gpg-interface.c: use error_errno()
      grep.c: use error_errno()
      http.c: use error_errno() and warning_errno()
      ident.c: use warning_errno()
      mailmap.c: use error_errno()
      reachable.c: use error_errno()
      rerere.c: use error_errno() and warning_errno()
      run-command.c: use error_errno()
      sequencer.c: use error_errno()
      server-info.c: use error_errno()
      sha1_file.c: use {error,die,warning}_errno()
      transport-helper.c: use error_errno()
      unpack-trees.c: use error_errno()
      upload-pack.c: use error_errno()
      vcs-svn: use error_errno()
      wrapper.c: use warning_errno()
      wrap-for-bin.sh: regenerate bin-wrappers when switching branches

Nikola Forró (1):
      difftool/mergetool: make the form of yes/no questions consistent

Ori Avtalion (1):
      Documentation: git diff --check detects conflict markers

Pablo Santiago Blum de Aguiar (1):
      git-cherry-pick.txt: correct a small typo

Pranit Bauva (9):
      t/t7502 : drop duplicate test
      api-parse-options.txt: document OPT_CMDMODE()
      t0040-test-parse-options.sh: fix style issues
      test-parse-options: print quiet as integer
      t0040-parse-options: improve test coverage
      t/t7507: improve test coverage
      parse-options.c: make OPTION_COUNTUP respect "unspecified" values
      t7507-commit-verbose: improve test coverage by testing number of diffs
      commit: add a commit.verbose config variable

Ralf Thielow (4):
      completion: add option '--guides' to 'git help'
      completion: add 'revisions' and 'everyday' to 'git help'
      rebase-i: print an abbreviated hash when stop for editing
      string_list: use string-list API in unsorted_string_list_lookup()

Ramsay Jones (3):
      xdiff/xprepare: use the XDF_DIFF_ALG() macro to access flag bits
      xdiff/xprepare: fix a memory leak
      log: document the --decorate=auto option

Ray Zhang (1):
      worktree: add: introduce --checkout option

René Nyffenegger (1):
      Documentation: fix typo 'In such these cases'

René Scharfe (3):
      apply: remove unused parameters from name_terminate()
      patch-id: use starts_with() and skip_prefix()
      perf: make the tests work without a worktree

SZEDER Gábor (6):
      diffcore: fix iteration order of identical files during rename detection
      for-each-ref: fix description of '--contains' in manpage
      test-lib: simplify '--option=value' parsing
      t9824: fix broken &&-chain in a subshell
      t5510: run auto-gc in the foreground
      Documentation/git-send-email: fix typo in gmail 2FA section

Santiago Torres (6):
      builtin/verify-tag.c: ignore SIGPIPE in gpg-interface
      t7030: test verifying multiple tags
      verify-tag: update variable name and type
      verify-tag: prepare verify_tag for libification
      verify-tag: move tag verification code to tag.c
      tag -v: verify directly rather than exec-ing verify-tag

Saurav Sachidanand (1):
      dir: store EXC_FLAG_* values in unsigned integers

Shin Kojima (1):
      gitweb: apply fallback encoding before highlight

Sidhant Sharma [:tk] (1):
      builtin/receive-pack.c: use parse_options API

Stanislav Kolotinskiy (1):
      git-send-pack: fix --all option when used with directory

Stefan Beller (46):
      submodule-config: keep update strategy around
      submodule-config: drop check against NULL
      fetching submodules: respect `submodule.fetchJobs` config option
      submodule update: direct error message to stderr
      run_processes_parallel: treat output of children as byte array
      run_processes_parallel: rename parameters for the callbacks
      git submodule update: have a dedicated helper for cloning
      submodule helper: remove double 'fatal: ' prefix
      submodule update: expose parallelism to the user
      clone: allow an explicit argument for parallel submodule clones
      clone tests: rename t57* => t56*
      rebase: decouple --exec from --interactive
      t3404: cleanup double empty lines between tests
      submodule foreach: correct path display in recursive submodules
      submodule update --init: correct path handling in recursive submodules
      submodule status: correct path handling in recursive submodules
      submodule update: align reporting path for custom command execution
      submodule update: test recursive path reporting from subdirectory
      t7407: make expectation as clear as possible
      recursive submodules: test for relative paths
      submodule--helper: fix potential NULL-dereference
      submodule--helper clone: create the submodule path just once
      notes: don't leak memory in git_config_get_notes_strategy
      abbrev_sha1_in_line: don't leak memory
      bundle: don't leak an fd in case of early return
      credential-cache, send_request: close fd when done
      submodule--helper, module_clone: always operate on absolute paths
      submodule--helper, module_clone: catch fprintf failure
      submodule: port resolve_relative_url from shell to C
      submodule: port init from shell to C
      xdiff: implement empty line chunk heuristic
      mv: allow moving nested submodules
      clone: add `--shallow-submodules` flag
      config doc: improve exit code listing
      config.c: drop local variable
      submodule-config: don't shadow `cache`
      submodule init: fail gracefully with a missing .gitmodules file
      submodule--helper update-clone: abort gracefully on missing .gitmodules
      submodule deinit test: fix broken && chain in subshell
      submodule init: redirect stdout to stderr
      t7300: mark test with SANITY
      submodule deinit: require '--all' instead of '.' for all submodules
      t3513: do not compress backup tar file
      t6041: do not compress backup tar file
      submodule--helper: offer a consistent API
      submodule: remove bashism from shell script

Stephen P. Smith (1):
      wt-status.c: set commitable bit if there is a meaningful merge.

Sven Strickroth (3):
      commit: do not lose SQUASH_MSG contents
      MSVC: vsnprintf in Visual Studio 2015 doesn't need SNPRINTF_SIZE_CORR any more
      MSVC: use shipped headers instead of fallback definitions

Torsten Bögershausen (6):
      correct blame for files commited with CRLF
      t0027: make commit_chk_wrnNNO() reliable
      convert: allow core.autocrlf=input and core.eol=crlf
      t0027: test cases for combined attributes
      convert.c: ident + core.autocrlf didn't work
      t5601: Remove trailing space in sed expression

Vasco Almeida (16):
      l10n: fr: fix transcation of "dir"
      l10n: fr: fix wrongly translated option name
      l10n: fr: change "id de clé" to match "id-clé"
      l10n: fr: don't translate "merge" as a parameter
      i18n: index-pack: use plural string instead of normal one
      i18n: builtin/branch.c: mark option for translation
      i18n: unpack-trees: mark strings for translation
      i18n: builtin/rm.c: remove a comma ',' from string
      i18n: branch: unmark string for translation
      i18n: branch: move comment for translators
      i18n: git-parse-remote.sh: mark strings for translation
      i18n: builtin/pull.c: mark placeholders for translation
      i18n: builtin/pull.c: split strings marked for translation
      i18n: remote: add comment for translators
      Documentation/git-mailinfo: fix typo
      i18n: unpack-trees: avoid substituting only a verb in sentences

Xiaolong Ye (4):
      patch-ids: make commit_patch_id() a public helper function
      format-patch: add '--base' option to record base tree info
      format-patch: introduce --base=auto option
      format-patch: introduce format.useAutoBase configuration

brian m. carlson (6):
      sha1-name: introduce a get_oid() function
      test-match-trees: convert to use struct object_id
      match-trees: convert shift_tree() and shift_tree_by() to use object_id
      struct name_entry: use struct object_id instead of unsigned char sha1[20]
      tree-walk: convert tree_entry_extract() to use struct object_id
      match-trees: convert several leaf functions to use struct object_id

Ævar Arnfjörð Bjarmason (4):
      githooks.txt: improve the intro section
      githooks.txt: amend dangerous advice about 'update' hook ACL
      githooks.txt: minor improvements to the grammar & phrasing
      hooks: allow customizing where the hook directory is

^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.9.0-rc1
@ 2016-05-31 21:53  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2016-05-31 21:53 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

A release candidate Git v2.9.0-rc1 is now available for testing
at the usual places.  It is comprised of 462 non-merge commits
since v2.8.0, contributed by 63 people, 24 of which are new faces.

There still are a few topics yet to be merged to 'master' for the
upcoming release, but otherwise this is pretty much "feature
complete".  One known brown-paper-bag breakage exists in t/perf/,
whose fix is still in 'next'.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.9.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.8.0 are as follows.
Welcome to the Git development community!

  Alexander Rinass, Armin Kunaschik, Ben Woosley, Gabriel Souza
  Franco, Jacob Nisnevich, Jan Durovec, Jean-Noël Avila, Kazuki
  Yamaguchi, Keller Fuchs, Laurent Arnoud, Li Peng, Marios Titas,
  Mehul Jain, Michael Procter, Nikola Forró, Pranit Bauva, Ray
  Zhang, René Nyffenegger, Santiago Torres, Saurav Sachidanand,
  Shin Kojima, Sidhant Sharma [:tk], Stanislav Kolotinskiy,
  and Xiaolong Ye.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alexander Kuleshov,
  brian m. carlson, Brian Norris, Christian Couder, David Aguilar,
  David Turner, Dennis Kaarsemaker, Elia Pinto, Elijah Newren,
  Eric Sunshine, Eric Wong, Felipe Contreras, Jacob Keller,
  Jeff King, Jiang Xin, Johannes Schindelin, Johannes Sixt,
  John Keeping, Junio C Hamano, Karsten Blees, Lars Schneider,
  Linus Torvalds, Luke Diamand, Matthieu Moy, Michael Haggerty,
  Michael J Gruber, Michael Rappazzo, Nguyễn Thái Ngọc Duy,
  Ori Avtalion, Ralf Thielow, Ramsay Jones, Stefan Beller, Stephen
  P. Smith, Sven Strickroth, SZEDER Gábor, Torsten Bögershausen,
  and Vasco Almeida.

----------------------------------------------------------------

Git 2.9 Release Notes (draft)
=============================

Backward compatibility notes
----------------------------

The end-user facing Porcelain level commands in the "git diff" and
"git log" family by default enable the rename detection; you can still
use "diff.renames" configuration variable to disable this.

Merging two branches that have no common ancestor with "git merge" is
by default forbidden now to prevent creating such an unusual merge by
mistake.

The output formats of "git log" that indents the commit log message by
4 spaces now expands HT in the log message by default.  You can use
the "--no-expand-tabs" option to disable this.

"git commit-tree" plumbing command required the user to always sign
its result when the user sets the commit.gpgsign configuration
variable, which was an ancient mistake, which this release corrects.
A script that drives commit-tree, if it relies on this mistake, now
needs to read commit.gpgsign and pass the -S option as necessary.


Updates since v2.8
------------------

UI, Workflows & Features

 * Comes with git-multimail 1.3.1 (in contrib/).

 * The end-user facing commands like "git diff" and "git log"
   now enable the rename detection by default.

 * The credential.helper configuration variable is cumulative and
   there is no good way to override it from the command line.  As
   a special case, giving an empty string as its value now serves
   as the signal to clear the values specified in various files.

 * A new "interactive.diffFilter" configuration can be used to
   customize the diff shown in "git add -i" sessions.

 * "git p4" now allows P4 author names to be mapped to Git author
   names.

 * "git rebase -x" can be used without passing "-i" option.

 * "git -c credential.<var>=<value> submodule" can now be used to
   propagate configuration variables related to credential helper
   down to the submodules.

 * "git tag" can create an annotated tag without explicitly given an
   "-a" (or "-s") option (i.e. when a tag message is given).  A new
   configuration variable, tag.forceSignAnnotated, can be used to tell
   the command to create signed tag in such a situation.

 * "git merge" used to allow merging two branches that have no common
   base by default, which led to a brand new history of an existing
   project created and then get pulled by an unsuspecting maintainer,
   which allowed an unnecessary parallel history merged into the
   existing project.  The command has been taught not to allow this by
   default, with an escape hatch "--allow-unrelated-histories" option
   to be used in a rare event that merges histories of two projects
   that started their lives independently.

 * "git pull" has been taught to pass the "--allow-unrelated-histories"
   option to underlying "git merge".

 * "git apply -v" learned to report paths in the patch that were
   skipped via --include/--exclude mechanism or being outside the
   current working directory.

 * Shell completion (in contrib/) updates.

 * The commit object name reported when "rebase -i" stops has been
   shortened.

 * "git worktree add" can be given "--no-checkout" option to only
   create an empty worktree without checking out the files.

 * "git mergetools" learned to drive ExamDiff.

 * "git pull --rebase" learned "--[no-]autostash" option, so that
   the rebase.autostash configuration variable set to true can be
   overridden from the command line.

 * When "git log" shows the log message indented by 4-spaces, the
   remainder of a line after a HT does not align in the way the author
   originally intended.  The command now expands tabs by default to help
   such a case, and allows the users to override it with a new option,
   "--no-expand-tabs".

 * "git send-email" now uses a more readable timestamps when
   formulating a message ID.

 * "git rerere" can encounter two or more files with the same conflict
   signature that have to be resolved in different ways, but there was
   no way to record these separate resolutions.

 * "git p4" learned to record P4 jobs in Git commit that imports from
   the history in Perforce.

 * "git describe --contains" often made a hard-to-justify choice of
   tag to name a given commit, because it tried to come up
   with a name with smallest number of hops from a tag, causing an old
   commit whose close descendant that is recently tagged were not
   described with respect to an old tag but with a newer tag.  It did
   not help that its computation of "hop" count was further tweaked to
   penalize being on a side branch of a merge.  The logic has been
   updated to favor using the tag with the oldest tagger date, which
   is a lot easier to explain to the end users: "We describe a commit
   in terms of the (chronologically) oldest tag that contains the
   commit."
   (merge 7550424 js/name-rev-use-oldest-ref later to maint).

 * "git clone" learned the "--shallow-submodules" option.

 * HTTP transport clients learned to throw extra HTTP headers at the
   server, specified via http.extraHeader configuration variable.

 * Patch output from "git diff" and friends has been tweaked to be
   more readable by using a blank line as a strong hint that the
   contents before and after it belong to logically separate units.

 * A new configuration variable core.hooksPath allows customizing
   where the hook directory is.

 * An earlier addition of "sanitize_submodule_env" with 14111fc4 (git:
   submodule honor -c credential.* from command line, 2016-02-29)
   turned out to be a convoluted no-op; implement what it wanted to do
   correctly, and stop filtering settings given via "git -c var=val".

 * "git commit --dry-run" reported "No, no, you cannot commit." in one
   case where "git commit" would have allowed you to commit, and this
   improves it a little bit ("git commit --dry-run --short" still does
   not give you the correct answer, for example).  This is a stop-gap
   measure in that "commit --short --dry-run" still gives an incorrect
   result.

 * The experimental "multiple worktree" feature gains more safety to
   forbid operations on a branch that is checked out or being actively
   worked on elsewhere, by noticing that e.g. it is being rebased.

 * "git format-patch" learned a new "--base" option to record what
   (public, well-known) commit the original series was built on in
   its output.

 * "git commit" learned to pay attention to the "commit.verbose"
   configuration variable and act as if the "--verbose" option
   was given from the command line.

 * Updated documentation gives hints to GMail users with two-factor
   auth enabled that they need app-specific-password when using
   "git send-email".


Performance, Internal Implementation, Development Support etc.

 * The embedded args argv-array in the child process is used to build
   the command line to run pack-objects instead of using a separate
   array of strings.

 * A test for tags has been restructured so that more parts of it can
   easily be run on a platform without a working GnuPG.

 * The startup_info data, which records if we are working inside a
   repository (among other things), are now uniformly available to Git
   subcommand implementations, and Git avoids attempting to touch
   references when we are not in a repository.

 * The command line argument parser for "receive-pack" has been
   rewritten to use parse-options.

 * A major part of "git submodule update" has been ported to C to take
   advantage of the recently added framework to run download tasks in
   parallel.  Other updates to "git submodule" that move pieces of
   logic to C continues.

 * Rename bunch of tests on "git clone" for better organization.

 * The tests that involve running httpd leaked the system-wide
   configuration in /etc/gitconfig to the tested environment.

 * Build updates for MSVC.

 * The repository set-up sequence has been streamlined (the biggest
   change is that there is no longer git_config_early()), so that we
   do not attempt to look into refs/* when we know we do not have a
   Git repository.

 * Code restructuring around the "refs" API to prepare for pluggable
   refs backends.

 * Sources to many test helper binaries and the generated helpers
   have been moved to t/helper/ subdirectory to reduce clutter at the
   top level of the tree.

 * Unify internal logic between "git tag -v" and "git verify-tag"
   commands by making one directly call into the other.

 * "merge-recursive" strategy incorrectly checked if a path that is
   involved in its internal merge exists in the working tree.

 * The test scripts for "git p4" (but not "git p4" implementation
   itself) has been updated so that they would work even on a system
   where the installed version of Python is python 3.

 * As nobody maintains our in-tree git.spec.in and distros use their
   own spec file, we stopped pretending that we support "make rpm".

 * Move from "unsigned char[20]" to "struct object_id" continues.

 * The code for warning_errno/die_errno has been refactored and a new
   error_errno() reporting helper is introduced.
   (merge 1da045f nd/error-errno later to maint).

 * Running tests with '-x' option to trace the individual command
   executions is a useful way to debug test scripts, but some tests
   that capture the standard error stream and check what the command
   said can be broken with the trace output mixed in.  When running
   our tests under "bash", however, we can redirect the trace output
   to another file descriptor to keep the standard error of programs
   being tested intact.
   (merge d88785e jk/test-send-sh-x-trace-elsewhere later to maint).

 * t0040 had too many unnecessary repetitions in its test data.  Teach
   test-parse-options program so that a caller can tell what it
   expects in its output, so that these repetitions can be cleaned up.

 * Add perf test for "rebase -i".

 * Common mistakes when writing gitlink: in our documentation are
   found by "make check-docs".

 * t9xxx series has been updated primarily for readability, while
   fixing small bugs in it.  A few scripted Porcelain commands have
   also been updated to fix possible bugs around their use of
   "test -z" and "test -n".

 * CI test was taught to run git-svn tests.

 * "git cat-file --batch-all" has been sped up, by taking advantage
   of the fact that it does not have to read a list of objects, in two
   ways.

 * test updates to make it more readable and maintainable.
   (merge e6273f4 es/t1500-modernize later to maint).


Also contains various documentation updates and code clean-ups.


Fixes since v2.8
----------------

Unless otherwise noted, all the fixes since v2.8 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * "git config --get-urlmatch", unlike other variants of the "git
   config --get" family, did not signal error with its exit status
   when there was no matching configuration.

 * The "--local-env-vars" and "--resolve-git-dir" options of "git
   rev-parse" failed to work outside a repository when the command's
   option parsing was rewritten in 1.8.5 era.

 * "git index-pack --keep[=<msg>] pack-$name.pack" simply did not work.

 * Fetching of history by naming a commit object name directly didn't
   work across remote-curl transport.

 * A small memory leak in an error codepath has been plugged in xdiff
   code.

 * strbuf_getwholeline() did not NUL-terminate the buffer on certain
   corner cases in its error codepath.

 * "git mergetool" did not work well with conflicts that both sides
   deleted.

 * "git send-email" had trouble parsing alias file in mailrc format
   when lines in it had trailing whitespaces on them.

 * When "git merge --squash" stopped due to conflict, the concluding
   "git commit" failed to read in the SQUASH_MSG that shows the log
   messages from all the squashed commits.

 * "git merge FETCH_HEAD" dereferenced NULL pointer when merging
   nothing into an unborn history (which is arguably unusual usage,
   which perhaps was the reason why nobody noticed it).

 * When "git worktree" feature is in use, "git branch -d" allowed
   deletion of a branch that is checked out in another worktree,
   which was wrong.

 * When "git worktree" feature is in use, "git branch -m" renamed a
   branch that is checked out in another worktree without adjusting
   the HEAD symbolic ref for the worktree.

 * "git diff -M" used to work better when two originally identical
   files A and B got renamed to X/A and X/B by pairing A to X/A and B
   to X/B, but this was broken in the 2.0 timeframe.

 * "git send-pack --all <there>" was broken when its command line
   option parsing was written in the 2.6 timeframe.

 * "git format-patch --help" showed `-s` and `--no-patch` as if these
   are valid options to the command.  We already hide `--patch` option
   from the documentation, because format-patch is about showing the
   diff, and the documentation now hides these options as well.

 * When running "git blame $path" with unnormalized data in the index
   for the path, the data in the working tree was blamed, even though
   "git add" would not have changed what is already in the index, due
   to "safe crlf" that disables the line-end conversion.  It has been
   corrected.

 * A change back in version 2.7 to "git branch" broke display of a
   symbolic ref in a non-standard place in the refs/ hierarchy (we
   expect symbolic refs to appear in refs/remotes/*/HEAD to point at
   the primary branch the remote has, and as .git/HEAD to point at the
   branch we locally checked out).

 * A partial rewrite of "git submodule" in the 2.7 timeframe changed
   the way the gitdir: pointer in the submodules point at the real
   repository location to use absolute paths by accident.  This has
   been corrected.

 * "git commit" misbehaved in a few minor ways when an empty message
   is given via -m '', all of which has been corrected.

 * Support for CRAM-MD5 authentication method in "git imap-send" did
   not work well.

 * Upcoming OpenSSL 1.1.0 will break compilation by updating a few API
   elements we use in imap-send, which has been adjusted for the change.

 * The socks5:// proxy support added back in 2.6.4 days was not aware
   that socks5h:// proxies behave differently from socks5:// proxies.

 * "git config" had a codepath that tried to pass a NULL to
   printf("%s"), which nobody seems to have noticed.

 * On Cygwin, object creation uses the "create a temporary and then
   rename it to the final name" pattern, not "create a temporary,
   hardlink it to the final name and then unlink the temporary"
   pattern.

   This is necessary to use Git on Windows shared directories, and is
   already enabled for the MinGW and plain Windows builds.  It also
   has been used in Cygwin packaged versions of Git for quite a while.
   See http://thread.gmane.org/gmane.comp.version-control.git/291853

 * "merge-octopus" strategy did not ensure that the index is clean
   when merge begins.

 * When "git merge" notices that the merge can be resolved purely at
   the tree level (without having to merge blobs) and the resulting
   tree happens to already exist in the object store, it forgot to
   update the index, which left an inconsistent state that would
   break later operations.

 * "git submodule" reports the paths of submodules the command
   recurses into, but these paths were incorrectly reported when
   the command was not run from the root level of the superproject.

 * The "user.useConfigOnly" configuration variable makes it an error
   if users do not explicitly set user.name and user.email.  However,
   its check was not done early enough and allowed another error to
   trigger, reporting that the default value we guessed from the
   system setting was unusable.  This was a suboptimal end-user
   experience as we want the users to set user.name/user.email without
   relying on the auto-detection at all.

 * "git mv old new" did not adjust the path for a submodule that lives
   as a subdirectory inside old/ directory correctly.

 * "git replace -e" did not honour "core.editor" configuration.

 * "git push" from a corrupt repository that attempts to push a large
   number of refs deadlocked; the thread to relay rejection notices
   for these ref updates blocked on writing them to the main thread,
   after the main thread at the receiving end notices that the push
   failed and decides not to read these notices and return a failure.

 * mmap emulation on Windows has been optimized and work better without
   consuming paging store when not needed.

 * A question by "git send-email" to ask the identity of the sender
   has been updated.

 * UI consistency improvements for "git mergetool".

 * "git rebase -m" could be asked to rebase an entire branch starting
   from the root, but failed by assuming that there always is a parent
   commit to the first commit on the branch.

 * Fix a broken "p4 lfs" test.

 * Recent update to Git LFS broke "git p4" by changing the output from
   its "lfs pointer" subcommand.

 * "git fetch" test t5510 was flaky while running a (forced) automagic
   garbage collection.

 * Documentation updates to help contributors setting up Travis CI
   test for their patches.

 * Some multi-byte encoding can have a backslash byte as a later part
   of one letter, which would confuse "highlight" filter used in
   gitweb.

 * "git commit-tree" plumbing command required the user to always sign
   its result when the user sets the commit.gpgsign configuration
   variable, which was an ancient mistake.  Rework "git rebase" that
   relied on this mistake so that it reads commit.gpgsign and pass (or
   not pass) the -S option to "git commit-tree" to keep the end-user
   expectation the same, while teaching "git commit-tree" to ignore
   the configuration variable.  This will stop requiring the users to
   sign commit objects used internally as an implementation detail of
   "git stash".

 * "http.cookieFile" configuration variable clearly wants a pathname,
   but we forgot to treat it as such by e.g. applying tilde expansion.
   (merge e5a39ad bn/http-cookiefile-config later to maint).

 * Consolidate description of tilde-expansion that is done to
   configuration variables that take pathname to a single place.
   (merge dca83ab jc/config-pathname-type later to maint).

 * Correct faulty recommendation to use "git submodule deinit ." when
   de-initialising all submodules, which would result in a strange
   error message in a pathological corner case.
   (merge f6a5279 sb/submodule-deinit-all later to maint).

 * Many 'linkgit:<git documentation page>' references were broken,
   which are all fixed with this.
   (merge 1cca17d jc/linkgit-fix later to maint).

 * "git rerere" can get confused by conflict markers deliberately left
   by the inner merge step, because they are indistinguishable from
   the real conflict markers left by the outermost merge which are
   what the end user and "rerere" need to look at.  This was fixed by
   making the conflict markers left by the inner merges a bit longer.
   (merge 0f9fd5c jc/ll-merge-internal later to maint).

 * CI test was taught to build documentation pages.
   (merge b98712b ls/travis-build-doc later to maint).

 * "git fsck" learned to catch NUL byte in a commit object as
   potential error and warn.
   (merge 6d2d780 jc/fsck-nul-in-commit later to maint).

 * Portability enhancement for "rebase -i" to help platforms whose
   shell does not like "for i in <empty>" (which is not POSIX-kosher).
   (merge 8e98b35 jk/rebase-interactive-eval-fix later to maint).

 * On Windows, .git and optionally any files whose name starts with a
   dot are now marked as hidden, with a core.hideDotFiles knob to
   customize this behaviour.
   (merge ebf31e7 js/windows-dotgit later to maint).

 * Documentation for "git merge --verify-signatures" has been updated
   to clarify that the signature of only the commit at the tip is
   verified.  Also the phrasing used for signature and key validity is
   adjusted to align with that used by OpenPGP.
   (merge 05a5869 kf/gpg-sig-verification-doc later to maint).

 * A couple of bugs around core.autocrlf have been fixed.
   (merge caa47ad tb/core-eol-fix later to maint).

 * Many commands normalize command line arguments from NFD to NFC
   variant of UTF-8 on OSX, but commands in the "diff" family did
   not, causing "git diff $path" to complain that no such path is
   known to Git.  They have been taught to do the normalization.
   (merge 90a78b8 ar/diff-args-osx-precompose later to maint).

 * "git difftool" learned to handle unmerged paths correctly in
   dir-diff mode.
   (merge 366f9ce da/difftool later to maint).

 * The "are we talking with TTY, doing an interactive session?"
   detection has been updated to work better for "Git for Windows".
   (merge f7f90e0 kb/msys2-tty later to maint).

 * We forgot to add "git log --decorate=auto" to documentation when we
   added the feature back in v2.1.0 timeframe.
   (merge 462cbb4 rj/log-decorate-auto later to maint).

 * "git fast-import --export-marks" would overwrite the existing marks
   file even when it makes a dump from its custom die routine.
   Prevent it from doing so when we have an import-marks file but
   haven't finished reading it.
   (merge f4beed6 fc/fast-import-broken-marks-file later to maint).

 * Other minor clean-ups and documentation updates
   (merge 832c0e5 lp/typofixes later to maint).
   (merge f5ee54a sb/z-is-gnutar-ism later to maint).
   (merge 2e3926b va/i18n-misc-updates later to maint).
   (merge f212dcc bn/config-doc-tt-varnames later to maint).
   (merge f54bea4 nd/remote-plural-ours-plus-theirs later to maint).
   (merge 2bb0518 ak/t4151-ls-files-could-be-empty later to maint).
   (merge 4df4313 jc/test-seq later to maint).
   (merge a75a308 tb/t5601-sed-fix later to maint).
   (merge 6c1fbe1 va/i18n-remote-comment-to-align later to maint).
   (merge dee2303 va/mailinfo-doc-typofix later to maint).

----------------------------------------------------------------

Changes since v2.8.0 are as follows:

Adam Dinwoodie (2):
      config.mak.uname: Cygwin needs OBJECT_CREATION_USES_RENAMES
      commit: --amend -m '' silently fails to wipe message

Alexander Kuleshov (1):
      submodule-config: use hashmap_iter_first()

Alexander Rinass (1):
      diff: run arguments through precompose_argv

Armin Kunaschik (2):
      t4151: make sure argument to 'test -z' is given
      t0008: 4 tests fail with ksh88

Ben Woosley (1):
      git-rebase--merge: don't include absent parent as a base

Brian Norris (3):
      Documentation: config: improve word ordering for http.cookieFile
      http: expand http.cookieFile as a path
      config: consistently format $variables in monospaced font

Christian Couder (5):
      Documentation: talk about pager in api-trace.txt
      builtin/apply: get rid of useless 'name' variable
      builtin/apply: handle parse_binary() failure
      builtin/apply: free patch when parse_chunk() fails
      Git/SVN: die when there is no commit metadata

David Aguilar (4):
      mergetool: support delete/delete conflicts
      mergetool: honor tempfile configuration when resolving delete conflicts
      difftool: initialize variables for readability
      difftool: handle unmerged files in dir-diff mode

David Turner (5):
      refs: move head_ref{,_submodule} to the common code
      refs: move for_each_*ref* functions into common code
      files-backend: break out ref reading
      refs: move resolve_ref_unsafe into common code
      refs: on symref reflog expire, lock symref not referrent

Dennis Kaarsemaker (1):
      Makefile: remove dependency on git.spec

Elia Pinto (1):
      api-trace.txt: fix typo

Elijah Newren (6):
      merge-recursive: remove duplicate code
      merge-recursive: do not check working copy when creating a virtual merge base
      t7605: add a testcase demonstrating a bug with trivial merges
      builtin/merge.c: fix a bug with trivial merges
      merge-octopus: abort if index does not match HEAD
      t6044: new merge testcases for when index doesn't match HEAD

Eric Sunshine (10):
      lib-gpg: drop unnecessary "missing GPG" warning
      t6302: normalize names and descriptions of signed tags
      t6302: also test annotated in addition to signed tags
      t6302: skip only signed tags rather than all tests when GPG is missing
      git-format-patch.txt: don't show -s as shorthand for multiple options
      t1500: be considerate to future potential tests
      t1500: test_rev_parse: facilitate future test enhancements
      t1500: avoid changing working directory outside of tests
      t1500: avoid setting configuration options outside of tests
      t1500: avoid setting environment variables outside of tests

Eric Wong (4):
      send-email: more meaningful Message-ID
      send-email: do not load Data::Dumper
      pack-objects: warn on split packs disabling bitmaps
      .mailmap: update to my shorter email address

Felipe Contreras (1):
      fast-import: do not truncate exported marks file

Gabriel Souza Franco (2):
      fetch-pack: fix object_id of exact sha1
      fetch-pack: update the documentation for "<refs>..." arguments

Jacob Keller (7):
      submodule: don't pass empty string arguments to submodule--helper clone
      submodule: check argc count for git submodule--helper clone
      submodule: fix submodule--helper clone usage
      submodule: fix segmentation fault in submodule--helper clone
      quote: implement sq_quotef()
      git: submodule honor -c credential.* from command line
      xdiff: add recs_match helper function

Jacob Nisnevich (2):
      mergetools: create mergetool_find_win32_cmd() helper function for winmerge
      mergetools: add support for ExamDiff

Jan Durovec (2):
      git-p4: clean-up code style in tests
      git-p4: add P4 jobs to git commit message

Jeff King (55):
      credential: let empty credential specs reset helper list
      t1515: add tests for rev-parse out-of-repo helpers
      add--interactive: allow custom diff highlighting programs
      rev-parse: let some options run outside repository
      strbuf_getwholeline: NUL-terminate getdelim buffer on error
      setup: make startup_info available everywhere
      setup: set startup_info->have_repository more reliably
      remote: don't resolve HEAD in non-repository
      mailmap: do not resolve blobs in a non-repository
      grep: turn off gitlink detection for --no-index
      use setup_git_directory() in test-* programs
      setup: document check_repository_format()
      wrap shared_repository global in get/set accessors
      lazily load core.sharedrepository
      check_repository_format_gently: stop using git_config_early
      config: drop git_config_early
      setup: refactor repo format reading and verification
      init: use setup.c's repo version verification
      setup: unify repository version callbacks
      setup: drop repository_format_version global
      verify_repository_format: mark messages for translation
      send-email: ignore trailing whitespace in mailrc alias file
      credential-cache--daemon: clarify "exit" action semantics
      t/lib-httpd: pass through GIT_CONFIG_NOSYSTEM env
      git_config_push_parameter: handle empty GIT_CONFIG_PARAMETERS
      branch: fix shortening of non-remote symrefs
      commit: do not ignore an empty message given by -m ''
      config: lower-case first word of error strings
      git_config_set_multivar_in_file: all non-zero returns are errors
      git_config_set_multivar_in_file: handle "unset" errors
      t5532: use write_script
      send-pack: close demux pipe before finishing async process
      run-command: teach async threads to ignore SIGPIPE
      send-pack: isolate sigpipe in demuxer thread
      fetch-pack: isolate sigpipe in demuxer thread
      t5504: drop sigpipe=ok from push tests
      remote.c: spell __attribute__ correctly
      t5550: fix typo in $HTTPD_URL
      t5550: break submodule config test into multiple sub-tests
      submodule: export sanitized GIT_CONFIG_PARAMETERS
      submodule--helper: move config-sanitizing to submodule.c
      submodule: use prepare_submodule_repo_env consistently
      submodule: stop sanitizing config options
      t6302: simplify non-gpg cases
      rebase--interactive: avoid empty list in shell for-loop
      test-lib: set BASH_XTRACEFD automatically
      t/lib-git-svn: drop $remote_git_svn and $git_svn_id
      t9100,t3419: enclose all test code in single-quotes
      t9107: use "return 1" instead of "exit 1"
      t9107: switch inverted single/double quotes in test
      t9103: modernize test style
      always quote shell arguments to test -z/-n
      cat-file: avoid noop calls to sha1_object_info_extended
      cat-file: default to --buffer when --batch-all-objects is used
      archive-tar: convert snprintf to xsnprintf

Johannes Schindelin (16):
      replace --edit: respect core.editor
      name-rev: include taggerdate in considering the best name
      win32mmap: set errno appropriately
      mmap(win32): avoid copy-on-write when it is unnecessary
      mmap(win32): avoid expensive fstat() call
      http: support sending custom HTTP headers
      tests: adjust the configuration for Apache 2.2
      t5551: make the test for extra HTTP headers more robust
      t3404: fix typo
      submodule: ensure that -c http.extraheader is heeded
      mingw: introduce the 'core.hideDotFiles' setting
      mingw: remove unnecessary definition
      Windows: only add a no-op pthread_sigmask() when needed
      perf: let's disable symlinks when they are not available
      perf: make the tests work in worktrees
      perf: run "rebase -i" under perf

Johannes Sixt (3):
      Windows: shorten code by re-using convert_slashes()
      Windows: add pthread_sigmask() that does nothing
      t6044: replace seq by test_seq

John Keeping (3):
      config: fail if --get-urlmatch finds no value
      Documentation/git-config: use bulleted list for exit codes
      Documentation/git-config: fix --get-all description

Junio C Hamano (74):
      rerere: split conflict ID further
      rerere: scan $GIT_DIR/rr-cache/$ID when instantiating a rerere_id
      index-pack: correct --keep[=<msg>]
      index-pack: add a helper function to derive .idx/.keep filename
      rerere: handle leftover rr-cache/$ID directory and postimage files
      rerere: delay the recording of preimage
      rerere: allow multiple variants to exist
      t4200: rerere a merge with two identical conflicts
      rerere: do use multiple variants
      apply: remove unused call to free() in gitdiff_{old,new}name()
      merge: fix NULL pointer dereference when merging nothing into void
      merge: refuse to create too cool a merge by default
      pretty: enable --expand-tabs by default for selected pretty formats
      pretty: allow tweaking tabwidth in --expand-tabs
      submodule--helper: do not borrow absolute_path() result for too long
      Git 2.8.1
      First batch for post 2.8 cycle
      pretty: test --expand-tabs
      Makefile: fix misdirected redirections
      Second batch for post 2.8 cycle
      Makefile: stop pretending to support rpmbuild
      rerere: gc and clear
      rerere: move code related to "forget" together
      rerere: split code to call ll_merge() further
      rerere: adjust 'forget' to multi-variant world order
      setup.c: do not feed NULL to "%.*s" even with precision 0
      Third batch for post 2.8 cycle
      http: differentiate socks5:// and socks5h://
      t1020: do not overuse printf and use write_script
      t3404: use write_script
      Fourth batch for post 2.8 cycle
      Start preparing for 2.8.2
      fsck_commit_buffer(): do not special case the last validation
      ll-merge: fix typo in comment
      Prepare for 2.8.2
      Makefile: clean *.o files we create
      Fifth batch for post 2.8 cycle
      t3033: avoid 'ambiguous refs' warning
      pull: pass --allow-unrelated-histories to "git merge"
      Sixth batch for post 2.8 cycle
      send-email: fix grammo in the prompt that asks e-mail recipients
      Seventh batch for post 2.8 cycle
      Git 2.8.2
      Eighth batch for 2.9
      diff: undocument the compaction heuristic knobs for experimentation
      Start preparing for 2.8.3
      commit-tree: do not pay attention to commit.gpgsign
      Ninth batch for 2.9
      config: describe 'pathname' value type
      Tenth batch for 2.9
      Almost ready for 2.8.3
      test-lib-functions.sh: remove misleading comment on test_seq
      test-lib-functions.sh: rewrite test_seq without Perl
      ll-merge: use a longer conflict marker for internal merge
      t6036: remove pointless test that expects failure
      Documentation: fix linkgit references
      fsck: detect and warn a commit with embedded NUL
      ci: validate "linkgit:" in documentation
      test-parse-options: fix output when callback option fails
      test-parse-options: --expect=<string> option to simplify tests
      t0040: remove unused test helpers
      t0040: convert a few tests to use test-parse-options --expect
      Eleventh batch for 2.9
      rerere: plug memory leaks upon "rerere forget" failure
      Twelfth batch for 2.9
      Thirteenth batch for 2.9
      Git 2.8.3
      rerere: remove an null statement
      Git 2.9-rc0
      t4204: do not let $name variable clobbered
      Start preparing for 2.8.4
      Final batch before 2.9-rc1
      More topics for 2.8.4
      Git 2.9-rc1

Karsten Blees (1):
      mingw: make isatty() recognize MSYS2's pseudo terminals (/dev/pty*)

Kazuki Yamaguchi (10):
      branch -d: refuse deleting a branch which is currently checked out
      refs: add a new function set_worktree_head_symref
      branch -m: update all per-worktree HEADs
      set_worktree_head_symref(): fix error message
      imap-send: use HMAC() function provided by OpenSSL
      imap-send: check NULL return of SSL_CTX_new()
      imap-send: avoid deprecated TLSv1_method()
      configure: remove checking for HMAC_CTX_cleanup
      imap-send: check for NOLOGIN capability only when using LOGIN command
      imap-send: fix CRAM-MD5 response calculation

Keller Fuchs (1):
      Documentation: clarify signature verification

Lars Schneider (8):
      git-p4: map a P4 user to Git author name and email address
      travis-ci: update Git-LFS and P4 to the latest version
      travis-ci: express Linux/OS X dependency versions more clearly
      git-p4: fix Git LFS pointer parsing
      t9824: fix wrong reference value
      Documentation: add setup instructions for Travis CI
      travis-ci: build documentation
      travis-ci: enable Git SVN tests t91xx on Linux

Laurent Arnoud (1):
      tag: add the option to force signing of annotated tags

Li Peng (1):
      typofix: assorted typofixes in comments, documentation and messages

Linus Torvalds (1):
      pretty: expand tabs in indented logs to make things line up properly

Luke Diamand (3):
      git-p4 tests: cd to / before running python
      git-p4 tests: work with python3 as well as python2
      git-p4 tests: time_in_seconds should use $PYTHON_PATH

Marios Titas (2):
      ident: check for useConfigOnly before auto-detection of name/email
      ident: give "please tell me" message upon useConfigOnly error

Matthieu Moy (11):
      Documentation/diff-config: fix description of diff.renames
      t4001-diff-rename: wrap file creations in a test
      t: add tests for diff.renames (true/false/unset)
      log: introduce init_log_defaults()
      diff: activate diff.renames by default
      lockfile: mark strings for translation
      lockfile: improve error message when lockfile exists
      git.spec.in: use README.md, not README
      README.md: don't take 'commandname' literally
      git-multimail: update to release 1.3.0
      git-multimail: update to release 1.3.1

Mehul Jain (9):
      git-pull.c: introduce git_pull_config()
      pull --rebase: add --[no-]autostash flag
      t5520: use consistent capitalization in test titles
      t5520: ensure consistent test conditions
      t5520: use better test to check stderr output
      t5520: factor out common "successful autostash" code
      t5520: factor out common "failing autostash" code
      t5520: reduce commom lines of code
      t5520: test --[no-]autostash with pull.rebase=true

Michael Haggerty (19):
      t1430: test the output and error of some commands more carefully
      t1430: clean up broken refs/tags/shadow
      t1430: don't rely on symbolic-ref for creating broken symrefs
      t1430: test for-each-ref in the presence of badly-named refs
      t1430: improve test coverage of deletion of badly-named refs
      resolve_missing_loose_ref(): simplify semantics
      resolve_ref_unsafe(): use for loop to count up to MAXDEPTH
      resolve_ref_unsafe(): ensure flags is always set
      resolve_ref_1(): eliminate local variable
      resolve_ref_1(): reorder code
      resolve_ref_1(): eliminate local variable "bad_name"
      read_raw_ref(): manage own scratch space
      files-backend: inline resolve_ref_1() into resolve_ref_unsafe()
      read_raw_ref(): change flags parameter to unsigned int
      fsck_head_link(): remove unneeded flag variable
      cmd_merge(): remove unneeded flag variable
      checkout_paths(): remove unneeded flag variable
      check_aliased_update(): check that dst_name is non-NULL
      show_head_ref(): check the result of resolve_ref_namespace()

Michael J Gruber (1):
      completion: complete --cherry-mark for git log

Michael Procter (1):
      upload-pack: use argv_array for pack_objects

Michael Rappazzo (1):
      Documentation: add instructions to help setup gmail 2FA

Nguyễn Thái Ngọc Duy (62):
      git-apply.txt: remove a space
      git-apply.txt: mention the behavior inside a subdir
      apply: report patch skipping in verbose mode
      test helpers: move test-* to t/helper/ subdirectory
      dir.c: remove dead function fnmatch_icase()
      wrapper.c: delete dead function git_mkstemps()
      dir.c: rename str(n)cmp_icase to fspath(n)cmp
      path.c: add git_common_path() and strbuf_git_common_path()
      worktree.c: store "id" instead of "git_dir"
      worktree.c: make find_shared_symref() return struct worktree *
      worktree.c: mark current worktree
      path.c: refactor and add worktree_git_path()
      wt-status.c: split rebase detection out of wt_status_get_state()
      wt-status.c: make wt_status_check_rebase() work on any worktree
      worktree.c: avoid referencing to worktrees[i] multiple times
      worktree.c: check whether branch is rebased in another worktree
      wt-status.c: split bisect detection out of wt_status_get_state()
      worktree.c: check whether branch is bisected in another worktree
      branch: do not rename a branch under bisect or rebase
      remote.c: specify correct plural form in "commit diverge" message
      usage.c: move format processing out of die_errno()
      usage.c: add warning_errno() and error_errno()
      bisect.c: use die_errno() and warning_errno()
      builtin/am.c: use error_errno()
      builtin/branch.c: use error_errno()
      builtin/fetch.c: use error_errno()
      builtin/help.c: use warning_errno()
      builtin/mailsplit.c: use error_errno()
      builtin/merge-file.c: use error_errno()
      builtin/pack-objects.c: use die_errno() and warning_errno()
      builtin/rm.c: use warning_errno()
      builtin/update-index.c: prefer "err" to "errno" in process_lstat_error
      builtin/upload-archive.c: use error_errno()
      builtin/worktree.c: use error_errno()
      check-racy.c: use error_errno()
      combine-diff.c: use error_errno()
      compat/win32/syslog.c: use warning_errno()
      config.c: use error_errno()
      connected.c: use error_errno()
      copy.c: use error_errno()
      credential-cache--daemon.c: use warning_errno()
      diff-no-index.c: use error_errno()
      editor.c: use error_errno()
      entry.c: use error_errno()
      fast-import.c: use error_errno()
      gpg-interface.c: use error_errno()
      grep.c: use error_errno()
      http.c: use error_errno() and warning_errno()
      ident.c: use warning_errno()
      mailmap.c: use error_errno()
      reachable.c: use error_errno()
      rerere.c: use error_errno() and warning_errno()
      run-command.c: use error_errno()
      sequencer.c: use error_errno()
      server-info.c: use error_errno()
      sha1_file.c: use {error,die,warning}_errno()
      transport-helper.c: use error_errno()
      unpack-trees.c: use error_errno()
      upload-pack.c: use error_errno()
      vcs-svn: use error_errno()
      wrapper.c: use warning_errno()
      wrap-for-bin.sh: regenerate bin-wrappers when switching branches

Nikola Forró (1):
      difftool/mergetool: make the form of yes/no questions consistent

Ori Avtalion (1):
      Documentation: git diff --check detects conflict markers

Pranit Bauva (9):
      t/t7502 : drop duplicate test
      api-parse-options.txt: document OPT_CMDMODE()
      t0040-test-parse-options.sh: fix style issues
      test-parse-options: print quiet as integer
      t0040-parse-options: improve test coverage
      t/t7507: improve test coverage
      parse-options.c: make OPTION_COUNTUP respect "unspecified" values
      t7507-commit-verbose: improve test coverage by testing number of diffs
      commit: add a commit.verbose config variable

Ralf Thielow (4):
      completion: add option '--guides' to 'git help'
      completion: add 'revisions' and 'everyday' to 'git help'
      rebase-i: print an abbreviated hash when stop for editing
      string_list: use string-list API in unsorted_string_list_lookup()

Ramsay Jones (3):
      xdiff/xprepare: use the XDF_DIFF_ALG() macro to access flag bits
      xdiff/xprepare: fix a memory leak
      log: document the --decorate=auto option

Ray Zhang (1):
      worktree: add: introduce --checkout option

René Nyffenegger (1):
      Documentation: fix typo 'In such these cases'

SZEDER Gábor (5):
      diffcore: fix iteration order of identical files during rename detection
      for-each-ref: fix description of '--contains' in manpage
      test-lib: simplify '--option=value' parsing
      t9824: fix broken &&-chain in a subshell
      t5510: run auto-gc in the foreground

Santiago Torres (6):
      builtin/verify-tag.c: ignore SIGPIPE in gpg-interface
      t7030: test verifying multiple tags
      verify-tag: update variable name and type
      verify-tag: prepare verify_tag for libification
      verify-tag: move tag verification code to tag.c
      tag -v: verify directly rather than exec-ing verify-tag

Saurav Sachidanand (1):
      dir: store EXC_FLAG_* values in unsigned integers

Shin Kojima (1):
      gitweb: apply fallback encoding before highlight

Sidhant Sharma [:tk] (1):
      builtin/receive-pack.c: use parse_options API

Stanislav Kolotinskiy (1):
      git-send-pack: fix --all option when used with directory

Stefan Beller (44):
      submodule-config: keep update strategy around
      submodule-config: drop check against NULL
      fetching submodules: respect `submodule.fetchJobs` config option
      submodule update: direct error message to stderr
      run_processes_parallel: treat output of children as byte array
      run_processes_parallel: rename parameters for the callbacks
      git submodule update: have a dedicated helper for cloning
      submodule helper: remove double 'fatal: ' prefix
      submodule update: expose parallelism to the user
      clone: allow an explicit argument for parallel submodule clones
      clone tests: rename t57* => t56*
      rebase: decouple --exec from --interactive
      t3404: cleanup double empty lines between tests
      submodule foreach: correct path display in recursive submodules
      submodule update --init: correct path handling in recursive submodules
      submodule status: correct path handling in recursive submodules
      submodule update: align reporting path for custom command execution
      submodule update: test recursive path reporting from subdirectory
      t7407: make expectation as clear as possible
      recursive submodules: test for relative paths
      submodule--helper: fix potential NULL-dereference
      submodule--helper clone: create the submodule path just once
      notes: don't leak memory in git_config_get_notes_strategy
      abbrev_sha1_in_line: don't leak memory
      bundle: don't leak an fd in case of early return
      credential-cache, send_request: close fd when done
      submodule--helper, module_clone: always operate on absolute paths
      submodule--helper, module_clone: catch fprintf failure
      submodule: port resolve_relative_url from shell to C
      submodule: port init from shell to C
      xdiff: implement empty line chunk heuristic
      mv: allow moving nested submodules
      clone: add `--shallow-submodules` flag
      config doc: improve exit code listing
      config.c: drop local variable
      submodule-config: don't shadow `cache`
      submodule init: fail gracefully with a missing .gitmodules file
      submodule--helper update-clone: abort gracefully on missing .gitmodules
      submodule deinit test: fix broken && chain in subshell
      submodule init: redirect stdout to stderr
      t7300: mark test with SANITY
      submodule deinit: require '--all' instead of '.' for all submodules
      t3513: do not compress backup tar file
      t6041: do not compress backup tar file

Stephen P. Smith (1):
      wt-status.c: set commitable bit if there is a meaningful merge.

Sven Strickroth (3):
      commit: do not lose SQUASH_MSG contents
      MSVC: vsnprintf in Visual Studio 2015 doesn't need SNPRINTF_SIZE_CORR any more
      MSVC: use shipped headers instead of fallback definitions

Torsten Bögershausen (6):
      correct blame for files commited with CRLF
      t0027: make commit_chk_wrnNNO() reliable
      convert: allow core.autocrlf=input and core.eol=crlf
      t0027: test cases for combined attributes
      convert.c: ident + core.autocrlf didn't work
      t5601: Remove trailing space in sed expression

Vasco Almeida (16):
      l10n: fr: fix transcation of "dir"
      l10n: fr: fix wrongly translated option name
      l10n: fr: change "id de clé" to match "id-clé"
      l10n: fr: don't translate "merge" as a parameter
      i18n: index-pack: use plural string instead of normal one
      i18n: builtin/branch.c: mark option for translation
      i18n: unpack-trees: mark strings for translation
      i18n: builtin/rm.c: remove a comma ',' from string
      i18n: branch: unmark string for translation
      i18n: branch: move comment for translators
      i18n: git-parse-remote.sh: mark strings for translation
      i18n: builtin/pull.c: mark placeholders for translation
      i18n: builtin/pull.c: split strings marked for translation
      i18n: remote: add comment for translators
      Documentation/git-mailinfo: fix typo
      i18n: unpack-trees: avoid substituting only a verb in sentences

Xiaolong Ye (4):
      patch-ids: make commit_patch_id() a public helper function
      format-patch: add '--base' option to record base tree info
      format-patch: introduce --base=auto option
      format-patch: introduce format.useAutoBase configuration

brian m. carlson (6):
      sha1-name: introduce a get_oid() function
      test-match-trees: convert to use struct object_id
      match-trees: convert shift_tree() and shift_tree_by() to use object_id
      struct name_entry: use struct object_id instead of unsigned char sha1[20]
      tree-walk: convert tree_entry_extract() to use struct object_id
      match-trees: convert several leaf functions to use struct object_id

Ævar Arnfjörð Bjarmason (4):
      githooks.txt: improve the intro section
      githooks.txt: amend dangerous advice about 'update' hook ACL
      githooks.txt: minor improvements to the grammar & phrasing
      hooks: allow customizing where the hook directory is

^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.9.0-rc0
@ 2016-05-23 23:23  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2016-05-23 23:23 UTC (permalink / raw)
  To: git

An early preview release Git v2.9.0-rc0 is now available for
testing at the usual places.  It is comprised of 443 non-merge
commits since v2.8.0, contributed by 60 people, 24 of which are
new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.9.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.8.0 are as follows.
Welcome to the Git development community!

  Alexander Rinass, Armin Kunaschik, Ben Woosley, Gabriel Souza
  Franco, Jacob Nisnevich, Jan Durovec, Jean-Noël Avila, Kazuki
  Yamaguchi, Keller Fuchs, Laurent Arnoud, Li Peng, Marios Titas,
  Mehul Jain, Michael Procter, Nikola Forró, Pranit Bauva, Ray
  Zhang, René Nyffenegger, Santiago Torres, Saurav Sachidanand,
  Shin Kojima, Sidhant Sharma [:tk], Stanislav Kolotinskiy,
  and Xiaolong Ye.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Adam Dinwoodie, Ævar Arnfjörð Bjarmason, Alexander Kuleshov,
  brian m. carlson, Brian Norris, Christian Couder, David Aguilar,
  David Turner, Dennis Kaarsemaker, Elia Pinto, Elijah Newren,
  Eric Sunshine, Eric Wong, Jacob Keller, Jeff King, Jiang Xin,
  Johannes Schindelin, Johannes Sixt, John Keeping, Junio C Hamano,
  Lars Schneider, Linus Torvalds, Luke Diamand, Matthieu Moy,
  Michael Haggerty, Michael J Gruber, Nguyễn Thái Ngọc Duy,
  Ori Avtalion, Ralf Thielow, Ramsay Jones, Stefan Beller, Stephen
  P. Smith, Sven Strickroth, SZEDER Gábor, Torsten Bögershausen,
  and Vasco Almeida.

----------------------------------------------------------------

Git 2.9 Release Notes (draft)
=============================

Backward compatibility note
---------------------------

The end-user facing Porcelain level commands in the "git diff" and
"git log" by default enables the rename detection; you can still use
"diff.renames" configuration variable to disable this.

Merging two branches that have no common ancestor with "git merge" is
by default forbidden now to prevent creating such an unusual merge by
mistake.

The output formats of "git log" that indents the commit log message by
4 spaces now expands HT in the log message by default.  You can use
the "--no-expand-tabs" option to disable this.

"git commit-tree" plumbing command required the user to always sign
its result when the user sets the commit.gpgsign configuration
variable, which was an ancient mistake, which this release corrects.
A script that drives commit-tree, if it relies on this mistake, now
needs to read commit.gpgsign and pass the -S option as necessary.


Updates since v2.8
------------------

UI, Workflows & Features

 * Comes with git-multimail 1.3.1 (in contrib/).

 * The end-user facing Porcelain level commands like "diff" and "log"
   now enables the rename detection by default.

 * The credential.helper configuration variable is cumulative and
   there is no good way to override it from the command line.  As
   a special case, giving an empty string as its value now serves
   as the signal to clear the values specified in various files.

 * A new "interactive.diffFilter" configuration can be used to
   customize the diff shown in "git add -i" session.

 * "git p4" now allows P4 author names to be mapped to Git author
   names.

 * "git rebase -x" can be used without passing "-i" option.

 * "git -c credential.<var>=<value> submodule" can now be used to
   propagate configuration variables related to credential helper
   down to the submodules.

 * "git tag" can create an annotated tag without explicitly given an
   "-a" (or "-s") option (i.e. when a tag message is given).  A new
   configuration variable, tag.forceSignAnnotated, can be used to tell
   the command to create signed tag in such a situation.

 * "git merge" used to allow merging two branches that have no common
   base by default, which led to a brand new history of an existing
   project created and then get pulled by an unsuspecting maintainer,
   which allowed an unnecessary parallel history merged into the
   existing project.  The command has been taught not to allow this by
   default, with an escape hatch "--allow-unrelated-histories" option
   to be used in a rare event that merges histories of two projects
   that started their lives independently.

 * "git pull" has been taught to pass --allow-unrelated-histories
   option to underlying "git merge".

 * "git apply -v" learned to report paths in the patch that were
   skipped via --include/--exclude mechanism or being outside the
   current working directory.

 * Shell completion (in contrib/) updates.

 * The commit object name reported when "rebase -i" stops has been
   shortened.

 * "git worktree add" can be given "--no-checkout" option to only
   create an empty worktree without checking out the files.

 * "git mergetools" learned to drive ExamDiff.

 * "git pull --rebase" learned "--[no-]autostash" option, so that
   the rebase.autostash configuration variable set to true can be
   overridden from the command line.

 * When "git log" shows the log message indented by 4-spaces, the
   remainder of a line after a HT does not align in the way the author
   originally intended.  The command now expands tabs by default in
   such a case, and allows the users to override it with a new option,
   "--no-expand-tabs".

 * "git send-email" now uses a more readable timestamps when
   formulating a message ID.

 * "git rerere" can encounter two or more files with the same conflict
   signature that have to be resolved in different ways, but there was
   no way to record these separate resolutions.
   (merge d9d501b068 jc/rerere-multi later to maint).

 * "git p4" learned to record P4 jobs in Git commit that imports from
   the history in Perforce.

 * "git describe --contains" often made a hard-to-justify choice of
   tag to give name to a given commit, because it tried to come up
   with a name with smallest number of hops from a tag, causing an old
   commit whose close descendant that is recently tagged were not
   described with respect to an old tag but with a newer tag.  It did
   not help that its computation of "hop" count was further tweaked to
   penalize being on a side branch of a merge.  The logic has been
   updated to favor using the tag with the oldest tagger date, which
   is a lot easier to explain to the end users: "We describe a commit
   in terms of the (chronologically) oldest tag that contains the
   commit."
   (merge 7550424 js/name-rev-use-oldest-ref later to maint).

 * "git clone" learned "--shallow-submodules" option.

 * HTTP transport clients learned to throw extra HTTP headers at the
   server, specified via http.extraHeader configuration variable.

 * Patch output from "git diff" and friends has been tweaked to be
   more readable by using a blank line as a strong hint that the
   contents before and after it belong to a logically separate unit.

 * A new configuration variable core.hooksPath allows customizing
   where the hook directory is.

 * An earlier addition of "sanitize_submodule_env" with 14111fc4 (git:
   submodule honor -c credential.* from command line, 2016-02-29)
   turned out to be a convoluted no-op; implement what it wanted to do
   correctly, and stop filtering settings given via "git -c var=val".

 * "git commit --dry-run" reported "No, no, you cannot commit." in one
   case where "git commit" would have allowed you to commit, and this
   improves it a little bit ("git commit --dry-run --short" still does
   not give you the correct answer, for example).  This is a stop-gap
   measure in that "commit --short --dry-run" still gives an incorrect
   result.

 * The experimental "multiple worktree" feature gains more safety to
   forbid operations on a branch that is checked out or being actively
   worked on elsewhere, by noticing that e.g. it is being rebased.

 * "git format-patch" learned a new "--base" option to record what
   (public, well-known) commit the original series was built on in
   its output.

 * "git commit" learned to pay attention to "commit.verbose"
   configuration variable and act as if "--verbose" option was
   given from the command line.


Performance, Internal Implementation, Development Support etc.

 * The embedded args argv-array in the child process is used to build
   the command line to run pack-objects instead of using a separate
   array of strings.

 * A test for tags has been restructured so that more parts of it can
   easily be run on a platform without a working GnuPG.

 * The startup_info data, which records if we are working inside a
   repository (among other things), are now uniformly available to Git
   subcommand implementations, and Git avoids attempting to touch
   references when we are not in a repository.

 * The command line argument parser for "receive-pack" has been
   rewritten to use parse-options.

 * A major part of "git submodule update" has been ported to C to take
   advantage of the recently added framework to run download tasks in
   parallel.

 * Rename bunch of tests on "git clone" for better organization.

 * The tests that involve running httpd leaked the system-wide
   configuration in /etc/gitconfig to the tested environment.

 * Build updates for MSVC.

 * The repository set-up sequence has been streamlined (the biggest
   change is that there is no longer git_config_early()), so that we
   do not attempt to look into refs/* when we know we do not have a
   Git repository.

 * Code restructuring around the "refs" area to prepare for pluggable
   refs backends.

 * Sources to many test helper binaries (and the generated helpers)
   have been moved to t/helper/ subdirectory to reduce clutter at the
   top level of the tree.

 * Unify internal logic between "git tag -v" and "git verify-tag"
   commands by making one directly call into the other.
   (merge bef234b st/verify-tag later to maint).

 * "merge-recursive" strategy incorrectly checked if a path that is
   involved in its internal merge exists in the working tree.

 * The test scripts for "git p4" (but not "git p4" implementation
   itself) has been updated so that they would work even on a system
   where the installed version of Python is python 3.

 * As nobody maintains our in-tree git.spec.in and distros use their
   own spec file, we stopped pretending that we support "make rpm".

 * Move from unsigned char[20] to struct object_id continues.

 * Update of "git submodule" to move pieces of logic to C continues.

 * The code for warning_errno/die_errno has been refactored and a new
   error_errno() reporting helper is introduced.
   (merge 1da045f nd/error-errno later to maint).

 * Running tests with '-x' option to trace the individual command
   executions is a useful way to debug test scripts, but some tests
   that capture the standard error stream and check what the command
   said can be broken with the trace output mixed in.  When running
   our tests under "bash", however, we can redirect the trace output
   to another file descriptor to keep the standard error of programs
   being tested intact.
   (merge d88785e jk/test-send-sh-x-trace-elsewhere later to maint).

 * t0040 had too many unnecessary repetitions in its test data.  Teach
   test-parse-options program so that a caller can tell what it
   expects in its output, so that these repetitions can be cleaned up.

 * Add perf test for "rebase -i"

 * Common mistakes when writing gitlink: in our documentation are
   found by "make check-docs".

 * t9xxx series has been updated primarily for readability, while
   fixing small bugs in it.  A few scripted Porcelains have also been
   updated to fix possible bugs around their use of "test -z" and
   "test -n".

 * CI test was taught to run git-svn tests.


Also contains various documentation updates and code clean-ups.


Fixes since v2.8
----------------

Unless otherwise noted, all the fixes since v2.8 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * "git config --get-urlmatch", unlike other variants of the "git
   config --get" family, did not signal error with its exit status
   when there was no matching configuration.

 * The "--local-env-vars" and "--resolve-git-dir" options of "git
   rev-parse" failed to work outside a repository when the command's
   option parsing was rewritten in 1.8.5 era.

 * "git index-pack --keep[=<msg>] pack-$name.pack" simply did not work.

 * Fetching of history by naming a commit object name directly didn't
   work across remote-curl transport.

 * A small memory leak in an error codepath has been plugged in xdiff
   code.

 * strbuf_getwholeline() did not NUL-terminate the buffer on certain
   corner cases in its error codepath.

 * "git mergetool" did not work well with conflicts that both sides
   deleted.

 * "git send-email" had trouble parsing alias file in mailrc format
   when lines in it had trailing whitespaces on them.

 * When "git merge --squash" stopped due to conflict, the concluding
   "git commit" failed to read in the SQUASH_MSG that shows the log
   messages from all the squashed commits.

 * "git merge FETCH_HEAD" dereferenced NULL pointer when merging
   nothing into an unborn history (which is arguably unusual usage,
   which perhaps was the reason why nobody noticed it).

 * When "git worktree" feature is in use, "git branch -d" allowed
   deletion of a branch that is checked out in another worktree,
   which was wrong.

 * When "git worktree" feature is in use, "git branch -m" renamed a
   branch that is checked out in another worktree without adjusting
   the HEAD symbolic ref for the worktree.

 * "git diff -M" used to work better when two originally identical
   files A and B got renamed to X/A and X/B by pairing A to X/A and B
   to X/B, but this was broken in the 2.0 timeframe.

 * "git send-pack --all <there>" was broken when its command line
   option parsing was written in the 2.6 timeframe.

 * "git format-patch --help" showed `-s` and `--no-patch` as if these
   are valid options to the command.  We already hide `--patch` option
   from the documentation, because format-patch is about showing the
   diff, and the documentation now hides these options as well.

 * When running "git blame $path" with unnormalized data in the index
   for the path, the data in the working tree was blamed, even though
   "git add" would not have changed what is already in the index, due
   to "safe crlf" that disables the line-end conversion.  It has been
   corrected.

 * A change back in version 2.7 to "git branch" broke display of a
   symbolic ref in a non-standard place in the refs/ hierarchy (we
   expect symbolic refs to appear in refs/remotes/*/HEAD to point at
   the primary branch the remote has, and as .git/HEAD to point at the
   branch we locally checked out).

 * A partial rewrite of "git submodule" in the 2.7 timeframe changed
   the way the gitdir: pointer in the submodules point at the real
   repository location to use absolute paths by accident.  This has
   been corrected.

 * "git commit" misbehaved in a few minor ways when an empty message
   is given via -m '', all of which has been corrected.

 * Support for CRAM-MD5 authentication method in "git imap-send" did
   not work well.

 * Upcoming OpenSSL 1.1.0 will break compilation b updating a few APIs
   we use in imap-send, which has been adjusted for the change.

 * The socks5:// proxy support added back in 2.6.4 days was not aware
   that socks5h:// proxies behave differently.

 * "git config" had a codepath that tried to pass a NULL to
   printf("%s"), which nobody seems to have noticed.

 * On Cygwin, object creation uses the "create a temporary and then
   rename it to the final name" pattern, not "create a temporary,
   hardlink it to the final name and then unlink the temporary"
   pattern.

   This is necessary to use Git on Windows shared directories, and is
   already enabled for the MinGW and plain Windows builds.  It also
   has been used in Cygwin packaged versions of Git for quite a while.
   See http://thread.gmane.org/gmane.comp.version-control.git/291853

 * "merge-octopus" strategy did not ensure that the index is clean
   when merge begins.

 * When "git merge" notices that the merge can be resolved purely at
   the tree level (without having to merge blobs) and the resulting
   tree happens to already exist in the object store, it forgot to
   update the index, which lead to an inconsistent state for later
   operations.

 * "git submodule" reports the paths of submodules the command
   recurses into, but this was incorrect when the command was not run
   from the root level of the superproject.

 * The "user.useConfigOnly" configuration variable makes it an error
   if users do not explicitly set user.name and user.email.  However,
   its check was not done early enough and allowed another error to
   trigger, reporting that the default value we guessed from the
   system setting was unusable.  This was a suboptimal end-user
   experience as we want the users to set user.name/user.email without
   relying on the auto-detection at all.

 * "git mv old new" did not adjust the path for a submodule that lives
   as a subdirectory inside old/ directory correctly.

 * "git replace -e" did not honour "core.editor" configuration.

 * "git push" from a corrupt repository that attempts to push a large
   number of refs deadlocked; the thread to relay rejection notices
   for these ref updates blocked on writing them to the main thread,
   after the main thread at the receiving end notices that the push
   failed and decides not to read these notices and return a failure.

 * mmap emulation on Windows has been optimized and work better without
   consuming paging store when not needed.

 * A question by "git send-email" to ask the identity of the sender
   has been updated.

 * UI consistency improvements for "git mergetool".

 * "git rebase -m" could be asked to rebase an entire branch starting
   from the root, but failed by assuming that there always is a parent
   commit to the first commit on the branch.
   (merge 79f4344 bw/rebase-merge-entire-branch later to maint).

 * Fix a broken "p4 lfs" test.

 * Recent update to Git LFS broke "git p4" by changing the output from
   its "lfs pointer" subcommand.

 * "git fetch" test t5510 was flaky while running a (forced) automagic
   garbage collection.

 * Documentation updates to help contributors setting up Travis CI
   test for their patches.

 * Some multi-byte encoding can have a backslash byte as a later part
   of one letter, which would confuse "highlight" filter used in
   gitweb.

 * "git commit-tree" plumbing command required the user to always sign
   its result when the user sets the commit.gpgsign configuration
   variable, which was an ancient mistake.  Rework "git rebase" that
   relied on this mistake so that it reads commit.gpgsign and pass (or
   not pass) the -S option to "git commit-tree" to keep the end-user
   expectation the same, while teaching "git commit-tree" to ignore
   the configuration variable.  This will stop requiring the users to
   sign commit objects used internally as an implementation detail of
   "git stash".
   (merge 6694856 jc/commit-tree-ignore-commit-gpgsign later to maint).

 * "http.cookieFile" configuration variable clearly wants a pathname,
   but we forgot to treat it as such by e.g. applying tilde expansion.
   (merge e5a39ad bn/http-cookiefile-config later to maint).

 * Consolidate description of tilde-expansion that is done to
   configuration variables that take pathname to a single place.
   (merge dca83ab jc/config-pathname-type later to maint).

 * Correct faulty recommendation to use "git submodule deinit ." when
   de-initialising all submodules, which would result in a strange
   error message in a pathological corner case.
   (merge f6a5279 sb/submodule-deinit-all later to maint).

 * Many 'linkgit:<git documentation page>' references were broken,
   which are all fixed with this.
   (merge 1cca17d jc/linkgit-fix later to maint).

 * "git rerere" can get confused by conflict markers deliberately left
   by the inner merge step, because they are indistinguishable from
   the real conflict markers left by the outermost merge which are
   what the end user and "rerere" need to look at.  This was fixed by
   making the conflict markers left by the inner merges a bit longer.
   (merge 0f9fd5c jc/ll-merge-internal later to maint).

 * CI test was taught to build documentation pages.
   (merge b98712b ls/travis-build-doc later to maint).

 * "git fsck" learned to catch NUL byte in a commit object as
   potential error and warn.
   (merge 6d2d780 jc/fsck-nul-in-commit later to maint).

 * Portability enhancement for "rebase -i" to help platforms whose
   shell does not like "for i in <empty>" (which is not POSIX-kosher).
   (merge 8e98b35 jk/rebase-interative-eval-fix later to maint).

 * On Windows, .git and optionally any files whose name starts with a
   dot are now marked as hidden, with a core.hideDotFiles knob to
   customize this behaviour.
   (merge ebf31e7 js/windows-dotgit later to maint).

 * Documentation for "git merge --verify-signatures" has been updated
   to clarify that the signature of only the commit at the tip is
   verified.  Also the phrasing used for signature and key validity is
   adjusted to align with that used by OpenPGP.
   (merge 05a5869 kf/gpg-sig-verification-doc later to maint).

 * A couple of bugs around core.autocrlf have been fixed.
   (merge caa47ad tb/core-eol-fix later to maint).

 * Many commands normalize command line arguments from NFD to NFC
   variant of UTF-8 on OSX, but commands in the "diff" family did
   not, causing "git diff $path" to complain that no such path is
   known to Git.  They have been taught to do the normalization.
   (merge 90a78b8 ar/diff-args-osx-precompose later to maint).

 * "git difftool" learned to handle unmerged paths correctly in
   dir-diff mode.
   (merge 366f9ce da/difftool later to maint).

 * Other minor clean-ups and documentation updates
   (merge 832c0e5 lp/typofixes later to maint).
   (merge f5ee54a sb/z-is-gnutar-ism later to maint).
   (merge 2e3926b va/i18n-misc-updates later to maint).
   (merge f212dcc bn/config-doc-tt-varnames later to maint).
   (merge f54bea4 nd/remote-plural-ours-plus-theirs later to maint).
   (merge 2bb0518 ak/t4151-ls-files-could-be-empty later to maint).
   (merge 4df4313 jc/test-seq later to maint).
   (merge a75a308 tb/t5601-sed-fix later to maint).
   (merge 6c1fbe1 va/i18n-remote-comment-to-align later to maint).
   (merge dee2303 va/mailinfo-doc-typofix later to maint).

----------------------------------------------------------------

Changes since v2.8.0 are as follows:

Adam Dinwoodie (2):
      config.mak.uname: Cygwin needs OBJECT_CREATION_USES_RENAMES
      commit: --amend -m '' silently fails to wipe message

Alexander Kuleshov (1):
      submodule-config: use hashmap_iter_first()

Alexander Rinass (1):
      diff: run arguments through precompose_argv

Armin Kunaschik (1):
      t4151: make sure argument to 'test -z' is given

Ben Woosley (1):
      git-rebase--merge: don't include absent parent as a base

Brian Norris (3):
      Documentation: config: improve word ordering for http.cookieFile
      http: expand http.cookieFile as a path
      config: consistently format $variables in monospaced font

Christian Couder (5):
      Documentation: talk about pager in api-trace.txt
      builtin/apply: get rid of useless 'name' variable
      builtin/apply: handle parse_binary() failure
      builtin/apply: free patch when parse_chunk() fails
      Git/SVN: die when there is no commit metadata

David Aguilar (4):
      mergetool: support delete/delete conflicts
      mergetool: honor tempfile configuration when resolving delete conflicts
      difftool: initialize variables for readability
      difftool: handle unmerged files in dir-diff mode

David Turner (5):
      refs: move head_ref{,_submodule} to the common code
      refs: move for_each_*ref* functions into common code
      files-backend: break out ref reading
      refs: move resolve_ref_unsafe into common code
      refs: on symref reflog expire, lock symref not referrent

Dennis Kaarsemaker (1):
      Makefile: remove dependency on git.spec

Elia Pinto (1):
      api-trace.txt: fix typo

Elijah Newren (6):
      merge-recursive: remove duplicate code
      merge-recursive: do not check working copy when creating a virtual merge base
      t7605: add a testcase demonstrating a bug with trivial merges
      builtin/merge.c: fix a bug with trivial merges
      t6044: new merge testcases for when index doesn't match HEAD
      merge-octopus: abort if index does not match HEAD

Eric Sunshine (5):
      lib-gpg: drop unnecessary "missing GPG" warning
      t6302: normalize names and descriptions of signed tags
      t6302: also test annotated in addition to signed tags
      t6302: skip only signed tags rather than all tests when GPG is missing
      git-format-patch.txt: don't show -s as shorthand for multiple options

Eric Wong (4):
      send-email: more meaningful Message-ID
      send-email: do not load Data::Dumper
      pack-objects: warn on split packs disabling bitmaps
      .mailmap: update to my shorter email address

Gabriel Souza Franco (2):
      fetch-pack: fix object_id of exact sha1
      fetch-pack: update the documentation for "<refs>..." arguments

Jacob Keller (7):
      submodule: don't pass empty string arguments to submodule--helper clone
      submodule: check argc count for git submodule--helper clone
      submodule: fix submodule--helper clone usage
      submodule: fix segmentation fault in submodule--helper clone
      quote: implement sq_quotef()
      git: submodule honor -c credential.* from command line
      xdiff: add recs_match helper function

Jacob Nisnevich (2):
      mergetools: create mergetool_find_win32_cmd() helper function for winmerge
      mergetools: add support for ExamDiff

Jan Durovec (2):
      git-p4: clean-up code style in tests
      git-p4: add P4 jobs to git commit message

Jeff King (52):
      credential: let empty credential specs reset helper list
      t1515: add tests for rev-parse out-of-repo helpers
      add--interactive: allow custom diff highlighting programs
      rev-parse: let some options run outside repository
      strbuf_getwholeline: NUL-terminate getdelim buffer on error
      setup: make startup_info available everywhere
      setup: set startup_info->have_repository more reliably
      remote: don't resolve HEAD in non-repository
      mailmap: do not resolve blobs in a non-repository
      grep: turn off gitlink detection for --no-index
      use setup_git_directory() in test-* programs
      setup: document check_repository_format()
      wrap shared_repository global in get/set accessors
      lazily load core.sharedrepository
      check_repository_format_gently: stop using git_config_early
      config: drop git_config_early
      setup: refactor repo format reading and verification
      init: use setup.c's repo version verification
      setup: unify repository version callbacks
      setup: drop repository_format_version global
      verify_repository_format: mark messages for translation
      send-email: ignore trailing whitespace in mailrc alias file
      credential-cache--daemon: clarify "exit" action semantics
      t/lib-httpd: pass through GIT_CONFIG_NOSYSTEM env
      git_config_push_parameter: handle empty GIT_CONFIG_PARAMETERS
      branch: fix shortening of non-remote symrefs
      commit: do not ignore an empty message given by -m ''
      config: lower-case first word of error strings
      git_config_set_multivar_in_file: all non-zero returns are errors
      git_config_set_multivar_in_file: handle "unset" errors
      t5532: use write_script
      send-pack: close demux pipe before finishing async process
      run-command: teach async threads to ignore SIGPIPE
      send-pack: isolate sigpipe in demuxer thread
      fetch-pack: isolate sigpipe in demuxer thread
      t5504: drop sigpipe=ok from push tests
      remote.c: spell __attribute__ correctly
      t5550: fix typo in $HTTPD_URL
      t5550: break submodule config test into multiple sub-tests
      submodule: export sanitized GIT_CONFIG_PARAMETERS
      submodule--helper: move config-sanitizing to submodule.c
      submodule: use prepare_submodule_repo_env consistently
      submodule: stop sanitizing config options
      t6302: simplify non-gpg cases
      rebase--interactive: avoid empty list in shell for-loop
      test-lib: set BASH_XTRACEFD automatically
      t/lib-git-svn: drop $remote_git_svn and $git_svn_id
      t9100,t3419: enclose all test code in single-quotes
      t9107: use "return 1" instead of "exit 1"
      t9107: switch inverted single/double quotes in test
      t9103: modernize test style
      always quote shell arguments to test -z/-n

Johannes Schindelin (16):
      replace --edit: respect core.editor
      name-rev: include taggerdate in considering the best name
      win32mmap: set errno appropriately
      mmap(win32): avoid copy-on-write when it is unnecessary
      mmap(win32): avoid expensive fstat() call
      http: support sending custom HTTP headers
      tests: adjust the configuration for Apache 2.2
      t5551: make the test for extra HTTP headers more robust
      t3404: fix typo
      submodule: ensure that -c http.extraheader is heeded
      mingw: introduce the 'core.hideDotFiles' setting
      mingw: remove unnecessary definition
      Windows: only add a no-op pthread_sigmask() when needed
      perf: let's disable symlinks when they are not available
      perf: make the tests work in worktrees
      perf: run "rebase -i" under perf

Johannes Sixt (2):
      Windows: shorten code by re-using convert_slashes()
      Windows: add pthread_sigmask() that does nothing

John Keeping (3):
      config: fail if --get-urlmatch finds no value
      Documentation/git-config: use bulleted list for exit codes
      Documentation/git-config: fix --get-all description

Junio C Hamano (69):
      rerere: split conflict ID further
      rerere: scan $GIT_DIR/rr-cache/$ID when instantiating a rerere_id
      index-pack: correct --keep[=<msg>]
      index-pack: add a helper function to derive .idx/.keep filename
      rerere: handle leftover rr-cache/$ID directory and postimage files
      rerere: delay the recording of preimage
      rerere: allow multiple variants to exist
      t4200: rerere a merge with two identical conflicts
      rerere: do use multiple variants
      apply: remove unused call to free() in gitdiff_{old,new}name()
      merge: fix NULL pointer dereference when merging nothing into void
      merge: refuse to create too cool a merge by default
      pretty: enable --expand-tabs by default for selected pretty formats
      pretty: allow tweaking tabwidth in --expand-tabs
      submodule--helper: do not borrow absolute_path() result for too long
      Git 2.8.1
      First batch for post 2.8 cycle
      pretty: test --expand-tabs
      Makefile: fix misdirected redirections
      Second batch for post 2.8 cycle
      Makefile: stop pretending to support rpmbuild
      rerere: gc and clear
      rerere: move code related to "forget" together
      rerere: split code to call ll_merge() further
      rerere: adjust 'forget' to multi-variant world order
      setup.c: do not feed NULL to "%.*s" even with precision 0
      Third batch for post 2.8 cycle
      http: differentiate socks5:// and socks5h://
      t1020: do not overuse printf and use write_script
      t3404: use write_script
      Fourth batch for post 2.8 cycle
      Start preparing for 2.8.2
      fsck_commit_buffer(): do not special case the last validation
      ll-merge: fix typo in comment
      Prepare for 2.8.2
      Makefile: clean *.o files we create
      Fifth batch for post 2.8 cycle
      t3033: avoid 'ambiguous refs' warning
      pull: pass --allow-unrelated-histories to "git merge"
      Sixth batch for post 2.8 cycle
      send-email: fix grammo in the prompt that asks e-mail recipients
      Seventh batch for post 2.8 cycle
      Git 2.8.2
      Eighth batch for 2.9
      diff: undocument the compaction heuristic knobs for experimentation
      Start preparing for 2.8.3
      commit-tree: do not pay attention to commit.gpgsign
      Ninth batch for 2.9
      config: describe 'pathname' value type
      Tenth batch for 2.9
      Almost ready for 2.8.3
      test-lib-functions.sh: remove misleading comment on test_seq
      test-lib-functions.sh: rewrite test_seq without Perl
      ll-merge: use a longer conflict marker for internal merge
      t6036: remove pointless test that expects failure
      Documentation: fix linkgit references
      fsck: detect and warn a commit with embedded NUL
      ci: validate "linkgit:" in documentation
      test-parse-options: fix output when callback option fails
      test-parse-options: --expect=<string> option to simplify tests
      t0040: remove unused test helpers
      t0040: convert a few tests to use test-parse-options --expect
      Eleventh batch for 2.9
      rerere: plug memory leaks upon "rerere forget" failure
      Twelfth batch for 2.9
      Thirteenth batch for 2.9
      Git 2.8.3
      rerere: remove an null statement
      Git 2.9-rc0

Kazuki Yamaguchi (10):
      branch -d: refuse deleting a branch which is currently checked out
      refs: add a new function set_worktree_head_symref
      branch -m: update all per-worktree HEADs
      set_worktree_head_symref(): fix error message
      imap-send: use HMAC() function provided by OpenSSL
      imap-send: check NULL return of SSL_CTX_new()
      imap-send: avoid deprecated TLSv1_method()
      configure: remove checking for HMAC_CTX_cleanup
      imap-send: check for NOLOGIN capability only when using LOGIN command
      imap-send: fix CRAM-MD5 response calculation

Keller Fuchs (1):
      Documentation: clarify signature verification

Lars Schneider (8):
      git-p4: map a P4 user to Git author name and email address
      travis-ci: update Git-LFS and P4 to the latest version
      travis-ci: express Linux/OS X dependency versions more clearly
      git-p4: fix Git LFS pointer parsing
      t9824: fix wrong reference value
      Documentation: add setup instructions for Travis CI
      travis-ci: build documentation
      travis-ci: enable Git SVN tests t91xx on Linux

Laurent Arnoud (1):
      tag: add the option to force signing of annotated tags

Li Peng (1):
      typofix: assorted typofixes in comments, documentation and messages

Linus Torvalds (1):
      pretty: expand tabs in indented logs to make things line up properly

Luke Diamand (3):
      git-p4 tests: cd to / before running python
      git-p4 tests: work with python3 as well as python2
      git-p4 tests: time_in_seconds should use $PYTHON_PATH

Marios Titas (2):
      ident: check for useConfigOnly before auto-detection of name/email
      ident: give "please tell me" message upon useConfigOnly error

Matthieu Moy (11):
      Documentation/diff-config: fix description of diff.renames
      t4001-diff-rename: wrap file creations in a test
      t: add tests for diff.renames (true/false/unset)
      log: introduce init_log_defaults()
      diff: activate diff.renames by default
      lockfile: mark strings for translation
      lockfile: improve error message when lockfile exists
      git.spec.in: use README.md, not README
      README.md: don't take 'commandname' literally
      git-multimail: update to release 1.3.0
      git-multimail: update to release 1.3.1

Mehul Jain (9):
      git-pull.c: introduce git_pull_config()
      pull --rebase: add --[no-]autostash flag
      t5520: use consistent capitalization in test titles
      t5520: ensure consistent test conditions
      t5520: use better test to check stderr output
      t5520: factor out common "successful autostash" code
      t5520: factor out common "failing autostash" code
      t5520: reduce commom lines of code
      t5520: test --[no-]autostash with pull.rebase=true

Michael Haggerty (19):
      t1430: test the output and error of some commands more carefully
      t1430: clean up broken refs/tags/shadow
      t1430: don't rely on symbolic-ref for creating broken symrefs
      t1430: test for-each-ref in the presence of badly-named refs
      t1430: improve test coverage of deletion of badly-named refs
      resolve_missing_loose_ref(): simplify semantics
      resolve_ref_unsafe(): use for loop to count up to MAXDEPTH
      resolve_ref_unsafe(): ensure flags is always set
      resolve_ref_1(): eliminate local variable
      resolve_ref_1(): reorder code
      resolve_ref_1(): eliminate local variable "bad_name"
      read_raw_ref(): manage own scratch space
      files-backend: inline resolve_ref_1() into resolve_ref_unsafe()
      read_raw_ref(): change flags parameter to unsigned int
      fsck_head_link(): remove unneeded flag variable
      cmd_merge(): remove unneeded flag variable
      checkout_paths(): remove unneeded flag variable
      check_aliased_update(): check that dst_name is non-NULL
      show_head_ref(): check the result of resolve_ref_namespace()

Michael J Gruber (1):
      completion: complete --cherry-mark for git log

Michael Procter (1):
      upload-pack: use argv_array for pack_objects

Nguyễn Thái Ngọc Duy (62):
      git-apply.txt: remove a space
      git-apply.txt: mention the behavior inside a subdir
      apply: report patch skipping in verbose mode
      test helpers: move test-* to t/helper/ subdirectory
      dir.c: remove dead function fnmatch_icase()
      wrapper.c: delete dead function git_mkstemps()
      dir.c: rename str(n)cmp_icase to fspath(n)cmp
      path.c: add git_common_path() and strbuf_git_common_path()
      worktree.c: store "id" instead of "git_dir"
      worktree.c: make find_shared_symref() return struct worktree *
      worktree.c: mark current worktree
      path.c: refactor and add worktree_git_path()
      wt-status.c: split rebase detection out of wt_status_get_state()
      wt-status.c: make wt_status_check_rebase() work on any worktree
      worktree.c: avoid referencing to worktrees[i] multiple times
      worktree.c: check whether branch is rebased in another worktree
      wt-status.c: split bisect detection out of wt_status_get_state()
      worktree.c: check whether branch is bisected in another worktree
      branch: do not rename a branch under bisect or rebase
      remote.c: specify correct plural form in "commit diverge" message
      usage.c: move format processing out of die_errno()
      usage.c: add warning_errno() and error_errno()
      bisect.c: use die_errno() and warning_errno()
      builtin/am.c: use error_errno()
      builtin/branch.c: use error_errno()
      builtin/fetch.c: use error_errno()
      builtin/help.c: use warning_errno()
      builtin/mailsplit.c: use error_errno()
      builtin/merge-file.c: use error_errno()
      builtin/pack-objects.c: use die_errno() and warning_errno()
      builtin/rm.c: use warning_errno()
      builtin/update-index.c: prefer "err" to "errno" in process_lstat_error
      builtin/upload-archive.c: use error_errno()
      builtin/worktree.c: use error_errno()
      check-racy.c: use error_errno()
      combine-diff.c: use error_errno()
      compat/win32/syslog.c: use warning_errno()
      config.c: use error_errno()
      connected.c: use error_errno()
      copy.c: use error_errno()
      credential-cache--daemon.c: use warning_errno()
      diff-no-index.c: use error_errno()
      editor.c: use error_errno()
      entry.c: use error_errno()
      fast-import.c: use error_errno()
      gpg-interface.c: use error_errno()
      grep.c: use error_errno()
      http.c: use error_errno() and warning_errno()
      ident.c: use warning_errno()
      mailmap.c: use error_errno()
      reachable.c: use error_errno()
      rerere.c: use error_errno() and warning_errno()
      run-command.c: use error_errno()
      sequencer.c: use error_errno()
      server-info.c: use error_errno()
      sha1_file.c: use {error,die,warning}_errno()
      transport-helper.c: use error_errno()
      unpack-trees.c: use error_errno()
      upload-pack.c: use error_errno()
      vcs-svn: use error_errno()
      wrapper.c: use warning_errno()
      wrap-for-bin.sh: regenerate bin-wrappers when switching branches

Nikola Forró (1):
      difftool/mergetool: make the form of yes/no questions consistent

Ori Avtalion (1):
      Documentation: git diff --check detects conflict markers

Pranit Bauva (9):
      t/t7502 : drop duplicate test
      api-parse-options.txt: document OPT_CMDMODE()
      t0040-test-parse-options.sh: fix style issues
      test-parse-options: print quiet as integer
      t0040-parse-options: improve test coverage
      t/t7507: improve test coverage
      parse-options.c: make OPTION_COUNTUP respect "unspecified" values
      t7507-commit-verbose: improve test coverage by testing number of diffs
      commit: add a commit.verbose config variable

Ralf Thielow (4):
      completion: add option '--guides' to 'git help'
      completion: add 'revisions' and 'everyday' to 'git help'
      rebase-i: print an abbreviated hash when stop for editing
      string_list: use string-list API in unsorted_string_list_lookup()

Ramsay Jones (2):
      xdiff/xprepare: use the XDF_DIFF_ALG() macro to access flag bits
      xdiff/xprepare: fix a memory leak

Ray Zhang (1):
      worktree: add: introduce --checkout option

René Nyffenegger (1):
      Documentation: fix typo 'In such these cases'

SZEDER Gábor (5):
      diffcore: fix iteration order of identical files during rename detection
      for-each-ref: fix description of '--contains' in manpage
      test-lib: simplify '--option=value' parsing
      t9824: fix broken &&-chain in a subshell
      t5510: run auto-gc in the foreground

Santiago Torres (6):
      builtin/verify-tag.c: ignore SIGPIPE in gpg-interface
      t7030: test verifying multiple tags
      verify-tag: update variable name and type
      verify-tag: prepare verify_tag for libification
      verify-tag: move tag verification code to tag.c
      tag -v: verify directly rather than exec-ing verify-tag

Saurav Sachidanand (1):
      dir: store EXC_FLAG_* values in unsigned integers

Shin Kojima (1):
      gitweb: apply fallback encoding before highlight

Sidhant Sharma [:tk] (1):
      builtin/receive-pack.c: use parse_options API

Stanislav Kolotinskiy (1):
      git-send-pack: fix --all option when used with directory

Stefan Beller (44):
      submodule-config: keep update strategy around
      submodule-config: drop check against NULL
      fetching submodules: respect `submodule.fetchJobs` config option
      submodule update: direct error message to stderr
      run_processes_parallel: treat output of children as byte array
      run_processes_parallel: rename parameters for the callbacks
      git submodule update: have a dedicated helper for cloning
      submodule helper: remove double 'fatal: ' prefix
      submodule update: expose parallelism to the user
      clone: allow an explicit argument for parallel submodule clones
      clone tests: rename t57* => t56*
      rebase: decouple --exec from --interactive
      t3404: cleanup double empty lines between tests
      submodule foreach: correct path display in recursive submodules
      submodule update --init: correct path handling in recursive submodules
      submodule status: correct path handling in recursive submodules
      submodule update: align reporting path for custom command execution
      submodule update: test recursive path reporting from subdirectory
      t7407: make expectation as clear as possible
      recursive submodules: test for relative paths
      submodule--helper: fix potential NULL-dereference
      submodule--helper clone: create the submodule path just once
      notes: don't leak memory in git_config_get_notes_strategy
      abbrev_sha1_in_line: don't leak memory
      bundle: don't leak an fd in case of early return
      credential-cache, send_request: close fd when done
      submodule--helper, module_clone: always operate on absolute paths
      submodule--helper, module_clone: catch fprintf failure
      submodule: port resolve_relative_url from shell to C
      submodule: port init from shell to C
      xdiff: implement empty line chunk heuristic
      mv: allow moving nested submodules
      clone: add `--shallow-submodules` flag
      config doc: improve exit code listing
      config.c: drop local variable
      submodule-config: don't shadow `cache`
      submodule init: fail gracefully with a missing .gitmodules file
      submodule--helper update-clone: abort gracefully on missing .gitmodules
      submodule deinit test: fix broken && chain in subshell
      submodule init: redirect stdout to stderr
      t7300: mark test with SANITY
      submodule deinit: require '--all' instead of '.' for all submodules
      t3513: do not compress backup tar file
      t6041: do not compress backup tar file

Stephen P. Smith (1):
      wt-status.c: set commitable bit if there is a meaningful merge.

Sven Strickroth (3):
      commit: do not lose SQUASH_MSG contents
      MSVC: vsnprintf in Visual Studio 2015 doesn't need SNPRINTF_SIZE_CORR any more
      MSVC: use shipped headers instead of fallback definitions

Torsten Bögershausen (6):
      correct blame for files commited with CRLF
      t0027: make commit_chk_wrnNNO() reliable
      convert: allow core.autocrlf=input and core.eol=crlf
      t0027: test cases for combined attributes
      convert.c: ident + core.autocrlf didn't work
      t5601: Remove trailing space in sed expression

Vasco Almeida (16):
      l10n: fr: fix transcation of "dir"
      l10n: fr: fix wrongly translated option name
      l10n: fr: change "id de clé" to match "id-clé"
      l10n: fr: don't translate "merge" as a parameter
      i18n: index-pack: use plural string instead of normal one
      i18n: builtin/branch.c: mark option for translation
      i18n: unpack-trees: mark strings for translation
      i18n: builtin/rm.c: remove a comma ',' from string
      i18n: branch: unmark string for translation
      i18n: branch: move comment for translators
      i18n: git-parse-remote.sh: mark strings for translation
      i18n: builtin/pull.c: mark placeholders for translation
      i18n: builtin/pull.c: split strings marked for translation
      i18n: remote: add comment for translators
      Documentation/git-mailinfo: fix typo
      i18n: unpack-trees: avoid substituting only a verb in sentences

Xiaolong Ye (4):
      patch-ids: make commit_patch_id() a public helper function
      format-patch: add '--base' option to record base tree info
      format-patch: introduce --base=auto option
      format-patch: introduce format.useAutoBase configuration

brian m. carlson (6):
      sha1-name: introduce a get_oid() function
      test-match-trees: convert to use struct object_id
      match-trees: convert shift_tree() and shift_tree_by() to use object_id
      struct name_entry: use struct object_id instead of unsigned char sha1[20]
      tree-walk: convert tree_entry_extract() to use struct object_id
      match-trees: convert several leaf functions to use struct object_id

Ævar Arnfjörð Bjarmason (4):
      githooks.txt: improve the intro section
      githooks.txt: amend dangerous advice about 'update' hook ACL
      githooks.txt: minor improvements to the grammar & phrasing
      hooks: allow customizing where the hook directory is

^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.8.0
@ 2016-03-28 22:42  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2016-03-28 22:42 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

The latest feature release Git v2.8.0 is now available at the
usual places.  It is comprised of 532 non-merge commits since
v2.7.0, contributed by 74 people, 22 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.8.0'
tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.7.0 are as follows.
Welcome to the Git development community!

  마누엘, Adam Dinwoodie, Andrew Wheeler, Changwoo Ryu,
  Christoph Egger, Christoph Hoopmann, Dan Aloni, Dave Ware, David
  A. Wheeler, Dickson Wong, Felipe Gonçalves Assis, GyuYong Jung,
  Jon Griffiths, Kazutoshi Satoda, Lars Vogel, Martin Amdisen,
  Matthew Kraai, Paul Wagland, Rob Mayoff, Romain Picard, Vasco
  Almeida, and Victor Leschuk.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alexander Kuleshov, Alexander Shopov, Alex Henrie, Audric
  Schiltknecht, brian m. carlson, Carlos Martín Nieto, Christian
  Couder, David A. Greene, David Turner, Dennis Kaarsemaker,
  Dimitriy Ryazantcev, Edmundo Carmona Antoranz, Elia Pinto,
  Eric Sunshine, Eric Wong, Guillermo S. Romero, Jacob Keller,
  Jean-Noel Avila, Jeff King, Jiang Xin, Johannes Schindelin,
  Johannes Sixt, John Keeping, Jonathan Nieder, Junio C Hamano,
  Karsten Blees, Karthik Nayak, Knut Franke, Lars Schneider,
  Matthieu Moy, Matt McCutchen, Michael J Gruber, Mike Hommey,
  Nguyễn Thái Ngọc Duy, Øyvind A. Holm, Patrick Steinhardt,
  Pat Thoyts, Peter Krefting, Ralf Thielow, Ray Chen, Sebastian
  Schuberth, Shawn O. Pearce, Stefan Beller, Stephen P. Smith,
  SZEDER Gábor, Thomas Ackermann, Thomas Braun, Thomas Gummerer,
  Tobias Klauser, Torsten Bögershausen, Trần Ngọc Quân,
  and Will Palmer.

----------------------------------------------------------------

Git 2.8 Release Notes
=====================

Backward compatibility note
---------------------------

The rsync:// transport has been removed.


Updates since v2.7
------------------

UI, Workflows & Features

 * It turns out "git clone" over rsync transport has been broken when
   the source repository has packed references for a long time, and
   nobody noticed nor complained about it.

 * "push" learned that its "--delete" option can be shortened to
   "-d", just like "branch --delete" and "branch -d" are the same
   thing.

 * "git blame" learned to produce the progress eye-candy when it takes
   too much time before emitting the first line of the result.

 * "git grep" can now be configured (or told from the command line)
   how many threads to use when searching in the working tree files.

 * Some "git notes" operations, e.g. "git log --notes=<note>", should
   be able to read notes from any tree-ish that is shaped like a notes
   tree, but the notes infrastructure required that the argument must
   be a ref under refs/notes/.  Loosen it to require a valid ref only
   when the operation would update the notes (in which case we must
   have a place to store the updated notes tree, iow, a ref).

 * "git grep" by default does not fall back to its "--no-index"
   behavior outside a directory under Git's control (otherwise the
   user may by mistake end up running a huge recursive search); with a
   new configuration (set in $HOME/.gitconfig--by definition this
   cannot be set in the config file per project), this safety can be
   disabled.

 * "git pull --rebase" has been extended to allow invoking
   "rebase -i".

 * "git p4" learned to cope with the type of a file getting changed.

 * "git format-patch" learned to notice format.outputDirectory
   configuration variable.  This allows "-o <dir>" option to be
   omitted on the command line if you always use the same directory in
   your workflow.

 * "interpret-trailers" has been taught to optionally update a file in
   place, instead of always writing the result to the standard output.

 * Many commands that read files that are expected to contain text
   that is generated (or can be edited) by the end user to control
   their behavior (e.g. "git grep -f <filename>") have been updated
   to be more tolerant to lines that are terminated with CRLF (they
   used to treat such a line to contain payload that ends with CR,
   which is usually not what the users expect).

 * "git notes merge" used to limit the source of the merged notes tree
   to somewhere under refs/notes/ hierarchy, which was too limiting
   when inventing a workflow to exchange notes with remote
   repositories using remote-tracking notes trees (located in e.g.
   refs/remote-notes/ or somesuch).

 * "git ls-files" learned a new "--eol" option to help diagnose
   end-of-line problems.

 * "ls-remote" learned an option to show which branch the remote
   repository advertises as its primary by pointing its HEAD at.

 * New http.proxyAuthMethod configuration variable can be used to
   specify what authentication method to use, as a way to work around
   proxies that do not give error response expected by libcurl when
   CURLAUTH_ANY is used.  Also, the codepath for proxy authentication
   has been taught to use credential API to store the authentication
   material in user's keyrings.

 * Update the untracked cache subsystem and change its primary UI from
   "git update-index" to "git config".

 * There were a few "now I am doing this thing" progress messages in
   the TCP connection code that can be triggered by setting a verbose
   option internally in the code, but "git fetch -v" and friends never
   passed the verbose option down to that codepath.

 * Clean/smudge filters defined in a configuration file of lower
   precedence can now be overridden to be a pass-through no-op by
   setting the variable to an empty string.

 * A new "<branch>^{/!-<pattern>}" notation can be used to name a
   commit that is reachable from <branch> that does not match the
   given <pattern>.

 * The "user.useConfigOnly" configuration variable can be used to
   force the user to always set user.email & user.name configuration
   variables, serving as a reminder for those who work on multiple
   projects and do not want to put these in their $HOME/.gitconfig.

 * "git fetch" and friends that make network connections can now be
   told to only use ipv4 (or ipv6).

 * Some authentication methods do not need username or password, but
   libcurl needs some hint that it needs to perform authentication.
   Supplying an empty username and password string is a valid way to
   do so, but you can set the http.[<url>.]emptyAuth configuration
   variable to achieve the same, if you find it cleaner.

 * You can now set http.[<url>.]pinnedpubkey to specify the pinned
   public key when building with recent enough versions of libcURL.

 * The configuration system has been taught to phrase where it found a
   bad configuration variable in a better way in its error messages.
   "git config" learnt a new "--show-origin" option to indicate where
   the values come from.

 * The "credential-cache" daemon process used to run in whatever
   directory it happened to start in, but this made umount(2)ing the
   filesystem that houses the repository harder; now the process
   chdir()s to the directory that house its own socket on startup.

 * When "git submodule update" did not result in fetching the commit
   object in the submodule that is referenced by the superproject, the
   command learned to retry another fetch, specifically asking for
   that commit that may not be connected to the refs it usually
   fetches.

 * "git merge-recursive" learned "--no-renames" option to disable its
   rename detection logic.

 * Across the transition at around Git version 2.0, the user used to
   get a pretty loud warning when running "git push" without setting
   push.default configuration variable.  We no longer warn because the
   transition was completed a long time ago.

 * README has been renamed to README.md and its contents got tweaked
   slightly to make it easier on the eyes.


Performance, Internal Implementation, Development Support etc.

 * Add a framework to spawn a group of processes in parallel, and use
   it to run "git fetch --recurse-submodules" in parallel.

 * A slight update to the Makefile to mark ".PHONY" targets as such
   correctly.

 * In-core storage of the reverse index for .pack files (which lets
   you go from a pack offset to an object name) has been streamlined.

 * d95138e6 (setup: set env $GIT_WORK_TREE when work tree is set, like
   $GIT_DIR, 2015-06-26) attempted to work around a glitch in alias
   handling by overwriting GIT_WORK_TREE environment variable to
   affect subprocesses when set_git_work_tree() gets called, which
   resulted in a rather unpleasant regression to "clone" and "init".
   Try to address the same issue by always restoring the environment
   and respawning the real underlying command when handling alias.

 * The low-level code that is used to create symbolic references has
   been updated to share more code with the code that deals with
   normal references.

 * strbuf_getline() and friends have been redefined to make it easier
   to identify which callsite of (new) strbuf_getline_lf() should
   allow and silently ignore carriage-return at the end of the line to
   help users on DOSsy systems.

 * "git shortlog" used to accumulate various pieces of information
   regardless of what was asked to be shown in the final output.  It
   has been optimized by noticing what need not to be collected
   (e.g. there is no need to collect the log messages when showing
   only the number of changes).

 * "git checkout $branch" (and other operations that share the same
   underlying machinery) has been optimized.

 * Automated tests in Travis CI environment has been optimized by
   persisting runtime statistics of previous "prove" run, executing
   tests that take longer before other ones; this reduces the total
   wallclock time.

 * Test scripts have been updated to remove assumptions that are not
   portable between Git for POSIX and Git for Windows, or to skip ones
   with expectations that are not satisfiable on Git for Windows.

 * Some calls to strcpy(3) triggers a false warning from static
   analyzers that are less intelligent than humans, and reducing the
   number of these false hits helps us notice real issues.  A few
   calls to strcpy(3) in a couple of protrams that are already safe
   has been rewritten to avoid false warnings.

 * The "name_path" API was an attempt to reduce the need to construct
   the full path out of a series of path components while walking a
   tree hierarchy, but over time made less efficient because the path
   needs to be flattened, e.g. to be compared with another path that
   is already flat.  The API has been removed and its users have been
   rewritten to simplify the overall code complexity.

 * Help those who debug http(s) part of the system.
   (merge 0054045 sp/remote-curl-ssl-strerror later to maint).

 * The internal API to interact with "remote.*" configuration
   variables has been streamlined.

 * The ref-filter's format-parsing code has been refactored, in
   preparation for "branch --format" and friends.

 * Traditionally, the tests that try commands that work on the
   contents in the working tree were named with "worktree" in their
   filenames, but with the recent addition of "git worktree"
   subcommand, whose tests are also named similarly, it has become
   harder to tell them apart.  The traditional tests have been renamed
   to use "work-tree" instead in an attempt to differentiate them.
   (merge 5549029 mg/work-tree-tests later to maint).

 * Many codepaths forget to check return value from git_config_set();
   the function is made to die() to make sure we do not proceed when
   setting a configuration variable failed.
   (merge 3d18064 ps/config-error later to maint).

 * Handling of errors while writing into our internal asynchronous
   process has been made more robust, which reduces flakiness in our
   tests.
   (merge 43f3afc jk/epipe-in-async later to maint).

 * There is a new DEVELOPER knob that enables many compiler warning
   options in the Makefile.

 * The way the test scripts configure the Apache web server has been
   updated to work also for Apache 2.4 running on RedHat derived
   distros.

 * Out of maintenance gcc on OSX 10.6 fails to compile the code in
   'master'; work it around by using clang by default on the platform.

 * The "name_path" API was an attempt to reduce the need to construct
   the full path out of a series of path components while walking a
   tree hierarchy, but over time made less efficient because the path
   needs to be flattened, e.g. to be compared with another path that
   is already flat, in many cases.  The API has been removed and its
   users have been rewritten to simplify the overall code complexity.
   This incidentally also closes some heap-corruption holes.

 * Recent versions of GNU grep is pickier than before to decide if a
   file is "binary" and refuse to give line-oriented hits when we
   expect it to, unless explicitly told with "-a" option.  As our
   scripted Porcelains use sane_grep wrapper for line-oriented data,
   even when the line may contain non-ASCII payload we took from
   end-user data, use "grep -a" to implement sane_grep wrapper when
   using an implementation of "grep" that takes the "-a" option.



Also contains various documentation updates and code clean-ups.


Fixes since v2.7
----------------

Unless otherwise noted, all the fixes since v2.7 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * An earlier change in 2.5.x-era broke users' hooks and aliases by
   exporting GIT_WORK_TREE to point at the root of the working tree,
   interfering when they tried to use a different working tree without
   setting GIT_WORK_TREE environment themselves.

 * The "exclude_list" structure has the usual "alloc, nr" pair of
   fields to be used by ALLOC_GROW(), but clear_exclude_list() forgot
   to reset 'alloc' to 0 when it cleared 'nr' to discard the managed
   array.

 * Paths that have been told the index about with "add -N" are not
   quite yet in the index, but a few commands behaved as if they
   already are in a harmful way.

 * "git send-email" was confused by escaped quotes stored in the alias
   files saved by "mutt", which has been corrected.

 * A few non-portable C construct have been spotted by clang compiler
   and have been fixed.

 * The documentation has been updated to hint the connection between
   the '--signoff' option and DCO.

 * "git reflog" incorrectly assumed that all objects that used to be
   at the tip of a ref must be commits, which caused it to segfault.

 * The ignore mechanism saw a few regressions around untracked file
   listing and sparse checkout selection areas in 2.7.0; the change
   that is responsible for the regression has been reverted.

 * Some codepaths used fopen(3) when opening a fixed path in $GIT_DIR
   (e.g. COMMIT_EDITMSG) that is meant to be left after the command is
   done.  This however did not work well if the repository is set to
   be shared with core.sharedRepository and the umask of the previous
   user is tighter.  They have been made to work better by calling
   unlink(2) and retrying after fopen(3) fails with EPERM.

 * Asking gitweb for a nonexistent commit left a warning in the server
   log.

   Somebody may want to follow this up with an additional test, perhaps?
   IIRC, we do test that no Perl warnings are given to the server log,
   so this should have been caught if our test coverage were good.

 * "git rebase", unlike all other callers of "gc --auto", did not
   ignore the exit code from "gc --auto".

 * Many codepaths that run "gc --auto" before exiting kept packfiles
   mapped and left the file descriptors to them open, which was not
   friendly to systems that cannot remove files that are open.  They
   now close the packs before doing so.

 * A recent optimization to filter-branch in v2.7.0 introduced a
   regression when --prune-empty filter is used, which has been
   corrected.

 * The description for SANITY prerequisite the test suite uses has
   been clarified both in the comment and in the implementation.

 * "git tag" started listing a tag "foo" as "tags/foo" when a branch
   named "foo" exists in the same repository; remove this unnecessary
   disambiguation, which is a regression introduced in v2.7.0.

 * The way "git svn" uses auth parameter was broken by Subversion
   1.9.0 and later.

 * The "split" subcommand of "git subtree" (in contrib/) incorrectly
   skipped merges when it shouldn't, which was corrected.

 * A few options of "git diff" did not work well when the command was
   run from a subdirectory.

 * The command line completion learned a handful of additional options
   and command specific syntax.

 * dirname() emulation has been added, as Msys2 lacks it.

 * The underlying machinery used by "ls-files -o" and other commands
   has been taught not to create empty submodule ref cache for a
   directory that is not a submodule.  This removes a ton of wasted
   CPU cycles.

 * "git worktree" had a broken code that attempted to auto-fix
   possible inconsistency that results from end-users moving a
   worktree to different places without telling Git (the original
   repository needs to maintain back-pointers to its worktrees,
   but "mv" run by end-users who are not familiar with that fact
   will obviously not adjust them), which actually made things
   worse when triggered.

 * The low-level merge machinery has been taught to use CRLF line
   termination when inserting conflict markers to merged contents that
   are themselves CRLF line-terminated.

 * "git push --force-with-lease" has been taught to report if the push
   needed to force (or fast-forwarded).

 * The emulated "yes" command used in our test scripts has been
   tweaked not to spend too much time generating unnecessary output
   that is not used, to help those who test on Windows where it would
   not stop until it fills the pipe buffer due to lack of SIGPIPE.

 * The documentation for "git clean" has been corrected; it mentioned
   that .git/modules/* are removed by giving two "-f", which has never
   been the case.

 * The vimdiff backend for "git mergetool" has been tweaked to arrange
   and number buffers in the order that would match the expectation of
   majority of people who read left to right, then top down and assign
   buffers 1 2 3 4 "mentally" to local base remote merge windows based
   on that order.

 * "git show 'HEAD:Foo[BAR]Baz'" did not interpret the argument as a
   rev, i.e. the object named by the the pathname with wildcard
   characters in a tree object.
   (merge aac4fac nd/dwim-wildcards-as-pathspecs later to maint).

 * "git rev-parse --git-common-dir" used in the worktree feature
   misbehaved when run from a subdirectory.
   (merge 17f1365 nd/git-common-dir-fix later to maint).

 * "git worktree add -B <branchname>" did not work.

 * The "v(iew)" subcommand of the interactive "git am -i" command was
   broken in 2.6.0 timeframe when the command was rewritten in C.
   (merge 708b8cc jc/am-i-v-fix later to maint).

 * "git merge-tree" used to mishandle "both sides added" conflict with
   its own "create a fake ancestor file that has the common parts of
   what both sides have added and do a 3-way merge" logic; this has
   been updated to use the usual "3-way merge with an empty blob as
   the fake common ancestor file" approach used in the rest of the
   system.
   (merge 907681e jk/no-diff-emit-common later to maint).

 * The memory ownership rule of fill_textconv() API, which was a bit
   tricky, has been documented a bit better.
   (merge a64e6a4 jk/more-comments-on-textconv later to maint).

 * Update various codepaths to avoid manually-counted malloc().
   (merge 08c95df jk/tighten-alloc later to maint).

 * The documentation did not clearly state that the 'simple' mode is
   now the default for "git push" when push.default configuration is
   not set.
   (merge f6b1fb3 mm/push-simple-doc later to maint).

 * Recent versions of GNU grep are pickier when their input contains
   arbitrary binary data, which some of our tests uses.  Rewrite the
   tests to sidestep the problem.
   (merge 3b1442d jk/grep-binary-workaround-in-test later to maint).

 * A helper function "git submodule" uses since v2.7.0 to list the
   modules that match the pathspec argument given to its subcommands
   (e.g. "submodule add <repo> <path>") has been fixed.
   (merge 2b56bb7 sb/submodule-module-list-fix later to maint).

 * "git config section.var value" to set a value in per-repository
   configuration file failed when it was run outside any repository,
   but didn't say the reason correctly.
   (merge 638fa62 js/config-set-in-non-repository later to maint).

 * The code to read the pack data using the offsets stored in the pack
   idx file has been made more carefully check the validity of the
   data in the idx.
   (merge 7465feb jk/pack-idx-corruption-safety later to maint).

 * Other minor clean-ups and documentation updates
   (merge f459823 ak/extract-argv0-last-dir-sep later to maint).
   (merge 63ca1c0 ak/git-strip-extension-from-dashed-command later to maint).
   (merge 4867f11 ps/plug-xdl-merge-leak later to maint).
   (merge 4938686 dt/initial-ref-xn-commit-doc later to maint).
   (merge 9537f21 ma/update-hooks-sample-typofix later to maint).

----------------------------------------------------------------

Changes since v2.7.0 are as follows:

Adam Dinwoodie (1):
      t9117: test specifying full url to git svn init -T

Alex Henrie (2):
      stripspace: call U+0020 a "space" instead of a "blank"
      l10n: ca.po: update translation

Alexander Kuleshov (3):
      format-patch: introduce format.outputDirectory configuration
      exec_cmd.c: use find_last_dir_sep() for code simplification
      git.c: simplify stripping extension of a file in handle_builtin()

Alexander Shopov (1):
      gitk: Update Bulgarian translation (311t)

Andrew Wheeler (1):
      push: fix ref status reporting for --force-with-lease

Audric Schiltknecht (1):
      l10n: fr.po: Correct case in sentence

Carlos Martín Nieto (1):
      Disown ssh+git and git+ssh

Changwoo Ryu (4):
      l10n: ko.po: Add Korean translation
      l10n: ko.po: Update Korean translation
      l10n: ko: Update Korean translation
      l10n: ko.po: Update Korean translation

Christian Couder (11):
      dir: free untracked cache when removing it
      update-index: use enum for untracked cache options
      update-index: add --test-untracked-cache
      update-index: add untracked cache notifications
      update-index: move 'uc' var declaration
      dir: add {new,add}_untracked_cache()
      dir: add remove_untracked_cache()
      dir: simplify untracked cache "ident" field
      config: add core.untrackedCache
      test-dump-untracked-cache: don't modify the untracked cache
      t7063: add tests for core.untrackedCache

Christoph Egger (1):
      http: implement public key pinning

Christoph Hoopmann (1):
      l10n: de.po: fix typo

Dan Aloni (1):
      ident: add user.useConfigOnly boolean for when ident shouldn't be guessed

Dave Ware (1):
      contrib/subtree: fix "subtree split" skipped-merge bug

David A. Greene (1):
      contrib/subtree: Make testing easier

David A. Wheeler (1):
      Expand documentation describing --signoff

David Turner (3):
      do_compare_entry: use already-computed path
      unpack-trees: fix accidentally quadratic behavior
      refs: document transaction semantics

Dennis Kaarsemaker (1):
      reflog-walk: don't segfault on non-commit sha1's in the reflog

Dickson Wong (1):
      mergetool: reorder vim/gvim buffers in three-way diffs

Dimitriy Ryazantcev (3):
      l10n: ru.po: update Russian translation
      l10n: ru.po: update Russian translation
      l10n: ru.po: update Russian translation

Edmundo Carmona Antoranz (1):
      blame: add support for --[no-]progress option

Elia Pinto (92):
      Makefile: add missing phony target
      contrib/examples/git-commit.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-fetch.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-merge.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-repack.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-revert.sh: use the $( ... ) construct for command substitution
      contrib/thunderbird-patch-inline/appp.sh: use the $( ... ) construct for command substitution
      git-gui/po/glossary/txt-to-pot.sh: use the $( ... ) construct for command substitution
      t/lib-httpd.sh: use the $( ... ) construct for command substitution
      test-sha1.sh: use the $( ... ) construct for command substitution
      unimplemented.sh: use the $( ... ) construct for command substitution
      t/t1100-commit-tree-options.sh: use the $( ... ) construct for command substitution
      t/t1401-symbolic-ref.sh: use the $( ... ) construct for command substitution
      t/t1410-reflog.sh: use the $( ... ) construct for command substitution
      t/t1511-rev-parse-caret.sh: use the $( ... ) construct for command substitution
      t/t1512-rev-parse-disambiguation.sh: use the $( ... ) construct for command substitution
      t/t1700-split-index.sh: use the $( ... ) construct for command substitution
      t/t2025-worktree-add.sh: use the $( ... ) construct for command substitution
      t/t2102-update-index-symlinks.sh: use the $( ... ) construct for command substitution
      t/t3030-merge-recursive.sh: use the $( ... ) construct for command substitution
      t/t3100-ls-tree-restrict.sh: use the $( ... ) construct for command substitution
      t/t3101-ls-tree-dirname.sh: use the $( ... ) construct for command substitution
      t/t3210-pack-refs.sh: use the $( ... ) construct for command substitution
      t/t3403-rebase-skip.sh: use the $( ... ) construct for command substitution
      t/t3511-cherry-pick-x.sh: use the $( ... ) construct for command substitution
      t/t3600-rm.sh: use the $( ... ) construct for command substitution
      t/t3700-add.sh: use the $( ... ) construct for command substitution
      t/t5100-mailinfo.sh: use the $( ... ) construct for command substitution
      t/t5300-pack-object.sh: use the $( ... ) construct for command substitution
      t/t5301-sliding-window.sh: use the $( ... ) construct for command substitution
      t/t5302-pack-index.sh: use the $( ... ) construct for command substitution
      t/t5303-pack-corruption-resilience.sh: use the $( ... ) construct for command substitution
      t/t5304-prune.sh: use the $( ... ) construct for command substitution
      t/t5305-include-tag.sh: use the $( ... ) construct for command substitution
      t/t5500-fetch-pack.sh: use the $( ... ) construct for command substitution
      t/t5505-remote.sh: use the $( ... ) construct for command substitution
      t/t5506-remote-groups.sh: use the $( ... ) construct for command substitution
      t/t5510-fetch.sh: use the $( ... ) construct for command substitution
      t/t5515-fetch-merge-logic.sh: use the $( ... ) construct for command substitution
      t/t5516-fetch-push.sh: use the $( ... ) construct for command substitution
      t/t5517-push-mirror.sh: use the $( ... ) construct for command substitution
      t/t5522-pull-symlink.sh: use the $( ... ) construct for command substitution
      t/t5530-upload-pack-error.sh: use the $( ... ) construct for command substitution
      t/t5532-fetch-proxy.sh: use the $( ... ) construct for command substitution
      t/t5537-fetch-shallow.sh: use the $( ... ) construct for command substitution
      t/t5538-push-shallow.sh: use the $( ... ) construct for command substitution
      t/t5550-http-fetch-dumb.sh: use the $( ... ) construct for command substitution
      t/t5570-git-daemon.sh: use the $( ... ) construct for command substitution
      t/t5601-clone.sh: use the $( ... ) construct for command substitution
      t/t5700-clone-reference.sh: use the $( ... ) construct for command substitution
      t/t5710-info-alternate.sh: use the $( ... ) construct for command substitution
      t/t5900-repo-selection.sh: use the $( ... ) construct for command substitution
      t/t6001-rev-list-graft.sh: use the $( ... ) construct for command substitution
      t/t6002-rev-list-bisect.sh: use the $( ... ) construct for command substitution
      t/t6015-rev-list-show-all-parents.sh: use the $( ... ) construct for command substitution
      t/t6032-merge-large-rename.sh: use the $( ... ) construct for command substitution
      t/t6132-pathspec-exclude.sh: use the $( ... ) construct for command substitution
      t/t7001-mv.sh: use the $( ... ) construct for command substitution
      t/t7003-filter-branch.sh: use the $( ... ) construct for command substitution
      t/t7004-tag.sh: use the $( ... ) construct for command substitution
      t/t7006-pager.sh: use the $( ... ) construct for command substitution
      t/t7103-reset-bare.sh: use the $( ... ) construct for command substitution
      t/t7406-submodule-update.sh: use the $( ... ) construct for command substitution
      t/t7408-submodule-reference.sh: use the $( ... ) construct for command substitution
      t/t7504-commit-msg-hook.sh: use the $( ... ) construct for command substitution
      t/t7505-prepare-commit-msg-hook.sh: use the $( ... ) construct for command substitution
      t/t7602-merge-octopus-many.sh: use the $( ... ) construct for command substitution
      t/t7700-repack.sh: use the $( ... ) construct for command substitution
      t/t8003-blame-corner-cases.sh: use the $( ... ) construct for command substitution
      t/t9001-send-email.sh: use the $( ... ) construct for command substitution
      t9100-git-svn-basic.sh: use the $( ... ) construct for command substitution
      t9101-git-svn-props.sh: use the $( ... ) construct for command substitution
      t9104-git-svn-follow-parent.sh: use the $( ... ) construct for command substitution
      t9105-git-svn-commit-diff.sh: use the $( ... ) construct for command substitution
      t9107-git-svn-migrate.sh: use the $( ... ) construct for command substitution
      t9108-git-svn-glob.sh: use the $( ... ) construct for command substitution
      t9109-git-svn-multi-glob.sh: use the $( ... ) construct for command substitution
      t9110-git-svn-use-svm-props.sh: use the $( ... ) construct for command substitution
      t9114-git-svn-dcommit-merge.sh: use the $( ... ) construct for command substitution
      t9118-git-svn-funky-branch-names.sh: use the $( ... ) construct for command substitution
      t9119-git-svn-info.sh: use the $( ... ) construct for command substitution
      t9129-git-svn-i18n-commitencoding.sh: use the $( ... ) construct for command substitution
      t9130-git-svn-authors-file.sh: use the $( ... ) construct for command substitution
      t9132-git-svn-broken-symlink.sh: use the $( ... ) construct for command substitution
      t9137-git-svn-dcommit-clobber-series.sh: use the $( ... ) construct for command substitution
      t9138-git-svn-authors-prog.sh: use the $( ... ) construct for command substitution
      t9145-git-svn-master-branch.sh: use the $( ... ) construct for command substitution
      t9150-svk-mergetickets.sh: use the $( ... ) construct for command substitution
      t9300-fast-import.sh: use the $( ... ) construct for command substitution
      t9350-fast-export.sh: use the $( ... ) construct for command substitution
      t9501-gitweb-standalone-http-status.sh: use the $( ... ) construct for command substitution
      t9901-git-web--browse.sh: use the $( ... ) construct for command substitution

Eric Sunshine (2):
      git-compat-util: st_add4: work around gcc 4.2.x compiler crash
      Revert "config.mak.uname: use clang for Mac OS X 10.6"

Eric Wong (10):
      git-send-email: do not double-escape quotes from mutt
      for-each-ref: document `creatordate` and `creator` fields
      git-svn: fix auth parameter handling on SVN 1.9.0+
      pass transport verbosity down to git_connect
      connect & http: support -4 and -6 switches for remote operations
      t5570: add tests for "git {clone,fetch,pull} -v"
      git-svn: hoist out utf8 prep from t9129 to lib-git-svn
      tests: remove no-op full-svn-test target
      git-svn: shorten glob error message
      git-svn: fix URL canonicalization during init w/ SVN 1.7+

Felipe Gonçalves Assis (7):
      merge-recursive: option to disable renames
      merge-recursive: more consistent interface
      merge-strategies.txt: fix typo
      merge-recursive: find-renames resets threshold
      t3034: add rename threshold tests
      t3034: test option to disable renames
      t3034: test deprecated interface

Guillermo S. Romero (1):
      gitk: Follow themed bgcolor in help dialogs

GyuYong Jung (1):
      git-cvsserver.perl: fix typo

Jacob Keller (1):
      notes: allow merging from arbitrary references

Jean-Noel Avila (5):
      l10n: fr.po v2.8.0 round 1 2509t
      l10n: fr.po v2.8.0 round 2
      l10n: fr.po v2.8.0 round 3
      gitk: Update French translation (311t)
      gitk: fr.po: Sync translations with git

Jeff King (86):
      pack-revindex: drop hash table
      pack-revindex: store entries directly in packed_git
      create_symref: modernize variable names
      create_symref: use existing ref-lock code
      create_symref: write reflog while holding lock
      run-command: don't warn on SIGPIPE deaths
      avoid shifting signed integers 31 bits
      bswap: add NO_UNALIGNED_LOADS define
      checkout,clone: check return value of create_symref
      lock_ref_sha1_basic: always fill old_oid while holding lock
      lock_ref_sha1_basic: handle REF_NODEREF with invalid refs
      rebase: ignore failures from "gc --auto"
      shortlog: match both "Author:" and "author" on stdin
      shortlog: use strbufs to read from stdin
      shortlog: replace hand-parsing of author with pretty-printer
      shortlog: optimize "--summary" mode
      shortlog: optimize out useless "<none>" normalization
      shortlog: optimize out useless string list
      shortlog: don't warn on empty author
      filter-branch: resolve $commit^{tree} in no-index case
      clean: make is_git_repository a public function
      resolve_gitlink_ref: ignore non-repository paths
      t6300: use test_atom for some un-modern tests
      tag: do not show ambiguous tag names as "tags/foo"
      transport: drop support for git-over-rsync
      give "nbuf" strbuf a more meaningful name
      checkout-index: simplify "-z" option parsing
      checkout-index: handle "--no-prefix" option
      checkout-index: handle "--no-index" option
      checkout-index: disallow "--no-stage" option
      apply, ls-files: simplify "-z" parsing
      fmt_ident: refactor strictness checks
      test-path-utils: use xsnprintf in favor of strcpy
      rerere: replace strcpy with xsnprintf
      checkout: reorder check_filename conditional
      check_filename: tighten dwim-wildcard ambiguity
      get_sha1: don't die() on bogus search strings
      http-push: stop using name_path
      show_object_with_name: simplify by using path_name()
      list-objects: convert name_path to a strbuf
      list-objects: drop name_path entirely
      list-objects: pass full pathname to callbacks
      git-config: better document default behavior for `--include`
      ref-filter: use string_list_split over strbuf_split
      reflog_expire_cfg: NUL-terminate pattern field
      add helpers for detecting size_t overflow
      tree-diff: catch integer overflow in combine_diff_path allocation
      diff: clarify textconv interface
      harden REALLOC_ARRAY and xcalloc against size_t overflow
      add helpers for allocating flex-array structs
      argv-array: add detach function
      convert manual allocations to argv_array
      convert trivial cases to ALLOC_ARRAY
      use xmallocz to avoid size arithmetic
      convert trivial cases to FLEX_ARRAY macros
      use st_add and st_mult for allocation size computation
      prepare_{git,shell}_cmd: use argv_array
      write_untracked_extension: use FLEX_ALLOC helper
      fast-import: simplify allocation in start_packfile
      fetch-pack: simplify add_sought_entry
      test-path-utils: fix normalize_path_copy output buffer size
      sequencer: simplify memory allocation of get_message
      git-compat-util: drop mempcpy compat code
      transport_anonymize_url: use xstrfmt
      diff_populate_gitlink: use a strbuf
      convert ewah/bitmap code to use xmalloc
      ewah: convert to REALLOC_ARRAY, etc
      merge-one-file: use empty blob for add/add base
      merge-tree: drop generate_common strategy
      xdiff: drop XDL_EMIT_COMMON
      t5313: test bounds-checks of corrupted/malicious pack/idx files
      nth_packed_object_offset: bounds-check extended offset
      use_pack: handle signed off_t overflow
      write_or_die: handle EPIPE in async threads
      fetch-pack: ignore SIGPIPE in sideband demuxer
      test_must_fail: report number of unexpected signal
      t5504: handle expected output from SIGPIPE death
      compat/mingw: brown paper bag fix for 50a6c8e
      t9700: fix test for perl older than 5.14
      tree-diff: catch integer overflow in combine_diff_path allocation
      http-push: stop using name_path
      add helpers for detecting size_t overflow
      show_object_with_name: simplify by using path_name()
      list-objects: convert name_path to a strbuf
      list-objects: drop name_path entirely
      list-objects: pass full pathname to callbacks

Jiang Xin (7):
      l10n: git.pot: v2.8.0 round 1 (48 new, 16 removed)
      http: honor no_http env variable to bypass proxy
      l10n: zh_CN: for git v2.8.0 l10n round 1
      l10n: git.pot: v2.8.0 round 2 (21 new, 1 removed)
      l10n: zh_CN: for git v2.8.0 l10n round 2
      l10n: git.pot: Add one new message for Git 2.8.0
      l10n: zh_CN: for git v2.8.0 l10n round 3

Johannes Schindelin (51):
      commit: allow editing the commit message even in shared repos
      Handle more file writes correctly in shared repos
      Refactor skipping DOS drive prefixes
      compat/basename: make basename() conform to POSIX
      compat/basename.c: provide a dirname() compatibility function
      t0060: verify that basename() and dirname() work as expected
      config.mak.uname: support MSys2
      config.mak.uname: supporting 64-bit MSys2
      fetch: release pack files before garbage-collecting
      am: release pack files before garbage-collecting
      merge: release pack files before garbage-collecting
      receive-pack: release pack files before garbage-collecting
      pull: allow interactive rebase with --rebase=interactive
      remote: handle the config setting branch.*.rebase=interactive
      completion: add missing branch.*.rebase values
      nedmalloc: allow compiling with MSys2's compiler
      compat/mingw: support MSys2-based MinGW build
      compat/winansi: support compiling with MSys2
      t0060: loosen overly strict expectations
      mingw: avoid redefining S_* constants
      mingw: avoid warnings when casting HANDLEs to int
      mingw: squash another warning about a cast
      mingw: uglify (a, 0) definitions to shut up warnings
      mingw: let's use gettext with MSYS2
      mingw: do not trust MSYS2's MinGW gettext.sh
      Git.pm: stop assuming that absolute paths start with a slash
      mingw: prepare the TMPDIR environment variable for shell scripts
      mingw: let lstat() fail with errno == ENOTDIR when appropriate
      merge-file: let conflict markers match end-of-line style of the context
      merge-file: ensure that conflict sections match eol style
      mingw: fix t5601-clone.sh
      mingw: accomodate t0060-path-utils for MSYS2
      mingw: disable mkfifo-based tests
      tests: turn off git-daemon tests if FIFOs are not available
      mingw: skip test in t1508 that fails due to path conversion
      mingw: fix t9700's assumption about directory separators
      mingw: work around pwd issues in the tests
      mingw: mark t9100's test cases with appropriate prereqs
      mingw: avoid illegal filename in t9118
      mingw: handle the missing POSIXPERM prereq in t9124
      mingw: skip a test in t9130 that cannot pass on Windows
      mingw: do not bother to test funny file names
      test-lib: limit the output of the yes utility
      gitignore: ignore generated test-fake-ssh executable
      t5505: 'remote add x y' should work when url.y.insteadOf = x
      git config: report when trying to modify a non-existing repo config
      Mark win32's pthread_exit() as NORETURN
      config --show-origin: report paths with forward slashes
      t1300-repo-config: make it resilient to being run via 'sh -x'
      t1300: fix the new --show-origin tests on Windows
      mingw: skip some tests in t9115 due to file name issues

Johannes Sixt (3):
      t/t5100: no need to use 'echo' command substitutions for globbing
      mingw: avoid linking to the C library's isalpha()
      t0001: fix GIT_* environment variable check under --valgrind

John Keeping (3):
      completion: add missing git-rebase options
      t8005: avoid grep on non-ASCII data
      t9200: avoid grep on non-ASCII data

Jon Griffiths (3):
      credential-cache--daemon: refactor check_socket_directory
      credential-cache--daemon: disallow relative socket path
      credential-cache--daemon: change to the socket dir on startup

Jonathan Nieder (1):
      submodule.c: write "Fetching submodule <foo>" to stderr

Junio C Hamano (59):
      First batch for post 2.7 cycle
      strbuf: miniscule style fix
      strbuf: make strbuf_getline_crlf() global
      strbuf: introduce strbuf_getline_{lf,nul}()
      mktree: there are only two possible line terminations
      check-attr: there are only two possible line terminations
      check-ignore: there are only two possible line terminations
      update-index: there are only two possible line terminations
      checkout-index: there are only two possible line terminations
      strbuf: give strbuf_getline() to the "most text friendly" variant
      hash-object: read --stdin-paths with strbuf_getline()
      revision: read --stdin with strbuf_getline()
      rev-parse: read parseopt spec with strbuf_getline()
      ident.c: read /etc/mailname with strbuf_getline()
      remote.c: read $GIT_DIR/remotes/* with strbuf_getline()
      clone/sha1_file: read info/alternates with strbuf_getline()
      transport-helper: read helper response with strbuf_getline()
      cat-file: read batch stream with strbuf_getline()
      column: read lines with strbuf_getline()
      send-pack: read list of refs with strbuf_getline()
      grep: read -f file with strbuf_getline()
      test-sha1-array: read command stream with strbuf_getline()
      test-lib: clarify and tighten SANITY
      Second batch for 2.8 cycle
      Third batch for 2.8 cycle
      git: remove an early return from save_env_before_alias()
      git: protect against unbalanced calls to {save,restore}_env()
      git: simplify environment save/restore logic
      Fourth batch for 2.8.cycle
      Getting closer to 2.7.1
      restore_env(): free the saved environment variable once we are done
      Fifth batch for 2.8 cycle
      Git 2.7.1
      Sixth batch for the 2.8 cycle
      pager: lose a separate argv[]
      pager: factor out a helper to prepare a child process to run the pager
      am -i: fix "v"iew
      Start preparing for 2.7.2
      Seventh batch for the 2.8 cycle
      Git 2.7.2
      Eighth batch for 2.8
      Git 2.8-rc0
      Git 2.8-rc1
      gitignore: document that unignoring a directory unignores everything in it
      Git 2.7.3
      Git 2.8-rc2
      sane_grep: pass "-a" if grep accepts it
      rebase-i: clarify "is this commit relevant?" test
      RelNotes for 2.8.0: typofix
      Git 2.8-rc3
      Git 2.4.11
      Git 2.5.5
      Git 2.6.6
      Git 2.7.4
      Revert "Merge branch 'jc/exclusion-doc'"
      Revert "Merge branch 'nd/exclusion-regression-fix'"
      RelNotes: remove the mention of !reinclusion
      Git 2.8-rc4
      Git 2.8

Karsten Blees (1):
      mingw: factor out Windows specific environment setup

Karthik Nayak (10):
      ref-filter: bump 'used_atom' and related code to the top
      ref-filter: introduce struct used_atom
      ref-filter: introduce parsing functions for each valid atom
      ref-filter: introduce color_atom_parser()
      ref-filter: introduce parse_align_position()
      ref-filter: introduce align_atom_parser()
      ref-filter: align: introduce long-form syntax
      ref-filter: introduce remote_ref_atom_parser()
      ref-filter: introduce contents_atom_parser()
      ref-filter: introduce objectname_atom_parser()

Kazutoshi Satoda (2):
      git-svn: enable "svn.pathnameencoding" on dcommit
      git-svn: apply "svn.pathnameencoding" before URL encoding

Knut Franke (2):
      http: allow selection of proxy authentication method
      http: use credential API to handle proxy authentication

Lars Schneider (10):
      travis-ci: run previously failed tests first, then slowest to fastest
      travis-ci: explicity use container-based infrastructure
      convert: treat an empty string for clean/smudge filters as "cat"
      t: do not hide Git's exit code in tests using 'nul_to_q'
      rename git_config_from_buf to git_config_from_mem
      config: add 'origin_type' to config_source struct
      config: add '--show-origin' option to print the origin of a config value
      add DEVELOPER makefile knob to check for acknowledged warnings
      Documentation: use ASCII quotation marks in git-p4
      Documentation: fix git-p4 AsciiDoc formatting

Lars Vogel (1):
      git-add doc: do not say working directory when you mean working tree

Martin Amdisen (1):
      templates/hooks: fix minor typo in the sample update-hook

Matt McCutchen (1):
      Documentation/git-clean.txt: don't mention deletion of .git/modules/*

Matthew Kraai (1):
      Documentation: remove unnecessary backslashes

Matthieu Moy (8):
      Documentation/git-push: document that 'simple' is the default
      README: use markdown syntax
      README.md: add hyperlinks on filenames
      README.md: move the link to git-scm.com up
      README.md: don't call git stupid in the title
      README.md: move down historical explanation about the name
      push: remove "push.default is unset" warning message
      Documentation: fix broken linkgit to git-config

Michael J Gruber (5):
      t9100: fix breakage when SHELL_PATH is not /bin/sh
      tests: rename work-tree tests to *work-tree*
      t/lib-httpd: load mod_unixd
      t5510: do not leave changed cwd
      wt-status: allow "ahead " to be picked up by l10n

Mike Hommey (1):
      notes: allow treeish expressions as notes ref

Nguyễn Thái Ngọc Duy (25):
      blame: remove obsolete comment
      add and use a convenience macro ce_intent_to_add()
      Revert "setup: set env $GIT_WORK_TREE when work tree is set, like $GIT_DIR"
      git.c: make it clear save_env() is for alias handling only
      setup.c: re-fix d95138e (setup: set env $GIT_WORK_TREE when ..
      git.c: make sure we do not leak GIT_* to alias scripts
      grep: make it clear i-t-a entries are ignored
      dir.c: clean the entire struct in clear_exclude_list()
      Revert "dir.c: don't exclude whole dir prematurely if neg pattern may match"
      worktree.c: fix indentation
      diff-no-index: do not take a redundant prefix argument
      diff: make -O and --output work in subdirectory
      worktree: stop supporting moving worktrees manually
      rev-parse: take prefix into account in --git-common-dir
      dir.c: fix match_pathname()
      dir.c: support tracing exclude
      dir.c: support marking some patterns already matched
      dir.c: don't exclude whole dir prematurely
      worktree: fix "add -B"
      worktree add -B: do the checkout test before update branch
      sha1_file.c: mark strings for translation
      builtin/checkout.c: mark strings for translation
      builtin/clone.c: mark strings for translation
      ref-filter.c: mark strings for translation
      trailer.c: mark strings for translation

Pat Thoyts (1):
      t0008: avoid absolute path

Patrick Steinhardt (18):
      push: add '--delete' flag to synopsis
      push: add '-d' as shorthand for '--delete'
      config: introduce set_or_die wrappers
      branch: report errors in tracking branch setup
      branch: die on config error when unsetting upstream
      branch: die on config error when editing branch description
      submodule: die on config error when linking modules
      submodule--helper: die on config error when cloning module
      remote: die on config error when setting URL
      remote: die on config error when setting/adding branches
      remote: die on config error when manipulating remotes
      clone: die on config error in cmd_clone
      init-db: die on config errors when initializing empty repo
      sequencer: die on config error when saving replay opts
      compat: die when unable to set core.precomposeunicode
      config: rename git_config_set to git_config_set_gently
      config: rename git_config_set_or_die to git_config_set
      xdiff/xmerge: fix memory leak in xdl_merge

Paul Wagland (2):
      completion: complete show-branch "--date-order"
      completion: update completion arguments for stash

Peter Krefting (3):
      l10n: sv.po: Fix inconsistent translation of "progress meter"
      l10n: sv.po: Update Swedish translation (2509t0f0u)
      l10n: sv.po: Update Swedish translation (2530t0f0u)

Ralf Thielow (8):
      l10n: TEAMS: update Ralf Thielow's email address
      l10n: de.po: add space to abbreviation "z. B."
      l10n: de.po: fix interactive rebase message
      l10n: de.po: translate "command" as "Befehl"
      l10n: de.po: translate 48 new messages
      l10n: de.po: translate 22 new messages
      l10n: de.po: add missing newlines
      gitk: Update German translation

Ray Chen (1):
      l10n: zh_CN: review for git v2.8.0 l10n round 2

Rob Mayoff (1):
      contrib/subtree: unwrap tag refs

Romain Picard (1):
      git-p4.py: add support for filetype change

SZEDER Gábor (2):
      t6050-replace: make failing editor test more robust
      completion: fix mis-indentation in _git_stash()

Sebastian Schuberth (3):
      docs: clarify that passing --depth to git-clone implies --single-branch
      docs: say "commits" in the --depth option wording for git-clone
      docs: clarify that --depth for git-fetch works with newly initialized repos

Shawn O. Pearce (1):
      remote-curl: include curl_errorstr on SSL setup failures

Stefan Beller (11):
      xread: poll on non blocking fds
      strbuf: add strbuf_read_once to read without blocking
      sigchain: add command to pop all common signals
      run-command: add an asynchronous parallel child processor
      fetch_populated_submodules: use new parallel job processing
      submodules: allow parallel fetching, add tests and documentation
      submodule helper list: respect correct path prefix
      submodule: try harder to fetch needed sha1 by direct fetching sha1
      run-command: do not pass child process data into callbacks
      Documentation: reword rebase summary
      submodule: fix regression for deinit without submodules

Stephen P. Smith (4):
      user-manual: remove temporary branch entry from todo list
      glossary: define the term shallow clone
      user-manual: add section documenting shallow clones
      user-manual: add addition gitweb information

Thomas Ackermann (1):
      documentation: fix some typos

Thomas Braun (1):
      completion: complete "diff --word-diff-regex="

Thomas Gummerer (11):
      t7810: correct --no-index test
      builtin/grep: add grep.fallbackToNoIndex config
      ls-remote: document --quiet option
      ls-remote: document --refs option
      ls-remote: fix synopsis
      ls-remote: use parse-options api
      ls-remote: add support for showing symrefs
      remote: use parse_config_key
      remote: simplify remote_is_configured()
      remote: actually check if remote exits
      remote: use remote_is_configured() for add and rename

Tobias Klauser (2):
      trailer: allow to write to files other than stdout
      interpret-trailers: add option for in-place editing

Torsten Bögershausen (9):
      ls-files: add eol diagnostics
      t0027: add tests for get_stream_filter()
      convert.c: remove unused parameter 'path'
      convert.c: remove input_crlf_action()
      convert.c: use text_eol_is_crlf()
      convert.c: refactor crlf_action
      convert.c: simplify text_stat
      convert.c: correct attr_action()
      config.mak.uname: use clang for Mac OS X 10.6

Trần Ngọc Quân (2):
      l10n: vi.po (2509t): Updated Vietnamese translation
      l10n: vi.po (2530t): Update translation

Vasco Almeida (1):
      l10n: pt_PT: Update and add new translations

Victor Leschuk (4):
      grep: allow threading even on a single-core machine
      grep: slight refactoring to the code that disables threading
      grep: add --threads=<num> option and grep.threads configuration
      git-svn: loosen config globs limitations

Will Palmer (2):
      test for '!' handling in rev-parse's named commits
      object name: introduce '^{/!-<negative pattern>}' notation

brian m. carlson (1):
      http: add option to try authentication without username

Øyvind A. Holm (1):
      gitweb: squelch "uninitialized value" warning

마누엘 (1):
      mingw: try to delete target directory before renaming

^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.8.0-rc4
@ 2016-03-21 21:32  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2016-03-21 21:32 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

A release candidate Git v2.8.0-rc4 is now available for testing
at the usual places.  It is comprised of 521 non-merge commits
since v2.7.0, contributed by 73 people, 21 of which are new faces.

Relative to v2.8.0-rc3, this reverts the change to the gitignore
mechanism (which also is used in a reverse sense to implement the
sparse checkout feature), as the code seemed to be a bit premature
for general consumption (I haven't queued any replacements yet, but
after 2.8 final I do expect the effort to continue).  Also a new
workaround for GCC 4.2 that dies with "internal compiler error" has
been queued, which would help those who compile with that version of
the compiler (including MacOSX 10.6 and FreeBSD 9.x).

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.8.0-rc4' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.7.0 are as follows.
Welcome to the Git development community!

  마누엘, Adam Dinwoodie, Andrew Wheeler, Changwoo Ryu,
  Christoph Egger, Christoph Hoopmann, Dan Aloni, Dave Ware, David
  A. Wheeler, Dickson Wong, Felipe Gonçalves Assis, GyuYong Jung,
  Jon Griffiths, Kazutoshi Satoda, Lars Vogel, Martin Amdisen,
  Matthew Kraai, Paul Wagland, Rob Mayoff, Romain Picard, and
  Victor Leschuk.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alexander Kuleshov, Alexander Shopov, Alex Henrie, Audric
  Schiltknecht, brian m. carlson, Carlos Martín Nieto, Christian
  Couder, David A. Greene, David Turner, Dennis Kaarsemaker,
  Dimitriy Ryazantcev, Edmundo Carmona Antoranz, Elia Pinto,
  Eric Sunshine, Eric Wong, Guillermo S. Romero, Jacob Keller,
  Jean-Noel Avila, Jeff King, Jiang Xin, Johannes Schindelin,
  Johannes Sixt, John Keeping, Jonathan Nieder, Junio C Hamano,
  Karsten Blees, Karthik Nayak, Knut Franke, Lars Schneider,
  Matthieu Moy, Matt McCutchen, Michael J Gruber, Mike Hommey,
  Nguyễn Thái Ngọc Duy, Øyvind A. Holm, Patrick Steinhardt,
  Pat Thoyts, Peter Krefting, Ralf Thielow, Ray Chen, Sebastian
  Schuberth, Shawn O. Pearce, Stefan Beller, Stephen P. Smith,
  SZEDER Gábor, Thomas Ackermann, Thomas Braun, Thomas Gummerer,
  Tobias Klauser, Torsten Bögershausen, Trần Ngọc Quân,
  and Will Palmer.

----------------------------------------------------------------

Git 2.8 Release Notes (draft)
=============================

Backward compatibility note
---------------------------

The rsync:// transport has been removed.


Updates since v2.7
------------------

UI, Workflows & Features

 * It turns out "git clone" over rsync transport has been broken when
   the source repository has packed references for a long time, and
   nobody noticed nor complained about it.

 * "push" learned that its "--delete" option can be shortened to
   "-d", just like "branch --delete" and "branch -d" are the same
   thing.

 * "git blame" learned to produce the progress eye-candy when it takes
   too much time before emitting the first line of the result.

 * "git grep" can now be configured (or told from the command line)
   how many threads to use when searching in the working tree files.

 * Some "git notes" operations, e.g. "git log --notes=<note>", should
   be able to read notes from any tree-ish that is shaped like a notes
   tree, but the notes infrastructure required that the argument must
   be a ref under refs/notes/.  Loosen it to require a valid ref only
   when the operation would update the notes (in which case we must
   have a place to store the updated notes tree, iow, a ref).

 * "git grep" by default does not fall back to its "--no-index"
   behaviour outside a directory under Git's control (otherwise the
   user may by mistake end up running a huge recursive search); with a
   new configuration (set in $HOME/.gitconfig--by definition this
   cannot be set in the config file per project), this safety can be
   disabled.

 * "git pull --rebase" has been extended to allow invoking
   "rebase -i".

 * "git p4" learned to cope with the type of a file getting changed.

 * "git format-patch" learned to notice format.outputDirectory
   configuration variable.  This allows "-o <dir>" option to be
   omitted on the command line if you always use the same directory in
   your workflow.

 * "interpret-trailers" has been taught to optionally update a file in
   place, instead of always writing the result to the standard output.

 * Many commands that read files that are expected to contain text
   that is generated (or can be edited) by the end user to control
   their behaviour (e.g. "git grep -f <filename>") have been updated
   to be more tolerant to lines that are terminated with CRLF (they
   used to treat such a line to contain payload that ends with CR,
   which is usually not what the users expect).

 * "git notes merge" used to limit the source of the merged notes tree
   to somewhere under refs/notes/ hierarchy, which was too limiting
   when inventing a workflow to exchange notes with remote
   repositories using remote-tracking notes trees (located in e.g.
   refs/remote-notes/ or somesuch).

 * "git ls-files" learned a new "--eol" option to help diagnose
   end-of-line problems.

 * "ls-remote" learned an option to show which branch the remote
   repository advertises as its primary by pointing its HEAD at.

 * New http.proxyAuthMethod configuration variable can be used to
   specify what authentication method to use, as a way to work around
   proxies that do not give error response expected by libcurl when
   CURLAUTH_ANY is used.  Also, the codepath for proxy authentication
   has been taught to use credential API to store the authentication
   material in user's keyrings.

 * Update the untracked cache subsystem and change its primary UI from
   "git update-index" to "git config".

 * There were a few "now I am doing this thing" progress messages in
   the TCP connection code that can be triggered by setting a verbose
   option internally in the code, but "git fetch -v" and friends never
   passed the verbose option down to that codepath.

 * Clean/smudge filters defined in a configuration file of lower
   precedence can now be overridden to be a pass-through no-op by
   setting the variable to an empty string.

 * A new "<branch>^{/!-<pattern>}" notation can be used to name a
   commit that is reachable from <branch> that does not match the
   given <pattern>.

 * The "user.useConfigOnly" configuration variable can be used to
   force the user to always set user.email & user.name configuration
   variables, serving as a reminder for those who work on multiple
   projects and do not want to put these in their $HOME/.gitconfig.

 * "git fetch" and friends that make network connections can now be
   told to only use ipv4 (or ipv6).

 * Some authentication methods do not need username or password, but
   libcurl needs some hint that it needs to perform authentication.
   Supplying an empty username and password string is a valid way to
   do so, but you can set the http.[<url>.]emptyAuth configuration
   variable to achieve the same, if you find it cleaner.

 * You can now set http.[<url>.]pinnedpubkey to specify the pinned
   public key when building with recent enough versions of libcURL.

 * The configuration system has been taught to phrase where it found a
   bad configuration variable in a better way in its error messages.
   "git config" learnt a new "--show-origin" option to indicate where
   the values come from.

 * The "credential-cache" daemon process used to run in whatever
   directory it happened to start in, but this made umount(2)ing the
   filesystem that houses the repository harder; now the process
   chdir()s to the directory that house its own socket on startup.

 * When "git submodule update" did not result in fetching the commit
   object in the submodule that is referenced by the superproject, the
   command learned to retry another fetch, specifically asking for
   that commit that may not be connected to the refs it usually
   fetches.

 * "git merge-recursive" learned "--no-renames" option to disable its
   rename detection logic.

 * Across the transition at around Git version 2.0, the user used to
   get a pretty loud warning when running "git push" without setting
   push.default configuration variable.  We no longer warn because the
   transition was completed a long time ago.

 * README has been renamed to README.md and its contents got tweaked
   slightly to make it easier on the eyes.


Performance, Internal Implementation, Development Support etc.

 * Add a framework to spawn a group of processes in parallel, and use
   it to run "git fetch --recurse-submodules" in parallel.

 * A slight update to the Makefile to mark ".PHONY" targets as such
   correctly.

 * In-core storage of the reverse index for .pack files (which lets
   you go from a pack offset to an object name) has been streamlined.

 * d95138e6 (setup: set env $GIT_WORK_TREE when work tree is set, like
   $GIT_DIR, 2015-06-26) attempted to work around a glitch in alias
   handling by overwriting GIT_WORK_TREE environment variable to
   affect subprocesses when set_git_work_tree() gets called, which
   resulted in a rather unpleasant regression to "clone" and "init".
   Try to address the same issue by always restoring the environment
   and respawning the real underlying command when handling alias.

 * The low-level code that is used to create symbolic references has
   been updated to share more code with the code that deals with
   normal references.

 * strbuf_getline() and friends have been redefined to make it easier
   to identify which callsite of (new) strbuf_getline_lf() should
   allow and silently ignore carriage-return at the end of the line to
   help users on DOSsy systems.

 * "git shortlog" used to accumulate various pieces of information
   regardless of what was asked to be shown in the final output.  It
   has been optimized by noticing what need not to be collected
   (e.g. there is no need to collect the log messages when showing
   only the number of changes).

 * "git checkout $branch" (and other operations that share the same
   underlying machinery) has been optimized.

 * Automated tests in Travis CI environment has been optimized by
   persisting runtime statistics of previous "prove" run, executing
   tests that take longer before other ones; this reduces the total
   wallclock time.

 * Test scripts have been updated to remove assumptions that are not
   portable between Git for POSIX and Git for Windows, or to skip ones
   with expectations that are not satisfiable on Git for Windows.

 * Some calls to strcpy(3) triggers a false warning from static
   analysers that are less intelligent than humans, and reducing the
   number of these false hits helps us notice real issues.  A few
   calls to strcpy(3) in a couple of protrams that are already safe
   has been rewritten to avoid false warnings.

 * The "name_path" API was an attempt to reduce the need to construct
   the full path out of a series of path components while walking a
   tree hierarchy, but over time made less efficient because the path
   needs to be flattened, e.g. to be compared with another path that
   is already flat.  The API has been removed and its users have been
   rewritten to simplify the overall code complexity.

 * Help those who debug http(s) part of the system.
   (merge 0054045 sp/remote-curl-ssl-strerror later to maint).

 * The internal API to interact with "remote.*" configuration
   variables has been streamlined.

 * The ref-filter's format-parsing code has been refactored, in
   preparation for "branch --format" and friends.

 * Traditionally, the tests that try commands that work on the
   contents in the working tree were named with "worktree" in their
   filenames, but with the recent addition of "git worktree"
   subcommand, whose tests are also named similarly, it has become
   harder to tell them apart.  The traditional tests have been renamed
   to use "work-tree" instead in an attempt to differentiate them.
   (merge 5549029 mg/work-tree-tests later to maint).

 * Many codepaths forget to check return value from git_config_set();
   the function is made to die() to make sure we do not proceed when
   setting a configuration variable failed.
   (merge 3d18064 ps/config-error later to maint).

 * Handling of errors while writing into our internal asynchronous
   process has been made more robust, which reduces flakiness in our
   tests.
   (merge 43f3afc jk/epipe-in-async later to maint).

 * There is a new DEVELOPER knob that enables many compiler warning
   options in the Makefile.

 * The way the test scripts configure the Apache web server has been
   updated to work also for Apache 2.4 running on RedHat derived
   distros.

 * Out of maintenance gcc on OSX 10.6 fails to compile the code in
   'master'; work it around by using clang by default on the platform.

 * The "name_path" API was an attempt to reduce the need to construct
   the full path out of a series of path components while walking a
   tree hierarchy, but over time made less efficient because the path
   needs to be flattened, e.g. to be compared with another path that
   is already flat, in many cases.  The API has been removed and its
   users have been rewritten to simplify the overall code complexity.
   This incidentally also closes some heap-corruption holes.

 * Recent versions of GNU grep is pickier than before to decide if a
   file is "binary" and refuse to give line-oriented hits when we
   expect it to, unless explicitly told with "-a" option.  As our
   scripted Porcelains use sane_grep wrapper for line-oriented data,
   even when the line may contain non-ASCII payload we took from
   end-user data, use "grep -a" to implement sane_grep wrapper when
   using an implementation of "grep" that takes the "-a" option.



Also contains various documentation updates and code clean-ups.


Fixes since v2.7
----------------

Unless otherwise noted, all the fixes since v2.7 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * An earlier change in 2.5.x-era broke users' hooks and aliases by
   exporting GIT_WORK_TREE to point at the root of the working tree,
   interfering when they tried to use a different working tree without
   setting GIT_WORK_TREE environment themselves.

 * The "exclude_list" structure has the usual "alloc, nr" pair of
   fields to be used by ALLOC_GROW(), but clear_exclude_list() forgot
   to reset 'alloc' to 0 when it cleared 'nr' to discard the managed
   array.

 * Paths that have been told the index about with "add -N" are not
   quite yet in the index, but a few commands behaved as if they
   already are in a harmful way.

 * "git send-email" was confused by escaped quotes stored in the alias
   files saved by "mutt", which has been corrected.

 * A few unportable C construct have been spotted by clang compiler
   and have been fixed.

 * The documentation has been updated to hint the connection between
   the '--signoff' option and DCO.

 * "git reflog" incorrectly assumed that all objects that used to be
   at the tip of a ref must be commits, which caused it to segfault.

 * The ignore mechanism saw a few regressions around untracked file
   listing and sparse checkout selection areas in 2.7.0; the change
   that is responsible for the regression has been reverted.

 * Some codepaths used fopen(3) when opening a fixed path in $GIT_DIR
   (e.g. COMMIT_EDITMSG) that is meant to be left after the command is
   done.  This however did not work well if the repository is set to
   be shared with core.sharedRepository and the umask of the previous
   user is tighter.  They have been made to work better by calling
   unlink(2) and retrying after fopen(3) fails with EPERM.

 * Asking gitweb for a nonexistent commit left a warning in the server
   log.

   Somebody may want to follow this up with an additional test, perhaps?
   IIRC, we do test that no Perl warnings are given to the server log,
   so this should have been caught if our test coverage were good.

 * "git rebase", unlike all other callers of "gc --auto", did not
   ignore the exit code from "gc --auto".

 * Many codepaths that run "gc --auto" before exiting kept packfiles
   mapped and left the file descriptors to them open, which was not
   friendly to systems that cannot remove files that are open.  They
   now close the packs before doing so.

 * A recent optimization to filter-branch in v2.7.0 introduced a
   regression when --prune-empty filter is used, which has been
   corrected.

 * The description for SANITY prerequisite the test suite uses has
   been clarified both in the comment and in the implementation.

 * "git tag" started listing a tag "foo" as "tags/foo" when a branch
   named "foo" exists in the same repository; remove this unnecessary
   disambiguation, which is a regression introduced in v2.7.0.

 * The way "git svn" uses auth parameter was broken by Subversion
   1.9.0 and later.

 * The "split" subcommand of "git subtree" (in contrib/) incorrectly
   skipped merges when it shouldn't, which was corrected.

 * A few options of "git diff" did not work well when the command was
   run from a subdirectory.

 * The command line completion learned a handful of additional options
   and command specific syntax.

 * dirname() emulation has been added, as Msys2 lacks it.

 * The underlying machinery used by "ls-files -o" and other commands
   has been taught not to create empty submodule ref cache for a
   directory that is not a submodule.  This removes a ton of wasted
   CPU cycles.

 * "git worktree" had a broken code that attempted to auto-fix
   possible inconsistency that results from end-users moving a
   worktree to different places without telling Git (the original
   repository needs to maintain backpointers to its worktrees, but
   "mv" run by end-users who are not familiar with that fact will
   obviously not adjust them), which actually made things worse
   when triggered.

 * The low-level merge machinery has been taught to use CRLF line
   termination when inserting conflict markers to merged contents that
   are themselves CRLF line-terminated.

 * "git push --force-with-lease" has been taught to report if the push
   needed to force (or fast-forwarded).

 * The emulated "yes" command used in our test scripts has been
   tweaked not to spend too much time generating unnecessary output
   that is not used, to help those who test on Windows where it would
   not stop until it fills the pipe buffer due to lack of SIGPIPE.

 * The documentation for "git clean" has been corrected; it mentioned
   that .git/modules/* are removed by giving two "-f", which has never
   been the case.

 * The vimdiff backend for "git mergetool" has been tweaked to arrange
   and number buffers in the order that would match the expectation of
   majority of people who read left to right, then top down and assign
   buffers 1 2 3 4 "mentally" to local base remote merge windows based
   on that order.

 * "git show 'HEAD:Foo[BAR]Baz'" did not interpret the argument as a
   rev, i.e. the object named by the the pathname with wildcard
   characters in a tree object.
   (merge aac4fac nd/dwim-wildcards-as-pathspecs later to maint).

 * "git rev-parse --git-common-dir" used in the worktree feature
   misbehaved when run from a subdirectory.
   (merge 17f1365 nd/git-common-dir-fix later to maint).

 * "git worktree add -B <branchname>" did not work.

 * The "v(iew)" subcommand of the interactive "git am -i" command was
   broken in 2.6.0 timeframe when the command was rewritten in C.
   (merge 708b8cc jc/am-i-v-fix later to maint).

 * "git merge-tree" used to mishandle "both sides added" conflict with
   its own "create a fake ancestor file that has the common parts of
   what both sides have added and do a 3-way merge" logic; this has
   been updated to use the usual "3-way merge with an empty blob as
   the fake common ancestor file" approach used in the rest of the
   system.
   (merge 907681e jk/no-diff-emit-common later to maint).

 * The memory ownership rule of fill_textconv() API, which was a bit
   tricky, has been documented a bit better.
   (merge a64e6a4 jk/more-comments-on-textconv later to maint).

 * Update various codepaths to avoid manually-counted malloc().
   (merge 08c95df jk/tighten-alloc later to maint).

 * The documentation did not clearly state that the 'simple' mode is
   now the default for "git push" when push.default configuration is
   not set.
   (merge f6b1fb3 mm/push-simple-doc later to maint).

 * Recent versions of GNU grep are pickier when their input contains
   arbitrary binary data, which some of our tests uses.  Rewrite the
   tests to sidestep the problem.
   (merge 3b1442d jk/grep-binary-workaround-in-test later to maint).

 * A helper function "git submodule" uses since v2.7.0 to list the
   modules that match the pathspec argument given to its subcommands
   (e.g. "submodule add <repo> <path>") has been fixed.
   (merge 2b56bb7 sb/submodule-module-list-fix later to maint).

 * "git config section.var value" to set a value in per-repository
   configuration file failed when it was run outside any repository,
   but didn't say the reason correctly.
   (merge 638fa62 js/config-set-in-non-repository later to maint).

 * The code to read the pack data using the offsets stored in the pack
   idx file has been made more carefully check the validity of the
   data in the idx.
   (merge 7465feb jk/pack-idx-corruption-safety later to maint).

 * Other minor clean-ups and documentation updates
   (merge f459823 ak/extract-argv0-last-dir-sep later to maint).
   (merge 63ca1c0 ak/git-strip-extension-from-dashed-command later to maint).
   (merge 4867f11 ps/plug-xdl-merge-leak later to maint).
   (merge 4938686 dt/initial-ref-xn-commit-doc later to maint).
   (merge 9537f21 ma/update-hooks-sample-typofix later to maint).

----------------------------------------------------------------

Changes since v2.7.0 are as follows:

Adam Dinwoodie (1):
      t9117: test specifying full url to git svn init -T

Alex Henrie (1):
      stripspace: call U+0020 a "space" instead of a "blank"

Alexander Kuleshov (3):
      format-patch: introduce format.outputDirectory configuration
      exec_cmd.c: use find_last_dir_sep() for code simplification
      git.c: simplify stripping extension of a file in handle_builtin()

Alexander Shopov (1):
      gitk: Update Bulgarian translation (311t)

Andrew Wheeler (1):
      push: fix ref status reporting for --force-with-lease

Audric Schiltknecht (1):
      l10n: fr.po: Correct case in sentence

Carlos Martín Nieto (1):
      Disown ssh+git and git+ssh

Changwoo Ryu (4):
      l10n: ko.po: Add Korean translation
      l10n: ko.po: Update Korean translation
      l10n: ko: Update Korean translation
      l10n: ko.po: Update Korean translation

Christian Couder (11):
      dir: free untracked cache when removing it
      update-index: use enum for untracked cache options
      update-index: add --test-untracked-cache
      update-index: add untracked cache notifications
      update-index: move 'uc' var declaration
      dir: add {new,add}_untracked_cache()
      dir: add remove_untracked_cache()
      dir: simplify untracked cache "ident" field
      config: add core.untrackedCache
      test-dump-untracked-cache: don't modify the untracked cache
      t7063: add tests for core.untrackedCache

Christoph Egger (1):
      http: implement public key pinning

Christoph Hoopmann (1):
      l10n: de.po: fix typo

Dan Aloni (1):
      ident: add user.useConfigOnly boolean for when ident shouldn't be guessed

Dave Ware (1):
      contrib/subtree: fix "subtree split" skipped-merge bug

David A. Greene (1):
      contrib/subtree: Make testing easier

David A. Wheeler (1):
      Expand documentation describing --signoff

David Turner (3):
      do_compare_entry: use already-computed path
      unpack-trees: fix accidentally quadratic behavior
      refs: document transaction semantics

Dennis Kaarsemaker (1):
      reflog-walk: don't segfault on non-commit sha1's in the reflog

Dickson Wong (1):
      mergetool: reorder vim/gvim buffers in three-way diffs

Dimitriy Ryazantcev (3):
      l10n: ru.po: update Russian translation
      l10n: ru.po: update Russian translation
      l10n: ru.po: update Russian translation

Edmundo Carmona Antoranz (1):
      blame: add support for --[no-]progress option

Elia Pinto (92):
      Makefile: add missing phony target
      contrib/examples/git-commit.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-fetch.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-merge.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-repack.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-revert.sh: use the $( ... ) construct for command substitution
      contrib/thunderbird-patch-inline/appp.sh: use the $( ... ) construct for command substitution
      git-gui/po/glossary/txt-to-pot.sh: use the $( ... ) construct for command substitution
      t/lib-httpd.sh: use the $( ... ) construct for command substitution
      test-sha1.sh: use the $( ... ) construct for command substitution
      unimplemented.sh: use the $( ... ) construct for command substitution
      t/t1100-commit-tree-options.sh: use the $( ... ) construct for command substitution
      t/t1401-symbolic-ref.sh: use the $( ... ) construct for command substitution
      t/t1410-reflog.sh: use the $( ... ) construct for command substitution
      t/t1511-rev-parse-caret.sh: use the $( ... ) construct for command substitution
      t/t1512-rev-parse-disambiguation.sh: use the $( ... ) construct for command substitution
      t/t1700-split-index.sh: use the $( ... ) construct for command substitution
      t/t2025-worktree-add.sh: use the $( ... ) construct for command substitution
      t/t2102-update-index-symlinks.sh: use the $( ... ) construct for command substitution
      t/t3030-merge-recursive.sh: use the $( ... ) construct for command substitution
      t/t3100-ls-tree-restrict.sh: use the $( ... ) construct for command substitution
      t/t3101-ls-tree-dirname.sh: use the $( ... ) construct for command substitution
      t/t3210-pack-refs.sh: use the $( ... ) construct for command substitution
      t/t3403-rebase-skip.sh: use the $( ... ) construct for command substitution
      t/t3511-cherry-pick-x.sh: use the $( ... ) construct for command substitution
      t/t3600-rm.sh: use the $( ... ) construct for command substitution
      t/t3700-add.sh: use the $( ... ) construct for command substitution
      t/t5100-mailinfo.sh: use the $( ... ) construct for command substitution
      t/t5300-pack-object.sh: use the $( ... ) construct for command substitution
      t/t5301-sliding-window.sh: use the $( ... ) construct for command substitution
      t/t5302-pack-index.sh: use the $( ... ) construct for command substitution
      t/t5303-pack-corruption-resilience.sh: use the $( ... ) construct for command substitution
      t/t5304-prune.sh: use the $( ... ) construct for command substitution
      t/t5305-include-tag.sh: use the $( ... ) construct for command substitution
      t/t5500-fetch-pack.sh: use the $( ... ) construct for command substitution
      t/t5505-remote.sh: use the $( ... ) construct for command substitution
      t/t5506-remote-groups.sh: use the $( ... ) construct for command substitution
      t/t5510-fetch.sh: use the $( ... ) construct for command substitution
      t/t5515-fetch-merge-logic.sh: use the $( ... ) construct for command substitution
      t/t5516-fetch-push.sh: use the $( ... ) construct for command substitution
      t/t5517-push-mirror.sh: use the $( ... ) construct for command substitution
      t/t5522-pull-symlink.sh: use the $( ... ) construct for command substitution
      t/t5530-upload-pack-error.sh: use the $( ... ) construct for command substitution
      t/t5532-fetch-proxy.sh: use the $( ... ) construct for command substitution
      t/t5537-fetch-shallow.sh: use the $( ... ) construct for command substitution
      t/t5538-push-shallow.sh: use the $( ... ) construct for command substitution
      t/t5550-http-fetch-dumb.sh: use the $( ... ) construct for command substitution
      t/t5570-git-daemon.sh: use the $( ... ) construct for command substitution
      t/t5601-clone.sh: use the $( ... ) construct for command substitution
      t/t5700-clone-reference.sh: use the $( ... ) construct for command substitution
      t/t5710-info-alternate.sh: use the $( ... ) construct for command substitution
      t/t5900-repo-selection.sh: use the $( ... ) construct for command substitution
      t/t6001-rev-list-graft.sh: use the $( ... ) construct for command substitution
      t/t6002-rev-list-bisect.sh: use the $( ... ) construct for command substitution
      t/t6015-rev-list-show-all-parents.sh: use the $( ... ) construct for command substitution
      t/t6032-merge-large-rename.sh: use the $( ... ) construct for command substitution
      t/t6132-pathspec-exclude.sh: use the $( ... ) construct for command substitution
      t/t7001-mv.sh: use the $( ... ) construct for command substitution
      t/t7003-filter-branch.sh: use the $( ... ) construct for command substitution
      t/t7004-tag.sh: use the $( ... ) construct for command substitution
      t/t7006-pager.sh: use the $( ... ) construct for command substitution
      t/t7103-reset-bare.sh: use the $( ... ) construct for command substitution
      t/t7406-submodule-update.sh: use the $( ... ) construct for command substitution
      t/t7408-submodule-reference.sh: use the $( ... ) construct for command substitution
      t/t7504-commit-msg-hook.sh: use the $( ... ) construct for command substitution
      t/t7505-prepare-commit-msg-hook.sh: use the $( ... ) construct for command substitution
      t/t7602-merge-octopus-many.sh: use the $( ... ) construct for command substitution
      t/t7700-repack.sh: use the $( ... ) construct for command substitution
      t/t8003-blame-corner-cases.sh: use the $( ... ) construct for command substitution
      t/t9001-send-email.sh: use the $( ... ) construct for command substitution
      t9100-git-svn-basic.sh: use the $( ... ) construct for command substitution
      t9101-git-svn-props.sh: use the $( ... ) construct for command substitution
      t9104-git-svn-follow-parent.sh: use the $( ... ) construct for command substitution
      t9105-git-svn-commit-diff.sh: use the $( ... ) construct for command substitution
      t9107-git-svn-migrate.sh: use the $( ... ) construct for command substitution
      t9108-git-svn-glob.sh: use the $( ... ) construct for command substitution
      t9109-git-svn-multi-glob.sh: use the $( ... ) construct for command substitution
      t9110-git-svn-use-svm-props.sh: use the $( ... ) construct for command substitution
      t9114-git-svn-dcommit-merge.sh: use the $( ... ) construct for command substitution
      t9118-git-svn-funky-branch-names.sh: use the $( ... ) construct for command substitution
      t9119-git-svn-info.sh: use the $( ... ) construct for command substitution
      t9129-git-svn-i18n-commitencoding.sh: use the $( ... ) construct for command substitution
      t9130-git-svn-authors-file.sh: use the $( ... ) construct for command substitution
      t9132-git-svn-broken-symlink.sh: use the $( ... ) construct for command substitution
      t9137-git-svn-dcommit-clobber-series.sh: use the $( ... ) construct for command substitution
      t9138-git-svn-authors-prog.sh: use the $( ... ) construct for command substitution
      t9145-git-svn-master-branch.sh: use the $( ... ) construct for command substitution
      t9150-svk-mergetickets.sh: use the $( ... ) construct for command substitution
      t9300-fast-import.sh: use the $( ... ) construct for command substitution
      t9350-fast-export.sh: use the $( ... ) construct for command substitution
      t9501-gitweb-standalone-http-status.sh: use the $( ... ) construct for command substitution
      t9901-git-web--browse.sh: use the $( ... ) construct for command substitution

Eric Sunshine (2):
      git-compat-util: st_add4: work around gcc 4.2.x compiler crash
      Revert "config.mak.uname: use clang for Mac OS X 10.6"

Eric Wong (10):
      git-send-email: do not double-escape quotes from mutt
      for-each-ref: document `creatordate` and `creator` fields
      git-svn: fix auth parameter handling on SVN 1.9.0+
      pass transport verbosity down to git_connect
      connect & http: support -4 and -6 switches for remote operations
      t5570: add tests for "git {clone,fetch,pull} -v"
      git-svn: hoist out utf8 prep from t9129 to lib-git-svn
      tests: remove no-op full-svn-test target
      git-svn: shorten glob error message
      git-svn: fix URL canonicalization during init w/ SVN 1.7+

Felipe Gonçalves Assis (7):
      merge-recursive: option to disable renames
      merge-recursive: more consistent interface
      merge-strategies.txt: fix typo
      merge-recursive: find-renames resets threshold
      t3034: add rename threshold tests
      t3034: test option to disable renames
      t3034: test deprecated interface

Guillermo S. Romero (1):
      gitk: Follow themed bgcolor in help dialogs

GyuYong Jung (1):
      git-cvsserver.perl: fix typo

Jacob Keller (1):
      notes: allow merging from arbitrary references

Jean-Noel Avila (5):
      l10n: fr.po v2.8.0 round 1 2509t
      l10n: fr.po v2.8.0 round 2
      l10n: fr.po v2.8.0 round 3
      gitk: Update French translation (311t)
      gitk: fr.po: Sync translations with git

Jeff King (86):
      pack-revindex: drop hash table
      pack-revindex: store entries directly in packed_git
      create_symref: modernize variable names
      create_symref: use existing ref-lock code
      create_symref: write reflog while holding lock
      run-command: don't warn on SIGPIPE deaths
      avoid shifting signed integers 31 bits
      bswap: add NO_UNALIGNED_LOADS define
      checkout,clone: check return value of create_symref
      lock_ref_sha1_basic: always fill old_oid while holding lock
      lock_ref_sha1_basic: handle REF_NODEREF with invalid refs
      rebase: ignore failures from "gc --auto"
      shortlog: match both "Author:" and "author" on stdin
      shortlog: use strbufs to read from stdin
      shortlog: replace hand-parsing of author with pretty-printer
      shortlog: optimize "--summary" mode
      shortlog: optimize out useless "<none>" normalization
      shortlog: optimize out useless string list
      shortlog: don't warn on empty author
      filter-branch: resolve $commit^{tree} in no-index case
      clean: make is_git_repository a public function
      resolve_gitlink_ref: ignore non-repository paths
      t6300: use test_atom for some un-modern tests
      tag: do not show ambiguous tag names as "tags/foo"
      transport: drop support for git-over-rsync
      give "nbuf" strbuf a more meaningful name
      checkout-index: simplify "-z" option parsing
      checkout-index: handle "--no-prefix" option
      checkout-index: handle "--no-index" option
      checkout-index: disallow "--no-stage" option
      apply, ls-files: simplify "-z" parsing
      fmt_ident: refactor strictness checks
      test-path-utils: use xsnprintf in favor of strcpy
      rerere: replace strcpy with xsnprintf
      checkout: reorder check_filename conditional
      check_filename: tighten dwim-wildcard ambiguity
      get_sha1: don't die() on bogus search strings
      http-push: stop using name_path
      show_object_with_name: simplify by using path_name()
      list-objects: convert name_path to a strbuf
      list-objects: drop name_path entirely
      list-objects: pass full pathname to callbacks
      git-config: better document default behavior for `--include`
      ref-filter: use string_list_split over strbuf_split
      reflog_expire_cfg: NUL-terminate pattern field
      add helpers for detecting size_t overflow
      tree-diff: catch integer overflow in combine_diff_path allocation
      diff: clarify textconv interface
      harden REALLOC_ARRAY and xcalloc against size_t overflow
      add helpers for allocating flex-array structs
      argv-array: add detach function
      convert manual allocations to argv_array
      convert trivial cases to ALLOC_ARRAY
      use xmallocz to avoid size arithmetic
      convert trivial cases to FLEX_ARRAY macros
      use st_add and st_mult for allocation size computation
      prepare_{git,shell}_cmd: use argv_array
      write_untracked_extension: use FLEX_ALLOC helper
      fast-import: simplify allocation in start_packfile
      fetch-pack: simplify add_sought_entry
      test-path-utils: fix normalize_path_copy output buffer size
      sequencer: simplify memory allocation of get_message
      git-compat-util: drop mempcpy compat code
      transport_anonymize_url: use xstrfmt
      diff_populate_gitlink: use a strbuf
      convert ewah/bitmap code to use xmalloc
      ewah: convert to REALLOC_ARRAY, etc
      merge-one-file: use empty blob for add/add base
      merge-tree: drop generate_common strategy
      xdiff: drop XDL_EMIT_COMMON
      t5313: test bounds-checks of corrupted/malicious pack/idx files
      nth_packed_object_offset: bounds-check extended offset
      use_pack: handle signed off_t overflow
      write_or_die: handle EPIPE in async threads
      fetch-pack: ignore SIGPIPE in sideband demuxer
      test_must_fail: report number of unexpected signal
      t5504: handle expected output from SIGPIPE death
      compat/mingw: brown paper bag fix for 50a6c8e
      t9700: fix test for perl older than 5.14
      tree-diff: catch integer overflow in combine_diff_path allocation
      http-push: stop using name_path
      add helpers for detecting size_t overflow
      show_object_with_name: simplify by using path_name()
      list-objects: convert name_path to a strbuf
      list-objects: drop name_path entirely
      list-objects: pass full pathname to callbacks

Jiang Xin (7):
      l10n: git.pot: v2.8.0 round 1 (48 new, 16 removed)
      http: honor no_http env variable to bypass proxy
      l10n: zh_CN: for git v2.8.0 l10n round 1
      l10n: git.pot: v2.8.0 round 2 (21 new, 1 removed)
      l10n: zh_CN: for git v2.8.0 l10n round 2
      l10n: git.pot: Add one new message for Git 2.8.0
      l10n: zh_CN: for git v2.8.0 l10n round 3

Johannes Schindelin (47):
      commit: allow editing the commit message even in shared repos
      Handle more file writes correctly in shared repos
      Refactor skipping DOS drive prefixes
      compat/basename: make basename() conform to POSIX
      compat/basename.c: provide a dirname() compatibility function
      t0060: verify that basename() and dirname() work as expected
      config.mak.uname: support MSys2
      config.mak.uname: supporting 64-bit MSys2
      fetch: release pack files before garbage-collecting
      am: release pack files before garbage-collecting
      merge: release pack files before garbage-collecting
      receive-pack: release pack files before garbage-collecting
      pull: allow interactive rebase with --rebase=interactive
      remote: handle the config setting branch.*.rebase=interactive
      completion: add missing branch.*.rebase values
      nedmalloc: allow compiling with MSys2's compiler
      compat/mingw: support MSys2-based MinGW build
      compat/winansi: support compiling with MSys2
      t0060: loosen overly strict expectations
      mingw: avoid redefining S_* constants
      mingw: avoid warnings when casting HANDLEs to int
      mingw: squash another warning about a cast
      mingw: uglify (a, 0) definitions to shut up warnings
      mingw: let's use gettext with MSYS2
      mingw: do not trust MSYS2's MinGW gettext.sh
      Git.pm: stop assuming that absolute paths start with a slash
      mingw: prepare the TMPDIR environment variable for shell scripts
      mingw: let lstat() fail with errno == ENOTDIR when appropriate
      merge-file: let conflict markers match end-of-line style of the context
      merge-file: ensure that conflict sections match eol style
      mingw: fix t5601-clone.sh
      mingw: accomodate t0060-path-utils for MSYS2
      mingw: disable mkfifo-based tests
      tests: turn off git-daemon tests if FIFOs are not available
      mingw: skip test in t1508 that fails due to path conversion
      mingw: fix t9700's assumption about directory separators
      mingw: work around pwd issues in the tests
      mingw: mark t9100's test cases with appropriate prereqs
      mingw: avoid illegal filename in t9118
      mingw: handle the missing POSIXPERM prereq in t9124
      mingw: skip a test in t9130 that cannot pass on Windows
      mingw: do not bother to test funny file names
      test-lib: limit the output of the yes utility
      gitignore: ignore generated test-fake-ssh executable
      t5505: 'remote add x y' should work when url.y.insteadOf = x
      git config: report when trying to modify a non-existing repo config
      Mark win32's pthread_exit() as NORETURN

Johannes Sixt (3):
      t/t5100: no need to use 'echo' command substitutions for globbing
      mingw: avoid linking to the C library's isalpha()
      t0001: fix GIT_* environment variable check under --valgrind

John Keeping (3):
      completion: add missing git-rebase options
      t8005: avoid grep on non-ASCII data
      t9200: avoid grep on non-ASCII data

Jon Griffiths (3):
      credential-cache--daemon: refactor check_socket_directory
      credential-cache--daemon: disallow relative socket path
      credential-cache--daemon: change to the socket dir on startup

Jonathan Nieder (1):
      submodule.c: write "Fetching submodule <foo>" to stderr

Junio C Hamano (58):
      First batch for post 2.7 cycle
      strbuf: miniscule style fix
      strbuf: make strbuf_getline_crlf() global
      strbuf: introduce strbuf_getline_{lf,nul}()
      mktree: there are only two possible line terminations
      check-attr: there are only two possible line terminations
      check-ignore: there are only two possible line terminations
      update-index: there are only two possible line terminations
      checkout-index: there are only two possible line terminations
      strbuf: give strbuf_getline() to the "most text friendly" variant
      hash-object: read --stdin-paths with strbuf_getline()
      revision: read --stdin with strbuf_getline()
      rev-parse: read parseopt spec with strbuf_getline()
      ident.c: read /etc/mailname with strbuf_getline()
      remote.c: read $GIT_DIR/remotes/* with strbuf_getline()
      clone/sha1_file: read info/alternates with strbuf_getline()
      transport-helper: read helper response with strbuf_getline()
      cat-file: read batch stream with strbuf_getline()
      column: read lines with strbuf_getline()
      send-pack: read list of refs with strbuf_getline()
      grep: read -f file with strbuf_getline()
      test-sha1-array: read command stream with strbuf_getline()
      test-lib: clarify and tighten SANITY
      Second batch for 2.8 cycle
      Third batch for 2.8 cycle
      git: remove an early return from save_env_before_alias()
      git: protect against unbalanced calls to {save,restore}_env()
      git: simplify environment save/restore logic
      Fourth batch for 2.8.cycle
      Getting closer to 2.7.1
      restore_env(): free the saved environment variable once we are done
      Fifth batch for 2.8 cycle
      Git 2.7.1
      Sixth batch for the 2.8 cycle
      pager: lose a separate argv[]
      pager: factor out a helper to prepare a child process to run the pager
      am -i: fix "v"iew
      Start preparing for 2.7.2
      Seventh batch for the 2.8 cycle
      Git 2.7.2
      Eighth batch for 2.8
      Git 2.8-rc0
      Git 2.8-rc1
      gitignore: document that unignoring a directory unignores everything in it
      Git 2.7.3
      Git 2.8-rc2
      sane_grep: pass "-a" if grep accepts it
      rebase-i: clarify "is this commit relevant?" test
      RelNotes for 2.8.0: typofix
      Git 2.8-rc3
      Git 2.4.11
      Git 2.5.5
      Git 2.6.6
      Git 2.7.4
      Revert "Merge branch 'jc/exclusion-doc'"
      Revert "Merge branch 'nd/exclusion-regression-fix'"
      RelNotes: remove the mention of !reinclusion
      Git 2.8-rc4

Karsten Blees (1):
      mingw: factor out Windows specific environment setup

Karthik Nayak (10):
      ref-filter: bump 'used_atom' and related code to the top
      ref-filter: introduce struct used_atom
      ref-filter: introduce parsing functions for each valid atom
      ref-filter: introduce color_atom_parser()
      ref-filter: introduce parse_align_position()
      ref-filter: introduce align_atom_parser()
      ref-filter: align: introduce long-form syntax
      ref-filter: introduce remote_ref_atom_parser()
      ref-filter: introduce contents_atom_parser()
      ref-filter: introduce objectname_atom_parser()

Kazutoshi Satoda (2):
      git-svn: enable "svn.pathnameencoding" on dcommit
      git-svn: apply "svn.pathnameencoding" before URL encoding

Knut Franke (2):
      http: allow selection of proxy authentication method
      http: use credential API to handle proxy authentication

Lars Schneider (8):
      travis-ci: run previously failed tests first, then slowest to fastest
      travis-ci: explicity use container-based infrastructure
      convert: treat an empty string for clean/smudge filters as "cat"
      t: do not hide Git's exit code in tests using 'nul_to_q'
      rename git_config_from_buf to git_config_from_mem
      config: add 'origin_type' to config_source struct
      config: add '--show-origin' option to print the origin of a config value
      add DEVELOPER makefile knob to check for acknowledged warnings

Lars Vogel (1):
      git-add doc: do not say working directory when you mean working tree

Martin Amdisen (1):
      templates/hooks: fix minor typo in the sample update-hook

Matt McCutchen (1):
      Documentation/git-clean.txt: don't mention deletion of .git/modules/*

Matthew Kraai (1):
      Documentation: remove unnecessary backslashes

Matthieu Moy (8):
      Documentation/git-push: document that 'simple' is the default
      README: use markdown syntax
      README.md: add hyperlinks on filenames
      README.md: move the link to git-scm.com up
      README.md: don't call git stupid in the title
      README.md: move down historical explanation about the name
      push: remove "push.default is unset" warning message
      Documentation: fix broken linkgit to git-config

Michael J Gruber (5):
      t9100: fix breakage when SHELL_PATH is not /bin/sh
      tests: rename work-tree tests to *work-tree*
      t/lib-httpd: load mod_unixd
      t5510: do not leave changed cwd
      wt-status: allow "ahead " to be picked up by l10n

Mike Hommey (1):
      notes: allow treeish expressions as notes ref

Nguyễn Thái Ngọc Duy (25):
      blame: remove obsolete comment
      add and use a convenience macro ce_intent_to_add()
      Revert "setup: set env $GIT_WORK_TREE when work tree is set, like $GIT_DIR"
      git.c: make it clear save_env() is for alias handling only
      setup.c: re-fix d95138e (setup: set env $GIT_WORK_TREE when ..
      git.c: make sure we do not leak GIT_* to alias scripts
      grep: make it clear i-t-a entries are ignored
      dir.c: clean the entire struct in clear_exclude_list()
      Revert "dir.c: don't exclude whole dir prematurely if neg pattern may match"
      worktree.c: fix indentation
      diff-no-index: do not take a redundant prefix argument
      diff: make -O and --output work in subdirectory
      worktree: stop supporting moving worktrees manually
      rev-parse: take prefix into account in --git-common-dir
      dir.c: fix match_pathname()
      dir.c: support tracing exclude
      dir.c: support marking some patterns already matched
      dir.c: don't exclude whole dir prematurely
      worktree: fix "add -B"
      worktree add -B: do the checkout test before update branch
      sha1_file.c: mark strings for translation
      builtin/checkout.c: mark strings for translation
      builtin/clone.c: mark strings for translation
      ref-filter.c: mark strings for translation
      trailer.c: mark strings for translation

Pat Thoyts (1):
      t0008: avoid absolute path

Patrick Steinhardt (18):
      push: add '--delete' flag to synopsis
      push: add '-d' as shorthand for '--delete'
      config: introduce set_or_die wrappers
      branch: report errors in tracking branch setup
      branch: die on config error when unsetting upstream
      branch: die on config error when editing branch description
      submodule: die on config error when linking modules
      submodule--helper: die on config error when cloning module
      remote: die on config error when setting URL
      remote: die on config error when setting/adding branches
      remote: die on config error when manipulating remotes
      clone: die on config error in cmd_clone
      init-db: die on config errors when initializing empty repo
      sequencer: die on config error when saving replay opts
      compat: die when unable to set core.precomposeunicode
      config: rename git_config_set to git_config_set_gently
      config: rename git_config_set_or_die to git_config_set
      xdiff/xmerge: fix memory leak in xdl_merge

Paul Wagland (2):
      completion: complete show-branch "--date-order"
      completion: update completion arguments for stash

Peter Krefting (3):
      l10n: sv.po: Fix inconsistent translation of "progress meter"
      l10n: sv.po: Update Swedish translation (2509t0f0u)
      l10n: sv.po: Update Swedish translation (2530t0f0u)

Ralf Thielow (8):
      l10n: TEAMS: update Ralf Thielow's email address
      l10n: de.po: add space to abbreviation "z. B."
      l10n: de.po: fix interactive rebase message
      l10n: de.po: translate "command" as "Befehl"
      l10n: de.po: translate 48 new messages
      l10n: de.po: translate 22 new messages
      l10n: de.po: add missing newlines
      gitk: Update German translation

Ray Chen (1):
      l10n: zh_CN: review for git v2.8.0 l10n round 2

Rob Mayoff (1):
      contrib/subtree: unwrap tag refs

Romain Picard (1):
      git-p4.py: add support for filetype change

SZEDER Gábor (2):
      t6050-replace: make failing editor test more robust
      completion: fix mis-indentation in _git_stash()

Sebastian Schuberth (3):
      docs: clarify that passing --depth to git-clone implies --single-branch
      docs: say "commits" in the --depth option wording for git-clone
      docs: clarify that --depth for git-fetch works with newly initialized repos

Shawn O. Pearce (1):
      remote-curl: include curl_errorstr on SSL setup failures

Stefan Beller (10):
      xread: poll on non blocking fds
      strbuf: add strbuf_read_once to read without blocking
      sigchain: add command to pop all common signals
      run-command: add an asynchronous parallel child processor
      fetch_populated_submodules: use new parallel job processing
      submodules: allow parallel fetching, add tests and documentation
      submodule helper list: respect correct path prefix
      submodule: try harder to fetch needed sha1 by direct fetching sha1
      run-command: do not pass child process data into callbacks
      Documentation: reword rebase summary

Stephen P. Smith (4):
      user-manual: remove temporary branch entry from todo list
      glossary: define the term shallow clone
      user-manual: add section documenting shallow clones
      user-manual: add addition gitweb information

Thomas Ackermann (1):
      documentation: fix some typos

Thomas Braun (1):
      completion: complete "diff --word-diff-regex="

Thomas Gummerer (11):
      t7810: correct --no-index test
      builtin/grep: add grep.fallbackToNoIndex config
      ls-remote: document --quiet option
      ls-remote: document --refs option
      ls-remote: fix synopsis
      ls-remote: use parse-options api
      ls-remote: add support for showing symrefs
      remote: use parse_config_key
      remote: simplify remote_is_configured()
      remote: actually check if remote exits
      remote: use remote_is_configured() for add and rename

Tobias Klauser (2):
      trailer: allow to write to files other than stdout
      interpret-trailers: add option for in-place editing

Torsten Bögershausen (9):
      ls-files: add eol diagnostics
      t0027: add tests for get_stream_filter()
      convert.c: remove unused parameter 'path'
      convert.c: remove input_crlf_action()
      convert.c: use text_eol_is_crlf()
      convert.c: refactor crlf_action
      convert.c: simplify text_stat
      convert.c: correct attr_action()
      config.mak.uname: use clang for Mac OS X 10.6

Trần Ngọc Quân (1):
      l10n: vi.po (2509t): Updated Vietnamese translation

Victor Leschuk (4):
      grep: allow threading even on a single-core machine
      grep: slight refactoring to the code that disables threading
      grep: add --threads=<num> option and grep.threads configuration
      git-svn: loosen config globs limitations

Will Palmer (2):
      test for '!' handling in rev-parse's named commits
      object name: introduce '^{/!-<negative pattern>}' notation

brian m. carlson (1):
      http: add option to try authentication without username

Øyvind A. Holm (1):
      gitweb: squelch "uninitialized value" warning

마누엘 (1):
      mingw: try to delete target directory before renaming

^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.8.0-rc3
@ 2016-03-16 22:24  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2016-03-16 22:24 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

A release candidate Git v2.8.0-rc3 is now available for testing
at the usual places.  It is comprised of 498 non-merge commits
since v2.7.0, contributed by 69 people, 21 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.8.0-rc3' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.7.0 are as follows.
Welcome to the Git development community!

  마누엘, Adam Dinwoodie, Andrew Wheeler, Changwoo Ryu,
  Christoph Egger, Christoph Hoopmann, Dan Aloni, Dave Ware, David
  A. Wheeler, Dickson Wong, Felipe Gonçalves Assis, GyuYong Jung,
  Jon Griffiths, Kazutoshi Satoda, Lars Vogel, Martin Amdisen,
  Matthew Kraai, Paul Wagland, Rob Mayoff, Romain Picard, and
  Victor Leschuk.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alexander Kuleshov, Alex Henrie, Audric Schiltknecht, brian
  m. carlson, Carlos Martín Nieto, Christian Couder, David
  A. Greene, David Turner, Dennis Kaarsemaker, Dimitriy Ryazantcev,
  Edmundo Carmona Antoranz, Elia Pinto, Eric Wong, Jacob Keller,
  Jean-Noel Avila, Jeff King, Jiang Xin, Johannes Schindelin,
  Johannes Sixt, John Keeping, Jonathan Nieder, Junio C Hamano,
  Karsten Blees, Karthik Nayak, Knut Franke, Lars Schneider,
  Matthieu Moy, Matt McCutchen, Michael J Gruber, Mike Hommey,
  Nguyễn Thái Ngọc Duy, Øyvind A. Holm, Patrick Steinhardt,
  Pat Thoyts, Peter Krefting, Ralf Thielow, Sebastian Schuberth,
  Shawn O. Pearce, Stefan Beller, Stephen P. Smith, SZEDER Gábor,
  Thomas Ackermann, Thomas Braun, Thomas Gummerer, Tobias Klauser,
  Torsten Bögershausen, Trần Ngọc Quân, and Will Palmer.

----------------------------------------------------------------

Git 2.8 Release Notes (draft)
=============================

Backward compatibility note
---------------------------

The rsync:// transport has been removed.


Updates since v2.7
------------------

UI, Workflows & Features

 * It turns out "git clone" over rsync transport has been broken when
   the source repository has packed references for a long time, and
   nobody noticed nor complained about it.

 * "push" learned that its "--delete" option can be shortened to
   "-d", just like "branch --delete" and "branch -d" are the same
   thing.

 * "git blame" learned to produce the progress eye-candy when it takes
   too much time before emitting the first line of the result.

 * "git grep" can now be configured (or told from the command line)
   how many threads to use when searching in the working tree files.

 * Some "git notes" operations, e.g. "git log --notes=<note>", should
   be able to read notes from any tree-ish that is shaped like a notes
   tree, but the notes infrastructure required that the argument must
   be a ref under refs/notes/.  Loosen it to require a valid ref only
   when the operation would update the notes (in which case we must
   have a place to store the updated notes tree, iow, a ref).

 * "git grep" by default does not fall back to its "--no-index"
   behaviour outside a directory under Git's control (otherwise the
   user may by mistake end up running a huge recursive search); with a
   new configuration (set in $HOME/.gitconfig--by definition this
   cannot be set in the config file per project), this safety can be
   disabled.

 * "git pull --rebase" has been extended to allow invoking
   "rebase -i".

 * "git p4" learned to cope with the type of a file getting changed.

 * "git format-patch" learned to notice format.outputDirectory
   configuration variable.  This allows "-o <dir>" option to be
   omitted on the command line if you always use the same directory in
   your workflow.

 * "interpret-trailers" has been taught to optionally update a file in
   place, instead of always writing the result to the standard output.

 * Many commands that read files that are expected to contain text
   that is generated (or can be edited) by the end user to control
   their behaviour (e.g. "git grep -f <filename>") have been updated
   to be more tolerant to lines that are terminated with CRLF (they
   used to treat such a line to contain payload that ends with CR,
   which is usually not what the users expect).

 * "git notes merge" used to limit the source of the merged notes tree
   to somewhere under refs/notes/ hierarchy, which was too limiting
   when inventing a workflow to exchange notes with remote
   repositories using remote-tracking notes trees (located in e.g.
   refs/remote-notes/ or somesuch).

 * "git ls-files" learned a new "--eol" option to help diagnose
   end-of-line problems.

 * "ls-remote" learned an option to show which branch the remote
   repository advertises as its primary by pointing its HEAD at.

 * New http.proxyAuthMethod configuration variable can be used to
   specify what authentication method to use, as a way to work around
   proxies that do not give error response expected by libcurl when
   CURLAUTH_ANY is used.  Also, the codepath for proxy authentication
   has been taught to use credential API to store the authentication
   material in user's keyrings.

 * Update the untracked cache subsystem and change its primary UI from
   "git update-index" to "git config".

 * There were a few "now I am doing this thing" progress messages in
   the TCP connection code that can be triggered by setting a verbose
   option internally in the code, but "git fetch -v" and friends never
   passed the verbose option down to that codepath.

 * Clean/smudge filters defined in a configuration file of lower
   precedence can now be overridden to be a pass-through no-op by
   setting the variable to an empty string.

 * A new "<branch>^{/!-<pattern>}" notation can be used to name a
   commit that is reachable from <branch> that does not match the
   given <pattern>.

 * The "user.useConfigOnly" configuration variable can be used to
   force the user to always set user.email & user.name configuration
   variables, serving as a reminder for those who work on multiple
   projects and do not want to put these in their $HOME/.gitconfig.

 * "git fetch" and friends that make network connections can now be
   told to only use ipv4 (or ipv6).

 * Some authentication methods do not need username or password, but
   libcurl needs some hint that it needs to perform authentication.
   Supplying an empty username and password string is a valid way to
   do so, but you can set the http.[<url>.]emptyAuth configuration
   variable to achieve the same, if you find it cleaner.

 * You can now set http.[<url>.]pinnedpubkey to specify the pinned
   public key when building with recent enough versions of libcURL.

 * The configuration system has been taught to phrase where it found a
   bad configuration variable in a better way in its error messages.
   "git config" learnt a new "--show-origin" option to indicate where
   the values come from.

 * The "credential-cache" daemon process used to run in whatever
   directory it happened to start in, but this made umount(2)ing the
   filesystem that houses the repository harder; now the process
   chdir()s to the directory that house its own socket on startup.

 * When "git submodule update" did not result in fetching the commit
   object in the submodule that is referenced by the superproject, the
   command learned to retry another fetch, specifically asking for
   that commit that may not be connected to the refs it usually
   fetches.

 * "git merge-recursive" learned "--no-renames" option to disable its
   rename detection logic.

 * Across the transition at around Git version 2.0, the user used to
   get a pretty loud warning when running "git push" without setting
   push.default configuration variable.  We no longer warn because the
   transition was completed a long time ago.

 * README has been renamed to README.md and its contents got tweaked
   slightly to make it easier on the eyes.


Performance, Internal Implementation, Development Support etc.

 * Add a framework to spawn a group of processes in parallel, and use
   it to run "git fetch --recurse-submodules" in parallel.

 * A slight update to the Makefile to mark ".PHONY" targets as such
   correctly.

 * In-core storage of the reverse index for .pack files (which lets
   you go from a pack offset to an object name) has been streamlined.

 * d95138e6 (setup: set env $GIT_WORK_TREE when work tree is set, like
   $GIT_DIR, 2015-06-26) attempted to work around a glitch in alias
   handling by overwriting GIT_WORK_TREE environment variable to
   affect subprocesses when set_git_work_tree() gets called, which
   resulted in a rather unpleasant regression to "clone" and "init".
   Try to address the same issue by always restoring the environment
   and respawning the real underlying command when handling alias.

 * The low-level code that is used to create symbolic references has
   been updated to share more code with the code that deals with
   normal references.

 * strbuf_getline() and friends have been redefined to make it easier
   to identify which callsite of (new) strbuf_getline_lf() should
   allow and silently ignore carriage-return at the end of the line to
   help users on DOSsy systems.

 * "git shortlog" used to accumulate various pieces of information
   regardless of what was asked to be shown in the final output.  It
   has been optimized by noticing what need not to be collected
   (e.g. there is no need to collect the log messages when showing
   only the number of changes).

 * "git checkout $branch" (and other operations that share the same
   underlying machinery) has been optimized.

 * Automated tests in Travis CI environment has been optimized by
   persisting runtime statistics of previous "prove" run, executing
   tests that take longer before other ones; this reduces the total
   wallclock time.

 * Test scripts have been updated to remove assumptions that are not
   portable between Git for POSIX and Git for Windows, or to skip ones
   with expectations that are not satisfiable on Git for Windows.

 * Some calls to strcpy(3) triggers a false warning from static
   analysers that are less intelligent than humans, and reducing the
   number of these false hits helps us notice real issues.  A few
   calls to strcpy(3) in a couple of protrams that are already safe
   has been rewritten to avoid false warnings.

 * The "name_path" API was an attempt to reduce the need to construct
   the full path out of a series of path components while walking a
   tree hierarchy, but over time made less efficient because the path
   needs to be flattened, e.g. to be compared with another path that
   is already flat.  The API has been removed and its users have been
   rewritten to simplify the overall code complexity.

 * Help those who debug http(s) part of the system.
   (merge 0054045 sp/remote-curl-ssl-strerror later to maint).

 * The internal API to interact with "remote.*" configuration
   variables has been streamlined.

 * The ref-filter's format-parsing code has been refactored, in
   preparation for "branch --format" and friends.

 * Traditionally, the tests that try commands that work on the
   contents in the working tree were named with "worktree" in their
   filenames, but with the recent addition of "git worktree"
   subcommand, whose tests are also named similarly, it has become
   harder to tell them apart.  The traditional tests have been renamed
   to use "work-tree" instead in an attempt to differentiate them.
   (merge 5549029 mg/work-tree-tests later to maint).

 * Many codepaths forget to check return value from git_config_set();
   the function is made to die() to make sure we do not proceed when
   setting a configuration variable failed.
   (merge 3d18064 ps/config-error later to maint).

 * Handling of errors while writing into our internal asynchronous
   process has been made more robust, which reduces flakiness in our
   tests.
   (merge 43f3afc jk/epipe-in-async later to maint).

 * There is a new DEVELOPER knob that enables many compiler warning
   options in the Makefile.

 * The way the test scripts configure the Apache web server has been
   updated to work also for Apache 2.4 running on RedHat derived
   distros.

 * Out of maintenance gcc on OSX 10.6 fails to compile the code in
   'master'; work it around by using clang by default on the platform.

 * The "name_path" API was an attempt to reduce the need to construct
   the full path out of a series of path components while walking a
   tree hierarchy, but over time made less efficient because the path
   needs to be flattened, e.g. to be compared with another path that
   is already flat, in many cases.  The API has been removed and its
   users have been rewritten to simplify the overall code complexity.
   This incidentally also closes some heap-corruption holes.

 * Recent versions of GNU grep is pickier than before to decide if a
   file is "binary" and refuse to give line-oriented hits when we
   expect it to, unless explicitly told with "-a" option.  As our
   scripted Porcelains use sane_grep wrapper for line-oriented data,
   even when the line may contain non-ASCII payload we took from
   end-user data, use "grep -a" to implement sane_grep wrapper when
   using an implementation of "grep" that takes the "-a" option.



Also contains various documentation updates and code clean-ups.


Fixes since v2.7
----------------

Unless otherwise noted, all the fixes since v2.7 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * An earlier change in 2.5.x-era broke users' hooks and aliases by
   exporting GIT_WORK_TREE to point at the root of the working tree,
   interfering when they tried to use a different working tree without
   setting GIT_WORK_TREE environment themselves.

 * The "exclude_list" structure has the usual "alloc, nr" pair of
   fields to be used by ALLOC_GROW(), but clear_exclude_list() forgot
   to reset 'alloc' to 0 when it cleared 'nr' to discard the managed
   array.

 * Paths that have been told the index about with "add -N" are not
   quite yet in the index, but a few commands behaved as if they
   already are in a harmful way.

 * "git send-email" was confused by escaped quotes stored in the alias
   files saved by "mutt", which has been corrected.

 * A few unportable C construct have been spotted by clang compiler
   and have been fixed.

 * The documentation has been updated to hint the connection between
   the '--signoff' option and DCO.

 * "git reflog" incorrectly assumed that all objects that used to be
   at the tip of a ref must be commits, which caused it to segfault.

 * The ignore mechanism saw a few regressions around untracked file
   listing and sparse checkout selection areas in 2.7.0; the change
   that is responsible for the regression has been reverted.

 * Another try to improve the ignore mechanism that lets you say "this
   is excluded" and then later say "oh, no, this part (that is a
   subset of the previous part) is not excluded".  This has still a
   known limitation, though.

 * Some codepaths used fopen(3) when opening a fixed path in $GIT_DIR
   (e.g. COMMIT_EDITMSG) that is meant to be left after the command is
   done.  This however did not work well if the repository is set to
   be shared with core.sharedRepository and the umask of the previous
   user is tighter.  They have been made to work better by calling
   unlink(2) and retrying after fopen(3) fails with EPERM.

 * Asking gitweb for a nonexistent commit left a warning in the server
   log.

   Somebody may want to follow this up with an additional test, perhaps?
   IIRC, we do test that no Perl warnings are given to the server log,
   so this should have been caught if our test coverage were good.

 * "git rebase", unlike all other callers of "gc --auto", did not
   ignore the exit code from "gc --auto".

 * Many codepaths that run "gc --auto" before exiting kept packfiles
   mapped and left the file descriptors to them open, which was not
   friendly to systems that cannot remove files that are open.  They
   now close the packs before doing so.

 * A recent optimization to filter-branch in v2.7.0 introduced a
   regression when --prune-empty filter is used, which has been
   corrected.

 * The description for SANITY prerequisite the test suite uses has
   been clarified both in the comment and in the implementation.

 * "git tag" started listing a tag "foo" as "tags/foo" when a branch
   named "foo" exists in the same repository; remove this unnecessary
   disambiguation, which is a regression introduced in v2.7.0.

 * The way "git svn" uses auth parameter was broken by Subversion
   1.9.0 and later.

 * The "split" subcommand of "git subtree" (in contrib/) incorrectly
   skipped merges when it shouldn't, which was corrected.

 * A few options of "git diff" did not work well when the command was
   run from a subdirectory.

 * The command line completion learned a handful of additional options
   and command specific syntax.

 * dirname() emulation has been added, as Msys2 lacks it.

 * The underlying machinery used by "ls-files -o" and other commands
   has been taught not to create empty submodule ref cache for a
   directory that is not a submodule.  This removes a ton of wasted
   CPU cycles.

 * "git worktree" had a broken code that attempted to auto-fix
   possible inconsistency that results from end-users moving a
   worktree to different places without telling Git (the original
   repository needs to maintain backpointers to its worktrees, but
   "mv" run by end-users who are not familiar with that fact will
   obviously not adjust them), which actually made things worse
   when triggered.

 * The low-level merge machinery has been taught to use CRLF line
   termination when inserting conflict markers to merged contents that
   are themselves CRLF line-terminated.

 * "git push --force-with-lease" has been taught to report if the push
   needed to force (or fast-forwarded).

 * The emulated "yes" command used in our test scripts has been
   tweaked not to spend too much time generating unnecessary output
   that is not used, to help those who test on Windows where it would
   not stop until it fills the pipe buffer due to lack of SIGPIPE.

 * The documentation for "git clean" has been corrected; it mentioned
   that .git/modules/* are removed by giving two "-f", which has never
   been the case.

 * The vimdiff backend for "git mergetool" has been tweaked to arrange
   and number buffers in the order that would match the expectation of
   majority of people who read left to right, then top down and assign
   buffers 1 2 3 4 "mentally" to local base remote merge windows based
   on that order.

 * "git show 'HEAD:Foo[BAR]Baz'" did not interpret the argument as a
   rev, i.e. the object named by the the pathname with wildcard
   characters in a tree object.
   (merge aac4fac nd/dwim-wildcards-as-pathspecs later to maint).

 * "git rev-parse --git-common-dir" used in the worktree feature
   misbehaved when run from a subdirectory.
   (merge 17f1365 nd/git-common-dir-fix later to maint).

 * "git worktree add -B <branchname>" did not work.

 * The "v(iew)" subcommand of the interactive "git am -i" command was
   broken in 2.6.0 timeframe when the command was rewritten in C.
   (merge 708b8cc jc/am-i-v-fix later to maint).

 * "git merge-tree" used to mishandle "both sides added" conflict with
   its own "create a fake ancestor file that has the common parts of
   what both sides have added and do a 3-way merge" logic; this has
   been updated to use the usual "3-way merge with an empty blob as
   the fake common ancestor file" approach used in the rest of the
   system.
   (merge 907681e jk/no-diff-emit-common later to maint).

 * The memory ownership rule of fill_textconv() API, which was a bit
   tricky, has been documented a bit better.
   (merge a64e6a4 jk/more-comments-on-textconv later to maint).

 * Update various codepaths to avoid manually-counted malloc().
   (merge 08c95df jk/tighten-alloc later to maint).

 * The documentation did not clearly state that the 'simple' mode is
   now the default for "git push" when push.default configuration is
   not set.
   (merge f6b1fb3 mm/push-simple-doc later to maint).

 * Recent versions of GNU grep are pickier when their input contains
   arbitrary binary data, which some of our tests uses.  Rewrite the
   tests to sidestep the problem.
   (merge 3b1442d jk/grep-binary-workaround-in-test later to maint).

 * A helper function "git submodule" uses since v2.7.0 to list the
   modules that match the pathspec argument given to its subcommands
   (e.g. "submodule add <repo> <path>") has been fixed.
   (merge 2b56bb7 sb/submodule-module-list-fix later to maint).

 * "git config section.var value" to set a value in per-repository
   configuration file failed when it was run outside any repository,
   but didn't say the reason correctly.
   (merge 638fa62 js/config-set-in-non-repository later to maint).

 * The code to read the pack data using the offsets stored in the pack
   idx file has been made more carefully check the validity of the
   data in the idx.
   (merge 7465feb jk/pack-idx-corruption-safety later to maint).

 * Other minor clean-ups and documentation updates
   (merge f459823 ak/extract-argv0-last-dir-sep later to maint).
   (merge 63ca1c0 ak/git-strip-extension-from-dashed-command later to maint).
   (merge 4867f11 ps/plug-xdl-merge-leak later to maint).
   (merge 4938686 dt/initial-ref-xn-commit-doc later to maint).
   (merge 9537f21 ma/update-hooks-sample-typofix later to maint).

----------------------------------------------------------------

Changes since v2.7.0 are as follows:

Adam Dinwoodie (1):
      t9117: test specifying full url to git svn init -T

Alex Henrie (1):
      stripspace: call U+0020 a "space" instead of a "blank"

Alexander Kuleshov (3):
      format-patch: introduce format.outputDirectory configuration
      exec_cmd.c: use find_last_dir_sep() for code simplification
      git.c: simplify stripping extension of a file in handle_builtin()

Andrew Wheeler (1):
      push: fix ref status reporting for --force-with-lease

Audric Schiltknecht (1):
      l10n: fr.po: Correct case in sentence

Carlos Martín Nieto (1):
      Disown ssh+git and git+ssh

Changwoo Ryu (3):
      l10n: ko.po: Add Korean translation
      l10n: ko.po: Update Korean translation
      l10n: ko: Update Korean translation

Christian Couder (11):
      dir: free untracked cache when removing it
      update-index: use enum for untracked cache options
      update-index: add --test-untracked-cache
      update-index: add untracked cache notifications
      update-index: move 'uc' var declaration
      dir: add {new,add}_untracked_cache()
      dir: add remove_untracked_cache()
      dir: simplify untracked cache "ident" field
      config: add core.untrackedCache
      test-dump-untracked-cache: don't modify the untracked cache
      t7063: add tests for core.untrackedCache

Christoph Egger (1):
      http: implement public key pinning

Christoph Hoopmann (1):
      l10n: de.po: fix typo

Dan Aloni (1):
      ident: add user.useConfigOnly boolean for when ident shouldn't be guessed

Dave Ware (1):
      contrib/subtree: fix "subtree split" skipped-merge bug

David A. Greene (1):
      contrib/subtree: Make testing easier

David A. Wheeler (1):
      Expand documentation describing --signoff

David Turner (3):
      do_compare_entry: use already-computed path
      unpack-trees: fix accidentally quadratic behavior
      refs: document transaction semantics

Dennis Kaarsemaker (1):
      reflog-walk: don't segfault on non-commit sha1's in the reflog

Dickson Wong (1):
      mergetool: reorder vim/gvim buffers in three-way diffs

Dimitriy Ryazantcev (2):
      l10n: ru.po: update Russian translation
      l10n: ru.po: update Russian translation

Edmundo Carmona Antoranz (1):
      blame: add support for --[no-]progress option

Elia Pinto (92):
      Makefile: add missing phony target
      contrib/examples/git-commit.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-fetch.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-merge.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-repack.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-revert.sh: use the $( ... ) construct for command substitution
      contrib/thunderbird-patch-inline/appp.sh: use the $( ... ) construct for command substitution
      git-gui/po/glossary/txt-to-pot.sh: use the $( ... ) construct for command substitution
      t/lib-httpd.sh: use the $( ... ) construct for command substitution
      test-sha1.sh: use the $( ... ) construct for command substitution
      unimplemented.sh: use the $( ... ) construct for command substitution
      t/t1100-commit-tree-options.sh: use the $( ... ) construct for command substitution
      t/t1401-symbolic-ref.sh: use the $( ... ) construct for command substitution
      t/t1410-reflog.sh: use the $( ... ) construct for command substitution
      t/t1511-rev-parse-caret.sh: use the $( ... ) construct for command substitution
      t/t1512-rev-parse-disambiguation.sh: use the $( ... ) construct for command substitution
      t/t1700-split-index.sh: use the $( ... ) construct for command substitution
      t/t2025-worktree-add.sh: use the $( ... ) construct for command substitution
      t/t2102-update-index-symlinks.sh: use the $( ... ) construct for command substitution
      t/t3030-merge-recursive.sh: use the $( ... ) construct for command substitution
      t/t3100-ls-tree-restrict.sh: use the $( ... ) construct for command substitution
      t/t3101-ls-tree-dirname.sh: use the $( ... ) construct for command substitution
      t/t3210-pack-refs.sh: use the $( ... ) construct for command substitution
      t/t3403-rebase-skip.sh: use the $( ... ) construct for command substitution
      t/t3511-cherry-pick-x.sh: use the $( ... ) construct for command substitution
      t/t3600-rm.sh: use the $( ... ) construct for command substitution
      t/t3700-add.sh: use the $( ... ) construct for command substitution
      t/t5100-mailinfo.sh: use the $( ... ) construct for command substitution
      t/t5300-pack-object.sh: use the $( ... ) construct for command substitution
      t/t5301-sliding-window.sh: use the $( ... ) construct for command substitution
      t/t5302-pack-index.sh: use the $( ... ) construct for command substitution
      t/t5303-pack-corruption-resilience.sh: use the $( ... ) construct for command substitution
      t/t5304-prune.sh: use the $( ... ) construct for command substitution
      t/t5305-include-tag.sh: use the $( ... ) construct for command substitution
      t/t5500-fetch-pack.sh: use the $( ... ) construct for command substitution
      t/t5505-remote.sh: use the $( ... ) construct for command substitution
      t/t5506-remote-groups.sh: use the $( ... ) construct for command substitution
      t/t5510-fetch.sh: use the $( ... ) construct for command substitution
      t/t5515-fetch-merge-logic.sh: use the $( ... ) construct for command substitution
      t/t5516-fetch-push.sh: use the $( ... ) construct for command substitution
      t/t5517-push-mirror.sh: use the $( ... ) construct for command substitution
      t/t5522-pull-symlink.sh: use the $( ... ) construct for command substitution
      t/t5530-upload-pack-error.sh: use the $( ... ) construct for command substitution
      t/t5532-fetch-proxy.sh: use the $( ... ) construct for command substitution
      t/t5537-fetch-shallow.sh: use the $( ... ) construct for command substitution
      t/t5538-push-shallow.sh: use the $( ... ) construct for command substitution
      t/t5550-http-fetch-dumb.sh: use the $( ... ) construct for command substitution
      t/t5570-git-daemon.sh: use the $( ... ) construct for command substitution
      t/t5601-clone.sh: use the $( ... ) construct for command substitution
      t/t5700-clone-reference.sh: use the $( ... ) construct for command substitution
      t/t5710-info-alternate.sh: use the $( ... ) construct for command substitution
      t/t5900-repo-selection.sh: use the $( ... ) construct for command substitution
      t/t6001-rev-list-graft.sh: use the $( ... ) construct for command substitution
      t/t6002-rev-list-bisect.sh: use the $( ... ) construct for command substitution
      t/t6015-rev-list-show-all-parents.sh: use the $( ... ) construct for command substitution
      t/t6032-merge-large-rename.sh: use the $( ... ) construct for command substitution
      t/t6132-pathspec-exclude.sh: use the $( ... ) construct for command substitution
      t/t7001-mv.sh: use the $( ... ) construct for command substitution
      t/t7003-filter-branch.sh: use the $( ... ) construct for command substitution
      t/t7004-tag.sh: use the $( ... ) construct for command substitution
      t/t7006-pager.sh: use the $( ... ) construct for command substitution
      t/t7103-reset-bare.sh: use the $( ... ) construct for command substitution
      t/t7406-submodule-update.sh: use the $( ... ) construct for command substitution
      t/t7408-submodule-reference.sh: use the $( ... ) construct for command substitution
      t/t7504-commit-msg-hook.sh: use the $( ... ) construct for command substitution
      t/t7505-prepare-commit-msg-hook.sh: use the $( ... ) construct for command substitution
      t/t7602-merge-octopus-many.sh: use the $( ... ) construct for command substitution
      t/t7700-repack.sh: use the $( ... ) construct for command substitution
      t/t8003-blame-corner-cases.sh: use the $( ... ) construct for command substitution
      t/t9001-send-email.sh: use the $( ... ) construct for command substitution
      t9100-git-svn-basic.sh: use the $( ... ) construct for command substitution
      t9101-git-svn-props.sh: use the $( ... ) construct for command substitution
      t9104-git-svn-follow-parent.sh: use the $( ... ) construct for command substitution
      t9105-git-svn-commit-diff.sh: use the $( ... ) construct for command substitution
      t9107-git-svn-migrate.sh: use the $( ... ) construct for command substitution
      t9108-git-svn-glob.sh: use the $( ... ) construct for command substitution
      t9109-git-svn-multi-glob.sh: use the $( ... ) construct for command substitution
      t9110-git-svn-use-svm-props.sh: use the $( ... ) construct for command substitution
      t9114-git-svn-dcommit-merge.sh: use the $( ... ) construct for command substitution
      t9118-git-svn-funky-branch-names.sh: use the $( ... ) construct for command substitution
      t9119-git-svn-info.sh: use the $( ... ) construct for command substitution
      t9129-git-svn-i18n-commitencoding.sh: use the $( ... ) construct for command substitution
      t9130-git-svn-authors-file.sh: use the $( ... ) construct for command substitution
      t9132-git-svn-broken-symlink.sh: use the $( ... ) construct for command substitution
      t9137-git-svn-dcommit-clobber-series.sh: use the $( ... ) construct for command substitution
      t9138-git-svn-authors-prog.sh: use the $( ... ) construct for command substitution
      t9145-git-svn-master-branch.sh: use the $( ... ) construct for command substitution
      t9150-svk-mergetickets.sh: use the $( ... ) construct for command substitution
      t9300-fast-import.sh: use the $( ... ) construct for command substitution
      t9350-fast-export.sh: use the $( ... ) construct for command substitution
      t9501-gitweb-standalone-http-status.sh: use the $( ... ) construct for command substitution
      t9901-git-web--browse.sh: use the $( ... ) construct for command substitution

Eric Wong (10):
      git-send-email: do not double-escape quotes from mutt
      for-each-ref: document `creatordate` and `creator` fields
      git-svn: fix auth parameter handling on SVN 1.9.0+
      pass transport verbosity down to git_connect
      connect & http: support -4 and -6 switches for remote operations
      t5570: add tests for "git {clone,fetch,pull} -v"
      git-svn: hoist out utf8 prep from t9129 to lib-git-svn
      tests: remove no-op full-svn-test target
      git-svn: shorten glob error message
      git-svn: fix URL canonicalization during init w/ SVN 1.7+

Felipe Gonçalves Assis (7):
      merge-recursive: option to disable renames
      merge-recursive: more consistent interface
      merge-strategies.txt: fix typo
      merge-recursive: find-renames resets threshold
      t3034: add rename threshold tests
      t3034: test option to disable renames
      t3034: test deprecated interface

GyuYong Jung (1):
      git-cvsserver.perl: fix typo

Jacob Keller (1):
      notes: allow merging from arbitrary references

Jean-Noel Avila (2):
      l10n: fr.po v2.8.0 round 1 2509t
      l10n: fr.po v2.8.0 round 2

Jeff King (86):
      pack-revindex: drop hash table
      pack-revindex: store entries directly in packed_git
      create_symref: modernize variable names
      create_symref: use existing ref-lock code
      create_symref: write reflog while holding lock
      run-command: don't warn on SIGPIPE deaths
      avoid shifting signed integers 31 bits
      bswap: add NO_UNALIGNED_LOADS define
      checkout,clone: check return value of create_symref
      lock_ref_sha1_basic: always fill old_oid while holding lock
      lock_ref_sha1_basic: handle REF_NODEREF with invalid refs
      rebase: ignore failures from "gc --auto"
      shortlog: match both "Author:" and "author" on stdin
      shortlog: use strbufs to read from stdin
      shortlog: replace hand-parsing of author with pretty-printer
      shortlog: optimize "--summary" mode
      shortlog: optimize out useless "<none>" normalization
      shortlog: optimize out useless string list
      shortlog: don't warn on empty author
      filter-branch: resolve $commit^{tree} in no-index case
      clean: make is_git_repository a public function
      resolve_gitlink_ref: ignore non-repository paths
      t6300: use test_atom for some un-modern tests
      tag: do not show ambiguous tag names as "tags/foo"
      transport: drop support for git-over-rsync
      give "nbuf" strbuf a more meaningful name
      checkout-index: simplify "-z" option parsing
      checkout-index: handle "--no-prefix" option
      checkout-index: handle "--no-index" option
      checkout-index: disallow "--no-stage" option
      apply, ls-files: simplify "-z" parsing
      fmt_ident: refactor strictness checks
      test-path-utils: use xsnprintf in favor of strcpy
      rerere: replace strcpy with xsnprintf
      checkout: reorder check_filename conditional
      check_filename: tighten dwim-wildcard ambiguity
      get_sha1: don't die() on bogus search strings
      http-push: stop using name_path
      show_object_with_name: simplify by using path_name()
      list-objects: convert name_path to a strbuf
      list-objects: drop name_path entirely
      list-objects: pass full pathname to callbacks
      git-config: better document default behavior for `--include`
      ref-filter: use string_list_split over strbuf_split
      reflog_expire_cfg: NUL-terminate pattern field
      add helpers for detecting size_t overflow
      tree-diff: catch integer overflow in combine_diff_path allocation
      diff: clarify textconv interface
      harden REALLOC_ARRAY and xcalloc against size_t overflow
      add helpers for allocating flex-array structs
      argv-array: add detach function
      convert manual allocations to argv_array
      convert trivial cases to ALLOC_ARRAY
      use xmallocz to avoid size arithmetic
      convert trivial cases to FLEX_ARRAY macros
      use st_add and st_mult for allocation size computation
      prepare_{git,shell}_cmd: use argv_array
      write_untracked_extension: use FLEX_ALLOC helper
      fast-import: simplify allocation in start_packfile
      fetch-pack: simplify add_sought_entry
      test-path-utils: fix normalize_path_copy output buffer size
      sequencer: simplify memory allocation of get_message
      git-compat-util: drop mempcpy compat code
      transport_anonymize_url: use xstrfmt
      diff_populate_gitlink: use a strbuf
      convert ewah/bitmap code to use xmalloc
      ewah: convert to REALLOC_ARRAY, etc
      merge-one-file: use empty blob for add/add base
      merge-tree: drop generate_common strategy
      xdiff: drop XDL_EMIT_COMMON
      t5313: test bounds-checks of corrupted/malicious pack/idx files
      nth_packed_object_offset: bounds-check extended offset
      use_pack: handle signed off_t overflow
      write_or_die: handle EPIPE in async threads
      fetch-pack: ignore SIGPIPE in sideband demuxer
      test_must_fail: report number of unexpected signal
      t5504: handle expected output from SIGPIPE death
      compat/mingw: brown paper bag fix for 50a6c8e
      t9700: fix test for perl older than 5.14
      add helpers for detecting size_t overflow
      tree-diff: catch integer overflow in combine_diff_path allocation
      http-push: stop using name_path
      show_object_with_name: simplify by using path_name()
      list-objects: convert name_path to a strbuf
      list-objects: drop name_path entirely
      list-objects: pass full pathname to callbacks

Jiang Xin (7):
      l10n: git.pot: v2.8.0 round 1 (48 new, 16 removed)
      http: honor no_http env variable to bypass proxy
      l10n: zh_CN: for git v2.8.0 l10n round 1
      l10n: git.pot: v2.8.0 round 2 (21 new, 1 removed)
      l10n: zh_CN: for git v2.8.0 l10n round 2
      l10n: git.pot: Add one new message for Git 2.8.0
      l10n: zh_CN: for git v2.8.0 l10n round 3

Johannes Schindelin (47):
      commit: allow editing the commit message even in shared repos
      Handle more file writes correctly in shared repos
      Refactor skipping DOS drive prefixes
      compat/basename: make basename() conform to POSIX
      compat/basename.c: provide a dirname() compatibility function
      t0060: verify that basename() and dirname() work as expected
      config.mak.uname: support MSys2
      config.mak.uname: supporting 64-bit MSys2
      fetch: release pack files before garbage-collecting
      am: release pack files before garbage-collecting
      merge: release pack files before garbage-collecting
      receive-pack: release pack files before garbage-collecting
      pull: allow interactive rebase with --rebase=interactive
      remote: handle the config setting branch.*.rebase=interactive
      completion: add missing branch.*.rebase values
      nedmalloc: allow compiling with MSys2's compiler
      compat/mingw: support MSys2-based MinGW build
      compat/winansi: support compiling with MSys2
      t0060: loosen overly strict expectations
      mingw: avoid redefining S_* constants
      mingw: avoid warnings when casting HANDLEs to int
      mingw: squash another warning about a cast
      mingw: uglify (a, 0) definitions to shut up warnings
      mingw: let's use gettext with MSYS2
      mingw: do not trust MSYS2's MinGW gettext.sh
      Git.pm: stop assuming that absolute paths start with a slash
      mingw: prepare the TMPDIR environment variable for shell scripts
      mingw: let lstat() fail with errno == ENOTDIR when appropriate
      merge-file: let conflict markers match end-of-line style of the context
      merge-file: ensure that conflict sections match eol style
      mingw: fix t5601-clone.sh
      mingw: accomodate t0060-path-utils for MSYS2
      mingw: disable mkfifo-based tests
      tests: turn off git-daemon tests if FIFOs are not available
      mingw: skip test in t1508 that fails due to path conversion
      mingw: fix t9700's assumption about directory separators
      mingw: work around pwd issues in the tests
      mingw: mark t9100's test cases with appropriate prereqs
      mingw: avoid illegal filename in t9118
      mingw: handle the missing POSIXPERM prereq in t9124
      mingw: skip a test in t9130 that cannot pass on Windows
      mingw: do not bother to test funny file names
      test-lib: limit the output of the yes utility
      gitignore: ignore generated test-fake-ssh executable
      t5505: 'remote add x y' should work when url.y.insteadOf = x
      git config: report when trying to modify a non-existing repo config
      Mark win32's pthread_exit() as NORETURN

Johannes Sixt (3):
      t/t5100: no need to use 'echo' command substitutions for globbing
      mingw: avoid linking to the C library's isalpha()
      t0001: fix GIT_* environment variable check under --valgrind

John Keeping (3):
      completion: add missing git-rebase options
      t8005: avoid grep on non-ASCII data
      t9200: avoid grep on non-ASCII data

Jon Griffiths (3):
      credential-cache--daemon: refactor check_socket_directory
      credential-cache--daemon: disallow relative socket path
      credential-cache--daemon: change to the socket dir on startup

Jonathan Nieder (1):
      submodule.c: write "Fetching submodule <foo>" to stderr

Junio C Hamano (50):
      First batch for post 2.7 cycle
      strbuf: miniscule style fix
      strbuf: make strbuf_getline_crlf() global
      strbuf: introduce strbuf_getline_{lf,nul}()
      mktree: there are only two possible line terminations
      check-attr: there are only two possible line terminations
      check-ignore: there are only two possible line terminations
      update-index: there are only two possible line terminations
      checkout-index: there are only two possible line terminations
      strbuf: give strbuf_getline() to the "most text friendly" variant
      hash-object: read --stdin-paths with strbuf_getline()
      revision: read --stdin with strbuf_getline()
      rev-parse: read parseopt spec with strbuf_getline()
      ident.c: read /etc/mailname with strbuf_getline()
      remote.c: read $GIT_DIR/remotes/* with strbuf_getline()
      clone/sha1_file: read info/alternates with strbuf_getline()
      transport-helper: read helper response with strbuf_getline()
      cat-file: read batch stream with strbuf_getline()
      column: read lines with strbuf_getline()
      send-pack: read list of refs with strbuf_getline()
      grep: read -f file with strbuf_getline()
      test-sha1-array: read command stream with strbuf_getline()
      test-lib: clarify and tighten SANITY
      Second batch for 2.8 cycle
      Third batch for 2.8 cycle
      git: remove an early return from save_env_before_alias()
      git: protect against unbalanced calls to {save,restore}_env()
      git: simplify environment save/restore logic
      Fourth batch for 2.8.cycle
      Getting closer to 2.7.1
      restore_env(): free the saved environment variable once we are done
      Fifth batch for 2.8 cycle
      Git 2.7.1
      Sixth batch for the 2.8 cycle
      pager: lose a separate argv[]
      pager: factor out a helper to prepare a child process to run the pager
      am -i: fix "v"iew
      Start preparing for 2.7.2
      Seventh batch for the 2.8 cycle
      Git 2.7.2
      Eighth batch for 2.8
      Git 2.8-rc0
      Git 2.8-rc1
      gitignore: document that unignoring a directory unignores everything in it
      Git 2.7.3
      Git 2.8-rc2
      sane_grep: pass "-a" if grep accepts it
      rebase-i: clarify "is this commit relevant?" test
      RelNotes for 2.8.0: typofix
      Git 2.8-rc3

Karsten Blees (1):
      mingw: factor out Windows specific environment setup

Karthik Nayak (10):
      ref-filter: bump 'used_atom' and related code to the top
      ref-filter: introduce struct used_atom
      ref-filter: introduce parsing functions for each valid atom
      ref-filter: introduce color_atom_parser()
      ref-filter: introduce parse_align_position()
      ref-filter: introduce align_atom_parser()
      ref-filter: align: introduce long-form syntax
      ref-filter: introduce remote_ref_atom_parser()
      ref-filter: introduce contents_atom_parser()
      ref-filter: introduce objectname_atom_parser()

Kazutoshi Satoda (2):
      git-svn: enable "svn.pathnameencoding" on dcommit
      git-svn: apply "svn.pathnameencoding" before URL encoding

Knut Franke (2):
      http: allow selection of proxy authentication method
      http: use credential API to handle proxy authentication

Lars Schneider (8):
      travis-ci: run previously failed tests first, then slowest to fastest
      travis-ci: explicity use container-based infrastructure
      convert: treat an empty string for clean/smudge filters as "cat"
      t: do not hide Git's exit code in tests using 'nul_to_q'
      rename git_config_from_buf to git_config_from_mem
      config: add 'origin_type' to config_source struct
      config: add '--show-origin' option to print the origin of a config value
      add DEVELOPER makefile knob to check for acknowledged warnings

Lars Vogel (1):
      git-add doc: do not say working directory when you mean working tree

Martin Amdisen (1):
      templates/hooks: fix minor typo in the sample update-hook

Matt McCutchen (1):
      Documentation/git-clean.txt: don't mention deletion of .git/modules/*

Matthew Kraai (1):
      Documentation: remove unnecessary backslashes

Matthieu Moy (7):
      Documentation/git-push: document that 'simple' is the default
      README: use markdown syntax
      README.md: add hyperlinks on filenames
      README.md: move the link to git-scm.com up
      README.md: don't call git stupid in the title
      README.md: move down historical explanation about the name
      push: remove "push.default is unset" warning message

Michael J Gruber (5):
      t9100: fix breakage when SHELL_PATH is not /bin/sh
      tests: rename work-tree tests to *work-tree*
      t/lib-httpd: load mod_unixd
      t5510: do not leave changed cwd
      wt-status: allow "ahead " to be picked up by l10n

Mike Hommey (1):
      notes: allow treeish expressions as notes ref

Nguyễn Thái Ngọc Duy (25):
      blame: remove obsolete comment
      add and use a convenience macro ce_intent_to_add()
      Revert "setup: set env $GIT_WORK_TREE when work tree is set, like $GIT_DIR"
      git.c: make it clear save_env() is for alias handling only
      setup.c: re-fix d95138e (setup: set env $GIT_WORK_TREE when ..
      git.c: make sure we do not leak GIT_* to alias scripts
      grep: make it clear i-t-a entries are ignored
      dir.c: clean the entire struct in clear_exclude_list()
      Revert "dir.c: don't exclude whole dir prematurely if neg pattern may match"
      worktree.c: fix indentation
      diff-no-index: do not take a redundant prefix argument
      diff: make -O and --output work in subdirectory
      worktree: stop supporting moving worktrees manually
      rev-parse: take prefix into account in --git-common-dir
      dir.c: fix match_pathname()
      dir.c: support tracing exclude
      dir.c: support marking some patterns already matched
      dir.c: don't exclude whole dir prematurely
      worktree: fix "add -B"
      worktree add -B: do the checkout test before update branch
      sha1_file.c: mark strings for translation
      builtin/checkout.c: mark strings for translation
      builtin/clone.c: mark strings for translation
      ref-filter.c: mark strings for translation
      trailer.c: mark strings for translation

Pat Thoyts (1):
      t0008: avoid absolute path

Patrick Steinhardt (18):
      push: add '--delete' flag to synopsis
      push: add '-d' as shorthand for '--delete'
      config: introduce set_or_die wrappers
      branch: report errors in tracking branch setup
      branch: die on config error when unsetting upstream
      branch: die on config error when editing branch description
      submodule: die on config error when linking modules
      submodule--helper: die on config error when cloning module
      remote: die on config error when setting URL
      remote: die on config error when setting/adding branches
      remote: die on config error when manipulating remotes
      clone: die on config error in cmd_clone
      init-db: die on config errors when initializing empty repo
      sequencer: die on config error when saving replay opts
      compat: die when unable to set core.precomposeunicode
      config: rename git_config_set to git_config_set_gently
      config: rename git_config_set_or_die to git_config_set
      xdiff/xmerge: fix memory leak in xdl_merge

Paul Wagland (2):
      completion: complete show-branch "--date-order"
      completion: update completion arguments for stash

Peter Krefting (2):
      l10n: sv.po: Fix inconsistent translation of "progress meter"
      l10n: sv.po: Update Swedish translation (2509t0f0u)

Ralf Thielow (5):
      l10n: TEAMS: update Ralf Thielow's email address
      l10n: de.po: add space to abbreviation "z. B."
      l10n: de.po: fix interactive rebase message
      l10n: de.po: translate "command" as "Befehl"
      l10n: de.po: translate 48 new messages

Rob Mayoff (1):
      contrib/subtree: unwrap tag refs

Romain Picard (1):
      git-p4.py: add support for filetype change

SZEDER Gábor (2):
      t6050-replace: make failing editor test more robust
      completion: fix mis-indentation in _git_stash()

Sebastian Schuberth (3):
      docs: clarify that passing --depth to git-clone implies --single-branch
      docs: say "commits" in the --depth option wording for git-clone
      docs: clarify that --depth for git-fetch works with newly initialized repos

Shawn O. Pearce (1):
      remote-curl: include curl_errorstr on SSL setup failures

Stefan Beller (10):
      xread: poll on non blocking fds
      strbuf: add strbuf_read_once to read without blocking
      sigchain: add command to pop all common signals
      run-command: add an asynchronous parallel child processor
      fetch_populated_submodules: use new parallel job processing
      submodules: allow parallel fetching, add tests and documentation
      submodule helper list: respect correct path prefix
      submodule: try harder to fetch needed sha1 by direct fetching sha1
      run-command: do not pass child process data into callbacks
      Documentation: reword rebase summary

Stephen P. Smith (4):
      user-manual: remove temporary branch entry from todo list
      glossary: define the term shallow clone
      user-manual: add section documenting shallow clones
      user-manual: add addition gitweb information

Thomas Ackermann (1):
      documentation: fix some typos

Thomas Braun (1):
      completion: complete "diff --word-diff-regex="

Thomas Gummerer (11):
      t7810: correct --no-index test
      builtin/grep: add grep.fallbackToNoIndex config
      ls-remote: document --quiet option
      ls-remote: document --refs option
      ls-remote: fix synopsis
      ls-remote: use parse-options api
      ls-remote: add support for showing symrefs
      remote: use parse_config_key
      remote: simplify remote_is_configured()
      remote: actually check if remote exits
      remote: use remote_is_configured() for add and rename

Tobias Klauser (2):
      trailer: allow to write to files other than stdout
      interpret-trailers: add option for in-place editing

Torsten Bögershausen (9):
      ls-files: add eol diagnostics
      t0027: add tests for get_stream_filter()
      convert.c: remove unused parameter 'path'
      convert.c: remove input_crlf_action()
      convert.c: use text_eol_is_crlf()
      convert.c: refactor crlf_action
      convert.c: simplify text_stat
      convert.c: correct attr_action()
      config.mak.uname: use clang for Mac OS X 10.6

Trần Ngọc Quân (1):
      l10n: vi.po (2509t): Updated Vietnamese translation

Victor Leschuk (4):
      grep: allow threading even on a single-core machine
      grep: slight refactoring to the code that disables threading
      grep: add --threads=<num> option and grep.threads configuration
      git-svn: loosen config globs limitations

Will Palmer (2):
      test for '!' handling in rev-parse's named commits
      object name: introduce '^{/!-<negative pattern>}' notation

brian m. carlson (1):
      http: add option to try authentication without username

Øyvind A. Holm (1):
      gitweb: squelch "uninitialized value" warning

마누엘 (1):
      mingw: try to delete target directory before renaming

^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.8.0-rc2
@ 2016-03-10 23:04  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2016-03-10 23:04 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

A release candidate Git v2.8.0-rc2 is now available for testing
at the usual places.  It is comprised of 459 non-merge commits
since v2.7.0, contributed by 60 people, 19 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.8.0-rc2' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.7.0 are as follows.
Welcome to the Git development community!

  마누엘, Andrew Wheeler, Changwoo Ryu, Christoph Egger,
  Dan Aloni, Dave Ware, David A. Wheeler, Dickson Wong, Felipe
  Gonçalves Assis, GyuYong Jung, Jon Griffiths, Kazutoshi Satoda,
  Lars Vogel, Martin Amdisen, Matthew Kraai, Paul Wagland, Rob
  Mayoff, Romain Picard, and Victor Leschuk.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alexander Kuleshov, Alex Henrie, brian m. carlson, Christian
  Couder, David A. Greene, David Turner, Dennis Kaarsemaker,
  Edmundo Carmona Antoranz, Elia Pinto, Eric Wong, Jacob Keller,
  Jeff King, Jiang Xin, Johannes Schindelin, Johannes Sixt,
  John Keeping, Jonathan Nieder, Junio C Hamano, Karsten Blees,
  Karthik Nayak, Knut Franke, Lars Schneider, Matthieu Moy, Matt
  McCutchen, Michael J Gruber, Mike Hommey, Nguyễn Thái Ngọc
  Duy, Øyvind A. Holm, Patrick Steinhardt, Pat Thoyts, Sebastian
  Schuberth, Shawn O. Pearce, Stefan Beller, Stephen P. Smith,
  SZEDER Gábor, Thomas Ackermann, Thomas Braun, Thomas Gummerer,
  Tobias Klauser, Torsten Bögershausen, and Will Palmer.

----------------------------------------------------------------

Git 2.8 Release Notes (draft)
=============================

Backward compatibility note
---------------------------

The rsync:// transport has been removed.


Updates since v2.7
------------------

UI, Workflows & Features

 * It turns out "git clone" over rsync transport has been broken when
   the source repository has packed references for a long time, and
   nobody noticed nor complained about it.

 * "branch --delete" has "branch -d" but "push --delete" does not.

 * "git blame" learned to produce the progress eye-candy when it takes
   too much time before emitting the first line of the result.

 * "git grep" can now be configured (or told from the command line)
   how many threads to use when searching in the working tree files.

 * Some "git notes" operations, e.g. "git log --notes=<note>", should
   be able to read notes from any tree-ish that is shaped like a notes
   tree, but the notes infrastructure required that the argument must
   be a ref under refs/notes/.  Loosen it to require a valid ref only
   when the operation would update the notes (in which case we must
   have a place to store the updated notes tree, iow, a ref).

 * "git grep" by default does not fall back to its "--no-index"
   behaviour outside a directory under Git's control (otherwise the
   user may by mistake end up running a huge recursive search); with a
   new configuration (set in $HOME/.gitconfig--by definition this
   cannot be set in the config file per project), this safety can be
   disabled.

 * "git pull --rebase" has been extended to allow invoking
   "rebase -i".

 * "git p4" learned to cope with the type of a file getting changed.

 * "git format-patch" learned to notice format.outputDirectory
   configuration variable.  This allows "-o <dir>" option to be
   omitted on the command line if you always use the same directory in
   your workflow.

 * "interpret-trailers" has been taught to optionally update a file in
   place, instead of always writing the result to the standard output.

 * Many commands that read files that are expected to contain text
   that is generated (or can be edited) by the end user to control
   their behaviour (e.g. "git grep -f <filename>") have been updated
   to be more tolerant to lines that are terminated with CRLF (they
   used to treat such a line to contain payload that ends with CR,
   which is usually not what the users expect).

 * "git notes merge" used to limit the source of the merged notes tree
   to somewhere under refs/notes/ hierarchy, which was too limiting
   when inventing a workflow to exchange notes with remote
   repositories using remote-tracking notes trees (located in e.g.
   refs/remote-notes/ or somesuch).

 * "git ls-files" learned a new "--eol" option to help diagnose
   end-of-line problems.

 * "ls-remote" learned an option to show which branch the remote
   repository advertises as its primary by pointing its HEAD at.

 * New http.proxyAuthMethod configuration variable can be used to
   specify what authentication method to use, as a way to work around
   proxies that do not give error response expected by libcurl when
   CURLAUTH_ANY is used.  Also, the codepath for proxy authentication
   has been taught to use credential API to store the authentication
   material in user's keyrings.

 * Update the untracked cache subsystem and change its primary UI from
   "git update-index" to "git config".

 * There were a few "now I am doing this thing" progress messages in
   the TCP connection code that can be triggered by setting a verbose
   option internally in the code, but "git fetch -v" and friends never
   passed the verbose option down to that codepath.

 * Clean/smudge filters defined in a configuration file of lower
   precedence can now be overridden to be a pass-through no-op by
   setting the variable to an empty string.

 * A new "<branch>^{/!-<pattern>}" notation can be used to name a
   commit that is reachable from <branch> that does not match the
   given <pattern>.

 * The "user.useConfigOnly" configuration variable can be used to
   force the user to always set user.email & user.name configuration
   variables, serving as a reminder for those who work on multiple
   projects and do not want to put these in their $HOME/.gitconfig.

 * "git fetch" and friends that make network connections can now be
   told to only use ipv4 (or ipv6).

 * Some authentication methods do not need username or password, but
   libcurl needs some hint that it needs to perform authentication.
   Supplying an empty username and password string is a valid way to
   do so, but you can set the http.[<url>.]emptyAuth configuration
   variable to achieve the same, if you find it cleaner.

 * You can now set http.[<url>.]pinnedpubkey to specify the pinned
   public key when building with recent enough versions of libcURL.

 * The configuration system has been taught to phrase where it found a
   bad configuration variable in a better way in its error messages.
   "git config" learnt a new "--show-origin" option to indicate where
   the values come from.

 * The "credential-cache" daemon process used to run in whatever
   directory it happened to start in, but this made umount(2)ing the
   filesystem that houses the repository harder; now the process
   chdir()s to the directory that house its own socket on startup.

 * When "git submodule update" did not result in fetching the commit
   object in the submodule that is referenced by the superproject, the
   command learned to retry another fetch, specifically asking for
   that commit that may not be connected to the refs it usually
   fetches.

 * "git merge-recursive" learned "--no-renames" option to disable its
   rename detection logic.

 * Across the transition at around Git version 2.0, the user used to
   get a pretty loud warning when running "git push" without setting
   push.default configuration variable.  We no longer warn, given that
   the transition is over long time ago.

 * README has been renamed to README.md and its contents got tweaked
   slightly to make it easier on the eyes.


Performance, Internal Implementation, Development Support etc.

 * Add a framework to spawn a group of processes in parallel, and use
   it to run "git fetch --recurse-submodules" in parallel.

 * A slight update to the Makefile to mark "phoney" targets
   as such correctly.

 * In-core storage of the reverse index for .pack files (which lets
   you go from a pack offset to an object name) has been streamlined.

 * d95138e6 (setup: set env $GIT_WORK_TREE when work tree is set, like
   $GIT_DIR, 2015-06-26) attempted to work around a glitch in alias
   handling by overwriting GIT_WORK_TREE environment variable to
   affect subprocesses when set_git_work_tree() gets called, which
   resulted in a rather unpleasant regression to "clone" and "init".
   Try to address the same issue by always restoring the environment
   and respawning the real underlying command when handling alias.

 * The low-level code that is used to create symbolic references has
   been updated to share more code with the code that deals with
   normal references.

 * strbuf_getline() and friends have been redefined to make it easier
   to identify which callsite of (new) strbuf_getline_lf() should
   allow and silently ignore carriage-return at the end of the line to
   help users on DOSsy systems.

 * "git shortlog" used to accumulate various pieces of information
   regardless of what was asked to be shown in the final output.  It
   has been optimized by noticing what need not to be collected
   (e.g. there is no need to collect the log messages when showing
   only the number of changes).

 * "git checkout $branch" (and other operations that share the same
   underlying machinery) has been optimized.

 * Automated tests in Travis CI environment has been optimized by
   persisting runtime statistics of previous "prove" run, executing
   tests that take longer before other ones; this reduces the total
   wallclock time.

 * Test scripts have been updated to remove assumptions that are not
   portable between Git for POSIX and Git for Windows, or to skip ones
   with expectations that are not satisfiable on Git for Windows.

 * Some calls to strcpy(3) triggers a false warning from static
   analysers that are less intelligent than humans, and reducing the
   number of these false hits helps us notice real issues.  A few
   calls to strcpy(3) in test-path-utils that are already safe has
   been rewritten to avoid false wanings.

 * Some calls to strcpy(3) triggers a false warning from static
   analysers that are less intelligent than humans, and reducing the
   number of these false hits helps us notice real issues.  A few
   calls to strcpy(3) in "git rerere" that are already safe has been
   rewritten to avoid false wanings.

 * The "name_path" API was an attempt to reduce the need to construct
   the full path out of a series of path components while walking a
   tree hierarchy, but over time made less efficient because the path
   needs to be flattened, e.g. to be compared with another path that
   is already flat.  The API has been removed and its users have been
   rewritten to simplify the overall code complexity.

 * Help those who debug http(s) part of the system.
   (merge 0054045 sp/remote-curl-ssl-strerror later to maint).

 * The internal API to interact with "remote.*" configuration
   variables has been streamlined.

 * The ref-filter's format-parsing code has been refactored, in
   preparation for "branch --format" and friends.

 * Traditionally, the tests that try commands that work on the
   contents in the working tree were named with "worktree" in their
   filenames, but with the recent addition of "git worktree"
   subcommand, whose tests are also named similarly, it has become
   harder to tell them apart.  The traditional tests have been renamed
   to use "work-tree" instead in an attempt to differentiate them.
   (merge 5549029 mg/work-tree-tests later to maint).

 * Many codepaths forget to check return value from git_config_set();
   the function is made to die() to make sure we do not proceed when
   setting a configuration variable failed.
   (merge 3d18064 ps/config-error later to maint).

 * Handling of errors while writing into our internal asynchronous
   process has been made more robust, which reduces flakiness in our
   tests.
   (merge 43f3afc jk/epipe-in-async later to maint).

 * There is a new DEVELOPER knob that enables many compiler warning
   options in the Makefile.

 * The way the test scripts configure the Apache web server has been
   updated to work also for Apache 2.4 running on RedHat derived
   distros.

 * Out of maintenance gcc on OSX 10.6 fails to compile the code in
   'master'; work it around by using clang by default on the platform.


Also contains various documentation updates and code clean-ups.


Fixes since v2.7
----------------

Unless otherwise noted, all the fixes since v2.7 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * An earlier change in 2.5.x-era broke users' hooks and aliases by
   exporting GIT_WORK_TREE to point at the root of the working tree,
   interfering when they tried to use a different working tree without
   setting GIT_WORK_TREE environment themselves.

 * The "exclude_list" structure has the usual "alloc, nr" pair of
   fields to be used by ALLOC_GROW(), but clear_exclude_list() forgot
   to reset 'alloc' to 0 when it cleared 'nr' to discard the managed
   array.

 * Paths that have been told the index about with "add -N" are not
   quite yet in the index, but a few commands behaved as if they
   already are in a harmful way.

 * "git send-email" was confused by escaped quotes stored in the alias
   files saved by "mutt", which has been corrected.

 * A few unportable C construct have been spotted by clang compiler
   and have been fixed.

 * The documentation has been updated to hint the connection between
   the '--signoff' option and DCO.

 * "git reflog" incorrectly assumed that all objects that used to be
   at the tip of a ref must be commits, which caused it to segfault.

 * The ignore mechanism saw a few regressions around untracked file
   listing and sparse checkout selection areas in 2.7.0; the change
   that is responsible for the regression has been reverted.

 * Another try to improve the ignore mechanism that lets you say "this
   is excluded" and then later say "oh, no, this part (that is a
   subset of the previous part) is not excluded".  This has still a
   known limitation, though.

 * Some codepaths used fopen(3) when opening a fixed path in $GIT_DIR
   (e.g. COMMIT_EDITMSG) that is meant to be left after the command is
   done.  This however did not work well if the repository is set to
   be shared with core.sharedRepository and the umask of the previous
   user is tighter.  They have been made to work better by calling
   unlink(2) and retrying after fopen(3) fails with EPERM.

 * Asking gitweb for a nonexistent commit left a warning in the server
   log.

   Somebody may want to follow this up with an additional test, perhaps?
   IIRC, we do test that no Perl warnings are given to the server log,
   so this should have been caught if our test coverage were good.

 * "git rebase", unlike all other callers of "gc --auto", did not
   ignore the exit code from "gc --auto".

 * Many codepaths that run "gc --auto" before exiting kept packfiles
   mapped and left the file descriptors to them open, which was not
   friendly to systems that cannot remove files that are open.  They
   now close the packs before doing so.

 * A recent optimization to filter-branch in v2.7.0 introduced a
   regression when --prune-empty filter is used, which has been
   corrected.

 * The description for SANITY prerequisite the test suite uses has
   been clarified both in the comment and in the implementation.

 * "git tag" started listing a tag "foo" as "tags/foo" when a branch
   named "foo" exists in the same repository; remove this unnecessary
   disambiguation, which is a regression introduced in v2.7.0.

 * The way "git svn" uses auth parameter was broken by Subversion
   1.9.0 and later.

 * The "split" subcommand of "git subtree" (in contrib/) incorrectly
   skipped merges when it shouldn't, which was corrected.

 * A few options of "git diff" did not work well when the command was
   run from a subdirectory.

 * The command line completion learned a handful of additional options
   and command specific syntax.

 * dirname() emulation has been added, as Msys2 lacks it.

 * The underlying machinery used by "ls-files -o" and other commands
   have been taught not to create empty submodule ref cache for a
   directory that is not a submodule.  This removes a ton of wasted
   CPU cycles.

 * "git worktree" had a broken code that attempted to auto-fix
   possible inconsistency that results from end-users moving a
   worktree to different places without telling Git (the original
   repository needs to maintain backpointers to its worktrees, but
   "mv" run by end-users who are not familiar with that fact will
   obviously not adjust them), which actually made things worse
   when triggered.

 * The low-level merge machinery has been taught to use CRLF line
   termination when inserting conflict markers to merged contents that
   are themselves CRLF line-terminated.

 * "git push --force-with-lease" has been taught to report if the push
   needed to force (or fast-forwarded).

 * The emulated "yes" command used in our test scripts has been
   tweaked not to spend too much time generating unnecessary output
   that is not used, to help those who test on Windows where it would
   not stop until it fills the pipe buffer due to lack of SIGPIPE.

 * The documentation for "git clean" has been corrected; it mentioned
   that .git/modules/* are removed by giving two "-f", which has never
   been the case.

 * The vimdiff backend for "git mergetool" has been tweaked to arrange
   and number buffers in the order that would match the expectation of
   majority of people who read left to right, then top down and assign
   buffers 1 2 3 4 "mentally" to local base remote merge windows based
   on that order.

 * "git show 'HEAD:Foo[BAR]Baz'" did not interpret the argument as a
   rev, i.e. the object named by the the pathname with wildcard
   characters in a tree object.
   (merge aac4fac nd/dwim-wildcards-as-pathspecs later to maint).

 * "git rev-parse --git-common-dir" used in the worktree feature
   misbehaved when run from a subdirectory.
   (merge 17f1365 nd/git-common-dir-fix later to maint).

 * "git worktree add -B <branchname>" did not work.

 * The "v(iew)" subcommand of the interactive "git am -i" command was
   broken in 2.6.0 timeframe when the command was rewritten in C.
   (merge 708b8cc jc/am-i-v-fix later to maint).

 * "git merge-tree" used to mishandle "both sides added" conflict with
   its own "create a fake ancestor file that has the common parts of
   what both sides have added and do a 3-way merge" logic; this has
   been updated to use the usual "3-way merge with an empty blob as
   the fake common ancestor file" approach used in the rest of the
   system.
   (merge 907681e jk/no-diff-emit-common later to maint).

 * The memory ownership rule of fill_textconv() API, which was a bit
   tricky, has been documented a bit better.
   (merge a64e6a4 jk/more-comments-on-textconv later to maint).

 * Update various codepaths to avoid manually-counted malloc().
   (merge 08c95df jk/tighten-alloc later to maint).

 * The documentation did not clearly state that the 'simple' mode is
   now the default for "git push" when push.default configuration is
   not set.
   (merge f6b1fb3 mm/push-simple-doc later to maint).

 * Recent versions of GNU grep are pickier when their input contains
   arbitrary binary data, which some of our tests uses.  Rewrite the
   tests to sidestep the problem.
   (merge 3b1442d jk/grep-binary-workaround-in-test later to maint).

 * A helper function "git submodule" uses since v2.7.0 to list the
   modules that match the pathspec argument given to its subcommands
   (e.g. "submodule add <repo> <path>") has been fixed.
   (merge 2b56bb7 sb/submodule-module-list-fix later to maint).

 * "git config section.var value" to set a value in per-repository
   configuration file failed when it was run outside any repository,
   but didn't say the reason correctly.
   (merge 638fa62 js/config-set-in-non-repository later to maint).

 * The code to read the pack data using the offsets stored in the pack
   idx file has been made more carefully check the validity of the
   data in the idx.
   (merge 7465feb jk/pack-idx-corruption-safety later to maint).

 * Other minor clean-ups and documentation updates
   (merge f459823 ak/extract-argv0-last-dir-sep later to maint).
   (merge 63ca1c0 ak/git-strip-extension-from-dashed-command later to maint).
   (merge 4867f11 ps/plug-xdl-merge-leak later to maint).
   (merge 4938686 dt/initial-ref-xn-commit-doc later to maint).
   (merge 9537f21 ma/update-hooks-sample-typofix later to maint).

----------------------------------------------------------------

Changes since v2.7.0 are as follows:

Alex Henrie (1):
      stripspace: call U+0020 a "space" instead of a "blank"

Alexander Kuleshov (3):
      format-patch: introduce format.outputDirectory configuration
      exec_cmd.c: use find_last_dir_sep() for code simplification
      git.c: simplify stripping extension of a file in handle_builtin()

Andrew Wheeler (1):
      push: fix ref status reporting for --force-with-lease

Changwoo Ryu (1):
      l10n: ko.po: Add Korean translation

Christian Couder (11):
      dir: free untracked cache when removing it
      update-index: use enum for untracked cache options
      update-index: add --test-untracked-cache
      update-index: add untracked cache notifications
      update-index: move 'uc' var declaration
      dir: add {new,add}_untracked_cache()
      dir: add remove_untracked_cache()
      dir: simplify untracked cache "ident" field
      config: add core.untrackedCache
      test-dump-untracked-cache: don't modify the untracked cache
      t7063: add tests for core.untrackedCache

Christoph Egger (1):
      http: implement public key pinning

Dan Aloni (1):
      ident: add user.useConfigOnly boolean for when ident shouldn't be guessed

Dave Ware (1):
      contrib/subtree: fix "subtree split" skipped-merge bug

David A. Greene (1):
      contrib/subtree: Make testing easier

David A. Wheeler (1):
      Expand documentation describing --signoff

David Turner (3):
      do_compare_entry: use already-computed path
      unpack-trees: fix accidentally quadratic behavior
      refs: document transaction semantics

Dennis Kaarsemaker (1):
      reflog-walk: don't segfault on non-commit sha1's in the reflog

Dickson Wong (1):
      mergetool: reorder vim/gvim buffers in three-way diffs

Edmundo Carmona Antoranz (1):
      blame: add support for --[no-]progress option

Elia Pinto (92):
      Makefile: add missing phony target
      contrib/examples/git-commit.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-fetch.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-merge.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-repack.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-revert.sh: use the $( ... ) construct for command substitution
      contrib/thunderbird-patch-inline/appp.sh: use the $( ... ) construct for command substitution
      git-gui/po/glossary/txt-to-pot.sh: use the $( ... ) construct for command substitution
      t/lib-httpd.sh: use the $( ... ) construct for command substitution
      test-sha1.sh: use the $( ... ) construct for command substitution
      unimplemented.sh: use the $( ... ) construct for command substitution
      t/t1100-commit-tree-options.sh: use the $( ... ) construct for command substitution
      t/t1401-symbolic-ref.sh: use the $( ... ) construct for command substitution
      t/t1410-reflog.sh: use the $( ... ) construct for command substitution
      t/t1511-rev-parse-caret.sh: use the $( ... ) construct for command substitution
      t/t1512-rev-parse-disambiguation.sh: use the $( ... ) construct for command substitution
      t/t1700-split-index.sh: use the $( ... ) construct for command substitution
      t/t2025-worktree-add.sh: use the $( ... ) construct for command substitution
      t/t2102-update-index-symlinks.sh: use the $( ... ) construct for command substitution
      t/t3030-merge-recursive.sh: use the $( ... ) construct for command substitution
      t/t3100-ls-tree-restrict.sh: use the $( ... ) construct for command substitution
      t/t3101-ls-tree-dirname.sh: use the $( ... ) construct for command substitution
      t/t3210-pack-refs.sh: use the $( ... ) construct for command substitution
      t/t3403-rebase-skip.sh: use the $( ... ) construct for command substitution
      t/t3511-cherry-pick-x.sh: use the $( ... ) construct for command substitution
      t/t3600-rm.sh: use the $( ... ) construct for command substitution
      t/t3700-add.sh: use the $( ... ) construct for command substitution
      t/t5100-mailinfo.sh: use the $( ... ) construct for command substitution
      t/t5300-pack-object.sh: use the $( ... ) construct for command substitution
      t/t5301-sliding-window.sh: use the $( ... ) construct for command substitution
      t/t5302-pack-index.sh: use the $( ... ) construct for command substitution
      t/t5303-pack-corruption-resilience.sh: use the $( ... ) construct for command substitution
      t/t5304-prune.sh: use the $( ... ) construct for command substitution
      t/t5305-include-tag.sh: use the $( ... ) construct for command substitution
      t/t5500-fetch-pack.sh: use the $( ... ) construct for command substitution
      t/t5505-remote.sh: use the $( ... ) construct for command substitution
      t/t5506-remote-groups.sh: use the $( ... ) construct for command substitution
      t/t5510-fetch.sh: use the $( ... ) construct for command substitution
      t/t5515-fetch-merge-logic.sh: use the $( ... ) construct for command substitution
      t/t5516-fetch-push.sh: use the $( ... ) construct for command substitution
      t/t5517-push-mirror.sh: use the $( ... ) construct for command substitution
      t/t5522-pull-symlink.sh: use the $( ... ) construct for command substitution
      t/t5530-upload-pack-error.sh: use the $( ... ) construct for command substitution
      t/t5532-fetch-proxy.sh: use the $( ... ) construct for command substitution
      t/t5537-fetch-shallow.sh: use the $( ... ) construct for command substitution
      t/t5538-push-shallow.sh: use the $( ... ) construct for command substitution
      t/t5550-http-fetch-dumb.sh: use the $( ... ) construct for command substitution
      t/t5570-git-daemon.sh: use the $( ... ) construct for command substitution
      t/t5601-clone.sh: use the $( ... ) construct for command substitution
      t/t5700-clone-reference.sh: use the $( ... ) construct for command substitution
      t/t5710-info-alternate.sh: use the $( ... ) construct for command substitution
      t/t5900-repo-selection.sh: use the $( ... ) construct for command substitution
      t/t6001-rev-list-graft.sh: use the $( ... ) construct for command substitution
      t/t6002-rev-list-bisect.sh: use the $( ... ) construct for command substitution
      t/t6015-rev-list-show-all-parents.sh: use the $( ... ) construct for command substitution
      t/t6032-merge-large-rename.sh: use the $( ... ) construct for command substitution
      t/t6132-pathspec-exclude.sh: use the $( ... ) construct for command substitution
      t/t7001-mv.sh: use the $( ... ) construct for command substitution
      t/t7003-filter-branch.sh: use the $( ... ) construct for command substitution
      t/t7004-tag.sh: use the $( ... ) construct for command substitution
      t/t7006-pager.sh: use the $( ... ) construct for command substitution
      t/t7103-reset-bare.sh: use the $( ... ) construct for command substitution
      t/t7406-submodule-update.sh: use the $( ... ) construct for command substitution
      t/t7408-submodule-reference.sh: use the $( ... ) construct for command substitution
      t/t7504-commit-msg-hook.sh: use the $( ... ) construct for command substitution
      t/t7505-prepare-commit-msg-hook.sh: use the $( ... ) construct for command substitution
      t/t7602-merge-octopus-many.sh: use the $( ... ) construct for command substitution
      t/t7700-repack.sh: use the $( ... ) construct for command substitution
      t/t8003-blame-corner-cases.sh: use the $( ... ) construct for command substitution
      t/t9001-send-email.sh: use the $( ... ) construct for command substitution
      t9100-git-svn-basic.sh: use the $( ... ) construct for command substitution
      t9101-git-svn-props.sh: use the $( ... ) construct for command substitution
      t9104-git-svn-follow-parent.sh: use the $( ... ) construct for command substitution
      t9105-git-svn-commit-diff.sh: use the $( ... ) construct for command substitution
      t9107-git-svn-migrate.sh: use the $( ... ) construct for command substitution
      t9108-git-svn-glob.sh: use the $( ... ) construct for command substitution
      t9109-git-svn-multi-glob.sh: use the $( ... ) construct for command substitution
      t9110-git-svn-use-svm-props.sh: use the $( ... ) construct for command substitution
      t9114-git-svn-dcommit-merge.sh: use the $( ... ) construct for command substitution
      t9118-git-svn-funky-branch-names.sh: use the $( ... ) construct for command substitution
      t9119-git-svn-info.sh: use the $( ... ) construct for command substitution
      t9129-git-svn-i18n-commitencoding.sh: use the $( ... ) construct for command substitution
      t9130-git-svn-authors-file.sh: use the $( ... ) construct for command substitution
      t9132-git-svn-broken-symlink.sh: use the $( ... ) construct for command substitution
      t9137-git-svn-dcommit-clobber-series.sh: use the $( ... ) construct for command substitution
      t9138-git-svn-authors-prog.sh: use the $( ... ) construct for command substitution
      t9145-git-svn-master-branch.sh: use the $( ... ) construct for command substitution
      t9150-svk-mergetickets.sh: use the $( ... ) construct for command substitution
      t9300-fast-import.sh: use the $( ... ) construct for command substitution
      t9350-fast-export.sh: use the $( ... ) construct for command substitution
      t9501-gitweb-standalone-http-status.sh: use the $( ... ) construct for command substitution
      t9901-git-web--browse.sh: use the $( ... ) construct for command substitution

Eric Wong (8):
      git-send-email: do not double-escape quotes from mutt
      for-each-ref: document `creatordate` and `creator` fields
      git-svn: fix auth parameter handling on SVN 1.9.0+
      pass transport verbosity down to git_connect
      connect & http: support -4 and -6 switches for remote operations
      t5570: add tests for "git {clone,fetch,pull} -v"
      git-svn: hoist out utf8 prep from t9129 to lib-git-svn
      tests: remove no-op full-svn-test target

Felipe Gonçalves Assis (7):
      merge-recursive: option to disable renames
      merge-recursive: more consistent interface
      merge-strategies.txt: fix typo
      merge-recursive: find-renames resets threshold
      t3034: add rename threshold tests
      t3034: test option to disable renames
      t3034: test deprecated interface

GyuYong Jung (1):
      git-cvsserver.perl: fix typo

Jacob Keller (1):
      notes: allow merging from arbitrary references

Jeff King (79):
      pack-revindex: drop hash table
      pack-revindex: store entries directly in packed_git
      create_symref: modernize variable names
      create_symref: use existing ref-lock code
      create_symref: write reflog while holding lock
      run-command: don't warn on SIGPIPE deaths
      avoid shifting signed integers 31 bits
      bswap: add NO_UNALIGNED_LOADS define
      checkout,clone: check return value of create_symref
      lock_ref_sha1_basic: always fill old_oid while holding lock
      lock_ref_sha1_basic: handle REF_NODEREF with invalid refs
      rebase: ignore failures from "gc --auto"
      shortlog: match both "Author:" and "author" on stdin
      shortlog: use strbufs to read from stdin
      shortlog: replace hand-parsing of author with pretty-printer
      shortlog: optimize "--summary" mode
      shortlog: optimize out useless "<none>" normalization
      shortlog: optimize out useless string list
      shortlog: don't warn on empty author
      filter-branch: resolve $commit^{tree} in no-index case
      clean: make is_git_repository a public function
      resolve_gitlink_ref: ignore non-repository paths
      t6300: use test_atom for some un-modern tests
      tag: do not show ambiguous tag names as "tags/foo"
      transport: drop support for git-over-rsync
      give "nbuf" strbuf a more meaningful name
      checkout-index: simplify "-z" option parsing
      checkout-index: handle "--no-prefix" option
      checkout-index: handle "--no-index" option
      checkout-index: disallow "--no-stage" option
      apply, ls-files: simplify "-z" parsing
      fmt_ident: refactor strictness checks
      test-path-utils: use xsnprintf in favor of strcpy
      rerere: replace strcpy with xsnprintf
      checkout: reorder check_filename conditional
      check_filename: tighten dwim-wildcard ambiguity
      get_sha1: don't die() on bogus search strings
      http-push: stop using name_path
      show_object_with_name: simplify by using path_name()
      list-objects: convert name_path to a strbuf
      list-objects: drop name_path entirely
      list-objects: pass full pathname to callbacks
      git-config: better document default behavior for `--include`
      ref-filter: use string_list_split over strbuf_split
      reflog_expire_cfg: NUL-terminate pattern field
      add helpers for detecting size_t overflow
      tree-diff: catch integer overflow in combine_diff_path allocation
      diff: clarify textconv interface
      harden REALLOC_ARRAY and xcalloc against size_t overflow
      add helpers for allocating flex-array structs
      argv-array: add detach function
      convert manual allocations to argv_array
      convert trivial cases to ALLOC_ARRAY
      use xmallocz to avoid size arithmetic
      convert trivial cases to FLEX_ARRAY macros
      use st_add and st_mult for allocation size computation
      prepare_{git,shell}_cmd: use argv_array
      write_untracked_extension: use FLEX_ALLOC helper
      fast-import: simplify allocation in start_packfile
      fetch-pack: simplify add_sought_entry
      test-path-utils: fix normalize_path_copy output buffer size
      sequencer: simplify memory allocation of get_message
      git-compat-util: drop mempcpy compat code
      transport_anonymize_url: use xstrfmt
      diff_populate_gitlink: use a strbuf
      convert ewah/bitmap code to use xmalloc
      ewah: convert to REALLOC_ARRAY, etc
      merge-one-file: use empty blob for add/add base
      merge-tree: drop generate_common strategy
      xdiff: drop XDL_EMIT_COMMON
      t5313: test bounds-checks of corrupted/malicious pack/idx files
      nth_packed_object_offset: bounds-check extended offset
      use_pack: handle signed off_t overflow
      write_or_die: handle EPIPE in async threads
      fetch-pack: ignore SIGPIPE in sideband demuxer
      test_must_fail: report number of unexpected signal
      t5504: handle expected output from SIGPIPE death
      compat/mingw: brown paper bag fix for 50a6c8e
      t9700: fix test for perl older than 5.14

Jiang Xin (1):
      http: honor no_http env variable to bypass proxy

Johannes Schindelin (47):
      commit: allow editing the commit message even in shared repos
      Handle more file writes correctly in shared repos
      Refactor skipping DOS drive prefixes
      compat/basename: make basename() conform to POSIX
      compat/basename.c: provide a dirname() compatibility function
      t0060: verify that basename() and dirname() work as expected
      config.mak.uname: support MSys2
      config.mak.uname: supporting 64-bit MSys2
      fetch: release pack files before garbage-collecting
      am: release pack files before garbage-collecting
      merge: release pack files before garbage-collecting
      receive-pack: release pack files before garbage-collecting
      pull: allow interactive rebase with --rebase=interactive
      remote: handle the config setting branch.*.rebase=interactive
      completion: add missing branch.*.rebase values
      nedmalloc: allow compiling with MSys2's compiler
      compat/mingw: support MSys2-based MinGW build
      compat/winansi: support compiling with MSys2
      t0060: loosen overly strict expectations
      mingw: avoid redefining S_* constants
      mingw: avoid warnings when casting HANDLEs to int
      mingw: squash another warning about a cast
      mingw: uglify (a, 0) definitions to shut up warnings
      mingw: let's use gettext with MSYS2
      mingw: do not trust MSYS2's MinGW gettext.sh
      Git.pm: stop assuming that absolute paths start with a slash
      mingw: prepare the TMPDIR environment variable for shell scripts
      mingw: let lstat() fail with errno == ENOTDIR when appropriate
      merge-file: let conflict markers match end-of-line style of the context
      merge-file: ensure that conflict sections match eol style
      mingw: fix t5601-clone.sh
      mingw: accomodate t0060-path-utils for MSYS2
      mingw: disable mkfifo-based tests
      tests: turn off git-daemon tests if FIFOs are not available
      mingw: skip test in t1508 that fails due to path conversion
      mingw: fix t9700's assumption about directory separators
      mingw: work around pwd issues in the tests
      mingw: mark t9100's test cases with appropriate prereqs
      mingw: avoid illegal filename in t9118
      mingw: handle the missing POSIXPERM prereq in t9124
      mingw: skip a test in t9130 that cannot pass on Windows
      mingw: do not bother to test funny file names
      test-lib: limit the output of the yes utility
      gitignore: ignore generated test-fake-ssh executable
      t5505: 'remote add x y' should work when url.y.insteadOf = x
      git config: report when trying to modify a non-existing repo config
      Mark win32's pthread_exit() as NORETURN

Johannes Sixt (3):
      t/t5100: no need to use 'echo' command substitutions for globbing
      mingw: avoid linking to the C library's isalpha()
      t0001: fix GIT_* environment variable check under --valgrind

John Keeping (3):
      completion: add missing git-rebase options
      t8005: avoid grep on non-ASCII data
      t9200: avoid grep on non-ASCII data

Jon Griffiths (3):
      credential-cache--daemon: refactor check_socket_directory
      credential-cache--daemon: disallow relative socket path
      credential-cache--daemon: change to the socket dir on startup

Jonathan Nieder (1):
      submodule.c: write "Fetching submodule <foo>" to stderr

Junio C Hamano (46):
      First batch for post 2.7 cycle
      strbuf: miniscule style fix
      strbuf: make strbuf_getline_crlf() global
      strbuf: introduce strbuf_getline_{lf,nul}()
      mktree: there are only two possible line terminations
      check-attr: there are only two possible line terminations
      check-ignore: there are only two possible line terminations
      update-index: there are only two possible line terminations
      checkout-index: there are only two possible line terminations
      strbuf: give strbuf_getline() to the "most text friendly" variant
      hash-object: read --stdin-paths with strbuf_getline()
      revision: read --stdin with strbuf_getline()
      rev-parse: read parseopt spec with strbuf_getline()
      ident.c: read /etc/mailname with strbuf_getline()
      remote.c: read $GIT_DIR/remotes/* with strbuf_getline()
      clone/sha1_file: read info/alternates with strbuf_getline()
      transport-helper: read helper response with strbuf_getline()
      cat-file: read batch stream with strbuf_getline()
      column: read lines with strbuf_getline()
      send-pack: read list of refs with strbuf_getline()
      grep: read -f file with strbuf_getline()
      test-sha1-array: read command stream with strbuf_getline()
      test-lib: clarify and tighten SANITY
      Second batch for 2.8 cycle
      Third batch for 2.8 cycle
      git: remove an early return from save_env_before_alias()
      git: protect against unbalanced calls to {save,restore}_env()
      git: simplify environment save/restore logic
      Fourth batch for 2.8.cycle
      Getting closer to 2.7.1
      restore_env(): free the saved environment variable once we are done
      Fifth batch for 2.8 cycle
      Git 2.7.1
      Sixth batch for the 2.8 cycle
      pager: lose a separate argv[]
      pager: factor out a helper to prepare a child process to run the pager
      am -i: fix "v"iew
      Start preparing for 2.7.2
      Seventh batch for the 2.8 cycle
      Git 2.7.2
      Eighth batch for 2.8
      Git 2.8-rc0
      Git 2.8-rc1
      gitignore: document that unignoring a directory unignores everything in it
      Git 2.7.3
      Git 2.8-rc2

Karsten Blees (1):
      mingw: factor out Windows specific environment setup

Karthik Nayak (10):
      ref-filter: bump 'used_atom' and related code to the top
      ref-filter: introduce struct used_atom
      ref-filter: introduce parsing functions for each valid atom
      ref-filter: introduce color_atom_parser()
      ref-filter: introduce parse_align_position()
      ref-filter: introduce align_atom_parser()
      ref-filter: align: introduce long-form syntax
      ref-filter: introduce remote_ref_atom_parser()
      ref-filter: introduce contents_atom_parser()
      ref-filter: introduce objectname_atom_parser()

Kazutoshi Satoda (2):
      git-svn: enable "svn.pathnameencoding" on dcommit
      git-svn: apply "svn.pathnameencoding" before URL encoding

Knut Franke (2):
      http: allow selection of proxy authentication method
      http: use credential API to handle proxy authentication

Lars Schneider (8):
      travis-ci: run previously failed tests first, then slowest to fastest
      travis-ci: explicity use container-based infrastructure
      convert: treat an empty string for clean/smudge filters as "cat"
      t: do not hide Git's exit code in tests using 'nul_to_q'
      rename git_config_from_buf to git_config_from_mem
      config: add 'origin_type' to config_source struct
      config: add '--show-origin' option to print the origin of a config value
      add DEVELOPER makefile knob to check for acknowledged warnings

Lars Vogel (1):
      git-add doc: do not say working directory when you mean working tree

Martin Amdisen (1):
      templates/hooks: fix minor typo in the sample update-hook

Matt McCutchen (1):
      Documentation/git-clean.txt: don't mention deletion of .git/modules/*

Matthew Kraai (1):
      Documentation: remove unnecessary backslashes

Matthieu Moy (7):
      Documentation/git-push: document that 'simple' is the default
      README: use markdown syntax
      README.md: add hyperlinks on filenames
      README.md: move the link to git-scm.com up
      README.md: don't call git stupid in the title
      README.md: move down historical explanation about the name
      push: remove "push.default is unset" warning message

Michael J Gruber (4):
      t9100: fix breakage when SHELL_PATH is not /bin/sh
      tests: rename work-tree tests to *work-tree*
      t/lib-httpd: load mod_unixd
      t5510: do not leave changed cwd

Mike Hommey (1):
      notes: allow treeish expressions as notes ref

Nguyễn Thái Ngọc Duy (25):
      blame: remove obsolete comment
      add and use a convenience macro ce_intent_to_add()
      Revert "setup: set env $GIT_WORK_TREE when work tree is set, like $GIT_DIR"
      git.c: make it clear save_env() is for alias handling only
      setup.c: re-fix d95138e (setup: set env $GIT_WORK_TREE when ..
      git.c: make sure we do not leak GIT_* to alias scripts
      grep: make it clear i-t-a entries are ignored
      dir.c: clean the entire struct in clear_exclude_list()
      Revert "dir.c: don't exclude whole dir prematurely if neg pattern may match"
      worktree.c: fix indentation
      diff-no-index: do not take a redundant prefix argument
      diff: make -O and --output work in subdirectory
      worktree: stop supporting moving worktrees manually
      rev-parse: take prefix into account in --git-common-dir
      dir.c: fix match_pathname()
      dir.c: support tracing exclude
      dir.c: support marking some patterns already matched
      dir.c: don't exclude whole dir prematurely
      worktree: fix "add -B"
      worktree add -B: do the checkout test before update branch
      sha1_file.c: mark strings for translation
      builtin/checkout.c: mark strings for translation
      builtin/clone.c: mark strings for translation
      ref-filter.c: mark strings for translation
      trailer.c: mark strings for translation

Pat Thoyts (1):
      t0008: avoid absolute path

Patrick Steinhardt (18):
      push: add '--delete' flag to synopsis
      push: add '-d' as shorthand for '--delete'
      config: introduce set_or_die wrappers
      branch: report errors in tracking branch setup
      branch: die on config error when unsetting upstream
      branch: die on config error when editing branch description
      submodule: die on config error when linking modules
      submodule--helper: die on config error when cloning module
      remote: die on config error when setting URL
      remote: die on config error when setting/adding branches
      remote: die on config error when manipulating remotes
      clone: die on config error in cmd_clone
      init-db: die on config errors when initializing empty repo
      sequencer: die on config error when saving replay opts
      compat: die when unable to set core.precomposeunicode
      config: rename git_config_set to git_config_set_gently
      config: rename git_config_set_or_die to git_config_set
      xdiff/xmerge: fix memory leak in xdl_merge

Paul Wagland (2):
      completion: complete show-branch "--date-order"
      completion: update completion arguments for stash

Rob Mayoff (1):
      contrib/subtree: unwrap tag refs

Romain Picard (1):
      git-p4.py: add support for filetype change

SZEDER Gábor (2):
      t6050-replace: make failing editor test more robust
      completion: fix mis-indentation in _git_stash()

Sebastian Schuberth (3):
      docs: clarify that passing --depth to git-clone implies --single-branch
      docs: say "commits" in the --depth option wording for git-clone
      docs: clarify that --depth for git-fetch works with newly initialized repos

Shawn O. Pearce (1):
      remote-curl: include curl_errorstr on SSL setup failures

Stefan Beller (10):
      xread: poll on non blocking fds
      strbuf: add strbuf_read_once to read without blocking
      sigchain: add command to pop all common signals
      run-command: add an asynchronous parallel child processor
      fetch_populated_submodules: use new parallel job processing
      submodules: allow parallel fetching, add tests and documentation
      submodule helper list: respect correct path prefix
      submodule: try harder to fetch needed sha1 by direct fetching sha1
      run-command: do not pass child process data into callbacks
      Documentation: reword rebase summary

Stephen P. Smith (4):
      user-manual: remove temporary branch entry from todo list
      glossary: define the term shallow clone
      user-manual: add section documenting shallow clones
      user-manual: add addition gitweb information

Thomas Ackermann (1):
      documentation: fix some typos

Thomas Braun (1):
      completion: complete "diff --word-diff-regex="

Thomas Gummerer (11):
      t7810: correct --no-index test
      builtin/grep: add grep.fallbackToNoIndex config
      ls-remote: document --quiet option
      ls-remote: document --refs option
      ls-remote: fix synopsis
      ls-remote: use parse-options api
      ls-remote: add support for showing symrefs
      remote: use parse_config_key
      remote: simplify remote_is_configured()
      remote: actually check if remote exits
      remote: use remote_is_configured() for add and rename

Tobias Klauser (2):
      trailer: allow to write to files other than stdout
      interpret-trailers: add option for in-place editing

Torsten Bögershausen (9):
      ls-files: add eol diagnostics
      t0027: add tests for get_stream_filter()
      convert.c: remove unused parameter 'path'
      convert.c: remove input_crlf_action()
      convert.c: use text_eol_is_crlf()
      convert.c: refactor crlf_action
      convert.c: simplify text_stat
      convert.c: correct attr_action()
      config.mak.uname: use clang for Mac OS X 10.6

Victor Leschuk (3):
      grep: allow threading even on a single-core machine
      grep: slight refactoring to the code that disables threading
      grep: add --threads=<num> option and grep.threads configuration

Will Palmer (2):
      test for '!' handling in rev-parse's named commits
      object name: introduce '^{/!-<negative pattern>}' notation

brian m. carlson (1):
      http: add option to try authentication without username

Øyvind A. Holm (1):
      gitweb: squelch "uninitialized value" warning

마누엘 (1):
      mingw: try to delete target directory before renaming

^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.8.0-rc1
@ 2016-03-04 22:31  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2016-03-04 22:31 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

A release candidate Git v2.8.0-rc1 is now available for testing
at the usual places.  It is comprised of 453 non-merge commits
since v2.7.0, contributed by 59 people, 19 of which are new faces.

There still is a known regression around "git status" (and "ls-files
-o") relative to v2.7.2, which we may end up resolving by reverting
a topic before v2.8.0 final.  We'll see how it goes.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.8.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.7.0 are as follows.
Welcome to the Git development community!

  마누엘, Andrew Wheeler, Changwoo Ryu, Christoph Egger,
  Dan Aloni, Dave Ware, David A. Wheeler, Dickson Wong, Felipe
  Gonçalves Assis, GyuYong Jung, Jon Griffiths, Kazutoshi Satoda,
  Lars Vogel, Martin Amdisen, Matthew Kraai, Paul Wagland, Rob
  Mayoff, Romain Picard, and Victor Leschuk.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alexander Kuleshov, Alex Henrie, brian m. carlson, Christian
  Couder, David A. Greene, David Turner, Dennis Kaarsemaker,
  Edmundo Carmona Antoranz, Elia Pinto, Eric Wong, Jacob Keller,
  Jeff King, Johannes Schindelin, Johannes Sixt, John Keeping,
  Jonathan Nieder, Junio C Hamano, Karsten Blees, Karthik Nayak,
  Knut Franke, Lars Schneider, Matthieu Moy, Matt McCutchen,
  Michael J Gruber, Mike Hommey, Nguyễn Thái Ngọc Duy,
  Øyvind A. Holm, Patrick Steinhardt, Pat Thoyts, Sebastian
  Schuberth, Shawn O. Pearce, Stefan Beller, Stephen P. Smith,
  SZEDER Gábor, Thomas Ackermann, Thomas Braun, Thomas Gummerer,
  Tobias Klauser, Torsten Bögershausen, and Will Palmer.

----------------------------------------------------------------

Git 2.8 Release Notes (draft)
=============================

Backward compatibility note
---------------------------

The rsync:// transport has been removed.


Updates since v2.7
------------------

UI, Workflows & Features

 * It turns out "git clone" over rsync transport has been broken when
   the source repository has packed references for a long time, and
   nobody noticed nor complained about it.

 * "branch --delete" has "branch -d" but "push --delete" does not.

 * "git blame" learned to produce the progress eye-candy when it takes
   too much time before emitting the first line of the result.

 * "git grep" can now be configured (or told from the command line)
   how many threads to use when searching in the working tree files.

 * Some "git notes" operations, e.g. "git log --notes=<note>", should
   be able to read notes from any tree-ish that is shaped like a notes
   tree, but the notes infrastructure required that the argument must
   be a ref under refs/notes/.  Loosen it to require a valid ref only
   when the operation would update the notes (in which case we must
   have a place to store the updated notes tree, iow, a ref).

 * "git grep" by default does not fall back to its "--no-index"
   behaviour outside a directory under Git's control (otherwise the
   user may by mistake end up running a huge recursive search); with a
   new configuration (set in $HOME/.gitconfig--by definition this
   cannot be set in the config file per project), this safety can be
   disabled.

 * "git pull --rebase" has been extended to allow invoking
   "rebase -i".

 * "git p4" learned to cope with the type of a file getting changed.

 * "git format-patch" learned to notice format.outputDirectory
   configuration variable.  This allows "-o <dir>" option to be
   omitted on the command line if you always use the same directory in
   your workflow.

 * "interpret-trailers" has been taught to optionally update a file in
   place, instead of always writing the result to the standard output.

 * Many commands that read files that are expected to contain text
   that is generated (or can be edited) by the end user to control
   their behaviour (e.g. "git grep -f <filename>") have been updated
   to be more tolerant to lines that are terminated with CRLF (they
   used to treat such a line to contain payload that ends with CR,
   which is usually not what the users expect).

 * "git notes merge" used to limit the source of the merged notes tree
   to somewhere under refs/notes/ hierarchy, which was too limiting
   when inventing a workflow to exchange notes with remote
   repositories using remote-tracking notes trees (located in e.g.
   refs/remote-notes/ or somesuch).

 * "git ls-files" learned a new "--eol" option to help diagnose
   end-of-line problems.

 * "ls-remote" learned an option to show which branch the remote
   repository advertises as its primary by pointing its HEAD at.

 * New http.proxyAuthMethod configuration variable can be used to
   specify what authentication method to use, as a way to work around
   proxies that do not give error response expected by libcurl when
   CURLAUTH_ANY is used.  Also, the codepath for proxy authentication
   has been taught to use credential API to store the authentication
   material in user's keyrings.

 * Update the untracked cache subsystem and change its primary UI from
   "git update-index" to "git config".

 * There were a few "now I am doing this thing" progress messages in
   the TCP connection code that can be triggered by setting a verbose
   option internally in the code, but "git fetch -v" and friends never
   passed the verbose option down to that codepath.

 * Clean/smudge filters defined in a configuration file of lower
   precedence can now be overridden to be a pass-through no-op by
   setting the variable to an empty string.

 * A new "<branch>^{/!-<pattern>}" notation can be used to name a
   commit that is reachable from <branch> that does not match the
   given <pattern>.

 * The "user.useConfigOnly" configuration variable can be used to
   force the user to always set user.email & user.name configuration
   variables, serving as a reminder for those who work on multiple
   projects and do not want to put these in their $HOME/.gitconfig.

 * "git fetch" and friends that make network connections can now be
   told to only use ipv4 (or ipv6).

 * Some authentication methods do not need username or password, but
   libcurl needs some hint that it needs to perform authentication.
   Supplying an empty username and password string is a valid way to
   do so, but you can set the http.[<url>.]emptyAuth configuration
   variable to achieve the same, if you find it cleaner.

 * You can now set http.[<url>.]pinnedpubkey to specify the pinned
   public key when building with recent enough versions of libcURL.

 * The configuration system has been taught to phrase where it found a
   bad configuration variable in a better way in its error messages.
   "git config" learnt a new "--show-origin" option to indicate where
   the values come from.

 * The "credential-cache" daemon process used to run in whatever
   directory it happened to start in, but this made umount(2)ing the
   filesystem that houses the repository harder; now the process
   chdir()s to the directory that house its own socket on startup.

 * When "git submodule update" did not result in fetching the commit
   object in the submodule that is referenced by the superproject, the
   command learned to retry another fetch, specifically asking for
   that commit that may not be connected to the refs it usually
   fetches.

 * "git merge-recursive" learned "--no-renames" option to disable its
   rename detection logic.

 * Across the transition at around Git version 2.0, the user used to
   get a pretty loud warning when running "git push" without setting
   push.default configuration variable.  We no longer warn, given that
   the transition is over long time ago.

 * README has been renamed to README.md and its contents got tweaked
   slightly to make it easier on the eyes.


Performance, Internal Implementation, Development Support etc.

 * Add a framework to spawn a group of processes in parallel, and use
   it to run "git fetch --recurse-submodules" in parallel.

 * A slight update to the Makefile to mark "phoney" targets
   as such correctly.

 * In-core storage of the reverse index for .pack files (which lets
   you go from a pack offset to an object name) has been streamlined.

 * d95138e6 (setup: set env $GIT_WORK_TREE when work tree is set, like
   $GIT_DIR, 2015-06-26) attempted to work around a glitch in alias
   handling by overwriting GIT_WORK_TREE environment variable to
   affect subprocesses when set_git_work_tree() gets called, which
   resulted in a rather unpleasant regression to "clone" and "init".
   Try to address the same issue by always restoring the environment
   and respawning the real underlying command when handling alias.

 * The low-level code that is used to create symbolic references has
   been updated to share more code with the code that deals with
   normal references.

 * strbuf_getline() and friends have been redefined to make it easier
   to identify which callsite of (new) strbuf_getline_lf() should
   allow and silently ignore carriage-return at the end of the line to
   help users on DOSsy systems.

 * "git shortlog" used to accumulate various pieces of information
   regardless of what was asked to be shown in the final output.  It
   has been optimized by noticing what need not to be collected
   (e.g. there is no need to collect the log messages when showing
   only the number of changes).

 * "git checkout $branch" (and other operations that share the same
   underlying machinery) has been optimized.

 * Automated tests in Travis CI environment has been optimized by
   persisting runtime statistics of previous "prove" run, executing
   tests that take longer before other ones; this reduces the total
   wallclock time.

 * Test scripts have been updated to remove assumptions that are not
   portable between Git for POSIX and Git for Windows, or to skip ones
   with expectations that are not satisfiable on Git for Windows.

 * Some calls to strcpy(3) triggers a false warning from static
   analysers that are less intelligent than humans, and reducing the
   number of these false hits helps us notice real issues.  A few
   calls to strcpy(3) in test-path-utils that are already safe has
   been rewritten to avoid false wanings.

 * Some calls to strcpy(3) triggers a false warning from static
   analysers that are less intelligent than humans, and reducing the
   number of these false hits helps us notice real issues.  A few
   calls to strcpy(3) in "git rerere" that are already safe has been
   rewritten to avoid false wanings.

 * The "name_path" API was an attempt to reduce the need to construct
   the full path out of a series of path components while walking a
   tree hierarchy, but over time made less efficient because the path
   needs to be flattened, e.g. to be compared with another path that
   is already flat.  The API has been removed and its users have been
   rewritten to simplify the overall code complexity.

 * Help those who debug http(s) part of the system.
   (merge 0054045 sp/remote-curl-ssl-strerror later to maint).

 * The internal API to interact with "remote.*" configuration
   variables has been streamlined.

 * The ref-filter's format-parsing code has been refactored, in
   preparation for "branch --format" and friends.

 * Traditionally, the tests that try commands that work on the
   contents in the working tree were named with "worktree" in their
   filenames, but with the recent addition of "git worktree"
   subcommand, whose tests are also named similarly, it has become
   harder to tell them apart.  The traditional tests have been renamed
   to use "work-tree" instead in an attempt to differentiate them.
   (merge 5549029 mg/work-tree-tests later to maint).

 * Many codepaths forget to check return value from git_config_set();
   the function is made to die() to make sure we do not proceed when
   setting a configuration variable failed.
   (merge 3d18064 ps/config-error later to maint).

 * Handling of errors while writing into our internal asynchronous
   process has been made more robust, which reduces flakiness in our
   tests.
   (merge 43f3afc jk/epipe-in-async later to maint).

 * There is a new DEVELOPER knob that enables many compiler warning
   options in the Makefile.

 * The way the test scripts configure the Apache web server has been
   updated to work also for Apache 2.4 running on RedHat derived
   distros.

 * Out of maintenance gcc on OSX 10.6 fails to compile the code in
   'master'; work it around by using clang by default on the platform.


Also contains various documentation updates and code clean-ups.


Fixes since v2.7
----------------

Unless otherwise noted, all the fixes since v2.7 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * An earlier change in 2.5.x-era broke users' hooks and aliases by
   exporting GIT_WORK_TREE to point at the root of the working tree,
   interfering when they tried to use a different working tree without
   setting GIT_WORK_TREE environment themselves.

 * The "exclude_list" structure has the usual "alloc, nr" pair of
   fields to be used by ALLOC_GROW(), but clear_exclude_list() forgot
   to reset 'alloc' to 0 when it cleared 'nr' to discard the managed
   array.

 * Paths that have been told the index about with "add -N" are not
   quite yet in the index, but a few commands behaved as if they
   already are in a harmful way.

 * "git send-email" was confused by escaped quotes stored in the alias
   files saved by "mutt", which has been corrected.

 * A few unportable C construct have been spotted by clang compiler
   and have been fixed.

 * The documentation has been updated to hint the connection between
   the '--signoff' option and DCO.

 * "git reflog" incorrectly assumed that all objects that used to be
   at the tip of a ref must be commits, which caused it to segfault.

 * The ignore mechanism saw a few regressions around untracked file
   listing and sparse checkout selection areas in 2.7.0; the change
   that is responsible for the regression has been reverted.

 * Some codepaths used fopen(3) when opening a fixed path in $GIT_DIR
   (e.g. COMMIT_EDITMSG) that is meant to be left after the command is
   done.  This however did not work well if the repository is set to
   be shared with core.sharedRepository and the umask of the previous
   user is tighter.  They have been made to work better by calling
   unlink(2) and retrying after fopen(3) fails with EPERM.

 * Asking gitweb for a nonexistent commit left a warning in the server
   log.

   Somebody may want to follow this up with an additional test, perhaps?
   IIRC, we do test that no Perl warnings are given to the server log,
   so this should have been caught if our test coverage were good.

 * "git rebase", unlike all other callers of "gc --auto", did not
   ignore the exit code from "gc --auto".

 * Many codepaths that run "gc --auto" before exiting kept packfiles
   mapped and left the file descriptors to them open, which was not
   friendly to systems that cannot remove files that are open.  They
   now close the packs before doing so.

 * A recent optimization to filter-branch in v2.7.0 introduced a
   regression when --prune-empty filter is used, which has been
   corrected.

 * The description for SANITY prerequisite the test suite uses has
   been clarified both in the comment and in the implementation.

 * "git tag" started listing a tag "foo" as "tags/foo" when a branch
   named "foo" exists in the same repository; remove this unnecessary
   disambiguation, which is a regression introduced in v2.7.0.

 * The way "git svn" uses auth parameter was broken by Subversion
   1.9.0 and later.

 * The "split" subcommand of "git subtree" (in contrib/) incorrectly
   skipped merges when it shouldn't, which was corrected.

 * A few options of "git diff" did not work well when the command was
   run from a subdirectory.

 * The command line completion learned a handful of additional options
   and command specific syntax.

 * dirname() emulation has been added, as Msys2 lacks it.

 * The underlying machinery used by "ls-files -o" and other commands
   have been taught not to create empty submodule ref cache for a
   directory that is not a submodule.  This removes a ton of wasted
   CPU cycles.

 * "git worktree" had a broken code that attempted to auto-fix
   possible inconsistency that results from end-users moving a
   worktree to different places without telling Git (the original
   repository needs to maintain backpointers to its worktrees, but
   "mv" run by end-users who are not familiar with that fact will
   obviously not adjust them), which actually made things worse
   when triggered.

 * The low-level merge machinery has been taught to use CRLF line
   termination when inserting conflict markers to merged contents that
   are themselves CRLF line-terminated.

 * "git push --force-with-lease" has been taught to report if the push
   needed to force (or fast-forwarded).

 * The emulated "yes" command used in our test scripts has been
   tweaked not to spend too much time generating unnecessary output
   that is not used, to help those who test on Windows where it would
   not stop until it fills the pipe buffer due to lack of SIGPIPE.

 * The documentation for "git clean" has been corrected; it mentioned
   that .git/modules/* are removed by giving two "-f", which has never
   been the case.

 * The vimdiff backend for "git mergetool" has been tweaked to arrange
   and number buffers in the order that would match the expectation of
   majority of people who read left to right, then top down and assign
   buffers 1 2 3 4 "mentally" to local base remote merge windows based
   on that order.

 * "git show 'HEAD:Foo[BAR]Baz'" did not interpret the argument as a
   rev, i.e. the object named by the the pathname with wildcard
   characters in a tree object.
   (merge aac4fac nd/dwim-wildcards-as-pathspecs later to maint).

 * "git rev-parse --git-common-dir" used in the worktree feature
   misbehaved when run from a subdirectory.
   (merge 17f1365 nd/git-common-dir-fix later to maint).

 * Another try to add support to the ignore mechanism that lets you
   say "this is excluded" and then later say "oh, no, this part (that
   is a subset of the previous part) is not excluded".

 * "git worktree add -B <branchname>" did not work.

 * The "v(iew)" subcommand of the interactive "git am -i" command was
   broken in 2.6.0 timeframe when the command was rewritten in C.
   (merge 708b8cc jc/am-i-v-fix later to maint).

 * "git merge-tree" used to mishandle "both sides added" conflict with
   its own "create a fake ancestor file that has the common parts of
   what both sides have added and do a 3-way merge" logic; this has
   been updated to use the usual "3-way merge with an empty blob as
   the fake common ancestor file" approach used in the rest of the
   system.
   (merge 907681e jk/no-diff-emit-common later to maint).

 * The memory ownership rule of fill_textconv() API, which was a bit
   tricky, has been documented a bit better.
   (merge a64e6a4 jk/more-comments-on-textconv later to maint).

 * Update various codepaths to avoid manually-counted malloc().
   (merge 08c95df jk/tighten-alloc later to maint).

 * The documentation did not clearly state that the 'simple' mode is
   now the default for "git push" when push.default configuration is
   not set.
   (merge f6b1fb3 mm/push-simple-doc later to maint).

 * Recent versions of GNU grep are pickier when their input contains
   arbitrary binary data, which some of our tests uses.  Rewrite the
   tests to sidestep the problem.
   (merge 3b1442d jk/grep-binary-workaround-in-test later to maint).

 * A helper function "git submodule" uses since v2.7.0 to list the
   modules that match the pathspec argument given to its subcommands
   (e.g. "submodule add <repo> <path>") has been fixed.
   (merge 2b56bb7 sb/submodule-module-list-fix later to maint).

 * "git config section.var value" to set a value in per-repository
   configuration file failed when it was run outside any repository,
   but didn't say the reason correctly.
   (merge 638fa62 js/config-set-in-non-repository later to maint).

 * The code to read the pack data using the offsets stored in the pack
   idx file has been made more carefully check the validity of the
   data in the idx.
   (merge 7465feb jk/pack-idx-corruption-safety later to maint).

 * Other minor clean-ups and documentation updates
   (merge f459823 ak/extract-argv0-last-dir-sep later to maint).
   (merge 63ca1c0 ak/git-strip-extension-from-dashed-command later to maint).
   (merge 4867f11 ps/plug-xdl-merge-leak later to maint).
   (merge 4938686 dt/initial-ref-xn-commit-doc later to maint).
   (merge 9537f21 ma/update-hooks-sample-typofix later to maint).

----------------------------------------------------------------

Changes since v2.7.0 are as follows:

Alex Henrie (1):
      stripspace: call U+0020 a "space" instead of a "blank"

Alexander Kuleshov (3):
      format-patch: introduce format.outputDirectory configuration
      exec_cmd.c: use find_last_dir_sep() for code simplification
      git.c: simplify stripping extension of a file in handle_builtin()

Andrew Wheeler (1):
      push: fix ref status reporting for --force-with-lease

Changwoo Ryu (1):
      l10n: ko.po: Add Korean translation

Christian Couder (11):
      dir: free untracked cache when removing it
      update-index: use enum for untracked cache options
      update-index: add --test-untracked-cache
      update-index: add untracked cache notifications
      update-index: move 'uc' var declaration
      dir: add {new,add}_untracked_cache()
      dir: add remove_untracked_cache()
      dir: simplify untracked cache "ident" field
      config: add core.untrackedCache
      test-dump-untracked-cache: don't modify the untracked cache
      t7063: add tests for core.untrackedCache

Christoph Egger (1):
      http: implement public key pinning

Dan Aloni (1):
      ident: add user.useConfigOnly boolean for when ident shouldn't be guessed

Dave Ware (1):
      contrib/subtree: fix "subtree split" skipped-merge bug

David A. Greene (1):
      contrib/subtree: Make testing easier

David A. Wheeler (1):
      Expand documentation describing --signoff

David Turner (3):
      do_compare_entry: use already-computed path
      unpack-trees: fix accidentally quadratic behavior
      refs: document transaction semantics

Dennis Kaarsemaker (1):
      reflog-walk: don't segfault on non-commit sha1's in the reflog

Dickson Wong (1):
      mergetool: reorder vim/gvim buffers in three-way diffs

Edmundo Carmona Antoranz (1):
      blame: add support for --[no-]progress option

Elia Pinto (92):
      Makefile: add missing phony target
      contrib/examples/git-commit.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-fetch.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-merge.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-repack.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-revert.sh: use the $( ... ) construct for command substitution
      contrib/thunderbird-patch-inline/appp.sh: use the $( ... ) construct for command substitution
      git-gui/po/glossary/txt-to-pot.sh: use the $( ... ) construct for command substitution
      t/lib-httpd.sh: use the $( ... ) construct for command substitution
      test-sha1.sh: use the $( ... ) construct for command substitution
      unimplemented.sh: use the $( ... ) construct for command substitution
      t/t1100-commit-tree-options.sh: use the $( ... ) construct for command substitution
      t/t1401-symbolic-ref.sh: use the $( ... ) construct for command substitution
      t/t1410-reflog.sh: use the $( ... ) construct for command substitution
      t/t1511-rev-parse-caret.sh: use the $( ... ) construct for command substitution
      t/t1512-rev-parse-disambiguation.sh: use the $( ... ) construct for command substitution
      t/t1700-split-index.sh: use the $( ... ) construct for command substitution
      t/t2025-worktree-add.sh: use the $( ... ) construct for command substitution
      t/t2102-update-index-symlinks.sh: use the $( ... ) construct for command substitution
      t/t3030-merge-recursive.sh: use the $( ... ) construct for command substitution
      t/t3100-ls-tree-restrict.sh: use the $( ... ) construct for command substitution
      t/t3101-ls-tree-dirname.sh: use the $( ... ) construct for command substitution
      t/t3210-pack-refs.sh: use the $( ... ) construct for command substitution
      t/t3403-rebase-skip.sh: use the $( ... ) construct for command substitution
      t/t3511-cherry-pick-x.sh: use the $( ... ) construct for command substitution
      t/t3600-rm.sh: use the $( ... ) construct for command substitution
      t/t3700-add.sh: use the $( ... ) construct for command substitution
      t/t5100-mailinfo.sh: use the $( ... ) construct for command substitution
      t/t5300-pack-object.sh: use the $( ... ) construct for command substitution
      t/t5301-sliding-window.sh: use the $( ... ) construct for command substitution
      t/t5302-pack-index.sh: use the $( ... ) construct for command substitution
      t/t5303-pack-corruption-resilience.sh: use the $( ... ) construct for command substitution
      t/t5304-prune.sh: use the $( ... ) construct for command substitution
      t/t5305-include-tag.sh: use the $( ... ) construct for command substitution
      t/t5500-fetch-pack.sh: use the $( ... ) construct for command substitution
      t/t5505-remote.sh: use the $( ... ) construct for command substitution
      t/t5506-remote-groups.sh: use the $( ... ) construct for command substitution
      t/t5510-fetch.sh: use the $( ... ) construct for command substitution
      t/t5515-fetch-merge-logic.sh: use the $( ... ) construct for command substitution
      t/t5516-fetch-push.sh: use the $( ... ) construct for command substitution
      t/t5517-push-mirror.sh: use the $( ... ) construct for command substitution
      t/t5522-pull-symlink.sh: use the $( ... ) construct for command substitution
      t/t5530-upload-pack-error.sh: use the $( ... ) construct for command substitution
      t/t5532-fetch-proxy.sh: use the $( ... ) construct for command substitution
      t/t5537-fetch-shallow.sh: use the $( ... ) construct for command substitution
      t/t5538-push-shallow.sh: use the $( ... ) construct for command substitution
      t/t5550-http-fetch-dumb.sh: use the $( ... ) construct for command substitution
      t/t5570-git-daemon.sh: use the $( ... ) construct for command substitution
      t/t5601-clone.sh: use the $( ... ) construct for command substitution
      t/t5700-clone-reference.sh: use the $( ... ) construct for command substitution
      t/t5710-info-alternate.sh: use the $( ... ) construct for command substitution
      t/t5900-repo-selection.sh: use the $( ... ) construct for command substitution
      t/t6001-rev-list-graft.sh: use the $( ... ) construct for command substitution
      t/t6002-rev-list-bisect.sh: use the $( ... ) construct for command substitution
      t/t6015-rev-list-show-all-parents.sh: use the $( ... ) construct for command substitution
      t/t6032-merge-large-rename.sh: use the $( ... ) construct for command substitution
      t/t6132-pathspec-exclude.sh: use the $( ... ) construct for command substitution
      t/t7001-mv.sh: use the $( ... ) construct for command substitution
      t/t7003-filter-branch.sh: use the $( ... ) construct for command substitution
      t/t7004-tag.sh: use the $( ... ) construct for command substitution
      t/t7006-pager.sh: use the $( ... ) construct for command substitution
      t/t7103-reset-bare.sh: use the $( ... ) construct for command substitution
      t/t7406-submodule-update.sh: use the $( ... ) construct for command substitution
      t/t7408-submodule-reference.sh: use the $( ... ) construct for command substitution
      t/t7504-commit-msg-hook.sh: use the $( ... ) construct for command substitution
      t/t7505-prepare-commit-msg-hook.sh: use the $( ... ) construct for command substitution
      t/t7602-merge-octopus-many.sh: use the $( ... ) construct for command substitution
      t/t7700-repack.sh: use the $( ... ) construct for command substitution
      t/t8003-blame-corner-cases.sh: use the $( ... ) construct for command substitution
      t/t9001-send-email.sh: use the $( ... ) construct for command substitution
      t9100-git-svn-basic.sh: use the $( ... ) construct for command substitution
      t9101-git-svn-props.sh: use the $( ... ) construct for command substitution
      t9104-git-svn-follow-parent.sh: use the $( ... ) construct for command substitution
      t9105-git-svn-commit-diff.sh: use the $( ... ) construct for command substitution
      t9107-git-svn-migrate.sh: use the $( ... ) construct for command substitution
      t9108-git-svn-glob.sh: use the $( ... ) construct for command substitution
      t9109-git-svn-multi-glob.sh: use the $( ... ) construct for command substitution
      t9110-git-svn-use-svm-props.sh: use the $( ... ) construct for command substitution
      t9114-git-svn-dcommit-merge.sh: use the $( ... ) construct for command substitution
      t9118-git-svn-funky-branch-names.sh: use the $( ... ) construct for command substitution
      t9119-git-svn-info.sh: use the $( ... ) construct for command substitution
      t9129-git-svn-i18n-commitencoding.sh: use the $( ... ) construct for command substitution
      t9130-git-svn-authors-file.sh: use the $( ... ) construct for command substitution
      t9132-git-svn-broken-symlink.sh: use the $( ... ) construct for command substitution
      t9137-git-svn-dcommit-clobber-series.sh: use the $( ... ) construct for command substitution
      t9138-git-svn-authors-prog.sh: use the $( ... ) construct for command substitution
      t9145-git-svn-master-branch.sh: use the $( ... ) construct for command substitution
      t9150-svk-mergetickets.sh: use the $( ... ) construct for command substitution
      t9300-fast-import.sh: use the $( ... ) construct for command substitution
      t9350-fast-export.sh: use the $( ... ) construct for command substitution
      t9501-gitweb-standalone-http-status.sh: use the $( ... ) construct for command substitution
      t9901-git-web--browse.sh: use the $( ... ) construct for command substitution

Eric Wong (8):
      git-send-email: do not double-escape quotes from mutt
      for-each-ref: document `creatordate` and `creator` fields
      git-svn: fix auth parameter handling on SVN 1.9.0+
      pass transport verbosity down to git_connect
      connect & http: support -4 and -6 switches for remote operations
      t5570: add tests for "git {clone,fetch,pull} -v"
      git-svn: hoist out utf8 prep from t9129 to lib-git-svn
      tests: remove no-op full-svn-test target

Felipe Gonçalves Assis (7):
      merge-recursive: option to disable renames
      merge-recursive: more consistent interface
      merge-strategies.txt: fix typo
      merge-recursive: find-renames resets threshold
      t3034: add rename threshold tests
      t3034: test option to disable renames
      t3034: test deprecated interface

GyuYong Jung (1):
      git-cvsserver.perl: fix typo

Jacob Keller (1):
      notes: allow merging from arbitrary references

Jeff King (79):
      pack-revindex: drop hash table
      pack-revindex: store entries directly in packed_git
      create_symref: modernize variable names
      create_symref: use existing ref-lock code
      create_symref: write reflog while holding lock
      run-command: don't warn on SIGPIPE deaths
      avoid shifting signed integers 31 bits
      bswap: add NO_UNALIGNED_LOADS define
      checkout,clone: check return value of create_symref
      lock_ref_sha1_basic: always fill old_oid while holding lock
      lock_ref_sha1_basic: handle REF_NODEREF with invalid refs
      rebase: ignore failures from "gc --auto"
      shortlog: match both "Author:" and "author" on stdin
      shortlog: use strbufs to read from stdin
      shortlog: replace hand-parsing of author with pretty-printer
      shortlog: optimize "--summary" mode
      shortlog: optimize out useless "<none>" normalization
      shortlog: optimize out useless string list
      shortlog: don't warn on empty author
      filter-branch: resolve $commit^{tree} in no-index case
      clean: make is_git_repository a public function
      resolve_gitlink_ref: ignore non-repository paths
      t6300: use test_atom for some un-modern tests
      tag: do not show ambiguous tag names as "tags/foo"
      transport: drop support for git-over-rsync
      give "nbuf" strbuf a more meaningful name
      checkout-index: simplify "-z" option parsing
      checkout-index: handle "--no-prefix" option
      checkout-index: handle "--no-index" option
      checkout-index: disallow "--no-stage" option
      apply, ls-files: simplify "-z" parsing
      fmt_ident: refactor strictness checks
      test-path-utils: use xsnprintf in favor of strcpy
      rerere: replace strcpy with xsnprintf
      checkout: reorder check_filename conditional
      check_filename: tighten dwim-wildcard ambiguity
      get_sha1: don't die() on bogus search strings
      http-push: stop using name_path
      show_object_with_name: simplify by using path_name()
      list-objects: convert name_path to a strbuf
      list-objects: drop name_path entirely
      list-objects: pass full pathname to callbacks
      git-config: better document default behavior for `--include`
      ref-filter: use string_list_split over strbuf_split
      reflog_expire_cfg: NUL-terminate pattern field
      add helpers for detecting size_t overflow
      tree-diff: catch integer overflow in combine_diff_path allocation
      diff: clarify textconv interface
      harden REALLOC_ARRAY and xcalloc against size_t overflow
      add helpers for allocating flex-array structs
      argv-array: add detach function
      convert manual allocations to argv_array
      convert trivial cases to ALLOC_ARRAY
      use xmallocz to avoid size arithmetic
      convert trivial cases to FLEX_ARRAY macros
      use st_add and st_mult for allocation size computation
      prepare_{git,shell}_cmd: use argv_array
      write_untracked_extension: use FLEX_ALLOC helper
      fast-import: simplify allocation in start_packfile
      fetch-pack: simplify add_sought_entry
      test-path-utils: fix normalize_path_copy output buffer size
      sequencer: simplify memory allocation of get_message
      git-compat-util: drop mempcpy compat code
      transport_anonymize_url: use xstrfmt
      diff_populate_gitlink: use a strbuf
      convert ewah/bitmap code to use xmalloc
      ewah: convert to REALLOC_ARRAY, etc
      merge-one-file: use empty blob for add/add base
      merge-tree: drop generate_common strategy
      xdiff: drop XDL_EMIT_COMMON
      t5313: test bounds-checks of corrupted/malicious pack/idx files
      nth_packed_object_offset: bounds-check extended offset
      use_pack: handle signed off_t overflow
      write_or_die: handle EPIPE in async threads
      fetch-pack: ignore SIGPIPE in sideband demuxer
      test_must_fail: report number of unexpected signal
      t5504: handle expected output from SIGPIPE death
      compat/mingw: brown paper bag fix for 50a6c8e
      t9700: fix test for perl older than 5.14

Johannes Schindelin (47):
      commit: allow editing the commit message even in shared repos
      Handle more file writes correctly in shared repos
      Refactor skipping DOS drive prefixes
      compat/basename: make basename() conform to POSIX
      compat/basename.c: provide a dirname() compatibility function
      t0060: verify that basename() and dirname() work as expected
      config.mak.uname: support MSys2
      config.mak.uname: supporting 64-bit MSys2
      fetch: release pack files before garbage-collecting
      am: release pack files before garbage-collecting
      merge: release pack files before garbage-collecting
      receive-pack: release pack files before garbage-collecting
      pull: allow interactive rebase with --rebase=interactive
      remote: handle the config setting branch.*.rebase=interactive
      completion: add missing branch.*.rebase values
      nedmalloc: allow compiling with MSys2's compiler
      compat/mingw: support MSys2-based MinGW build
      compat/winansi: support compiling with MSys2
      t0060: loosen overly strict expectations
      mingw: avoid redefining S_* constants
      mingw: avoid warnings when casting HANDLEs to int
      mingw: squash another warning about a cast
      mingw: uglify (a, 0) definitions to shut up warnings
      mingw: let's use gettext with MSYS2
      mingw: do not trust MSYS2's MinGW gettext.sh
      Git.pm: stop assuming that absolute paths start with a slash
      mingw: prepare the TMPDIR environment variable for shell scripts
      mingw: let lstat() fail with errno == ENOTDIR when appropriate
      merge-file: let conflict markers match end-of-line style of the context
      merge-file: ensure that conflict sections match eol style
      mingw: fix t5601-clone.sh
      mingw: accomodate t0060-path-utils for MSYS2
      mingw: disable mkfifo-based tests
      tests: turn off git-daemon tests if FIFOs are not available
      mingw: skip test in t1508 that fails due to path conversion
      mingw: fix t9700's assumption about directory separators
      mingw: work around pwd issues in the tests
      mingw: mark t9100's test cases with appropriate prereqs
      mingw: avoid illegal filename in t9118
      mingw: handle the missing POSIXPERM prereq in t9124
      mingw: skip a test in t9130 that cannot pass on Windows
      mingw: do not bother to test funny file names
      test-lib: limit the output of the yes utility
      gitignore: ignore generated test-fake-ssh executable
      t5505: 'remote add x y' should work when url.y.insteadOf = x
      git config: report when trying to modify a non-existing repo config
      Mark win32's pthread_exit() as NORETURN

Johannes Sixt (3):
      t/t5100: no need to use 'echo' command substitutions for globbing
      mingw: avoid linking to the C library's isalpha()
      t0001: fix GIT_* environment variable check under --valgrind

John Keeping (3):
      completion: add missing git-rebase options
      t8005: avoid grep on non-ASCII data
      t9200: avoid grep on non-ASCII data

Jon Griffiths (3):
      credential-cache--daemon: refactor check_socket_directory
      credential-cache--daemon: disallow relative socket path
      credential-cache--daemon: change to the socket dir on startup

Jonathan Nieder (1):
      submodule.c: write "Fetching submodule <foo>" to stderr

Junio C Hamano (43):
      First batch for post 2.7 cycle
      strbuf: miniscule style fix
      strbuf: make strbuf_getline_crlf() global
      strbuf: introduce strbuf_getline_{lf,nul}()
      mktree: there are only two possible line terminations
      check-attr: there are only two possible line terminations
      check-ignore: there are only two possible line terminations
      update-index: there are only two possible line terminations
      checkout-index: there are only two possible line terminations
      strbuf: give strbuf_getline() to the "most text friendly" variant
      hash-object: read --stdin-paths with strbuf_getline()
      revision: read --stdin with strbuf_getline()
      rev-parse: read parseopt spec with strbuf_getline()
      ident.c: read /etc/mailname with strbuf_getline()
      remote.c: read $GIT_DIR/remotes/* with strbuf_getline()
      clone/sha1_file: read info/alternates with strbuf_getline()
      transport-helper: read helper response with strbuf_getline()
      cat-file: read batch stream with strbuf_getline()
      column: read lines with strbuf_getline()
      send-pack: read list of refs with strbuf_getline()
      grep: read -f file with strbuf_getline()
      test-sha1-array: read command stream with strbuf_getline()
      test-lib: clarify and tighten SANITY
      Second batch for 2.8 cycle
      Third batch for 2.8 cycle
      git: remove an early return from save_env_before_alias()
      git: protect against unbalanced calls to {save,restore}_env()
      git: simplify environment save/restore logic
      Fourth batch for 2.8.cycle
      Getting closer to 2.7.1
      restore_env(): free the saved environment variable once we are done
      Fifth batch for 2.8 cycle
      Git 2.7.1
      Sixth batch for the 2.8 cycle
      pager: lose a separate argv[]
      pager: factor out a helper to prepare a child process to run the pager
      am -i: fix "v"iew
      Start preparing for 2.7.2
      Seventh batch for the 2.8 cycle
      Git 2.7.2
      Eighth batch for 2.8
      Git 2.8-rc0
      Git 2.8-rc1

Karsten Blees (1):
      mingw: factor out Windows specific environment setup

Karthik Nayak (10):
      ref-filter: bump 'used_atom' and related code to the top
      ref-filter: introduce struct used_atom
      ref-filter: introduce parsing functions for each valid atom
      ref-filter: introduce color_atom_parser()
      ref-filter: introduce parse_align_position()
      ref-filter: introduce align_atom_parser()
      ref-filter: align: introduce long-form syntax
      ref-filter: introduce remote_ref_atom_parser()
      ref-filter: introduce contents_atom_parser()
      ref-filter: introduce objectname_atom_parser()

Kazutoshi Satoda (2):
      git-svn: enable "svn.pathnameencoding" on dcommit
      git-svn: apply "svn.pathnameencoding" before URL encoding

Knut Franke (2):
      http: allow selection of proxy authentication method
      http: use credential API to handle proxy authentication

Lars Schneider (8):
      travis-ci: run previously failed tests first, then slowest to fastest
      travis-ci: explicity use container-based infrastructure
      convert: treat an empty string for clean/smudge filters as "cat"
      t: do not hide Git's exit code in tests using 'nul_to_q'
      rename git_config_from_buf to git_config_from_mem
      config: add 'origin_type' to config_source struct
      config: add '--show-origin' option to print the origin of a config value
      add DEVELOPER makefile knob to check for acknowledged warnings

Lars Vogel (1):
      git-add doc: do not say working directory when you mean working tree

Martin Amdisen (1):
      templates/hooks: fix minor typo in the sample update-hook

Matt McCutchen (1):
      Documentation/git-clean.txt: don't mention deletion of .git/modules/*

Matthew Kraai (1):
      Documentation: remove unnecessary backslashes

Matthieu Moy (7):
      Documentation/git-push: document that 'simple' is the default
      README: use markdown syntax
      README.md: add hyperlinks on filenames
      README.md: move the link to git-scm.com up
      README.md: don't call git stupid in the title
      README.md: move down historical explanation about the name
      push: remove "push.default is unset" warning message

Michael J Gruber (3):
      t9100: fix breakage when SHELL_PATH is not /bin/sh
      tests: rename work-tree tests to *work-tree*
      t/lib-httpd: load mod_unixd

Mike Hommey (1):
      notes: allow treeish expressions as notes ref

Nguyễn Thái Ngọc Duy (25):
      blame: remove obsolete comment
      add and use a convenience macro ce_intent_to_add()
      Revert "setup: set env $GIT_WORK_TREE when work tree is set, like $GIT_DIR"
      git.c: make it clear save_env() is for alias handling only
      setup.c: re-fix d95138e (setup: set env $GIT_WORK_TREE when ..
      git.c: make sure we do not leak GIT_* to alias scripts
      grep: make it clear i-t-a entries are ignored
      dir.c: clean the entire struct in clear_exclude_list()
      Revert "dir.c: don't exclude whole dir prematurely if neg pattern may match"
      worktree.c: fix indentation
      diff-no-index: do not take a redundant prefix argument
      diff: make -O and --output work in subdirectory
      worktree: stop supporting moving worktrees manually
      rev-parse: take prefix into account in --git-common-dir
      dir.c: fix match_pathname()
      dir.c: support tracing exclude
      dir.c: support marking some patterns already matched
      dir.c: don't exclude whole dir prematurely
      worktree: fix "add -B"
      worktree add -B: do the checkout test before update branch
      sha1_file.c: mark strings for translation
      builtin/checkout.c: mark strings for translation
      builtin/clone.c: mark strings for translation
      ref-filter.c: mark strings for translation
      trailer.c: mark strings for translation

Pat Thoyts (1):
      t0008: avoid absolute path

Patrick Steinhardt (18):
      push: add '--delete' flag to synopsis
      push: add '-d' as shorthand for '--delete'
      config: introduce set_or_die wrappers
      branch: report errors in tracking branch setup
      branch: die on config error when unsetting upstream
      branch: die on config error when editing branch description
      submodule: die on config error when linking modules
      submodule--helper: die on config error when cloning module
      remote: die on config error when setting URL
      remote: die on config error when setting/adding branches
      remote: die on config error when manipulating remotes
      clone: die on config error in cmd_clone
      init-db: die on config errors when initializing empty repo
      sequencer: die on config error when saving replay opts
      compat: die when unable to set core.precomposeunicode
      config: rename git_config_set to git_config_set_gently
      config: rename git_config_set_or_die to git_config_set
      xdiff/xmerge: fix memory leak in xdl_merge

Paul Wagland (2):
      completion: complete show-branch "--date-order"
      completion: update completion arguments for stash

Rob Mayoff (1):
      contrib/subtree: unwrap tag refs

Romain Picard (1):
      git-p4.py: add support for filetype change

SZEDER Gábor (2):
      t6050-replace: make failing editor test more robust
      completion: fix mis-indentation in _git_stash()

Sebastian Schuberth (3):
      docs: clarify that passing --depth to git-clone implies --single-branch
      docs: say "commits" in the --depth option wording for git-clone
      docs: clarify that --depth for git-fetch works with newly initialized repos

Shawn O. Pearce (1):
      remote-curl: include curl_errorstr on SSL setup failures

Stefan Beller (9):
      xread: poll on non blocking fds
      strbuf: add strbuf_read_once to read without blocking
      sigchain: add command to pop all common signals
      run-command: add an asynchronous parallel child processor
      fetch_populated_submodules: use new parallel job processing
      submodules: allow parallel fetching, add tests and documentation
      submodule helper list: respect correct path prefix
      submodule: try harder to fetch needed sha1 by direct fetching sha1
      run-command: do not pass child process data into callbacks

Stephen P. Smith (4):
      user-manual: remove temporary branch entry from todo list
      glossary: define the term shallow clone
      user-manual: add section documenting shallow clones
      user-manual: add addition gitweb information

Thomas Ackermann (1):
      documentation: fix some typos

Thomas Braun (1):
      completion: complete "diff --word-diff-regex="

Thomas Gummerer (11):
      t7810: correct --no-index test
      builtin/grep: add grep.fallbackToNoIndex config
      ls-remote: document --quiet option
      ls-remote: document --refs option
      ls-remote: fix synopsis
      ls-remote: use parse-options api
      ls-remote: add support for showing symrefs
      remote: use parse_config_key
      remote: simplify remote_is_configured()
      remote: actually check if remote exits
      remote: use remote_is_configured() for add and rename

Tobias Klauser (2):
      trailer: allow to write to files other than stdout
      interpret-trailers: add option for in-place editing

Torsten Bögershausen (9):
      ls-files: add eol diagnostics
      t0027: add tests for get_stream_filter()
      convert.c: remove unused parameter 'path'
      convert.c: remove input_crlf_action()
      convert.c: use text_eol_is_crlf()
      convert.c: refactor crlf_action
      convert.c: simplify text_stat
      convert.c: correct attr_action()
      config.mak.uname: use clang for Mac OS X 10.6

Victor Leschuk (3):
      grep: allow threading even on a single-core machine
      grep: slight refactoring to the code that disables threading
      grep: add --threads=<num> option and grep.threads configuration

Will Palmer (2):
      test for '!' handling in rev-parse's named commits
      object name: introduce '^{/!-<negative pattern>}' notation

brian m. carlson (1):
      http: add option to try authentication without username

Øyvind A. Holm (1):
      gitweb: squelch "uninitialized value" warning

마누엘 (1):
      mingw: try to delete target directory before renaming

^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.8.0-rc0
@ 2016-02-26 23:41  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2016-02-26 23:41 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

An early preview release Git v2.8.0-rc0 is now available for
testing at the usual places.  It is comprised of 436 non-merge
commits since v2.7.0, contributed by 58 people, 19 of which are
new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.8.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.7.0 are as follows.
Welcome to the Git development community!

  마누엘, Andrew Wheeler, Changwoo Ryu, Christoph Egger,
  Dan Aloni, Dave Ware, David A. Wheeler, Dickson Wong, Felipe
  Gonçalves Assis, GyuYong Jung, Jon Griffiths, Kazutoshi Satoda,
  Lars Vogel, Martin Amdisen, Matthew Kraai, Paul Wagland, Rob
  Mayoff, Romain Picard, and Victor Leschuk.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alexander Kuleshov, Alex Henrie, brian m. carlson, Christian
  Couder, David A. Greene, David Turner, Dennis Kaarsemaker,
  Edmundo Carmona Antoranz, Elia Pinto, Eric Wong, Jacob Keller,
  Jeff King, Johannes Schindelin, Johannes Sixt, John Keeping,
  Jonathan Nieder, Junio C Hamano, Karsten Blees, Karthik Nayak,
  Knut Franke, Lars Schneider, Matthieu Moy, Matt McCutchen,
  Michael J Gruber, Mike Hommey, Nguyễn Thái Ngọc Duy,
  Øyvind A. Holm, Patrick Steinhardt, Pat Thoyts, Sebastian
  Schuberth, Shawn O. Pearce, Stefan Beller, Stephen P. Smith,
  SZEDER Gábor, Thomas Braun, Thomas Gummerer, Tobias Klauser,
  Torsten Bögershausen, and Will Palmer.

----------------------------------------------------------------

Git 2.8 Release Notes (draft)
=============================

Backward compatibility note
---------------------------

The rsync:// transport has been removed.


Updates since v2.7
------------------

UI, Workflows & Features

 * It turns out "git clone" over rsync transport has been broken when
   the source repository has packed references for a long time, and
   nobody noticed nor complained about it.

 * "branch --delete" has "branch -d" but "push --delete" does not.

 * "git blame" learned to produce the progress eye-candy when it takes
   too much time before emitting the first line of the result.

 * "git grep" can now be configured (or told from the command line)
   how many threads to use when searching in the working tree files.

 * Some "git notes" operations, e.g. "git log --notes=<note>", should
   be able to read notes from any tree-ish that is shaped like a notes
   tree, but the notes infrastructure required that the argument must
   be a ref under refs/notes/.  Loosen it to require a valid ref only
   when the operation would update the notes (in which case we must
   have a place to store the updated notes tree, iow, a ref).

 * "git grep" by default does not fall back to its "--no-index"
   behaviour outside a directory under Git's control (otherwise the
   user may by mistake end up running a huge recursive search); with a
   new configuration (set in $HOME/.gitconfig--by definition this
   cannot be set in the config file per project), this safety can be
   disabled.

 * "git pull --rebase" has been extended to allow invoking
   "rebase -i".

 * "git p4" learned to cope with the type of a file getting changed.

 * "git format-patch" learned to notice format.outputDirectory
   configuration variable.  This allows "-o <dir>" option to be
   omitted on the command line if you always use the same directory in
   your workflow.

 * "interpret-trailers" has been taught to optionally update a file in
   place, instead of always writing the result to the standard output.

 * Many commands that read files that are expected to contain text
   that is generated (or can be edited) by the end user to control
   their behaviour (e.g. "git grep -f <filename>") have been updated
   to be more tolerant to lines that are terminated with CRLF (they
   used to treat such a line to contain payload that ends with CR,
   which is usually not what the users expect).

 * "git notes merge" used to limit the source of the merged notes tree
   to somewhere under refs/notes/ hierarchy, which was too limiting
   when inventing a workflow to exchange notes with remote
   repositories using remote-tracking notes trees (located in e.g.
   refs/remote-notes/ or somesuch).

 * "git ls-files" learned a new "--eol" option to help diagnose
   end-of-line problems.

 * "ls-remote" learned an option to show which branch the remote
   repository advertises as its primary by pointing its HEAD at.

 * New http.proxyAuthMethod configuration variable can be used to
   specify what authentication method to use, as a way to work around
   proxies that do not give error response expected by libcurl when
   CURLAUTH_ANY is used.  Also, the codepath for proxy authentication
   has been taught to use credential API to store the authentication
   material in user's keyrings.

 * Update the untracked cache subsystem and change its primary UI from
   "git update-index" to "git config".

 * There were a few "now I am doing this thing" progress messages in
   the TCP connection code that can be triggered by setting a verbose
   option internally in the code, but "git fetch -v" and friends never
   passed the verbose option down to that codepath.

 * Clean/smudge filters defined in a configuration file of lower
   precedence can now be overridden to be a pass-through no-op by
   setting the variable to an empty string.

 * A new "<branch>^{/!-<pattern>}" notation can be used to name a
   commit that is reachable from <branch> that does not match the
   given <pattern>.

 * The "user.useConfigOnly" configuration variable can be used to
   force the user to always set user.email & user.name configuration
   variables, serving as a reminder for those who work on multiple
   projects and do not want to put these in their $HOME/.gitconfig.

 * "git fetch" and friends that make network connections can now be
   told to only use ipv4 (or ipv6).

 * Some authentication methods do not need username or password, but
   libcurl needs some hint that it needs to perform authentication.
   Supplying an empty username and password string is a valid way to
   do so, but you can set the http.[<url>.]emptyAuth configuration
   variable to achieve the same, if you find it cleaner.

 * You can now set http.[<url>.]pinnedpubkey to specify the pinned
   public key when building with recent enough versions of libcURL.

 * The configuration system has been taught to phrase where it found a
   bad configuration variable in a better way in its error messages.
   "git config" learnt a new "--show-origin" option to indicate where
   the values come from.

 * The "credential-cache" daemon process used to run in whatever
   directory it happened to start in, but this made umount(2)ing the
   filesystem that houses the repository harder; now the process
   chdir()s to the directory that house its own socket on startup.

 * When "git submodule update" did not result in fetching the commit
   object in the submodule that is referenced by the superproject, the
   command learned to retry another fetch, specifically asking for
   that commit that may not be connected to the refs it usually
   fetches.

 * "git merge-recursive" learned "--no-renames" option to disable its
   rename detection logic.

 * Across the transition at around Git version 2.0, the user used to
   get a pretty loud warning when running "git push" without setting
   push.default configuration variable.  We no longer warn, given that
   the transition is over long time ago.

 * README has been renamed to README.md and its contents got tweaked
   slightly to make it easier on the eyes.


Performance, Internal Implementation, Development Support etc.

 * Add a framework to spawn a group of processes in parallel, and use
   it to run "git fetch --recurse-submodules" in parallel.

 * A slight update to the Makefile to mark "phoney" targets
   as such correctly.

 * In-core storage of the reverse index for .pack files (which lets
   you go from a pack offset to an object name) has been streamlined.

 * d95138e6 (setup: set env $GIT_WORK_TREE when work tree is set, like
   $GIT_DIR, 2015-06-26) attempted to work around a glitch in alias
   handling by overwriting GIT_WORK_TREE environment variable to
   affect subprocesses when set_git_work_tree() gets called, which
   resulted in a rather unpleasant regression to "clone" and "init".
   Try to address the same issue by always restoring the environment
   and respawning the real underlying command when handling alias.

 * The low-level code that is used to create symbolic references has
   been updated to share more code with the code that deals with
   normal references.

 * strbuf_getline() and friends have been redefined to make it easier
   to identify which callsite of (new) strbuf_getline_lf() should
   allow and silently ignore carriage-return at the end of the line to
   help users on DOSsy systems.

 * "git shortlog" used to accumulate various pieces of information
   regardless of what was asked to be shown in the final output.  It
   has been optimized by noticing what need not to be collected
   (e.g. there is no need to collect the log messages when showing
   only the number of changes).

 * "git checkout $branch" (and other operations that share the same
   underlying machinery) has been optimized.

 * Automated tests in Travis CI environment has been optimized by
   persisting runtime statistics of previous "prove" run, executing
   tests that take longer before other ones; this reduces the total
   wallclock time.

 * Test scripts have been updated to remove assumptions that are not
   portable between Git for POSIX and Git for Windows, or to skip ones
   with expectations that are not satisfiable on Git for Windows.

 * Some calls to strcpy(3) triggers a false warning from static
   analysers that are less intelligent than humans, and reducing the
   number of these false hits helps us notice real issues.  A few
   calls to strcpy(3) in test-path-utils that are already safe has
   been rewritten to avoid false wanings.

 * Some calls to strcpy(3) triggers a false warning from static
   analysers that are less intelligent than humans, and reducing the
   number of these false hits helps us notice real issues.  A few
   calls to strcpy(3) in "git rerere" that are already safe has been
   rewritten to avoid false wanings.

 * The "name_path" API was an attempt to reduce the need to construct
   the full path out of a series of path components while walking a
   tree hierarchy, but over time made less efficient because the path
   needs to be flattened, e.g. to be compared with another path that
   is already flat.  The API has been removed and its users have been
   rewritten to simplify the overall code complexity.

 * Help those who debug http(s) part of the system.
   (merge 0054045 sp/remote-curl-ssl-strerror later to maint).

 * The internal API to interact with "remote.*" configuration
   variables has been streamlined.

 * The ref-filter's format-parsing code has been refactored, in
   preparation for "branch --format" and friends.

 * Traditionally, the tests that try commands that work on the
   contents in the working tree were named with "worktree" in their
   filenames, but with the recent addition of "git worktree"
   subcommand, whose tests are also named similarly, it has become
   harder to tell them apart.  The traditional tests have been renamed
   to use "work-tree" instead in an attempt to differentiate them.
   (merge 5549029 mg/work-tree-tests later to maint).

 * Many codepaths forget to check return value from git_config_set();
   the function is made to die() to make sure we do not proceed when
   setting a configuration variable failed.
   (merge 3d18064 ps/config-error later to maint).

 * Handling of errors while writing into our internal asynchronous
   process has been made more robust, which reduces flakiness in our
   tests.
   (merge 43f3afc jk/epipe-in-async later to maint).

 * There is a new DEVELOPER knob that enables many compiler warning
   options in the Makefile.


Also contains various documentation updates and code clean-ups.


Fixes since v2.7
----------------

Unless otherwise noted, all the fixes since v2.7 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * An earlier change in 2.5.x-era broke users' hooks and aliases by
   exporting GIT_WORK_TREE to point at the root of the working tree,
   interfering when they tried to use a different working tree without
   setting GIT_WORK_TREE environment themselves.

 * The "exclude_list" structure has the usual "alloc, nr" pair of
   fields to be used by ALLOC_GROW(), but clear_exclude_list() forgot
   to reset 'alloc' to 0 when it cleared 'nr' to discard the managed
   array.

 * Paths that have been told the index about with "add -N" are not
   quite yet in the index, but a few commands behaved as if they
   already are in a harmful way.

 * "git send-email" was confused by escaped quotes stored in the alias
   files saved by "mutt", which has been corrected.

 * A few unportable C construct have been spotted by clang compiler
   and have been fixed.

 * The documentation has been updated to hint the connection between
   the '--signoff' option and DCO.

 * "git reflog" incorrectly assumed that all objects that used to be
   at the tip of a ref must be commits, which caused it to segfault.

 * The ignore mechanism saw a few regressions around untracked file
   listing and sparse checkout selection areas in 2.7.0; the change
   that is responsible for the regression has been reverted.

 * Some codepaths used fopen(3) when opening a fixed path in $GIT_DIR
   (e.g. COMMIT_EDITMSG) that is meant to be left after the command is
   done.  This however did not work well if the repository is set to
   be shared with core.sharedRepository and the umask of the previous
   user is tighter.  They have been made to work better by calling
   unlink(2) and retrying after fopen(3) fails with EPERM.

 * Asking gitweb for a nonexistent commit left a warning in the server
   log.

   Somebody may want to follow this up with an additional test, perhaps?
   IIRC, we do test that no Perl warnings are given to the server log,
   so this should have been caught if our test coverage were good.

 * "git rebase", unlike all other callers of "gc --auto", did not
   ignore the exit code from "gc --auto".

 * Many codepaths that run "gc --auto" before exiting kept packfiles
   mapped and left the file descriptors to them open, which was not
   friendly to systems that cannot remove files that are open.  They
   now close the packs before doing so.

 * A recent optimization to filter-branch in v2.7.0 introduced a
   regression when --prune-empty filter is used, which has been
   corrected.

 * The description for SANITY prerequisite the test suite uses has
   been clarified both in the comment and in the implementation.

 * "git tag" started listing a tag "foo" as "tags/foo" when a branch
   named "foo" exists in the same repository; remove this unnecessary
   disambiguation, which is a regression introduced in v2.7.0.

 * The way "git svn" uses auth parameter was broken by Subversion
   1.9.0 and later.

 * The "split" subcommand of "git subtree" (in contrib/) incorrectly
   skipped merges when it shouldn't, which was corrected.

 * A few options of "git diff" did not work well when the command was
   run from a subdirectory.

 * The command line completion learned a handful of additional options
   and command specific syntax.

 * dirname() emulation has been added, as Msys2 lacks it.

 * The underlying machinery used by "ls-files -o" and other commands
   have been taught not to create empty submodule ref cache for a
   directory that is not a submodule.  This removes a ton of wasted
   CPU cycles.

 * "git worktree" had a broken code that attempted to auto-fix
   possible inconsistency that results from end-users moving a
   worktree to different places without telling Git (the original
   repository needs to maintain backpointers to its worktrees, but
   "mv" run by end-users who are not familiar with that fact will
   obviously not adjust them), which actually made things worse
   when triggered.

 * The low-level merge machinery has been taught to use CRLF line
   termination when inserting conflict markers to merged contents that
   are themselves CRLF line-terminated.

 * "git push --force-with-lease" has been taught to report if the push
   needed to force (or fast-forwarded).

 * The emulated "yes" command used in our test scripts has been
   tweaked not to spend too much time generating unnecessary output
   that is not used, to help those who test on Windows where it would
   not stop until it fills the pipe buffer due to lack of SIGPIPE.

 * The documentation for "git clean" has been corrected; it mentioned
   that .git/modules/* are removed by giving two "-f", which has never
   been the case.

 * The vimdiff backend for "git mergetool" has been tweaked to arrange
   and number buffers in the order that would match the expectation of
   majority of people who read left to right, then top down and assign
   buffers 1 2 3 4 "mentally" to local base remote merge windows based
   on that order.

 * "git show 'HEAD:Foo[BAR]Baz'" did not interpret the argument as a
   rev, i.e. the object named by the the pathname with wildcard
   characters in a tree object.
   (merge aac4fac nd/dwim-wildcards-as-pathspecs later to maint).

 * "git rev-parse --git-common-dir" used in the worktree feature
   misbehaved when run from a subdirectory.
   (merge 17f1365 nd/git-common-dir-fix later to maint).

 * Another try to add support to the ignore mechanism that lets you
   say "this is excluded" and then later say "oh, no, this part (that
   is a subset of the previous part) is not excluded".

 * "git worktree add -B <branchname>" did not work.

 * The "v(iew)" subcommand of the interactive "git am -i" command was
   broken in 2.6.0 timeframe when the command was rewritten in C.
   (merge 708b8cc jc/am-i-v-fix later to maint).

 * "git merge-tree" used to mishandle "both sides added" conflict with
   its own "create a fake ancestor file that has the common parts of
   what both sides have added and do a 3-way merge" logic; this has
   been updated to use the usual "3-way merge with an empty blob as
   the fake common ancestor file" approach used in the rest of the
   system.
   (merge 907681e jk/no-diff-emit-common later to maint).

 * The memory ownership rule of fill_textconv() API, which was a bit
   tricky, has been documented a bit better.
   (merge a64e6a4 jk/more-comments-on-textconv later to maint).

 * Update various codepaths to avoid manually-counted malloc().
   (merge 08c95df jk/tighten-alloc later to maint).

 * The documentation did not clearly state that the 'simple' mode is
   now the default for "git push" when push.default configuration is
   not set.
   (merge f6b1fb3 mm/push-simple-doc later to maint).

 * Recent versions of GNU grep are pickier when their input contains
   arbitrary binary data, which some of our tests uses.  Rewrite the
   tests to sidestep the problem.
   (merge 3b1442d jk/grep-binary-workaround-in-test later to maint).

 * A helper function "git submodule" uses since v2.7.0 to list the
   modules that match the pathspec argument given to its subcommands
   (e.g. "submodule add <repo> <path>") has been fixed.
   (merge 2b56bb7 sb/submodule-module-list-fix later to maint).

 * "git config section.var value" to set a value in per-repository
   configuration file failed when it was run outside any repository,
   but didn't say the reason correctly.
   (merge 638fa62 js/config-set-in-non-repository later to maint).

 * Other minor clean-ups and documentation updates
   (merge f459823 ak/extract-argv0-last-dir-sep later to maint).
   (merge 63ca1c0 ak/git-strip-extension-from-dashed-command later to maint).
   (merge 4867f11 ps/plug-xdl-merge-leak later to maint).
   (merge 4938686 dt/initial-ref-xn-commit-doc later to maint).
   (merge 9537f21 ma/update-hooks-sample-typofix later to maint).

----------------------------------------------------------------

Changes since v2.7.0 are as follows:

Alex Henrie (1):
      stripspace: call U+0020 a "space" instead of a "blank"

Alexander Kuleshov (3):
      format-patch: introduce format.outputDirectory configuration
      exec_cmd.c: use find_last_dir_sep() for code simplification
      git.c: simplify stripping extension of a file in handle_builtin()

Andrew Wheeler (1):
      push: fix ref status reporting for --force-with-lease

Changwoo Ryu (1):
      l10n: ko.po: Add Korean translation

Christian Couder (11):
      dir: free untracked cache when removing it
      update-index: use enum for untracked cache options
      update-index: add --test-untracked-cache
      update-index: add untracked cache notifications
      update-index: move 'uc' var declaration
      dir: add {new,add}_untracked_cache()
      dir: add remove_untracked_cache()
      dir: simplify untracked cache "ident" field
      config: add core.untrackedCache
      test-dump-untracked-cache: don't modify the untracked cache
      t7063: add tests for core.untrackedCache

Christoph Egger (1):
      http: implement public key pinning

Dan Aloni (1):
      ident: add user.useConfigOnly boolean for when ident shouldn't be guessed

Dave Ware (1):
      contrib/subtree: fix "subtree split" skipped-merge bug

David A. Greene (1):
      contrib/subtree: Make testing easier

David A. Wheeler (1):
      Expand documentation describing --signoff

David Turner (3):
      do_compare_entry: use already-computed path
      unpack-trees: fix accidentally quadratic behavior
      refs: document transaction semantics

Dennis Kaarsemaker (1):
      reflog-walk: don't segfault on non-commit sha1's in the reflog

Dickson Wong (1):
      mergetool: reorder vim/gvim buffers in three-way diffs

Edmundo Carmona Antoranz (1):
      blame: add support for --[no-]progress option

Elia Pinto (92):
      Makefile: add missing phony target
      contrib/examples/git-commit.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-fetch.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-merge.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-repack.sh: use the $( ... ) construct for command substitution
      contrib/examples/git-revert.sh: use the $( ... ) construct for command substitution
      contrib/thunderbird-patch-inline/appp.sh: use the $( ... ) construct for command substitution
      git-gui/po/glossary/txt-to-pot.sh: use the $( ... ) construct for command substitution
      t/lib-httpd.sh: use the $( ... ) construct for command substitution
      test-sha1.sh: use the $( ... ) construct for command substitution
      unimplemented.sh: use the $( ... ) construct for command substitution
      t/t1100-commit-tree-options.sh: use the $( ... ) construct for command substitution
      t/t1401-symbolic-ref.sh: use the $( ... ) construct for command substitution
      t/t1410-reflog.sh: use the $( ... ) construct for command substitution
      t/t1511-rev-parse-caret.sh: use the $( ... ) construct for command substitution
      t/t1512-rev-parse-disambiguation.sh: use the $( ... ) construct for command substitution
      t/t1700-split-index.sh: use the $( ... ) construct for command substitution
      t/t2025-worktree-add.sh: use the $( ... ) construct for command substitution
      t/t2102-update-index-symlinks.sh: use the $( ... ) construct for command substitution
      t/t3030-merge-recursive.sh: use the $( ... ) construct for command substitution
      t/t3100-ls-tree-restrict.sh: use the $( ... ) construct for command substitution
      t/t3101-ls-tree-dirname.sh: use the $( ... ) construct for command substitution
      t/t3210-pack-refs.sh: use the $( ... ) construct for command substitution
      t/t3403-rebase-skip.sh: use the $( ... ) construct for command substitution
      t/t3511-cherry-pick-x.sh: use the $( ... ) construct for command substitution
      t/t3600-rm.sh: use the $( ... ) construct for command substitution
      t/t3700-add.sh: use the $( ... ) construct for command substitution
      t/t5100-mailinfo.sh: use the $( ... ) construct for command substitution
      t/t5300-pack-object.sh: use the $( ... ) construct for command substitution
      t/t5301-sliding-window.sh: use the $( ... ) construct for command substitution
      t/t5302-pack-index.sh: use the $( ... ) construct for command substitution
      t/t5303-pack-corruption-resilience.sh: use the $( ... ) construct for command substitution
      t/t5304-prune.sh: use the $( ... ) construct for command substitution
      t/t5305-include-tag.sh: use the $( ... ) construct for command substitution
      t/t5500-fetch-pack.sh: use the $( ... ) construct for command substitution
      t/t5505-remote.sh: use the $( ... ) construct for command substitution
      t/t5506-remote-groups.sh: use the $( ... ) construct for command substitution
      t/t5510-fetch.sh: use the $( ... ) construct for command substitution
      t/t5515-fetch-merge-logic.sh: use the $( ... ) construct for command substitution
      t/t5516-fetch-push.sh: use the $( ... ) construct for command substitution
      t/t5517-push-mirror.sh: use the $( ... ) construct for command substitution
      t/t5522-pull-symlink.sh: use the $( ... ) construct for command substitution
      t/t5530-upload-pack-error.sh: use the $( ... ) construct for command substitution
      t/t5532-fetch-proxy.sh: use the $( ... ) construct for command substitution
      t/t5537-fetch-shallow.sh: use the $( ... ) construct for command substitution
      t/t5538-push-shallow.sh: use the $( ... ) construct for command substitution
      t/t5550-http-fetch-dumb.sh: use the $( ... ) construct for command substitution
      t/t5570-git-daemon.sh: use the $( ... ) construct for command substitution
      t/t5601-clone.sh: use the $( ... ) construct for command substitution
      t/t5700-clone-reference.sh: use the $( ... ) construct for command substitution
      t/t5710-info-alternate.sh: use the $( ... ) construct for command substitution
      t/t5900-repo-selection.sh: use the $( ... ) construct for command substitution
      t/t6001-rev-list-graft.sh: use the $( ... ) construct for command substitution
      t/t6002-rev-list-bisect.sh: use the $( ... ) construct for command substitution
      t/t6015-rev-list-show-all-parents.sh: use the $( ... ) construct for command substitution
      t/t6032-merge-large-rename.sh: use the $( ... ) construct for command substitution
      t/t6132-pathspec-exclude.sh: use the $( ... ) construct for command substitution
      t/t7001-mv.sh: use the $( ... ) construct for command substitution
      t/t7003-filter-branch.sh: use the $( ... ) construct for command substitution
      t/t7004-tag.sh: use the $( ... ) construct for command substitution
      t/t7006-pager.sh: use the $( ... ) construct for command substitution
      t/t7103-reset-bare.sh: use the $( ... ) construct for command substitution
      t/t7406-submodule-update.sh: use the $( ... ) construct for command substitution
      t/t7408-submodule-reference.sh: use the $( ... ) construct for command substitution
      t/t7504-commit-msg-hook.sh: use the $( ... ) construct for command substitution
      t/t7505-prepare-commit-msg-hook.sh: use the $( ... ) construct for command substitution
      t/t7602-merge-octopus-many.sh: use the $( ... ) construct for command substitution
      t/t7700-repack.sh: use the $( ... ) construct for command substitution
      t/t8003-blame-corner-cases.sh: use the $( ... ) construct for command substitution
      t/t9001-send-email.sh: use the $( ... ) construct for command substitution
      t9100-git-svn-basic.sh: use the $( ... ) construct for command substitution
      t9101-git-svn-props.sh: use the $( ... ) construct for command substitution
      t9104-git-svn-follow-parent.sh: use the $( ... ) construct for command substitution
      t9105-git-svn-commit-diff.sh: use the $( ... ) construct for command substitution
      t9107-git-svn-migrate.sh: use the $( ... ) construct for command substitution
      t9108-git-svn-glob.sh: use the $( ... ) construct for command substitution
      t9109-git-svn-multi-glob.sh: use the $( ... ) construct for command substitution
      t9110-git-svn-use-svm-props.sh: use the $( ... ) construct for command substitution
      t9114-git-svn-dcommit-merge.sh: use the $( ... ) construct for command substitution
      t9118-git-svn-funky-branch-names.sh: use the $( ... ) construct for command substitution
      t9119-git-svn-info.sh: use the $( ... ) construct for command substitution
      t9129-git-svn-i18n-commitencoding.sh: use the $( ... ) construct for command substitution
      t9130-git-svn-authors-file.sh: use the $( ... ) construct for command substitution
      t9132-git-svn-broken-symlink.sh: use the $( ... ) construct for command substitution
      t9137-git-svn-dcommit-clobber-series.sh: use the $( ... ) construct for command substitution
      t9138-git-svn-authors-prog.sh: use the $( ... ) construct for command substitution
      t9145-git-svn-master-branch.sh: use the $( ... ) construct for command substitution
      t9150-svk-mergetickets.sh: use the $( ... ) construct for command substitution
      t9300-fast-import.sh: use the $( ... ) construct for command substitution
      t9350-fast-export.sh: use the $( ... ) construct for command substitution
      t9501-gitweb-standalone-http-status.sh: use the $( ... ) construct for command substitution
      t9901-git-web--browse.sh: use the $( ... ) construct for command substitution

Eric Wong (8):
      git-send-email: do not double-escape quotes from mutt
      for-each-ref: document `creatordate` and `creator` fields
      git-svn: fix auth parameter handling on SVN 1.9.0+
      pass transport verbosity down to git_connect
      connect & http: support -4 and -6 switches for remote operations
      t5570: add tests for "git {clone,fetch,pull} -v"
      git-svn: hoist out utf8 prep from t9129 to lib-git-svn
      tests: remove no-op full-svn-test target

Felipe Gonçalves Assis (7):
      merge-recursive: option to disable renames
      merge-recursive: more consistent interface
      merge-strategies.txt: fix typo
      merge-recursive: find-renames resets threshold
      t3034: add rename threshold tests
      t3034: test option to disable renames
      t3034: test deprecated interface

GyuYong Jung (1):
      git-cvsserver.perl: fix typo

Jacob Keller (1):
      notes: allow merging from arbitrary references

Jeff King (74):
      pack-revindex: drop hash table
      pack-revindex: store entries directly in packed_git
      create_symref: modernize variable names
      create_symref: use existing ref-lock code
      create_symref: write reflog while holding lock
      run-command: don't warn on SIGPIPE deaths
      avoid shifting signed integers 31 bits
      bswap: add NO_UNALIGNED_LOADS define
      checkout,clone: check return value of create_symref
      lock_ref_sha1_basic: always fill old_oid while holding lock
      lock_ref_sha1_basic: handle REF_NODEREF with invalid refs
      rebase: ignore failures from "gc --auto"
      shortlog: match both "Author:" and "author" on stdin
      shortlog: use strbufs to read from stdin
      shortlog: replace hand-parsing of author with pretty-printer
      shortlog: optimize "--summary" mode
      shortlog: optimize out useless "<none>" normalization
      shortlog: optimize out useless string list
      shortlog: don't warn on empty author
      filter-branch: resolve $commit^{tree} in no-index case
      clean: make is_git_repository a public function
      resolve_gitlink_ref: ignore non-repository paths
      t6300: use test_atom for some un-modern tests
      tag: do not show ambiguous tag names as "tags/foo"
      transport: drop support for git-over-rsync
      give "nbuf" strbuf a more meaningful name
      checkout-index: simplify "-z" option parsing
      checkout-index: handle "--no-prefix" option
      checkout-index: handle "--no-index" option
      checkout-index: disallow "--no-stage" option
      apply, ls-files: simplify "-z" parsing
      fmt_ident: refactor strictness checks
      test-path-utils: use xsnprintf in favor of strcpy
      rerere: replace strcpy with xsnprintf
      checkout: reorder check_filename conditional
      check_filename: tighten dwim-wildcard ambiguity
      get_sha1: don't die() on bogus search strings
      http-push: stop using name_path
      show_object_with_name: simplify by using path_name()
      list-objects: convert name_path to a strbuf
      list-objects: drop name_path entirely
      list-objects: pass full pathname to callbacks
      git-config: better document default behavior for `--include`
      ref-filter: use string_list_split over strbuf_split
      reflog_expire_cfg: NUL-terminate pattern field
      add helpers for detecting size_t overflow
      tree-diff: catch integer overflow in combine_diff_path allocation
      diff: clarify textconv interface
      harden REALLOC_ARRAY and xcalloc against size_t overflow
      add helpers for allocating flex-array structs
      argv-array: add detach function
      convert manual allocations to argv_array
      convert trivial cases to ALLOC_ARRAY
      use xmallocz to avoid size arithmetic
      convert trivial cases to FLEX_ARRAY macros
      use st_add and st_mult for allocation size computation
      prepare_{git,shell}_cmd: use argv_array
      write_untracked_extension: use FLEX_ALLOC helper
      fast-import: simplify allocation in start_packfile
      fetch-pack: simplify add_sought_entry
      test-path-utils: fix normalize_path_copy output buffer size
      sequencer: simplify memory allocation of get_message
      git-compat-util: drop mempcpy compat code
      transport_anonymize_url: use xstrfmt
      diff_populate_gitlink: use a strbuf
      convert ewah/bitmap code to use xmalloc
      ewah: convert to REALLOC_ARRAY, etc
      merge-one-file: use empty blob for add/add base
      merge-tree: drop generate_common strategy
      xdiff: drop XDL_EMIT_COMMON
      write_or_die: handle EPIPE in async threads
      fetch-pack: ignore SIGPIPE in sideband demuxer
      test_must_fail: report number of unexpected signal
      t5504: handle expected output from SIGPIPE death

Johannes Schindelin (46):
      commit: allow editing the commit message even in shared repos
      Handle more file writes correctly in shared repos
      Refactor skipping DOS drive prefixes
      compat/basename: make basename() conform to POSIX
      compat/basename.c: provide a dirname() compatibility function
      t0060: verify that basename() and dirname() work as expected
      config.mak.uname: support MSys2
      config.mak.uname: supporting 64-bit MSys2
      fetch: release pack files before garbage-collecting
      am: release pack files before garbage-collecting
      merge: release pack files before garbage-collecting
      receive-pack: release pack files before garbage-collecting
      pull: allow interactive rebase with --rebase=interactive
      remote: handle the config setting branch.*.rebase=interactive
      completion: add missing branch.*.rebase values
      nedmalloc: allow compiling with MSys2's compiler
      compat/mingw: support MSys2-based MinGW build
      compat/winansi: support compiling with MSys2
      t0060: loosen overly strict expectations
      mingw: avoid redefining S_* constants
      mingw: avoid warnings when casting HANDLEs to int
      mingw: squash another warning about a cast
      mingw: uglify (a, 0) definitions to shut up warnings
      mingw: let's use gettext with MSYS2
      mingw: do not trust MSYS2's MinGW gettext.sh
      Git.pm: stop assuming that absolute paths start with a slash
      mingw: prepare the TMPDIR environment variable for shell scripts
      mingw: let lstat() fail with errno == ENOTDIR when appropriate
      merge-file: let conflict markers match end-of-line style of the context
      merge-file: ensure that conflict sections match eol style
      mingw: fix t5601-clone.sh
      mingw: accomodate t0060-path-utils for MSYS2
      mingw: disable mkfifo-based tests
      tests: turn off git-daemon tests if FIFOs are not available
      mingw: skip test in t1508 that fails due to path conversion
      mingw: fix t9700's assumption about directory separators
      mingw: work around pwd issues in the tests
      mingw: mark t9100's test cases with appropriate prereqs
      mingw: avoid illegal filename in t9118
      mingw: handle the missing POSIXPERM prereq in t9124
      mingw: skip a test in t9130 that cannot pass on Windows
      mingw: do not bother to test funny file names
      test-lib: limit the output of the yes utility
      gitignore: ignore generated test-fake-ssh executable
      t5505: 'remote add x y' should work when url.y.insteadOf = x
      git config: report when trying to modify a non-existing repo config

Johannes Sixt (2):
      t/t5100: no need to use 'echo' command substitutions for globbing
      mingw: avoid linking to the C library's isalpha()

John Keeping (3):
      completion: add missing git-rebase options
      t8005: avoid grep on non-ASCII data
      t9200: avoid grep on non-ASCII data

Jon Griffiths (3):
      credential-cache--daemon: refactor check_socket_directory
      credential-cache--daemon: disallow relative socket path
      credential-cache--daemon: change to the socket dir on startup

Jonathan Nieder (1):
      submodule.c: write "Fetching submodule <foo>" to stderr

Junio C Hamano (42):
      First batch for post 2.7 cycle
      strbuf: miniscule style fix
      strbuf: make strbuf_getline_crlf() global
      strbuf: introduce strbuf_getline_{lf,nul}()
      mktree: there are only two possible line terminations
      check-attr: there are only two possible line terminations
      check-ignore: there are only two possible line terminations
      update-index: there are only two possible line terminations
      checkout-index: there are only two possible line terminations
      strbuf: give strbuf_getline() to the "most text friendly" variant
      hash-object: read --stdin-paths with strbuf_getline()
      revision: read --stdin with strbuf_getline()
      rev-parse: read parseopt spec with strbuf_getline()
      ident.c: read /etc/mailname with strbuf_getline()
      remote.c: read $GIT_DIR/remotes/* with strbuf_getline()
      clone/sha1_file: read info/alternates with strbuf_getline()
      transport-helper: read helper response with strbuf_getline()
      cat-file: read batch stream with strbuf_getline()
      column: read lines with strbuf_getline()
      send-pack: read list of refs with strbuf_getline()
      grep: read -f file with strbuf_getline()
      test-sha1-array: read command stream with strbuf_getline()
      test-lib: clarify and tighten SANITY
      Second batch for 2.8 cycle
      Third batch for 2.8 cycle
      git: remove an early return from save_env_before_alias()
      git: protect against unbalanced calls to {save,restore}_env()
      git: simplify environment save/restore logic
      Fourth batch for 2.8.cycle
      Getting closer to 2.7.1
      restore_env(): free the saved environment variable once we are done
      Fifth batch for 2.8 cycle
      Git 2.7.1
      Sixth batch for the 2.8 cycle
      pager: lose a separate argv[]
      pager: factor out a helper to prepare a child process to run the pager
      am -i: fix "v"iew
      Start preparing for 2.7.2
      Seventh batch for the 2.8 cycle
      Git 2.7.2
      Eighth batch for 2.8
      Git 2.8-rc0

Karsten Blees (1):
      mingw: factor out Windows specific environment setup

Karthik Nayak (10):
      ref-filter: bump 'used_atom' and related code to the top
      ref-filter: introduce struct used_atom
      ref-filter: introduce parsing functions for each valid atom
      ref-filter: introduce color_atom_parser()
      ref-filter: introduce parse_align_position()
      ref-filter: introduce align_atom_parser()
      ref-filter: align: introduce long-form syntax
      ref-filter: introduce remote_ref_atom_parser()
      ref-filter: introduce contents_atom_parser()
      ref-filter: introduce objectname_atom_parser()

Kazutoshi Satoda (2):
      git-svn: enable "svn.pathnameencoding" on dcommit
      git-svn: apply "svn.pathnameencoding" before URL encoding

Knut Franke (2):
      http: allow selection of proxy authentication method
      http: use credential API to handle proxy authentication

Lars Schneider (8):
      travis-ci: run previously failed tests first, then slowest to fastest
      travis-ci: explicity use container-based infrastructure
      convert: treat an empty string for clean/smudge filters as "cat"
      t: do not hide Git's exit code in tests using 'nul_to_q'
      rename git_config_from_buf to git_config_from_mem
      config: add 'origin_type' to config_source struct
      config: add '--show-origin' option to print the origin of a config value
      add DEVELOPER makefile knob to check for acknowledged warnings

Lars Vogel (1):
      git-add doc: do not say working directory when you mean working tree

Martin Amdisen (1):
      templates/hooks: fix minor typo in the sample update-hook

Matt McCutchen (1):
      Documentation/git-clean.txt: don't mention deletion of .git/modules/*

Matthew Kraai (1):
      Documentation: remove unnecessary backslashes

Matthieu Moy (7):
      Documentation/git-push: document that 'simple' is the default
      README: use markdown syntax
      README.md: add hyperlinks on filenames
      README.md: move the link to git-scm.com up
      README.md: don't call git stupid in the title
      README.md: move down historical explanation about the name
      push: remove "push.default is unset" warning message

Michael J Gruber (2):
      t9100: fix breakage when SHELL_PATH is not /bin/sh
      tests: rename work-tree tests to *work-tree*

Mike Hommey (1):
      notes: allow treeish expressions as notes ref

Nguyễn Thái Ngọc Duy (20):
      blame: remove obsolete comment
      add and use a convenience macro ce_intent_to_add()
      Revert "setup: set env $GIT_WORK_TREE when work tree is set, like $GIT_DIR"
      git.c: make it clear save_env() is for alias handling only
      setup.c: re-fix d95138e (setup: set env $GIT_WORK_TREE when ..
      git.c: make sure we do not leak GIT_* to alias scripts
      grep: make it clear i-t-a entries are ignored
      dir.c: clean the entire struct in clear_exclude_list()
      Revert "dir.c: don't exclude whole dir prematurely if neg pattern may match"
      worktree.c: fix indentation
      diff-no-index: do not take a redundant prefix argument
      diff: make -O and --output work in subdirectory
      worktree: stop supporting moving worktrees manually
      rev-parse: take prefix into account in --git-common-dir
      dir.c: fix match_pathname()
      dir.c: support tracing exclude
      dir.c: support marking some patterns already matched
      dir.c: don't exclude whole dir prematurely
      worktree: fix "add -B"
      worktree add -B: do the checkout test before update branch

Pat Thoyts (1):
      t0008: avoid absolute path

Patrick Steinhardt (18):
      push: add '--delete' flag to synopsis
      push: add '-d' as shorthand for '--delete'
      config: introduce set_or_die wrappers
      branch: report errors in tracking branch setup
      branch: die on config error when unsetting upstream
      branch: die on config error when editing branch description
      submodule: die on config error when linking modules
      submodule--helper: die on config error when cloning module
      remote: die on config error when setting URL
      remote: die on config error when setting/adding branches
      remote: die on config error when manipulating remotes
      clone: die on config error in cmd_clone
      init-db: die on config errors when initializing empty repo
      sequencer: die on config error when saving replay opts
      compat: die when unable to set core.precomposeunicode
      config: rename git_config_set to git_config_set_gently
      config: rename git_config_set_or_die to git_config_set
      xdiff/xmerge: fix memory leak in xdl_merge

Paul Wagland (2):
      completion: complete show-branch "--date-order"
      completion: update completion arguments for stash

Rob Mayoff (1):
      contrib/subtree: unwrap tag refs

Romain Picard (1):
      git-p4.py: add support for filetype change

SZEDER Gábor (2):
      t6050-replace: make failing editor test more robust
      completion: fix mis-indentation in _git_stash()

Sebastian Schuberth (3):
      docs: clarify that passing --depth to git-clone implies --single-branch
      docs: say "commits" in the --depth option wording for git-clone
      docs: clarify that --depth for git-fetch works with newly initialized repos

Shawn O. Pearce (1):
      remote-curl: include curl_errorstr on SSL setup failures

Stefan Beller (8):
      xread: poll on non blocking fds
      strbuf: add strbuf_read_once to read without blocking
      sigchain: add command to pop all common signals
      run-command: add an asynchronous parallel child processor
      fetch_populated_submodules: use new parallel job processing
      submodules: allow parallel fetching, add tests and documentation
      submodule helper list: respect correct path prefix
      submodule: try harder to fetch needed sha1 by direct fetching sha1

Stephen P. Smith (4):
      user-manual: remove temporary branch entry from todo list
      glossary: define the term shallow clone
      user-manual: add section documenting shallow clones
      user-manual: add addition gitweb information

Thomas Braun (1):
      completion: complete "diff --word-diff-regex="

Thomas Gummerer (11):
      t7810: correct --no-index test
      builtin/grep: add grep.fallbackToNoIndex config
      ls-remote: document --quiet option
      ls-remote: document --refs option
      ls-remote: fix synopsis
      ls-remote: use parse-options api
      ls-remote: add support for showing symrefs
      remote: use parse_config_key
      remote: simplify remote_is_configured()
      remote: actually check if remote exits
      remote: use remote_is_configured() for add and rename

Tobias Klauser (2):
      trailer: allow to write to files other than stdout
      interpret-trailers: add option for in-place editing

Torsten Bögershausen (8):
      ls-files: add eol diagnostics
      t0027: add tests for get_stream_filter()
      convert.c: remove unused parameter 'path'
      convert.c: remove input_crlf_action()
      convert.c: use text_eol_is_crlf()
      convert.c: refactor crlf_action
      convert.c: simplify text_stat
      convert.c: correct attr_action()

Victor Leschuk (3):
      grep: allow threading even on a single-core machine
      grep: slight refactoring to the code that disables threading
      grep: add --threads=<num> option and grep.threads configuration

Will Palmer (2):
      test for '!' handling in rev-parse's named commits
      object name: introduce '^{/!-<negative pattern>}' notation

brian m. carlson (1):
      http: add option to try authentication without username

Øyvind A. Holm (1):
      gitweb: squelch "uninitialized value" warning

마누엘 (1):
      mingw: try to delete target directory before renaming

^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.7.0
@ 2016-01-04 23:43  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2016-01-04 23:43 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

The latest feature release Git v2.7.0 is now available at the
usual places.  It is comprised of 539 non-merge commits since
v2.6.0, contributed by 81 people, 26 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.7.0'
tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.6.0 are as follows.
Welcome to the Git development community!

  Atousa Pahlevan Duprat, Audric Schiltknecht, Ben Boeckel,
  Blake Burkhart, Dair Grant, Edmundo Carmona Antoranz, Élie
  Bouttier, Eric N. Vander Weele, Fabio Porcedda, Gabor Bernat,
  GIRARD Etienne, James McCoy, Juerg Haefliger, Noam Postavsky,
  Rainer M. Canavan, Ray Donnelly, Remi Pommarel, Renee Margaret
  McConahy, Sidhant Sharma, Stefan Agner, Takashi Iwai, Tobias
  Klauser, Waldek Maleska, Xue Fuqiao, YOKOTA Hiroshi, and
  Андрей Рыбак.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alexander Shopov, Alexey Shumkin, Alex Henrie, Alex Riesen,
  Antoine Delaite, Beat Bolli, brian m. carlson, Charles Bailey,
  Christian Couder, Clemens Buchacher, Daniel Knittl-Frank, David
  Aguilar, David Turner, Dennis Kaarsemaker, Dimitriy Ryazantcev,
  Doug Kelly, Elia Pinto, Fabian Ruch, Fredrik Medley, Giuseppe
  Bilotta, Jacob Keller, Jean-Noel Avila, Jeff King, Jiang Xin,
  Johannes Schindelin, Johannes Sixt, John Keeping, Junio C Hamano,
  Karthik Nayak, Lars Schneider, Lukas Fleischer, Luke Diamand,
  Matthieu Moy, Max Kirillov, Michael Haggerty, Michael J Gruber,
  Michael Rappazzo, Mike Crowe, Namhyung Kim, Nguyễn Thái Ngọc
  Duy, Pat Thoyts, Paul Mackerras, Peter Krefting, Ralf Thielow,
  Ramsay Jones, René Scharfe, Ronnie Sahlberg, Sam Hocevar,
  Stefan Beller, Stefan Naewe, Stephan Beyer, SZEDER Gábor,
  Techlive Zheng, Torsten Bögershausen, and Trần Ngọc Quân.

----------------------------------------------------------------

Git 2.7 Release Notes
=====================

Updates since v2.6
------------------

UI, Workflows & Features

 * The appearance of "gitk", particularly on high DPI monitors, have
   been improved.  "gitk" also comes with an undated translation for
   Swedish and Japanese.

 * "git remote" learned "get-url" subcommand to show the URL for a
   given remote name used for fetching and pushing.

 * There was no way to defeat a configured rebase.autostash variable
   from the command line, as "git rebase --no-autostash" was missing.

 * "git log --date=local" used to only show the normal (default)
   format in the local timezone.  The command learned to take 'local'
   as an instruction to use the local timezone with other formats,

 * The refs used during a "git bisect" session is now per-worktree so
   that independent bisect sessions can be done in different worktrees
   created with "git worktree add".

 * Users who are too busy to type three extra keystrokes to ask for
   "git stash show -p" can now set stash.showPatch configuration
   variable to true to always see the actual patch, not just the list
   of paths affected with feel for the extent of damage via diffstat.

 * "quiltimport" allows to specify the series file by honoring the
   $QUILT_SERIES environment and also --series command line option.

 * The use of 'good/bad' in "git bisect" made it confusing to use when
   hunting for a state change that is not a regression (e.g. bugfix).
   The command learned 'old/new' and then allows the end user to
   say e.g. "bisect start --term-old=fast --term-new=slow" to find a
   performance regression.

 * "git interpret-trailers" can now run outside of a Git repository.

 * "git p4" learned to reencode the pathname it uses to communicate
   with the p4 depot with a new option.

 * Give progress meter to "git filter-branch".

 * Allow a later "!/abc/def" to override an earlier "/abc" that
   appears in the same .gitignore file to make it easier to express
   "everything in /abc directory is ignored, except for ...".

 * Teach "git p4" to send large blobs outside the repository by
   talking to Git LFS.

 * Prepare for Git on-disk repository representation to undergo
   backward incompatible changes by introducing a new repository
   format version "1", with an extension mechanism.

 * "git worktree" learned a "list" subcommand.

 * "git clone --dissociate" learned that it can be used even when
   "--reference" was not used at the same time.

 * "git blame" learnt to take "--first-parent" and "--reverse" at the
   same time when it makes sense.

 * "git checkout" did not follow the usual "--[no-]progress"
   convention and implemented only "--quiet" that is essentially
   a superset of "--no-progress".  Extend the command to support the
   usual "--[no-]progress".

 * The semantics of transfer.hideRefs configuration variable have been
   extended to work better with the ref "namespace" feature that lets
   you throw unrelated bunches of repositories in a single physical
   repository and virtually serve them as separate ones.

 * send-email config variables whose values are pathnames now go
   through the ~username/ expansion.

 * bash completion learnt to TAB-complete recipient addresses given
   to send-email.

 * The credential-cache daemon can be told to ignore SIGHUP to work
   around issue when running Git from inside emacs.

 * "git push" learned new configuration for doing "--recurse-submodules"
   on each push.

 * "format-patch" has learned a new option to zero-out the commit
   object name on the mbox "From " line.


Performance, Internal Implementation, Development Support etc.

 * The infrastructure to rewrite "git submodule" in C is being built
   incrementally.  Let's polish these early parts well enough and make
   them graduate to 'next' and 'master', so that the more involved
   follow-up can start cooking on a solid ground.

 * Some features from "git tag -l" and "git branch -l" have been made
   available to "git for-each-ref" so that eventually the unified
   implementation can be shared across all three.  The version merged
   to the 'master' branch earlier had a performance regression in "tag
   --contains", which has since been corrected.

 * Because "test_when_finished" in our test framework queues the
   clean-up tasks to be done in a shell variable, it should not be
   used inside a subshell.  Add a mechanism to allow 'bash' to catch
   such uses, and fix the ones that were found.

 * The debugging infrastructure for pkt-line based communication has
   been improved to mark the side-band communication specifically.

 * Update "git branch" that list existing branches, using the
   ref-filter API that is shared with "git tag" and "git
   for-each-ref".

 * The test for various line-ending conversions has been enhanced.

 * A few test scripts around "git p4" have been improved for
   portability.

 * Many allocations that is manually counted (correctly) that are
   followed by strcpy/sprintf have been replaced with a less error
   prone constructs such as xstrfmt.

 * The internal stripspace() function has been moved to where it
   logically belongs to, i.e. strbuf API, and the command line parser
   of "git stripspace" has been updated to use the parse_options API.

 * "git am" used to spawn "git mailinfo" via run_command() API once
   per each patch, but learned to make a direct call to mailinfo()
   instead.

 * The implementation of "git mailinfo" was refactored so that a
   mailinfo() function can be directly called from inside a process.

 * With a "debug" helper, debugging of a single "git" invocation in
   our test scripts has become a lot easier.

 * The "configure" script did not test for -lpthread correctly, which
   upset some linkers.

 * Cross completed task off of subtree project's todo list.

 * Test cleanups for the subtree project.

 * Clean up style in an ancient test t9300.

 * Work around some test flakiness with p4d.

 * Fsck did not correctly detect a NUL-truncated header in a tag.

 * Use a safer behavior when we hit errors verifying remote certificates.

 * Speed up filter-branch for cases where we only care about rewriting
   commits, not tree data.

 * The parse-options API has been updated to make "-h" command line
   option work more consistently in all commands.

 * "git svn rebase/mkdirs" got optimized by keeping track of empty
   directories better.

 * Fix some racy client/server tests by treating SIGPIPE the same as a
   normal non-zero exit.

 * The necessary infrastructure to build topics using the free Travis
   CI has been added. Developers forking from this topic (and enabling
   Travis) can do their own builds, and we can turn on auto-builds for
   git/git (including build-status for pull requests that people
   open).

 * The write(2) emulation for Windows learned to set errno to EPIPE
   when necessary.


Also contains various documentation updates and code clean-ups.


Fixes since v2.6
----------------

Unless otherwise noted, all the fixes since v2.6 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * Very small number of options take a parameter that is optional
   (which is not a great UI element as they can only appear at the end
   of the command line).  Add notice to documentation of each and
   every one of them.

 * "git blame --first-parent v1.0..v2.0" was not rejected but did not
   limit the blame to commits on the first parent chain.

 * "git subtree" (in contrib/) now can take whitespaces in the
   pathnames, not only in the in-tree pathname but the name of the
   directory that the repository is in.

 * The ssh transport, just like any other transport over the network,
   did not clear GIT_* environment variables, but it is possible to
   use SendEnv and AcceptEnv to leak them to the remote invocation of
   Git, which is not a good idea at all.  Explicitly clear them just
   like we do for the local transport.

 * Correct "git p4 --detect-labels" so that it does not fail to create
   a tag that points at a commit that is also being imported.

 * The Makefile always runs the library archiver with hardcoded "crs"
   options, which was inconvenient for exotic platforms on which
   people want to use programs with totally different set of command
   line options.

 * Customization to change the behaviour with "make -w" and "make -s"
   in our Makefile was broken when they were used together.

 * Allocation related functions and stdio are unsafe things to call
   inside a signal handler, and indeed killing the pager can cause
   glibc to deadlock waiting on allocation mutex as our signal handler
   tries to free() some data structures in wait_for_pager().  Reduce
   these unsafe calls.

 * The way how --ref/--notes to specify the notes tree reference are
   DWIMmed was not clearly documented.

 * "git gc" used to barf when a symbolic ref has gone dangling
   (e.g. the branch that used to be your upstream's default when you
   cloned from it is now gone, and you did "fetch --prune").

 * "git clone --dissociate" runs a big "git repack" process at the
   end, and it helps to close file descriptors that are open on the
   packs and their idx files before doing so on filesystems that
   cannot remove a file that is still open.

 * Description of the "log.follow" configuration variable in "git log"
   documentation is now also copied to "git config" documentation.

 * "git rebase -i" had a minor regression recently, which stopped
   considering a line that begins with an indented '#' in its insn
   sheet not a comment. Further, the code was still too picky on
   Windows where CRLF left by the editor is turned into a trailing CR
   on the line read via the "read" built-in command of bash.  Both of
   these issues are now fixed.

 * After "git checkout --detach", "git status" reported a fairly
   useless "HEAD detached at HEAD", instead of saying at which exact
   commit.

 * When "git send-email" wanted to talk over Net::SMTP::SSL,
   Net::Cmd::datasend() did not like to be fed too many bytes at the
   same time and failed to send messages.  Send the payload one line
   at a time to work around the problem.

 * When "git am" was rewritten as a built-in, it stopped paying
   attention to user.signingkey, which was fixed.

 * It was not possible to use a repository-lookalike created by "git
   worktree add" as a local source of "git clone".

 * On a case insensitive filesystems, setting GIT_WORK_TREE variable
   using a random cases that does not agree with what the filesystem
   thinks confused Git that it wasn't inside the working tree.

 * Performance-measurement tests did not work without an installed Git.

 * A test script for the HTTP service had a timing dependent bug,
   which was fixed.

 * There were some classes of errors that "git fsck" diagnosed to its
   standard error that did not cause it to exit with non-zero status.

 * Work around "git p4" failing when the P4 depot records the contents
   in UTF-16 without UTF-16 BOM.

 * When "git gc --auto" is backgrounded, its diagnosis message is
   lost.  Save it to a file in $GIT_DIR and show it next time the "gc
   --auto" is run.

 * The submodule code has been taught to work better with separate
   work trees created via "git worktree add".

 * "git gc" is safe to run anytime only because it has the built-in
   grace period to protect young objects.  In order to run with no
   grace period, the user must make sure that the repository is
   quiescent.

 * A recent "filter-branch --msg-filter" broke skipping of the commit
   object header, which is fixed.

 * The normalize_ceiling_entry() function does not muck with the end
   of the path it accepts, and the real world callers do rely on that,
   but a test insisted that the function drops a trailing slash.

 * A test for interaction between untracked cache and sparse checkout
   added in Git 2.5 days were flaky.

 * A couple of commands still showed "[options]" in their usage string
   to note where options should come on their command line, but we
   spell that "[<options>]" in most places these days.

 * The synopsis text and the usage string of subcommands that read
   list of things from the standard input are often shown as if they
   only take input from a file on a filesystem, which was misleading.

 * "git am -3" had a small regression where it is aborted in its error
   handling codepath when underlying merge-recursive failed in certain
   ways, as it assumed that the internal call to merge-recursive will
   never die, which is not the case (yet).

 * The linkage order of libraries was wrong in places around libcurl.

 * The name-hash subsystem that is used to cope with case insensitive
   filesystems keeps track of directories and their on-filesystem
   cases for all the paths in the index by holding a pointer to a
   randomly chosen cache entry that is inside the directory (for its
   ce->ce_name component).  This pointer was not updated even when the
   cache entry was removed from the index, leading to use after free.
   This was fixed by recording the path for each directory instead of
   borrowing cache entries and restructuring the API somewhat.

 * "git merge-file" tried to signal how many conflicts it found, which
   obviously would not work well when there are too many of them.

 * The error message from "git blame --contents --reverse" incorrectly
   talked about "--contents --children".

 * "git imap-send" did not compile well with older version of cURL library.

 * Merging a branch that removes a path and another that changes the
   mode bits on the same path should have conflicted at the path, but
   it didn't and silently favoured the removal.

 * "git --literal-pathspecs add -u/-A" without any command line
   argument misbehaved ever since Git 2.0.

 * "git daemon" uses "run_command()" without "finish_command()", so it
   needs to release resources itself, which it forgot to do.

 * "git status --branch --short" accessed beyond the constant string
   "HEAD", which has been corrected.

 * We peek objects from submodule's object store by linking it to the
   list of alternate object databases, but the code to do so forgot to
   correctly initialize the list.

 * The code to prepare the working tree side of temporary directory
   for the "dir-diff" feature forgot that symbolic links need not be
   copied (or symlinked) to the temporary area, as the code already
   special cases and overwrites them.  Besides, it was wrong to try
   computing the object name of the target of symbolic link, which may
   not even exist or may be a directory.

 * A Range: request can be responded with a full response and when
   asked properly libcurl knows how to strip the result down to the
   requested range.  However, we were hand-crafting a range request
   and it did not kick in.

 * Having a leftover .idx file without corresponding .pack file in
   the repository hurts performance; "git gc" learned to prune them.

 * Apple's common crypto implementation of SHA1_Update() does not take
   more than 4GB at a time, and we now have a compile-time workaround
   for it.

 * Produce correct "dirty" marker for shell prompts, even when we
   are on an orphan or an unborn branch.

 * A build without NO_IPv6 used to use gethostbyname() when guessing
   user's hostname, instead of getaddrinfo() that is used in other
   codepaths in such a build.

 * The exit code of git-fsck did not reflect some types of errors
   found in packed objects, which has been corrected.

 * The helper used to iterate over loose object directories to prune
   stale objects did not closedir() immediately when it is done with a
   directory--a callback such as the one used for "git prune" may want
   to do rmdir(), but it would fail on open directory on platforms
   such as WinXP.

 * "git p4" used to import Perforce CLs that touch only paths outside
   the client spec as empty commits.  It has been corrected to ignore
   them instead, with a new configuration git-p4.keepEmptyCommits as a
   backward compatibility knob.

 * The completion script (in contrib/) used to list "git column"
   (which is not an end-user facing command) as one of the choices
   (merge 160fcdb sg/completion-no-column later to maint).

 * The error reporting from "git send-email", when SMTP TLS fails, has
   been improved.
   (merge 9d60524 jk/send-email-ssl-errors later to maint).

 * When getpwuid() on the system returned NULL (e.g. the user is not
   in the /etc/passwd file or other uid-to-name mappings), the
   codepath to find who the user is to record it in the reflog barfed
   and died.  Loosen the check in this codepath, which already accepts
   questionable ident string (e.g. host part of the e-mail address is
   obviously bogus), and in general when we operate fmt_ident() function
   in non-strict mode.
   (merge 92bcbb9 jk/ident-loosen-getpwuid later to maint).

 * "git symbolic-ref" forgot to report a failure with its exit status.
   (merge f91b273 jk/symbolic-ref-maint later to maint).

 * History traversal with "git log --source" that starts with an
   annotated tag failed to report the tag as "source", due to an
   old regression in the command line parser back in v2.2 days.
   (merge 728350b jk/pending-keep-tag-name later to maint).

 * "git p4" when interacting with multiple depots at the same time
   used to incorrectly drop changes.

 * Code clean-up, minor fixes etc.

----------------------------------------------------------------

Changes since v2.6.0 are as follows:

Alex Henrie (5):
      merge: grammofix in please-commit-before-merge message
      pull: enclose <options> in brackets in the usage string
      gitk: l10n: Update Catalan translation
      l10n: ca.po: update translation
      l10n: ca.po: update translation

Alex Riesen (1):
      clone: allow "--dissociate" without reference

Alexander Shopov (2):
      l10n: Updated Bulgarian translation of git (2477t,0f,0u)
      l10n: Updated Bulgarian translation of git (2477t,0f,0u)

Alexey Shumkin (2):
      t7900-subtree: test the "space in a subdirectory name" case
      contrib/subtree: respect spaces in a repository path

Antoine Delaite (1):
      bisect: add the terms old/new

Atousa Pahlevan Duprat (2):
      sha1: provide another level of indirection for the SHA-1 functions
      sha1: allow limiting the size of the data passed to SHA1_Update()

Audric Schiltknecht (1):
      l10n: fr.po: Fix typo

Beat Bolli (1):
      gitk: Add missing accelerators

Ben Boeckel (1):
      remote: add get-url subcommand

Blake Burkhart (2):
      http: limit redirection to protocol-whitelist
      http: limit redirection depth

Charles Bailey (2):
      http: treat config options sslCAPath and sslCAInfo as paths
      t3404: fix quoting of redirect for some versions of bash

Christian Couder (4):
      quote: fix broken sq_quote_buf() related comment
      quote: move comment before sq_quote_buf()
      Documentation/git-update-index: add missing opts to synopsys
      Documentation/git-update-index: add missing opts to synopsis

Clemens Buchacher (1):
      allow hooks to ignore their standard input stream

Dair Grant (1):
      git-svn: improve rebase/mkdirs performance

Daniel Knittl-Frank (1):
      Escape Git's exec path in contrib/rerere-train.sh script

David Aguilar (1):
      difftool: ignore symbolic links in use_wt_file

David Turner (11):
      refs: clean up common_list
      path: optimize common dir checking
      refs: make refs/bisect/* per-worktree
      t7063: fix flaky untracked-cache test
      name-hash: don't reuse cache_entry in dir_entry
      http.c: use CURLOPT_RANGE for range requests
      copy_msg(): rename to copy_reflog_msg()
      initdb: make safe_create_dir public
      files_log_ref_write: new function
      refs: break out ref conflict checks
      verify_pack: do not ignore return value of verification function

Dennis Kaarsemaker (3):
      git-p4: import the ctypes module
      t5813: avoid creating urls that break on cygwin
      check-ignore: correct documentation about output

Dimitriy Ryazantcev (3):
      l10n: ru.po: update Russian translation
      gitk: Update Russian translation
      l10n: ru.po: update Russian translation

Doug Kelly (2):
      t5304: test cleaning pack garbage
      gc: remove garbage .idx files from pack dir

Edmundo Carmona Antoranz (1):
      checkout: add --progress option

Elia Pinto (1):
      ident.c: add support for IPv6

Eric N. Vander Weele (1):
      log: Update log.follow doc and add to config.txt

Fabian Ruch (1):
      rebase -i: remember merge options beyond continue actions

Fabio Porcedda (1):
      contrib/subtree: remove "push" command from the "todo" file

Fredrik Medley (1):
      rebase-i-exec: Allow space in SHELL_PATH

GIRARD Etienne (1):
      git-p4: clean up after p4 submit failure

Gabor Bernat (1):
      filter-branch: add passed/remaining seconds on progress

Giuseppe Bilotta (2):
      gitk: Match ttk fonts to gitk fonts
      gitk: Let .bleft.mid widgets 'breathe'

Jacob Keller (3):
      notes: correct documentation of DWIMery for notes references
      sendemail: teach git-send-email to dump alias names
      completion: add support for completing email aliases

James McCoy (1):
      filter-branch: remove multi-line headers in msg filter

Jean-Noel Avila (2):
      l10n: fr v2.7.0 round 1 (2477t)
      l10n: fr.po v2.7.0 round 2 (2477t)

Jeff King (100):
      introduce "extensions" form of core.repositoryformatversion
      introduce "preciousObjects" repository extension
      run-command: provide in_async query function
      pkt-line: show packets in async processes as "sideband"
      fast-import: switch crash-report date to iso8601
      date: make "local" orthogonal to date format
      git_connect: clear GIT_* environment for ssh
      git_connect: clarify conn->use_shell flag
      blame: handle --first-parent
      transport: add a protocol-whitelist environment variable
      submodule: allow only certain protocols for submodule fetches
      show-branch: avoid segfault with --reflog of unborn branch
      mailsplit: fix FILE* leak in split_maildir
      archive-tar: fix minor indentation violation
      fsck: don't fsck alternates for connectivity-only check
      add xsnprintf helper function
      add git_path_buf helper function
      strbuf: make strbuf_complete_line more generic
      add reentrant variants of sha1_to_hex and find_unique_abbrev
      fsck: use strbuf to generate alternate directories
      mailsplit: make PATH_MAX buffers dynamic
      trace: use strbuf for quote_crnl output
      progress: store throughput display in a strbuf
      test-dump-cache-tree: avoid overflow of cache-tree name
      compat/inet_ntop: fix off-by-one in inet_ntop4
      convert trivial sprintf / strcpy calls to xsnprintf
      archive-tar: use xsnprintf for trivial formatting
      use xsnprintf for generating git object headers
      find_short_object_filename: convert sprintf to xsnprintf
      stop_progress_msg: convert sprintf to xsnprintf
      compat/hstrerror: convert sprintf to snprintf
      grep: use xsnprintf to format failure message
      entry.c: convert strcpy to xsnprintf
      add_packed_git: convert strcpy into xsnprintf
      http-push: replace strcat with xsnprintf
      receive-pack: convert strncpy to xsnprintf
      replace trivial malloc + sprintf / strcpy calls with xstrfmt
      config: use xstrfmt in normalize_value
      fetch: replace static buffer with xstrfmt
      use strip_suffix and xstrfmt to replace suffix
      ref-filter: drop sprintf and strcpy calls
      help: drop prepend function in favor of xstrfmt
      mailmap: replace strcpy with xstrdup
      read_branches_file: simplify string handling
      read_remotes_file: simplify string handling
      resolve_ref: use strbufs for internal buffers
      upload-archive: convert sprintf to strbuf
      remote-ext: simplify git pkt-line generation
      http-push: use strbuf instead of fwrite_buffer
      http-walker: store url in a strbuf
      sha1_get_pack_name: use a strbuf
      transport: refactor protocol whitelist code
      react to errors in xdi_diff
      xdiff: reject files larger than ~1GB
      merge-file: enforce MAX_XDIFF_SIZE on incoming files
      precompose_utf8: drop unused variable
      probe_utf8_pathname_composition: use internal strbuf
      init: use strbufs to store paths
      apply: convert root string to strbuf
      transport: use strbufs for status table "quickref" strings
      merge-recursive: convert malloc / strcpy to strbuf
      enter_repo: convert fixed-size buffers to strbufs
      remove_leading_path: use a strbuf for internal storage
      write_loose_object: convert to strbuf
      diagnose_invalid_index_path: use strbuf to avoid strcpy/strcat
      fetch-pack: use argv_array for index-pack / unpack-objects
      http-push: use an argv_array for setup_revisions
      stat_tracking_info: convert to argv_array
      daemon: use cld->env_array when re-spawning
      use sha1_to_hex_r() instead of strcpy
      drop strcpy in favor of raw sha1_to_hex
      color: add overflow checks for parsing colors
      use alloc_ref rather than hand-allocating "struct ref"
      avoid sprintf and strcpy with flex arrays
      receive-pack: simplify keep_arg computation
      help: clean up kfmclient munging
      prefer memcpy to strcpy
      color: add color_set helper for copying raw colors
      notes: document length of fanout path with a constant
      convert strncpy to memcpy
      fsck: drop inode-sorting code
      Makefile: drop D_INO_IN_DIRENT build knob
      fsck: use for_each_loose_file_in_objdir
      use strbuf_complete to conditionally append slash
      name-rev: use strip_suffix to avoid magic numbers
      t6031: move triple-rename test to t3030
      t6031: generalize for recursive and resolve strategies
      merge: detect delete/modechange conflict
      add_submodule_odb: initialize alt_odb list earlier
      merge-file: clamp exit code to maximum 127
      http: use off_t to store partial file size
      filter-branch: skip index read/write when possible
      blame: fix object casting regression
      ident: make xgetpwuid_self() a static local helper
      ident: keep a flag for bogus default_email
      ident: loosen getpwuid error in non-strict mode
      ident: fix undefined variable when NO_IPV6 is set
      revision.c: propagate tag names from pending array
      symbolic-ref: propagate error code from create_symref()
      t1401: test reflog creation for git-symbolic-ref

Jiang Xin (4):
      l10n: git.pot: v2.7.0 round 1 (66 new, 29 removed)
      l10n: zh_CN: for git v2.7.0 l10n round 1
      l10n: git.pot: v2.7.0 round 2 (2 new, 2 removed)
      l10n: zh_CN: for git v2.7.0 l10n round 2

Johannes Schindelin (13):
      setup: fix "inside work tree" detection on case-insensitive filesystems
      t5700: demonstrate a Windows file locking issue with `git clone --dissociate`
      sha1_file: consolidate code to close a pack's file descriptor
      gc: demonstrate failure with stale remote HEAD
      sha1_file.c: add a function to release all packs
      clone --dissociate: avoid locking pack files
      pack-objects: do not get distracted by broken symrefs
      imap-send: only use CURLOPT_LOGIN_OPTIONS if it is actually available
      Squelch warning about an integer overflow
      Silence GCC's "cast of pointer to integer of a different size" warning
      t3404: "rebase -i" gets broken when insn sheet uses CR/LF line endings
      test: facilitate debugging Git executables in tests with gdb
      mingw: emulate write(2) that fails with a EPIPE

Johannes Sixt (10):
      prune: close directory earlier during loose-object directory traversal
      read_branches_file: plug a FILE* leak
      compat/mingw.c: remove printf format warning
      modernize t9300: single-quote placement and indentation
      modernize t9300: use test_must_fail
      modernize t9300: use test_must_be_empty
      modernize t9300: wrap lines after &&
      modernize t9300: use test_when_finished for clean-up
      modernize t9300: mark here-doc words to ignore tab indentation
      modernize t9300: move test preparations into test_expect_success

John Keeping (22):
      Documentation/blame-options: don't list date formats
      Documentation/config: don't list date formats
      Documentation/git-for-each-ref: don't list date formats
      Documentation/rev-list: don't list date formats
      t6300: introduce test_date() helper
      t6300: add test for "raw" date format
      date: check for "local" before anything else
      t6300: make UTC and local dates different
      t6300: add tests for "-local" date formats
      t7610: don't use test_config in a subshell
      t5801: don't use test_when_finished in a subshell
      test-lib-functions: support "test_config -C <dir> ..."
      t7800: don't use test_config in a subshell
      test-lib-functions: detect test_when_finished in subshell
      interpret-trailers: allow running outside a repository
      Makefile: fix MAKEFLAGS tests with multiple flags
      rebase: support --no-autostash
      Documentation/git-rebase: fix --no-autostash formatting
      Documentation: fix section header mark-up
      send-email: expand path in sendemail.smtpsslcertpath config
      send-email: die if CA path doesn't exist
      send-email: enable SSL level 1 debug output

Juerg Haefliger (1):
      git-quiltimport: add commandline option --series <file>

Junio C Hamano (100):
      rerere: fix an off-by-one non-bug
      rerere: handle conflicts with multiple stage #1 entries
      rerere: plug conflict ID leaks
      rerere: lift PATH_MAX limitation
      rerere: write out each record of MERGE_RR in one go
      rerere: report autoupdated paths only after actually updating them
      rerere: drop want_sp parameter from is_cmarker()
      rerere: stop looping unnecessarily
      rerere: do not leak mmfile[] for a path with multiple stage #1 entries
      rerere: explain the rerere I/O abstraction
      rerere: fix benign off-by-one non-bug and clarify code
      rerere: explain MERGE_RR management helpers
      rerere: explain the primary codepath
      rerere: explain "rerere forget" codepath
      rerere: explain the remainder
      rerere: refactor "replay" part of do_plain_rerere()
      rerere: further de-dent do_plain_rerere()
      rerere: further clarify do_rerere_one_path()
      rerere: call conflict-ids IDs
      rerere: use "struct rerere_id" instead of "char *" for conflict ID
      rerere: un-nest merge() further
      prepare_packed_git(): refactor garbage reporting in pack directory
      Makefile: allow $(ARFLAGS) specified from the command line
      filter-branch: make report-progress more readable
      fsck: exit with non-zero when problems are found
      Git 2.3.10
      Git 2.4.10
      Git 2.5.4
      Git 2.6.1
      Start cycle toward 2.7
      Second batch for 2.7
      am -3: do not let failed merge from completing the error codepath
      Documentation/gc: warn against --prune=<now>
      Third batch for 2.7
      Fourth batch for 2.7
      Git 2.6.2
      Fifth batch for 2.7
      usage: do not insist that standard input must come from a file
      mailinfo: remove a no-op call convert_to_utf8(it, "")
      mailinfo: fold decode_header_bq() into decode_header()
      mailinfo: fix an off-by-one error in the boundary stack
      mailinfo: explicitly close file handle to the patch output
      Sixth batch for 2.7
      mailinfo: plug strbuf leak during continuation line handling
      mailinfo: move handle_boundary() lower
      mailinfo: move read_one_header_line() closer to its callers
      mailinfo: move check_header() after the helpers it uses
      mailinfo: move cleanup_space() before its users
      mailinfo: move definition of MAX_HDR_PARSED closer to its use
      mailinfo: get rid of function-local static states
      mailinfo: do not let handle_body() touch global "line" directly
      mailinfo: do not let handle_boundary() touch global "line" directly
      mailinfo: do not let find_boundary() touch global "line" directly
      mailinfo: move global "line" into mailinfo() function
      mailinfo: introduce "struct mailinfo" to hold globals
      mailinfo: move keep_subject & keep_non_patch_bracket to struct mailinfo
      mailinfo: move global "FILE *fin, *fout" to struct mailinfo
      mailinfo: move filter/header stage to struct mailinfo
      mailinfo: move patch_lines to struct mailinfo
      mailinfo: move add_message_id and message_id to struct mailinfo
      mailinfo: move use_scissors and use_inbody_headers to struct mailinfo
      mailinfo: move metainfo_charset to struct mailinfo
      mailinfo: move check for metainfo_charset to convert_to_utf8()
      mailinfo: move transfer_encoding to struct mailinfo
      mailinfo: move charset to struct mailinfo
      mailinfo: move cmitmsg and patchfile to struct mailinfo
      mailinfo: move [ps]_hdr_data to struct mailinfo
      mailinfo: move content/content_top to struct mailinfo
      mailinfo: handle_commit_msg() shouldn't be called after finding patchbreak
      mailinfo: keep the parsed log message in a strbuf
      mailinfo: libify
      mailinfo: handle charset conversion errors in the caller
      am: make direct call to mailinfo
      mailinfo: remove calls to exit() and die() deep in the callchain
      Documentation/everyday: match undefline with the text
      Documentation: match underline with the text
      Documentation: match undefline with the text in old release notes
      Documentation: AsciiDoc spells em-dash as double-dashes, not triple
      add: simplify -u/-A without pathspec
      Seventh batch for 2.7
      rebase-i: work around Windows CRLF line endings
      Eighth batch for 2.7
      Ninth batch for 2.7
      Tenth batch for 2.7
      Git 2.6.3
      Eleventh batch for 2.7
      RelNotes update for 2.7
      Prepare for 2.6.4
      Git 2.6.4
      Update release notes to 2.7
      Git 2.7-rc0
      Prepare for 2.6.5
      Update release notes to 2.7
      Update draft release notes to 2.6.5
      Git 2.7-rc1
      Update release notes to 2.7
      Git 2.7-rc2
      Git 2.7-rc3
      Git 2.6.5
      Git 2.7

Karthik Nayak (35):
      t6302: for-each-ref tests for ref-filter APIs
      tag: libify parse_opt_points_at()
      ref-filter: implement '--points-at' option
      for-each-ref: add '--points-at' option
      ref-filter: add parse_opt_merge_filter()
      ref-filter: implement '--merged' and '--no-merged' options
      for-each-ref: add '--merged' and '--no-merged' options
      parse-option: rename parse_opt_with_commit()
      parse-options.h: add macros for '--contains' option
      ref-filter: implement '--contains' option
      for-each-ref: add '--contains' option
      ref-filter: move `struct atom_value` to ref-filter.c
      ref-filter: introduce ref_formatting_state and ref_formatting_stack
      utf8: add function to align a string into given strbuf
      ref-filter: introduce handler function for each atom
      ref-filter: introduce match_atom_name()
      ref-filter: implement an `align` atom
      ref-filter: add option to filter out tags, branches and remotes
      ref-filter: add support for %(contents:lines=X)
      ref-filter: add support to sort by version
      ref-filter: add option to match literal pattern
      tag.c: use 'ref-filter' data structures
      tag.c: use 'ref-filter' APIs
      tag.c: implement '--format' option
      tag.c: implement '--merged' and '--no-merged' options
      branch: refactor width computation
      branch: bump get_head_description() to the top
      branch: roll show_detached HEAD into regular ref_list
      branch: move 'current' check down to the presentation layer
      branch: drop non-commit error reporting
      branch.c: use 'ref-filter' data structures
      branch.c: use 'ref-filter' APIs
      branch: add '--points-at' option
      tag.c: use the correct algorithm for the '--contains' option
      ref-filter: fallback on alphabetical comparison

Lars Schneider (21):
      git-p4: add config git-p4.pathEncoding
      git-p4: improve path encoding verbose output
      git-p4: use replacement character for non UTF-8 characters in paths
      git-p4: add test case for "Translation of file content failed" error
      git-p4: handle "Translation of file content failed"
      git-p4: add optional type specifier to gitConfig reader
      git-p4: add gitConfigInt reader
      git-p4: return an empty list if a list config has no values
      git-p4: add file streaming progress in verbose mode
      git-p4: check free space during streaming
      git-p4: add support for large file systems
      git-p4: add Git LFS backend for large file system
      git-p4: avoid "stat" command in t9815 git-p4-submit-fail
      git-p4: skip t9819 test case on case insensitive file systems
      git-p4: retry kill/cleanup operations in tests with timeout
      git-p4: add p4d timeout in tests
      git-p4: add trap to kill p4d on test exit
      implement test_might_fail using a refactored test_must_fail
      add "ok=sigpipe" to test_must_fail and use it to fix flaky tests
      Add Travis CI support
      git-p4: add option to keep empty commits

Lukas Fleischer (4):
      config.txt: document the semantics of hideRefs with namespaces
      upload-pack: strip refs before calling ref_is_hidden()
      hideRefs: add support for matching full refs
      t5509: add basic tests for hideRefs

Luke Diamand (7):
      git-p4: failing test for ignoring invalid p4 labels
      git-p4: do not terminate creating tag for unknown commit
      git-p4: fix P4 label import for unprocessed commits
      git-p4: add failing test for submit from detached head
      git-p4: add option to system() to return subshell status
      git-p4: work with a detached head
      git-p4: failing test case for skipping changes with multiple depots

Matthieu Moy (12):
      bisect: sanity check on terms
      bisect: add 'git bisect terms' to view the current terms
      bisect: allow setting any user-specified in 'git bisect start'
      strtoul_ui: reject negative values
      Documentation: use 'keyid' consistently, not 'key-id'
      Documentation/grep: fix documentation of -O
      Documentation: explain optional arguments better
      t3203: test 'detached at' after checkout --detach
      status: don't say 'HEAD detached at HEAD'
      rebase-i: explicitly accept tab as separator in commands
      rebase-i: loosen over-eager check_bad_cmd check
      git-multimail: update to release 1.2.0

Max Kirillov (6):
      submodule refactor: use strbuf_git_path_submodule() in add_submodule_odb()
      path: implement common_dir handling in git_pathdup_submodule()
      blame: fix option name in error message
      blame: test to describe use of blame --reverse --first-parent
      blame: extract find_single_final
      blame: allow blame --reverse --first-parent when it makes sense

Michael Haggerty (4):
      pack_if_possible_fn(): use ref_type() instead of is_per_worktree_ref()
      refname_is_safe(): improve docstring
      refs/refs-internal.h: new header file
      refs: split filesystem-based refs code into a new file

Michael J Gruber (2):
      t2026: rename worktree prune test
      Documentation/diff: give --word-diff-regex=. example

Michael Rappazzo (5):
      worktree: add top-level worktree.c
      worktree: refactor find_linked_symref function
      worktree: add a function to get worktree details
      worktree: add details to the worktree struct
      worktree: add 'list' command

Mike Crowe (3):
      push: add recurseSubmodules config option
      push: test that --recurse-submodules on command line overrides config
      push: follow the "last one wins" convention for --recurse-submodules

Namhyung Kim (1):
      stash: allow "stash show" diff output configurable

Nguyễn Thái Ngọc Duy (12):
      path.c: delete an extra space
      gc: save log from daemonized gc --auto and print it next time
      dir.c: make last_exclude_matching_from_list() run til the end
      dir.c: don't exclude whole dir prematurely if neg pattern may match
      t0002: add test for enter_repo(), non-strict mode
      enter_repo: avoid duplicating logic, use is_git_directory() instead
      enter_repo: allow .git files in strict mode
      clone: allow --local from a linked checkout
      clone: better error when --reference is a linked checkout
      ls-remote.txt: delete unsupported option
      mailinfo: fix passing wrong address to git_mailinfo_config
      git-check-ref-format.txt: typo, s/avoids/avoid/

Noam Postavsky (1):
      credential-cache: new option to ignore sighup

Pat Thoyts (1):
      remote-http(s): support SOCKS proxies

Peter Krefting (4):
      gitk: sv.po: Update Swedish translation (311t)
      l10n: sv.po: Update Swedish translation (2477t0f0u)
      l10n: sv: Fix bad translation
      l10n: sv.po: Update Swedish translation (2477t0f0u)

Rainer M. Canavan (1):
      configure.ac: use $LIBS not $CFLAGS when testing -lpthread

Ralf Thielow (4):
      am, credential-cache: add angle brackets to usage string
      push: don't mark options of recurse-submodules for translation
      l10n: de.po: improve some translations
      l10n: de.po: translate 68 new messages

Ramsay Jones (1):
      http: fix some printf format warnings

Ray Donnelly (1):
      test-path-utils.c: remove incorrect assumption

Remi Pommarel (3):
      Makefile: link libcurl before zlib
      Makefile: make curl-config path configurable
      configure.ac: detect ssl need with libcurl

Renee Margaret McConahy (1):
      am: configure gpg at startup

René Scharfe (17):
      use pop_commit() for consuming the first entry of a struct commit_list
      t7060: add test for status --branch on a detached HEAD
      wt-status: exit early using goto in wt_shortstatus_print_tracking()
      wt-status: avoid building bogus branch name with detached HEAD
      wt-status: don't skip a magical number of characters blindly
      wt-status: use skip_prefix() to get rid of magic string length constants
      show-branch: use argv_array for default arguments
      run-command: factor out child_process_clear()
      daemon: plug memory leak
      parse-options: deduplicate parse_options_usage() calls
      parse-options: inline parse_options_usage() at its only remaining caller
      parse-options: allow -h as a short option
      t1450: add tests for NUL in headers of commits and tags
      grep: stop using PARSE_OPT_NO_INTERNAL_HELP
      fsck: treat a NUL in a tag header as an error
      show-ref: stop using PARSE_OPT_NO_INTERNAL_HELP
      wt-status: correct and simplify check for detached HEAD

Ronnie Sahlberg (2):
      verify_refname_available(): rename function
      verify_refname_available(): new function

SZEDER Gábor (8):
      bash prompt: test dirty index and worktree while on an orphan branch
      bash prompt: remove a redundant 'git diff' option
      bash prompt: indicate dirty index even on orphan branches
      filter-branch: deal with object name vs. pathname ambiguity in tree-filter
      Make error message after failing commit_lock_file() less confusing
      completion: remove 'git column' from porcelain commands
      completion: fix completing unstuck email alias arguments
      credential-store: don't pass strerror to die_errno()

Sam Hocevar (2):
      git-p4: support multiple depot paths in p4 submit
      git-p4: reduce number of server queries for fetches

Sidhant Sharma (1):
      worktree: usage: denote <branch> as optional with 'add'

Stefan Agner (1):
      git-send-email.perl: Fixed sending of many/huge changes/patches

Stefan Beller (5):
      submodule: rewrite `module_list` shell function in C
      submodule: rewrite `module_name` shell function in C
      submodule: rewrite `module_clone` shell function in C
      submodule-config: "goto" removal in parse_config()
      document submodule sync --recursive

Stefan Naewe (1):
      revision.c: fix possible null pointer arithmetic

Stephan Beyer (2):
      t5561: get rid of racy appending to logfile
      t/perf: make runner work even if Git is not installed

Takashi Iwai (4):
      pager: don't use unsafe functions in signal handlers
      gitk: Update msgid's for menu items with accelerator
      gitk: Add accelerators to Japanese locale
      gitk: Add accelerator to German locale

Techlive Zheng (7):
      contrib/subtree: Clean and refactor test code
      contrib/subtree: Add test for missing subtree
      contrib/subtree: Add tests for subtree add
      contrib/subtree: Add merge tests
      contrib/subtree: Add split tests
      contrib/subtree: Make each test self-contained
      contrib/subtree: Handle '--prefix' argument with a slash appended

Tobias Klauser (8):
      connect: fix typo in result string of prot_name()
      Documentation/interpret-trailers: Grammar fix
      strbuf: make stripspace() part of strbuf
      stripspace: use parse-options for command-line parsing
      credential-cache--daemon: remove unused #include "sigchain.h"
      diff: remove unused #include "sigchain.h"
      read-cache: remove unused #include "sigchain.h"
      shallow: remove unused #include "sigchain.h"

Torsten Bögershausen (1):
      t0027: improve test for not-normalized files

Trần Ngọc Quân (2):
      Updated Vietnamese translation
      l10n: vi.po: Updated translation (2477t)

Waldek Maleska (1):
      Correct fscanf formatting string for I64u values

Xue Fuqiao (2):
      Documentation: fix header markup
      user-manual: fix the description of fast-forward

YOKOTA Hiroshi (16):
      gitk: Color name update
      gitk: Re-sync line number in Japanese message catalogue
      gitk: Update Japanese message catalog
      gitk: Translate more to Japanese catalog
      gitk: Translate Japanese catalog
      gitk: Fix wrong translation
      gitk: Update Japanese translation
      gitk: Fix translation around copyright sign
      gitk: Update Japanese translation
      gitk: Update fuzzy messages
      gitk: Change last translator line
      gitk: Update year
      gitk: Remove unused line
      gitk: Improve translation message
      gitk: Update "Language:" header
      gitk: Update revision date in Japanese PO file

brian m. carlson (15):
      sha1_file: introduce has_object_file helper.
      Convert struct ref to use object_id.
      add_sought_entry_mem: convert to struct object_id
      parse_fetch: convert to use struct object_id
      get_remote_heads: convert to struct object_id
      push_refs_with_export: convert to struct object_id
      ref_newer: convert to use struct object_id
      object: introduce get_object_hash macro.
      Add several uses of get_object_hash.
      Convert struct object to object_id
      Remove get_object_hash.
      remote: convert functions to struct object_id
      sha1_file.c: introduce a null_oid constant
      format-patch: add an option to suppress commit hash
      format-patch: check that header line has expected format

Élie Bouttier (1):
      l10n: fr.po: Fix typo

Андрей Рыбак (1):
      Documentation: make environment variable formatting more consistent

^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.6.0
@ 2015-09-28 23:20  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2015-09-28 23:20 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

The latest feature release Git v2.6.0 is now available at the
usual places.  It is comprised of 479 non-merge commits since
v2.5.0, contributed by 67 people, 15 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.6.0'
tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.5.0 are as follows.
Welcome to the Git development community!

  Antoine Delaite, Brett Randall, Brian Degenhardt, Brian Norris,
  Erik Elfström, Galan Rémi, Guillaume Pagès, Ismael Luceno,
  Jan Viktorin, Jose F. Morales, Lars Schneider, Matthieu Prat,
  Michael Rappazzo, Simon A. Eugster, and Zoë Blade.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alejandro R. Sedeño, Alexander Shopov, Alex Henrie, Andreas
  Schwab, Beat Bolli, brian m. carlson, Charles Bailey, Christian
  Couder, Clemens Buchacher, Dave Borowitz, David Aguilar, David
  Turner, Edward Thomson, Elia Pinto, Eric Sunshine, Giuseppe
  Bilotta, Heiko Voigt, Ilya Bobyr, Jacob Keller, Jean-Noel
  Avila, Jeff King, Jiang Xin, Jim Hill, Johannes Schindelin,
  Johannes Sixt, Junio C Hamano, Karsten Blees, Karthik Nayak,
  Kevin Daudt, Marc Branchaud, Matthieu Moy, Michael Haggerty,
  Michael J Gruber, Mike Hommey, Nguyễn Thái Ngọc Duy, Patrick
  Steinhardt, Paul Mackerras, Paul Tan, Peter Krefting, Philip
  Oakley, Phillip Sz, Ralf Thielow, Ramsay Jones, Ray Chen, Remi
  Lespinet, René Scharfe, Stefan Beller, Sven Strickroth, SZEDER
  Gábor, Thomas Ackermann, Thomas Braun, and Trần Ngọc Quân.

----------------------------------------------------------------

Git 2.6 Release Notes
=====================

Updates since v2.5
------------------

UI, Workflows & Features

 * An asterisk as a substring (as opposed to the entirety) of a path
   component for both side of a refspec, e.g.
   "refs/heads/o*:refs/remotes/heads/i*", is now allowed.

 * New userdiff pattern definition for fountain screenwriting markup
   format has been added.

 * "git log" and friends learned a new "--date=format:..." option to
   format timestamps using system's strftime(3).

 * "git fast-import" learned to respond to the get-mark command via
   its cat-blob-fd interface.

 * "git rebase -i" learned "drop commit-object-name subject" command
   as another way to skip replaying of a commit.

 * A new configuration variable can enable "--follow" automatically
   when "git log" is run with one pathspec argument.

 * "git status" learned to show a more detailed information regarding
   the "rebase -i" session in progress.

 * "git cat-file" learned "--batch-all-objects" option to enumerate all
   available objects in the repository more quickly than "rev-list
   --all --objects" (the output includes unreachable objects, though).

 * "git fsck" learned to ignore errors on a set of known-to-be-bad
   objects, and also allows the warning levels of various kinds of
   non-critical breakages to be tweaked.

 * "git rebase -i"'s list of todo is made configurable.

 * "git send-email" now performs alias-expansion on names that are
   given via --cccmd, etc.

 * An environment variable GIT_REPLACE_REF_BASE tells Git to look into
   refs hierarchy other than refs/replace/ for the object replacement
   data.

 * Allow untracked cache (experimental) to be used when sparse
   checkout (experimental) is also in use.

 * "git pull --rebase" has been taught to pay attention to
   rebase.autostash configuration.

 * The command-line completion script (in contrib/) has been updated.

 * A negative !ref entry in multi-value transfer.hideRefs
   configuration can be used to say "don't hide this one".

 * After "git am" without "-3" stops, running "git am -3" pays attention
   to "-3" only for the patch that caused the original invocation
   to stop.

 * When linked worktree is used, simultaneous "notes merge" instances
   for the same ref in refs/notes/* are prevented from stomping on
   each other.

 * "git send-email" learned a new option --smtp-auth to limit the SMTP
   AUTH mechanisms to be used to a subset of what the system library
   supports.

 * A new configuration variable http.sslVersion can be used to specify
   what specific version of SSL/TLS to use to make a connection.

 * "git notes merge" can be told with "--strategy=<how>" option how to
   automatically handle conflicts; this can now be configured by
   setting notes.mergeStrategy configuration variable.

 * "git log --cc" did not show any patch, even though most of the time
   the user meant "git log --cc -p -m" to see patch output for commits
   with a single parent, and combined diff for merge commits.  The
   command is taught to DWIM "--cc" (without "--raw" and other forms
   of output specification) to "--cc -p -m".

 * "git config --list" output was hard to parse when values consist of
   multiple lines.  "--name-only" option is added to help this.

 * A handful of usability & cosmetic fixes to gitk and l10n updates.

 * A completely empty e-mail address <> is now allowed in the authors
   file used by git-svn, to match the way it accepts the output from
   authors-prog.


Performance, Internal Implementation, Development Support etc.

 * In preparation for allowing different "backends" to store the refs
   in a way different from the traditional "one ref per file in
   $GIT_DIR or in a $GIT_DIR/packed-refs file" filesystem storage,
   direct filesystem access to ref-like things like CHERRY_PICK_HEAD
   from scripts and programs has been reduced.

 * Computation of untracked status indicator by bash prompt
   script (in contrib/) has been optimized.

 * Memory use reduction when commit-slab facility is used to annotate
   sparsely (which is not recommended in the first place).

 * Clean up refs API and make "git clone" less intimate with the
   implementation detail.

 * "git pull" was reimplemented in C.

 * The packet tracing machinery allows to capture an incoming pack
   data to a file for debugging.

 * Move machinery to parse human-readable scaled numbers like 1k, 4M,
   and 2G as an option parameter's value from pack-objects to
   parse-options API, to make it available to other codepaths.

 * "git verify-tag" and "git verify-commit" have been taught to share
   more code, and then learned to optionally show the verification
   message from the underlying GPG implementation.

 * Various enhancements around "git am" reading patches generated by
   foreign SCM have been made.

 * Ref listing by "git branch -l" and "git tag -l" commands has
   started to be rebuilt, based on the for-each-ref machinery.

 * The code to perform multi-tree merges has been taught to repopulate
   the cache-tree upon a successful merge into the index, so that
   subsequent "diff-index --cached" (hence "status") and "write-tree"
   (hence "commit") will go faster.

   The same logic in "git checkout" may now be removed, but that is a
   separate issue.

 * Tests that assume how reflogs are represented on the filesystem too
   much have been corrected.

 * "git am" has been rewritten in "C".

 * git_path() and mkpath() are handy helper functions but it is easy
   to misuse, as the callers need to be careful to keep the number of
   active results below 4.  Their uses have been reduced.

 * The "lockfile" API has been rebuilt on top of a new "tempfile" API.

 * To prepare for allowing a different "ref" backend to be plugged in
   to the system, update_ref()/delete_ref() have been taught about
   ref-like things like MERGE_HEAD that are per-worktree (they will
   always be written to the filesystem inside $GIT_DIR).

 * The gitmodules API that is accessed from the C code learned to
   cache stuff lazily.


Also contains various documentation updates and code clean-ups.


Fixes since v2.5
----------------

Unless otherwise noted, all the fixes since v2.5 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * "git subtree" (in contrib/) depended on "git log" output to be
   stable, which was a no-no.  Apply a workaround to force a
   particular date format.
   (merge e7aac44 da/subtree-date-confusion later to maint).

 * An attempt to delete a ref by pushing into a repository whose HEAD
   symbolic reference points at an unborn branch that cannot be
   created due to ref D/F conflict (e.g. refs/heads/a/b exists, HEAD
   points at refs/heads/a) failed.
   (merge b112b14 jx/do-not-crash-receive-pack-wo-head later to maint).

 * The low-level "git send-pack" did not honor 'user.signingkey'
   configuration variable when sending a signed-push.
   (merge d830d39 db/send-pack-user-signingkey later to maint).

 * "sparse checkout" misbehaved for a path that is excluded from the
   checkout when switching between branches that differ at the path.
   (merge 7d78241 as/sparse-checkout-removal later to maint).

 * An experimental "untracked cache" feature used uname(2) in a
   slightly unportable way.
   (merge 100e433 cb/uname-in-untracked later to maint).

 * A "rebase" replays changes of the local branch on top of something
   else, as such they are placed in stage #3 and referred to as
   "theirs", while the changes in the new base, typically a foreign
   work, are placed in stage #2 and referred to as "ours".  Clarify
   the "checkout --ours/--theirs".
   (merge f303016 se/doc-checkout-ours-theirs later to maint).

 * The "rev-parse --parseopt" mode parsed the option specification
   and the argument hint in a strange way to allow '=' and other
   special characters in the option name while forbidding them from
   the argument hint.  This made it impossible to define an option
   like "--pair <key>=<value>" with "pair=key=value" specification,
   which instead would have defined a "--pair=key <value>" option.
   (merge 2d893df ib/scripted-parse-opt-better-hint-string later to maint).

 * Often a fast-import stream builds a new commit on top of the
   previous commit it built, and it often unconditionally emits a
   "from" command to specify the first parent, which can be omitted in
   such a case.  This caused fast-import to forget the tree of the
   previous commit and then re-read it from scratch, which was
   inefficient.  Optimize for this common case.
   (merge 0df3245 mh/fast-import-optimize-current-from later to maint).

 * Running an aliased command from a subdirectory when the .git thing
   in the working tree is a gitfile pointing elsewhere did not work.
   (merge d95138e nd/export-worktree later to maint).

 * "Is this subdirectory a separate repository that should not be
   touched?" check "git clean" was inefficient.  This was replaced
   with a more optimized check.
   (merge fbf2fec ee/clean-remove-dirs later to maint).

 * The "new-worktree-mode" hack in "checkout" that was added in
   nd/multiple-work-trees topic has been removed by updating the
   implementation of new "worktree add".
   (merge 65f9b75 es/worktree-add-cleanup later to maint).

 * Remove remaining cruft from  "git checkout --to", which
   transitioned to "git worktree add".
   (merge 114ff88 es/worktree-add later to maint).

 * An off-by-one error made "git remote" to mishandle a remote with a
   single letter nickname.
   (merge bc598c3 mh/get-remote-group-fix later to maint).

 * "git clone $URL", when cloning from a site whose sole purpose is to
   host a single repository (hence, no path after <scheme>://<site>/),
   tried to use the site name as the new repository name, but did not
   remove username or password when <site> part was of the form
   <user>@<pass>:<host>.  The code is taught to redact these.
   (merge adef956 ps/guess-repo-name-at-root later to maint).

 * Running tests with the "-x" option to make them verbose had some
   unpleasant interactions with other features of the test suite.
   (merge 9b5fe78 jk/test-with-x later to maint).

 * t1509 test that requires a dedicated VM environment had some
   bitrot, which has been corrected.
   (merge faacc5a ps/t1509-chroot-test-fixup later to maint).

 * "git pull" in recent releases of Git has a regression in the code
   that allows custom path to the --upload-pack=<program>.  This has
   been corrected.

   Note that this is irrelevant for 'master' with "git pull" rewritten
   in C.
   (merge 13e0e28 mm/pull-upload-pack later to maint).

 * When trying to see that an object does not exist, a state errno
   leaked from our "first try to open a packfile with O_NOATIME and
   then if it fails retry without it" logic on a system that refuses
   O_NOATIME.  This confused us and caused us to die, saying that the
   packfile is unreadable, when we should have just reported that the
   object does not exist in that packfile to the caller.
   (merge dff6f28 cb/open-noatime-clear-errno later to maint).

 * The codepath to produce error messages had a hard-coded limit to
   the size of the message, primarily to avoid memory allocation while
   calling die().
   (merge f4c3edc jk/long-error-messages later to maint).

 * strbuf_read() used to have one extra iteration (and an unnecessary
   strbuf_grow() of 8kB), which was eliminated.
   (merge 3ebbd00 jh/strbuf-read-use-read-in-full later to maint).

 * We rewrote one of the build scripts in Perl but this reimplements
   in Bourne shell.
   (merge 57cee8a sg/help-group later to maint).

 * The experimental untracked-cache feature were buggy when paths with
   a few levels of subdirectories are involved.
   (merge 73f9145 dt/untracked-subdir later to maint).

 * "interpret-trailers" helper mistook a single-liner log message that
   has a colon as the end of existing trailer.

 * The "interpret-trailers" helper mistook a multi-paragraph title of
   a commit log message with a colon in it as the end of the trailer
   block.
   (merge 5c99995 cc/trailers-corner-case-fix later to maint).

 * "git describe" without argument defaulted to describe the HEAD
   commit, but "git describe --contains" didn't.  Arguably, in a
   repository used for active development, such defaulting would not
   be very useful as the tip of branch is typically not tagged, but it
   is better to be consistent.
   (merge 2bd0706 sg/describe-contains later to maint).

 * The client side codepaths in "git push" have been cleaned up
   and the user can request to perform an optional "signed push",
   i.e. sign only when the other end accepts signed push.
   (merge 68c757f db/push-sign-if-asked later to maint).

 * Because the configuration system does not allow "alias.0foo" and
   "pager.0foo" as the configuration key, the user cannot use '0foo'
   as a custom command name anyway, but "git 0foo" tried to look these
   keys up and emitted useless warnings before saying '0foo is not a
   git command'.  These warning messages have been squelched.
   (merge 9e9de18 jk/fix-alias-pager-config-key-warnings later to maint).

 * "git rev-list" does not take "--notes" option, but did not complain
   when one is given.
   (merge 2aea7a5 jk/rev-list-has-no-notes later to maint).

 * When re-priming the cache-tree opportunistically while committing
   the in-core index as-is, we mistakenly invalidated the in-core
   index too aggressively, causing the experimental split-index code
   to unnecessarily rewrite the on-disk index file(s).
   (merge 475a344 dt/commit-preserve-base-index-upon-opportunistic-cache-tree-update later to maint).

 * "git archive" did not use zip64 extension when creating an archive
   with more than 64k entries, which nobody should need, right ;-)?
   (merge 88329ca rs/archive-zip-many later to maint).

 * The code in "multiple-worktree" support that attempted to recover
   from an inconsistent state updated an incorrect file.
   (merge 82fde87 nd/fixup-linked-gitdir later to maint).

 * On case insensitive systems, "git p4" did not work well with client
   specs.

 * "git init empty && git -C empty log" said "bad default revision 'HEAD'",
   which was found to be a bit confusing to new users.
   (merge ce11360 jk/log-missing-default-HEAD later to maint).

 * Recent versions of scripted "git am" has a performance regression in
   "git am --skip" codepath, which no longer exists in the built-in
   version on the 'master' front.  Fix the regression in the last
   scripted version that appear in 2.5.x maintenance track and older.
   (merge b9d6689 js/maint-am-skip-performance-regression later to maint).

 * The branch descriptions that are set with "git branch --edit-description"
   option were used in many places but they weren't clearly documented.
   (merge 561d2b7 po/doc-branch-desc later to maint).

 * Code cleanups and documentation updates.
   (merge 1c601af es/doc-clean-outdated-tools later to maint).
   (merge 3581304 kn/tag-doc-fix later to maint).
   (merge 3a59e59 kb/i18n-doc later to maint).
   (merge 45abdee sb/remove-unused-var-from-builtin-add later to maint).
   (merge 14691e3 sb/parse-options-codeformat later to maint).
   (merge 4a6ada3 ad/bisect-cleanup later to maint).
   (merge da4c5ad ta/docfix-index-format-tech later to maint).
   (merge ae25fd3 sb/check-return-from-read-ref later to maint).
   (merge b3325df nd/dwim-wildcards-as-pathspecs later to maint).
   (merge 7aa9b9b sg/wt-status-header-inclusion later to maint).
   (merge f04c690 as/docfix-reflog-expire-unreachable later to maint).
   (merge 1269847 sg/t3020-typofix later to maint).
   (merge 8b54c23 jc/calloc-pathspec later to maint).
   (merge a6926b8 po/po-readme later to maint).
   (merge 54d160e ss/fix-config-fd-leak later to maint).
   (merge b80fa84 ah/submodule-typofix-in-error later to maint).
   (merge 99885bc ah/reflog-typofix-in-error later to maint).
   (merge 9476c2c ah/read-tree-usage-string later to maint).
   (merge b8c1d27 ah/pack-objects-usage-strings later to maint).
   (merge 486e1e1 br/svn-doc-include-paths-config later to maint).
   (merge 1733ed3 ee/clean-test-fixes later to maint).
   (merge 5fcadc3 gb/apply-comment-typofix later to maint).
   (merge b894d3e mp/t7060-diff-index-test later to maint).
   (merge d238710 as/config-doc-markup-fix later to maint).

----------------------------------------------------------------

Changes since v2.5.0 are as follows:

Alejandro R. Sedeño (1):
      Makefile: use SHELL_PATH when running generate-cmdlist.sh

Alex Henrie (8):
      gitk: Fix bad English grammar "Matches none Commit Info"
      gitk: Remove mc parameter from proc show_error
      reflog: add missing single quote to error message
      git-submodule: remove extraneous space from error message
      pack-objects: place angle brackets around placeholders in usage strings
      read-tree: replace bracket set with parentheses to clarify usage
      show-ref: place angle brackets around variables in usage string
      l10n: ca.po: update translation

Alexander Shopov (2):
      gitk: Update Bulgarian translation (304t)
      gitk: Update Bulgarian translation (307t)

Andreas Schwab (2):
      Documentation/config: fix inconsistent label on gc.*.reflogExpireUnreachable
      Documentation/config: fix formatting for branch.*.rebase and pull.rebase

Antoine Delaite (3):
      bisect: correction of typo
      bisect: replace hardcoded "bad|good" by variables
      bisect: simplify the addition of new bisect terms

Beat Bolli (2):
      gitk: Add a "Copy commit summary" command
      gitk: Adjust the menu line numbers to compensate for the new entry

Brett Randall (1):
      git-svn doc: mention "svn-remote.<name>.include-paths"

Brian Degenhardt (1):
      unpack-trees: populate cache-tree on successful merge

Brian Norris (1):
      send-email: fix uninitialized var warning for $smtp_auth

Charles Bailey (3):
      test-parse-options: update to handle negative ints
      parse-options: move unsigned long option parsing out of pack-objects.c
      untracked: fix detection of uname(2) failure

Christian Couder (3):
      trailer: ignore first line of message
      trailer: retitle a test and correct an in-comment message
      trailer: support multiline title

Clemens Buchacher (1):
      git_open_noatime: return with errno=0 on success

Dave Borowitz (9):
      Documentation/git-push.txt: document when --signed may fail
      Documentation/git-send-pack.txt: wrap long synopsis line
      Documentation/git-send-pack.txt: document --signed
      gitremote-helpers.txt: document pushcert option
      transport: remove git_transport_options.push_cert
      config.c: rename git_config_maybe_bool_text and export it as git_parse_maybe_bool
      builtin/send-pack.c: use parse_options API
      push: support signing pushes iff the server supports it
      push: add a config option push.gpgSign for default signed pushes

David Aguilar (1):
      contrib/subtree: ignore log.date configuration

David Turner (22):
      log: add "log.follow" configuration variable
      unpack-trees: don't update files with CE_WT_REMOVE set
      refs.c: add err arguments to reflog functions
      refs: break out check for reflog autocreation
      refs: new public ref function: safe_create_reflog
      git-reflog: add exists command
      refs: add REF_FORCE_CREATE_REFLOG flag
      update-ref and tag: add --create-reflog arg
      git-stash: use update-ref --create-reflog instead of creating files
      t/t7509: remove unnecessary manipulation of reflog
      tests: remove some direct access to .git/logs
      refs: introduce pseudoref and per-worktree ref concepts
      refs: add ref_type function
      pseudorefs: create and use pseudoref update and delete functions
      bisect: use update_ref
      sequencer: replace write_cherry_pick_head with update_ref
      untracked-cache: support sparse checkout
      worktrees: add find_shared_symref
      notes: handle multiple worktrees
      pseudoref: check return values from read_ref()
      untracked-cache: fix subdirectory handling
      commit: don't rewrite shared index unnecessarily

Edward Thomson (1):
      poll: honor the timeout on Win32

Elia Pinto (1):
      http: add support for specifying the SSL version

Eric Sunshine (31):
      config: rename "gc.pruneWorktreesExpire" to "gc.worktreePruneExpire"
      checkout: avoid resolving HEAD unnecessarily
      checkout: name check_linked_checkouts() more meaningfully
      checkout: improve die_if_checked_out() robustness
      checkout: die_if_checked_out: simplify strbuf management
      checkout: generalize die_if_checked_out() branch name argument
      checkout: check_linked_checkout: improve "already checked out" aesthetic
      checkout: check_linked_checkout: simplify symref parsing
      checkout: teach check_linked_checkout() about symbolic link HEAD
      branch: publish die_if_checked_out()
      worktree: improve worktree setup message
      worktree: simplify new branch (-b/-B) option checking
      worktree: introduce options container
      worktree: make --detach mutually exclusive with -b/-B
      worktree: add: suppress auto-vivication with --detach and no <branch>
      worktree: make branch creation distinct from worktree population
      worktree: elucidate environment variables intended for child processes
      worktree: add_worktree: construct worktree-population command locally
      worktree: detect branch-name/detached and error conditions locally
      worktree: make setup of new HEAD distinct from worktree population
      worktree: avoid resolving HEAD unnecessarily
      worktree: populate via "git reset --hard" rather than "git checkout"
      checkout: drop intimate knowledge of newly created worktree
      Documentation/git-worktree: fix broken 'linkgit' invocation
      Documentation/git: drop outdated Cogito reference
      Documentation/git-tools: improve discoverability of Git wiki
      Documentation/git-tools: fix item text formatting
      Documentation/git-tools: drop references to defunct tools
      Documentation/git-tools: retire manually-maintained list
      Documentation/config: mention "now" and "never" for 'expire' settings
      generate-cmdlist: re-implement as shell script

Erik Elfström (6):
      setup: add gentle version of read_gitfile
      setup: sanity check file size in read_gitfile_gently
      t7300: add tests to document behavior of clean and nested git
      p7300: add performance tests for clean
      clean: improve performance when removing lots of directories
      t7300: fix broken && chains

Galan Rémi (3):
      git-rebase -i: add command "drop" to remove a commit
      git rebase -i: warn about removed commits
      git rebase -i: add static check for commands and SHA-1

Giuseppe Bilotta (2):
      apply: comment grammar fix
      gitk: Accelerators for the main menu

Guillaume Pagès (4):
      status: factor two rebase-related messages together
      status: differentiate interactive from non-interactive rebases
      status: give more information during rebase -i
      status: add new tests for status during rebase -i

Heiko Voigt (4):
      submodule: implement a config API for lookup of .gitmodules values
      submodule: extract functions for config set and lookup
      submodule: use new config API for worktree configurations
      submodule: allow erroneous values for the fetchRecurseSubmodules option

Ilya Bobyr (1):
      rev-parse --parseopt: allow [*=?!] in argument hints

Ismael Luceno (1):
      gitk: Make it easier to go quickly to a specific commit

Jacob Keller (8):
      refs: cleanup comments regarding check_refname_component()
      refs: loosen restriction on wildcard "*" refspecs
      notes: document cat_sort_uniq rewriteMode
      notes: extract enum notes_merge_strategy to notes-utils.h
      notes: extract parse_notes_merge_strategy to notes-utils
      notes: add tests for --commit/--abort/--strategy exclusivity
      notes: add notes.mergeStrategy option to select default strategy
      notes: teach git-notes about notes.<name>.mergeStrategy option

Jan Viktorin (1):
      send-email: provide whitelist of SMTP AUTH mechanisms

Jean-Noel Avila (2):
      l10n: fr.po v2.6.0 round 1 (2441t)
      l10n: fr.po v2.6.0 round 2 (2440t)

Jeff King (51):
      pkt-line: simplify starts_with checks in packet tracing
      pkt-line: tighten sideband PACK check when tracing
      pkt-line: support tracing verbatim pack contents
      cat-file: minor style fix in options list
      cat-file: move batch_options definition to top of file
      cat-file: add --buffer option
      cat-file: stop returning value from batch_one_object
      cat-file: split batch_one_object into two stages
      cat-file: add --batch-all-objects option
      read_gitfile_gently: fix use-after-free
      cat-file: sort and de-dup output of --batch-all-objects
      show-branch: use DATE_RELATIVE instead of magic number
      convert "enum date_mode" into a struct
      introduce "format" date-mode
      strbuf: make strbuf_addftime more robust
      docs/config.txt: reorder hideRefs config
      refs: support negative transfer.hideRefs
      test-lib: turn off "-x" tracing during chain-lint check
      test-lib: disable trace when test is not verbose
      clone: add tests for output directory
      clone: use computed length in guess_dir_name
      cache.h: clarify documentation for git_path, et al
      cache.h: complete set of git_path_submodule helpers
      t5700: modernize style
      add_to_alternates_file: don't add duplicate entries
      prefer git_pathdup to git_path in some possibly-dangerous cases
      prefer mkpathdup to mkpath in assignments
      remote.c: drop extraneous local variable from migrate_file
      refs.c: remove extra git_path calls from read_loose_refs
      path.c: drop git_path_submodule
      refs.c: simplify strbufs in reflog setup and writing
      refs.c: avoid repeated git_path calls in rename_tmp_log
      refs.c: avoid git_path assignment in lock_ref_sha1_basic
      refs.c: remove_empty_directories can take a strbuf
      find_hook: keep our own static buffer
      get_repo_path: refactor path-allocation
      memoize common git-path "constant" files
      vreportf: report to arbitrary filehandles
      vreportf: avoid intermediate buffer
      format_config: don't init strbuf
      format_config: simplify buffer handling
      get_urlmatch: avoid useless strbuf write
      config: silence warnings for command names with invalid keys
      rev-list: make it obvious that we do not support notes
      log: diagnose empty HEAD more clearly
      rerere: release lockfile in non-writing functions
      pack-protocol: clarify LF-handling in PKT-LINE()
      verify_absent: allow filenames longer than PATH_MAX
      notes: use a strbuf in add_non_note
      read_info_alternates: handle paths larger than PATH_MAX
      show-branch: use a strbuf for reflog descriptions

Jiang Xin (8):
      receive-pack: crash when checking with non-exist HEAD
      l10n: TEAMS: stash inactive zh_CN team members
      l10n: zh_CN: Add translations for Git glossary
      i18n: am: fix typo in description of -b option
      l10n: git.pot: v2.6.0 round 1 (123 new, 41 removed)
      l10n: zh_CN: for git v2.6.0 l10n round 1
      l10n: git.pot: v2.6.0 round 2 (3 improvements)
      l10n: zh_CN: for git v2.6.0 l10n round 2

Jim Hill (1):
      strbuf_read(): skip unnecessary strbuf_grow() at eof

Johannes Schindelin (20):
      fsck: introduce fsck options
      fsck: introduce identifiers for fsck messages
      fsck: provide a function to parse fsck message IDs
      fsck: offer a function to demote fsck errors to warnings
      fsck (receive-pack): allow demoting errors to warnings
      fsck: report the ID of the error/warning
      fsck: make fsck_ident() warn-friendly
      fsck: make fsck_commit() warn-friendly
      fsck: handle multiple authors in commits specially
      fsck: make fsck_tag() warn-friendly
      fsck: add a simple test for receive.fsck.<msg-id>
      fsck: disallow demoting grave fsck errors to warnings
      fsck: optionally ignore specific fsck issues completely
      fsck: allow upgrading fsck warnings to errors
      fsck: document the new receive.fsck.<msg-id> options
      fsck: support demoting errors to warnings
      fsck: introduce `git fsck --connectivity-only`
      fsck: git receive-pack: support excluding objects from fsck'ing
      fsck: support ignoring objects in `git fsck` via fsck.skiplist
      am --skip/--abort: merge HEAD/ORIG_HEAD tree into index

Johannes Sixt (2):
      t7300-clean: require POSIXPERM for chmod 0 test
      t2019: skip test requiring '*' in a file name non Windows

Jose F. Morales (1):
      Mingw: verify both ends of the pipe () call

Junio C Hamano (40):
      commit-slab: introduce slabname##_peek() function
      builtin/send-pack.c: respect user.signingkey
      Git 2.4.8
      First batch for 2.6
      sha1_file.c: rename move_temp_to_file() to finalize_object_file()
      Second batch for 2.6
      Third batch for 2.6
      Start preparing for 2.5.1
      Fourth batch for 2.6
      ps_matched: xcalloc() takes nmemb and then element size
      log: rename "tweak" helpers
      log: when --cc is given, default to -p unless told otherwise
      log: show merge commit when --cc is given
      builtin/am: introduce write_state_*() helper functions
      builtin/am: make sure state files are text
      write_file(): drop "fatal" parameter
      write_file_v(): do not leave incomplete line at the end
      write_file(): drop caller-supplied LF from calls to create a one-liner file
      builtin/log.c: minor reformat
      Fifth batch for 2.6
      pull: pass upload_pack only when it was given
      Sixth batch for 2.6
      Git 2.5.1
      Seventh batch for 2.6
      Eighth batch for 2.6
      Ninth batch for 2.6
      Git 2.6-rc0
      Git 2.2.3
      Git 2.3.9
      Git 2.4.9
      Git 2.5.2
      am: match --signoff to the original scripted version
      Git 2.6-rc1
      Release Notes: typofix
      Git 2.6-rc2
      Update RelNotes to 2.6 to describe leftover bits since -rc2
      Git 2.5.3
      Update RelNotes to 2.6
      Git 2.6-rc3
      Git 2.6

Karsten Blees (1):
      Documentation/i18n.txt: clarify character encoding support

Karthik Nayak (12):
      for-each-ref: extract helper functions out of grab_single_ref()
      for-each-ref: clean up code
      for-each-ref: rename 'refinfo' to 'ref_array_item'
      for-each-ref: introduce new structures for better organisation
      for-each-ref: introduce 'ref_array_clear()'
      for-each-ref: rename some functions and make them public
      for-each-ref: rename variables called sort to sorting
      ref-filter: add 'ref-filter.h'
      Documentation/tag: remove double occurance of "<pattern>"
      ref-filter: move code from 'for-each-ref'
      for-each-ref: introduce filter_refs()
      ref-filter: make 'ref_array_item' use a FLEX_ARRAY for refname

Kevin Daudt (1):
      pull: allow dirty tree when rebase.autostash enabled

Lars Schneider (1):
      git-p4: honor core.ignorecase when using P4 client specs

Marc Branchaud (3):
      gitk: Rearrange window title to be more conventional
      gitk: Show the current view's name in the window title
      gitk: Use translated version of "Command line" in getcommitlines

Matthieu Moy (3):
      Documentation/bisect: move getting help section to the end
      pull.sh: quote $upload_pack when passing it to git-fetch
      bisect: don't mix option parsing and non-trivial code

Matthieu Prat (1):
      t7060: actually test "git diff-index --cached -M"

Michael Haggerty (45):
      delete_ref(): move declaration to refs.h
      remove_branches(): remove temporary
      delete_ref(): handle special case more explicitly
      delete_refs(): new function for the refs API
      delete_refs(): make error message more generic
      delete_refs(): bail early if the packed-refs file cannot be rewritten
      prune_remote(): use delete_refs()
      prune_refs(): use delete_refs()
      repack_without_refs(): make function private
      initial_ref_transaction_commit(): function for initial ref creation
      refs: remove some functions from the module's public interface
      initial_ref_transaction_commit(): check for duplicate refs
      initial_ref_transaction_commit(): check for ref D/F conflicts
      refs: move the remaining ref module declarations to refs.h
      refs.h: add some parameter names to function declarations
      check_branch_commit(): make first parameter const
      update_ref(): don't read old reference value before delete
      cmd_update_ref(): make logic more straightforward
      delete_ref(): use the usual convention for old_sha1
      Documentation/bisect: revise overall content
      fast-import: add a get-mark command
      Documentation/git-worktree: consistently use term "linked working tree"
      Documentation/git-worktree: fix incorrect reference to file "locked"
      Documentation/config: fix stale "git prune --worktree" reference
      Documentation/git-worktree: wordsmith worktree-related manpages
      get_remote_group(): handle remotes with single-character names
      get_remote_group(): rename local variable "space" to "wordlen"
      get_remote_group(): eliminate superfluous call to strcspn()
      get_remote_group(): use skip_prefix()
      lockfile: move documentation to lockfile.h and lockfile.c
      create_bundle(): duplicate file descriptor to avoid closing it twice
      lockfile: add accessors get_lock_file_fd() and get_lock_file_fp()
      lockfile: add accessor get_lock_file_path()
      commit_lock_file(): use get_locked_file_path()
      tempfile: a new module for handling temporary files
      prepare_tempfile_object(): new function, extracted from create_tempfile()
      tempfile: add several functions for creating temporary files
      register_tempfile(): new function to handle an existing temporary file
      write_shared_index(): use tempfile module
      setup_temporary_shallow(): use tempfile module
      diff: use tempfile module
      lock_repo_for_gc(): compute the path to "gc.pid" only once
      gc: use tempfile module to handle gc.pid file
      credential-cache--daemon: delete socket from main()
      credential-cache--daemon: use tempfile module

Michael J Gruber (1):
      git-svn: parse authors file more leniently

Michael Rappazzo (2):
      gitk: Add mouse right-click options to copy path and branch name
      git-rebase--interactive.sh: add config option for custom instruction format

Mike Hommey (2):
      Allow to control where the replace refs are looked for
      fast-import: do less work when given "from" matches current branch head

Nguyễn Thái Ngọc Duy (4):
      setup: set env $GIT_WORK_TREE when work tree is set, like $GIT_DIR
      t7063: use --force-untracked-cache to speed up a bit
      untracked cache: fix entry invalidation
      setup: update the right file in multiple checkouts

Patrick Steinhardt (6):
      Documentation/git-worktree: fix duplicated 'from'
      tests: fix broken && chains in t1509-root-worktree
      tests: fix cleanup after tests in t1509-root-worktree
      clone: do not include authentication data in guessed dir
      clone: do not use port number as dir name
      clone: abort if no dir name could be guessed

Paul Mackerras (3):
      gitk: Replace catch {unset foo} with unset -nocomplain foo
      gitk: Fix error when changing colors after closing "List references" window
      gitk: Update .po files

Paul Tan (85):
      t4150: test applying StGit patch
      am: teach StGit patch parser how to read from stdin
      t4150: test applying StGit series
      am: use gmtime() to parse mercurial patch date
      am: teach mercurial patch parser how to read from stdin
      parse-options-cb: implement parse_opt_passthru()
      parse-options-cb: implement parse_opt_passthru_argv()
      argv-array: implement argv_array_pushv()
      pull: implement skeletal builtin pull
      pull: implement fetch + merge
      pull: pass verbosity, --progress flags to fetch and merge
      pull: pass git-merge's options to git-merge
      pull: pass git-fetch's options to git-fetch
      pull: error on no merge candidates
      pull: support pull.ff config
      pull: check if in unresolved merge state
      pull: fast-forward working tree if head is updated
      pull: implement pulling into an unborn branch
      pull: set reflog message
      pull: teach git pull about --rebase
      pull: configure --rebase via branch.<name>.rebase or pull.rebase
      pull --rebase: exit early when the working directory is dirty
      pull --rebase: error on no merge candidate cases
      pull: remove redirection to git-pull.sh
      t4150: am.messageid really adds the message id
      t4150: am fails if index is dirty
      t4151: am --abort will keep dirty index intact
      t4150: am refuses patches when paused
      t4150: am --resolved fails if index has no changes
      t4150: am --resolved fails if index has unmerged entries
      t4150: am with applypatch-msg hook
      t4150: am with pre-applypatch hook
      t4150: am with post-applypatch hook
      t4150: tests for am --[no-]scissors
      t3418: non-interactive rebase --continue with rerere enabled
      t3901: test git-am encoding conversion
      wrapper: implement xopen()
      wrapper: implement xfopen()
      builtin-am: implement skeletal builtin am
      builtin-am: implement patch queue mechanism
      builtin-am: split out mbox/maildir patches with git-mailsplit
      builtin-am: auto-detect mbox patches
      builtin-am: extract patch and commit info with git-mailinfo
      builtin-am: apply patch with git-apply
      builtin-am: implement committing applied patch
      builtin-am: refuse to apply patches if index is dirty
      builtin-am: implement --resolved/--continue
      builtin-am: don't parse mail when resuming
      builtin-am: implement --skip
      builtin-am: implement --abort
      builtin-am: reject patches when there's a session in progress
      builtin-am: implement -q/--quiet
      builtin-am: exit with user friendly message on failure
      builtin-am: implement -s/--signoff
      cache-tree: introduce write_index_as_tree()
      builtin-am: implement --3way
      builtin-am: implement --rebasing mode
      builtin-am: bypass git-mailinfo when --rebasing
      builtin-am: handle stray state directory
      builtin-am: implement -u/--utf8
      builtin-am: implement -k/--keep, --keep-non-patch
      builtin-am: implement --[no-]message-id, am.messageid
      builtin-am: support --keep-cr, am.keepcr
      builtin-am: implement --[no-]scissors
      builtin-am: pass git-apply's options to git-apply
      builtin-am: implement --ignore-date
      builtin-am: implement --committer-date-is-author-date
      builtin-am: implement -S/--gpg-sign, commit.gpgsign
      builtin-am: invoke post-rewrite hook
      builtin-am: support automatic notes copying
      builtin-am: invoke applypatch-msg hook
      builtin-am: invoke pre-applypatch hook
      builtin-am: invoke post-applypatch hook
      builtin-am: rerere support
      builtin-am: support and auto-detect StGit patches
      builtin-am: support and auto-detect StGit series files
      builtin-am: support and auto-detect mercurial patches
      builtin-am: implement -i/--interactive
      builtin-am: implement legacy -b/--binary option
      builtin-am: check for valid committer ident
      builtin-am: remove redirection to git-am.sh
      test_terminal: redirect child process' stdin to a pty
      am: let command-line options override saved options
      am: let --signoff override --no-signoff
      am --skip/--abort: merge HEAD/ORIG_HEAD tree into index

Peter Krefting (2):
      gitk: sv.po: Update Swedish translation (305t0f0u)
      l10n: sv.po: Update Swedish translation (2441t0f0u)

Philip Oakley (2):
      po/README: Update directions for l10n contributors
      doc: show usage of branch description

Phillip Sz (1):
      l10n: de.po: better language for one string

Ralf Thielow (5):
      lockfile: remove function "hold_lock_file_for_append"
      pull: don't mark values for option "rebase" for translation
      tag, update-ref: improve description of option "create-reflog"
      l10n: de.po: translate 123 new messages
      l10n: de.po: translate 2 messages

Ramsay Jones (1):
      mailmap: update my entry with new email address

Ray Chen (10):
      l10n: zh_CN: Update Translation: "tag object"
      l10n: zh_CN: Unify Translation of "packfile"
      l10n: zh_CN: Update Translation of "tag"
      l10n: zh_CN: Add Surrounding Spaces
      l10n: zh_CN: Update Git Glossary: SHA-1
      l10n: zh_CN: Update Git Glossary: "dumb", "smart"
      l10n: zh_CN: Update Git Glossary: tag
      l10n: zh_CN: Update Git Glossary: fork
      l10n: zh_CN: Update Git Glossary: pickaxe
      l10n: zh_CN: Update Git Glossary: "commit message"

Remi Lespinet (11):
      t9001-send-email: move script creation in a setup test
      send-email: allow aliases in patch header and command script outputs
      t9001-send-email: refactor header variable fields replacement
      send-email: refactor address list process
      send-email: allow use of aliases in the From field of --compose mode
      send-email: minor code refactoring
      send-email: reduce dependencies impact on parse_address_line
      send-email: consider quote as delimiter instead of character
      send-email: allow multiple emails using --cc, --to and --bcc
      send-email: suppress meaningless whitespaces in from field
      git-am: add am.threeWay config variable

René Scharfe (3):
      t5004: test ZIP archives with many entries
      archive-zip: use a local variable to store the creator version
      archive-zip: support more than 65535 entries

SZEDER Gábor (8):
      bash prompt: test untracked files status indicator with untracked dirs
      bash prompt: faster untracked status indicator with untracked directories
      config: add '--name-only' option to list only variable names
      completion: list variable names reliably with 'git config --name-only'
      t3020: fix typo in test description
      config: restructure format_config() for better control flow
      wt-status: move #include "pathspec.h" to the header
      describe --contains: default to HEAD when no commit-ish is given

Simon A. Eugster (1):
      checkout: document subtlety around --ours/--theirs

Stefan Beller (4):
      parse-options: align curly braces for all options
      add: remove dead code
      transport-helper: die on errors reading refs.
      read-cache: fix indentation in read_index_from

Sven Strickroth (1):
      config: close config file handle in case of error

Thomas Ackermann (1):
      typofix for index-format.txt

Thomas Braun (1):
      completion: offer '--edit-todo' during interactive rebase

Trần Ngọc Quân (2):
      l10n: Updated Vietnamese translation (2441t)
      l10n: Update and review Vietnamese translation (2440t)

Zoë Blade (1):
      userdiff: add support for Fountain documents

brian m. carlson (7):
      verify-tag: add tests
      verify-tag: share code with verify-commit
      verify-commit: add test for exit status on untrusted signature
      gpg: centralize signature check
      gpg: centralize printing signature buffers
      verify-commit: add option to print raw gpg status information
      verify-tag: add option to print raw gpg status information

^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.6.0-rc3
@ 2015-09-21 21:49  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2015-09-21 21:49 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

A release candidate Git v2.6.0-rc3 is now available for testing
at the usual places.  It is comprised of 478 non-merge commits
since v2.5.0, contributed by 67 people, 15 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.6.0-rc3' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.5.0 are as follows.
Welcome to the Git development community!

  Antoine Delaite, Brett Randall, Brian Degenhardt, Brian Norris,
  Erik Elfström, Galan Rémi, Guillaume Pagès, Ismael Luceno,
  Jan Viktorin, Jose F. Morales, Lars Schneider, Matthieu Prat,
  Michael Rappazzo, Simon A. Eugster, and Zoë Blade.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alejandro R. Sedeño, Alexander Shopov, Alex Henrie, Andreas
  Schwab, Beat Bolli, brian m. carlson, Charles Bailey, Christian
  Couder, Clemens Buchacher, Dave Borowitz, David Aguilar, David
  Turner, Edward Thomson, Elia Pinto, Eric Sunshine, Giuseppe
  Bilotta, Heiko Voigt, Ilya Bobyr, Jacob Keller, Jean-Noel
  Avila, Jeff King, Jiang Xin, Jim Hill, Johannes Schindelin,
  Johannes Sixt, Junio C Hamano, Karsten Blees, Karthik Nayak,
  Kevin Daudt, Marc Branchaud, Matthieu Moy, Michael Haggerty,
  Michael J Gruber, Mike Hommey, Nguyễn Thái Ngọc Duy, Patrick
  Steinhardt, Paul Mackerras, Paul Tan, Peter Krefting, Philip
  Oakley, Phillip Sz, Ralf Thielow, Ramsay Jones, Ray Chen, Remi
  Lespinet, René Scharfe, Stefan Beller, Sven Strickroth, SZEDER
  Gábor, Thomas Ackermann, Thomas Braun, and Trần Ngọc Quân.

----------------------------------------------------------------

Git 2.6 Release Notes (draft)
=============================

Updates since v2.5
------------------

UI, Workflows & Features

 * An asterisk as a substring (as opposed to the entirety) of a path
   component for both side of a refspec, e.g.
   "refs/heads/o*:refs/remotes/heads/i*", is now allowed.

 * New userdiff pattern definition for fountain screenwriting markup
   format has been added.

 * "git log" and friends learned a new "--date=format:..." option to
   format timestamps using system's strftime(3).

 * "git fast-import" learned to respond to the get-mark command via
   its cat-blob-fd interface.

 * "git rebase -i" learned "drop commit-object-name subject" command
   as another way to skip replaying of a commit.

 * A new configuration variable can enable "--follow" automatically
   when "git log" is run with one pathspec argument.

 * "git status" learned to show a more detailed information regarding
   the "rebase -i" session in progress.

 * "git cat-file" learned "--batch-all-objects" option to enumerate all
   available objects in the repository more quickly than "rev-list
   --all --objects" (the output includes unreachable objects, though).

 * "git fsck" learned to ignore errors on a set of known-to-be-bad
   objects, and also allows the warning levels of various kinds of
   non-critical breakages to be tweaked.

 * "git rebase -i"'s list of todo is made configurable.

 * "git send-email" now performs alias-expansion on names that are
   given via --cccmd, etc.

 * An environment variable GIT_REPLACE_REF_BASE tells Git to look into
   refs hierarchy other than refs/replace/ for the object replacement
   data.

 * Allow untracked cache (experimental) to be used when sparse
   checkout (experimental) is also in use.

 * "git pull --rebase" has been taught to pay attention to
   rebase.autostash configuration.

 * The command-line completion script (in contrib/) has been updated.

 * A negative !ref entry in multi-value transfer.hideRefs
   configuration can be used to say "don't hide this one".

 * After "git am" without "-3" stops, running "git am -3" pays attention
   to "-3" only for the patch that caused the original invocation
   to stop.

 * When linked worktree is used, simultaneous "notes merge" instances
   for the same ref in refs/notes/* are prevented from stomping on
   each other.

 * "git send-email" learned a new option --smtp-auth to limit the SMTP
   AUTH mechanisms to be used to a subset of what the system library
   supports.

 * A new configuration variable http.sslVersion can be used to specify
   what specific version of SSL/TLS to use to make a connection.

 * "git notes merge" can be told with "--strategy=<how>" option how to
   automatically handle conflicts; this can now be configured by
   setting notes.mergeStrategy configuration variable.

 * "git log --cc" did not show any patch, even though most of the time
   the user meant "git log --cc -p -m" to see patch output for commits
   with a single parent, and combined diff for merge commits.  The
   command is taught to DWIM "--cc" (without "--raw" and other forms
   of output specification) to "--cc -p -m".

 * "git config --list" output was hard to parse when values consist of
   multiple lines.  "--name-only" option is added to help this.

 * A handful of usability & cosmetic fixes to gitk and l10n updates.

 * A completely empty e-mail address <> is now allowed in the authors
   file used by git-svn, to match the way it accepts the output from
   authors-prog.


Performance, Internal Implementation, Development Support etc.

 * In preparation for allowing different "backends" to store the refs
   in a way different from the traditional "one ref per file in
   $GIT_DIR or in a $GIT_DIR/packed-refs file" filesystem storage,
   direct filesystem access to ref-like things like CHERRY_PICK_HEAD
   from scripts and programs has been reduced.

 * Computation of untracked status indicator by bash prompt
   script (in contrib/) has been optimized.

 * Memory use reduction when commit-slab facility is used to annotate
   sparsely (which is not recommended in the first place).

 * Clean up refs API and make "git clone" less intimate with the
   implementation detail.

 * "git pull" was reimplemented in C.

 * The packet tracing machinery allows to capture an incoming pack
   data to a file for debugging.

 * Move machinery to parse human-readable scaled numbers like 1k, 4M,
   and 2G as an option parameter's value from pack-objects to
   parse-options API, to make it available to other codepaths.

 * "git verify-tag" and "git verify-commit" have been taught to share
   more code, and then learned to optionally show the verification
   message from the underlying GPG implementation.

 * Various enhancements around "git am" reading patches generated by
   foreign SCM have been made.

 * Ref listing by "git branch -l" and "git tag -l" commands has
   started to be rebuilt, based on the for-each-ref machinery.

 * The code to perform multi-tree merges has been taught to repopulate
   the cache-tree upon a successful merge into the index, so that
   subsequent "diff-index --cached" (hence "status") and "write-tree"
   (hence "commit") will go faster.

   The same logic in "git checkout" may now be removed, but that is a
   separate issue.

 * Tests that assume how reflogs are represented on the filesystem too
   much have been corrected.

 * "git am" has been rewritten in "C".

 * git_path() and mkpath() are handy helper functions but it is easy
   to misuse, as the callers need to be careful to keep the number of
   active results below 4.  Their uses have been reduced.

 * The "lockfile" API has been rebuilt on top of a new "tempfile" API.

 * To prepare for allowing a different "ref" backend to be plugged in
   to the system, update_ref()/delete_ref() have been taught about
   ref-like things like MERGE_HEAD that are per-worktree (they will
   always be written to the filesystem inside $GIT_DIR).

 * The gitmodules API that is accessed from the C code learned to
   cache stuff lazily.


Also contains various documentation updates and code clean-ups.


Fixes since v2.5
----------------

Unless otherwise noted, all the fixes since v2.5 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * "git subtree" (in contrib/) depended on "git log" output to be
   stable, which was a no-no.  Apply a workaround to force a
   particular date format.
   (merge e7aac44 da/subtree-date-confusion later to maint).

 * An attempt to delete a ref by pushing into a repository whose HEAD
   symbolic reference points at an unborn branch that cannot be
   created due to ref D/F conflict (e.g. refs/heads/a/b exists, HEAD
   points at refs/heads/a) failed.
   (merge b112b14 jx/do-not-crash-receive-pack-wo-head later to maint).

 * The low-level "git send-pack" did not honor 'user.signingkey'
   configuration variable when sending a signed-push.
   (merge d830d39 db/send-pack-user-signingkey later to maint).

 * "sparse checkout" misbehaved for a path that is excluded from the
   checkout when switching between branches that differ at the path.
   (merge 7d78241 as/sparse-checkout-removal later to maint).

 * An experimental "untracked cache" feature used uname(2) in a
   slightly unportable way.
   (merge 100e433 cb/uname-in-untracked later to maint).

 * A "rebase" replays changes of the local branch on top of something
   else, as such they are placed in stage #3 and referred to as
   "theirs", while the changes in the new base, typically a foreign
   work, are placed in stage #2 and referred to as "ours".  Clarify
   the "checkout --ours/--theirs".
   (merge f303016 se/doc-checkout-ours-theirs later to maint).

 * The "rev-parse --parseopt" mode parsed the option specification
   and the argument hint in a strange way to allow '=' and other
   special characters in the option name while forbidding them from
   the argument hint.  This made it impossible to define an option
   like "--pair <key>=<value>" with "pair=key=value" specification,
   which instead would have defined a "--pair=key <value>" option.
   (merge 2d893df ib/scripted-parse-opt-better-hint-string later to maint).

 * Often a fast-import stream builds a new commit on top of the
   previous commit it built, and it often unconditionally emits a
   "from" command to specify the first parent, which can be omitted in
   such a case.  This caused fast-import to forget the tree of the
   previous commit and then re-read it from scratch, which was
   inefficient.  Optimize for this common case.
   (merge 0df3245 mh/fast-import-optimize-current-from later to maint).

 * Running an aliased command from a subdirectory when the .git thing
   in the working tree is a gitfile pointing elsewhere did not work.
   (merge d95138e nd/export-worktree later to maint).

 * "Is this subdirectory a separate repository that should not be
   touched?" check "git clean" was inefficient.  This was replaced
   with a more optimized check.
   (merge fbf2fec ee/clean-remove-dirs later to maint).

 * The "new-worktree-mode" hack in "checkout" that was added in
   nd/multiple-work-trees topic has been removed by updating the
   implementation of new "worktree add".
   (merge 65f9b75 es/worktree-add-cleanup later to maint).

 * Remove remaining cruft from  "git checkout --to", which
   transitioned to "git worktree add".
   (merge 114ff88 es/worktree-add later to maint).

 * An off-by-one error made "git remote" to mishandle a remote with a
   single letter nickname.
   (merge bc598c3 mh/get-remote-group-fix later to maint).

 * "git clone $URL", when cloning from a site whose sole purpose is to
   host a single repository (hence, no path after <scheme>://<site>/),
   tried to use the site name as the new repository name, but did not
   remove username or password when <site> part was of the form
   <user>@<pass>:<host>.  The code is taught to redact these.
   (merge adef956 ps/guess-repo-name-at-root later to maint).

 * Running tests with the "-x" option to make them verbose had some
   unpleasant interactions with other features of the test suite.
   (merge 9b5fe78 jk/test-with-x later to maint).

 * t1509 test that requires a dedicated VM environment had some
   bitrot, which has been corrected.
   (merge faacc5a ps/t1509-chroot-test-fixup later to maint).

 * "git pull" in recent releases of Git has a regression in the code
   that allows custom path to the --upload-pack=<program>.  This has
   been corrected.

   Note that this is irrelevant for 'master' with "git pull" rewritten
   in C.
   (merge 13e0e28 mm/pull-upload-pack later to maint).

 * When trying to see that an object does not exist, a state errno
   leaked from our "first try to open a packfile with O_NOATIME and
   then if it fails retry without it" logic on a system that refuses
   O_NOATIME.  This confused us and caused us to die, saying that the
   packfile is unreadable, when we should have just reported that the
   object does not exist in that packfile to the caller.
   (merge dff6f28 cb/open-noatime-clear-errno later to maint).

 * The codepath to produce error messages had a hard-coded limit to
   the size of the message, primarily to avoid memory allocation while
   calling die().
   (merge f4c3edc jk/long-error-messages later to maint).

 * strbuf_read() used to have one extra iteration (and an unnecessary
   strbuf_grow() of 8kB), which was eliminated.
   (merge 3ebbd00 jh/strbuf-read-use-read-in-full later to maint).

 * We rewrote one of the build scripts in Perl but this reimplements
   in Bourne shell.
   (merge 57cee8a sg/help-group later to maint).

 * The experimental untracked-cache feature were buggy when paths with
   a few levels of subdirectories are involved.
   (merge 73f9145 dt/untracked-subdir later to maint).

 * "interpret-trailers" helper mistook a single-liner log message that
   has a colon as the end of existing trailer.

 * The "interpret-trailers" helper mistook a multi-paragraph title of
   a commit log message with a colon in it as the end of the trailer
   block.
   (merge 5c99995 cc/trailers-corner-case-fix later to maint).

 * "git describe" without argument defaulted to describe the HEAD
   commit, but "git describe --contains" didn't.  Arguably, in a
   repository used for active development, such defaulting would not
   be very useful as the tip of branch is typically not tagged, but it
   is better to be consistent.
   (merge 2bd0706 sg/describe-contains later to maint).

 * The client side codepaths in "git push" have been cleaned up
   and the user can request to perform an optional "signed push",
   i.e. sign only when the other end accepts signed push.
   (merge 68c757f db/push-sign-if-asked later to maint).

 * Because the configuration system does not allow "alias.0foo" and
   "pager.0foo" as the configuration key, the user cannot use '0foo'
   as a custom command name anyway, but "git 0foo" tried to look these
   keys up and emitted useless warnings before saying '0foo is not a
   git command'.  These warning messages have been squelched.
   (merge 9e9de18 jk/fix-alias-pager-config-key-warnings later to maint).

 * "git rev-list" does not take "--notes" option, but did not complain
   when one is given.
   (merge 2aea7a5 jk/rev-list-has-no-notes later to maint).

 * When re-priming the cache-tree opportunistically while committing
   the in-core index as-is, we mistakenly invalidated the in-core
   index too aggressively, causing the experimental split-index code
   to unnecessarily rewrite the on-disk index file(s).
   (merge 475a344 dt/commit-preserve-base-index-upon-opportunistic-cache-tree-update later to maint).

 * "git archive" did not use zip64 extension when creating an archive
   with more than 64k entries, which nobody should need, right ;-)?
   (merge 88329ca rs/archive-zip-many later to maint).

 * The code in "multiple-worktree" support that attempted to recover
   from an inconsistent state updated an incorrect file.
   (merge 82fde87 nd/fixup-linked-gitdir later to maint).

 * On case insensitive systems, "git p4" did not work well with client
   specs.

 * "git init empty && git -C empty log" said "bad default revision 'HEAD'",
   which was found to be a bit confusing to new users.
   (merge ce11360 jk/log-missing-default-HEAD later to maint).

 * Recent versions of scripted "git am" has a performance regression in
   "git am --skip" codepath, which no longer exists in the built-in
   version on the 'master' front.  Fix the regression in the last
   scripted version that appear in 2.5.x maintenance track and older.
   (merge b9d6689 js/maint-am-skip-performance-regression later to maint).

 * The branch descriptions that are set with "git branch --edit-description"
   option were used in many places but they weren't clearly documented.
   (merge 561d2b7 po/doc-branch-desc later to maint).

 * Code cleanups and documentation updates.
   (merge 1c601af es/doc-clean-outdated-tools later to maint).
   (merge 3581304 kn/tag-doc-fix later to maint).
   (merge 3a59e59 kb/i18n-doc later to maint).
   (merge 45abdee sb/remove-unused-var-from-builtin-add later to maint).
   (merge 14691e3 sb/parse-options-codeformat later to maint).
   (merge 4a6ada3 ad/bisect-cleanup later to maint).
   (merge da4c5ad ta/docfix-index-format-tech later to maint).
   (merge ae25fd3 sb/check-return-from-read-ref later to maint).
   (merge b3325df nd/dwim-wildcards-as-pathspecs later to maint).
   (merge 7aa9b9b sg/wt-status-header-inclusion later to maint).
   (merge f04c690 as/docfix-reflog-expire-unreachable later to maint).
   (merge 1269847 sg/t3020-typofix later to maint).
   (merge 8b54c23 jc/calloc-pathspec later to maint).
   (merge a6926b8 po/po-readme later to maint).
   (merge 54d160e ss/fix-config-fd-leak later to maint).
   (merge b80fa84 ah/submodule-typofix-in-error later to maint).
   (merge 99885bc ah/reflog-typofix-in-error later to maint).
   (merge 9476c2c ah/read-tree-usage-string later to maint).
   (merge b8c1d27 ah/pack-objects-usage-strings later to maint).
   (merge 486e1e1 br/svn-doc-include-paths-config later to maint).
   (merge 1733ed3 ee/clean-test-fixes later to maint).
   (merge 5fcadc3 gb/apply-comment-typofix later to maint).
   (merge b894d3e mp/t7060-diff-index-test later to maint).
   (merge d238710 as/config-doc-markup-fix later to maint).

----------------------------------------------------------------

Changes since v2.5.0 are as follows:

Alejandro R. Sedeño (1):
      Makefile: use SHELL_PATH when running generate-cmdlist.sh

Alex Henrie (8):
      gitk: Fix bad English grammar "Matches none Commit Info"
      gitk: Remove mc parameter from proc show_error
      reflog: add missing single quote to error message
      git-submodule: remove extraneous space from error message
      pack-objects: place angle brackets around placeholders in usage strings
      read-tree: replace bracket set with parentheses to clarify usage
      show-ref: place angle brackets around variables in usage string
      l10n: ca.po: update translation

Alexander Shopov (2):
      gitk: Update Bulgarian translation (304t)
      gitk: Update Bulgarian translation (307t)

Andreas Schwab (2):
      Documentation/config: fix inconsistent label on gc.*.reflogExpireUnreachable
      Documentation/config: fix formatting for branch.*.rebase and pull.rebase

Antoine Delaite (3):
      bisect: correction of typo
      bisect: replace hardcoded "bad|good" by variables
      bisect: simplify the addition of new bisect terms

Beat Bolli (2):
      gitk: Add a "Copy commit summary" command
      gitk: Adjust the menu line numbers to compensate for the new entry

Brett Randall (1):
      git-svn doc: mention "svn-remote.<name>.include-paths"

Brian Degenhardt (1):
      unpack-trees: populate cache-tree on successful merge

Brian Norris (1):
      send-email: fix uninitialized var warning for $smtp_auth

Charles Bailey (3):
      test-parse-options: update to handle negative ints
      parse-options: move unsigned long option parsing out of pack-objects.c
      untracked: fix detection of uname(2) failure

Christian Couder (3):
      trailer: ignore first line of message
      trailer: retitle a test and correct an in-comment message
      trailer: support multiline title

Clemens Buchacher (1):
      git_open_noatime: return with errno=0 on success

Dave Borowitz (9):
      Documentation/git-push.txt: document when --signed may fail
      Documentation/git-send-pack.txt: wrap long synopsis line
      Documentation/git-send-pack.txt: document --signed
      gitremote-helpers.txt: document pushcert option
      transport: remove git_transport_options.push_cert
      config.c: rename git_config_maybe_bool_text and export it as git_parse_maybe_bool
      builtin/send-pack.c: use parse_options API
      push: support signing pushes iff the server supports it
      push: add a config option push.gpgSign for default signed pushes

David Aguilar (1):
      contrib/subtree: ignore log.date configuration

David Turner (22):
      log: add "log.follow" configuration variable
      unpack-trees: don't update files with CE_WT_REMOVE set
      refs.c: add err arguments to reflog functions
      refs: break out check for reflog autocreation
      refs: new public ref function: safe_create_reflog
      git-reflog: add exists command
      refs: add REF_FORCE_CREATE_REFLOG flag
      update-ref and tag: add --create-reflog arg
      git-stash: use update-ref --create-reflog instead of creating files
      t/t7509: remove unnecessary manipulation of reflog
      tests: remove some direct access to .git/logs
      refs: introduce pseudoref and per-worktree ref concepts
      refs: add ref_type function
      pseudorefs: create and use pseudoref update and delete functions
      bisect: use update_ref
      sequencer: replace write_cherry_pick_head with update_ref
      untracked-cache: support sparse checkout
      worktrees: add find_shared_symref
      notes: handle multiple worktrees
      pseudoref: check return values from read_ref()
      untracked-cache: fix subdirectory handling
      commit: don't rewrite shared index unnecessarily

Edward Thomson (1):
      poll: honor the timeout on Win32

Elia Pinto (1):
      http: add support for specifying the SSL version

Eric Sunshine (31):
      config: rename "gc.pruneWorktreesExpire" to "gc.worktreePruneExpire"
      checkout: avoid resolving HEAD unnecessarily
      checkout: name check_linked_checkouts() more meaningfully
      checkout: improve die_if_checked_out() robustness
      checkout: die_if_checked_out: simplify strbuf management
      checkout: generalize die_if_checked_out() branch name argument
      checkout: check_linked_checkout: improve "already checked out" aesthetic
      checkout: check_linked_checkout: simplify symref parsing
      checkout: teach check_linked_checkout() about symbolic link HEAD
      branch: publish die_if_checked_out()
      worktree: improve worktree setup message
      worktree: simplify new branch (-b/-B) option checking
      worktree: introduce options container
      worktree: make --detach mutually exclusive with -b/-B
      worktree: add: suppress auto-vivication with --detach and no <branch>
      worktree: make branch creation distinct from worktree population
      worktree: elucidate environment variables intended for child processes
      worktree: add_worktree: construct worktree-population command locally
      worktree: detect branch-name/detached and error conditions locally
      worktree: make setup of new HEAD distinct from worktree population
      worktree: avoid resolving HEAD unnecessarily
      worktree: populate via "git reset --hard" rather than "git checkout"
      checkout: drop intimate knowledge of newly created worktree
      Documentation/git-worktree: fix broken 'linkgit' invocation
      Documentation/git: drop outdated Cogito reference
      Documentation/git-tools: improve discoverability of Git wiki
      Documentation/git-tools: fix item text formatting
      Documentation/git-tools: drop references to defunct tools
      Documentation/git-tools: retire manually-maintained list
      Documentation/config: mention "now" and "never" for 'expire' settings
      generate-cmdlist: re-implement as shell script

Erik Elfström (6):
      setup: add gentle version of read_gitfile
      setup: sanity check file size in read_gitfile_gently
      t7300: add tests to document behavior of clean and nested git
      p7300: add performance tests for clean
      clean: improve performance when removing lots of directories
      t7300: fix broken && chains

Galan Rémi (3):
      git-rebase -i: add command "drop" to remove a commit
      git rebase -i: warn about removed commits
      git rebase -i: add static check for commands and SHA-1

Giuseppe Bilotta (2):
      apply: comment grammar fix
      gitk: Accelerators for the main menu

Guillaume Pagès (4):
      status: factor two rebase-related messages together
      status: differentiate interactive from non-interactive rebases
      status: give more information during rebase -i
      status: add new tests for status during rebase -i

Heiko Voigt (4):
      submodule: implement a config API for lookup of .gitmodules values
      submodule: extract functions for config set and lookup
      submodule: use new config API for worktree configurations
      submodule: allow erroneous values for the fetchRecurseSubmodules option

Ilya Bobyr (1):
      rev-parse --parseopt: allow [*=?!] in argument hints

Ismael Luceno (1):
      gitk: Make it easier to go quickly to a specific commit

Jacob Keller (8):
      refs: cleanup comments regarding check_refname_component()
      refs: loosen restriction on wildcard "*" refspecs
      notes: document cat_sort_uniq rewriteMode
      notes: extract enum notes_merge_strategy to notes-utils.h
      notes: extract parse_notes_merge_strategy to notes-utils
      notes: add tests for --commit/--abort/--strategy exclusivity
      notes: add notes.mergeStrategy option to select default strategy
      notes: teach git-notes about notes.<name>.mergeStrategy option

Jan Viktorin (1):
      send-email: provide whitelist of SMTP AUTH mechanisms

Jean-Noel Avila (2):
      l10n: fr.po v2.6.0 round 1 (2441t)
      l10n: fr.po v2.6.0 round 2 (2440t)

Jeff King (51):
      pkt-line: simplify starts_with checks in packet tracing
      pkt-line: tighten sideband PACK check when tracing
      pkt-line: support tracing verbatim pack contents
      cat-file: minor style fix in options list
      cat-file: move batch_options definition to top of file
      cat-file: add --buffer option
      cat-file: stop returning value from batch_one_object
      cat-file: split batch_one_object into two stages
      cat-file: add --batch-all-objects option
      read_gitfile_gently: fix use-after-free
      cat-file: sort and de-dup output of --batch-all-objects
      show-branch: use DATE_RELATIVE instead of magic number
      convert "enum date_mode" into a struct
      introduce "format" date-mode
      strbuf: make strbuf_addftime more robust
      docs/config.txt: reorder hideRefs config
      refs: support negative transfer.hideRefs
      test-lib: turn off "-x" tracing during chain-lint check
      test-lib: disable trace when test is not verbose
      clone: add tests for output directory
      clone: use computed length in guess_dir_name
      cache.h: clarify documentation for git_path, et al
      cache.h: complete set of git_path_submodule helpers
      t5700: modernize style
      add_to_alternates_file: don't add duplicate entries
      prefer git_pathdup to git_path in some possibly-dangerous cases
      prefer mkpathdup to mkpath in assignments
      remote.c: drop extraneous local variable from migrate_file
      refs.c: remove extra git_path calls from read_loose_refs
      path.c: drop git_path_submodule
      refs.c: simplify strbufs in reflog setup and writing
      refs.c: avoid repeated git_path calls in rename_tmp_log
      refs.c: avoid git_path assignment in lock_ref_sha1_basic
      refs.c: remove_empty_directories can take a strbuf
      find_hook: keep our own static buffer
      get_repo_path: refactor path-allocation
      memoize common git-path "constant" files
      vreportf: report to arbitrary filehandles
      vreportf: avoid intermediate buffer
      format_config: don't init strbuf
      format_config: simplify buffer handling
      get_urlmatch: avoid useless strbuf write
      config: silence warnings for command names with invalid keys
      rev-list: make it obvious that we do not support notes
      log: diagnose empty HEAD more clearly
      rerere: release lockfile in non-writing functions
      pack-protocol: clarify LF-handling in PKT-LINE()
      verify_absent: allow filenames longer than PATH_MAX
      notes: use a strbuf in add_non_note
      read_info_alternates: handle paths larger than PATH_MAX
      show-branch: use a strbuf for reflog descriptions

Jiang Xin (8):
      receive-pack: crash when checking with non-exist HEAD
      l10n: TEAMS: stash inactive zh_CN team members
      l10n: zh_CN: Add translations for Git glossary
      i18n: am: fix typo in description of -b option
      l10n: git.pot: v2.6.0 round 1 (123 new, 41 removed)
      l10n: zh_CN: for git v2.6.0 l10n round 1
      l10n: git.pot: v2.6.0 round 2 (3 improvements)
      l10n: zh_CN: for git v2.6.0 l10n round 2

Jim Hill (1):
      strbuf_read(): skip unnecessary strbuf_grow() at eof

Johannes Schindelin (20):
      fsck: introduce fsck options
      fsck: introduce identifiers for fsck messages
      fsck: provide a function to parse fsck message IDs
      fsck: offer a function to demote fsck errors to warnings
      fsck (receive-pack): allow demoting errors to warnings
      fsck: report the ID of the error/warning
      fsck: make fsck_ident() warn-friendly
      fsck: make fsck_commit() warn-friendly
      fsck: handle multiple authors in commits specially
      fsck: make fsck_tag() warn-friendly
      fsck: add a simple test for receive.fsck.<msg-id>
      fsck: disallow demoting grave fsck errors to warnings
      fsck: optionally ignore specific fsck issues completely
      fsck: allow upgrading fsck warnings to errors
      fsck: document the new receive.fsck.<msg-id> options
      fsck: support demoting errors to warnings
      fsck: introduce `git fsck --connectivity-only`
      fsck: git receive-pack: support excluding objects from fsck'ing
      fsck: support ignoring objects in `git fsck` via fsck.skiplist
      am --skip/--abort: merge HEAD/ORIG_HEAD tree into index

Johannes Sixt (2):
      t7300-clean: require POSIXPERM for chmod 0 test
      t2019: skip test requiring '*' in a file name non Windows

Jose F. Morales (1):
      Mingw: verify both ends of the pipe () call

Junio C Hamano (39):
      commit-slab: introduce slabname##_peek() function
      builtin/send-pack.c: respect user.signingkey
      Git 2.4.8
      First batch for 2.6
      sha1_file.c: rename move_temp_to_file() to finalize_object_file()
      Second batch for 2.6
      Third batch for 2.6
      Start preparing for 2.5.1
      Fourth batch for 2.6
      ps_matched: xcalloc() takes nmemb and then element size
      log: rename "tweak" helpers
      log: when --cc is given, default to -p unless told otherwise
      log: show merge commit when --cc is given
      builtin/am: introduce write_state_*() helper functions
      builtin/am: make sure state files are text
      write_file(): drop "fatal" parameter
      write_file_v(): do not leave incomplete line at the end
      write_file(): drop caller-supplied LF from calls to create a one-liner file
      builtin/log.c: minor reformat
      Fifth batch for 2.6
      pull: pass upload_pack only when it was given
      Sixth batch for 2.6
      Git 2.5.1
      Seventh batch for 2.6
      Eighth batch for 2.6
      Ninth batch for 2.6
      Git 2.6-rc0
      Git 2.2.3
      Git 2.3.9
      Git 2.4.9
      Git 2.5.2
      am: match --signoff to the original scripted version
      Git 2.6-rc1
      Release Notes: typofix
      Git 2.6-rc2
      Update RelNotes to 2.6 to describe leftover bits since -rc2
      Git 2.5.3
      Update RelNotes to 2.6
      Git 2.6-rc3

Karsten Blees (1):
      Documentation/i18n.txt: clarify character encoding support

Karthik Nayak (12):
      for-each-ref: extract helper functions out of grab_single_ref()
      for-each-ref: clean up code
      for-each-ref: rename 'refinfo' to 'ref_array_item'
      for-each-ref: introduce new structures for better organisation
      for-each-ref: introduce 'ref_array_clear()'
      for-each-ref: rename some functions and make them public
      for-each-ref: rename variables called sort to sorting
      ref-filter: add 'ref-filter.h'
      Documentation/tag: remove double occurance of "<pattern>"
      ref-filter: move code from 'for-each-ref'
      for-each-ref: introduce filter_refs()
      ref-filter: make 'ref_array_item' use a FLEX_ARRAY for refname

Kevin Daudt (1):
      pull: allow dirty tree when rebase.autostash enabled

Lars Schneider (1):
      git-p4: honor core.ignorecase when using P4 client specs

Marc Branchaud (3):
      gitk: Rearrange window title to be more conventional
      gitk: Show the current view's name in the window title
      gitk: Use translated version of "Command line" in getcommitlines

Matthieu Moy (3):
      Documentation/bisect: move getting help section to the end
      pull.sh: quote $upload_pack when passing it to git-fetch
      bisect: don't mix option parsing and non-trivial code

Matthieu Prat (1):
      t7060: actually test "git diff-index --cached -M"

Michael Haggerty (45):
      delete_ref(): move declaration to refs.h
      remove_branches(): remove temporary
      delete_ref(): handle special case more explicitly
      delete_refs(): new function for the refs API
      delete_refs(): make error message more generic
      delete_refs(): bail early if the packed-refs file cannot be rewritten
      prune_remote(): use delete_refs()
      prune_refs(): use delete_refs()
      repack_without_refs(): make function private
      initial_ref_transaction_commit(): function for initial ref creation
      refs: remove some functions from the module's public interface
      initial_ref_transaction_commit(): check for duplicate refs
      initial_ref_transaction_commit(): check for ref D/F conflicts
      refs: move the remaining ref module declarations to refs.h
      refs.h: add some parameter names to function declarations
      check_branch_commit(): make first parameter const
      update_ref(): don't read old reference value before delete
      cmd_update_ref(): make logic more straightforward
      delete_ref(): use the usual convention for old_sha1
      Documentation/bisect: revise overall content
      fast-import: add a get-mark command
      Documentation/git-worktree: consistently use term "linked working tree"
      Documentation/git-worktree: fix incorrect reference to file "locked"
      Documentation/config: fix stale "git prune --worktree" reference
      Documentation/git-worktree: wordsmith worktree-related manpages
      get_remote_group(): handle remotes with single-character names
      get_remote_group(): rename local variable "space" to "wordlen"
      get_remote_group(): eliminate superfluous call to strcspn()
      get_remote_group(): use skip_prefix()
      lockfile: move documentation to lockfile.h and lockfile.c
      create_bundle(): duplicate file descriptor to avoid closing it twice
      lockfile: add accessors get_lock_file_fd() and get_lock_file_fp()
      lockfile: add accessor get_lock_file_path()
      commit_lock_file(): use get_locked_file_path()
      tempfile: a new module for handling temporary files
      prepare_tempfile_object(): new function, extracted from create_tempfile()
      tempfile: add several functions for creating temporary files
      register_tempfile(): new function to handle an existing temporary file
      write_shared_index(): use tempfile module
      setup_temporary_shallow(): use tempfile module
      diff: use tempfile module
      lock_repo_for_gc(): compute the path to "gc.pid" only once
      gc: use tempfile module to handle gc.pid file
      credential-cache--daemon: delete socket from main()
      credential-cache--daemon: use tempfile module

Michael J Gruber (1):
      git-svn: parse authors file more leniently

Michael Rappazzo (2):
      gitk: Add mouse right-click options to copy path and branch name
      git-rebase--interactive.sh: add config option for custom instruction format

Mike Hommey (2):
      Allow to control where the replace refs are looked for
      fast-import: do less work when given "from" matches current branch head

Nguyễn Thái Ngọc Duy (4):
      setup: set env $GIT_WORK_TREE when work tree is set, like $GIT_DIR
      t7063: use --force-untracked-cache to speed up a bit
      untracked cache: fix entry invalidation
      setup: update the right file in multiple checkouts

Patrick Steinhardt (6):
      Documentation/git-worktree: fix duplicated 'from'
      tests: fix broken && chains in t1509-root-worktree
      tests: fix cleanup after tests in t1509-root-worktree
      clone: do not include authentication data in guessed dir
      clone: do not use port number as dir name
      clone: abort if no dir name could be guessed

Paul Mackerras (3):
      gitk: Replace catch {unset foo} with unset -nocomplain foo
      gitk: Fix error when changing colors after closing "List references" window
      gitk: Update .po files

Paul Tan (85):
      t4150: test applying StGit patch
      am: teach StGit patch parser how to read from stdin
      t4150: test applying StGit series
      am: use gmtime() to parse mercurial patch date
      am: teach mercurial patch parser how to read from stdin
      parse-options-cb: implement parse_opt_passthru()
      parse-options-cb: implement parse_opt_passthru_argv()
      argv-array: implement argv_array_pushv()
      pull: implement skeletal builtin pull
      pull: implement fetch + merge
      pull: pass verbosity, --progress flags to fetch and merge
      pull: pass git-merge's options to git-merge
      pull: pass git-fetch's options to git-fetch
      pull: error on no merge candidates
      pull: support pull.ff config
      pull: check if in unresolved merge state
      pull: fast-forward working tree if head is updated
      pull: implement pulling into an unborn branch
      pull: set reflog message
      pull: teach git pull about --rebase
      pull: configure --rebase via branch.<name>.rebase or pull.rebase
      pull --rebase: exit early when the working directory is dirty
      pull --rebase: error on no merge candidate cases
      pull: remove redirection to git-pull.sh
      t4150: am.messageid really adds the message id
      t4150: am fails if index is dirty
      t4151: am --abort will keep dirty index intact
      t4150: am refuses patches when paused
      t4150: am --resolved fails if index has no changes
      t4150: am --resolved fails if index has unmerged entries
      t4150: am with applypatch-msg hook
      t4150: am with pre-applypatch hook
      t4150: am with post-applypatch hook
      t4150: tests for am --[no-]scissors
      t3418: non-interactive rebase --continue with rerere enabled
      t3901: test git-am encoding conversion
      wrapper: implement xopen()
      wrapper: implement xfopen()
      builtin-am: implement skeletal builtin am
      builtin-am: implement patch queue mechanism
      builtin-am: split out mbox/maildir patches with git-mailsplit
      builtin-am: auto-detect mbox patches
      builtin-am: extract patch and commit info with git-mailinfo
      builtin-am: apply patch with git-apply
      builtin-am: implement committing applied patch
      builtin-am: refuse to apply patches if index is dirty
      builtin-am: implement --resolved/--continue
      builtin-am: don't parse mail when resuming
      builtin-am: implement --skip
      builtin-am: implement --abort
      builtin-am: reject patches when there's a session in progress
      builtin-am: implement -q/--quiet
      builtin-am: exit with user friendly message on failure
      builtin-am: implement -s/--signoff
      cache-tree: introduce write_index_as_tree()
      builtin-am: implement --3way
      builtin-am: implement --rebasing mode
      builtin-am: bypass git-mailinfo when --rebasing
      builtin-am: handle stray state directory
      builtin-am: implement -u/--utf8
      builtin-am: implement -k/--keep, --keep-non-patch
      builtin-am: implement --[no-]message-id, am.messageid
      builtin-am: support --keep-cr, am.keepcr
      builtin-am: implement --[no-]scissors
      builtin-am: pass git-apply's options to git-apply
      builtin-am: implement --ignore-date
      builtin-am: implement --committer-date-is-author-date
      builtin-am: implement -S/--gpg-sign, commit.gpgsign
      builtin-am: invoke post-rewrite hook
      builtin-am: support automatic notes copying
      builtin-am: invoke applypatch-msg hook
      builtin-am: invoke pre-applypatch hook
      builtin-am: invoke post-applypatch hook
      builtin-am: rerere support
      builtin-am: support and auto-detect StGit patches
      builtin-am: support and auto-detect StGit series files
      builtin-am: support and auto-detect mercurial patches
      builtin-am: implement -i/--interactive
      builtin-am: implement legacy -b/--binary option
      builtin-am: check for valid committer ident
      builtin-am: remove redirection to git-am.sh
      test_terminal: redirect child process' stdin to a pty
      am: let command-line options override saved options
      am: let --signoff override --no-signoff
      am --skip/--abort: merge HEAD/ORIG_HEAD tree into index

Peter Krefting (2):
      gitk: sv.po: Update Swedish translation (305t0f0u)
      l10n: sv.po: Update Swedish translation (2441t0f0u)

Philip Oakley (2):
      po/README: Update directions for l10n contributors
      doc: show usage of branch description

Phillip Sz (1):
      l10n: de.po: better language for one string

Ralf Thielow (5):
      lockfile: remove function "hold_lock_file_for_append"
      pull: don't mark values for option "rebase" for translation
      tag, update-ref: improve description of option "create-reflog"
      l10n: de.po: translate 123 new messages
      l10n: de.po: translate 2 messages

Ramsay Jones (1):
      mailmap: update my entry with new email address

Ray Chen (10):
      l10n: zh_CN: Update Translation: "tag object"
      l10n: zh_CN: Unify Translation of "packfile"
      l10n: zh_CN: Update Translation of "tag"
      l10n: zh_CN: Add Surrounding Spaces
      l10n: zh_CN: Update Git Glossary: SHA-1
      l10n: zh_CN: Update Git Glossary: "dumb", "smart"
      l10n: zh_CN: Update Git Glossary: tag
      l10n: zh_CN: Update Git Glossary: fork
      l10n: zh_CN: Update Git Glossary: pickaxe
      l10n: zh_CN: Update Git Glossary: "commit message"

Remi Lespinet (11):
      t9001-send-email: move script creation in a setup test
      send-email: allow aliases in patch header and command script outputs
      t9001-send-email: refactor header variable fields replacement
      send-email: refactor address list process
      send-email: allow use of aliases in the From field of --compose mode
      send-email: minor code refactoring
      send-email: reduce dependencies impact on parse_address_line
      send-email: consider quote as delimiter instead of character
      send-email: allow multiple emails using --cc, --to and --bcc
      send-email: suppress meaningless whitespaces in from field
      git-am: add am.threeWay config variable

René Scharfe (3):
      t5004: test ZIP archives with many entries
      archive-zip: use a local variable to store the creator version
      archive-zip: support more than 65535 entries

SZEDER Gábor (8):
      bash prompt: test untracked files status indicator with untracked dirs
      bash prompt: faster untracked status indicator with untracked directories
      config: add '--name-only' option to list only variable names
      completion: list variable names reliably with 'git config --name-only'
      t3020: fix typo in test description
      config: restructure format_config() for better control flow
      wt-status: move #include "pathspec.h" to the header
      describe --contains: default to HEAD when no commit-ish is given

Simon A. Eugster (1):
      checkout: document subtlety around --ours/--theirs

Stefan Beller (4):
      parse-options: align curly braces for all options
      add: remove dead code
      transport-helper: die on errors reading refs.
      read-cache: fix indentation in read_index_from

Sven Strickroth (1):
      config: close config file handle in case of error

Thomas Ackermann (1):
      typofix for index-format.txt

Thomas Braun (1):
      completion: offer '--edit-todo' during interactive rebase

Trần Ngọc Quân (2):
      l10n: Updated Vietnamese translation (2441t)
      l10n: Update and review Vietnamese translation (2440t)

Zoë Blade (1):
      userdiff: add support for Fountain documents

brian m. carlson (7):
      verify-tag: add tests
      verify-tag: share code with verify-commit
      verify-commit: add test for exit status on untrusted signature
      gpg: centralize signature check
      gpg: centralize printing signature buffers
      verify-commit: add option to print raw gpg status information
      verify-tag: add option to print raw gpg status information

^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.6.0-rc1
@ 2015-09-09  0:09  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2015-09-09  0:09 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

A release candidate Git v2.6.0-rc1 is now available for testing
at the usual places.  It is comprised of 409 non-merge commits
since v2.5.0, contributed by 50 people, 12 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.6.0-rc1' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.5.0 are as follows.
Welcome to the Git development community!

  Antoine Delaite, Brett Randall, Brian Degenhardt, Erik Elfström,
  Galan Rémi, Guillaume Pagès, Jan Viktorin, Jose F. Morales,
  Lars Schneider, Michael Rappazzo, Simon A. Eugster, and Zoë
  Blade.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alex Henrie, Andreas Schwab, brian m. carlson, Charles Bailey,
  Christian Couder, Clemens Buchacher, Dave Borowitz, David
  Aguilar, David Turner, Elia Pinto, Eric Sunshine, Heiko
  Voigt, Ilya Bobyr, Jacob Keller, Jeff King, Jiang Xin, Jim
  Hill, Johannes Schindelin, Johannes Sixt, Junio C Hamano,
  Karsten Blees, Karthik Nayak, Kevin Daudt, Matthieu Moy,
  Michael Haggerty, Mike Hommey, Nguyễn Thái Ngọc Duy,
  Patrick Steinhardt, Paul Tan, Philip Oakley, Ralf Thielow,
  Remi Lespinet, René Scharfe, Stefan Beller, Sven Strickroth,
  SZEDER Gábor, Thomas Ackermann, and Thomas Braun.

----------------------------------------------------------------

Git 2.6 Release Notes (draft)
=============================

Updates since v2.5
------------------

UI, Workflows & Features

 * An asterisk as a substring (as opposed to the entirety) of a path
   component for both side of a refspec, e.g.
   "refs/heads/o*:refs/remotes/heads/i*", is now allowed.

 * New userdiff pattern definition for fountain screenwriting markup
   format has been added.

 * "git log" and friends learned a new "--date=format:..." option to
   format timestamps using system's strftime(3).

 * "git fast-import" learned to respond to the get-mark command via
   its cat-blob-fd interface.

 * "git rebase -i" learned "drop commit-object-name subject" command
   as another way to skip replaying of a commit.

 * A new configuration variable can enable "--follow" automatically
   when "git log" is run with one pathspec argument.

 * "git status" learned to show a more detailed information regarding
   the "rebase -i" session in progress.

 * "git cat-file" learned "--batch-all-objects" option to enumerate all
   available objects in the repository more quickly than "rev-list
   --all --objects" (the output includes unreachable objects, though).

 * "git fsck" learned to ignore errors on a set of known-to-be-bad
   objects, and also allows the warning levels of various kinds of
   non-critical breakages to be tweaked.

 * "git rebase -i"'s list of todo is made configurable.

 * "git send-email" now performs alias-expansion on names that are
   given via --cccmd, etc.

 * An environment variable GIT_REPLACE_REF_BASE tells Git to look into
   refs hierarchy other than refs/replace/ for the object replacement
   data.

 * Allow untracked cache (experimental) to be used when sparse
   checkout (experimental) is also in use.

 * "git pull --rebase" has been taught to pay attention to
   rebase.autostash configuration.

 * The command-line completion script (in contrib/) has been updated.

 * A negative !ref entry in multi-value transfer.hideRefs
   configuration can be used to say "don't hide this one".

 * After "git am" without "-3" stops, running "git am -" pays attention
   to "-3" only for the patch that caused the original invocation
   to stop.

 * When linked worktree is used, simultaneous "notes merge" instances
   for the same ref in refs/notes/* are prevented from stomping on
   each other.

 * "git send-email" learned a new option --smtp-auth to limit the SMTP
   AUTH mechanisms to be used to a subset of what the system library
   supports.

 * A new configuration variable http.sslVersion can be used to specify
   what specific version of SSL/TLS to use to make a connection.

 * "git notes merge" can be told with "--strategy=<how>" option how to
   automatically handle conflicts; this can now be configured by
   setting notes.mergeStrategy configuration variable.

 * "git log --cc" did not show any patch, even though most of the time
   the user meant "git log --cc -p -m" to see patch output for commits
   with a single parent, and combined diff for merge commits.  The
   command is taught to DWIM "--cc" (without "--raw" and other forms
   of output specification) to "--cc -p -m".

 * "git config --list" output was hard to parse when values consist of
   multiple lines.  "--name-only" option is added to help this.


Performance, Internal Implementation, Development Support etc.

 * In preparation for allowing different "backends" to store the refs
   in a way different from the traditional "one ref per file in
   $GIT_DIR or in a $GIT_DIR/packed-refs file" filesystem storage,
   direct filesystem access to ref-like things like CHERRY_PICK_HEAD
   from scripts and programs has been reduced.

 * Computation of untracked status indicator by bash prompt
   script (in contrib/) has been optimized.

 * Memory use reduction when commit-slab facility is used to annotate
   sparsely (which is not recommended in the first place).

 * Clean up refs API and make "git clone" less intimate with the
   implementation detail.

 * "git pull" was reimplemented in C.

 * The packet tracing machinery allows to capture an incoming pack
   data to a file for debugging.

 * Move machinery to parse human-readable scaled numbers like 1k, 4M,
   and 2G as an option parameter's value from pack-objects to
   parse-options API, to make it available to other codepaths.

 * "git verify-tag" and "git verify-commit" have been taught to share
   more code, and then learned to optionally show the verification
   message from the underlying GPG implementation.

 * Various enhancements around "git am" reading patches generated by
   foreign SCM have been made.

 * Ref listing by "git branch -l" and "git tag -l" commands has
   started to be rebuilt, based on the for-each-ref machinery.

 * The code to perform multi-tree merges has been taught to repopulate
   the cache-tree upon a successful merge into the index, so that
   subsequent "diff-index --cached" (hence "status") and "write-tree"
   (hence "commit") will go faster.

   The same logic in "git checkout" may now be removed, but that is a
   separate issue.

 * Tests that assume how reflogs are represented on the filesystem too
   much have been corrected.

 * "git am" has been rewritten in "C".

 * git_path() and mkpath() are handy helper functions but it is easy
   to misuse, as the callers need to be careful to keep the number of
   active results below 4.  Their uses have been reduced.

 * The "lockfile" API has been rebuilt on top of a new "tempfile" API.

 * To prepare for allowing a different "ref" backend to be plugged in
   to the system, update_ref()/delete_ref() have been taught about
   ref-like things like MERGE_HEAD that are per-worktree (they will
   always be written to the filesystem inside $GIT_DIR).

 * The gitmodules API that is accessed from the C code learned to
   cache stuff lazily.


Also contains various documentation updates and code clean-ups.


Fixes since v2.5
----------------

Unless otherwise noted, all the fixes since v2.5 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * "git subtree" (in contrib/) depended on "git log" output to be
   stable, which was a no-no.  Apply a workaround to force a
   particular date format.
   (merge e7aac44 da/subtree-date-confusion later to maint).

 * An attempt to delete a ref by pushing into a repository whose HEAD
   symbolic reference points at an unborn branch that cannot be
   created due to ref D/F conflict (e.g. refs/heads/a/b exists, HEAD
   points at refs/heads/a) failed.
   (merge b112b14 jx/do-not-crash-receive-pack-wo-head later to maint).

 * The low-level "git send-pack" did not honor 'user.signingkey'
   configuration variable when sending a signed-push.
   (merge d830d39 db/send-pack-user-signingkey later to maint).

 * "sparse checkout" misbehaved for a path that is excluded from the
   checkout when switching between branches that differ at the path.
   (merge 7d78241 as/sparse-checkout-removal later to maint).

 * An experimental "untracked cache" feature used uname(2) in a
   slightly unportable way.
   (merge 100e433 cb/uname-in-untracked later to maint).

 * A "rebase" replays changes of the local branch on top of something
   else, as such they are placed in stage #3 and referred to as
   "theirs", while the changes in the new base, typically a foreign
   work, are placed in stage #2 and referred to as "ours".  Clarify
   the "checkout --ours/--theirs".
   (merge f303016 se/doc-checkout-ours-theirs later to maint).

 * The "rev-parse --parseopt" mode parsed the option specification
   and the argument hint in a strange way to allow '=' and other
   special characters in the option name while forbidding them from
   the argument hint.  This made it impossible to define an option
   like "--pair <key>=<value>" with "pair=key=value" specification,
   which instead would have defined a "--pair=key <value>" option.
   (merge 2d893df ib/scripted-parse-opt-better-hint-string later to maint).

 * Often a fast-import stream builds a new commit on top of the
   previous commit it built, and it often unconditionally emits a
   "from" command to specify the first parent, which can be omitted in
   such a case.  This caused fast-import to forget the tree of the
   previous commit and then re-read it from scratch, which was
   inefficient.  Optimize for this common case.
   (merge 0df3245 mh/fast-import-optimize-current-from later to maint).

 * Running an aliased command from a subdirectory when the .git thing
   in the working tree is a gitfile pointing elsewhere did not work.
   (merge d95138e nd/export-worktree later to maint).

 * "Is this subdirectory a separate repository that should not be
   touched?" check "git clean" was inefficient.  This was replaced
   with a more optimized check.
   (merge fbf2fec ee/clean-remove-dirs later to maint).

 * The "new-worktree-mode" hack in "checkout" that was added in
   nd/multiple-work-trees topic has been removed by updating the
   implementation of new "worktree add".
   (merge 65f9b75 es/worktree-add-cleanup later to maint).

 * Remove remaining cruft from  "git checkout --to", which
   transitioned to "git worktree add".
   (merge 114ff88 es/worktree-add later to maint).

 * An off-by-one error made "git remote" to mishandle a remote with a
   single letter nickname.
   (merge bc598c3 mh/get-remote-group-fix later to maint).

 * "git clone $URL", when cloning from a site whose sole purpose is to
   host a single repository (hence, no path after <scheme>://<site>/),
   tried to use the site name as the new repository name, but did not
   remove username or password when <site> part was of the form
   <user>@<pass>:<host>.  The code is taught to redact these.
   (merge adef956 ps/guess-repo-name-at-root later to maint).

 * Running tests with the "-x" option to make them verbose had some
   unpleasant interactions with other features of the test suite.
   (merge 9b5fe78 jk/test-with-x later to maint).

 * t1509 test that requires a dedicated VM environment had some
   bitrot, which has been corrected.
   (merge faacc5a ps/t1509-chroot-test-fixup later to maint).

 * "git pull" in recent releases of Git has a regression in the code
   that allows custom path to the --upload-pack=<program>.  This has
   been corrected.

   Note that this is irrelevant for 'master' with "git pull" rewritten
   in C.
   (merge 13e0e28 mm/pull-upload-pack later to maint).

 * When trying to see that an object does not exist, a state errno
   leaked from our "first try to open a packfile with O_NOATIME and
   then if it fails retry without it" logic on a system that refuses
   O_NOATIME.  This confused us and caused us to die, saying that the
   packfile is unreadable, when we should have just reported that the
   object does not exist in that packfile to the caller.
   (merge dff6f28 cb/open-noatime-clear-errno later to maint).

 * The codepath to produce error messages had a hard-coded limit to
   the size of the message, primarily to avoid memory allocation while
   calling die().
   (merge f4c3edc jk/long-error-messages later to maint).

 * strbuf_read() used to have one extra iteration (and an unnecessary
   strbuf_grow() of 8kB), which was eliminated.
   (merge 3ebbd00 jh/strbuf-read-use-read-in-full later to maint).

 * We rewrote one of the build scripts in Perl but this reimplements
   in Bourne shell.
   (merge 82aec45 sg/help-group later to maint).

 * The experimental untracked-cache feature were buggy when paths with
   a few levels of subdirectories are involved.
   (merge 73f9145 dt/untracked-subdir later to maint).

 * "interpret-trailers" helper mistook a single-liner log message that
   has a colon as the end of existing trailer.

 * The "interpret-trailers" helper mistook a multi-paragraph title of
   a commit log message with a colon in it as the end of the trailer
   block.
   (merge 5c99995 cc/trailers-corner-case-fix later to maint).

 * "git describe" without argument defaulted to describe the HEAD
   commit, but "git describe --contains" didn't.  Arguably, in a
   repository used for active development, such defaulting would not
   be very useful as the tip of branch is typically not tagged, but it
   is better to be consistent.
   (merge 2bd0706 sg/describe-contains later to maint).

 * The client side codepaths in "git push" have been cleaned up
   and the user can request to perform an optional "signed push",
   i.e. sign only when the other end accepts signed push.
   (merge 68c757f db/push-sign-if-asked later to maint).

 * Because the configuration system does not allow "alias.0foo" and
   "pager.0foo" as the configuration key, the user cannot use '0foo'
   as a custom command name anyway, but "git 0foo" tried to look these
   keys up and emitted useless warnings before saying '0foo is not a
   git command'.  These warning messages have been squelched.
   (merge 9e9de18 jk/fix-alias-pager-config-key-warnings later to maint).

 * "git rev-list" does not take "--notes" option, but did not complain
   when one is given.
   (merge 2aea7a5 jk/rev-list-has-no-notes later to maint).

 * When re-priming the cache-tree opportunistically while committing
   the in-core index as-is, we mistakenly invalidated the in-core
   index too aggressively, causing the experimental split-index code
   to unnecessarily rewrite the on-disk index file(s).
   (merge 475a344 dt/commit-preserve-base-index-upon-opportunistic-cache-tree-update later to maint).

 * "git archive" did not use zip64 extension when creating an archive
   with more than 64k entries, which nobody should need, right ;-)?
   (merge 88329ca rs/archive-zip-many later to maint).

 * The code in "multiple-worktree" support that attempted to recover
   from an inconsistent state updated an incorrect file.
   (merge 82fde87 nd/fixup-linked-gitdir later to maint).

 * On case insensitive systems, "git p4" did not work well with client
   specs.

 * "git init empty && git -C empty log" said "bad default revision 'HEAD'",
   which was found to be a bit confusing to new users.
   (merge ce11360 jk/log-missing-default-HEAD later to maint).

 * Code cleanups and documentation updates.
   (merge 1c601af es/doc-clean-outdated-tools later to maint).
   (merge 3581304 kn/tag-doc-fix later to maint).
   (merge 3a59e59 kb/i18n-doc later to maint).
   (merge 45abdee sb/remove-unused-var-from-builtin-add later to maint).
   (merge 14691e3 sb/parse-options-codeformat later to maint).
   (merge 4a6ada3 ad/bisect-cleanup later to maint).
   (merge da4c5ad ta/docfix-index-format-tech later to maint).
   (merge ae25fd3 sb/check-return-from-read-ref later to maint).
   (merge b3325df nd/dwim-wildcards-as-pathspecs later to maint).
   (merge 7aa9b9b sg/wt-status-header-inclusion later to maint).
   (merge f04c690 as/docfix-reflog-expire-unreachable later to maint).
   (merge 1269847 sg/t3020-typofix later to maint).
   (merge 8b54c23 jc/calloc-pathspec later to maint).
   (merge a6926b8 po/po-readme later to maint).
   (merge 54d160e ss/fix-config-fd-leak later to maint).
   (merge b80fa84 ah/submodule-typofix-in-error later to maint).
   (merge 99885bc ah/reflog-typofix-in-error later to maint).
   (merge 9476c2c ah/read-tree-usage-string later to maint).
   (merge b8c1d27 ah/pack-objects-usage-strings later to maint).
   (merge 486e1e1 br/svn-doc-include-paths-config later to maint).
   (merge 1733ed3 ee/clean-test-fixes later to maint).

----------------------------------------------------------------

Changes since v2.5.0 are as follows:

Alex Henrie (4):
      reflog: add missing single quote to error message
      git-submodule: remove extraneous space from error message
      pack-objects: place angle brackets around placeholders in usage strings
      read-tree: replace bracket set with parentheses to clarify usage

Andreas Schwab (1):
      Documentation/config: fix inconsistent label on gc.*.reflogExpireUnreachable

Antoine Delaite (3):
      bisect: correction of typo
      bisect: replace hardcoded "bad|good" by variables
      bisect: simplify the addition of new bisect terms

Brett Randall (1):
      git-svn doc: mention "svn-remote.<name>.include-paths"

Brian Degenhardt (1):
      unpack-trees: populate cache-tree on successful merge

Charles Bailey (3):
      test-parse-options: update to handle negative ints
      parse-options: move unsigned long option parsing out of pack-objects.c
      untracked: fix detection of uname(2) failure

Christian Couder (3):
      trailer: ignore first line of message
      trailer: retitle a test and correct an in-comment message
      trailer: support multiline title

Clemens Buchacher (1):
      git_open_noatime: return with errno=0 on success

Dave Borowitz (9):
      Documentation/git-push.txt: document when --signed may fail
      Documentation/git-send-pack.txt: wrap long synopsis line
      Documentation/git-send-pack.txt: document --signed
      gitremote-helpers.txt: document pushcert option
      transport: remove git_transport_options.push_cert
      config.c: rename git_config_maybe_bool_text and export it as git_parse_maybe_bool
      builtin/send-pack.c: use parse_options API
      push: support signing pushes iff the server supports it
      push: add a config option push.gpgSign for default signed pushes

David Aguilar (1):
      contrib/subtree: ignore log.date configuration

David Turner (22):
      log: add "log.follow" configuration variable
      unpack-trees: don't update files with CE_WT_REMOVE set
      refs.c: add err arguments to reflog functions
      refs: break out check for reflog autocreation
      refs: new public ref function: safe_create_reflog
      git-reflog: add exists command
      refs: add REF_FORCE_CREATE_REFLOG flag
      update-ref and tag: add --create-reflog arg
      git-stash: use update-ref --create-reflog instead of creating files
      t/t7509: remove unnecessary manipulation of reflog
      tests: remove some direct access to .git/logs
      refs: introduce pseudoref and per-worktree ref concepts
      refs: add ref_type function
      pseudorefs: create and use pseudoref update and delete functions
      bisect: use update_ref
      sequencer: replace write_cherry_pick_head with update_ref
      untracked-cache: support sparse checkout
      worktrees: add find_shared_symref
      notes: handle multiple worktrees
      pseudoref: check return values from read_ref()
      untracked-cache: fix subdirectory handling
      commit: don't rewrite shared index unnecessarily

Elia Pinto (1):
      http: add support for specifying the SSL version

Eric Sunshine (31):
      config: rename "gc.pruneWorktreesExpire" to "gc.worktreePruneExpire"
      checkout: avoid resolving HEAD unnecessarily
      checkout: name check_linked_checkouts() more meaningfully
      checkout: improve die_if_checked_out() robustness
      checkout: die_if_checked_out: simplify strbuf management
      checkout: generalize die_if_checked_out() branch name argument
      checkout: check_linked_checkout: improve "already checked out" aesthetic
      checkout: check_linked_checkout: simplify symref parsing
      checkout: teach check_linked_checkout() about symbolic link HEAD
      branch: publish die_if_checked_out()
      worktree: improve worktree setup message
      worktree: simplify new branch (-b/-B) option checking
      worktree: introduce options container
      worktree: make --detach mutually exclusive with -b/-B
      worktree: add: suppress auto-vivication with --detach and no <branch>
      worktree: make branch creation distinct from worktree population
      worktree: elucidate environment variables intended for child processes
      worktree: add_worktree: construct worktree-population command locally
      worktree: detect branch-name/detached and error conditions locally
      worktree: make setup of new HEAD distinct from worktree population
      worktree: avoid resolving HEAD unnecessarily
      worktree: populate via "git reset --hard" rather than "git checkout"
      checkout: drop intimate knowledge of newly created worktree
      Documentation/git-worktree: fix broken 'linkgit' invocation
      Documentation/git: drop outdated Cogito reference
      Documentation/git-tools: improve discoverability of Git wiki
      Documentation/git-tools: fix item text formatting
      Documentation/git-tools: drop references to defunct tools
      Documentation/git-tools: retire manually-maintained list
      Documentation/config: mention "now" and "never" for 'expire' settings
      generate-cmdlist: re-implement as shell script

Erik Elfström (6):
      setup: add gentle version of read_gitfile
      setup: sanity check file size in read_gitfile_gently
      t7300: add tests to document behavior of clean and nested git
      p7300: add performance tests for clean
      clean: improve performance when removing lots of directories
      t7300: fix broken && chains

Galan Rémi (3):
      git-rebase -i: add command "drop" to remove a commit
      git rebase -i: warn about removed commits
      git rebase -i: add static check for commands and SHA-1

Guillaume Pagès (4):
      status: factor two rebase-related messages together
      status: differentiate interactive from non-interactive rebases
      status: give more information during rebase -i
      status: add new tests for status during rebase -i

Heiko Voigt (4):
      submodule: implement a config API for lookup of .gitmodules values
      submodule: extract functions for config set and lookup
      submodule: use new config API for worktree configurations
      submodule: allow erroneous values for the fetchRecurseSubmodules option

Ilya Bobyr (1):
      rev-parse --parseopt: allow [*=?!] in argument hints

Jacob Keller (8):
      refs: cleanup comments regarding check_refname_component()
      refs: loosen restriction on wildcard "*" refspecs
      notes: document cat_sort_uniq rewriteMode
      notes: extract enum notes_merge_strategy to notes-utils.h
      notes: extract parse_notes_merge_strategy to notes-utils
      notes: add tests for --commit/--abort/--strategy exclusivity
      notes: add notes.mergeStrategy option to select default strategy
      notes: teach git-notes about notes.<name>.mergeStrategy option

Jan Viktorin (1):
      send-email: provide whitelist of SMTP AUTH mechanisms

Jeff King (46):
      pkt-line: simplify starts_with checks in packet tracing
      pkt-line: tighten sideband PACK check when tracing
      pkt-line: support tracing verbatim pack contents
      cat-file: minor style fix in options list
      cat-file: move batch_options definition to top of file
      cat-file: add --buffer option
      cat-file: stop returning value from batch_one_object
      cat-file: split batch_one_object into two stages
      cat-file: add --batch-all-objects option
      read_gitfile_gently: fix use-after-free
      cat-file: sort and de-dup output of --batch-all-objects
      show-branch: use DATE_RELATIVE instead of magic number
      convert "enum date_mode" into a struct
      introduce "format" date-mode
      strbuf: make strbuf_addftime more robust
      docs/config.txt: reorder hideRefs config
      refs: support negative transfer.hideRefs
      test-lib: turn off "-x" tracing during chain-lint check
      test-lib: disable trace when test is not verbose
      clone: add tests for output directory
      clone: use computed length in guess_dir_name
      cache.h: clarify documentation for git_path, et al
      cache.h: complete set of git_path_submodule helpers
      t5700: modernize style
      add_to_alternates_file: don't add duplicate entries
      prefer git_pathdup to git_path in some possibly-dangerous cases
      prefer mkpathdup to mkpath in assignments
      remote.c: drop extraneous local variable from migrate_file
      refs.c: remove extra git_path calls from read_loose_refs
      path.c: drop git_path_submodule
      refs.c: simplify strbufs in reflog setup and writing
      refs.c: avoid repeated git_path calls in rename_tmp_log
      refs.c: avoid git_path assignment in lock_ref_sha1_basic
      refs.c: remove_empty_directories can take a strbuf
      find_hook: keep our own static buffer
      get_repo_path: refactor path-allocation
      memoize common git-path "constant" files
      vreportf: report to arbitrary filehandles
      vreportf: avoid intermediate buffer
      format_config: don't init strbuf
      format_config: simplify buffer handling
      get_urlmatch: avoid useless strbuf write
      config: silence warnings for command names with invalid keys
      rev-list: make it obvious that we do not support notes
      log: diagnose empty HEAD more clearly
      rerere: release lockfile in non-writing functions

Jiang Xin (2):
      receive-pack: crash when checking with non-exist HEAD
      i18n: am: fix typo in description of -b option

Jim Hill (1):
      strbuf_read(): skip unnecessary strbuf_grow() at eof

Johannes Schindelin (19):
      fsck: introduce fsck options
      fsck: introduce identifiers for fsck messages
      fsck: provide a function to parse fsck message IDs
      fsck: offer a function to demote fsck errors to warnings
      fsck (receive-pack): allow demoting errors to warnings
      fsck: report the ID of the error/warning
      fsck: make fsck_ident() warn-friendly
      fsck: make fsck_commit() warn-friendly
      fsck: handle multiple authors in commits specially
      fsck: make fsck_tag() warn-friendly
      fsck: add a simple test for receive.fsck.<msg-id>
      fsck: disallow demoting grave fsck errors to warnings
      fsck: optionally ignore specific fsck issues completely
      fsck: allow upgrading fsck warnings to errors
      fsck: document the new receive.fsck.<msg-id> options
      fsck: support demoting errors to warnings
      fsck: introduce `git fsck --connectivity-only`
      fsck: git receive-pack: support excluding objects from fsck'ing
      fsck: support ignoring objects in `git fsck` via fsck.skiplist

Johannes Sixt (2):
      t7300-clean: require POSIXPERM for chmod 0 test
      t2019: skip test requiring '*' in a file name non Windows

Jose F. Morales (1):
      Mingw: verify both ends of the pipe () call

Junio C Hamano (29):
      commit-slab: introduce slabname##_peek() function
      builtin/send-pack.c: respect user.signingkey
      Git 2.4.8
      First batch for 2.6
      sha1_file.c: rename move_temp_to_file() to finalize_object_file()
      Second batch for 2.6
      Third batch for 2.6
      Start preparing for 2.5.1
      Fourth batch for 2.6
      ps_matched: xcalloc() takes nmemb and then element size
      log: rename "tweak" helpers
      log: when --cc is given, default to -p unless told otherwise
      log: show merge commit when --cc is given
      builtin/am: introduce write_state_*() helper functions
      builtin/am: make sure state files are text
      write_file(): drop "fatal" parameter
      write_file_v(): do not leave incomplete line at the end
      write_file(): drop caller-supplied LF from calls to create a one-liner file
      builtin/log.c: minor reformat
      Fifth batch for 2.6
      pull: pass upload_pack only when it was given
      Sixth batch for 2.6
      Git 2.5.1
      Seventh batch for 2.6
      Eighth batch for 2.6
      Ninth batch for 2.6
      Git 2.6-rc0
      am: match --signoff to the original scripted version
      Git 2.6-rc1

Karsten Blees (1):
      Documentation/i18n.txt: clarify character encoding support

Karthik Nayak (12):
      for-each-ref: extract helper functions out of grab_single_ref()
      for-each-ref: clean up code
      for-each-ref: rename 'refinfo' to 'ref_array_item'
      for-each-ref: introduce new structures for better organisation
      for-each-ref: introduce 'ref_array_clear()'
      for-each-ref: rename some functions and make them public
      for-each-ref: rename variables called sort to sorting
      ref-filter: add 'ref-filter.h'
      Documentation/tag: remove double occurance of "<pattern>"
      ref-filter: move code from 'for-each-ref'
      for-each-ref: introduce filter_refs()
      ref-filter: make 'ref_array_item' use a FLEX_ARRAY for refname

Kevin Daudt (1):
      pull: allow dirty tree when rebase.autostash enabled

Lars Schneider (1):
      git-p4: honor core.ignorecase when using P4 client specs

Matthieu Moy (3):
      Documentation/bisect: move getting help section to the end
      pull.sh: quote $upload_pack when passing it to git-fetch
      bisect: don't mix option parsing and non-trivial code

Michael Haggerty (45):
      delete_ref(): move declaration to refs.h
      remove_branches(): remove temporary
      delete_ref(): handle special case more explicitly
      delete_refs(): new function for the refs API
      delete_refs(): make error message more generic
      delete_refs(): bail early if the packed-refs file cannot be rewritten
      prune_remote(): use delete_refs()
      prune_refs(): use delete_refs()
      repack_without_refs(): make function private
      initial_ref_transaction_commit(): function for initial ref creation
      refs: remove some functions from the module's public interface
      initial_ref_transaction_commit(): check for duplicate refs
      initial_ref_transaction_commit(): check for ref D/F conflicts
      refs: move the remaining ref module declarations to refs.h
      refs.h: add some parameter names to function declarations
      check_branch_commit(): make first parameter const
      update_ref(): don't read old reference value before delete
      cmd_update_ref(): make logic more straightforward
      delete_ref(): use the usual convention for old_sha1
      Documentation/bisect: revise overall content
      fast-import: add a get-mark command
      Documentation/git-worktree: consistently use term "linked working tree"
      Documentation/git-worktree: fix incorrect reference to file "locked"
      Documentation/config: fix stale "git prune --worktree" reference
      Documentation/git-worktree: wordsmith worktree-related manpages
      get_remote_group(): handle remotes with single-character names
      get_remote_group(): rename local variable "space" to "wordlen"
      get_remote_group(): eliminate superfluous call to strcspn()
      get_remote_group(): use skip_prefix()
      lockfile: move documentation to lockfile.h and lockfile.c
      create_bundle(): duplicate file descriptor to avoid closing it twice
      lockfile: add accessors get_lock_file_fd() and get_lock_file_fp()
      lockfile: add accessor get_lock_file_path()
      commit_lock_file(): use get_locked_file_path()
      tempfile: a new module for handling temporary files
      prepare_tempfile_object(): new function, extracted from create_tempfile()
      tempfile: add several functions for creating temporary files
      register_tempfile(): new function to handle an existing temporary file
      write_shared_index(): use tempfile module
      setup_temporary_shallow(): use tempfile module
      diff: use tempfile module
      lock_repo_for_gc(): compute the path to "gc.pid" only once
      gc: use tempfile module to handle gc.pid file
      credential-cache--daemon: delete socket from main()
      credential-cache--daemon: use tempfile module

Michael Rappazzo (1):
      git-rebase--interactive.sh: add config option for custom instruction format

Mike Hommey (2):
      Allow to control where the replace refs are looked for
      fast-import: do less work when given "from" matches current branch head

Nguyễn Thái Ngọc Duy (4):
      setup: set env $GIT_WORK_TREE when work tree is set, like $GIT_DIR
      t7063: use --force-untracked-cache to speed up a bit
      untracked cache: fix entry invalidation
      setup: update the right file in multiple checkouts

Patrick Steinhardt (6):
      Documentation/git-worktree: fix duplicated 'from'
      tests: fix broken && chains in t1509-root-worktree
      tests: fix cleanup after tests in t1509-root-worktree
      clone: do not include authentication data in guessed dir
      clone: do not use port number as dir name
      clone: abort if no dir name could be guessed

Paul Tan (85):
      t4150: test applying StGit patch
      am: teach StGit patch parser how to read from stdin
      t4150: test applying StGit series
      am: use gmtime() to parse mercurial patch date
      am: teach mercurial patch parser how to read from stdin
      parse-options-cb: implement parse_opt_passthru()
      parse-options-cb: implement parse_opt_passthru_argv()
      argv-array: implement argv_array_pushv()
      pull: implement skeletal builtin pull
      pull: implement fetch + merge
      pull: pass verbosity, --progress flags to fetch and merge
      pull: pass git-merge's options to git-merge
      pull: pass git-fetch's options to git-fetch
      pull: error on no merge candidates
      pull: support pull.ff config
      pull: check if in unresolved merge state
      pull: fast-forward working tree if head is updated
      pull: implement pulling into an unborn branch
      pull: set reflog message
      pull: teach git pull about --rebase
      pull: configure --rebase via branch.<name>.rebase or pull.rebase
      pull --rebase: exit early when the working directory is dirty
      pull --rebase: error on no merge candidate cases
      pull: remove redirection to git-pull.sh
      t4150: am.messageid really adds the message id
      t4150: am fails if index is dirty
      t4151: am --abort will keep dirty index intact
      t4150: am refuses patches when paused
      t4150: am --resolved fails if index has no changes
      t4150: am --resolved fails if index has unmerged entries
      t4150: am with applypatch-msg hook
      t4150: am with pre-applypatch hook
      t4150: am with post-applypatch hook
      t4150: tests for am --[no-]scissors
      t3418: non-interactive rebase --continue with rerere enabled
      t3901: test git-am encoding conversion
      wrapper: implement xopen()
      wrapper: implement xfopen()
      builtin-am: implement skeletal builtin am
      builtin-am: implement patch queue mechanism
      builtin-am: split out mbox/maildir patches with git-mailsplit
      builtin-am: auto-detect mbox patches
      builtin-am: extract patch and commit info with git-mailinfo
      builtin-am: apply patch with git-apply
      builtin-am: implement committing applied patch
      builtin-am: refuse to apply patches if index is dirty
      builtin-am: implement --resolved/--continue
      builtin-am: don't parse mail when resuming
      builtin-am: implement --skip
      builtin-am: implement --abort
      builtin-am: reject patches when there's a session in progress
      builtin-am: implement -q/--quiet
      builtin-am: exit with user friendly message on failure
      builtin-am: implement -s/--signoff
      cache-tree: introduce write_index_as_tree()
      builtin-am: implement --3way
      builtin-am: implement --rebasing mode
      builtin-am: bypass git-mailinfo when --rebasing
      builtin-am: handle stray state directory
      builtin-am: implement -u/--utf8
      builtin-am: implement -k/--keep, --keep-non-patch
      builtin-am: implement --[no-]message-id, am.messageid
      builtin-am: support --keep-cr, am.keepcr
      builtin-am: implement --[no-]scissors
      builtin-am: pass git-apply's options to git-apply
      builtin-am: implement --ignore-date
      builtin-am: implement --committer-date-is-author-date
      builtin-am: implement -S/--gpg-sign, commit.gpgsign
      builtin-am: invoke post-rewrite hook
      builtin-am: support automatic notes copying
      builtin-am: invoke applypatch-msg hook
      builtin-am: invoke pre-applypatch hook
      builtin-am: invoke post-applypatch hook
      builtin-am: rerere support
      builtin-am: support and auto-detect StGit patches
      builtin-am: support and auto-detect StGit series files
      builtin-am: support and auto-detect mercurial patches
      builtin-am: implement -i/--interactive
      builtin-am: implement legacy -b/--binary option
      builtin-am: check for valid committer ident
      builtin-am: remove redirection to git-am.sh
      test_terminal: redirect child process' stdin to a pty
      am: let command-line options override saved options
      am: let --signoff override --no-signoff
      am --skip/--abort: merge HEAD/ORIG_HEAD tree into index

Philip Oakley (1):
      po/README: Update directions for l10n contributors

Ralf Thielow (1):
      lockfile: remove function "hold_lock_file_for_append"

Remi Lespinet (11):
      t9001-send-email: move script creation in a setup test
      send-email: allow aliases in patch header and command script outputs
      t9001-send-email: refactor header variable fields replacement
      send-email: refactor address list process
      send-email: allow use of aliases in the From field of --compose mode
      send-email: minor code refactoring
      send-email: reduce dependencies impact on parse_address_line
      send-email: consider quote as delimiter instead of character
      send-email: allow multiple emails using --cc, --to and --bcc
      send-email: suppress meaningless whitespaces in from field
      git-am: add am.threeWay config variable

René Scharfe (3):
      t5004: test ZIP archives with many entries
      archive-zip: use a local variable to store the creator version
      archive-zip: support more than 65535 entries

SZEDER Gábor (8):
      bash prompt: test untracked files status indicator with untracked dirs
      bash prompt: faster untracked status indicator with untracked directories
      config: add '--name-only' option to list only variable names
      completion: list variable names reliably with 'git config --name-only'
      t3020: fix typo in test description
      config: restructure format_config() for better control flow
      wt-status: move #include "pathspec.h" to the header
      describe --contains: default to HEAD when no commit-ish is given

Simon A. Eugster (1):
      checkout: document subtlety around --ours/--theirs

Stefan Beller (4):
      parse-options: align curly braces for all options
      add: remove dead code
      transport-helper: die on errors reading refs.
      read-cache: fix indentation in read_index_from

Sven Strickroth (1):
      config: close config file handle in case of error

Thomas Ackermann (1):
      typofix for index-format.txt

Thomas Braun (1):
      completion: offer '--edit-todo' during interactive rebase

Zoë Blade (1):
      userdiff: add support for Fountain documents

brian m. carlson (7):
      verify-tag: add tests
      verify-tag: share code with verify-commit
      verify-commit: add test for exit status on untrusted signature
      gpg: centralize signature check
      gpg: centralize printing signature buffers
      verify-commit: add option to print raw gpg status information
      verify-tag: add option to print raw gpg status information

^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.6.0-rc0
@ 2015-09-02 20:39  3% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2015-09-02 20:39 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

An early preview release Git v2.6.0-rc0 is now available for
testing at the usual places.  It is comprised of 406 non-merge
commits since v2.5.0, contributed by 50 people, 12 of which are
new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the
'v2.6.0-rc0' tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.5.0 are as follows.
Welcome to the Git development community!

  Antoine Delaite, Brett Randall, Brian Degenhardt, Erik Elfström,
  Galan Rémi, Guillaume Pagès, Jan Viktorin, Jose F. Morales,
  Lars Schneider, Michael Rappazzo, Simon A. Eugster, and Zoë
  Blade.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alex Henrie, Andreas Schwab, brian m. carlson, Charles Bailey,
  Christian Couder, Clemens Buchacher, Dave Borowitz, David
  Aguilar, David Turner, Elia Pinto, Eric Sunshine, Heiko
  Voigt, Ilya Bobyr, Jacob Keller, Jeff King, Jiang Xin, Jim
  Hill, Johannes Schindelin, Johannes Sixt, Junio C Hamano,
  Karsten Blees, Karthik Nayak, Kevin Daudt, Matthieu Moy,
  Michael Haggerty, Mike Hommey, Nguyễn Thái Ngọc Duy,
  Patrick Steinhardt, Paul Tan, Philip Oakley, Ralf Thielow,
  Remi Lespinet, René Scharfe, Stefan Beller, Sven Strickroth,
  SZEDER Gábor, Thomas Ackermann, and Thomas Braun.

----------------------------------------------------------------

Git 2.6 Release Notes (draft)
=============================

Updates since v2.5
------------------

UI, Workflows & Features

 * An asterisk as a substring (as opposed to the entirety) of a path
   component for both side of a refspec, e.g.
   "refs/heads/o*:refs/remotes/heads/i*", is now allowed.

 * New userdiff pattern definition for fountain screenwriting markup
   format has been added.

 * "git log" and friends learned a new "--date=format:..." option to
   format timestamps using system's strftime(3).

 * "git fast-import" learned to respond to the get-mark command via
   its cat-blob-fd interface.

 * "git rebase -i" learned "drop commit-object-name subject" command
   as another way to skip replaying of a commit.

 * A new configuration variable can enable "--follow" automatically
   when "git log" is run with one pathspec argument.

 * "git status" learned to show a more detailed information regarding
   the "rebase -i" session in progress.

 * "git cat-file" learned "--batch-all-objects" option to enumerate all
   available objects in the repository more quickly than "rev-list
   --all --objects" (the output includes unreachable objects, though).

 * "git fsck" learned to ignore errors on a set of known-to-be-bad
   objects, and also allows the warning levels of various kinds of
   non-critical breakages to be tweaked.

 * "git rebase -i"'s list of todo is made configurable.

 * "git send-email" now performs alias-expansion on names that are
   given via --cccmd, etc.

 * An environment variable GIT_REPLACE_REF_BASE tells Git to look into
   refs hierarchy other than refs/replace/ for the object replacement
   data.

 * Allow untracked cache (experimental) to be used when sparse
   checkout (experimental) is also in use.

 * "git pull --rebase" has been taught to pay attention to
   rebase.autostash configuration.

 * The command-line completion script (in contrib/) has been updated.

 * A negative !ref entry in multi-value transfer.hideRefs
   configuration can be used to say "don't hide this one".

 * After "git am" without "-3" stops, running "git am -" pays attention
   to "-3" only for the patch that caused the original invocation
   to stop.

 * When linked worktree is used, simultaneous "notes merge" instances
   for the same ref in refs/notes/* are prevented from stomping on
   each other.

 * "git send-email" learned a new option --smtp-auth to limit the SMTP
   AUTH mechanisms to be used to a subset of what the system library
   supports.

 * A new configuration variable http.sslVersion can be used to specify
   what specific version of SSL/TLS to use to make a connection.

 * "git notes merge" can be told with "--strategy=<how>" option how to
   automatically handle conflicts; this can now be configured by
   setting notes.mergeStrategy configuration variable.

 * "git log --cc" did not show any patch, even though most of the time
   the user meant "git log --cc -p -m" to see patch output for commits
   with a single parent, and combined diff for merge commits.  The
   command is taught to DWIM "--cc" (without "--raw" and other forms
   of output specification) to "--cc -p -m".

 * "git config --list" output was hard to parse when values consist of
   multiple lines.  "--name-only" option is added to help this.


Performance, Internal Implementation, Development Support etc.

 * In preparation for allowing different "backends" to store the refs
   in a way different from the traditional "one ref per file in
   $GIT_DIR or in a $GIT_DIR/packed-refs file" filesystem storage,
   direct filesystem access to ref-like things like CHERRY_PICK_HEAD
   from scripts and programs has been reduced.

 * Computation of untracked status indicator by bash prompt
   script (in contrib/) has been optimized.

 * Memory use reduction when commit-slab facility is used to annotate
   sparsely (which is not recommended in the first place).

 * Clean up refs API and make "git clone" less intimate with the
   implementation detail.

 * "git pull" was reimplemented in C.

 * The packet tracing machinery allows to capture an incoming pack
   data to a file for debugging.

 * Move machinery to parse human-readable scaled numbers like 1k, 4M,
   and 2G as an option parameter's value from pack-objects to
   parse-options API, to make it available to other codepaths.

 * "git verify-tag" and "git verify-commit" have been taught to share
   more code, and then learned to optionally show the verification
   message from the underlying GPG implementation.

 * Various enhancements around "git am" reading patches generated by
   foreign SCM have been made.

 * Ref listing by "git branch -l" and "git tag -l" commands has
   started to be rebuilt, based on the for-each-ref machinery.

 * The code to perform multi-tree merges has been taught to repopulate
   the cache-tree upon a successful merge into the index, so that
   subsequent "diff-index --cached" (hence "status") and "write-tree"
   (hence "commit") will go faster.

   The same logic in "git checkout" may now be removed, but that is a
   separate issue.

 * Tests that assume how reflogs are represented on the filesystem too
   much have been corrected.

 * "git am" has been rewritten in "C".

 * git_path() and mkpath() are handy helper functions but it is easy
   to misuse, as the callers need to be careful to keep the number of
   active results below 4.  Their uses have been reduced.

 * The "lockfile" API has been rebuilt on top of a new "tempfile" API.

 * To prepare for allowing a different "ref" backend to be plugged in
   to the system, update_ref()/delete_ref() have been taught about
   ref-like things like MERGE_HEAD that are per-worktree (they will
   always be written to the filesystem inside $GIT_DIR).

 * The gitmodules API that is accessed from the C code learned to
   cache stuff lazily.


Also contains various documentation updates and code clean-ups.


Fixes since v2.5
----------------

Unless otherwise noted, all the fixes since v2.5 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * "git subtree" (in contrib/) depended on "git log" output to be
   stable, which was a no-no.  Apply a workaround to force a
   particular date format.
   (merge e7aac44 da/subtree-date-confusion later to maint).

 * An attempt to delete a ref by pushing into a repository whose HEAD
   symbolic reference points at an unborn branch that cannot be
   created due to ref D/F conflict (e.g. refs/heads/a/b exists, HEAD
   points at refs/heads/a) failed.
   (merge b112b14 jx/do-not-crash-receive-pack-wo-head later to maint).

 * The low-level "git send-pack" did not honor 'user.signingkey'
   configuration variable when sending a signed-push.
   (merge d830d39 db/send-pack-user-signingkey later to maint).

 * "sparse checkout" misbehaved for a path that is excluded from the
   checkout when switching between branches that differ at the path.
   (merge 7d78241 as/sparse-checkout-removal later to maint).

 * An experimental "untracked cache" feature used uname(2) in a
   slightly unportable way.
   (merge 100e433 cb/uname-in-untracked later to maint).

 * A "rebase" replays changes of the local branch on top of something
   else, as such they are placed in stage #3 and referred to as
   "theirs", while the changes in the new base, typically a foreign
   work, are placed in stage #2 and referred to as "ours".  Clarify
   the "checkout --ours/--theirs".
   (merge f303016 se/doc-checkout-ours-theirs later to maint).

 * The "rev-parse --parseopt" mode parsed the option specification
   and the argument hint in a strange way to allow '=' and other
   special characters in the option name while forbidding them from
   the argument hint.  This made it impossible to define an option
   like "--pair <key>=<value>" with "pair=key=value" specification,
   which instead would have defined a "--pair=key <value>" option.
   (merge 2d893df ib/scripted-parse-opt-better-hint-string later to maint).

 * Often a fast-import stream builds a new commit on top of the
   previous commit it built, and it often unconditionally emits a
   "from" command to specify the first parent, which can be omitted in
   such a case.  This caused fast-import to forget the tree of the
   previous commit and then re-read it from scratch, which was
   inefficient.  Optimize for this common case.
   (merge 0df3245 mh/fast-import-optimize-current-from later to maint).

 * Running an aliased command from a subdirectory when the .git thing
   in the working tree is a gitfile pointing elsewhere did not work.
   (merge d95138e nd/export-worktree later to maint).

 * "Is this subdirectory a separate repository that should not be
   touched?" check "git clean" was inefficient.  This was replaced
   with a more optimized check.
   (merge fbf2fec ee/clean-remove-dirs later to maint).

 * The "new-worktree-mode" hack in "checkout" that was added in
   nd/multiple-work-trees topic has been removed by updating the
   implementation of new "worktree add".
   (merge 65f9b75 es/worktree-add-cleanup later to maint).

 * Remove remaining cruft from  "git checkout --to", which
   transitioned to "git worktree add".
   (merge 114ff88 es/worktree-add later to maint).

 * An off-by-one error made "git remote" to mishandle a remote with a
   single letter nickname.
   (merge bc598c3 mh/get-remote-group-fix later to maint).

 * "git clone $URL", when cloning from a site whose sole purpose is to
   host a single repository (hence, no path after <scheme>://<site>/),
   tried to use the site name as the new repository name, but did not
   remove username or password when <site> part was of the form
   <user>@<pass>:<host>.  The code is taught to redact these.
   (merge adef956 ps/guess-repo-name-at-root later to maint).

 * Running tests with the "-x" option to make them verbose had some
   unpleasant interactions with other features of the test suite.
   (merge 9b5fe78 jk/test-with-x later to maint).

 * t1509 test that requires a dedicated VM environment had some
   bitrot, which has been corrected.
   (merge faacc5a ps/t1509-chroot-test-fixup later to maint).

 * "git pull" in recent releases of Git has a regression in the code
   that allows custom path to the --upload-pack=<program>.  This has
   been corrected.

   Note that this is irrelevant for 'master' with "git pull" rewritten
   in C.
   (merge 13e0e28 mm/pull-upload-pack later to maint).

 * When trying to see that an object does not exist, a state errno
   leaked from our "first try to open a packfile with O_NOATIME and
   then if it fails retry without it" logic on a system that refuses
   O_NOATIME.  This confused us and caused us to die, saying that the
   packfile is unreadable, when we should have just reported that the
   object does not exist in that packfile to the caller.
   (merge dff6f28 cb/open-noatime-clear-errno later to maint).

 * The codepath to produce error messages had a hard-coded limit to
   the size of the message, primarily to avoid memory allocation while
   calling die().
   (merge f4c3edc jk/long-error-messages later to maint).

 * strbuf_read() used to have one extra iteration (and an unnecessary
   strbuf_grow() of 8kB), which was eliminated.
   (merge 3ebbd00 jh/strbuf-read-use-read-in-full later to maint).

 * We rewrote one of the build scripts in Perl but this reimplements
   in Bourne shell.
   (merge 82aec45 sg/help-group later to maint).

 * The experimental untracked-cache feature were buggy when paths with
   a few levels of subdirectories are involved.
   (merge 73f9145 dt/untracked-subdir later to maint).

 * "interpret-trailers" helper mistook a single-liner log message that
   has a colon as the end of existing trailer.

 * The "interpret-trailers" helper mistook a multi-paragraph title of
   a commit log message with a colon in it as the end of the trailer
   block.
   (merge 5c99995 cc/trailers-corner-case-fix later to maint).

 * "git describe" without argument defaulted to describe the HEAD
   commit, but "git describe --contains" didn't.  Arguably, in a
   repository used for active development, such defaulting would not
   be very useful as the tip of branch is typically not tagged, but it
   is better to be consistent.
   (merge 2bd0706 sg/describe-contains later to maint).

 * The client side codepaths in "git push" have been cleaned up
   and the user can request to perform an optional "signed push",
   i.e. sign only when the other end accepts signed push.
   (merge 68c757f db/push-sign-if-asked later to maint).

 * Because the configuration system does not allow "alias.0foo" and
   "pager.0foo" as the configuration key, the user cannot use '0foo'
   as a custom command name anyway, but "git 0foo" tried to look these
   keys up and emitted useless warnings before saying '0foo is not a
   git command'.  These warning messages have been squelched.
   (merge 9e9de18 jk/fix-alias-pager-config-key-warnings later to maint).

 * "git rev-list" does not take "--notes" option, but did not complain
   when one is given.
   (merge 2aea7a5 jk/rev-list-has-no-notes later to maint).

 * When re-priming the cache-tree opportunistically while committing
   the in-core index as-is, we mistakenly invalidated the in-core
   index too aggressively, causing the experimental split-index code
   to unnecessarily rewrite the on-disk index file(s).
   (merge 475a344 dt/commit-preserve-base-index-upon-opportunistic-cache-tree-update later to maint).

 * "git archive" did not use zip64 extension when creating an archive
   with more than 64k entries, which nobody should need, right ;-)?
   (merge 88329ca rs/archive-zip-many later to maint).

 * The code in "multiple-worktree" support that attempted to recover
   from an inconsistent state updated an incorrect file.
   (merge 82fde87 nd/fixup-linked-gitdir later to maint).

 * On case insensitive systems, "git p4" did not work well with client
   specs.

 * "git init empty && git -C empty log" said "bad default revision 'HEAD'",
   which was found to be a bit confusing to new users.
   (merge ce11360 jk/log-missing-default-HEAD later to maint).

 * Code cleanups and documentation updates.
   (merge 1c601af es/doc-clean-outdated-tools later to maint).
   (merge 3581304 kn/tag-doc-fix later to maint).
   (merge 3a59e59 kb/i18n-doc later to maint).
   (merge 45abdee sb/remove-unused-var-from-builtin-add later to maint).
   (merge 14691e3 sb/parse-options-codeformat later to maint).
   (merge 4a6ada3 ad/bisect-cleanup later to maint).
   (merge da4c5ad ta/docfix-index-format-tech later to maint).
   (merge ae25fd3 sb/check-return-from-read-ref later to maint).
   (merge b3325df nd/dwim-wildcards-as-pathspecs later to maint).
   (merge 7aa9b9b sg/wt-status-header-inclusion later to maint).
   (merge f04c690 as/docfix-reflog-expire-unreachable later to maint).
   (merge 1269847 sg/t3020-typofix later to maint).
   (merge 8b54c23 jc/calloc-pathspec later to maint).
   (merge a6926b8 po/po-readme later to maint).
   (merge 54d160e ss/fix-config-fd-leak later to maint).
   (merge b80fa84 ah/submodule-typofix-in-error later to maint).
   (merge 99885bc ah/reflog-typofix-in-error later to maint).
   (merge 9476c2c ah/read-tree-usage-string later to maint).
   (merge b8c1d27 ah/pack-objects-usage-strings later to maint).
   (merge 486e1e1 br/svn-doc-include-paths-config later to maint).
   (merge 1733ed3 ee/clean-test-fixes later to maint).

----------------------------------------------------------------

Changes since v2.5.0 are as follows:

Alex Henrie (4):
      reflog: add missing single quote to error message
      git-submodule: remove extraneous space from error message
      pack-objects: place angle brackets around placeholders in usage strings
      read-tree: replace bracket set with parentheses to clarify usage

Andreas Schwab (1):
      Documentation/config: fix inconsistent label on gc.*.reflogExpireUnreachable

Antoine Delaite (3):
      bisect: correction of typo
      bisect: replace hardcoded "bad|good" by variables
      bisect: simplify the addition of new bisect terms

Brett Randall (1):
      git-svn doc: mention "svn-remote.<name>.include-paths"

Brian Degenhardt (1):
      unpack-trees: populate cache-tree on successful merge

Charles Bailey (3):
      test-parse-options: update to handle negative ints
      parse-options: move unsigned long option parsing out of pack-objects.c
      untracked: fix detection of uname(2) failure

Christian Couder (3):
      trailer: ignore first line of message
      trailer: retitle a test and correct an in-comment message
      trailer: support multiline title

Clemens Buchacher (1):
      git_open_noatime: return with errno=0 on success

Dave Borowitz (9):
      Documentation/git-push.txt: document when --signed may fail
      Documentation/git-send-pack.txt: wrap long synopsis line
      Documentation/git-send-pack.txt: document --signed
      gitremote-helpers.txt: document pushcert option
      transport: remove git_transport_options.push_cert
      config.c: rename git_config_maybe_bool_text and export it as git_parse_maybe_bool
      builtin/send-pack.c: use parse_options API
      push: support signing pushes iff the server supports it
      push: add a config option push.gpgSign for default signed pushes

David Aguilar (1):
      contrib/subtree: ignore log.date configuration

David Turner (22):
      log: add "log.follow" configuration variable
      unpack-trees: don't update files with CE_WT_REMOVE set
      refs.c: add err arguments to reflog functions
      refs: break out check for reflog autocreation
      refs: new public ref function: safe_create_reflog
      git-reflog: add exists command
      refs: add REF_FORCE_CREATE_REFLOG flag
      update-ref and tag: add --create-reflog arg
      git-stash: use update-ref --create-reflog instead of creating files
      t/t7509: remove unnecessary manipulation of reflog
      tests: remove some direct access to .git/logs
      refs: introduce pseudoref and per-worktree ref concepts
      refs: add ref_type function
      pseudorefs: create and use pseudoref update and delete functions
      bisect: use update_ref
      sequencer: replace write_cherry_pick_head with update_ref
      untracked-cache: support sparse checkout
      worktrees: add find_shared_symref
      notes: handle multiple worktrees
      pseudoref: check return values from read_ref()
      untracked-cache: fix subdirectory handling
      commit: don't rewrite shared index unnecessarily

Elia Pinto (1):
      http: add support for specifying the SSL version

Eric Sunshine (31):
      config: rename "gc.pruneWorktreesExpire" to "gc.worktreePruneExpire"
      checkout: avoid resolving HEAD unnecessarily
      checkout: name check_linked_checkouts() more meaningfully
      checkout: improve die_if_checked_out() robustness
      checkout: die_if_checked_out: simplify strbuf management
      checkout: generalize die_if_checked_out() branch name argument
      checkout: check_linked_checkout: improve "already checked out" aesthetic
      checkout: check_linked_checkout: simplify symref parsing
      checkout: teach check_linked_checkout() about symbolic link HEAD
      branch: publish die_if_checked_out()
      worktree: improve worktree setup message
      worktree: simplify new branch (-b/-B) option checking
      worktree: introduce options container
      worktree: make --detach mutually exclusive with -b/-B
      worktree: add: suppress auto-vivication with --detach and no <branch>
      worktree: make branch creation distinct from worktree population
      worktree: elucidate environment variables intended for child processes
      worktree: add_worktree: construct worktree-population command locally
      worktree: detect branch-name/detached and error conditions locally
      worktree: make setup of new HEAD distinct from worktree population
      worktree: avoid resolving HEAD unnecessarily
      worktree: populate via "git reset --hard" rather than "git checkout"
      checkout: drop intimate knowledge of newly created worktree
      Documentation/git-worktree: fix broken 'linkgit' invocation
      Documentation/git: drop outdated Cogito reference
      Documentation/git-tools: improve discoverability of Git wiki
      Documentation/git-tools: fix item text formatting
      Documentation/git-tools: drop references to defunct tools
      Documentation/git-tools: retire manually-maintained list
      Documentation/config: mention "now" and "never" for 'expire' settings
      generate-cmdlist: re-implement as shell script

Erik Elfström (6):
      setup: add gentle version of read_gitfile
      setup: sanity check file size in read_gitfile_gently
      t7300: add tests to document behavior of clean and nested git
      p7300: add performance tests for clean
      clean: improve performance when removing lots of directories
      t7300: fix broken && chains

Galan Rémi (3):
      git-rebase -i: add command "drop" to remove a commit
      git rebase -i: warn about removed commits
      git rebase -i: add static check for commands and SHA-1

Guillaume Pagès (4):
      status: factor two rebase-related messages together
      status: differentiate interactive from non-interactive rebases
      status: give more information during rebase -i
      status: add new tests for status during rebase -i

Heiko Voigt (4):
      submodule: implement a config API for lookup of .gitmodules values
      submodule: extract functions for config set and lookup
      submodule: use new config API for worktree configurations
      submodule: allow erroneous values for the fetchRecurseSubmodules option

Ilya Bobyr (1):
      rev-parse --parseopt: allow [*=?!] in argument hints

Jacob Keller (8):
      refs: cleanup comments regarding check_refname_component()
      refs: loosen restriction on wildcard "*" refspecs
      notes: document cat_sort_uniq rewriteMode
      notes: extract enum notes_merge_strategy to notes-utils.h
      notes: extract parse_notes_merge_strategy to notes-utils
      notes: add tests for --commit/--abort/--strategy exclusivity
      notes: add notes.mergeStrategy option to select default strategy
      notes: teach git-notes about notes.<name>.mergeStrategy option

Jan Viktorin (1):
      send-email: provide whitelist of SMTP AUTH mechanisms

Jeff King (45):
      pkt-line: simplify starts_with checks in packet tracing
      pkt-line: tighten sideband PACK check when tracing
      pkt-line: support tracing verbatim pack contents
      cat-file: minor style fix in options list
      cat-file: move batch_options definition to top of file
      cat-file: add --buffer option
      cat-file: stop returning value from batch_one_object
      cat-file: split batch_one_object into two stages
      cat-file: add --batch-all-objects option
      read_gitfile_gently: fix use-after-free
      cat-file: sort and de-dup output of --batch-all-objects
      show-branch: use DATE_RELATIVE instead of magic number
      convert "enum date_mode" into a struct
      introduce "format" date-mode
      strbuf: make strbuf_addftime more robust
      docs/config.txt: reorder hideRefs config
      refs: support negative transfer.hideRefs
      test-lib: turn off "-x" tracing during chain-lint check
      test-lib: disable trace when test is not verbose
      clone: add tests for output directory
      clone: use computed length in guess_dir_name
      cache.h: clarify documentation for git_path, et al
      cache.h: complete set of git_path_submodule helpers
      t5700: modernize style
      add_to_alternates_file: don't add duplicate entries
      prefer git_pathdup to git_path in some possibly-dangerous cases
      prefer mkpathdup to mkpath in assignments
      remote.c: drop extraneous local variable from migrate_file
      refs.c: remove extra git_path calls from read_loose_refs
      path.c: drop git_path_submodule
      refs.c: simplify strbufs in reflog setup and writing
      refs.c: avoid repeated git_path calls in rename_tmp_log
      refs.c: avoid git_path assignment in lock_ref_sha1_basic
      refs.c: remove_empty_directories can take a strbuf
      find_hook: keep our own static buffer
      get_repo_path: refactor path-allocation
      memoize common git-path "constant" files
      vreportf: report to arbitrary filehandles
      vreportf: avoid intermediate buffer
      format_config: don't init strbuf
      format_config: simplify buffer handling
      get_urlmatch: avoid useless strbuf write
      config: silence warnings for command names with invalid keys
      rev-list: make it obvious that we do not support notes
      log: diagnose empty HEAD more clearly

Jiang Xin (2):
      receive-pack: crash when checking with non-exist HEAD
      i18n: am: fix typo in description of -b option

Jim Hill (1):
      strbuf_read(): skip unnecessary strbuf_grow() at eof

Johannes Schindelin (19):
      fsck: introduce fsck options
      fsck: introduce identifiers for fsck messages
      fsck: provide a function to parse fsck message IDs
      fsck: offer a function to demote fsck errors to warnings
      fsck (receive-pack): allow demoting errors to warnings
      fsck: report the ID of the error/warning
      fsck: make fsck_ident() warn-friendly
      fsck: make fsck_commit() warn-friendly
      fsck: handle multiple authors in commits specially
      fsck: make fsck_tag() warn-friendly
      fsck: add a simple test for receive.fsck.<msg-id>
      fsck: disallow demoting grave fsck errors to warnings
      fsck: optionally ignore specific fsck issues completely
      fsck: allow upgrading fsck warnings to errors
      fsck: document the new receive.fsck.<msg-id> options
      fsck: support demoting errors to warnings
      fsck: introduce `git fsck --connectivity-only`
      fsck: git receive-pack: support excluding objects from fsck'ing
      fsck: support ignoring objects in `git fsck` via fsck.skiplist

Johannes Sixt (2):
      t7300-clean: require POSIXPERM for chmod 0 test
      t2019: skip test requiring '*' in a file name non Windows

Jose F. Morales (1):
      Mingw: verify both ends of the pipe () call

Junio C Hamano (27):
      commit-slab: introduce slabname##_peek() function
      builtin/send-pack.c: respect user.signingkey
      Git 2.4.8
      First batch for 2.6
      sha1_file.c: rename move_temp_to_file() to finalize_object_file()
      Second batch for 2.6
      Third batch for 2.6
      Start preparing for 2.5.1
      Fourth batch for 2.6
      ps_matched: xcalloc() takes nmemb and then element size
      log: rename "tweak" helpers
      log: when --cc is given, default to -p unless told otherwise
      log: show merge commit when --cc is given
      builtin/am: introduce write_state_*() helper functions
      builtin/am: make sure state files are text
      write_file(): drop "fatal" parameter
      write_file_v(): do not leave incomplete line at the end
      write_file(): drop caller-supplied LF from calls to create a one-liner file
      builtin/log.c: minor reformat
      Fifth batch for 2.6
      pull: pass upload_pack only when it was given
      Sixth batch for 2.6
      Git 2.5.1
      Seventh batch for 2.6
      Eighth batch for 2.6
      Ninth batch for 2.6
      Git 2.6-rc0

Karsten Blees (1):
      Documentation/i18n.txt: clarify character encoding support

Karthik Nayak (12):
      for-each-ref: extract helper functions out of grab_single_ref()
      for-each-ref: clean up code
      for-each-ref: rename 'refinfo' to 'ref_array_item'
      for-each-ref: introduce new structures for better organisation
      for-each-ref: introduce 'ref_array_clear()'
      for-each-ref: rename some functions and make them public
      for-each-ref: rename variables called sort to sorting
      ref-filter: add 'ref-filter.h'
      Documentation/tag: remove double occurance of "<pattern>"
      ref-filter: move code from 'for-each-ref'
      for-each-ref: introduce filter_refs()
      ref-filter: make 'ref_array_item' use a FLEX_ARRAY for refname

Kevin Daudt (1):
      pull: allow dirty tree when rebase.autostash enabled

Lars Schneider (1):
      git-p4: honor core.ignorecase when using P4 client specs

Matthieu Moy (3):
      Documentation/bisect: move getting help section to the end
      pull.sh: quote $upload_pack when passing it to git-fetch
      bisect: don't mix option parsing and non-trivial code

Michael Haggerty (45):
      delete_ref(): move declaration to refs.h
      remove_branches(): remove temporary
      delete_ref(): handle special case more explicitly
      delete_refs(): new function for the refs API
      delete_refs(): make error message more generic
      delete_refs(): bail early if the packed-refs file cannot be rewritten
      prune_remote(): use delete_refs()
      prune_refs(): use delete_refs()
      repack_without_refs(): make function private
      initial_ref_transaction_commit(): function for initial ref creation
      refs: remove some functions from the module's public interface
      initial_ref_transaction_commit(): check for duplicate refs
      initial_ref_transaction_commit(): check for ref D/F conflicts
      refs: move the remaining ref module declarations to refs.h
      refs.h: add some parameter names to function declarations
      check_branch_commit(): make first parameter const
      update_ref(): don't read old reference value before delete
      cmd_update_ref(): make logic more straightforward
      delete_ref(): use the usual convention for old_sha1
      Documentation/bisect: revise overall content
      fast-import: add a get-mark command
      Documentation/git-worktree: consistently use term "linked working tree"
      Documentation/git-worktree: fix incorrect reference to file "locked"
      Documentation/config: fix stale "git prune --worktree" reference
      Documentation/git-worktree: wordsmith worktree-related manpages
      get_remote_group(): handle remotes with single-character names
      get_remote_group(): rename local variable "space" to "wordlen"
      get_remote_group(): eliminate superfluous call to strcspn()
      get_remote_group(): use skip_prefix()
      lockfile: move documentation to lockfile.h and lockfile.c
      create_bundle(): duplicate file descriptor to avoid closing it twice
      lockfile: add accessors get_lock_file_fd() and get_lock_file_fp()
      lockfile: add accessor get_lock_file_path()
      commit_lock_file(): use get_locked_file_path()
      tempfile: a new module for handling temporary files
      prepare_tempfile_object(): new function, extracted from create_tempfile()
      tempfile: add several functions for creating temporary files
      register_tempfile(): new function to handle an existing temporary file
      write_shared_index(): use tempfile module
      setup_temporary_shallow(): use tempfile module
      diff: use tempfile module
      lock_repo_for_gc(): compute the path to "gc.pid" only once
      gc: use tempfile module to handle gc.pid file
      credential-cache--daemon: delete socket from main()
      credential-cache--daemon: use tempfile module

Michael Rappazzo (1):
      git-rebase--interactive.sh: add config option for custom instruction format

Mike Hommey (2):
      Allow to control where the replace refs are looked for
      fast-import: do less work when given "from" matches current branch head

Nguyễn Thái Ngọc Duy (4):
      setup: set env $GIT_WORK_TREE when work tree is set, like $GIT_DIR
      t7063: use --force-untracked-cache to speed up a bit
      untracked cache: fix entry invalidation
      setup: update the right file in multiple checkouts

Patrick Steinhardt (6):
      Documentation/git-worktree: fix duplicated 'from'
      tests: fix broken && chains in t1509-root-worktree
      tests: fix cleanup after tests in t1509-root-worktree
      clone: do not include authentication data in guessed dir
      clone: do not use port number as dir name
      clone: abort if no dir name could be guessed

Paul Tan (85):
      t4150: test applying StGit patch
      am: teach StGit patch parser how to read from stdin
      t4150: test applying StGit series
      am: use gmtime() to parse mercurial patch date
      am: teach mercurial patch parser how to read from stdin
      parse-options-cb: implement parse_opt_passthru()
      parse-options-cb: implement parse_opt_passthru_argv()
      argv-array: implement argv_array_pushv()
      pull: implement skeletal builtin pull
      pull: implement fetch + merge
      pull: pass verbosity, --progress flags to fetch and merge
      pull: pass git-merge's options to git-merge
      pull: pass git-fetch's options to git-fetch
      pull: error on no merge candidates
      pull: support pull.ff config
      pull: check if in unresolved merge state
      pull: fast-forward working tree if head is updated
      pull: implement pulling into an unborn branch
      pull: set reflog message
      pull: teach git pull about --rebase
      pull: configure --rebase via branch.<name>.rebase or pull.rebase
      pull --rebase: exit early when the working directory is dirty
      pull --rebase: error on no merge candidate cases
      pull: remove redirection to git-pull.sh
      t4150: am.messageid really adds the message id
      t4150: am fails if index is dirty
      t4151: am --abort will keep dirty index intact
      t4150: am refuses patches when paused
      t4150: am --resolved fails if index has no changes
      t4150: am --resolved fails if index has unmerged entries
      t4150: am with applypatch-msg hook
      t4150: am with pre-applypatch hook
      t4150: am with post-applypatch hook
      t4150: tests for am --[no-]scissors
      t3418: non-interactive rebase --continue with rerere enabled
      t3901: test git-am encoding conversion
      wrapper: implement xopen()
      wrapper: implement xfopen()
      builtin-am: implement skeletal builtin am
      builtin-am: implement patch queue mechanism
      builtin-am: split out mbox/maildir patches with git-mailsplit
      builtin-am: auto-detect mbox patches
      builtin-am: extract patch and commit info with git-mailinfo
      builtin-am: apply patch with git-apply
      builtin-am: implement committing applied patch
      builtin-am: refuse to apply patches if index is dirty
      builtin-am: implement --resolved/--continue
      builtin-am: don't parse mail when resuming
      builtin-am: implement --skip
      builtin-am: implement --abort
      builtin-am: reject patches when there's a session in progress
      builtin-am: implement -q/--quiet
      builtin-am: exit with user friendly message on failure
      builtin-am: implement -s/--signoff
      cache-tree: introduce write_index_as_tree()
      builtin-am: implement --3way
      builtin-am: implement --rebasing mode
      builtin-am: bypass git-mailinfo when --rebasing
      builtin-am: handle stray state directory
      builtin-am: implement -u/--utf8
      builtin-am: implement -k/--keep, --keep-non-patch
      builtin-am: implement --[no-]message-id, am.messageid
      builtin-am: support --keep-cr, am.keepcr
      builtin-am: implement --[no-]scissors
      builtin-am: pass git-apply's options to git-apply
      builtin-am: implement --ignore-date
      builtin-am: implement --committer-date-is-author-date
      builtin-am: implement -S/--gpg-sign, commit.gpgsign
      builtin-am: invoke post-rewrite hook
      builtin-am: support automatic notes copying
      builtin-am: invoke applypatch-msg hook
      builtin-am: invoke pre-applypatch hook
      builtin-am: invoke post-applypatch hook
      builtin-am: rerere support
      builtin-am: support and auto-detect StGit patches
      builtin-am: support and auto-detect StGit series files
      builtin-am: support and auto-detect mercurial patches
      builtin-am: implement -i/--interactive
      builtin-am: implement legacy -b/--binary option
      builtin-am: check for valid committer ident
      builtin-am: remove redirection to git-am.sh
      test_terminal: redirect child process' stdin to a pty
      am: let command-line options override saved options
      am: let --signoff override --no-signoff
      am --skip/--abort: merge HEAD/ORIG_HEAD tree into index

Philip Oakley (1):
      po/README: Update directions for l10n contributors

Ralf Thielow (1):
      lockfile: remove function "hold_lock_file_for_append"

Remi Lespinet (11):
      t9001-send-email: move script creation in a setup test
      send-email: allow aliases in patch header and command script outputs
      t9001-send-email: refactor header variable fields replacement
      send-email: refactor address list process
      send-email: allow use of aliases in the From field of --compose mode
      send-email: minor code refactoring
      send-email: reduce dependencies impact on parse_address_line
      send-email: consider quote as delimiter instead of character
      send-email: allow multiple emails using --cc, --to and --bcc
      send-email: suppress meaningless whitespaces in from field
      git-am: add am.threeWay config variable

René Scharfe (3):
      t5004: test ZIP archives with many entries
      archive-zip: use a local variable to store the creator version
      archive-zip: support more than 65535 entries

SZEDER Gábor (8):
      bash prompt: test untracked files status indicator with untracked dirs
      bash prompt: faster untracked status indicator with untracked directories
      config: add '--name-only' option to list only variable names
      completion: list variable names reliably with 'git config --name-only'
      t3020: fix typo in test description
      config: restructure format_config() for better control flow
      wt-status: move #include "pathspec.h" to the header
      describe --contains: default to HEAD when no commit-ish is given

Simon A. Eugster (1):
      checkout: document subtlety around --ours/--theirs

Stefan Beller (4):
      parse-options: align curly braces for all options
      add: remove dead code
      transport-helper: die on errors reading refs.
      read-cache: fix indentation in read_index_from

Sven Strickroth (1):
      config: close config file handle in case of error

Thomas Ackermann (1):
      typofix for index-format.txt

Thomas Braun (1):
      completion: offer '--edit-todo' during interactive rebase

Zoë Blade (1):
      userdiff: add support for Fountain documents

brian m. carlson (7):
      verify-tag: add tests
      verify-tag: share code with verify-commit
      verify-commit: add test for exit status on untrusted signature
      gpg: centralize signature check
      gpg: centralize printing signature buffers
      verify-commit: add option to print raw gpg status information
      verify-tag: add option to print raw gpg status information

^ permalink raw reply	[relevance 3%]

* [ANNOUNCE] Git v2.5.0
@ 2015-07-27 20:47  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2015-07-27 20:47 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

The latest feature release Git v2.5.0 is now available at the
usual places.  It is comprised of 583 non-merge commits since
v2.4.0, contributed by 70 people, 21 of which are new faces.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.5.0'
tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://code.google.com/p/git-core/
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.4.0 are as follows.
Welcome to the Git development community!

  Allen Hubbe, Ariel Faigon, Blair Holloway, Christian Neukirchen,
  Danny Lin, Enrique Tobis, Frans Klaver, Fredrik Medley, Joe
  Cridge, Lars Kellogg-Stedman, Lawrence Siebert, Lex Spoon, Luke
  Mewburn, Miguel Torroja, Mike Edgar, Ossi Herrala, Panagiotis
  Astithas, Quentin Neill, Remi Lespinet, Sébastien Guimmara,
  and Thomas Schneider.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  Alexander Shopov, Alex Henrie, brian m. carlson, Carlos Martín
  Nieto, Charles Bailey, Clemens Buchacher, David Aguilar,
  David Turner, Dennis Kaarsemaker, Dimitriy Ryazantcev, Elia
  Pinto, Eric Sunshine, Fredrik Gustafsson, Jean-Noel Avila, Jeff
  King, Jiang Xin, Jim Hill, Johannes Schindelin, Johannes Sixt,
  Jonathan Nieder, Junio C Hamano, Karsten Blees, Karthik Nayak,
  Luke Diamand, Matthieu Moy, Max Kirillov, Michael Coleman,
  Michael Haggerty, Michael J Gruber, Mike Hommey, Nguyễn
  Thái Ngọc Duy, Patrick Steinhardt, Paul Tan, Peter Krefting,
  Phil Hord, Phillip Sz, Ralf Thielow, Ramsay Allan Jones, René
  Scharfe, Richard Hansen, Sebastian Schuberth, Stefan Beller,
  SZEDER Gábor, Thomas Braun, Thomas Gummerer, Tony Finch,
  Torsten Bögershausen, Trần Ngọc Quân, and Vitor Antunes.

----------------------------------------------------------------

Git 2.5 Release Notes
=====================

Updates since v2.4
------------------

UI, Workflows & Features

 * The bash completion script (in contrib/) learned a few options that
   "git revert" takes.

 * Whitespace breakages in deleted and context lines can also be
   painted in the output of "git diff" and friends with the new
   --ws-error-highlight option.

 * List of commands shown by "git help" are grouped along the workflow
   elements to help early learners.

 * "git p4" now detects the filetype (e.g. binary) correctly even when
   the files are opened exclusively.

 * git p4 attempts to better handle branches in Perforce.

 * "git p4" learned "--changes-block-size <n>" to read the changes in
   chunks from Perforce, instead of making one call to "p4 changes"
   that may trigger "too many rows scanned" error from Perforce.

 * More workaround for Perforce's row number limit in "git p4".

 * Unlike "$EDITOR" and "$GIT_EDITOR" that can hold the path to the
   command and initial options (e.g. "/path/to/emacs -nw"), 'git p4'
   did not let the shell interpolate the contents of the environment
   variable that name the editor "$P4EDITOR" (and "$EDITOR", too).
   This release makes it in line with the rest of Git, as well as with
   Perforce.

 * A new short-hand <branch>@{push} denotes the remote-tracking branch
   that tracks the branch at the remote the <branch> would be pushed
   to.

 * "git show-branch --topics HEAD" (with no other arguments) did not
   do anything interesting.  Instead, contrast the given revision
   against all the local branches by default.

 * A replacement for contrib/workdir/git-new-workdir that does not
   rely on symbolic links and make sharing of objects and refs safer
   by making the borrowee and borrowers aware of each other.

   Consider this as still an experimental feature; its UI is still
   likely to change.

 * Tweak the sample "store" backend of the credential helper to honor
   XDG configuration file locations when specified.

 * A heuristic we use to catch mistyped paths on the command line
   "git <cmd> <revs> <pathspec>" is to make sure that all the non-rev
   parameters in the later part of the command line are names of the
   files in the working tree, but that means "git grep $str -- \*.c"
   must always be disambiguated with "--", because nobody sane will
   create a file whose name literally is asterisk-dot-see.  Loosen the
   heuristic to declare that with a wildcard string the user likely
   meant to give us a pathspec.

 * "git merge FETCH_HEAD" learned that the previous "git fetch" could
   be to create an Octopus merge, i.e. recording multiple branches
   that are not marked as "not-for-merge"; this allows us to lose an
   old style invocation "git merge <msg> HEAD $commits..." in the
   implementation of "git pull" script; the old style syntax can now
   be deprecated (but not removed yet).

 * Filter scripts were run with SIGPIPE disabled on the Git side,
   expecting that they may not read what Git feeds them to filter.
   We however treated a filter that does not read its input fully
   before exiting as an error.  We no longer do and ignore EPIPE
   when writing to feed the filter scripts.

   This changes semantics, but arguably in a good way.  If a filter
   can produce its output without fully consuming its input using
   whatever magic, we now let it do so, instead of diagnosing it
   as a programming error.

 * Instead of dying immediately upon failing to obtain a lock, the
   locking (of refs etc) retries after a short while with backoff.

 * Introduce http.<url>.SSLCipherList configuration variable to tweak
   the list of cipher suite to be used with libcURL when talking with
   https:// sites.

 * "git subtree" script (in contrib/) used "echo -n" to produce
   progress messages in a non-portable way.

 * "git subtree" script (in contrib/) does not have --squash option
   when pushing, but the documentation and help text pretended as if
   it did.

 * The Git subcommand completion (in contrib/) no longer lists credential
   helpers among candidates; they are not something the end user would
   invoke interactively.

 * The index file can be taught with "update-index --untracked-cache"
   to optionally remember already seen untracked files, in order to
   speed up "git status" in a working tree with tons of cruft.

 * "git mergetool" learned to drive WinMerge as a backend.

 * "git upload-pack" that serves "git fetch" can be told to serve
   commits that are not at the tip of any ref, as long as they are
   reachable from a ref, with uploadpack.allowReachableSHA1InWant
   configuration variable.

 * "git cat-file --batch(-check)" learned the "--follow-symlinks"
   option that follows an in-tree symbolic link when asked about an
   object via extended SHA-1 syntax, e.g. HEAD:RelNotes that points at
   Documentation/RelNotes/2.5.0.txt.  With the new option, the command
   behaves as if HEAD:Documentation/RelNotes/2.5.0.txt was given as
   input instead.

   Consider this as still an experimental and incomplete feature:

    - We may want to do the same for in-index objects, e.g.
      asking for :RelNotes with this option should give
      :Documentation/RelNotes/2.5.0.txt, too

    - "git cat-file --follow-symlinks blob HEAD:RelNotes"
      may also be something we want to allow in the future.

 * "git send-email" learned the alias file format used by the sendmail
   program (in a simplified form; we obviously do not feed pipes).

 * Traditionally, external low-level 3-way merge drivers are expected
   to produce their results based solely on the contents of the three
   variants given in temporary files named by %O, %A and %B on their
   command line.  Additionally allow them to look at the final path
   (given by %P).

 * "git blame" learned blame.showEmail configuration variable.

 * "git apply" cannot diagnose a patch corruption when the breakage is
   to mark the length of the hunk shorter than it really is on the
   hunk header line "@@ -l,k +m,n @@"; one special case it could is
   when the hunk becomes no-op (e.g. k == n == 2 for two-line context
   patch output), and it learned to do so in this special case.

 * Add the "--allow-unknown-type" option to "cat-file" to allow
   inspecting loose objects of an experimental or a broken type.

 * Many long-running operations show progress eye-candy, even when
   they are later backgrounded.  Hide the eye-candy when the process
   is sent to the background instead.
   (merge a4fb76c lm/squelch-bg-progress later to maint).


Performance, Internal Implementation, Development Support etc.

 * "unsigned char [20]" used throughout the code to represent object
   names are being converted into a semi-opaque "struct object_id".
   This effort is expected to interfere with other topics in flight,
   but hopefully will give us one extra level of abstraction in the
   end, when completed.

 * for_each_ref() callback functions were taught to name the objects
   not with "unsigned char sha1[20]" but with "struct object_id".

 * Catch a programmer mistake to feed a pointer not an array to
   ARRAY_SIZE() macro, by using a couple of GCC extensions.

 * Some error messages in "git config" were emitted without calling
   the usual error() facility.

 * When "add--interactive" splits a hunk into two overlapping hunks
   and then let the user choose only one, it sometimes feeds an
   incorrect patch text to "git apply".  Add tests to demonstrate
   this.

   I have a slight suspicion that this may be $gmane/87202 coming back
   and biting us (I seem to have said "let's run with this and see
   what happens" back then).

 * More line-ending tests.

 * An earlier rewrite to use strbuf_getwholeline() instead of fgets(3)
   to read packed-refs file revealed that the former is unacceptably
   inefficient.  It has been optimized by using getdelim(3) when
   available.

 * The refs API uses ref_lock struct which had its own "int fd", even
   though the same file descriptor was in the lock struct it contains.
   Clean-up the code to lose this redundant field.

 * There was a dead code that used to handle "git pull --tags" and
   show special-cased error message, which was made irrelevant when
   the semantics of the option changed back in Git 1.9 days.
   (merge 19d122b pt/pull-tags-error-diag later to maint).

 * Help us to find broken test script that splits the body part of the
   test by mistaken use of wrong kind of quotes.
   (merge d93d5d5 jc/test-prereq-validate later to maint).

 * Developer support to automatically detect broken &&-chain in the
   test scripts is now turned on by default.
   (merge 92b269f jk/test-chain-lint later to maint).

 * Error reporting mechanism used in "refs" API has been made more
   consistent.

 * "git pull" has more test coverage now.

 * "git pull" has become more aware of the options meant for
   underlying "git fetch" and then learned to use parse-options
   parser.

 * Clarify in the Makefile a guideline to decide use of USE_NSEC.

Also contains various documentation updates and code clean-ups.


Fixes since v2.4
----------------

Unless otherwise noted, all the fixes since v2.4 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * Git 2.4 broke setting verbosity and progress levels on "git clone"
   with native transports.
   (merge 822f0c4 mh/clone-verbosity-fix later to maint).

 * "git add -e" did not allow the user to abort the operation by
   killing the editor.
   (merge cb64800 jk/add-e-kill-editor later to maint).

 * Memory usage of "git index-pack" has been trimmed by tens of
   per-cent.
   (merge f0e7f11 nd/slim-index-pack-memory-usage later to maint).

 * "git rev-list --objects $old --not --all" to see if everything that
   is reachable from $old is already connected to the existing refs
   was very inefficient.
   (merge b6e8a3b jk/still-interesting later to maint).

 * "hash-object --literally" introduced in v2.2 was not prepared to
   take a really long object type name.
   (merge 1427a7f jc/hash-object later to maint).

 * "git rebase --quiet" was not quite quiet when there is nothing to
   do.
   (merge 22946a9 jk/rebase-quiet-noop later to maint).

 * The completion for "log --decorate=" parameter value was incorrect.
   (merge af16bda sg/complete-decorate-full-not-long later to maint).

 * "filter-branch" corrupted commit log message that ends with an
   incomplete line on platforms with some "sed" implementations that
   munge such a line.  Work it around by avoiding to use "sed".
   (merge df06201 jk/filter-branch-use-of-sed-on-incomplete-line later to maint).

 * "git daemon" fails to build from the source under NO_IPV6
   configuration (regression in 2.4).
   (merge d358f77 jc/daemon-no-ipv6-for-2.4.1 later to maint).

 * Some time ago, "git blame" (incorrectly) lost the convert_to_git()
   call when synthesizing a fake "tip" commit that represents the
   state in the working tree, which broke folks who record the history
   with LF line ending to make their project portable across platforms
   while terminating lines in their working tree files with CRLF for
   their platform.
   (merge 4bf256d tb/blame-resurrect-convert-to-git later to maint).

 * We avoid setting core.worktree when the repository location is the
   ".git" directory directly at the top level of the working tree, but
   the code misdetected the case in which the working tree is at the
   root level of the filesystem (which arguably is a silly thing to
   do, but still valid).
   (merge 84ccad8 jk/init-core-worktree-at-root later to maint).

 * "git commit --date=now" or anything that relies on approxidate lost
   the daylight-saving-time offset.
   (merge f6e6362 jc/epochtime-wo-tz later to maint).

 * Access to objects in repositories that borrow from another one on a
   slow NFS server unnecessarily got more expensive due to recent code
   becoming more cautious in a naive way not to lose objects to pruning.
   (merge ee1c6c3 jk/prune-mtime later to maint).

 * The codepaths that read .gitignore and .gitattributes files have been
   taught that these files encoded in UTF-8 may have UTF-8 BOM marker at
   the beginning; this makes it in line with what we do for configuration
   files already.
   (merge 27547e5 cn/bom-in-gitignore later to maint).

 * a few helper scripts in the test suite did not report errors
   correctly.
   (merge de248e9 ep/fix-test-lib-functions-report later to maint).

 * The default $HOME/.gitconfig file created upon "git config --global"
   that edits it had incorrectly spelled user.name and user.email
   entries in it.
   (merge 7e11052 oh/fix-config-default-user-name-section later to maint).

 * "git cat-file bl $blob" failed to barf even though there is no
   object type that is "bl".
   (merge b7994af jk/type-from-string-gently later to maint).

 * The usual "git diff" when seeing a file turning into a directory
   showed a patchset to remove the file and create all files in the
   directory, but "git diff --no-index" simply refused to work.  Also,
   when asked to compare a file and a directory, imitate POSIX "diff"
   and compare the file with the file with the same name in the
   directory, instead of refusing to run.
   (merge 0615173 jc/diff-no-index-d-f later to maint).

 * "git rebase -i" moved the "current" command from "todo" to "done" a
   bit too prematurely, losing a step when a "pick" did not even start.
   (merge 8cbc57c ph/rebase-i-redo later to maint).

 * The connection initiation code for "ssh" transport tried to absorb
   differences between the stock "ssh" and Putty-supplied "plink" and
   its derivatives, but the logic to tell that we are using "plink"
   variants were too loose and falsely triggered when "plink" appeared
   anywhere in the path (e.g. "/home/me/bin/uplink/ssh").
   (merge baaf233 bc/connect-plink later to maint).

 * We have prepended $GIT_EXEC_PATH and the path "git" is installed in
   (typically "/usr/bin") to $PATH when invoking subprograms and hooks
   for almost eternity, but the original use case the latter tried to
   support was semi-bogus (i.e. install git to /opt/foo/git and run it
   without having /opt/foo on $PATH), and more importantly it has
   become less and less relevant as Git grew more mainstream (i.e. the
   users would _want_ to have it on their $PATH).  Stop prepending the
   path in which "git" is installed to users' $PATH, as that would
   interfere the command search order people depend on (e.g. they may
   not like versions of programs that are unrelated to Git in /usr/bin
   and want to override them by having different ones in /usr/local/bin
   and have the latter directory earlier in their $PATH).
   (merge a0b4507 jk/git-no-more-argv0-path-munging later to maint).

 * core.excludesfile (defaulting to $XDG_HOME/git/ignore) is supposed
   to be overridden by repository-specific .git/info/exclude file, but
   the order was swapped from the beginning. This belatedly fixes it.
   (merge 099d2d8 jc/gitignore-precedence later to maint).

 * There was a commented-out (instead of being marked to expect
   failure) test that documented a breakage that was fixed since the
   test was written; turn it into a proper test.
   (merge 66d2e04 sb/t1020-cleanup later to maint).

 * The "log --decorate" enhancement in Git 2.4 that shows the commit
   at the tip of the current branch e.g. "HEAD -> master", did not
   work with --decorate=full.
   (merge 429ad20 mg/log-decorate-HEAD later to maint).

 * The ref API did not handle cases where 'refs/heads/xyzzy/frotz' is
   removed at the same time as 'refs/heads/xyzzy' is added (or vice
   versa) very well.
   (merge c628edf mh/ref-directory-file later to maint).

 * Multi-ref transaction support we merged a few releases ago
   unnecessarily kept many file descriptors open, risking to fail with
   resource exhaustion.  This is for 2.4.x track.
   (merge 185ce3a mh/write-refs-sooner-2.4 later to maint).

 * "git bundle verify" did not diagnose extra parameters on the
   command line.
   (merge 7886cfa ps/bundle-verify-arg later to maint).

 * Various documentation mark-up fixes to make the output more
   consistent in general and also make AsciiDoctor (an alternative
   formatter) happier.
   (merge d0258b9 jk/asciidoc-markup-fix later to maint).
   (merge ad3967a jk/stripspace-asciidoctor-fix later to maint).
   (merge 975e382 ja/tutorial-asciidoctor-fix later to maint).

 * The code to read pack-bitmap wanted to allocate a few hundred
   pointers to a structure, but by mistake allocated and leaked memory
   enough to hold that many actual structures.  Correct the allocation
   size and also have it on stack, as it is small enough.
   (merge 599dc76 rs/plug-leak-in-pack-bitmaps later to maint).

 * The pull.ff configuration was supposed to override the merge.ff
   configuration, but it didn't.
   (merge db9bb28 pt/pull-ff-vs-merge-ff later to maint).

 * "git pull --log" and "git pull --no-log" worked as expected, but
   "git pull --log=20" did not.
   (merge 5061a44 pt/pull-log-n later to maint).

 * "git rerere forget" in a repository without rerere enabled gave a
   cryptic error message; it should be a silent no-op instead.
   (merge 0544574 jk/rerere-forget-check-enabled later to maint).

 * "git rebase -i" fired post-rewrite hook when it shouldn't (namely,
   when it was told to stop sequencing with 'exec' insn).
   (merge 141ff8f mm/rebase-i-post-rewrite-exec later to maint).

 * Clarify that "log --raw" and "log --format=raw" are unrelated
   concepts.
   (merge 92de921 mm/log-format-raw-doc later to maint).

 * Make "git stash something --help" error out, so that users can
   safely say "git stash drop --help".
   (merge 5ba2831 jk/stash-options later to maint).

 * The clean/smudge interface did not work well when filtering an
   empty contents (failed and then passed the empty input through).
   It can be argued that a filter that produces anything but empty for
   an empty input is nonsense, but if the user wants to do strange
   things, then why not?
   (merge f6a1e1e jh/filter-empty-contents later to maint).

 * Communication between the HTTP server and http_backend process can
   lead to a dead-lock when relaying a large ref negotiation request.
   Diagnose the situation better, and mitigate it by reading such a
   request first into core (to a reasonable limit).
   (merge 636614f jk/http-backend-deadlock later to maint).

 * "git clean pathspec..." tried to lstat(2) and complain even for
   paths outside the given pathspec.
   (merge 838d6a9 dt/clean-pathspec-filter-then-lstat later to maint).

 * Recent "git prune" traverses young unreachable objects to safekeep
   old objects in the reachability chain from them, which sometimes
   caused error messages that are unnecessarily alarming.
   (merge ce4e7b2 jk/squelch-missing-link-warning-for-unreachable later to maint).

 * The configuration reader/writer uses mmap(2) interface to access
   the files; when we find a directory, it barfed with "Out of memory?".
   (merge 9ca0aaf jk/diagnose-config-mmap-failure later to maint).

 * "color.diff.plain" was a misnomer; give it 'color.diff.context' as
   a more logical synonym.
   (merge 8dbf3eb jk/color-diff-plain-is-context later to maint).

 * The setup code used to die when core.bare and core.worktree are set
   inconsistently, even for commands that do not need working tree.
   (merge fada767 jk/die-on-bogus-worktree-late later to maint).

 * Recent Mac OS X updates breaks the logic to detect that the machine
   is on the AC power in the sample pre-auto-gc script.
   (merge c54c7b3 pa/auto-gc-mac-osx later to maint).

 * "git commit --cleanup=scissors" was not careful enough to protect
   against getting fooled by a line that looked like scissors.
   (merge fbfa097 sg/commit-cleanup-scissors later to maint).

 * "Have we lost a race with competing repack?" check was too
   expensive, especially while receiving a huge object transfer
   that runs index-pack (e.g. "clone" or "fetch").
   (merge 0eeb077 jk/index-pack-reduce-recheck later to maint).

 * The tcsh completion writes a bash scriptlet but that would have
   failed for users with noclobber set.
   (merge 0b1f688 af/tcsh-completion-noclobber later to maint).

 * "git for-each-ref" reported "missing object" for 0{40} when it
   encounters a broken ref.  The lack of object whose name is 0{40} is
   not the problem; the ref being broken is.
   (merge 501cf47 mh/reporting-broken-refs-from-for-each-ref later to maint).

 * Various fixes around "git am" that applies a patch to a history
   that is not there yet.
   (merge 6ea3b67 pt/am-abort-fix later to maint).

 * "git fsck" used to ignore missing or invalid objects recorded in reflog.
   (merge 19bf6c9 mh/fsck-reflog-entries later to maint).

 * "git format-patch --ignore-if-upstream A..B" did not like to be fed
   tags as boundary commits.
   (merge 9b7a61d jc/do-not-feed-tags-to-clear-commit-marks later to maint).

 * "git fetch --depth=<depth>" and "git clone --depth=<depth>" issued
   a shallow transfer request even to an upload-pack that does not
   support the capability.
   (merge eb86a50 me/fetch-into-shallow-safety later to maint).

 * "git rebase" did not exit with failure when format-patch it invoked
   failed for whatever reason.
   (merge 60d708b cb/rebase-am-exit-code later to maint).

 * Fix a small bug in our use of umask() return value.
   (merge 3096b2e jk/fix-refresh-utime later to maint).

 * An ancient test framework enhancement to allow color was not
   entirely correct; this makes it work even when tput needs to read
   from the ~/.terminfo under the user's real HOME directory.
   (merge d5c1b7c rh/test-color-avoid-terminfo-in-original-home later to maint).

 * A minor bugfix when pack bitmap is used with "rev-list --count".
   (merge c8a70d3 jk/rev-list-no-bitmap-while-pruning later to maint).

 * "git config" failed to update the configuration file when the
   underlying filesystem is incapable of renaming a file that is still
   open.
   (merge 7a64592 kb/config-unmap-before-renaming later to maint).

 * Avoid possible ssize_t to int truncation.
   (merge 6c8afe4 mh/strbuf-read-file-returns-ssize-t later to maint).

 * When you say "!<ENTER>" while running say "git log", you'd confuse
   yourself in the resulting shell, that may look as if you took
   control back to the original shell you spawned "git log" from but
   that isn't what is happening.  To that new shell, we leaked
   GIT_PAGER_IN_USE environment variable that was meant as a local
   communication between the original "Git" and subprocesses that was
   spawned by it after we launched the pager, which caused many
   "interesting" things to happen, e.g. "git diff | cat" still paints
   its output in color by default.

   Stop leaking that environment variable to the pager's half of the
   fork; we only need it on "Git" side when we spawn the pager.
   (merge 124b519 jc/unexport-git-pager-in-use-in-pager later to maint).

 * Abandoning an already applied change in "git rebase -i" with
   "--continue" left CHERRY_PICK_HEAD and confused later steps.
   (merge 0e0aff4 js/rebase-i-clean-up-upon-continue-to-skip later to maint).

 * We used to ask libCURL to use the most secure authentication method
   available when talking to an HTTP proxy only when we were told to
   talk to one via configuration variables.  We now ask libCURL to
   always use the most secure authentication method, because the user
   can tell libCURL to use an HTTP proxy via an environment variable
   without using configuration variables.
   (merge 5841520 et/http-proxyauth later to maint).

 * A fix to a minor regression to "git fsck" in v2.2 era that started
   complaining about a body-less tag object when it lacks a separator
   empty line after its header to separate it with a non-existent body.
   (merge 84d18c0 jc/fsck-retire-require-eoh later to maint).

 * Code cleanups and documentation updates.
   (merge 0269f96 mm/usage-log-l-can-take-regex later to maint).
   (merge 64f2589 nd/t1509-chroot-test later to maint).
   (merge d201a1e sb/test-bitmap-free-at-end later to maint).
   (merge 05bfc7d sb/line-log-plug-pairdiff-leak later to maint).
   (merge 846e5df pt/xdg-config-path later to maint).
   (merge 1154aa4 jc/plug-fmt-merge-msg-leak later to maint).
   (merge 319b678 jk/sha1-file-reduce-useless-warnings later to maint).
   (merge 9a35c14 fg/document-commit-message-stripping later to maint).
   (merge bbf431c ps/doc-packfile-vs-pack-file later to maint).
   (merge 309a9e3 jk/skip-http-tests-under-no-curl later to maint).
   (merge ccd593c dl/branch-error-message later to maint).
   (merge 22570b6 rs/janitorial later to maint).
   (merge 5c2a581 mc/commit-doc-grammofix later to maint).
   (merge ce41720 ah/usage-strings later to maint).
   (merge e6a268c sb/glossary-submodule later to maint).
   (merge ec48a76 sb/submodule-doc-intro later to maint).
   (merge 14f8b9b jk/clone-dissociate later to maint).
   (merge 055c7e9 sb/pack-protocol-mention-smart-http later to maint).
   (merge 7c37a5d jk/make-fix-dependencies later to maint).
   (merge fc0aa39 sg/merge-summary-config later to maint).
   (merge 329af6c pt/t0302-needs-sanity later to maint).
   (merge d614f07 fk/doc-format-patch-vn later to maint).
   (merge 72dbb36 sg/completion-commit-cleanup later to maint).
   (merge e654eb2 es/utf8-stupid-compiler-workaround later to maint).
   (merge 34b935c es/osx-header-pollutes-mask-macro later to maint).
   (merge ab7fade jc/prompt-document-ps1-state-separator later to maint).
   (merge 25f600e mm/describe-doc later to maint).
   (merge 83fe167 mm/branch-doc-updates later to maint).
   (merge 75d2e5a ls/hint-rev-list-count later to maint).
   (merge edc8f71 cb/subtree-tests-update later to maint).
   (merge 5330e6e sb/p5310-and-chain later to maint).
   (merge c4ac525 tb/checkout-doc later to maint).
   (merge e479c5f jk/pretty-encoding-doc later to maint).
   (merge 7e837c6 ss/clone-guess-dir-name-simplify later to maint).

----------------------------------------------------------------

Changes since v2.4.0 are as follows:

Alex Henrie (3):
      blame, log: format usage strings similarly to those in documentation
      l10n: ca.po: update translation
      l10n: ca.po: update translation

Alexander Shopov (2):
      l10n: Updated Bulgarian translation of git (2355t,0f,0u)
      l10n: Updated Bulgarian translation of git (2359t,0f,0u)

Allen Hubbe (1):
      send-email: add sendmail email aliases format

Ariel Faigon (1):
      git-completion.tcsh: fix redirect with noclobber

Blair Holloway (1):
      git-p4: fix filetype detection on files opened exclusively

Carlos Martín Nieto (1):
      dir: allow a BOM at the beginning of exclude files

Charles Bailey (4):
      contrib/subtree: use tabs consitently for indentation in tests
      contrib/subtree: fix broken &&-chains and revealed test error
      contrib/subtree: small tidy-up to test
      Fix definition of ARRAY_SIZE for non-gcc builds

Christian Neukirchen (1):
      cvsimport: silence regex warning appearing in Perl 5.22.

Clemens Buchacher (1):
      rebase: return non-zero error code if format-patch fails

Danny Lin (3):
      branch: do not call a "remote-tracking branch" a "remote branch"
      contrib/subtree: there's no push --squash
      contrib/subtree: portability fix for string printing

David Aguilar (2):
      mergetool--lib: set IFS for difftool and mergetool
      mergetools: add winmerge as a builtin tool

David Turner (4):
      clean: only lstat files in pathspec
      tree-walk: learn get_tree_entry_follow_symlinks
      sha1_name: get_sha1_with_context learns to follow symlinks
      cat-file: add --follow-symlinks to --batch

Dennis Kaarsemaker (1):
      checkout: don't require a work tree when checking out into a new one

Dimitriy Ryazantcev (1):
      l10n: ru.po: update Russian translation

Elia Pinto (2):
      test-lib-functions.sh: fix the second argument to some helper functions
      git-compat-util.h: implement a different ARRAY_SIZE macro for for safely deriving the size of array

Enrique Tobis (1):
      http: always use any proxy auth method available

Eric Sunshine (44):
      git-hash-object.txt: document --literally option
      hash-object --literally: fix buffer overrun with extra-long object type
      t1007: add hash-object --literally tests
      command-list: prepare machinery for upcoming "common groups" section
      generate-cmdlist: parse common group commands
      send-email: further document missing sendmail aliases functionality
      send-email: visually distinguish sendmail aliases parser warnings
      send-email: drop noise comments which merely repeat what code says
      send-email: fix style: cuddle 'elsif' and 'else' with closing brace
      send-email: refactor sendmail aliases parser
      send-email: simplify sendmail aliases comment and blank line recognizer
      send-email: implement sendmail aliases line continuation support
      t9001: refactor sendmail aliases test infrastructure
      t9001: add sendmail aliases line continuation tests
      send-email: further warn about unsupported sendmail aliases features
      ewah/bitmap: silence warning about MASK macro redefinition
      config.mak.uname: Darwin: define HAVE_GETDELIM for modern OS X releases
      configure: add getdelim() check
      utf8: NO_ICONV: silence uninitialized variable warning
      Documentation/git-checkout: fix incorrect worktree prune command
      Documentation/git-worktree: associate options with commands
      Documentation: move linked worktree description from checkout to worktree
      Documentation/git-worktree: add BUGS section
      Documentation/git-worktree: split technical info from general description
      Documentation/git-worktree: add high-level 'lock' overview
      Documentation/git-worktree: add EXAMPLES section
      checkout: fix bug with --to and relative HEAD
      checkout: relocate --to's "no branch specified" check
      checkout: prepare_linked_checkout: drop now-unused 'new' argument
      checkout: make --to unconditionally verbose
      checkout: drop 'checkout_opts' dependency from prepare_linked_checkout
      worktree: introduce "add" command
      worktree: add --force option
      worktree: add --detach option
      worktree: add -b/-B options
      tests: worktree: retrofit "checkout --to" tests for "worktree add"
      checkout: retire --to option
      checkout: require worktree unconditionally
      worktree: extract basename computation to new function
      worktree: add: make -b/-B default to HEAD when <branch> is omitted
      worktree: add: auto-vivify new branch when <branch> is omitted
      checkout: retire --ignore-other-worktrees in favor of --force
      Documentation/git-worktree: fix stale "git checkout --to" references
      Documentation/git: fix stale "MULTIPLE CHECKOUT MODE" reference

Frans Klaver (1):
      doc: format-patch: fix typo

Fredrik Gustafsson (1):
      Documentation: clarify how "git commit" cleans up the edited log message

Fredrik Medley (3):
      config.txt: clarify allowTipSHA1InWant with camelCase
      upload-pack: prepare to extend allow-tip-sha1-in-want
      upload-pack: optionally allow fetching reachable sha1

Jean-Noel Avila (3):
      doc: fix unmatched code fences
      l10n: fr.po v2.5.0-rc0 (2355t)
      l10n: fr v2.5.0 round 2 (2359t)

Jeff King (83):
      sha1_file: squelch "packfile cannot be accessed" warnings
      init: don't set core.worktree when initializing /.git
      strbuf_getwholeline: use getc macro
      git-compat-util: add fallbacks for unlocked stdio
      strbuf_getwholeline: use getc_unlocked
      config: use getc_unlocked when reading from file
      strbuf_addch: avoid calling strbuf_grow
      strbuf_getwholeline: avoid calling strbuf_grow
      strbuf_getwholeline: use getdelim if it is available
      read_packed_refs: avoid double-checking sane refs
      t1430: add another refs-escape test
      type_from_string_gently: make sure length matches
      limit_list: avoid quadratic behavior from still_interesting
      reachable: only mark local objects as recent
      sha1_file: freshen pack objects before loose
      sha1_file: only freshen packs once per run
      t3903: stop hard-coding commit sha1s
      t3903: avoid applying onto dirty index
      stash: require a clean index to apply
      stop putting argv[0] dirname at front of PATH
      rebase: silence "git checkout" for noop rebase
      test-lib: turn on GIT_TEST_CHAIN_LINT by default
      filter-branch: avoid passing commit message through sed
      remote.c: drop default_remote_name variable
      t/lib-httpd.sh: skip tests if NO_CURL is defined
      add: check return value of launch_editor
      doc: fix unmatched code fences in git-stripspace
      doc: fix misrendering due to `single quote'
      doc: fix unquoted use of "{type}"
      doc: fix hanging "+"-continuation
      doc: fix length of underlined section-title
      doc/add: reformat `--edit` option
      doc: convert \--option to --option
      doc: drop backslash quoting of some curly braces
      doc: put example URLs and emails inside literal backticks
      doc: convert AsciiDoc {?foo} to ifdef::foo[]
      rerere: exit silently on "forget" when rerere is disabled
      http-backend: fix die recursion with custom handler
      progress: treat "no terminal" as being in the foreground
      t5551: factor out tag creation
      stash: complain about unknown flags
      stash: recognize "--help" for subcommands
      remote.c: refactor setup of branch->merge list
      remote.c: drop "remote" pointer from "struct branch"
      remote.c: hoist branch.*.remote lookup out of remote_get_1
      remote.c: provide per-branch pushremote name
      remote.c: hoist read_config into remote_get_1
      remote.c: introduce branch_get_upstream helper
      remote.c: report specific errors from branch_get_upstream
      test_bitmap_walk: free bitmap with bitmap_free
      remote.c: untangle error logic in branch_get_upstream
      remote.c: return upstream name from stat_tracking_info
      remote.c: add branch_get_push
      sha1_name: refactor upstream_mark
      sha1_name: refactor interpret_upstream_mark
      sha1_name: implement @{push} shorthand
      for-each-ref: use skip_prefix instead of starts_with
      for-each-ref: accept "%(push)" format
      http-backend: spool ref negotiation requests to buffer
      clone: use OPT_STRING_LIST for --reference
      clone: reorder --dissociate and --reference options
      t7063: hide stderr from setup inside prereq
      diff: accept color.diff.context as a synonym for "plain"
      diff.h: rename DIFF_PLAIN color slot to DIFF_CONTEXT
      read-cache.c: drop PROT_WRITE from mmap of index
      config.c: fix mmap leak when writing config
      config.c: avoid xmmap error messages
      config.c: rewrite ENODEV into EISDIR when mmap fails
      Makefile: drop dependency between git-instaweb and gitweb
      Makefile: avoid timestamp updates to GIT-BUILD-OPTIONS
      Makefile: silence perl/PM.stamp recipe
      setup_git_directory: delay core.bare/core.worktree errors
      add quieter versions of parse_{tree,commit}
      silence broken link warnings with revs->ignore_missing_links
      suppress errors on missing UNINTERESTING links
      ewah: use less generic macro name
      index-pack: fix truncation of off_t in comparison
      index-pack: avoid excessive re-reading of pack directory
      Revert "stash: require a clean index to apply"
      docs: clarify that --encoding can produce invalid sequences
      for_each_packed_object: automatically open pack index
      rev-list: disable --use-bitmap-index when pruning commits
      check_and_freshen_file: fix reversed success-check

Jiang Xin (4):
      l10n: git.pot: v2.5.0 round 1 (65 new, 15 removed)
      l10n: zh_CN: for git v2.5.0 l10n round 1
      l10n: git.pot: v2.5.0 round 2 (9 new, 5 removed)
      l10n: zh_CN: for git v2.5.0 l10n round 2

Jim Hill (1):
      sha1_file: pass empty buffer to index empty file

Joe Cridge (1):
      git-prompt.sh: document GIT_PS1_STATESEPARATOR

Johannes Schindelin (2):
      t3404: demonstrate CHERRY_PICK_HEAD bug
      rebase -i: do not leave a CHERRY_PICK_HEAD file behind

Johannes Sixt (5):
      compat/mingw: stubs for getpgid() and tcgetpgrp()
      lockfile: replace random() by rand()
      help.c: wrap wait-only poll() invocation in sleep_millisec()
      lockfile: convert retry timeout computations to millisecond
      lockfile: wait using sleep_millisec() instead of select()

Jonathan Nieder (1):
      config: use error() instead of fprintf(stderr, ...)

Junio C Hamano (77):
      t2026: fix broken &&-chain
      t0302: "unreadable" test needs POSIXPERM
      diff-no-index: DWIM "diff D F" into "diff D/F F"
      diff-no-index: align D/F handling with that of normal Git
      parse_date_basic(): return early when given a bogus timestamp
      parse_date_basic(): let the system handle DST conversion
      add_excludes_from_file: clarify the bom skipping logic
      utf8-bom: introduce skip_utf8_bom() helper
      config: use utf8_bom[] from utf.[ch] in git_parse_source()
      attr: skip UTF8 BOM at the beginning of the input file
      fmt-merge-msg: plug small leak of commit buffer
      ignore: info/exclude should trump core.excludesfile
      test: validate prerequistes syntax
      merge: test the top-level merge driver
      merge: simplify code flow
      t5520: style fixes
      t5520: test pulling an octopus into an unborn branch
      merge: clarify "pulling into void" special case
      merge: do not check argc to determine number of remote heads
      merge: small leakfix and code simplification
      merge: clarify collect_parents() logic
      merge: split reduce_parents() out of collect_parents()
      merge: narrow scope of merge_names
      merge: extract prepare_merge_message() logic out
      merge: make collect_parents() auto-generate the merge message
      merge: decide if we auto-generate the message early in collect_parents()
      merge: handle FETCH_HEAD internally
      merge: deprecate 'git merge <message> HEAD <commit>' syntax
      write_sha1_file(): do not use a separate sha1[] array
      daemon: unbreak NO_IPV6 build regression
      First batch for 2.5 cycle
      tests: skip dav http-push tests under NO_EXPAT=NoThanks
      Second batch for 2.5 cycle
      Git 2.3.8
      log: decorate HEAD with branch name under --decorate=full, too
      log: do not shorten decoration names too early
      Git 2.4.1
      Third batch for 2.5 cycle
      copy.c: make copy_fd() report its status silently
      filter_buffer_or_fd(): ignore EPIPE
      t5407: use <<- to align the expected output
      Fourth batch for 2.5 cycle
      t4015: modernise style
      t4015: separate common setup and per-test expectation
      Fifth batch for 2.5 cycle
      Git 2.4.2
      diff.c: add emit_del_line() and emit_context_line()
      diff.c: --ws-error-highlight=<kind> option
      t9001: write $HOME/, not ~/, to help shells without tilde expansion
      xmmap(): drop "Out of memory?"
      apply: reject a hunk that does not do anything
      Sixth batch for 2.5 cycle
      format-patch: do not feed tags to clear_commit_marks()
      ll-merge: pass the original path to external drivers
      The first half of the seventh batch for 2.5
      Git 2.4.3
      Second half of seventh batch
      Git 2.4.4
      Eighth batch for 2.5
      Revert "diff-lib.c: adjust position of i-t-a entries in diff"
      Ninth batch for 2.5
      Git 2.4.5
      Git 2.5.0-rc0
      fsck: it is OK for a tag and a commit to lack the body
      Git 2.5.0-rc1
      pager: do not leak "GIT_PAGER_IN_USE" to the pager
      index-pack: fix allocation of sorted_by_pos array
      The last minute bits of fixes
      Revert "checkout: retire --ignore-other-worktrees in favor of --force"
      Git 2.5.0-rc2
      Git 2.4.6
      worktree: caution that this is still experimental
      Git 2.5.0-rc3
      Revert "git-am: add am.threeWay config variable"
      RelNotes: am.threeWay does not exist (yet)
      Git 2.4.7
      Git 2.5

Karsten Blees (2):
      config.c: fix writing config files on Windows network shares
      Makefile / racy-git.txt: clarify USE_NSEC prerequisites

Karthik Nayak (4):
      sha1_file: support reading from a loose object of unknown type
      cat-file: make the options mutually exclusive
      cat-file: teach cat-file a '--allow-unknown-type' option
      t1006: add tests for git cat-file --allow-unknown-type

Lars Kellogg-Stedman (1):
      http: add support for specifying an SSL cipher list

Lawrence Siebert (1):
      rev-list: add --count to usage guide

Lex Spoon (1):
      git-p4: use -m when running p4 changes

Luke Diamand (11):
      git-p4: fix small bug in locked test scripts
      git-p4: small fix for locked-file-move-test
      git-p4: t9814: prevent --chain-lint failure
      git-p4: add failing tests for case-folding p4d
      git-p4: add failing test for P4EDITOR handling
      git-p4: fix handling of multi-word P4EDITOR
      git-p4: tests: use test-chmtime in place of touch
      git-p4: additional testing of --changes-block-size
      git-p4: test with limited p4 server results
      git-p4: add tests for non-numeric revision range
      git-p4: fixing --changes-block-size handling

Luke Mewburn (1):
      progress: no progress in background

Matthieu Moy (16):
      t3701-add-interactive: simplify code
      add -p: demonstrate failure when running 'edit' after a split
      t3904-stash-patch: fix test description
      t3904-stash-patch: factor PERL prereq at the top of the file
      stash -p: demonstrate failure of split with mixed y/n
      Documentation: change -L:<regex> to -L:<funcname>
      log -L: improve error message on malformed argument
      Documentation/log: clarify what --raw means
      Documentation/log: clarify sha1 non-abbreviation in log --raw
      rebase -i: demonstrate incorrect behavior of post-rewrite
      rebase -i: fix post-rewrite hook with failed exec command
      Documentation/describe: improve one-line summary
      git-multimail: update to release 1.1.0
      git-multimail: update to release 1.1.1
      Documentation/branch: document -d --force and -m --force
      Documentation/branch: document -M and -D in terms of --force

Max Kirillov (3):
      checkout: do not fail if target is an empty directory
      git-common-dir: make "modules/" per-working-directory directory
      prune --worktrees: fix expire vs worktree existence condition

Michael Coleman (1):
      Documentation/git-commit: grammofix

Michael Haggerty (99):
      t1404: new tests of ref D/F conflicts within transactions
      is_refname_available(): revamp the comments
      is_refname_available(): avoid shadowing "dir" variable
      is_refname_available(): convert local variable "dirname" to strbuf
      entry_matches(): inline function
      report_refname_conflict(): inline function
      struct nonmatching_ref_data: store a refname instead of a ref_entry
      is_refname_available(): use dirname in first loop
      ref_transaction_commit(): use a string_list for detecting duplicates
      refs: check for D/F conflicts among refs created in a transaction
      verify_refname_available(): rename function
      verify_refname_available(): report errors via a "struct strbuf *err"
      lock_ref_sha1_basic(): report errors via a "struct strbuf *err"
      lock_ref_sha1_basic(): improve diagnostics for ref D/F conflicts
      rename_ref(): integrate lock_ref_sha1_basic() errors into ours
      ref_transaction_commit(): provide better error messages
      ref_transaction_commit(): delete extra "the" from error message
      reflog_expire(): integrate lock_ref_sha1_basic() errors into ours
      write_ref_to_lockfile(): new function, extracted from write_ref_sha1()
      commit_ref_update(): new function, extracted from write_ref_sha1()
      rename_ref(): inline calls to write_ref_sha1() from this function
      ref_transaction_commit(): inline call to write_ref_sha1()
      ref_transaction_commit(): remove the local flags variable
      ref_transaction_commit(): fix atomicity and avoid fd exhaustion
      write_ref_to_lockfile(): new function, extracted from write_ref_sha1()
      commit_ref_update(): new function, extracted from write_ref_sha1()
      rename_ref(): inline calls to write_ref_sha1() from this function
      ref_transaction_commit(): inline call to write_ref_sha1()
      ref_transaction_commit(): remove the local flags variable
      ref_transaction_commit(): fix atomicity and avoid fd exhaustion
      lockfile: allow file locking to be retried with a timeout
      lock_packed_refs(): allow retries when acquiring the packed-refs lock
      each_ref_fn: change to take an object_id parameter
      builtin/rev-parse: rewrite to take an object_id argument
      handle_one_ref(): rewrite to take an object_id argument
      register_ref(): rewrite to take an object_id argument
      append_ref(): rewrite to take an object_id argument
      add_pending_uninteresting_ref(): rewrite to take an object_id argument
      get_name(): rewrite to take an object_id argument
      builtin/fetch: rewrite to take an object_id argument
      grab_single_ref(): rewrite to take an object_id argument
      name_ref(): rewrite to take an object_id argument
      builtin/pack-objects: rewrite to take an object_id argument
      show_ref_cb(): rewrite to take an object_id argument
      builtin/reflog: rewrite ref functions to take an object_id argument
      add_branch_for_removal(): rewrite to take an object_id argument
      add_branch_for_removal(): don't set "util" field of string_list entries
      builtin/remote: rewrite functions to take object_id arguments
      show_reference(): rewrite to take an object_id argument
      append_matching_ref(): rewrite to take an object_id argument
      builtin/show-branch: rewrite functions to take object_id arguments
      append_one_rev(): rewrite to work with object_id
      builtin/show-branch: rewrite functions to work with object_id
      cmd_show_branch(): fix error message
      fsck: change functions to use object_id
      builtin/show-ref: rewrite to use object_id
      show_ref(): convert local variable peeled to object_id
      builtin/show-ref: rewrite to take an object_id argument
      append_similar_ref(): rewrite to take an object_id argument
      http-backend: rewrite to take an object_id argument
      show_head_ref(): convert local variable "unused" to object_id
      add_ref_decoration(): rewrite to take an object_id argument
      add_ref_decoration(): convert local variable original_sha1 to object_id
      string_list_add_one_ref(): rewrite to take an object_id argument
      add_one_ref(): rewrite to take an object_id argument
      remote: rewrite functions to take object_id arguments
      register_replace_ref(): rewrite to take an object_id argument
      handle_one_reflog(): rewrite to take an object_id argument
      add_info_ref(): rewrite to take an object_id argument
      handle_one_ref(): rewrite to take an object_id argument
      shallow: rewrite functions to take object_id arguments
      submodule: rewrite to take an object_id argument
      write_refs_to_temp_dir(): convert local variable sha1 to object_id
      write_one_ref(): rewrite to take an object_id argument
      find_symref(): rewrite to take an object_id argument
      find_symref(): convert local variable "unused" to object_id
      upload-pack: rewrite functions to take object_id arguments
      send_ref(): convert local variable "peeled" to object_id
      mark_complete(): rewrite to take an object_id argument
      clear_marks(): rewrite to take an object_id argument
      mark_complete_oid(): new function, taking an object_oid
      mark_complete(): remove unneeded arguments
      rev_list_insert_ref_oid(): new function, taking an object_oid
      rev_list_insert_ref(): remove unneeded arguments
      each_ref_fn_adapter(): remove adapter
      warn_if_dangling_symref(): convert local variable "junk" to object_id
      struct ref_lock: convert old_sha1 member to object_id
      verify_lock(): return 0/-1 rather than struct ref_lock *
      verify_lock(): on errors, let the caller unlock the lock
      verify_lock(): report errors via a strbuf
      verify_lock(): do not capitalize error messages
      ref_transaction_commit(): do not capitalize error messages
      t6301: new tests of for-each-ref error handling
      for-each-ref: report broken references correctly
      read_loose_refs(): simplify function logic
      read_loose_refs(): treat NULL_SHA1 loose references as broken
      fsck_handle_reflog_sha1(): new function
      fsck: report errors if reflog entries point at invalid objects
      strbuf: strbuf_read_file() should return ssize_t

Michael J Gruber (4):
      l10n: de.po: grammar fix
      l10n: de.po: punctuation fixes
      l10n: de.po: translation fix for fall-back to 3way merge
      mergetool-lib: fix default tool selection

Miguel Torroja (1):
      p4: retrieve the right revision of the file in UTF-16 codepath

Mike Edgar (1):
      fetch-pack: check for shallow if depth given

Mike Hommey (2):
      show-branch: show all local heads when only giving one rev along --topics
      clone: call transport_set_verbosity before anything else on the newly created transport

Nguyễn Thái Ngọc Duy (67):
      path.c: make get_pathname() return strbuf instead of static buffer
      path.c: make get_pathname() call sites return const char *
      git_snpath(): retire and replace with strbuf_git_path()
      path.c: rename vsnpath() to do_git_path()
      path.c: group git_path(), git_pathdup() and strbuf_git_path() together
      git_path(): be aware of file relocation in $GIT_DIR
      *.sh: respect $GIT_INDEX_FILE
      reflog: avoid constructing .lock path with git_path
      fast-import: use git_path() for accessing .git dir instead of get_git_dir()
      commit: use SEQ_DIR instead of hardcoding "sequencer"
      $GIT_COMMON_DIR: a new environment variable
      git-sh-setup.sh: use rev-parse --git-path to get $GIT_DIR/objects
      *.sh: avoid hardcoding $GIT_DIR/hooks/...
      git-stash: avoid hardcoding $GIT_DIR/logs/....
      setup.c: convert is_git_directory() to use strbuf
      setup.c: detect $GIT_COMMON_DIR in is_git_directory()
      setup.c: convert check_repository_format_gently to use strbuf
      setup.c: detect $GIT_COMMON_DIR check_repository_format_gently()
      setup.c: support multi-checkout repo setup
      wrapper.c: wrapper to open a file, fprintf then close
      use new wrapper write_file() for simple file writing
      checkout: support checking out into a new working directory
      prune: strategies for linked checkouts
      checkout: reject if the branch is already checked out elsewhere
      checkout: clean up half-prepared directories in --to mode
      gc: style change -- no SP before closing parenthesis
      gc: factor out gc.pruneexpire parsing code
      gc: support prune --worktrees
      count-objects: report unused files in $GIT_DIR/worktrees/...
      git_path(): keep "info/sparse-checkout" per work-tree
      t2025: add a test to make sure grafts is working from a linked checkout
      checkout: pass whole struct to parse_branchname_arg instead of individual flags
      checkout: add --ignore-other-wortrees
      git-checkout.txt: a note about multiple checkout support for submodules
      index-pack: reduce object_entry size to save memory
      dir.c: optionally compute sha-1 of a .gitignore file
      untracked cache: record .gitignore information and dir hierarchy
      untracked cache: initial untracked cache validation
      untracked cache: invalidate dirs recursively if .gitignore changes
      untracked cache: make a wrapper around {open,read,close}dir()
      untracked cache: record/validate dir mtime and reuse cached output
      untracked cache: mark what dirs should be recursed/saved
      untracked cache: don't open non-existent .gitignore
      ewah: add convenient wrapper ewah_serialize_strbuf()
      untracked cache: save to an index extension
      untracked cache: load from UNTR index extension
      untracked cache: invalidate at index addition or removal
      read-cache.c: split racy stat test to a separate function
      untracked cache: avoid racy timestamps
      untracked cache: print stats with $GIT_TRACE_UNTRACKED_STATS
      untracked cache: mark index dirty if untracked cache is updated
      untracked-cache: temporarily disable with $GIT_DISABLE_UNTRACKED_CACHE
      status: enable untracked cache
      update-index: manually enable or disable untracked cache
      update-index: test the system before enabling untracked cache
      t7063: tests for untracked cache
      mingw32: add uname()
      untracked cache: guard and disable on system changes
      git-status.txt: advertisement for untracked cache
      diff-lib.c: adjust position of i-t-a entries in diff
      index-pack: kill union delta_base to save memory
      t1509: update prepare script to be able to run t1509 in chroot again
      pathspec: avoid the need of "--" when wildcard is used
      read-cache: fix untracked cache invalidation when split-index is used
      checkout: don't check worktrees when not necessary
      worktree: new place for "git prune --worktrees"
      Add tests for wildcard "path vs ref" disambiguation

Ossi Herrala (1):
      config: fix settings in default_user_config template

Panagiotis Astithas (1):
      hooks/pre-auto-gc: adjust power checking for newer OS X

Patrick Steinhardt (5):
      bundle: verify arguments more strictly
      git-verify-pack.txt: fix inconsistent spelling of "packfile"
      git-unpack-objects.txt: fix inconsistent spelling of "packfile"
      pack-protocol.txt: fix insconsistent spelling of "packfile"
      doc: fix inconsistent spelling of "packfile"

Paul Tan (31):
      git-credential-store: support multiple credential files
      git-credential-store: support XDG_CONFIG_HOME
      t0302: test credential-store support for XDG_CONFIG_HOME
      path.c: implement xdg_config_home()
      attr.c: replace home_config_paths() with xdg_config_home()
      dir.c: replace home_config_paths() with xdg_config_home()
      credential-store.c: replace home_config_paths() with xdg_config_home()
      git-commit: replace use of home_config_paths()
      git-config: replace use of home_config_paths()
      path.c: remove home_config_paths()
      pull: remove --tags error in no merge candidates case
      t5520: prevent field splitting in content comparisons
      t5520: test no merge candidates cases
      pull: handle --log=<n>
      pull: make pull.ff=true override merge.ff
      pull: parse pull.ff as a bool or string
      t5520: test for failure if index has unresolved entries
      t5520: test work tree fast-forward when fetch updates head
      t5520: test --rebase with multiple branches
      t5520: test --rebase failure on unborn branch with index
      t5521: test --dry-run does not make any changes
      t5520: check reflog action in fast-forward merge
      pull: handle git-fetch's options as well
      pull: use git-rev-parse --parseopt for option parsing
      am --skip: revert changes introduced by failed 3way merge
      am -3: support 3way merge on unborn branch
      am --skip: support skipping while on unborn branch
      am --abort: revert changes introduced by failed 3way merge
      am --abort: support aborting to unborn branch
      am --abort: keep unrelated commits on unborn branch
      t0302: "unreadable" test needs SANITY prereq

Peter Krefting (2):
      l10n: sv.po: Update Swedish translation (2355t0f0u)
      l10n: sv.po: Update Swedish translation (2359t0f0u)

Phil Hord (1):
      rebase -i: redo tasks that die during cherry-pick

Phillip Sz (1):
      l10n: de.po: change error message from "sagen" to "Meinten Sie"

Quentin Neill (1):
      blame: add blame.showEmail configuration

Ralf Thielow (4):
      l10n: de.po: fix translation of "head nodes"
      l10n: de.po: translate "index" as "Index"
      l10n: de.po: translate 65 new messages
      l10n: de.po: translate 9 new messages

Ramsay Allan Jones (1):
      t7502-commit.sh: fix a broken and-chain

Remi Lespinet (3):
      git-am.sh: fix initialization of the threeway variable
      t4150-am: refactor am -3 tests
      git-am: add am.threeWay config variable

René Scharfe (5):
      pack-bitmaps: plug memory leak, fix allocation size for recent_bitmaps
      use file_exists() to check if a file exists in the worktree
      clean: remove unused variable buf
      dir: remove unused variable sb
      diff: parse ws-error-highlight option more strictly

Richard Hansen (2):
      Revert "test-lib.sh: do tests for color support after changing HOME"
      test-lib.sh: fix color support when tput needs ~/.terminfo

SZEDER Gábor (8):
      completion: remove redundant __git_compute_all_commands() call
      completion: fix and update 'git log --decorate=' options
      completion: remove credential helpers from porcelain commands
      completion: add a helper function to get config variables
      completion: simplify query for config variables
      Documentation: include 'merge.branchdesc' for merge and config as well
      completion: teach 'scissors' mode to 'git commit --cleanup='
      commit: cope with scissors lines in commit message

Sebastian Schuberth (1):
      clone: simplify string handling in guess_dir_name()

Stefan Beller (14):
      line-log.c: fix a memleak
      pack-bitmap.c: fix a memleak
      prefix_path(): unconditionally free results in the callers
      update-ref: test handling large transactions properly
      refs.c: remove lock_fd from struct ref_lock
      t7004: rename ULIMIT test prerequisite to ULIMIT_STACK_SIZE
      update-ref: test handling large transactions properly
      t7004: rename ULIMIT test prerequisite to ULIMIT_STACK_SIZE
      subdirectory tests: code cleanup, uncomment test
      submodule doc: reorder introductory paragraphs
      glossary: add "remote", "submodule", "superproject"
      Documentation/technical/pack-protocol: mention http as possible protocol
      p5310: Fix broken && chain in performance test
      revision.c: remove unneeded check for NULL

Sébastien Guimmara (4):
      command-list.txt: fix whitespace inconsistency
      command-list.txt: add the common groups block
      command-list.txt: drop the "common" tag
      help: respect new common command grouping

Thomas Braun (1):
      completion: suggest sequencer commands for revert

Thomas Gummerer (1):
      t1501: fix test with split index

Thomas Schneider (1):
      checkout: call a single commit "it" intead of "them"

Tony Finch (1):
      gitweb: fix typo in man page

Torsten Bögershausen (6):
      t2026 needs procondition SANITY
      t0027: cleanup: rename functions; avoid non-leading TABs
      t0027: support NATIVE_CRLF platforms
      t0027: Add repoMIX and LF_nul
      blame: CRLF in the working tree and LF in the repo
      git-checkout.txt: document "git checkout <pathspec>" better

Trần Ngọc Quân (2):
      l10n: Updated Vietnamese translation (2355t)
      l10n: Updated Vietnamese translation (2359t)

Vitor Antunes (2):
      t9801: check git-p4's branch detection with client spec enabled
      git-p4: improve client path detection when branches are used

brian m. carlson (14):
      define a structure for object IDs
      define utility functions for object IDs
      bisect.c: convert leaf functions to use struct object_id
      archive.c: convert to use struct object_id
      zip: use GIT_SHA1_HEXSZ for trailers
      bulk-checkin.c: convert to use struct object_id
      diff: convert struct combine_diff_path to object_id
      commit: convert parts to struct object_id
      patch-id: convert to use struct object_id
      apply: convert threeway_stage to object_id
      connect: simplify SSH connection code path
      t5601: fix quotation error leading to skipped tests
      connect: improve check for plink to reduce false positives
      refs: convert struct ref_entry to use struct object_id

^ permalink raw reply	[relevance 2%]

* [ANNOUNCE] Git v2.1.0-rc0
@ 2014-07-27 23:18  2% Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2014-07-27 23:18 UTC (permalink / raw)
  To: git; +Cc: Linux Kernel

An early preview release Git v2.1.0-rc0 is now available for testing
at the usual places.

The tarballs are found at:

    https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the 'v2.1.0-rc0'
tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://code.google.com/p/git-core/
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

Git v2.1 Release Notes (draft)
==============================

Backward compatibility notes
----------------------------

 * The default value we give to the environment variable LESS has been
   changed from "FRSX" to "FRX", losing "S" (chop long lines instead
   of wrapping).  Existing users who prefer not to see line-wrapped
   output may want to set

     $ git config core.pager "less -S"

   to restore the traditional behaviour.  It is expected that people
   find output from the most subcommands easier to read with the new
   default, except for "blame" which tends to produce really long
   lines.  To override the new default only for "git blame", you can
   do this:

     $ git config pager.blame "less -S"

 * A few disused directories in contrib/ have been retired.


Updates since v2.0
------------------

UI, Workflows & Features

 * Since the very beginning of Git, we gave the LESS environment a
   default value "FRSX" when we spawn "less" as the pager.  "S" (chop
   long lines instead of wrapping) has been removed from this default
   set of options, because it is more or less a personal taste thing,
   as opposed to others that have good justifications (i.e. "R" is
   very much justified because many kinds of output we produce are
   colored and "FX" is justified because output we produce is often
   shorter than a page).

 * The logic and data used to compute the display width needed for
   UTF-8 strings have been updated to match Unicode 7.0 better.

 * HTTP-based transports learned to propagate the error messages from
   the webserver better to the client coming over the HTTP transport.

 * The completion script for bash (in contrib/) has been updated to
   handle aliases that define complex sequence of commands better.

 * The "core.preloadindex" configuration variable is by default
   enabled, allowing modern platforms to take advantage of the
   multiple cores they have.

 * "git clone" applies the "if cloning from a local disk, physically
   copy repository using hardlinks, unless otherwise told not to with
   --no-local" optimization when url.*.insteadOf mechanism rewrites a
   "git clone $URL" that refers to a repository over the network to a
   clone from a local disk.

 * "git commit --date=<date>" option learned to read from more
   timestamp formats, including "--date=now".

 * The `core.commentChar` configuration variable is used to specify a
   custom comment character other than the default "#" to be used in
   the commit log editor.  This can be set to `auto` to attempt to
   choose a different character that does not conflict with what
   already starts a line in the message being edited for cases like
   "git commit --amend".

 * "git format-patch" learned --signature-file=<file> to take the mail
   signature from.

 * "git grep" learned grep.fullname configuration variable to force
   "--full-name" to be default.  This may cause regressions on
   scripted users that do not expect this new behaviour.

 * "git imap-send" learned to ask the credential helper for auth
   material.

 * "git log" and friends now understand the value "auto" set to the
   "log.decorate" configuration variable to enable the "--decorate"
   option automatically when the output is sent to tty.

 * "git merge" without argument, even when there is an upstream
   defined for the current branch, refused to run until
   merge.defaultToUpstream is set to true.  Flip the default of that
   configuration variable to true.

 * "git mergetool" learned to drive the vimdiff3 backend.

 * mergetool.prompt used to default to 'true', always asking "do you
   really want to run the tool on this path?".  Among the two
   purposes this prompt serves, ignore the use case to confirm that
   the user wants to view particular path with the named tool, and
   redefine the meaning of the prompt only to confirm the choice of
   the tool made by the autodetection (for those who configured the
   tool explicitly, the prompt shown for the latter purpose is
   simply annoying).

   Strictly speaking, this is a backward incompatible change and the
   users need to explicitly set the variable to 'true' if they want
   to resurrect the now-ignored use case.

 * "git replace" learned the "--edit" subcommand to create a
   replacement by editing an existing object.

 * "git replace" learned a "--graft" option to rewrite parents of a
   commit.

 * "git send-email" learned "--to-cover" and "--cc-cover" options, to
   tell it to copy To: and Cc: headers found in the first input file
   when emitting later input files.

 * "git svn" learned to cope with malformed timestamps with only one
   digit in the hour part, e.g. 2014-01-07T5:01:02.048176Z, emitted
   by some broken subversion server implementations.

 * "git tag" when editing the tag message shows the name of the tag
   being edited as a comment in the editor.

 * "git tag" learned to pay attention to "tag.sort" configuration, to
   be used as the default sort order when no --sort=<value> the option
   is given.

 * "git verify-commit" command to check GPG signature in signed
   commits, in a way similar to "git verify-tag" is used to check
   signed tags, was added.


Performance, Internal Implementation, etc.

 * Build procedure for 'subtree' (in contrib/) has been cleaned up.

 * The support for the profile-feedback build, which has been left
   bit-rotten for quite a while, has been updated.

 * An experimental format to use two files (the base file and
   incremental changes relative to it) to represent the index has been
   introduced; this may reduce I/O cost of rewriting a large index
   when only small part of the working tree changes.

 * Effort to shrink the size of patches Windows folks maintain on top
   by upstreaming them continues.

 * Patches maintained by msysgit folks for Windows port are being
   upstreamed here a bit by bit.

 * The leaf function to check validity of a refname format has been
   micro-optimized, using SSE2 instructions when available.  A few
   breakages during its development have been caught and fixed already
   but there might remain some more still; please test and report if
   you find any.

 * The `core.deltabasecachelimit` used to default to 16 MiB , but this
   proved to be too small, and has been bumped to 96 MiB.

 * "git blame" has been optimized greatly by reorganising the data
   structure that is used to keep track of the work to be done.

 * "git diff" that compares 3-or-more trees (e.g. parents and the
   result of a merge) have been optimized.

 * The API to update/delete references are being converted to handle
   updates to multiple references in a transactional way.  As an
   example, "update-ref --stdin [-z]" has been updated to use this
   API.

 * skip_prefix() and strip_suffix() API functions are used a lot more
   widely throughout the codebase now.

 * Parts of the test scripts can be skipped by using a range notation,
   e.g. "sh t1234-test.sh --run='1-4 6 8-'" to omit test piece 5 and 7
   and run everything else.


Also contains various documentation updates and code clean-ups.


Fixes since v2.0
----------------

Unless otherwise noted, all the fixes since v2.0 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * We used to unconditionally disable the pager in the pager process
   we spawn to feed out output, but that prevented people who want to
   run "less" within "less" from doing so.
   (merge c0459ca je/pager-do-not-recurse later to maint).

 * Tools that read diagnostic output in our standard error stream do
   not want to see terminal control sequence (e.g. erase-to-eol).
   Detect them by checking if the standard error stream is connected
   to a tty.
   (merge 38de156 mn/sideband-no-ansi later to maint).

 * Mishandling of patterns in .gitignore that has trailing SPs quoted
   with backslashes (e.g. ones that end with "\ ") have been
   corrected.
   (merge 97c1364be6b pb/trim-trailing-spaces later to maint).

 * Reworded the error message given upon a failure to open an existing
   loose object file due to e.g. permission issues; it was reported as
   the object being corrupt, but that is not quite true.
   (merge d6c8a05 jk/report-fail-to-read-objects-better later to maint).

 * "git log -2master" is a common typo that shows two commits starting
   from whichever random branch that is not 'master' that happens to
   be checked out currently.
   (merge e3fa568 jc/revision-dash-count-parsing later to maint).

 * Code to avoid adding the same alternate object store twice was
   subtly broken for a long time, but nobody seems to have noticed.
   (merge 80b4785 rs/fix-alt-odb-path-comparison later to maint).
   (merge 539e750 ek/alt-odb-entry-fix later to maint).

 * The "%<(10,trunc)%s" pretty format specifier in the log family of
   commands is used to truncate the string to a given length (e.g. 10
   in the example) with padding to column-align the output, but did
   not take into account that number of bytes and number of display
   columns are different.
   (merge 7d50987 as/pretty-truncate later to maint).

 * "%G" (nothing after G) is an invalid pretty format specifier, but
   the parser did not notice it as garbage.
   (merge 958b2eb jk/pretty-G-format-fixes later to maint).

 * A handful of code paths had to read the commit object more than
   once when showing header fields that are usually not parsed.  The
   internal data structure to keep track of the contents of the commit
   object has been updated to reduce the need for this double-reading,
   and to allow the caller find the length of the object.
   (merge 218aa3a jk/commit-buffer-length later to maint).

 * The "mailmap.file" configuration option did not support the tilde
   expansion (i.e. ~user/path and ~/path).
   (merge 9352fd5 ow/config-mailmap-pathname later to maint).

 * The completion scripts (in contrib/) did not know about quite a few
   options that are common between "git merge" and "git pull", and a
   couple of options unique to "git merge".
   (merge 8fee872 jk/complete-merge-pull later to maint).

 * The unix-domain socket used by the sample credential cache daemon
   tried to unlink an existing stale one at a wrong path, if the path
   to the socket was given as an overlong path that does not fit in
   sun_path member of the sockaddr_un structure.
   (merge 2869b3e rs/fix-unlink-unix-socket later to maint).

 * An ancient rewrite passed a wrong pointer to a curl library
   function in a rarely used code path.
   (merge 479eaa8 ah/fix-http-push later to maint).

 * "--ignore-space-change" option of "git apply" ignored the spaces
   at the beginning of line too aggressively, which is inconsistent
   with the option of the same name "diff" and "git diff" have.
   (merge 14d3bb4 jc/apply-ignore-whitespace later to maint).

 * "git blame" miscounted number of columns needed to show localized
   timestamps, resulting in jaggy left-side-edge of the source code
   lines in its output.
   (merge dd75553 jx/blame-align-relative-time later to maint).

 * "git blame" assigned the blame to the copy in the working-tree if
   the repository is set to core.autocrlf=input and the file used CRLF
   line endings.
   (merge 4d4813a bc/blame-crlf-test later to maint).

 * "git clone -b brefs/tags/bar" would have mistakenly thought we were
   following a single tag, even though it was a name of the branch,
   because it incorrectly used strstr().
   (merge 60a5f5f jc/fix-clone-single-starting-at-a-tag later to maint).

 * "git commit --allow-empty-messag -C $commit" did not work when the
   commit did not have any log message.
   (merge 076cbd6 jk/commit-C-pick-empty later to maint).

 * "git diff --find-copies-harder" sometimes pretended as if the mode
   bits have changed for paths that are marked with assume-unchanged
   bit.
   (merge 5304810 jk/diff-files-assume-unchanged later to maint).

 * "filter-branch" left an empty single-parent commit that results when
   all parents of a merge commit gets mapped to the same commit, even
   under "--prune-empty".
   (merge 79bc4ef cb/filter-branch-prune-empty-degenerate-merges later to maint).

 * "git format-patch" did not enforce the rule that the "--follow"
   option from the log/diff family of commands must be used with
   exactly one pathspec.
   (merge dd63f16 jk/diff-follow-must-take-one-pathspec later to maint).

 * "git gc --auto" was recently changed to run in the background to
   give control back early to the end-user sitting in front of the
   terminal, but it forgot that housekeeping involving reflogs should
   be done without other processes competing for accesses to the refs.
   (merge 62aad18 nd/daemonize-gc later to maint).

 * "git grep -O" to show the lines that hit in the pager did not work
   well with case insensitive search.  We now spawn "less" with its
   "-I" option when it is used as the pager (which is the default).
   (merge f7febbe sk/spawn-less-case-insensitively-from-grep-O-i later to maint).

 * We used to disable threaded "git index-pack" on platforms without
   thread-safe pread(); use a different workaround for such
   platforms to allow threaded "git index-pack".
   (merge 3953949 nd/index-pack-one-fd-per-thread later to maint).

 * The error reporting from "git index-pack" has been improved to
   distinguish missing objects from type errors.
   (merge 77583e7 jk/index-pack-report-missing later to maint).

 * "log --show-signature" incorrectly decided the color to paint a
   mergetag that was and was not correctly validated.
   (merge 42c55ce mg/fix-log-mergetag-color later to maint).

 * "log --show-signature" did not pay attention to "--graph" option.
   (merge cf3983d zk/log-graph-showsig later to maint).

 * "git mailinfo" used to read beyond the end of header string while
   parsing an incoming e-mail message to extract the patch.
   (merge b1a013d rs/mailinfo-header-cmp later to maint).

 * On a case insensitive filesystem, merge-recursive incorrectly
   deleted the file that is to be renamed to a name that is the same
   except for case differences.
   (merge baa37bf dt/merge-recursive-case-insensitive later to maint).

 * Merging changes into a file that ends in an incomplete line made the
   last line into a complete one, even when the other branch did not
   change anything around the end of file.
   (merge ba31180 mk/merge-incomplete-files later to maint).

 * "git pack-objects" unnecessarily copied the previous contents when
   extending the hashtable, even though it will populate the table
   from scratch anyway.
   (merge fb79947 rs/pack-objects-no-unnecessary-realloc later to maint).

 * Recent updates to "git repack" started to duplicate objects that
   are in packfiles marked with .keep flag into the new packfile by
   mistake.
   (merge d078d85 jk/repack-pack-keep-objects later to maint).

 * "git rerere forget" did not work well when merge.conflictstyle
   was set to a non-default value.
   (merge de3d8bb fc/rerere-conflict-style later to maint).

 * "git remote rm" and "git remote prune" can involve removing many
   refs at once, which is not a very efficient thing to do when very
   many refs exist in the packed-refs file.
   (merge e6bea66 jl/remote-rm-prune later to maint).

 * "git log --exclude=<glob> --all | git shortlog" worked as expected,
   but "git shortlog --exclude=<glob> --all", which is supposed to be
   identical to the above pipeline, was not accepted at the command
   line argument parser level.
   (merge eb07774 jc/shortlog-ref-exclude later to maint).

 * The autostash mode of "git rebase -i" did not restore the dirty
   working tree state if the user aborted the interactive rebase by
   emptying the insn sheet.
   (merge ddb5432 rr/rebase-autostash-fix later to maint).

 * "git rebase --fork-point" did not filter out patch-identical
   commits correctly.

 * During "git rebase --merge", a conflicted patch could not be
   skipped with "--skip" if the next one also conflicted.
   (merge 95104c7 bc/fix-rebase-merge-skip later to maint).

 * "git show -s" (i.e. show log message only) used to incorrectly emit
   an extra blank line after a merge commit.
   (merge ad2f725 mk/show-s-no-extra-blank-line-for-merges later to maint).

 * "git status", even though it is a read-only operation, tries to
   update the index with refreshed lstat(2) info to optimize future
   accesses to the working tree opportunistically, but this could
   race with a "read-write" operation that modify the index while it
   is running.  Detect such a race and avoid overwriting the index.
   (merge 426ddee ym/fix-opportunistic-index-update-race later to maint).

 * "git status" (and "git commit") behaved as if changes in a modified
   submodule are not there if submodule.*.ignore configuration is set,
   which was misleading.  The configuration is only to unclutter diff
   output during the course of development, and should not to hide
   changes in the "status" output to cause the users forget to commit
   them.
   (merge c215d3d jl/status-added-submodule-is-never-ignored later to maint).

 * Documentation for "git submodule sync" forgot to say that the subcommand
   can take the "--recursive" option.
   (merge 9393ae7 mc/doc-submodule-sync-recurse later to maint).

 * "git update-index --cacheinfo" in 2.0 release crashed on a
   malformed command line.
   (merge c8e1ee4 jc/rev-parse-argh-dashed-multi-words later to maint).

 * The mode to run tests with HTTP server tests disabled was broken.
   (merge afa53fe na/no-http-test-in-the-middle later to maint).

----------------------------------------------------------------

Changes since v2.0.0, 643 non-merge changes from 80 contributors,
are as follows:

Abbaad Haider (1):
      http-push.c: make CURLOPT_IOCTLDATA a usable pointer

Alexey Shumkin (5):
      t4205 (log-pretty-formats): don't hardcode SHA-1 in expected outputs
      t4041, t4205, t6006, t7102: don't hardcode tested encoding value
      t4205 (log-pretty-format): use `tformat` rather than `format`
      t4205, t6006: add tests that fail with i18n.logOutputEncoding set
      pretty.c: format string with truncate respects logOutputEncoding

Anders Kaseorg (1):
      gitk: Allow displaying time zones from author and commit dates timestamps

Andi Kleen (4):
      Use BASIC_FLAGS for profile feedback
      Don't define away __attribute__ on gcc
      Run the perf test suite for profile feedback too
      Fix profile feedback with -jN and add profile-fast

Andreas Schwab (1):
      grep: add grep.fullName config variable

Ben Walton (1):
      compat/bswap.h: fix endianness detection

Brian Gesiak (14):
      strbuf: use _rtrim and _ltrim in strbuf_trim
      api-strbuf.txt: add docs for _trim and _ltrim
      builtin/ls-remote.c: rearrange xcalloc arguments
      builtin/remote.c: rearrange xcalloc arguments
      commit.c: rearrange xcalloc arguments
      config.c: rearrange xcalloc arguments
      diff.c: rearrange xcalloc arguments
      http-push.c: rearrange xcalloc arguments
      imap-send.c: rearrange xcalloc arguments
      notes.c: rearrange xcalloc arguments
      pack-revindex.c: rearrange xcalloc arguments
      reflog-walk.c: rearrange xcalloc arguments
      remote.c: rearrange xcalloc arguments
      transport-helper.c: rearrange xcalloc arguments

Cezary Zawadka (1):
      Windows: allow using UNC path for git repository

Charles Bailey (3):
      compat/bswap.h: detect endianness on more platforms that don't use BYTE_ORDER
      filter-branch: eliminate duplicate mapped parents
      Fix contrib/subtree Makefile to patch #! line

Christian Couder (16):
      replace: make sure --edit results in a different object
      replace: refactor checking ref validity
      replace: die early if replace ref already exists
      replace: add tests for --edit
      replace: add --edit to usage string
      Documentation: replace: describe new --edit option
      commit: add for_each_mergetag()
      replace: cleanup redirection style in tests
      replace: add --graft option
      replace: add test for --graft
      Documentation: replace: add --graft option
      contrib: add convert-grafts-to-replace-refs.sh
      replace: remove signature when using --graft
      replace: add test for --graft with signed commit
      replace: check mergetags when using --graft
      replace: add test for --graft with a mergetag

Dan Albert (1):
      imap-send: use git-credential

David Aguilar (3):
      gitk: Honor TMPDIR when viewing external diffs
      gitk: Use mktemp -d to avoid predictable temporary directories
      gitk: Catch mkdtemp errors

David Kastrup (2):
      blame: large-scale performance rewrite
      Bump core.deltaBaseCacheLimit to 96m

David Turner (7):
      docs: document RUN_SETUP_GENTLY and clarify RUN_SETUP
      merge-recursive.c: fix case-changing merge bug
      mv: allow renaming to fix case on case insensitive filesystems
      refs.c: optimize check_refname_component()
      refs.c: SSE2 optimizations for check_refname_component
      refs.c: handle REFNAME_REFSPEC_PATTERN at end of page
      refs: fix valgrind suppression file

Elia Pinto (62):
      t9365-continuing-queries.sh: use the $( ... ) construct for command substitution
      test-gitmw-lib.sh: use the $( ... ) construct for command substitution
      t7900-subtree.sh: use the $( ... ) construct for command substitution
      appp.sh: use the $( ... ) construct for command substitution
      git-pull.sh: use the $( ... ) construct for command substitution
      git-rebase--merge.sh: use the $( ... ) construct for command substitution
      git-rebase.sh: use the $( ... ) construct for command substitution
      git-stash.sh: use the $( ... ) construct for command substitution
      git-web--browse.sh: use the $( ... ) construct for command substitution
      lib-credential.sh: use the $( ... ) construct for command substitution
      lib-cvs.sh: use the $( ... ) construct for command substitution
      lib-gpg.sh: use the $( ... ) construct for command substitution
      p5302-pack-index.sh: use the $( ... ) construct for command substitution
      t0001-init.sh: use the $( ... ) construct for command substitution
      t0010-racy-git.sh: use the $( ... ) construct for command substitution
      t0020-crlf.sh: use the $( ... ) construct for command substitution
      t0025-crlf-auto.sh: use the $( ... ) construct for command substitution
      t0026-eol-config.sh: use the $( ... ) construct for command substitution
      t0030-stripspace.sh: use the $( ... ) construct for command substitution
      t0300-credentials.sh: use the $( ... ) construct for command substitution
      t1000-read-tree-m-3way.sh: use the $( ... ) construct for command substitution
      t1001-read-tree-m-2way.sh: use the $( ... ) construct for command substitution
      t1002-read-tree-m-u-2way.sh: use the $( ... ) construct for command substitution
      t1003-read-tree-prefix.sh: use the $( ... ) construct for command substitution
      t1004-read-tree-m-u-wf.sh: use the $( ... ) construct for command substitution
      t1020-subdirectory.sh: use the $( ... ) construct for command substitution
      t1050-large.sh: use the $( ... ) construct for command substitution
      t3905-stash-include-untracked.sh: use the $( ... ) construct for command substitution
      t3910-mac-os-precompose.sh: use the $( ... ) construct for command substitution
      t4006-diff-mode.sh: use the $( ... ) construct for command substitution
      t4010-diff-pathspec.sh: use the $( ... ) construct for command substitution
      t4012-diff-binary.sh: use the $( ... ) construct for command substitution
      t4013-diff-various.sh: use the $( ... ) construct for command substitution
      t4014-format-patch.sh: use the $( ... ) construct for command substitution
      t4036-format-patch-signer-mime.sh: use the $( ... ) construct for command substitution
      t4038-diff-combined.sh: use the $( ... ) construct for command substitution
      t4057-diff-combined-paths.sh: use the $( ... ) construct for command substitution
      t4116-apply-reverse.sh: use the $( ... ) construct for command substitution
      t4119-apply-config.sh: use the $( ... ) construct for command substitution
      t4204-patch-id.sh: use the $( ... ) construct for command substitution
      t5000-tar-tree.sh: use the $( ... ) construct for command substitution
      scripts: "export VAR=VALUE" construct is not portable
      check_bindir: avoid "test <cond> -a/-o <cond>"
      contrib/examples/git-clone.sh: avoid "test <cond> -a/-o <cond>"
      contrib/examples/git-commit.sh: avoid "test <cond> -a/-o <cond>"
      contrib/examples/git-merge.sh: avoid "test <cond> -a/-o <cond>"
      contrib/examples/git-repack.sh: avoid "test <cond> -a/-o <cond>"
      contrib/examples/git-resolve.sh: avoid "test <cond> -a/-o <cond>"
      git-bisect.sh: avoid "test <cond> -a/-o <cond>"
      git-mergetool.sh: avoid "test <cond> -a/-o <cond>"
      git-rebase--interactive.sh: avoid "test <cond> -a/-o <cond>"
      t/lib-httpd.sh: avoid "test <cond> -a/-o <cond>"
      t/t0025-crlf-auto.sh: avoid "test <cond> -a/-o <cond>"
      t/t0026-eol-config.sh: avoid "test <cond> -a/-o <cond>"
      t/t4102-apply-rename.sh: avoid "test <cond> -a/-o <cond>"
      t/t5000-tar-tree.sh: avoid "test <cond> -a/-o <cond>"
      t/t5403-post-checkout-hook.sh: avoid "test <cond> -a/-o <cond>"
      t/t5538-push-shallow.sh: avoid "test <cond> -a/-o <cond>"
      t/t9814-git-p4-rename.sh: avoid "test <cond> -a/-o <cond>"
      t/test-lib-functions.sh: avoid "test <cond> -a/-o <cond>"
      git-submodule.sh: avoid "test <cond> -a/-o <cond>"
      submodule.c: use the ARRAY_SIZE macro

Ephrim Khong (1):
      sha1_file: do not add own object directory as alternate

Eric Wong (1):
      config: preserve config file permissions on edits

Erik Faye-Lund (1):
      send-email: recognize absolute path on Windows

Fabian Ruch (1):
      sequencer: signal failed ff as an aborted, not a conflicted merge

Felipe Contreras (13):
      fast-export: improve argument parsing
      fast-export: add new --refspec option
      transport-helper: add support for old:new refspec
      transport-helper: add support to push symbolic refs
      fast-import: add support to delete refs
      fast-export: add support to delete refs
      transport-helper: add support to delete branches
      transport-helper: remove unnecessary strbuf resets
      mergetools: add vimdiff3 mode
      mergetool: run prompt only if guessed tool
      merge: enable defaulttoupstream by default
      rerere: fix for merge.conflictstyle
      silence a bunch of format-zero-length warnings

Ilya Bobyr (4):
      test-lib: document short options in t/README
      test-lib: tests skipped by GIT_SKIP_TESTS say so
      test-lib: '--run' to run only specific tests
      gitk: Replace SHA1 entry field on keyboard paste

Jacek Konieczny (1):
      pull: do not abuse 'break' inside a shell 'case'

Jacob Keller (2):
      tag: fix --sort tests to use cat<<-\EOF format
      tag: support configuring --sort via .gitconfig

James Denholm (6):
      contrib/subtree/Makefile: scrap unused $(gitdir)
      contrib/subtree/Makefile: use GIT-VERSION-FILE
      contrib/subtree/Makefile: s/libexecdir/gitexecdir/
      contrib/subtree/Makefile: clean up rules to generate documentation
      contrib/subtree/Makefile: clean up rule for "clean"
      contrib/subtree: allow adding an annotated tag

Jason St. John (1):
      Documentation: use "command-line" when used as a compound adjective, and fix other minor grammatical issues

Jean-Jacques Lafay (1):
      git tag --contains: avoid stack overflow

Jeff King (131):
      run_external_diff: use an argv_array for the environment
      run_external_diff: clean up error handling
      run_external_diff: drop fflush(NULL)
      run_external_diff: hoist common bits out of conditional
      run_external_diff: refactor cmdline setup logic
      commit: do not complain of empty messages from -C
      t3910: show failure of core.precomposeunicode with decomposed filenames
      replace: refactor command-mode determination
      replace: use OPT_CMDMODE to handle modes
      replace: factor object resolution out of replace_object
      replace: add --edit option
      commit: use split_ident_line to compare author/committer
      pretty: make show_ident_date public
      commit: print "Date" line when the user has set date
      commit: accept more date formats for "--date"
      inline constant return from error() function
      let clang use the constant-return error() macro
      grep: use run-command's "dir" option for --open-files-in-pager
      t/lib-httpd: require SANITY prereq
      index-pack: distinguish missing objects from type errors
      run_diff_files: do not look at uninitialized stat data
      run-command: store an optional argv_array
      run_column_filter: use argv_array
      git_connect: use argv_array
      get_helper: use run-command's internal argv_array
      get_exporter: use argv_array
      get_importer: use run-command's internal argv_array
      argv-array: drop "detach" code
      open_sha1_file: report "most interesting" errno
      move "--follow needs one pathspec" rule to diff_setup_done
      format-patch: make newline after signature conditional
      daemon/config: factor out duplicate xstrdup_tolower
      test-lib: preserve GIT_CURL_VERBOSE from the environment
      t/lib-httpd: use write_script to copy CGI scripts
      t5550: test display of remote http error messages
      strbuf: add strbuf_tolower function
      http: extract type/subtype portion of content-type
      http: optionally extract charset parameter from content-type
      strbuf: add strbuf_reencode helper
      remote-curl: reencode http error messages
      http: default text charset to iso-8859-1
      t5537: re-drop http tests
      error_resolve_conflict: rewrap advice message
      error_resolve_conflict: drop quotations around operation
      update-index: fix segfault with missing --cacheinfo argument
      repack: do not accidentally pack kept objects by default
      repack: respect pack.writebitmaps
      repack: s/write_bitmap/&s/ in code
      pack-objects: stop respecting pack.writebitmaps
      repack: simplify handling of --write-bitmap-index
      repack: introduce repack.writeBitmaps config option
      commit_tree: take a pointer/len pair rather than a const strbuf
      replace dangerous uses of strbuf_attach
      alloc: include any-object allocations in alloc_report
      commit: push commit_index update into alloc_commit_node
      do not create "struct commit" with xcalloc
      logmsg_reencode: return const buffer
      sequencer: use logmsg_reencode in get_message
      t7700: drop explicit --no-pack-kept-objects from .keep test
      provide a helper to free commit buffer
      provide a helper to set the commit buffer
      provide helpers to access the commit buffer
      use get_cached_commit_buffer where appropriate
      use get_commit_buffer to avoid duplicate code
      convert logmsg_reencode to get_commit_buffer
      use get_commit_buffer everywhere
      commit-slab: provide a static initializer
      commit: convert commit->buffer to a slab
      commit: record buffer length in cache
      reuse cached commit buffer when parsing signatures
      t7510: stop referring to master in later tests
      t7510: test a commit signed by an unknown key
      t7510: check %G* pretty-format output
      pretty: avoid reading past end-of-string with "%G"
      parse_diff_color_slot: drop ofs parameter
      daemon: mark some strings as const
      avoid using skip_prefix as a boolean
      strbuf: add xstrfmt helper
      use xstrfmt in favor of manual size calculations
      use xstrdup instead of xmalloc + strcpy
      use xstrfmt to replace xmalloc + sprintf
      use xstrfmt to replace xmalloc + strcpy/strcat
      setup_git_env: use git_pathdup instead of xmalloc + sprintf
      sequencer: use argv_array_pushf
      merge: use argv_array when spawning merge strategy
      walker_fetch: fix minor memory leak
      unique_path: fix unlikely heap overflow
      refactor skip_prefix to return a boolean
      apply: use skip_prefix instead of raw addition
      fast-import: fix read of uninitialized argv memory
      transport-helper: avoid reading past end-of-string
      use skip_prefix to avoid magic numbers
      use skip_prefix to avoid repeating strings
      fast-import: use skip_prefix for parsing input
      daemon: use skip_prefix to avoid magic numbers
      stat_opt: check extra strlen call
      fast-import: refactor parsing of spaces
      fetch-pack: refactor parsing in get_ack
      git: avoid magic number with skip_prefix
      use skip_prefix to avoid repeated calculations
      http-push: refactor parsing of remote object names
      setup_git_env(): introduce git_path_from_env() helper
      move "%G" format test from t7510 to t6006
      replace: replace spaces with tabs in indentation
      avoid double close of descriptors handed to run_command
      replace: use argv_array in export_object
      replace: add a --raw mode for --edit
      add strip_suffix function
      implement ends_with via strip_suffix
      replace has_extension with ends_with
      use strip_suffix instead of ends_with in simple cases
      index-pack: use strip_suffix to avoid magic numbers
      strbuf: implement strbuf_strip_suffix
      verify-pack: use strbuf_strip_suffix
      prepare_packed_git_one: refactor duplicate-pack check
      t7300: repair filesystem permissions with test_when_finished
      remote-curl: do not complain on EOF from parent git
      remote-curl: use error instead of fprintf(stderr)
      remote-curl: mark helper-protocol errors more clearly
      tag: use skip_prefix instead of magic numbers
      alloc: write out allocator definitions
      move setting of object->type to alloc_* functions
      parse_object_buffer: do not set object type
      add object_as_type helper for casting objects
      alloc: factor out commit index
      object_as_type: set commit index
      diff-tree: avoid lookup_unknown_object
      prio-queue: factor out compare and swap operations
      prio-queue: make output stable with respect to insertion
      paint_down_to_common: use prio_queue
      t5539: update a flaky test

Jens Lehmann (21):
      status/commit: show staged submodules regardless of ignore config
      commit -m: commit staged submodules regardless of ignore config
      git-gui: show staged submodules regardless of ignore config
      git-gui: tolerate major version changes when comparing the git version
      gitk: Show staged submodules regardless of ignore config
      test-lib: add test_dir_is_empty()
      t/Makefile: check helper scripts for non-portable shell commands too
      t/Makefile: always test all lint targets when running tests
      submodules: add the lib-submodule-update.sh test library
      checkout: call the new submodule update test framework
      apply: add t4137 for submodule updates
      read-tree: add t1013 for submodule updates
      reset: add t7112 for submodule updates
      bisect: add t6041 for submodule updates
      merge: add t7613 for submodule updates
      rebase: add t3426 for submodule updates
      pull: add t5572 for submodule updates
      cherry-pick: add t3512 for submodule updates
      am: add t4255 for submodule updates
      stash: add t3906 for submodule updates
      revert: add t3513 for submodule updates

Jens Lindström (3):
      remote rm: delete remote configuration as the last
      remote: repack packed-refs once when deleting multiple refs
      remote prune: optimize "dangling symref" check/warning

Jeremiah Mahler (7):
      format-patch: add "--signature-file=<file>" option
      t9138-git-svn-authors-prog.sh fixups
      Documentation: wording fixes in the user manual and glossary
      t/t7810-grep.sh: remove duplicate test_config()
      api-strbuf.txt minor typos
      name-hash.c: replace cache_name_compare() with memcmp(3)
      cleanup duplicate name_compare() functions

Jiang Xin (2):
      blame: fix broken time_buf paddings in relative timestamp
      blame: dynamic blame_date_width for different locales

Johannes Schindelin (2):
      git grep -O -i: if the pager is 'less', pass the '-I' option
      Win32: let mingw_execve() return an int

Johannes Sixt (1):
      fix brown paper bag breakage in t5150-request-pull.sh

John Keeping (4):
      completion: add a note that merge options are shared
      completion: add missing options for git-merge
      rebase--am: use --cherry-pick instead of --ignore-if-in-upstream
      rebase: omit patch-identical commits with --fork-point

Jonathan McCrohan (1):
      git-instaweb: add support for Apache 2.4

Jonathan Nieder (4):
      contrib: remove vim support instructions
      contrib: remove git-diffall
      test-lint: find unportable sed, echo, test, and export usage after &&
      test doc: test_write_lines does not split its arguments

Junio C Hamano (49):
      apply --ignore-space-change: lines with and without leading whitespaces do not match
      send-email: windows drive prefix (e.g. C:) appears only at the beginning
      mergetool: document the default for --[no-]prompt
      compat/bswap.h: restore preference __BIG_ENDIAN over BIG_ENDIAN
      CodingGuidelines: once it is in, it is not worth the code churn
      CodingGuidelines: give an example for case/esac statement
      CodingGuidelines: give an example for redirection
      CodingGuidelines: give an example for control statements
      CodingGuidelines: give an example for shell function preamble
      CodingGuidelines: do not call the conditional statement "if()"
      CodingGuidelines: on comparison
      CodingGuidelines: on splitting a long line
      CodingGuidelines: avoid "test <cond> -a/-o <cond>"
      scripts: more "export VAR=VALUE" fixes
      Git 1.9.4
      fetch doc: update introductory part for clarity
      fetch doc: update note on '+' in front of the refspec
      fetch doc: remove notes on outdated "mixed layout"
      First batch for 2.1
      shortlog: allow --exclude=<glob> to be passed
      fetch doc: on pulling multiple refspecs
      fetch doc: update refspec format description
      fetch doc: remove "short-cut" section
      fetch doc: add a section on configured remote-tracking branches
      fetch: allow explicit --refmap to override configuration
      Second batch for 2.1
      Update draft release notes to 2.1
      test: turn EXPENSIVE into a lazy prerequisite
      test: turn USR_BIN_TIME into a lazy prerequisite
      t3302: coding style updates
      t3302: do not chdir around in the primary test process
      t3302: drop unnecessary NOT_EXPENSIVE pseudo-prerequisite
      t3419: drop unnecessary NOT_EXPENSIVE pseudo-prerequisite
      revision: parse "git log -<count>" more carefully
      t0008: do not depend on 'echo' handling backslashes specially
      Third batch for 2.1
      git-submodule.sh: avoid "echo" path-like values
      Fourth batch for 2.1
      builtin/clone.c: detect a clone starting at a tag correctly
      Git 2.0.1
      Fifth batch for 2.1
      Sixth batch for 2.1
      Start preparing for 2.0.2
      Seventh batch for 2.1
      Git 2.0.2
      Eighth batch for 2.1
      Ninth batch for 2.1
      Git 2.0.3
      Git 2.1.0-rc0

Jörn Engel (1):
      pager: do allow spawning pager recursively

Karsten Blees (46):
      MSVC: link dynamically to the CRT
      Win32 dirent: remove unused dirent.d_ino member
      Win32 dirent: remove unused dirent.d_reclen member
      Win32 dirent: change FILENAME_MAX to MAX_PATH
      Win32 dirent: clarify #include directives
      Win32 dirent: improve dirent implementation
      Win32: move main macro to a function
      Win32: support Unicode console output
      Win32: detect console streams more reliably
      Win32: warn if the console font doesn't support Unicode
      Win32: add Unicode conversion functions
      Win32: Thread-safe windows console output
      Win32: fix broken pipe detection
      Win32: reliably detect console pipe handles
      Win32: simplify internal mingw_spawn* APIs
      Win32: fix potential multi-threading issue
      MinGW: disable CRT command line globbing
      Win32: Unicode arguments (outgoing)
      Win32: Unicode arguments (incoming)
      trace: move trace declarations from cache.h to new trace.h
      trace: consistently name the format parameter
      trace: remove redundant printf format attribute
      symlinks: remove PATH_MAX limitation
      hashmap: factor out getting a hash code from a SHA1
      hashmap: improve struct hashmap member documentation
      hashmap: add simplified hashmap_get_from_hash() API
      hashmap: add string interning API
      cache.h: rename cache_def_free to cache_def_clear
      trace: improve trace performance
      Documentation/git.txt: improve documentation of 'GIT_TRACE*' variables
      sha1_file: change GIT_TRACE_PACK_ACCESS logging to use trace API
      trace: add infrastructure to augment trace output with additional info
      trace: disable additional trace output for unit tests
      trace: add current timestamp to all trace output
      trace: move code around, in preparation to file:line output
      trace: add 'file:line' to all trace output
      trace: add high resolution timer function to debug performance issues
      trace: add trace_performance facility to debug performance issues
      git: add performance tracing for git's main() function to debug scripts
      wt-status: simplify performance measurement by using getnanotime()
      progress: simplify performance measurement by using getnanotime()
      api-trace.txt: add trace API documentation
      Win32: Unicode file name support (except dirent)
      Win32: Unicode file name support (dirent)
      MinGW: fix compile error due to missing ELOOP
      config: use chmod() instead of fchmod()

Kirill Smelkov (20):
      combine-diff: move show_log_first logic/action out of paths scanning
      combine-diff: move changed-paths scanning logic into its own function
      tree-diff: no need to manually verify that there is no mode change for a path
      tree-diff: no need to pass match to skip_uninteresting()
      tree-diff: show_tree() is not needed
      tree-diff: consolidate code for emitting diffs and recursion in one place
      tree-diff: don't assume compare_tree_entry() returns -1,0,1
      tree-diff: move all action-taking code out of compare_tree_entry()
      tree-diff: rename compare_tree_entry -> tree_entry_pathcmp
      tree-diff: show_path prototype is not needed anymore
      tree-diff: simplify tree_entry_pathcmp
      tree-diff: remove special-case diff-emitting code for empty-tree cases
      tree-diff: diff_tree() should now be static
      tree-diff: rework diff_tree interface to be sha1 based
      tree-diff: no need to call "full" diff_tree_sha1 from show_path()
      tree-diff: reuse base str(buf) memory on sub-tree recursion
      Portable alloca for Git
      tree-diff: rework diff_tree() to generate diffs for multiparent cases as well
      combine-diff: speed it up, by using multiparent diff tree-walker directly
      mingw: activate alloca

Linus Torvalds (1):
      git log: support "auto" decorations

Luis R. Rodriguez (1):
      git.c: treat RUN_SETUP_GENTLY and RUN_SETUP as mutually exclusive

Marc Branchaud (2):
      fetch doc: move FETCH_HEAD material lower and add an example
      docs: Explain the purpose of fetch's and pull's <refspec> parameter.

Matthew Chen (1):
      submodule: document "sync --recursive"

Matthieu Moy (4):
      git-remote-mediawiki: allow stop/start-ing the test server
      git-remote-mediawiki: fix encoding issue for UTF-8 media files
      pager: remove 'S' from $LESS by default
      rebase -i: test "Nothing to do" case with autostash

Max Kirillov (5):
      git-show: fix 'git show -s' to not add extra terminator after merge commit
      gitk: Switch to patch mode when searching for line origin
      gitk: Add visiblerefs option, which lists always-shown branches
      t6023-merge-file.sh: fix and mark as broken invalid tests
      git-merge-file: do not add LF at EOF while applying unrelated change

Maxime Coste (2):
      git-p4: Do not include diff in spec file when just preparing p4
      git-p4: fix submit in non --prepare-p4-only mode

Michael Barabanov (1):
      use local cloning if insteadOf makes a local URL

Michael Haggerty (27):
      t1400: fix name and expected result of one test
      t1400: provide more usual input to the command
      parse_arg(): really test that argument is properly terminated
      t1400: add some more tests involving quoted arguments
      refs.h: rename the action_on_err constants
      update_refs(): fix constness
      update-ref --stdin: read the whole input at once
      parse_cmd_verify(): copy old_sha1 instead of evaluating <oldvalue> twice
      update-ref.c: extract a new function, parse_refname()
      update-ref --stdin: improve error messages for invalid values
      update-ref --stdin: make error messages more consistent
      update-ref --stdin: simplify error messages for missing oldvalues
      t1400: test that stdin -z update treats empty <newvalue> as zeros
      update-ref.c: extract a new function, parse_next_sha1()
      update-ref --stdin -z: deprecate interpreting the empty string as zeros
      t1400: test one mistake at a time
      update-ref --stdin: improve the error message for unexpected EOF
      update-ref --stdin: harmonize error messages
      refs: add a concept of a reference transaction
      update-ref --stdin: reimplement using reference transactions
      refs: remove API function update_refs()
      struct ref_update: rename field "ref_name" to "refname"
      struct ref_update: store refname as a FLEX_ARRAY
      ref_transaction_commit(): simplify code using temporary variables
      struct ref_update: add a lock field
      struct ref_update: add a type field
      ref_transaction_commit(): work with transaction->updates in place

Michael J Gruber (7):
      t7510: use consistent &&-chains in loop
      gpg-interface: provide clear helper for struct signature_check
      gpg-interface: provide access to the payload
      verify-commit: scriptable commit signature verification
      t7510: exit for loop with test result
      t7510: test verify-commit
      log: correctly identify mergetag signature verification status

Michael Naumov (1):
      sideband.c: do not use ANSI control sequence on non-terminal

Michael S. Tsirkin (6):
      git-send-email: two new options: to-cover, cc-cover
      test/send-email: to-cover, cc-cover tests
      rebase --keep-empty -i: add test
      test: add test_write_lines helper
      patch-id: make it stable against hunk reordering
      patch-id-test: test stable and unstable behaviour

Nguyễn Thái Ngọc Duy (40):
      index-pack: work around thread-unsafe pread()
      ewah: fix constness of ewah_read_mmap
      ewah: delete unused ewah_read_mmap_native declaration
      sequencer: do not update/refresh index if the lock cannot be held
      config: be strict on core.commentChar
      commit: allow core.commentChar=auto for character auto selection
      gc --auto: do not lock refs in the background
      git potty: restore environments after alias expansion
      read-cache: new API write_locked_index instead of write_index/write_cache
      read-cache: relocate and unexport commit_locked_index()
      read-cache: store in-memory flags in the first 12 bits of ce_flags
      read-cache: be strict about "changed" in remove_marked_cache_entries()
      read-cache: be specific what part of the index has changed
      update-index: be specific what part of the index has changed
      resolve-undo: be specific what part of the index has changed
      unpack-trees: be specific what part of the index has changed
      cache-tree: mark istate->cache_changed on cache tree invalidation
      cache-tree: mark istate->cache_changed on cache tree update
      cache-tree: mark istate->cache_changed on prime_cache_tree()
      entry.c: update cache_changed if refresh_cache is set in checkout_entry()
      read-cache: save index SHA-1 after reading
      read-cache: split-index mode
      read-cache: mark new entries for split index
      read-cache: save deleted entries in split index
      read-cache: mark updated entries for split index
      split-index: the writing part
      split-index: the reading part
      split-index: do not invalidate cache-tree at read time
      split-index: strip pathname of on-disk replaced entries
      update-index: new options to enable/disable split index mode
      update-index --split-index: do not split if $GIT_DIR is read only
      rev-parse: add --shared-index-path to get shared index path
      read-tree: force split-index mode off on --index-output
      read-tree: note about dropping split-index mode or index version
      read-cache: force split index mode with GIT_TEST_SPLIT_INDEX
      t2104: make sure split index mode is off for the version test
      t1700: new tests for split-index mode
      dir.c: coding style fix
      dir.h: move struct exclude declaration to top level
      prep_exclude: remove the artificial PATH_MAX limit

Nick Alcock (1):
      t5538: move http push tests out to t5542

Pasha Bolokhov (1):
      dir.c:trim_trailing_spaces(): fix for " \ " sequence

Pat Thoyts (2):
      wincred: add install target
      wincred: avoid overwriting configured variables

Philip Oakley (1):
      doc: give some guidelines for error messages

Ramkumar Ramachandra (1):
      rebase -i: handle "Nothing to do" case with autostash

Ramsay Allan Jones (2):
      t0000-*.sh: fix the GIT_SKIP_TESTS sub-tests
      alloc.c: remove the alloc_raw_commit_node() function

René Scharfe (28):
      mailinfo: use strcmp() for string comparison
      pack-objects: use free()+xcalloc() instead of xrealloc()+memset()
      Use starts_with() for C strings instead of memcmp()
      blame: factor out get_next_line()
      blame: simplify prepare_lines()
      wt-status: use argv_array for environment
      wt-status: simplify building of summary limit argument
      sha1_file: replace PATH_MAX buffer with strbuf in prepare_packed_git_one()
      sha1_file: avoid overrunning alternate object base string
      t5000, t5003: simplify commit
      diff-tree: call free_commit_list() instead of duplicating its code
      line-log: use commit_list_append() instead of duplicating its code
      use strbuf_addbuf for adding strbufs
      use strbuf_addch for adding single characters
      merge: simplify merge_trivial() by using commit_list_append()
      commit: use commit_list_append() instead of duplicating its code
      fsck: simplify fsck_commit_buffer() by using commit_list_count()
      annotate: use argv_array
      strbuf: use strbuf_addstr() for adding C strings
      use commit_list_count() to count the members of commit_lists
      run-command: use internal argv_array of struct child_process in run_hook_ve()
      transport: simplify fetch_objs_via_rsync() using argv_array
      fast-import: use hashcmp() for SHA1 hash comparison
      bundle: use internal argv_array of struct child_process in create_bundle()
      remote-testsvn: use internal argv_array of struct child_process in cmd_import()
      unix-socket: remove stale socket before calling chdir()
      use xcalloc() to allocate zero-initialized memory
      use xmemdupz() to allocate copies of strings given by start and length

RomanBelinsky (1):
      SVN.pm::parse_svn_date: allow timestamps with a single-digit hour

Ronnie Sahlberg (27):
      sequencer.c: check for lock failure and bail early in fast_forward_to
      commit.c: check for lock error and return early
      refs.c: add new functions reflog_exists and delete_reflog
      checkout.c: use ref_exists instead of file_exist
      refs.c: change read_ref_at to use the reflog iterators
      enums: remove trailing ',' after last item in enum
      enums: remove trailing ',' after last item in enum
      refs.c: remove ref_transaction_rollback
      refs.c: ref_transaction_commit should not free the transaction
      refs.c: constify the sha arguments for ref_transaction_create|delete|update
      refs.c: allow passing NULL to ref_transaction_free
      refs.c: add a strbuf argument to ref_transaction_commit for error logging
      lockfile.c: add a new public function unable_to_lock_message
      lockfile.c: make lock_file return a meaningful errno on failurei
      refs.c: add an err argument to repack_without_refs
      refs.c: make sure log_ref_setup returns a meaningful errno
      refs.c: verify_lock should set errno to something meaningful
      refs.c: make remove_empty_directories always set errno to something sane
      refs.c: commit_packed_refs to return a meaningful errno on failure
      refs.c: make resolve_ref_unsafe set errno to something meaningful on error
      refs.c: log_ref_write should try to return meaningful errno
      refs.c: make ref_update_reject_duplicates take a strbuf argument for errors
      refs.c: make update_ref_write update a strbuf on failure
      update-ref: use err argument to get error from ref_transaction_commit
      refs.c: remove the onerr argument to ref_transaction_commit
      refs.c: change ref_transaction_update() to do error checking and return status
      refs.c: add a public is_branch function

Stefan Beller (3):
      .mailmap: map different names with the same email address together
      git.1: switch homepage for stats
      .mailmap: combine Stefan Beller's emails

Steffen Prohaska (1):
      completion: handle '!f() { ... }; f' and "!sh -c '...' -" aliases

Stepan Kasal (3):
      Revert "submodules: fix ambiguous absolute paths under Windows"
      t5000, t5003: do not use test_cmp to compare binary files
      mingw: avoid const warning

Stephen P. Smith (1):
      How to keep a project's canonical history correct.

Steve Hoelzer (1):
      environment.c: enable core.preloadindex by default

Tanay Abhra (4):
      string-list: spell all values out that are given to a string_list initializer
      imap-send: use skip_prefix instead of using magic numbers
      string-list: add string_list initializer helper function
      replace memset with string-list initializers

Theodore Leblond (1):
      compat/poll: sleep 1 millisecond to avoid busy wait

Thorsten Glaser (1):
      builtin/tag.c: show tag name to hint in the message editor

Torsten Bögershausen (7):
      utf8.c: use a table for double_width
      utf8: make it easier to auto-update git_wcwidth()
      t5551: fix the 50,000 tag test
      t9001: avoid non-portable '\n' with sed
      Update of unicode_width.h to Unicode Version 7.0
      t0025: rename the test files
      t0027: combinations of core.autocrlf, core.eol and text

Trần Ngọc Quân (1):
      l10n: Init Vietnamese translation

W. Trevor King (1):
      Documentation: mention config sources for @{upstream}

William Giokas (1):
      svn-fe: conform to pep8

Yi EungJun (2):
      http-protocol.txt: Basic Auth is defined in RFC 2617, not RFC 2616
      http: fix charset detection of extract_content_type()

Yiannis Marangos (2):
      wrapper.c: add xpread() similar to xread()
      read-cache.c: verify index file before we opportunistically update it

Zoltan Klinger (1):
      log: fix indentation for --graph --show-signature

brian m. carlson (3):
      blame: correctly handle files regardless of autocrlf
      rebase--merge: fix --skip with two conflicts in a row
      Documentation: fix missing text for rev-parse --verify

Øystein Walle (1):
      config: respect '~' and '~user' in mailmap.file

Øyvind A. Holm (1):
      .gitignore: "git-verify-commit" is a generated file

^ permalink raw reply	[relevance 2%]

* Re: What's cooking in git.git (May 2012, #02; Fri, 4)
  2012-05-10 14:50  7%   ` Junio C Hamano
@ 2012-05-10 15:13  0%     ` Jeff King
  0 siblings, 0 replies; 162+ results
From: Jeff King @ 2012-05-10 15:13 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

On Thu, May 10, 2012 at 07:50:53AM -0700, Junio C Hamano wrote:

> >> "git push" over smart-http lost progress output and this resurrects it.
> >> 
> >> Will merge to 'master'.
> >
> > I noticed that this graduated to master, but not to maint. Any reason?
> 
> Nobody goes direct to 'maint' if it is complex enough to go through
> next/pu cycle these days.
> 
>   $ git log -p Documentation/RelNotes/1.7.11.txt
> 
> will show, for example, jk/maint-config-bogus-section was merged as part
> of the eighth batch (May 2) to 'master', but merged to 'maint' only after
> we had it in 'master' for a bit without hearing any breakage caused by it.

Ah, OK. I thought the progression you used was topic->pu->next->maint.
Did that used to be the case, or am I just crazy? I also don't remember
seeing incremental updates to the release notes in this way. But then I
don't pay too much attention to them during the actual cycle.

Not a criticism (in fact, it makes a lot more sense to me). Just natural
curiosity.

> Just like all the other features listed below the "Fixes since v1.7.10"
> fold, the 'push progress' went into 'master' very recently with a note to
> merge it later to 'maint', and we haven't seen 'later' yet.

Right. I saw only that it was dropped from "What's cooking" and didn't
realize you were keeping state in the release notes.

Thanks for the explanation.

-Peff

^ permalink raw reply	[relevance 0%]

* Re: What's cooking in git.git (May 2012, #02; Fri, 4)
  @ 2012-05-10 14:50  7%   ` Junio C Hamano
  2012-05-10 15:13  0%     ` Jeff King
  0 siblings, 1 reply; 162+ results
From: Junio C Hamano @ 2012-05-10 14:50 UTC (permalink / raw)
  To: Jeff King; +Cc: git

Jeff King <peff@peff.net> writes:

> On Fri, May 04, 2012 at 04:06:18PM -0700, Junio C Hamano wrote:
>
>> --------------------------------------------------
>> [Graduated to "master"]
>> 
>> * jk/maint-push-progress (2012-05-01) 3 commits
>>   (merged to 'next' on 2012-05-01 at 2286130)
>>  + t5541: test more combinations of --progress
>>  + teach send-pack about --[no-]progress
>>  + send-pack: show progress when isatty(2)
>> 
>> "git push" over smart-http lost progress output and this resurrects it.
>> 
>> Will merge to 'master'.
>
> I noticed that this graduated to master, but not to maint. Any reason?

Nobody goes direct to 'maint' if it is complex enough to go through
next/pu cycle these days.

  $ git log -p Documentation/RelNotes/1.7.11.txt

will show, for example, jk/maint-config-bogus-section was merged as part
of the eighth batch (May 2) to 'master', but merged to 'maint' only after
we had it in 'master' for a bit without hearing any breakage caused by it.

Just like all the other features listed below the "Fixes since v1.7.10"
fold, the 'push progress' went into 'master' very recently with a note to
merge it later to 'maint', and we haven't seen 'later' yet.

^ permalink raw reply	[relevance 7%]

* Pull request for master branch with update of de.po
@ 2012-05-08  1:09  6% Jiang Xin
  0 siblings, 0 replies; 162+ results
From: Jiang Xin @ 2012-05-08  1:09 UTC (permalink / raw)
  To: Junio C Hamano, Ralf Thielow, Thomas Rast, Jan Krüger,
	Christian Stimming
  Cc: Git List

Hi Junio and members of German l10n team,

This pull request for master branch includes update of German translations.
Ralf merged their hacks on maint branch to master branch, and resolved
conflicts in de.po which are hard for me to resolved. Thanks Ralf.

The same issue needs Junio to make the final decision:
One commit (fbd994d) by Thomas hacks a file "git-gui/po/de.po",
which is outside of "po/" directory.

The following changes since commit 34875f4a53b9e495622553a671776f66dc37eb2b:

  The eighth batch of topics graduated to 'master' (2012-05-02 14:38:43 -0700)

are available in the git repository at:

  https://github.com/git-l10n/git-po/ master

for you to fetch changes up to 80e4ba8ddb3224f40a1a896b2db8aa3a83cc0dab:

  Merge branch 'maint' into master (2012-05-07 20:44:21 +0200)

----------------------------------------------------------------

Jiang Xin (1):
      l10n: Update git.pot (273 new, 15 removed messages)

Ralf Thielow (6):
      l10n: add new members to German translation team
      l10n: de.po: translate "track" as "beobachten"
      l10n: de.po: translate "remote" as "extern"
      l10n: de.po: collection of improvements
      l10n: de.po: unify translation of "ahead" and "behind"
      Merge branch 'maint' into master

Thomas Rast (4):
      de.po: translate "bare" as "bloß"
      de.po: hopefully uncontroversial fixes
      de.po: translate "bad" as "ungültig" ("invalid")
      de.po: collection of suggestions

 git-gui/po/de.po |    2 +-
 po/TEAMS         |    3 +
 po/de.po         |  479 +++++-----
 po/git.pot       | 2724 ++++++++++++++++++++++++++++++++++++++++--------------
 4 files changed, 2245 insertions(+), 963 deletions(-)

-- 
Jiang Xin

^ permalink raw reply	[relevance 6%]

* Re: What's cooking in git.git (May 2012, #01; Wed, 2)
  2012-05-02 22:12  2% What's cooking in git.git (May 2012, #01; Wed, 2) Junio C Hamano
@ 2012-05-02 22:19  0% ` Junio C Hamano
  0 siblings, 0 replies; 162+ results
From: Junio C Hamano @ 2012-05-02 22:19 UTC (permalink / raw)
  To: git

Junio C Hamano <gitster@pobox.com> writes:

> Here are the topics that have been cooking.  Commits prefixed with '-' are
> only in 'pu' (proposed updates) while commits prefixed with '+' are in 'next'.
>
> The eighth batch of topics in this cycle is now in 'master', the topics in
> 'next' all look ready, and we do not have many topics left in 'pu'.  The
> cycle is going well ;-)
>
> Except for folks with libsvn-perl 1.6.x where x is greater than 9; we know
> how the fix should look like, and we will have it in tomorrow's integration
> round.

Actually, I lied.  Eric's pull request almost crossed with the
announcement, and I decided to redo today's integration cycle to include
the fix, as having to say "GIT_SKIP_TESTS=t91?? make" is just annoying.

^ permalink raw reply	[relevance 0%]

* What's cooking in git.git (May 2012, #01; Wed, 2)
@ 2012-05-02 22:12  2% Junio C Hamano
  2012-05-02 22:19  0% ` Junio C Hamano
  0 siblings, 1 reply; 162+ results
From: Junio C Hamano @ 2012-05-02 22:12 UTC (permalink / raw)
  To: git

Here are the topics that have been cooking.  Commits prefixed with '-' are
only in 'pu' (proposed updates) while commits prefixed with '+' are in 'next'.

The eighth batch of topics in this cycle is now in 'master', the topics in
'next' all look ready, and we do not have many topics left in 'pu'.  The
cycle is going well ;-)

Except for folks with libsvn-perl 1.6.x where x is greater than 9; we know
how the fix should look like, and we will have it in tomorrow's integration
round.

You can find the changes described here in the integration branches of the
repositories listed at

    http://git-blame.blogspot.com/p/git-public-repositories.html

--------------------------------------------------
[New Topics]

* jk/maint-tformat-with-z (2012-05-01) 2 commits
  (merged to 'next' on 2012-05-02 at a0f8af7)
 + log-tree: the previous one is still not quite right
 + log-tree: use custom line terminator in line termination mode

"log -z --pretty=tformat:..." does not terminate each record with NUL
and this is a beginning of an attempt to fix it.  It still is not right
but the patch does not make externally observable behaviour worse.

Will merge to 'master'.

* nd/stream-to-archive (2012-04-30) 9 commits
 - archive-zip: streaming for deflated files
 - archive-zip: streaming for stored files
 - archive-zip: factor out helpers for writing sizes and CRC
 - archive-zip: remove uncompressed_size
 - streaming: void pointer instead of char pointer
 - archive-tar: stream large blobs to tar file
 - archive: delegate blob reading to backend
 - archive-tar: unindent write_tar_entry by one level
 - archive-tar: turn write_tar_entry into blob-writing only

Stream large blobs directly out to archive files without slurping
everything in memory first.  The streaming version of "tar" may need
further fixing.

Expecting another reroll; the second version already had review exchanges
so I didn't pick it up.

* jk/maint-push-progress (2012-05-01) 3 commits
  (merged to 'next' on 2012-05-01 at 2286130)
 + t5541: test more combinations of --progress
 + teach send-pack about --[no-]progress
 + send-pack: show progress when isatty(2)

"git push" over smart-http lost progress output and this resurrects it.

Will merge to 'master'.

* zj/diff-empty-chmod (2012-05-02) 5 commits
  (merged to 'next' on 2012-05-02 at fb8cb11)
 + t4006: Windows do not have /dev/zero
  (merged to 'next' on 2012-05-01 at 5a92787)
 + diff --stat: do not run diff on indentical files
 + diff --stat: report mode-only changes for binary files like text files
 + tests: check --[short]stat output after chmod
 + test: modernize style of t4006

"git diff --stat" used to fully count a binary file with modified
execution bits whose contents is unmodified, which was not right.

Will merge to 'master'.

--------------------------------------------------
[Graduated to "master"]

* ab/i18n (2012-04-30) 3 commits
  (merged to 'next' on 2012-04-30 at 5e7620d)
 + git-commit: remove lego in i18n messages
 + git-commit: remove lego in i18n messages
 + git-branch: remove lego in i18n messages

Fixes some constructs that build messages meant for i18n by concatenating
pieces of strings.

* jc/index-v4 (2012-04-27) 12 commits
  (merged to 'next' on 2012-04-29 at ed71f9c)
 + index-v4: document the entry format
 + unpack-trees: preserve the index file version of original
  (merged to 'next' on 2012-04-19 at 5e4b029)
 + update-index: upgrade/downgrade on-disk index version
 + read-cache.c: write prefix-compressed names in the index
 + read-cache.c: read prefix-compressed names in index on-disk version v4
 + read-cache.c: move code to copy incore to ondisk cache to a helper function
 + read-cache.c: move code to copy ondisk to incore cache to a helper function
 + read-cache.c: report the header version we do not understand
 + read-cache.c: make create_from_disk() report number of bytes it consumed
 + read-cache.c: allow unaligned mapping of the index file
 + cache.h: hide on-disk index details
 + varint: make it available outside the context of pack
 (this branch is tangled with jc/split-blob.)

Trivially shrinks the on-disk size of the index file to save both I/O and
checksum overhead.  It even comes with a technical doc updates.

The topic should give a solid base to build on further updates, with the
code refactoring in its earlier parts, and the backward compatibility
mechanism in its later parts.

* jc/rerere-train (2012-04-30) 1 commit
  (merged to 'next' on 2012-04-30 at 0cc4308)
 + contrib/rerere-train: use installed git-sh-setup

A script written long time ago proved to be useful this week for me ;-)
with a minor tweak.

* jk/doc-asciidoc-inline-literal (2012-04-26) 1 commit
  (merged to 'next' on 2012-04-30 at a52b4e6)
 + docs: stop using asciidoc no-inline-literal

Our documentation was written for an ancient version of AsciiDoc,
making the source not very readable.

* jk/maint-config-bogus-section (2012-04-25) 1 commit
  (merged to 'next' on 2012-04-26 at 9919198)
 + config: reject bogus section names for --rename-section

"git config --rename-section" to rename an existing section into a
bogus one did not check the new name.

* jk/maint-gitweb-test-use-sane-perl (2012-05-01) 2 commits
  (merged to 'next' on 2012-05-01 at 88b3f80)
 + Consistently use perl from /usr/bin/ for scripts
 + t/gitweb-lib: use $PERL_PATH to run gitweb

When using a Perl script on a system where "perl" found on user's $PATH
could be ancient or otherwise broken, we allow builders to specify the
path to a good copy of Perl with $PERL_PATH.  The gitweb test forgot to
use that Perl when running its test.

* ld/git-p4-tags-and-labels (2012-04-25) 7 commits
  (merged to 'next' on 2012-04-25 at 8b959e5)
 + git p4: fix unit tests
  (merged to 'next' on 2012-04-24 at bf55d92)
 + git p4: move verbose to base class
 + git p4: Ignore P4EDITOR if it is empty
 + git p4: Squash P4EDITOR in test harness
 + git p4: fix-up "import/export of labels to/from p4"
  (merged to 'next' on 2012-04-15 at 1b1e9a1)
 + git p4: import/export of labels to/from p4
 + git p4: Fixing script editor checks

Support p4 labels by importing/exporting them as git tags.

* lp/diffstat-with-graph (2012-04-27) 8 commits
  (merged to 'next' on 2012-04-30 at b301202)
 + t4052: work around shells unable to set COLUMNS to 1
 + Merge branch 'zj/mksh-columns-breakage' into lp/diffstat-with-graph
  (merged to 'next' on 2012-04-23 at 8de0747)
 + Prevent graph_width of stat width from falling below min
 + t4052: Test diff-stat output with minimum columns
 + t4052: Adjust --graph --stat output for prefixes
 + Adjust stat width calculations to take --graph output into account
 + Add output_prefix_length to diff_options
 + t4052: test --stat output with --graph
 (this branch uses zj/mksh-columns-breakage; is tangled with nd/columns.)

"log --graph" was not very friendly with "--stat" option and its output
had line breaks at wrong places.

* mm/simple-push (2012-04-24) 7 commits
  (merged to 'next' on 2012-04-30 at 1a571d2)
 + push.default doc: explain simple after upstream
 + push: document the future default change for push.default (matching -> simple)
 + t5570: use explicit push refspec
 + push: introduce new push.default mode "simple"
 + t5528-push-default.sh: add helper functions
 + Undocument deprecated alias 'push.default=tracking'
 + Documentation: explain push.default option a bit more
 (this branch is used by mm/push-default-switch-warning.)

New users tend to work on one branch at a time and push the result
out. The current and upstream modes of push is a more suitable default
mode than matching mode for these people, but neither is surprise-free
depending on how the project is set up. Introduce a "simple" mode that
is a subset of "upstream" but only works when the branch is named the same
between the remote and local repositories.

The plan is to make it the new default when push.default is not
configured.

* nd/i18n (2012-04-25) 11 commits
  (merged to 'next' on 2012-04-30 at d8bbd7a)
 + help: replace underlining "help -a" headers using hyphens with a blank line
  (merged to 'next' on 2012-04-24 at 07965a4)
 + i18n: bundle: mark strings for translation
 + i18n: index-pack: mark strings for translation
 + i18n: apply: update say_patch_name to give translators complete sentence
 + i18n: apply: mark strings for translation
 + i18n: remote: mark strings for translation
 + i18n: make warn_dangling_symref() automatically append \n
 + i18n: help: mark strings for translation
 + i18n: mark relative dates for translation
 + strbuf: convenience format functions with \n automatically appended
 + Makefile: feed all header files to xgettext

More message strings marked for i18n.

* nh/empty-rebase (2012-04-24) 4 commits
  (merged to 'next' on 2012-04-24 at 91d2dfd)
 + git-rebase: add keep_empty flag
 + git-cherry-pick: Add test to validate new options
 + git-cherry-pick: Add keep-redundant-commits option
 + git-cherry-pick: add allow-empty option

"git rebase" learned to optionally keep commits that do not introduce
any change in the original history.

* pw/message-cleanup (2012-04-30) 2 commits
  (merged to 'next' on 2012-04-30 at 703c0c4)
 + remove blank filename in error message
 + remove superfluous newlines in error messages

Many error/warning messages had extra trailing newlines that are
unnecessary.

* pw/p4-various (2012-04-30) 4 commits
  (merged to 'next' on 2012-04-30 at b20428c)
 + git p4: submit files with wildcards
 + git p4: fix writable file after rename or copy
 + git p4: test submit
 + git p4: bring back files in deleted client directory

Miscellaneous updates to "git p4".

* tr/xdiff-fast-hash (2012-05-01) 2 commits
  (merged to 'next' on 2012-05-01 at 5155b98)
 + xdiff: choose XDL_FAST_HASH code on sizeof(long) instead of __WORDSIZE
  (merged to 'next' on 2012-04-24 at ed693cf)
 + xdiff: load full words in the inner loop of xdl_hash_record

Use word-at-a-time comparison to find end of line or NUL (end of buffer),
borrowed from the linux-kernel discussion.

* zj/diff-stat-smaller-num-columns (2012-04-30) 1 commit
  (merged to 'next' on 2012-05-01 at eb68d3b)
 + diff --stat: use less columns for change counts

Spend only minimum number of columns necessary to show the number of lines
in the output from "diff --stat", instead of always allocating 4 columns
even when showing changes that are much smaller than 1000 lines.

* zj/mksh-columns-breakage (2012-04-27) 1 commit
  (merged to 'next' on 2012-04-30 at cce82a8)
 + test-lib: skip test with COLUMNS=1 under mksh
 (this branch is used by lp/diffstat-with-graph and nd/columns.)

A broken shell may not let us set an environment value to an arbitrary
value, interfering with some of the tests. Introduce a test prerequisite
so that we can skip some tests on such a platform.

--------------------------------------------------
[Stalled]

* nl/http-proxy-more (2012-04-26) 8 commits
 - http: try an uppercase version of $proto_proxy
 - http: fix proxy password passing
 - http: fix proxy authentication
 - http: rename HTTP_REAUTH to HTTP_AUTH_RETRY
 - http: Avoid limit of retrying request only twice
 - http: handle proxy authentication failure (error 407)
 - http: handle proxy proactive authentication
 - http: try http_proxy env var when http.proxy config option is not set

Still needs to address review comments from Peff, some of which were
partly addressed with later "fixup" patches queued here.

It probably is a good idea to re-roll the entire series.

* jc/run-hook-env-1 (2012-03-11) 1 commit
 - run_hook(): enhance the interface to pass arbitrary environment

Not urgent.

Updates run_hook() API to be much less specific to "commit".  It would
only be useful if people start doing more interesting things with hooks.

* jc/split-blob (2012-04-03) 6 commits
 - chunked-object: streaming checkout
 - chunked-object: fallback checkout codepaths
 - bulk-checkin: support chunked-object encoding
 - bulk-checkin: allow the same data to be multiply hashed
 - new representation types in the packstream
 - packfile: use varint functions

Not ready.

I finished the streaming checkout codepath, but as explained in
127b177 (bulk-checkin: support chunked-object encoding, 2011-11-30),
these are still early steps of a long and painful journey. At least
pack-objects and fsck need to learn the new encoding for the series
to be usable locally, and then index-pack/unpack-objects needs to
learn it to be used remotely.

Given that I heard a lot of noise that people want large files, and
that I was asked by somebody at GitTogether'11 privately for an
advice on how to pay developers (not me) to help adding necessary
support, I am somewhat dissapointed that the original patch series
that was sent almost two months ago still remains here without much
comments and updates from the developer community. I even made the
interface to the logic that decides where to split chunks easily
replaceable, and I deliberately made the logic in the original patch
extremely stupid to entice others, especially the "bup" fanboys, to
come up with a better logic, thinking that giving people an easy
target to shoot for, they may be encouraged to help out. The plan is
not working :-(.

--------------------------------------------------
[Cooking]

* mh/ref-api-lazy-loose (2012-04-26) 18 commits
 - refs: read loose references lazily
 - read_loose_refs(): eliminate ref_cache argument
 - struct ref_dir: store a reference to the enclosing ref_cache
 - search_for_subdir(): return (ref_dir *) instead of (ref_entry *)
 - get_ref_dir(): add function for getting a ref_dir from a ref_entry
 - read_loose_refs(): rename function from get_ref_dir()
 - refs: wrap top-level ref_dirs in ref_entries
 - find_containing_dir(): use strbuf in implementation of this function
 - bisect: copy filename string obtained from git_path()
 - do_for_each_reflog(): reuse strbuf across recursive function calls
 - do_for_each_reflog(): use a strbuf to hold logfile name
 - do_for_each_reflog(): return early on error
 - get_ref_dir(): take the containing directory as argument
 - refs.c: extract function search_for_subdir()
 - get_ref_dir(): require that the dirname argument ends in '/'
 - get_ref_dir(): rename "base" parameter to "dirname"
 - get_ref_dir(): use a strbuf to hold refname
 - get_ref_dir(): return early if directory cannot be read

Refs API is updated to lazily read sub-hierarchies of refs/ namespace,
so that we do not have to grab everything from the filesystem when we
are only interested in listing branches, for example.

This looked mostly sane. Did I miss "needs more work" review comments?

* nd/columns (2012-04-27) 10 commits
  (merged to 'next' on 2012-04-30 at 93bb157)
 + tag: add --column
 + column: support piping stdout to external git-column process
 + status: add --column
 + branch: add --column
 + help: reuse print_columns() for help -a
 + column: add dense layout support
 + t9002: work around shells that are unable to set COLUMNS to 1
 + column: add columnar layout
 + Stop starting pager recursively
 + Add column layout skeleton and git-column

A couple of commands learn --column option to produce columnar output.

Will merge to 'master'.

* nd/threaded-index-pack (2012-04-19) 4 commits
 - index-pack: disable threading if NO_PREAD is defined
 - index-pack: support multithreaded delta resolving
 - index-pack: split second pass obj handling into own function
 - compat/win32/pthread.h: Add an pthread_key_delete() implementation

* th/difftool-diffall (2012-04-23) 8 commits
  (merged to 'next' on 2012-05-02 at fdc9f60)
 + difftool: print list of valid tools with '--tool-help'
 + difftool: teach difftool to handle directory diffs
 + difftool: eliminate setup_environment function
 + difftool: stop appending '.exe' to git
 + difftool: remove explicit change of PATH
 + difftool: exit(0) when usage is printed
 + difftool: add '--no-gui' option
 + difftool: parse options using Getopt::Long

Rolls the two-directory-diff logic from diffall script (in contrib/) into
"git difftool" framework. 

Will merge to 'master'.

* mm/push-default-switch-warning (2012-04-26) 2 commits
 - t5541: warning message is given even with --quiet
 - push: start warning upcoming default change for push.default

Will squash the two, but this has to wait for a few release cycles.

--------------------------------------------------
[Discarded]

* cb/daemon-test-race-fix (2012-04-27) 2 commits
  (merged to 'next' on 2012-04-27 at 84bbcf8)
 + Revert "git-daemon wrapper to wait until daemon is ready"
  (merged to 'next' on 2012-04-24 at d5c30be)
 + git-daemon wrapper to wait until daemon is ready

Fix race condition between starting and waiting for git-daemon in the
test.

Reverted from 'next' to replace it with js/daemon-test-race-fix.

^ permalink raw reply	[relevance 2%]

Results 1-162 of 162 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2012-05-02 22:12  2% What's cooking in git.git (May 2012, #01; Wed, 2) Junio C Hamano
2012-05-02 22:19  0% ` Junio C Hamano
2012-05-04 23:06     What's cooking in git.git (May 2012, #02; Fri, 4) Junio C Hamano
2012-05-10 13:12     ` Jeff King
2012-05-10 14:50  7%   ` Junio C Hamano
2012-05-10 15:13  0%     ` Jeff King
2012-05-08  1:09  6% Pull request for master branch with update of de.po Jiang Xin
2014-07-27 23:18  2% [ANNOUNCE] Git v2.1.0-rc0 Junio C Hamano
2015-07-27 20:47  2% [ANNOUNCE] Git v2.5.0 Junio C Hamano
2015-09-02 20:39  3% [ANNOUNCE] Git v2.6.0-rc0 Junio C Hamano
2015-09-09  0:09  3% [ANNOUNCE] Git v2.6.0-rc1 Junio C Hamano
2015-09-21 21:49  3% [ANNOUNCE] Git v2.6.0-rc3 Junio C Hamano
2015-09-28 23:20  3% [ANNOUNCE] Git v2.6.0 Junio C Hamano
2016-01-04 23:43  2% [ANNOUNCE] Git v2.7.0 Junio C Hamano
2016-02-26 23:41  2% [ANNOUNCE] Git v2.8.0-rc0 Junio C Hamano
2016-03-04 22:31  2% [ANNOUNCE] Git v2.8.0-rc1 Junio C Hamano
2016-03-10 23:04  2% [ANNOUNCE] Git v2.8.0-rc2 Junio C Hamano
2016-03-16 22:24  2% [ANNOUNCE] Git v2.8.0-rc3 Junio C Hamano
2016-03-21 21:32  2% [ANNOUNCE] Git v2.8.0-rc4 Junio C Hamano
2016-03-28 22:42  2% [ANNOUNCE] Git v2.8.0 Junio C Hamano
2016-05-23 23:23  3% [ANNOUNCE] Git v2.9.0-rc0 Junio C Hamano
2016-05-31 21:53  3% [ANNOUNCE] Git v2.9.0-rc1 Junio C Hamano
2016-06-07  5:57  3% [ANNOUNCE] Git v2.9.0-rc2 Junio C Hamano
2016-06-13 19:45  3% [ANNOUNCE] Git v2.9.0 Junio C Hamano
2016-08-14 22:47  2% [ANNOUNCE] Git v2.10.0-rc0 Junio C Hamano
2016-08-19 23:10  2% [ANNOUNCE] Git v2.10.0-rc1 Junio C Hamano
2016-08-26 22:31  2% [ANNOUNCE] Git v2.10.0-rc2 Junio C Hamano
2016-09-03  2:17  2% [ANNOUNCE] Git v2.10.0 Junio C Hamano
2016-10-31 21:49  2% [ANNOUNCE] Git v2.11.0-rc0 Junio C Hamano
2016-11-11 23:27  2% [ANNOUNCE] Git v2.11.0-rc1 Junio C Hamano
2016-11-17 22:24  2% [ANNOUNCE] Git v2.11.0-rc2 Junio C Hamano
2016-11-23 23:21  2% [ANNOUNCE] Git v2.11.0-rc3 Junio C Hamano
2016-11-29 21:21  2% [ANNOUNCE] Git v2.11.0 Junio C Hamano
2017-02-03 21:51  2% [ANNOUNCE] Git v2.12.0-rc0 Junio C Hamano
2017-02-10 21:29  2% [ANNOUNCE] Git v2.12.0-rc1 Junio C Hamano
2017-04-27  2:55  2% [ANNOUNCE] Git v2.13.0-rc1 Junio C Hamano
2017-05-04 15:15  2% [ANNOUNCE] Git v2.13.0-rc2 Junio C Hamano
2017-05-10  0:03  2% [ANNOUNCE] Git v2.13.0 Junio C Hamano
2017-08-04 16:54  3% [ANNOUNCE] Git v2.14.0 Junio C Hamano
2017-10-05  5:55  2% [ANNOUNCE] Git v2.15.0-rc0 Junio C Hamano
2017-10-11  6:35  2% [ANNOUNCE] Git v2.15.0-rc1 Junio C Hamano
2017-10-20  6:49  2% [ANNOUNCE] Git v2.15.0-rc2 Junio C Hamano
2017-12-10 21:21  6% [PATCH 0/3] fixes for split index mode Thomas Gummerer
2017-12-12 14:10     git svn dcommit error: Cannot accept non-LF line endings in 'svn:log' property Bennett, Brian
2017-12-14  0:20  5% ` [PATCH] git-svn: convert CRLF to LF in commit message to SVN Eric Wong
2017-12-14 20:46  4%   ` Bennett, Brian
2017-12-29  4:30  2% [ANNOUNCE] Git v2.16.0-rc0 Junio C Hamano
2018-01-05 23:30  2% [ANNOUNCE] Git v2.16.0-rc1 Junio C Hamano
2018-01-18  5:54  2% [ANNOUNCE] Git v2.16.0 Junio C Hamano
2018-03-16  0:57  3% [ANNOUNCE] Git v2.17.0-rc0 Junio C Hamano
2018-03-28 19:56  2% [ANNOUNCE] Git v2.17.0-rc2 Junio C Hamano
2018-11-01  9:59     What's cooking in git.git (Nov 2018, #01; Thu, 1) Junio C Hamano
2018-11-01 16:07     ` master updated? (was Re: What's cooking in git.git (Nov 2018, #01; Thu, 1)) Derrick Stolee
2018-11-02  0:04  6%   ` Junio C Hamano
2018-11-02  5:10  1% What's cooking in git.git (Nov 2018, #02; Fri, 2) Junio C Hamano
2018-11-18 14:20  2% [ANNOUNCE] Git v2.20.0-rc0 Junio C Hamano
2018-11-21 15:20  2% [ANNOUNCE] Git v2.20.0-rc1 Junio C Hamano
2018-12-01 14:58  2% [ANNOUNCE] Git v2.20.0-rc2 Junio C Hamano
2018-12-03 20:45  0% ` Johannes Schindelin
2018-12-09  8:43  2% [ANNOUNCE] Git v2.20.0 Junio C Hamano
2019-05-19  9:04  2% [ANNOUNCE] Git v2.22.0-rc1 Junio C Hamano
2019-05-19 20:30  0% ` Johannes Schindelin
2019-06-03 20:23  2% [ANNOUNCE] Git v2.22.0-rc3 Junio C Hamano
2019-06-04  1:32  0% ` Ben Humphreys
2019-06-04  1:47  0% ` Bhaskar Chowdhury
2019-06-04 14:45  0% ` Git for Windows v2.22.0-rc3, was " Johannes Schindelin
2019-06-07 21:31  2% [ANNOUNCE] Git v2.22.0 Junio C Hamano
2019-06-07 22:48  0% ` Bhaskar Chowdhury
2019-10-18  6:29  2% [ANNOUNCE] Git v2.24.0-rc0 Junio C Hamano
2019-10-24  6:00  2% [ANNOUNCE] Git v2.24.0-rc1 Junio C Hamano
2019-10-30  7:14  2% [ANNOUNCE] Git v2.24.0-rc2 Junio C Hamano
2019-11-04  5:36  2% [ANNOUNCE] Git v2.24.0 Junio C Hamano
2020-03-05 22:02  2% [ANNOUNCE] Git v2.26.0-rc0 Junio C Hamano
2020-03-10 14:57  2% [ANNOUNCE] Git v2.26.0-rc1 Junio C Hamano
2020-03-10 17:40     ` Jeff King
2020-03-11  5:25  6%   ` Elijah Newren
2020-03-11  5:13     [PATCH 0/2] Fix 2.26.0 rebase regression and documentation shortcoming Elijah Newren via GitGitGadget
2020-03-11 15:30  5% ` [PATCH v2 " Elijah Newren via GitGitGadget
2020-03-16 23:25  2% [ANNOUNCE] Git v2.26.0-rc2 Junio C Hamano
2020-03-23  1:10  2% [ANNOUNCE] Git v2.26.0 Junio C Hamano
2020-05-14 23:27  2% [ANNOUNCE] Git v2.27.0-rc0 Junio C Hamano
2020-05-14 23:28  2% Junio C Hamano
2020-05-20 19:17  2% [ANNOUNCE] Git v2.27.0-rc1 Junio C Hamano
2020-05-26 18:47  2% [ANNOUNCE] Git v2.27.0-rc2 Junio C Hamano
2020-06-01 16:34  2% [ANNOUNCE] Git v2.27.0 Junio C Hamano
2020-06-02 19:21  5% Huge push upload despite only having a tiny change Elijah Newren
2020-10-05 22:41  3% [ANNOUNCE] Git v2.29.0-rc0 Junio C Hamano
2020-10-09 15:58  3% [ANNOUNCE] Git v2.29.0-rc1 Junio C Hamano
2020-10-19 18:13  3% [ANNOUNCE] Git v2.29.0 Junio C Hamano
2020-12-14 20:00  3% [ANNOUNCE] Git v2.30.0-rc0 Junio C Hamano
2020-12-19  4:34  3% [ANNOUNCE] Git v2.30.0-rc1 Junio C Hamano
2020-12-28 19:09  3% [ANNOUNCE] Git v2.30.0 Junio C Hamano
2021-02-16 16:31  7% [PATCH 0/1] blame: remove unnecessary use of get_commit_info() Rafael Silva
2021-02-16 18:35  0% ` Derrick Stolee
2021-02-17 14:54  6% ` [PATCH v2 " Rafael Silva
2021-02-17 14:54  6%   ` [PATCH v2 1/1] " Rafael Silva
2021-02-16 20:12  4% [PATCH] t/perf: handle worktrees as test repos Jeff King
2021-02-16 21:13  0% ` Johannes Schindelin
2021-02-18  2:11  1% What's cooking in git.git (Feb 2021, #03; Wed, 17) Junio C Hamano
2021-02-26  2:03  2% [ANNOUNCE] Git v2.31.0-rc0 Junio C Hamano
2021-02-26  7:09     [PATCH v2] t/perf worktree improvements Jeff King
2021-02-26  7:11  5% ` [PATCH v2 1/2] t/perf: handle worktrees as test repos Jeff King
2021-03-03 10:14  2% [ANNOUNCE] Git v2.31.0-rc1 Junio C Hamano
2021-03-09 18:05  2% [ANNOUNCE] Git v2.31.0-rc2 Junio C Hamano
2021-03-15 19:30  2% [ANNOUNCE] Git v2.31.0 Junio C Hamano
2021-05-17  7:06  3% [ANNOUNCE] Git v2.32.0-rc0 Junio C Hamano
2021-05-22 14:21  3% [ANNOUNCE] Git v2.32.0-rc1 Junio C Hamano
2021-05-28  6:13  3% [ANNOUNCE] Git v2.32.0-rc2 Junio C Hamano
2021-06-02  8:29  3% [ANNOUNCE] Git v2.32.0-rc3 Junio C Hamano
2021-06-06 12:40  3% [ANNOUNCE] Git v2.32.0 Junio C Hamano
2021-08-07  0:07  3% [ANNOUNCE] Git v2.33.0-rc1 Junio C Hamano
2021-08-11 23:22  3% [ANNOUNCE] Git v2.33.0-rc2 Junio C Hamano
2021-08-16 23:06  3% [ANNOUNCE] Git v2.33.0 Junio C Hamano
2021-09-23 23:22  2% What's cooking in git.git (Sep 2021, #07; Thu, 23) Junio C Hamano
2021-10-30  0:17  3% [ANNOUNCE] Git v2.34.0-rc0 Junio C Hamano
2021-11-03 23:17  3% [ANNOUNCE] Git v2.34.0-rc1 Junio C Hamano
2022-02-24 20:38     [PATCH 0/7] Commit-graph: Generation Number v2 Fixes, v3 implementation Derrick Stolee via GitGitGadget
2022-02-24 20:38     ` [PATCH 3/7] commit-graph: start parsing generation v2 (again) Derrick Stolee via GitGitGadget
2022-02-28 15:18       ` Patrick Steinhardt
2022-02-28 16:23         ` Derrick Stolee
2022-02-28 16:59           ` Patrick Steinhardt
2022-02-28 18:44             ` Derrick Stolee
2022-03-01  9:46  6%           ` Patrick Steinhardt
2022-03-01 10:35  0%             ` Patrick Steinhardt
2022-03-01 14:06  0%               ` Derrick Stolee
2022-03-01 14:53  0%                 ` Patrick Steinhardt
2022-03-01  0:08     [PATCH 00/13] submodule: convert parts of 'update' to C Glen Choo
2022-03-01  0:08     ` [PATCH 06/13] submodule--helper: get remote names from any repository Glen Choo
2022-03-01  2:46  6%   ` Junio C Hamano
2022-03-01  4:26  0%     ` Glen Choo
2022-03-01 18:43     [PATCH v6 00/30] Builtin FSMonitor Part 2 Jeff Hostetler via GitGitGadget
2022-03-22 17:59  1% ` [PATCH v7 00/29] " Jeff Hostetler via GitGitGadget
2022-03-24 16:49  2%   ` [PATCH v8 00/30] " Jeff Hostetler via GitGitGadget
2022-03-25 18:02  3%     ` [PATCH v9 " Jeff Hostetler via GitGitGadget
2022-03-25 19:02  0%       ` rsbecker
2022-04-04 20:43  3% [ANNOUNCE] Git v2.36.0-rc0 Junio C Hamano
2022-04-08 23:30  3% [ANNOUNCE] Git v2.36.0-rc1 Junio C Hamano
2022-04-12 17:03  3% [ANNOUNCE] Git v2.36.0-rc2 Junio C Hamano
2022-04-18 16:27  3% [ANNOUNCE] Git v2.36.0 Junio C Hamano
2022-06-14  1:46  3% [ANNOUNCE] Git v2.37.0-rc0 Junio C Hamano
2022-06-18  1:55  3% [ANNOUNCE] Git v2.37.0-rc1 Junio C Hamano
2022-06-22 19:32  3% [ANNOUNCE] Git v2.37.0-rc2 Junio C Hamano
2022-06-27 18:22  3% [ANNOUNCE] Git v2.37.0 Junio C Hamano
2022-09-16  2:37  3% [ANNOUNCE] Git v2.38.0-rc0 Junio C Hamano
2022-09-22  0:11  3% [ANNOUNCE] Git v2.38.0-rc1 Junio C Hamano
2022-09-27 21:10  3% [ANNOUNCE] Git v2.38.0-rc2 Junio C Hamano
2022-10-03 17:26  3% [ANNOUNCE] Git v2.38.0 Junio C Hamano
2022-11-23  7:25  3% [ANNOUNCE] Git v2.39.0-rc0 Junio C Hamano
2022-11-30  6:12  3% [ANNOUNCE] Git v2.39.0-rc1 Junio C Hamano
2022-12-06  4:00  3% [ANNOUNCE] Git v2.39.0-rc2 Junio C Hamano
2022-12-12 13:43  3% [ANNOUNCE] Git v2.39.0 Junio C Hamano
2023-02-24 20:24  4% [ANNOUNCE] Git v2.40.0-rc0 Junio C Hamano
2023-03-01 17:40  3% [ANNOUNCE] Git v2.40.0-rc1 Junio C Hamano
2023-03-07 19:47  3% [ANNOUNCE] Git v2.40.0-rc2 Junio C Hamano
2023-03-13 17:48  3% [ANNOUNCE] Git v2.40.0 Junio C Hamano
2023-05-16  3:42  3% [ANNOUNCE] Git v2.41.0-rc0 Junio C Hamano
2023-05-19 17:39  3% [ANNOUNCE] Git v2.41.0-rc1 Junio C Hamano
2023-05-24 21:41  3% [ANNOUNCE] Git v2.41.0-rc2 Junio C Hamano
2023-06-01 10:11  3% [ANNOUNCE] Git v2.41.0 Junio C Hamano
2023-08-04 19:30  3% [ANNOUNCE] Git v2.42.0-rc0 Junio C Hamano
2023-08-10 16:45  3% [ANNOUNCE] Git v2.42.0-rc1 Junio C Hamano
2023-08-15 21:22  3% [ANNOUNCE] Git v2.42.0-rc2 Junio C Hamano
2023-08-21 18:12  3% [ANNOUNCE] Git v2.42.0 Junio C Hamano
2023-11-02 17:36  4% [ANNOUNCE] Git v2.43.0-rc0 Junio C Hamano
2023-11-08 17:33  4% [ANNOUNCE] Git v2.43.0-rc1 Junio C Hamano
2023-11-14 17:25  4% [ANNOUNCE] Git v2.43.0-rc2 Junio C Hamano
2023-11-20 17:01  3% [ANNOUNCE] Git v2.43.0 Junio C Hamano
2024-02-09 17:24  3% [ANNOUNCE] Git v2.44.0-rc0 Junio C Hamano
2024-02-14 17:04  3% [ANNOUNCE] Git v2.44.0-rc1 Junio C Hamano
2024-02-20 17:09  3% [ANNOUNCE] Git v2.44.0-rc2 Junio C Hamano
2024-02-23 17:17  3% [ANNOUNCE] Git v2.44.0 Junio C Hamano
2024-03-10 19:50     [PATCH v2 0/2] Allow disabling advice shown after merge conflicts Philippe Blain via GitGitGadget
2024-03-16 21:16  3% ` [PATCH v3 " Philippe Blain via GitGitGadget
2024-03-18 16:31  0%   ` Junio C Hamano
2024-03-25 10:48  0%   ` Phillip Wood
2024-03-25 16:57  0%     ` Junio C Hamano
2024-03-18 10:52  4% [PATCH 00/15] refs: introduce `--auto` to pack refs as needed Patrick Steinhardt
2024-04-19 17:14  3% [ANNOUNCE] Git v2.45.0-rc0 Junio C Hamano
2024-04-24 17:07  3% [ANNOUNCE] Git v2.45.0-rc1 Junio C Hamano
2024-04-29 17:12  3% [ANNOUNCE] Git v2.45.0 Junio C Hamano

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).